From 6ad0e420935bb558141da4125cafc6738b002293 Mon Sep 17 00:00:00 2001 From: Aleksey Samoilov Date: Sun, 9 Feb 2025 19:30:54 +0400 Subject: [PATCH] Add icons to buttons, connect buttons to slots --- build/lib/tileos_welcome/__init__.py | 1 + .../lib/tileos_welcome/data}/label.png | Bin build/lib/tileos_welcome/data/resources.qrc | 12 + .../lib/tileos_welcome/data}/tileos-logo.svg | 0 .../data}/tileos-welcome.desktop | 0 build/lib/tileos_welcome/main.py | 141 +++ build/lib/tileos_welcome/resources.py | 1020 +++++++++++++++++ build/lib/tileos_welcome/ui/mainwindow.ui | 303 +++++ build/lib/tileos_welcome/ui/warning.ui | 73 ++ build/lib/tileos_welcome/ui_mainwindow.py | 181 +++ build/lib/tileos_welcome/ui_warning.py | 41 + dist/tileos_welcome-0.9.0-py3.11.egg | Bin 28659 -> 50138 bytes setup.py | 6 +- tileos_welcome.egg-info/PKG-INFO | 9 + tileos_welcome.egg-info/SOURCES.txt | 18 + tileos_welcome.egg-info/dependency_links.txt | 1 + tileos_welcome.egg-info/entry_points.txt | 2 + tileos_welcome.egg-info/top_level.txt | 1 + .../{resources => data}/icons/contrib.svg | 0 tileos_welcome/data/icons/display.svg | 9 + .../{resources => data}/icons/doc.svg | 0 .../{resources => data}/icons/exit.svg | 0 .../{resources => data}/icons/gparted.svg | 0 tileos_welcome/data/icons/gtk-theme.svg | 28 + tileos_welcome/data/icons/input.svg | 25 + .../icons/install-system.svg | 0 .../{resources => data}/icons/issue.svg | 0 tileos_welcome/data/icons/shell.svg | 11 + tileos_welcome/data/icons/software.svg | 7 + tileos_welcome/data/icons/sway.png | Bin 0 -> 9179 bytes .../{resources => data}/icons/telegram.svg | 0 tileos_welcome/data/icons/theme.svg | 17 + .../{resources => data}/icons/web.svg | 0 tileos_welcome/data/label.png | Bin 0 -> 12324 bytes tileos_welcome/data/resources.qrc | 12 + tileos_welcome/data/tileos-logo.svg | 1 + tileos_welcome/data/tileos-welcome.desktop | 7 + tileos_welcome/main.py | 62 +- tileos_welcome/resources.py | 1020 +++++++++++++++++ tileos_welcome/ui/mainwindow.ui | 69 +- tileos_welcome/ui/warning.ui | 73 ++ tileos_welcome/ui_mainwindow.py | 50 +- tileos_welcome/ui_warning.py | 41 + 43 files changed, 3189 insertions(+), 52 deletions(-) create mode 100644 build/lib/tileos_welcome/__init__.py rename {tileos_welcome/resources => build/lib/tileos_welcome/data}/label.png (100%) create mode 100644 build/lib/tileos_welcome/data/resources.qrc rename {tileos_welcome/resources => build/lib/tileos_welcome/data}/tileos-logo.svg (100%) rename {tileos_welcome/resources => build/lib/tileos_welcome/data}/tileos-welcome.desktop (100%) create mode 100644 build/lib/tileos_welcome/main.py create mode 100644 build/lib/tileos_welcome/resources.py create mode 100644 build/lib/tileos_welcome/ui/mainwindow.ui create mode 100644 build/lib/tileos_welcome/ui/warning.ui create mode 100644 build/lib/tileos_welcome/ui_mainwindow.py create mode 100644 build/lib/tileos_welcome/ui_warning.py create mode 100644 tileos_welcome.egg-info/PKG-INFO create mode 100644 tileos_welcome.egg-info/SOURCES.txt create mode 100644 tileos_welcome.egg-info/dependency_links.txt create mode 100644 tileos_welcome.egg-info/entry_points.txt create mode 100644 tileos_welcome.egg-info/top_level.txt rename tileos_welcome/{resources => data}/icons/contrib.svg (100%) create mode 100644 tileos_welcome/data/icons/display.svg rename tileos_welcome/{resources => data}/icons/doc.svg (100%) rename tileos_welcome/{resources => data}/icons/exit.svg (100%) rename tileos_welcome/{resources => data}/icons/gparted.svg (100%) create mode 100644 tileos_welcome/data/icons/gtk-theme.svg create mode 100644 tileos_welcome/data/icons/input.svg rename tileos_welcome/{resources => data}/icons/install-system.svg (100%) rename tileos_welcome/{resources => data}/icons/issue.svg (100%) create mode 100644 tileos_welcome/data/icons/shell.svg create mode 100644 tileos_welcome/data/icons/software.svg create mode 100644 tileos_welcome/data/icons/sway.png rename tileos_welcome/{resources => data}/icons/telegram.svg (100%) create mode 100644 tileos_welcome/data/icons/theme.svg rename tileos_welcome/{resources => data}/icons/web.svg (100%) create mode 100644 tileos_welcome/data/label.png create mode 100644 tileos_welcome/data/resources.qrc create mode 100644 tileos_welcome/data/tileos-logo.svg create mode 100644 tileos_welcome/data/tileos-welcome.desktop create mode 100644 tileos_welcome/resources.py create mode 100644 tileos_welcome/ui/warning.ui create mode 100644 tileos_welcome/ui_warning.py diff --git a/build/lib/tileos_welcome/__init__.py b/build/lib/tileos_welcome/__init__.py new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/build/lib/tileos_welcome/__init__.py @@ -0,0 +1 @@ + diff --git a/tileos_welcome/resources/label.png b/build/lib/tileos_welcome/data/label.png similarity index 100% rename from tileos_welcome/resources/label.png rename to build/lib/tileos_welcome/data/label.png diff --git a/build/lib/tileos_welcome/data/resources.qrc b/build/lib/tileos_welcome/data/resources.qrc new file mode 100644 index 0000000..eb514c7 --- /dev/null +++ b/build/lib/tileos_welcome/data/resources.qrc @@ -0,0 +1,12 @@ + + + icons/contrib.svg + icons/doc.svg + icons/exit.svg + icons/gparted.svg + icons/install-system.svg + icons/issue.svg + icons/telegram.svg + icons/web.svg + + diff --git a/tileos_welcome/resources/tileos-logo.svg b/build/lib/tileos_welcome/data/tileos-logo.svg similarity index 100% rename from tileos_welcome/resources/tileos-logo.svg rename to build/lib/tileos_welcome/data/tileos-logo.svg diff --git a/tileos_welcome/resources/tileos-welcome.desktop b/build/lib/tileos_welcome/data/tileos-welcome.desktop similarity index 100% rename from tileos_welcome/resources/tileos-welcome.desktop rename to build/lib/tileos_welcome/data/tileos-welcome.desktop diff --git a/build/lib/tileos_welcome/main.py b/build/lib/tileos_welcome/main.py new file mode 100644 index 0000000..926d61d --- /dev/null +++ b/build/lib/tileos_welcome/main.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 + +# This file is part of Ubuntu Sway Remix project + +# SPDX-FileCopyrightText: 2022 Aleksey Samoilov +# SPDX-License-Identifier: GPL-3.0-or-later + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import signal +import sys +import subprocess +from PyQt6.QtWidgets import (QApplication, QMainWindow) +from PyQt6.QtGui import QPixmap, QIcon +from PyQt6.QtCore import Qt, QDir +from tileos_welcome.ui_mainwindow import Ui_MainWindow + +def get_config_home(): + config_home = os.getenv('XDG_CONFIG_HOME') if os.getenv('XDG_CONFIG_HOME') else os.path.join( + os.getenv("HOME"), ".config/") + return config_home + +dir_name = os.path.dirname(__file__) +config_home = get_config_home() +user = os.getlogin() +desktop_file = os.path.join(dir_name, "data/tileos-welcome.desktop") +autostart_dir = os.path.join(config_home, "autostart/") +icons = os.path.join(dir_name, "data/icons") +autostart_desktop_file = os.path.join(config_home, autostart_dir, "tileos-welcome.desktop") + +class MainWindow(QMainWindow): + def __init__(self): + super(MainWindow, self).__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + # Icons for buttons + QDir.addSearchPath("icons", icons) + + # Background + page_label = os.path.join(dir_name, "data/label.png") + page_pixmap = QPixmap(page_label).scaled(600, 300, Qt.AspectRatioMode.KeepAspectRatio) + self.ui.logo.setPixmap(page_pixmap) + self.ui.logo2.setPixmap(page_pixmap) + + # Autostart (copying tileos-welcome.desktop to ~/.config/autostart) + if os.path.isfile(autostart_desktop_file): + self.ui.checkAutostart.setChecked(True) + + # Detect running compositor and adapt Wiki button text to it + if os.getenv("SWAYSOCK"): + self.ui.btnWiki.setText("Sway Wiki") + + # Page 1 + self.ui.btnGprd.clicked.connect(self.on_clicked_partition) + self.ui.btnGprd.setIcon(QIcon("icons:gparted.svg")) + self.ui.btnWebsite.clicked.connect(self.on_clicked_website) + self.ui.btnWebsite.setIcon(QIcon("icons:web.svg")) + self.ui.btnIssue.clicked.connect(self.on_clicked_tracker) + self.ui.btnIssue.setIcon(QIcon("icons:issue.svg")) + self.ui.btnContrib.clicked.connect(self.on_clicked_contribute) + self.ui.btnContrib.setIcon(QIcon("icons:contrib.svg")) + self.ui.btnTelegram.clicked.connect(self.on_clicked_telegram) + self.ui.btnTelegram.setIcon(QIcon("icons:telegram.svg")) + self.ui.btnNext.clicked.connect(self.on_page_switch) + self.ui.btnNext.setIcon(QIcon.fromTheme("go-next")) + self.ui.btnQuit.clicked.connect(self.exitApp) + self.ui.btnQuit.setIcon(QIcon("icons:exit.svg")) + + # Page 2 + self.ui.btnGTK.clicked.connect(self.on_clicked_gtk_theme) + self.ui.btnKvantum.clicked.connect(self.on_clicked_qt_theme) + self.ui.btnDisplay.clicked.connect(self.on_clicked_display_settings) + self.ui.btnInput.clicked.connect(self.on_clicked_input_settings) + self.ui.btnPrev.clicked.connect(self.on_page_switch) + self.ui.btnExit.clicked.connect(self.exitApp) + + def on_clicked_partition(self): + subprocess.run("xhost +si:localuser:root && pkexec /usr/sbin/gparted && xhost -si:localuser:root &", shell=True) + + def on_clicked_website(self): + subprocess.run(["xdg-open", "https://tile-os.com"]) + + # TODO documentation link + + def on_clicked_tracker(self): + subprocess.run(["xdg-open", "https://gitlab.com/tile-os/tileos/-/issues"]) + + def on_clicked_contribute(self): + subprocess.run(["xdg-open", "https://gitlab.com/tile-os"]) + + def on_clicked_telegram(self): + subprocess.run(["xdg-open", "https://t.me/tile_os"]) + + def on_clicked_gtk_theme(self): + subprocess.run("/usr/bin/nwg-look") + + def on_clicked_qt_theme(self): + subprocess.run("/usr/bin/kvantummanager") + + def on_clicked_display_settings(self): + subprocess.run("/usr/bin/nwg-displays") + + # TODO shell selector + + def on_clicked_input_settings(self): + subprocess.run("/usr/bin/sway-input-config") + + # TODO software manager + + def on_page_switch(self): + if self.ui.stackedWidget.currentIndex() == 0: + self.ui.stackedWidget.setCurrentIndex(1) + else: + self.ui.stackedWidget.setCurrentIndex(0) + + def exitApp(self): + self.close() + +def main(): + app = QApplication(["Welcome to TileOS!"]) + app.setDesktopFileName("tileos-welcome") + win = MainWindow() + win.show() + sys.exit(app.exec()) + +if __name__ == "__main__": + signal.signal(signal.SIGINT, signal.SIG_DFL) + main() \ No newline at end of file diff --git a/build/lib/tileos_welcome/resources.py b/build/lib/tileos_welcome/resources.py new file mode 100644 index 0000000..ab08fd5 --- /dev/null +++ b/build/lib/tileos_welcome/resources.py @@ -0,0 +1,1020 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.4.2 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x07\xac\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a\x0a\ +\x00\x00\x03\x8d\ +(\ +\xb5/\xfd`\xf2\x0a\x1d\x1c\x00\x06q|!0\x8f\xd2\ +\x06[\x9c:{\xd2\xcd>\xbd\xf6\x12\xcfE\xea\xc2\x1a\ +7\x91\xc8\xde\x5c\xc1n\xa56\x07\x05\x0c\x96\x10\x8a\x00\ +k\x00k\x00m\x7fE\xd4\x02\x16b:\xe2Y\xbc\xbd\ +\xeb\xa3\xbd3\x04\x08P(\x93\x07\x07\xb3\x80\x89\x80\xd0\ +\xb40\xcf\xde\xa1\xb6\xd7v\xff\xec\xf2\xbc\x0ej\x9f,\ +\xbd\x14\xea\xfcJ\xb1\x0c\xaa\x0d\xcf\x1ac%0\x8f\x86\ +bn'\x80a\x994\x11\x8a\x09\xe6\xe1@\xc1\xb0T\ +Jb\x89P\x10\x14@\x01\x83\xccCbbR\xa9p\ +\xb0\xb0H &\x0e\x92b\x9e\xccCbi\x98\x5c\x8a\ +q\xdc\xdd\x1d\x10\x15\x13\x96\x17\xbb\x5c.\x0e\x87\x00\x85\ +\xc5\x22a\x1e\x15\x09J\xc4EAXT\x08\x02\xf5;\ +\xbb\xc6\xd1\xbeKgYM\xa1\xb2(<\xe2dd\x8d\ +'\x0fm\xaf5\x9e/\x8f\x85]\xa8\xd0a\xf3\xf0\x90\ +\xd1g\xd98\x9a?\xbdE\x0a\x95\x04\xf5o\xb5\xc4\xa3\ +\xdc\x9cw\xb6\xa5\xc9{l\x87g9\xaf\x09\x8d\xeb\xa0\ +\xd3\xaa\xa5\xc3\x8b\x87}K\x19\xd5\x8bR\x13\xa2WB\ +e@\xea \x85^\xb5X\xdb(\x9d\xf1\x18\xd5\xee\xe4\ +6\x9e]a\xa4\xee\xa8&\xe5\xbco\x84\xd0\xb1\xfa)\ +a\x1b\xfe$\x94\xaa}PgN?\xfbO\xfe\xbe)\ +\x13S\xde.\x0f\xa7=Mi\xbbk\x15\x18\xcc\xe3\xa2\ +q\xa04\x15\x93\x06;\x1d\x17%\x86\xe0\x11!\xc7\xef\ +\x86l|k\x1f!nS~L<\x10H\x1d\xb2|\ +\xad\xe9k\x151#\xdb\x97\xda_\xa9\xdb\xf8uP\xe8\ +^\x95\xb0\xb6Yf\xc6C=K\xb5\xfb\xcc\x1b6\x0e\ +f:m\xdb\x00\x05\x10\x16\x15\x07\x01fB\x8c\xc5\xb8\ +\x09\xb5]^\xb5\x06\x12\xdf\xdd\xdda?7]\xe3\xfc\ +\xc9\xe9\xd62S\xe6;\xff\x94)r-e\x5c\xc4i\ +;\x93]\xa1f\xce3[\x98\xa1\ +E\x96\x0e\xe64\x9dG\xb9\xab{\x85\x96\xb0m\xd5~\ +v\xcb\x9e\x8ct9\xad\xf8\x0c.\x9b\x90\x02\x17B\xcd\ +\x06\x11g\x82\xb5\xecr\xe9\xb1\xad\x0d\x91\xe5\xd7\xde\x1d\ +.tq\xa5\xd4{\x00#3\xde\xb4\xe7\xcf\xf6\x03\x14\ +\x14\xa9\xa1\xfb\x0cK\x0c=\x9b\x98xe\x01-\x06(\ +\x22\xd3\xe3\x83f\xc3\x84\xe9\x89M\x9a=[\xcb\xcf\x83\ +\xf4v\xbf\x80\xb30\xcf\xa6o\x8d:\xeb~>\xbc1\ + #\xeb\xc9\xb2\xc6S\xe6:\x0d7\x90\x94\xc3\x9a\x1f\ +s\xac\xaa\x82[\x99\x88\x88\xca\xf57\xaa\xe0Hx\xb3\ +\x89\xfe\x1b\xa6\x85% W\xfeD\xb79F\xba\x87\x8e\ +\x1bZ\x8d;!\x92\xb5\x17\xa0\x93k\xe6\xb4\x82D\x88\ +\xfa\x99\xe7\x82&\xa4g[\x83\xd8\xa7A\xd7\xda\xca5\ +\xfd\x90\xaflY\xdd\xcb\xddsgWu\x85\xd8:#\ +\x06\x8f\xb6S\xe7\xed\x06\xe2:\xa4\xcd\xeb\x0d\x9d\xc2\x8d\ +/\x8e\x0c\x8c5t\xfd\x95\xbf\xf2\xa1\x7f\ +\x00\x00\x09z\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221\x22>\x0a \ +\x0a \x0a \x0a \ +\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0a\ +\x00\x00\x02\xd4\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\ +/g>\x0a \x0a\x0a\ +\x00\x00\x0c\xdc\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221.1\x22>\x0a \x0a \x0a \x0a\ + \x0a \x0a \ +\ +\x0a \x0a\x0a\ +\x00\x00\x02p\ +(\ +\xb5/\xfd`,\x075\x13\x00\xf6]U\x1e0s\x1b\ +?\xf5\xce\xb8Q\xd5\xd87u\x9a\x9er\xe6!\x22J\ +\xca\xcc,W\xc4\x9b\x16\x06Y\x08\x03Y\x00J\x00F\ +\x00m\x0a\x14*\x95jB]\x91L\xe4i\x1d\xcb\x93\ +\xac\x93,\xc2n\xdd\x82\xe7\xaa\xa4H\x06\xc3\x10S\xc5\ +si\xf2\x92&\xeb\x90\x80\x04ce\x86\xb8`*\x8d\ +5m.\x8aRMT\xb2v\x86\xa0.I\xc5I\x16\ +\xednG\x14\x0b\xa3\xceQ\x0e\x87\x13E\x85\xccuQ\ +\x0c\xa1\xb9T,\x9d\xa4l4\x87\xac,\xe8T\xd6\x15\ +\xb1X\x98\x89\xe6\x12\xb1\xaed\x0c\xf9\x5c\xe4#\xa1\xeb\ +U\x97Q_;F\xb36B\xb66\xe8_t\xa8L\ +H\xe8\xda\xb5\xa1M)_\x1f\xe7&[\x9d?\xa8\x0e\ +\xbd^\xc7\xfa\x9d\x8b\xfc\xa7\xceIeC\xdf\xac1-\ +\x0c!I\x16\xce\x06\xe8\xfb\x93\x88\xd4 \x09\xfd\xbdo\ +\xba\x0e\xb5\xe6\x7fM\x9d\xb3?\xaeCm\x0e9\xceF\ +6n\x7f\xae\x0dr\xef\x17\xea\x7f\xb1\xad~\xb6\xfe\x06\ +a\xeb\xfd\xa8\xcb\x83\xe8\x1cw\x1f??\xc8\xadM\x80\ +\x1a\xbb\xde\xe6t\xa1\x17\x9d\x83\x1e\x80\x04e\xa3\x89\x0e\ +\x8d\xecv\xf7<\xa1v\xbb\xbf\xb6x\x8d\x8e\x91\xd5A\ +\xc8\xad\x1fT\xcfo\x03\xf3\xff\xe4\xd5z\x95\xa6\x8ad\ +U\xd2'\x1dB\xe7\xdewrs\xeeW\xbd\xf7\xb5S\ +\x91\xde\xf9\xfa\x9d\x0ew\x8e[\x99y\xd9-\xc7\xd7\x5c\ +\xb7{\xa01Y\x86F&\x8c\x82\x94$\xa5t\x80D\ +h\xaal\x1b,$`\x98\x02W\xa2\xd1\xcdA\x0a \ +\x0a \x0a \x0a\ + \ +\x0a \x0a\x0a\ +\x00\x00\x0d\x0b\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221.1\x22>\x0a \x0a \x0a \ + \x0a \x0a \x0a \x0a \x0a \x0a\x0a\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00o\xa6S\ +\x00i\ +\x00c\x00o\x00n\x00s\ +\x00\x04\ +\x00\x06\xcf\x04\ +\x00e\ +\x00x\x00i\x00t\ +\x00\x07\ +\x0eh\x9at\ +\x00g\ +\x00p\x00a\x00r\x00t\x00e\x00d\ +\x00\x03\ +\x00\x00kS\ +\x00d\ +\x00o\x00c\ +\x00\x05\ +\x00p\xaa\xb5\ +\x00i\ +\x00s\x00s\x00u\x00e\ +\x00\x03\ +\x00\x00}\xb2\ +\x00w\ +\x00e\x00b\ +\x00\x07\ +\x00Z\xa8\xcc\ +\x00i\ +\x00n\x00s\x00t\x00a\x00l\x00l\ +\x00\x08\ +\x0c+\xe7=\ +\x00t\ +\x00e\x00l\x00e\x00g\x00r\x00a\x00m\ +\x00\x07\ +\x0ae\xb82\ +\x00c\ +\x00o\x00n\x00t\x00r\x00i\x00b\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x002\x00\x00\x00\x00\x00\x01\x00\x00\x0bA\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00N\x00\x00\x00\x00\x00\x01\x00\x00\x17\x97\ +\x00\x00\x01\x94\xb3\xfa\xb5^\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00Z\x00\x04\x00\x00\x00\x01\x00\x00$w\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00>\x00\x00\x00\x00\x00\x01\x00\x00\x14\xbf\ +\x00\x00\x01\x94\xb3\xfa\xb5^\ +\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00,\xba\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00n\x00\x00\x00\x00\x00\x01\x00\x00&\xeb\ +\x00\x00\x01\x94\xb3\xfa\xb5^\ +\x00\x00\x00\x1e\x00\x04\x00\x00\x00\x01\x00\x00\x07\xb0\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/build/lib/tileos_welcome/ui/mainwindow.ui b/build/lib/tileos_welcome/ui/mainwindow.ui new file mode 100644 index 0000000..d226882 --- /dev/null +++ b/build/lib/tileos_welcome/ui/mainwindow.ui @@ -0,0 +1,303 @@ + + + MainWindow + + + + 0 + 0 + 664 + 473 + + + + + 0 + 0 + + + + + 664 + 473 + + + + + 664 + 473 + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Want to learn more about the project? Please find the links below! + + + Qt::AlignCenter + + + + + + + + + Install TileOS + + + + + + + Disk partitioning + + + + + + + Website + + + + + + + Documentation + + + + + + + Issue Tracker + + + + + + + Contribute + + + + + + + + + + + + + + Telegram Chat + + + + + + + Quit + + + + + + + Next + + + + + + + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Advanced options + + + Qt::AlignCenter + + + + + + + + + Install Software + + + + + + + Previous + + + + + + + Change Qt theme + + + + + + + Display Settings + + + + + + + Change GTK Theme + + + + + + + Change Shell + + + + + + + Quit + + + + + + + Input Settings + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Autostart + + + + + + + + + + btnInstall + btnGprd + btnWebsite + btnDoc + btnIssue + btnContrib + btnWiki + btnTelegram + btnQuit + btnNext + btnGTK + btnKvantum + btnDisplay + btnShell + btnInput + btnSoftware + btnPrev + btnExit + checkAutostart + + + + diff --git a/build/lib/tileos_welcome/ui/warning.ui b/build/lib/tileos_welcome/ui/warning.ui new file mode 100644 index 0000000..9e0da20 --- /dev/null +++ b/build/lib/tileos_welcome/ui/warning.ui @@ -0,0 +1,73 @@ + + + WarningMessage + + + + 0 + 0 + 640 + 100 + + + + + 0 + 0 + + + + + 640 + 100 + + + + + 640 + 100 + + + + + + + + + + Your system is already installed! If you wish to reinstall it, boot from the installation media. + + + true + + + + + + + QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + WarningMessage + accept() + + + 319 + 78 + + + 319 + 49 + + + + + diff --git a/build/lib/tileos_welcome/ui_mainwindow.py b/build/lib/tileos_welcome/ui_mainwindow.py new file mode 100644 index 0000000..2122f30 --- /dev/null +++ b/build/lib/tileos_welcome/ui_mainwindow.py @@ -0,0 +1,181 @@ +# Form implementation generated from reading ui file 'tileos_welcome/ui/mainwindow.ui' +# +# Created by: PyQt6 UI code generator 6.4.2 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(664, 473) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) + MainWindow.setSizePolicy(sizePolicy) + MainWindow.setMinimumSize(QtCore.QSize(664, 473)) + MainWindow.setMaximumSize(QtCore.QSize(664, 473)) + MainWindow.setWindowTitle("") + self.centralwidget = QtWidgets.QWidget(parent=MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) + self.verticalLayout.setObjectName("verticalLayout") + self.stackedWidget = QtWidgets.QStackedWidget(parent=self.centralwidget) + self.stackedWidget.setObjectName("stackedWidget") + self.page = QtWidgets.QWidget() + self.page.setObjectName("page") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.page) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.verticalLayout_2 = QtWidgets.QVBoxLayout() + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.logo = QtWidgets.QLabel(parent=self.page) + self.logo.setText("") + self.logo.setObjectName("logo") + self.verticalLayout_2.addWidget(self.logo) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.verticalLayout_2.addItem(spacerItem) + self.desc = QtWidgets.QLabel(parent=self.page) + self.desc.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.desc.setObjectName("desc") + self.verticalLayout_2.addWidget(self.desc) + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.btnInstall = QtWidgets.QPushButton(parent=self.page) + self.btnInstall.setObjectName("btnInstall") + self.gridLayout.addWidget(self.btnInstall, 0, 0, 1, 2) + self.btnGprd = QtWidgets.QPushButton(parent=self.page) + self.btnGprd.setObjectName("btnGprd") + self.gridLayout.addWidget(self.btnGprd, 0, 2, 1, 2) + self.btnWebsite = QtWidgets.QPushButton(parent=self.page) + self.btnWebsite.setObjectName("btnWebsite") + self.gridLayout.addWidget(self.btnWebsite, 1, 0, 1, 1) + self.btnDoc = QtWidgets.QPushButton(parent=self.page) + self.btnDoc.setObjectName("btnDoc") + self.gridLayout.addWidget(self.btnDoc, 1, 1, 1, 1) + self.btnIssue = QtWidgets.QPushButton(parent=self.page) + self.btnIssue.setObjectName("btnIssue") + self.gridLayout.addWidget(self.btnIssue, 1, 2, 1, 1) + self.btnContrib = QtWidgets.QPushButton(parent=self.page) + self.btnContrib.setObjectName("btnContrib") + self.gridLayout.addWidget(self.btnContrib, 1, 3, 1, 1) + self.btnWiki = QtWidgets.QPushButton(parent=self.page) + self.btnWiki.setText("") + self.btnWiki.setObjectName("btnWiki") + self.gridLayout.addWidget(self.btnWiki, 2, 0, 1, 1) + self.btnTelegram = QtWidgets.QPushButton(parent=self.page) + self.btnTelegram.setObjectName("btnTelegram") + self.gridLayout.addWidget(self.btnTelegram, 2, 1, 1, 1) + self.btnQuit = QtWidgets.QPushButton(parent=self.page) + self.btnQuit.setObjectName("btnQuit") + self.gridLayout.addWidget(self.btnQuit, 2, 2, 1, 1) + self.btnNext = QtWidgets.QPushButton(parent=self.page) + self.btnNext.setObjectName("btnNext") + self.gridLayout.addWidget(self.btnNext, 2, 3, 1, 1) + self.verticalLayout_2.addLayout(self.gridLayout) + self.verticalLayout_3.addLayout(self.verticalLayout_2) + self.stackedWidget.addWidget(self.page) + self.page_2 = QtWidgets.QWidget() + self.page_2.setObjectName("page_2") + self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.page_2) + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.verticalLayout_4 = QtWidgets.QVBoxLayout() + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.logo2 = QtWidgets.QLabel(parent=self.page_2) + self.logo2.setText("") + self.logo2.setObjectName("logo2") + self.verticalLayout_4.addWidget(self.logo2) + spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) + self.verticalLayout_4.addItem(spacerItem1) + self.desc2 = QtWidgets.QLabel(parent=self.page_2) + self.desc2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) + self.desc2.setObjectName("desc2") + self.verticalLayout_4.addWidget(self.desc2) + self.gridLayout_2 = QtWidgets.QGridLayout() + self.gridLayout_2.setObjectName("gridLayout_2") + self.btnSoftware = QtWidgets.QPushButton(parent=self.page_2) + self.btnSoftware.setObjectName("btnSoftware") + self.gridLayout_2.addWidget(self.btnSoftware, 1, 2, 1, 1) + self.btnPrev = QtWidgets.QPushButton(parent=self.page_2) + self.btnPrev.setObjectName("btnPrev") + self.gridLayout_2.addWidget(self.btnPrev, 2, 0, 1, 1) + self.btnKvantum = QtWidgets.QPushButton(parent=self.page_2) + self.btnKvantum.setObjectName("btnKvantum") + self.gridLayout_2.addWidget(self.btnKvantum, 0, 1, 1, 1) + self.btnDisplay = QtWidgets.QPushButton(parent=self.page_2) + self.btnDisplay.setObjectName("btnDisplay") + self.gridLayout_2.addWidget(self.btnDisplay, 0, 2, 1, 1) + self.btnGTK = QtWidgets.QPushButton(parent=self.page_2) + self.btnGTK.setObjectName("btnGTK") + self.gridLayout_2.addWidget(self.btnGTK, 0, 0, 1, 1) + self.btnShell = QtWidgets.QPushButton(parent=self.page_2) + self.btnShell.setObjectName("btnShell") + self.gridLayout_2.addWidget(self.btnShell, 1, 0, 1, 1) + self.btnExit = QtWidgets.QPushButton(parent=self.page_2) + self.btnExit.setObjectName("btnExit") + self.gridLayout_2.addWidget(self.btnExit, 2, 2, 1, 1) + self.btnInput = QtWidgets.QPushButton(parent=self.page_2) + self.btnInput.setObjectName("btnInput") + self.gridLayout_2.addWidget(self.btnInput, 1, 1, 1, 1) + self.verticalLayout_4.addLayout(self.gridLayout_2) + self.verticalLayout_5.addLayout(self.verticalLayout_4) + self.stackedWidget.addWidget(self.page_2) + self.verticalLayout.addWidget(self.stackedWidget) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) + self.horizontalLayout.addItem(spacerItem2) + self.checkAutostart = QtWidgets.QCheckBox(parent=self.centralwidget) + self.checkAutostart.setObjectName("checkAutostart") + self.horizontalLayout.addWidget(self.checkAutostart) + self.verticalLayout.addLayout(self.horizontalLayout) + MainWindow.setCentralWidget(self.centralwidget) + + self.retranslateUi(MainWindow) + self.stackedWidget.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + MainWindow.setTabOrder(self.btnInstall, self.btnGprd) + MainWindow.setTabOrder(self.btnGprd, self.btnWebsite) + MainWindow.setTabOrder(self.btnWebsite, self.btnDoc) + MainWindow.setTabOrder(self.btnDoc, self.btnIssue) + MainWindow.setTabOrder(self.btnIssue, self.btnContrib) + MainWindow.setTabOrder(self.btnContrib, self.btnWiki) + MainWindow.setTabOrder(self.btnWiki, self.btnTelegram) + MainWindow.setTabOrder(self.btnTelegram, self.btnQuit) + MainWindow.setTabOrder(self.btnQuit, self.btnNext) + MainWindow.setTabOrder(self.btnNext, self.btnGTK) + MainWindow.setTabOrder(self.btnGTK, self.btnKvantum) + MainWindow.setTabOrder(self.btnKvantum, self.btnDisplay) + MainWindow.setTabOrder(self.btnDisplay, self.btnShell) + MainWindow.setTabOrder(self.btnShell, self.btnInput) + MainWindow.setTabOrder(self.btnInput, self.btnSoftware) + MainWindow.setTabOrder(self.btnSoftware, self.btnPrev) + MainWindow.setTabOrder(self.btnPrev, self.btnExit) + MainWindow.setTabOrder(self.btnExit, self.checkAutostart) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + self.desc.setText(_translate("MainWindow", "Want to learn more about the project? Please find the links below!")) + self.btnInstall.setText(_translate("MainWindow", "Install TileOS")) + self.btnGprd.setText(_translate("MainWindow", "Disk partitioning")) + self.btnWebsite.setText(_translate("MainWindow", "Website")) + self.btnDoc.setText(_translate("MainWindow", "Documentation")) + self.btnIssue.setText(_translate("MainWindow", "Issue Tracker")) + self.btnContrib.setText(_translate("MainWindow", "Contribute")) + self.btnTelegram.setText(_translate("MainWindow", "Telegram Chat")) + self.btnQuit.setText(_translate("MainWindow", "Quit")) + self.btnNext.setText(_translate("MainWindow", "Next")) + self.desc2.setText(_translate("MainWindow", "Advanced options")) + self.btnSoftware.setText(_translate("MainWindow", "Install Software")) + self.btnPrev.setText(_translate("MainWindow", "Previous")) + self.btnKvantum.setText(_translate("MainWindow", "Change Qt theme")) + self.btnDisplay.setText(_translate("MainWindow", "Display Settings")) + self.btnGTK.setText(_translate("MainWindow", "Change GTK Theme")) + self.btnShell.setText(_translate("MainWindow", "Change Shell")) + self.btnExit.setText(_translate("MainWindow", "Quit")) + self.btnInput.setText(_translate("MainWindow", "Input Settings")) + self.checkAutostart.setText(_translate("MainWindow", "Autostart")) diff --git a/build/lib/tileos_welcome/ui_warning.py b/build/lib/tileos_welcome/ui_warning.py new file mode 100644 index 0000000..8dc66cd --- /dev/null +++ b/build/lib/tileos_welcome/ui_warning.py @@ -0,0 +1,41 @@ +# Form implementation generated from reading ui file 'tileos_welcome/ui/warning.ui' +# +# Created by: PyQt6 UI code generator 6.4.2 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_WarningMessage(object): + def setupUi(self, WarningMessage): + WarningMessage.setObjectName("WarningMessage") + WarningMessage.resize(640, 100) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(WarningMessage.sizePolicy().hasHeightForWidth()) + WarningMessage.setSizePolicy(sizePolicy) + WarningMessage.setMinimumSize(QtCore.QSize(640, 100)) + WarningMessage.setMaximumSize(QtCore.QSize(640, 100)) + WarningMessage.setWindowTitle("") + self.verticalLayout = QtWidgets.QVBoxLayout(WarningMessage) + self.verticalLayout.setObjectName("verticalLayout") + self.label = QtWidgets.QLabel(parent=WarningMessage) + self.label.setWordWrap(True) + self.label.setObjectName("label") + self.verticalLayout.addWidget(self.label) + self.buttonBox = QtWidgets.QDialogButtonBox(parent=WarningMessage) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Ok) + self.buttonBox.setObjectName("buttonBox") + self.verticalLayout.addWidget(self.buttonBox) + + self.retranslateUi(WarningMessage) + self.buttonBox.accepted.connect(WarningMessage.accept) # type: ignore + QtCore.QMetaObject.connectSlotsByName(WarningMessage) + + def retranslateUi(self, WarningMessage): + _translate = QtCore.QCoreApplication.translate + self.label.setText(_translate("WarningMessage", "Your system is already installed! If you wish to reinstall it, boot from the installation media.")) diff --git a/dist/tileos_welcome-0.9.0-py3.11.egg b/dist/tileos_welcome-0.9.0-py3.11.egg index 22db2c079dd89a13107f28944978914a4dd85d66..3a73867dfd1e46d9feca1ce67e43f6b1ccb1480e 100644 GIT binary patch delta 35421 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 L2j&UaJs=(cj+O$8 delta 13285 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 ZkD_7$-ZjDy5SZ`ZGXMm{mF-`p{{syR>+=8r diff --git a/setup.py b/setup.py index 65d79a0..129ea8c 100644 --- a/setup.py +++ b/setup.py @@ -11,10 +11,10 @@ setup( url='https://gitlab.com/tile-os/tileos-welcome', packages=find_packages(), include_package_data=True, - package_data={"": ["resources/*", "ui/*"]}, + package_data={"": ["data/*", "ui/*"]}, data_files=[ - ('share/applications', ['tileos_welcome/resources/tileos-welcome.desktop']), - ('share/icons/hicolor/scalable/apps', ['tileos_welcome/resources/tileos-logo.svg']), + ('share/applications', ['tileos_welcome/data/tileos-welcome.desktop']), + ('share/icons/hicolor/scalable/apps', ['tileos_welcome/data/tileos-logo.svg']), ], install_requires=[], entry_points={ diff --git a/tileos_welcome.egg-info/PKG-INFO b/tileos_welcome.egg-info/PKG-INFO new file mode 100644 index 0000000..897500d --- /dev/null +++ b/tileos_welcome.egg-info/PKG-INFO @@ -0,0 +1,9 @@ +Metadata-Version: 2.1 +Name: tileos-welcome +Version: 0.9.0 +Summary: welcome app for TileOS +Home-page: https://gitlab.com/tile-os/tileos-welcome +Author: Aleksey Samoilov +Author-email: samoilov.lex@gmail.com +License: GPL-3 +License-File: LICENSE diff --git a/tileos_welcome.egg-info/SOURCES.txt b/tileos_welcome.egg-info/SOURCES.txt new file mode 100644 index 0000000..a597970 --- /dev/null +++ b/tileos_welcome.egg-info/SOURCES.txt @@ -0,0 +1,18 @@ +LICENSE +setup.py +tileos_welcome/__init__.py +tileos_welcome/main.py +tileos_welcome/resources.py +tileos_welcome/ui_mainwindow.py +tileos_welcome/ui_warning.py +tileos_welcome.egg-info/PKG-INFO +tileos_welcome.egg-info/SOURCES.txt +tileos_welcome.egg-info/dependency_links.txt +tileos_welcome.egg-info/entry_points.txt +tileos_welcome.egg-info/top_level.txt +tileos_welcome/data/label.png +tileos_welcome/data/resources.qrc +tileos_welcome/data/tileos-logo.svg +tileos_welcome/data/tileos-welcome.desktop +tileos_welcome/ui/mainwindow.ui +tileos_welcome/ui/warning.ui \ No newline at end of file diff --git a/tileos_welcome.egg-info/dependency_links.txt b/tileos_welcome.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tileos_welcome.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/tileos_welcome.egg-info/entry_points.txt b/tileos_welcome.egg-info/entry_points.txt new file mode 100644 index 0000000..f897636 --- /dev/null +++ b/tileos_welcome.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[gui_scripts] +tileos-welcome = tileos_welcome.main:main diff --git a/tileos_welcome.egg-info/top_level.txt b/tileos_welcome.egg-info/top_level.txt new file mode 100644 index 0000000..b5ab073 --- /dev/null +++ b/tileos_welcome.egg-info/top_level.txt @@ -0,0 +1 @@ +tileos_welcome diff --git a/tileos_welcome/resources/icons/contrib.svg b/tileos_welcome/data/icons/contrib.svg similarity index 100% rename from tileos_welcome/resources/icons/contrib.svg rename to tileos_welcome/data/icons/contrib.svg diff --git a/tileos_welcome/data/icons/display.svg b/tileos_welcome/data/icons/display.svg new file mode 100644 index 0000000..b05459e --- /dev/null +++ b/tileos_welcome/data/icons/display.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/tileos_welcome/resources/icons/doc.svg b/tileos_welcome/data/icons/doc.svg similarity index 100% rename from tileos_welcome/resources/icons/doc.svg rename to tileos_welcome/data/icons/doc.svg diff --git a/tileos_welcome/resources/icons/exit.svg b/tileos_welcome/data/icons/exit.svg similarity index 100% rename from tileos_welcome/resources/icons/exit.svg rename to tileos_welcome/data/icons/exit.svg diff --git a/tileos_welcome/resources/icons/gparted.svg b/tileos_welcome/data/icons/gparted.svg similarity index 100% rename from tileos_welcome/resources/icons/gparted.svg rename to tileos_welcome/data/icons/gparted.svg diff --git a/tileos_welcome/data/icons/gtk-theme.svg b/tileos_welcome/data/icons/gtk-theme.svg new file mode 100644 index 0000000..9e00ea7 --- /dev/null +++ b/tileos_welcome/data/icons/gtk-theme.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tileos_welcome/data/icons/input.svg b/tileos_welcome/data/icons/input.svg new file mode 100644 index 0000000..127bd2a --- /dev/null +++ b/tileos_welcome/data/icons/input.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tileos_welcome/resources/icons/install-system.svg b/tileos_welcome/data/icons/install-system.svg similarity index 100% rename from tileos_welcome/resources/icons/install-system.svg rename to tileos_welcome/data/icons/install-system.svg diff --git a/tileos_welcome/resources/icons/issue.svg b/tileos_welcome/data/icons/issue.svg similarity index 100% rename from tileos_welcome/resources/icons/issue.svg rename to tileos_welcome/data/icons/issue.svg diff --git a/tileos_welcome/data/icons/shell.svg b/tileos_welcome/data/icons/shell.svg new file mode 100644 index 0000000..e90824c --- /dev/null +++ b/tileos_welcome/data/icons/shell.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tileos_welcome/data/icons/software.svg b/tileos_welcome/data/icons/software.svg new file mode 100644 index 0000000..e8aa03d --- /dev/null +++ b/tileos_welcome/data/icons/software.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tileos_welcome/data/icons/sway.png b/tileos_welcome/data/icons/sway.png new file mode 100644 index 0000000000000000000000000000000000000000..a9776508f710c1d01a043d9f10224e5bd4452bce GIT binary patch literal 9179 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 + + + + + + + + + + + + + + + + diff --git a/tileos_welcome/resources/icons/web.svg b/tileos_welcome/data/icons/web.svg similarity index 100% rename from tileos_welcome/resources/icons/web.svg rename to tileos_welcome/data/icons/web.svg diff --git a/tileos_welcome/data/label.png b/tileos_welcome/data/label.png new file mode 100644 index 0000000000000000000000000000000000000000..812d8f7d8b05c8a956a16f87ecc40ebea7e53514 GIT binary patch literal 12324 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 literal 0 HcmV?d00001 diff --git a/tileos_welcome/data/resources.qrc b/tileos_welcome/data/resources.qrc new file mode 100644 index 0000000..eb514c7 --- /dev/null +++ b/tileos_welcome/data/resources.qrc @@ -0,0 +1,12 @@ + + + icons/contrib.svg + icons/doc.svg + icons/exit.svg + icons/gparted.svg + icons/install-system.svg + icons/issue.svg + icons/telegram.svg + icons/web.svg + + diff --git a/tileos_welcome/data/tileos-logo.svg b/tileos_welcome/data/tileos-logo.svg new file mode 100644 index 0000000..6f2bb3e --- /dev/null +++ b/tileos_welcome/data/tileos-logo.svg @@ -0,0 +1 @@ +TileOS \ No newline at end of file diff --git a/tileos_welcome/data/tileos-welcome.desktop b/tileos_welcome/data/tileos-welcome.desktop new file mode 100644 index 0000000..293e4a6 --- /dev/null +++ b/tileos_welcome/data/tileos-welcome.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=TileOS Welcome +Exec=/usr/bin/tileos-welcome +Icon=tileos-logo.svg +Type=Application +Terminal=false +Categories=Settings; diff --git a/tileos_welcome/main.py b/tileos_welcome/main.py index bc52525..01985c7 100644 --- a/tileos_welcome/main.py +++ b/tileos_welcome/main.py @@ -22,10 +22,12 @@ import os import signal import sys import subprocess -from PyQt6.QtWidgets import (QApplication, QMainWindow) -from PyQt6.QtGui import QPixmap -from PyQt6.QtCore import Qt +from pathlib import Path +from PyQt6.QtWidgets import (QApplication, QMainWindow, QDialog) +from PyQt6.QtGui import QPixmap, QIcon +from PyQt6.QtCore import Qt, QDir from tileos_welcome.ui_mainwindow import Ui_MainWindow +from tileos_welcome.ui_warning import Ui_WarningMessage def get_config_home(): config_home = os.getenv('XDG_CONFIG_HOME') if os.getenv('XDG_CONFIG_HOME') else os.path.join( @@ -35,8 +37,9 @@ def get_config_home(): dir_name = os.path.dirname(__file__) config_home = get_config_home() user = os.getlogin() -desktop_file = os.path.join(dir_name, "resources/tileos-welcome.desktop") +desktop_file = os.path.join(dir_name, "data/tileos-welcome.desktop") autostart_dir = os.path.join(config_home, "autostart/") +icons = os.path.join(dir_name, "data/icons") autostart_desktop_file = os.path.join(config_home, autostart_dir, "tileos-welcome.desktop") class MainWindow(QMainWindow): @@ -45,8 +48,11 @@ class MainWindow(QMainWindow): self.ui = Ui_MainWindow() self.ui.setupUi(self) + # Icons for buttons + QDir.addSearchPath("icons", icons) + # Background - page_label = os.path.join(dir_name, "resources/label.png") + page_label = os.path.join(dir_name, "data/label.png") page_pixmap = QPixmap(page_label).scaled(600, 300, Qt.AspectRatioMode.KeepAspectRatio) self.ui.logo.setPixmap(page_pixmap) self.ui.logo2.setPixmap(page_pixmap) @@ -58,36 +64,67 @@ class MainWindow(QMainWindow): # Detect running compositor and adapt Wiki button text to it if os.getenv("SWAYSOCK"): self.ui.btnWiki.setText("Sway Wiki") + self.ui.btnWiki.setIcon(QIcon("icons:sway.png")) # Page 1 + self.ui.btnInstall.clicked.connect(self.on_clicked_install) + self.ui.btnInstall.setIcon(QIcon("icons:install-system.svg")) self.ui.btnGprd.clicked.connect(self.on_clicked_partition) + self.ui.btnGprd.setIcon(QIcon("icons:gparted.svg")) + self.ui.btnWebsite.clicked.connect(self.on_clicked_website) + self.ui.btnWebsite.setIcon(QIcon("icons:web.svg")) + self.ui.btnIssue.clicked.connect(self.on_clicked_tracker) + self.ui.btnIssue.setIcon(QIcon("icons:issue.svg")) + self.ui.btnContrib.clicked.connect(self.on_clicked_contribute) + self.ui.btnContrib.setIcon(QIcon("icons:contrib.svg")) + self.ui.btnTelegram.clicked.connect(self.on_clicked_telegram) + self.ui.btnTelegram.setIcon(QIcon("icons:telegram.svg")) self.ui.btnNext.clicked.connect(self.on_page_switch) + self.ui.btnNext.setIcon(QIcon.fromTheme("go-next")) self.ui.btnQuit.clicked.connect(self.exitApp) + self.ui.btnQuit.setIcon(QIcon("icons:exit.svg")) # Page 2 self.ui.btnGTK.clicked.connect(self.on_clicked_gtk_theme) + self.ui.btnGTK.setIcon(QIcon("icons:gtk-theme.svg")) self.ui.btnKvantum.clicked.connect(self.on_clicked_qt_theme) + self.ui.btnKvantum.setIcon(QIcon("icons:theme.svg")) self.ui.btnDisplay.clicked.connect(self.on_clicked_display_settings) + self.ui.btnDisplay.setIcon(QIcon("icons:display.svg")) + self.ui.btnShell.setIcon(QIcon("icons:shell.svg")) self.ui.btnInput.clicked.connect(self.on_clicked_input_settings) + self.ui.btnInput.setIcon(QIcon("icons:input.svg")) + self.ui.btnSoftware.setIcon(QIcon("icons:software.svg")) self.ui.btnPrev.clicked.connect(self.on_page_switch) + self.ui.btnPrev.setIcon(QIcon.fromTheme("go-previous")) self.ui.btnExit.clicked.connect(self.exitApp) + self.ui.btnExit.setIcon(QIcon("icons:exit.svg")) + + def on_clicked_install(self): + self.msg = WarningMessage() + self.msg.setWindowTitle("Warning!") + self.msg.setModal(True) + if Path(f'{"/usr/bin/calamares"}').is_file() and user == "tileos": + subprocess.run("/usr/bin/install-tileos") + else: + self.msg.show() def on_clicked_partition(self): subprocess.run("xhost +si:localuser:root && pkexec /usr/sbin/gparted && xhost -si:localuser:root &", shell=True) def on_clicked_website(self): - subprocess.run("xdg-open", "https://tile-os.com") + subprocess.run(["xdg-open", "https://tile-os.com"]) # TODO documentation link def on_clicked_tracker(self): - subprocess.run("xdg-open", "https://gitlab.com/tile-os/tileos/-/issues") + subprocess.run(["xdg-open", "https://gitlab.com/tile-os/tileos/-/issues"]) def on_clicked_contribute(self): - subprocess.run("xdg-open", "https://gitlab.com/tile-os") + subprocess.run(["xdg-open", "https://gitlab.com/tile-os"]) def on_clicked_telegram(self): - subprocess.run("xdg-open", "https://t.me/tile_os") + subprocess.run(["xdg-open", "https://t.me/tile_os"]) def on_clicked_gtk_theme(self): subprocess.run("/usr/bin/nwg-look") @@ -114,6 +151,13 @@ class MainWindow(QMainWindow): def exitApp(self): self.close() + +class WarningMessage(QDialog): + def __init__(self): + super().__init__() + self.warningDialog = Ui_WarningMessage() + self.warningDialog.setupUi(self) + def main(): app = QApplication(["Welcome to TileOS!"]) app.setDesktopFileName("tileos-welcome") diff --git a/tileos_welcome/resources.py b/tileos_welcome/resources.py new file mode 100644 index 0000000..ab08fd5 --- /dev/null +++ b/tileos_welcome/resources.py @@ -0,0 +1,1020 @@ +# Resource object code (Python 3) +# Created by: object code +# Created by: The Resource Compiler for Qt version 6.4.2 +# WARNING! All changes made in this file will be lost! + +from PySide6 import QtCore + +qt_resource_data = b"\ +\x00\x00\x07\xac\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a\x0a\ +\x00\x00\x03\x8d\ +(\ +\xb5/\xfd`\xf2\x0a\x1d\x1c\x00\x06q|!0\x8f\xd2\ +\x06[\x9c:{\xd2\xcd>\xbd\xf6\x12\xcfE\xea\xc2\x1a\ +7\x91\xc8\xde\x5c\xc1n\xa56\x07\x05\x0c\x96\x10\x8a\x00\ +k\x00k\x00m\x7fE\xd4\x02\x16b:\xe2Y\xbc\xbd\ +\xeb\xa3\xbd3\x04\x08P(\x93\x07\x07\xb3\x80\x89\x80\xd0\ +\xb40\xcf\xde\xa1\xb6\xd7v\xff\xec\xf2\xbc\x0ej\x9f,\ +\xbd\x14\xea\xfcJ\xb1\x0c\xaa\x0d\xcf\x1ac%0\x8f\x86\ +bn'\x80a\x994\x11\x8a\x09\xe6\xe1@\xc1\xb0T\ +Jb\x89P\x10\x14@\x01\x83\xccCbbR\xa9p\ +\xb0\xb0H &\x0e\x92b\x9e\xccCbi\x98\x5c\x8a\ +q\xdc\xdd\x1d\x10\x15\x13\x96\x17\xbb\x5c.\x0e\x87\x00\x85\ +\xc5\x22a\x1e\x15\x09J\xc4EAXT\x08\x02\xf5;\ +\xbb\xc6\xd1\xbeKgYM\xa1\xb2(<\xe2dd\x8d\ +'\x0fm\xaf5\x9e/\x8f\x85]\xa8\xd0a\xf3\xf0\x90\ +\xd1g\xd98\x9a?\xbdE\x0a\x95\x04\xf5o\xb5\xc4\xa3\ +\xdc\x9cw\xb6\xa5\xc9{l\x87g9\xaf\x09\x8d\xeb\xa0\ +\xd3\xaa\xa5\xc3\x8b\x87}K\x19\xd5\x8bR\x13\xa2WB\ +e@\xea \x85^\xb5X\xdb(\x9d\xf1\x18\xd5\xee\xe4\ +6\x9e]a\xa4\xee\xa8&\xe5\xbco\x84\xd0\xb1\xfa)\ +a\x1b\xfe$\x94\xaa}PgN?\xfbO\xfe\xbe)\ +\x13S\xde.\x0f\xa7=Mi\xbbk\x15\x18\xcc\xe3\xa2\ +q\xa04\x15\x93\x06;\x1d\x17%\x86\xe0\x11!\xc7\xef\ +\x86l|k\x1f!nS~L<\x10H\x1d\xb2|\ +\xad\xe9k\x151#\xdb\x97\xda_\xa9\xdb\xf8uP\xe8\ +^\x95\xb0\xb6Yf\xc6C=K\xb5\xfb\xcc\x1b6\x0e\ +f:m\xdb\x00\x05\x10\x16\x15\x07\x01fB\x8c\xc5\xb8\ +\x09\xb5]^\xb5\x06\x12\xdf\xdd\xdda?7]\xe3\xfc\ +\xc9\xe9\xd62S\xe6;\xff\x94)r-e\x5c\xc4i\ +;\x93]\xa1f\xce3[\x98\xa1\ +E\x96\x0e\xe64\x9dG\xb9\xab{\x85\x96\xb0m\xd5~\ +v\xcb\x9e\x8ct9\xad\xf8\x0c.\x9b\x90\x02\x17B\xcd\ +\x06\x11g\x82\xb5\xecr\xe9\xb1\xad\x0d\x91\xe5\xd7\xde\x1d\ +.tq\xa5\xd4{\x00#3\xde\xb4\xe7\xcf\xf6\x03\x14\ +\x14\xa9\xa1\xfb\x0cK\x0c=\x9b\x98xe\x01-\x06(\ +\x22\xd3\xe3\x83f\xc3\x84\xe9\x89M\x9a=[\xcb\xcf\x83\ +\xf4v\xbf\x80\xb30\xcf\xa6o\x8d:\xeb~>\xbc1\ + #\xeb\xc9\xb2\xc6S\xe6:\x0d7\x90\x94\xc3\x9a\x1f\ +s\xac\xaa\x82[\x99\x88\x88\xca\xf57\xaa\xe0Hx\xb3\ +\x89\xfe\x1b\xa6\x85% W\xfeD\xb79F\xba\x87\x8e\ +\x1bZ\x8d;!\x92\xb5\x17\xa0\x93k\xe6\xb4\x82D\x88\ +\xfa\x99\xe7\x82&\xa4g[\x83\xd8\xa7A\xd7\xda\xca5\ +\xfd\x90\xaflY\xdd\xcb\xddsgWu\x85\xd8:#\ +\x06\x8f\xb6S\xe7\xed\x06\xe2:\xa4\xcd\xeb\x0d\x9d\xc2\x8d\ +/\x8e\x0c\x8c5t\xfd\x95\xbf\xf2\xa1\x7f\ +\x00\x00\x09z\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221\x22>\x0a \ +\x0a \x0a \x0a \ +\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0a\ +\x00\x00\x02\xd4\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221\x22>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\ +/g>\x0a \x0a\x0a\ +\x00\x00\x0c\xdc\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221.1\x22>\x0a \x0a \x0a \x0a\ + \x0a \x0a \ +\ +\x0a \x0a\x0a\ +\x00\x00\x02p\ +(\ +\xb5/\xfd`,\x075\x13\x00\xf6]U\x1e0s\x1b\ +?\xf5\xce\xb8Q\xd5\xd87u\x9a\x9er\xe6!\x22J\ +\xca\xcc,W\xc4\x9b\x16\x06Y\x08\x03Y\x00J\x00F\ +\x00m\x0a\x14*\x95jB]\x91L\xe4i\x1d\xcb\x93\ +\xac\x93,\xc2n\xdd\x82\xe7\xaa\xa4H\x06\xc3\x10S\xc5\ +si\xf2\x92&\xeb\x90\x80\x04ce\x86\xb8`*\x8d\ +5m.\x8aRMT\xb2v\x86\xa0.I\xc5I\x16\ +\xednG\x14\x0b\xa3\xceQ\x0e\x87\x13E\x85\xccuQ\ +\x0c\xa1\xb9T,\x9d\xa4l4\x87\xac,\xe8T\xd6\x15\ +\xb1X\x98\x89\xe6\x12\xb1\xaed\x0c\xf9\x5c\xe4#\xa1\xeb\ +U\x97Q_;F\xb36B\xb66\xe8_t\xa8L\ +H\xe8\xda\xb5\xa1M)_\x1f\xe7&[\x9d?\xa8\x0e\ +\xbd^\xc7\xfa\x9d\x8b\xfc\xa7\xceIeC\xdf\xac1-\ +\x0c!I\x16\xce\x06\xe8\xfb\x93\x88\xd4 \x09\xfd\xbdo\ +\xba\x0e\xb5\xe6\x7fM\x9d\xb3?\xaeCm\x0e9\xceF\ +6n\x7f\xae\x0dr\xef\x17\xea\x7f\xb1\xad~\xb6\xfe\x06\ +a\xeb\xfd\xa8\xcb\x83\xe8\x1cw\x1f??\xc8\xadM\x80\ +\x1a\xbb\xde\xe6t\xa1\x17\x9d\x83\x1e\x80\x04e\xa3\x89\x0e\ +\x8d\xecv\xf7<\xa1v\xbb\xbf\xb6x\x8d\x8e\x91\xd5A\ +\xc8\xad\x1fT\xcfo\x03\xf3\xff\xe4\xd5z\x95\xa6\x8ad\ +U\xd2'\x1dB\xe7\xdewrs\xeeW\xbd\xf7\xb5S\ +\x91\xde\xf9\xfa\x9d\x0ew\x8e[\x99y\xd9-\xc7\xd7\x5c\ +\xb7{\xa01Y\x86F&\x8c\x82\x94$\xa5t\x80D\ +h\xaal\x1b,$`\x98\x02W\xa2\xd1\xcdA\x0a \ +\x0a \x0a \x0a\ + \ +\x0a \x0a\x0a\ +\x00\x00\x0d\x0b\ +<\ +svg xmlns=\x22http:\ +//www.w3.org/200\ +0/svg\x22 width=\x2232\ +\x22 height=\x2232\x22 ve\ +rsion=\x221.1\x22>\x0a \x0a \x0a \ + \x0a \x0a \x0a \x0a \x0a \x0a\x0a\ +" + +qt_resource_name = b"\ +\x00\x05\ +\x00o\xa6S\ +\x00i\ +\x00c\x00o\x00n\x00s\ +\x00\x04\ +\x00\x06\xcf\x04\ +\x00e\ +\x00x\x00i\x00t\ +\x00\x07\ +\x0eh\x9at\ +\x00g\ +\x00p\x00a\x00r\x00t\x00e\x00d\ +\x00\x03\ +\x00\x00kS\ +\x00d\ +\x00o\x00c\ +\x00\x05\ +\x00p\xaa\xb5\ +\x00i\ +\x00s\x00s\x00u\x00e\ +\x00\x03\ +\x00\x00}\xb2\ +\x00w\ +\x00e\x00b\ +\x00\x07\ +\x00Z\xa8\xcc\ +\x00i\ +\x00n\x00s\x00t\x00a\x00l\x00l\ +\x00\x08\ +\x0c+\xe7=\ +\x00t\ +\x00e\x00l\x00e\x00g\x00r\x00a\x00m\ +\x00\x07\ +\x0ae\xb82\ +\x00c\ +\x00o\x00n\x00t\x00r\x00i\x00b\ +" + +qt_resource_struct = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x002\x00\x00\x00\x00\x00\x01\x00\x00\x0bA\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00N\x00\x00\x00\x00\x00\x01\x00\x00\x17\x97\ +\x00\x00\x01\x94\xb3\xfa\xb5^\ +\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00Z\x00\x04\x00\x00\x00\x01\x00\x00$w\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00>\x00\x00\x00\x00\x00\x01\x00\x00\x14\xbf\ +\x00\x00\x01\x94\xb3\xfa\xb5^\ +\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00,\xba\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +\x00\x00\x00n\x00\x00\x00\x00\x00\x01\x00\x00&\xeb\ +\x00\x00\x01\x94\xb3\xfa\xb5^\ +\x00\x00\x00\x1e\x00\x04\x00\x00\x00\x01\x00\x00\x07\xb0\ +\x00\x00\x01\x94\xb3\xfa\xb5]\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x03, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/tileos_welcome/ui/mainwindow.ui b/tileos_welcome/ui/mainwindow.ui index 5df8b3c..d226882 100644 --- a/tileos_welcome/ui/mainwindow.ui +++ b/tileos_welcome/ui/mainwindow.ui @@ -74,6 +74,20 @@ + + + + Install TileOS + + + + + + + Disk partitioning + + + @@ -88,27 +102,6 @@ - - - - Install TileOS - - - - - - - Next - - - - - - - Disk partitioning - - - @@ -130,6 +123,13 @@ + + + + Telegram Chat + + + @@ -137,10 +137,10 @@ - - + + - Telegram Chat + Next @@ -277,6 +277,27 @@ + + btnInstall + btnGprd + btnWebsite + btnDoc + btnIssue + btnContrib + btnWiki + btnTelegram + btnQuit + btnNext + btnGTK + btnKvantum + btnDisplay + btnShell + btnInput + btnSoftware + btnPrev + btnExit + checkAutostart + diff --git a/tileos_welcome/ui/warning.ui b/tileos_welcome/ui/warning.ui new file mode 100644 index 0000000..9e0da20 --- /dev/null +++ b/tileos_welcome/ui/warning.ui @@ -0,0 +1,73 @@ + + + WarningMessage + + + + 0 + 0 + 640 + 100 + + + + + 0 + 0 + + + + + 640 + 100 + + + + + 640 + 100 + + + + + + + + + + Your system is already installed! If you wish to reinstall it, boot from the installation media. + + + true + + + + + + + QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + WarningMessage + accept() + + + 319 + 78 + + + 319 + 49 + + + + + diff --git a/tileos_welcome/ui_mainwindow.py b/tileos_welcome/ui_mainwindow.py index c231802..2122f30 100644 --- a/tileos_welcome/ui_mainwindow.py +++ b/tileos_welcome/ui_mainwindow.py @@ -45,21 +45,18 @@ class Ui_MainWindow(object): self.verticalLayout_2.addWidget(self.desc) self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") + self.btnInstall = QtWidgets.QPushButton(parent=self.page) + self.btnInstall.setObjectName("btnInstall") + self.gridLayout.addWidget(self.btnInstall, 0, 0, 1, 2) + self.btnGprd = QtWidgets.QPushButton(parent=self.page) + self.btnGprd.setObjectName("btnGprd") + self.gridLayout.addWidget(self.btnGprd, 0, 2, 1, 2) self.btnWebsite = QtWidgets.QPushButton(parent=self.page) self.btnWebsite.setObjectName("btnWebsite") self.gridLayout.addWidget(self.btnWebsite, 1, 0, 1, 1) self.btnDoc = QtWidgets.QPushButton(parent=self.page) self.btnDoc.setObjectName("btnDoc") self.gridLayout.addWidget(self.btnDoc, 1, 1, 1, 1) - self.btnInstall = QtWidgets.QPushButton(parent=self.page) - self.btnInstall.setObjectName("btnInstall") - self.gridLayout.addWidget(self.btnInstall, 0, 0, 1, 2) - self.btnNext = QtWidgets.QPushButton(parent=self.page) - self.btnNext.setObjectName("btnNext") - self.gridLayout.addWidget(self.btnNext, 2, 3, 1, 1) - self.btnGprd = QtWidgets.QPushButton(parent=self.page) - self.btnGprd.setObjectName("btnGprd") - self.gridLayout.addWidget(self.btnGprd, 0, 2, 1, 2) self.btnIssue = QtWidgets.QPushButton(parent=self.page) self.btnIssue.setObjectName("btnIssue") self.gridLayout.addWidget(self.btnIssue, 1, 2, 1, 1) @@ -70,12 +67,15 @@ class Ui_MainWindow(object): self.btnWiki.setText("") self.btnWiki.setObjectName("btnWiki") self.gridLayout.addWidget(self.btnWiki, 2, 0, 1, 1) - self.btnQuit = QtWidgets.QPushButton(parent=self.page) - self.btnQuit.setObjectName("btnQuit") - self.gridLayout.addWidget(self.btnQuit, 2, 2, 1, 1) self.btnTelegram = QtWidgets.QPushButton(parent=self.page) self.btnTelegram.setObjectName("btnTelegram") self.gridLayout.addWidget(self.btnTelegram, 2, 1, 1, 1) + self.btnQuit = QtWidgets.QPushButton(parent=self.page) + self.btnQuit.setObjectName("btnQuit") + self.gridLayout.addWidget(self.btnQuit, 2, 2, 1, 1) + self.btnNext = QtWidgets.QPushButton(parent=self.page) + self.btnNext.setObjectName("btnNext") + self.gridLayout.addWidget(self.btnNext, 2, 3, 1, 1) self.verticalLayout_2.addLayout(self.gridLayout) self.verticalLayout_3.addLayout(self.verticalLayout_2) self.stackedWidget.addWidget(self.page) @@ -138,19 +138,37 @@ class Ui_MainWindow(object): self.retranslateUi(MainWindow) self.stackedWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) + MainWindow.setTabOrder(self.btnInstall, self.btnGprd) + MainWindow.setTabOrder(self.btnGprd, self.btnWebsite) + MainWindow.setTabOrder(self.btnWebsite, self.btnDoc) + MainWindow.setTabOrder(self.btnDoc, self.btnIssue) + MainWindow.setTabOrder(self.btnIssue, self.btnContrib) + MainWindow.setTabOrder(self.btnContrib, self.btnWiki) + MainWindow.setTabOrder(self.btnWiki, self.btnTelegram) + MainWindow.setTabOrder(self.btnTelegram, self.btnQuit) + MainWindow.setTabOrder(self.btnQuit, self.btnNext) + MainWindow.setTabOrder(self.btnNext, self.btnGTK) + MainWindow.setTabOrder(self.btnGTK, self.btnKvantum) + MainWindow.setTabOrder(self.btnKvantum, self.btnDisplay) + MainWindow.setTabOrder(self.btnDisplay, self.btnShell) + MainWindow.setTabOrder(self.btnShell, self.btnInput) + MainWindow.setTabOrder(self.btnInput, self.btnSoftware) + MainWindow.setTabOrder(self.btnSoftware, self.btnPrev) + MainWindow.setTabOrder(self.btnPrev, self.btnExit) + MainWindow.setTabOrder(self.btnExit, self.checkAutostart) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate self.desc.setText(_translate("MainWindow", "Want to learn more about the project? Please find the links below!")) + self.btnInstall.setText(_translate("MainWindow", "Install TileOS")) + self.btnGprd.setText(_translate("MainWindow", "Disk partitioning")) self.btnWebsite.setText(_translate("MainWindow", "Website")) self.btnDoc.setText(_translate("MainWindow", "Documentation")) - self.btnInstall.setText(_translate("MainWindow", "Install TileOS")) - self.btnNext.setText(_translate("MainWindow", "Next")) - self.btnGprd.setText(_translate("MainWindow", "Disk partitioning")) self.btnIssue.setText(_translate("MainWindow", "Issue Tracker")) self.btnContrib.setText(_translate("MainWindow", "Contribute")) - self.btnQuit.setText(_translate("MainWindow", "Quit")) self.btnTelegram.setText(_translate("MainWindow", "Telegram Chat")) + self.btnQuit.setText(_translate("MainWindow", "Quit")) + self.btnNext.setText(_translate("MainWindow", "Next")) self.desc2.setText(_translate("MainWindow", "Advanced options")) self.btnSoftware.setText(_translate("MainWindow", "Install Software")) self.btnPrev.setText(_translate("MainWindow", "Previous")) diff --git a/tileos_welcome/ui_warning.py b/tileos_welcome/ui_warning.py new file mode 100644 index 0000000..8dc66cd --- /dev/null +++ b/tileos_welcome/ui_warning.py @@ -0,0 +1,41 @@ +# Form implementation generated from reading ui file 'tileos_welcome/ui/warning.ui' +# +# Created by: PyQt6 UI code generator 6.4.2 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_WarningMessage(object): + def setupUi(self, WarningMessage): + WarningMessage.setObjectName("WarningMessage") + WarningMessage.resize(640, 100) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(WarningMessage.sizePolicy().hasHeightForWidth()) + WarningMessage.setSizePolicy(sizePolicy) + WarningMessage.setMinimumSize(QtCore.QSize(640, 100)) + WarningMessage.setMaximumSize(QtCore.QSize(640, 100)) + WarningMessage.setWindowTitle("") + self.verticalLayout = QtWidgets.QVBoxLayout(WarningMessage) + self.verticalLayout.setObjectName("verticalLayout") + self.label = QtWidgets.QLabel(parent=WarningMessage) + self.label.setWordWrap(True) + self.label.setObjectName("label") + self.verticalLayout.addWidget(self.label) + self.buttonBox = QtWidgets.QDialogButtonBox(parent=WarningMessage) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Ok) + self.buttonBox.setObjectName("buttonBox") + self.verticalLayout.addWidget(self.buttonBox) + + self.retranslateUi(WarningMessage) + self.buttonBox.accepted.connect(WarningMessage.accept) # type: ignore + QtCore.QMetaObject.connectSlotsByName(WarningMessage) + + def retranslateUi(self, WarningMessage): + _translate = QtCore.QCoreApplication.translate + self.label.setText(_translate("WarningMessage", "Your system is already installed! If you wish to reinstall it, boot from the installation media."))