Package editing
This commit is contained in:
46
horsygui.py
46
horsygui.py
@@ -1,7 +1,8 @@
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import math
|
||||
import threading
|
||||
import time
|
||||
import webbrowser
|
||||
import modules.vars as horsy_vars
|
||||
from PyQt5 import QtWidgets
|
||||
@@ -29,6 +30,10 @@ UiDownloadWindow = QtWidgets.QMainWindow()
|
||||
download_ui = gui.Ui_DownloadWindow()
|
||||
download_ui.setupUi(UiDownloadWindow)
|
||||
|
||||
UiPackageWindow = QtWidgets.QMainWindow()
|
||||
package_ui = gui.Ui_PackageWindow()
|
||||
package_ui.setupUi(UiPackageWindow)
|
||||
|
||||
if __name__ == "__main__":
|
||||
UiMainWindow.show()
|
||||
from modules.login import loginload
|
||||
@@ -177,6 +182,43 @@ def login_logout_gui():
|
||||
ui.username_box.setText(login())
|
||||
|
||||
|
||||
def get_users_apps():
|
||||
def get_threaded():
|
||||
apps = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/users/public"
|
||||
f"/{ui.username_box.text()}").json()
|
||||
try:
|
||||
if apps['message'] == 'Too many requests':
|
||||
while apps['message'] == 'Too many requests':
|
||||
time.sleep(0.5)
|
||||
apps = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/users/public"
|
||||
f"/{ui.username_box.text()}").json()
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
apps = apps['packages']
|
||||
ui.manage_packages_table.clear()
|
||||
ui.manage_packages_table.setColumnCount(4)
|
||||
ui.manage_packages_table.setRowCount(math.ceil(len(apps) / 4))
|
||||
for i in range(len(apps)):
|
||||
ui.manage_packages_table.setItem(i // 4, i % 4, QtWidgets.QTableWidgetItem(str(apps[i])))
|
||||
except:
|
||||
pass
|
||||
threading.Thread(target=get_threaded).start()
|
||||
|
||||
|
||||
def gui_package_edit():
|
||||
from modules.package_edit import edit
|
||||
try:
|
||||
app_name = ui.manage_packages_table.currentItem().text()
|
||||
if app_name == "":
|
||||
return
|
||||
else:
|
||||
UiPackageWindow.show()
|
||||
edit(app_name, UiPackageWindow)
|
||||
except:
|
||||
return
|
||||
|
||||
|
||||
# Run functions on startup
|
||||
if __name__ == "__main__":
|
||||
# Checking version
|
||||
@@ -201,6 +243,7 @@ if __name__ == "__main__":
|
||||
os.system('horsy_updater.exe horsygui')
|
||||
sys.exit()
|
||||
|
||||
get_users_apps()
|
||||
installed_apps()
|
||||
|
||||
# Binds
|
||||
@@ -220,6 +263,7 @@ if __name__ == "__main__":
|
||||
ui.changepass_button.clicked.connect(change_password_gui)
|
||||
ui.changeemail_button.clicked.connect(change_email_gui)
|
||||
ui.loginlogout_button.clicked.connect(login_logout_gui)
|
||||
ui.manage_packages_table.itemDoubleClicked.connect(gui_package_edit)
|
||||
|
||||
# Handle GUI exiting to exit whole program
|
||||
sys.exit(app.exec_())
|
||||
|
||||
140
modules/gui.py
140
modules/gui.py
@@ -93,22 +93,22 @@ class Ui_MainWindow(object):
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);\n"
|
||||
"padding: 0px 5px 0px 5px;\n")
|
||||
self.username_box.setText("")
|
||||
self.username_box.setText("Log in first")
|
||||
self.username_box.setReadOnly(True)
|
||||
self.username_box.setObjectName("username_box")
|
||||
self.regmessage_box = QtWidgets.QLineEdit(self.account_tab)
|
||||
self.regmessage_box.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
||||
self.regmessage_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(27, 166, 221);")
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(27, 166, 221);")
|
||||
self.regmessage_box.setText(" Still not registered? Click here")
|
||||
self.regmessage_box.setReadOnly(True)
|
||||
self.regmessage_box.setObjectName("regmessage_box")
|
||||
self.regmessage_button = QtWidgets.QPushButton(self.account_tab)
|
||||
self.regmessage_button.setGeometry(QtCore.QRect(720, 110, 151, 31))
|
||||
self.regmessage_button.setStyleSheet("background-color: rgb(0, 0, 0, 0);\n"
|
||||
"border-color: rgb(0, 0, 0, 0);\n"
|
||||
"color: rgb(0, 0, 0, 0);")
|
||||
"border-color: rgb(0, 0, 0, 0);\n"
|
||||
"color: rgb(0, 0, 0, 0);")
|
||||
self.regmessage_button.setText("")
|
||||
self.regmessage_button.setObjectName("regmessage_button")
|
||||
self.changeemail_button = QtWidgets.QPushButton(self.account_tab)
|
||||
@@ -202,13 +202,13 @@ class Ui_MainWindow(object):
|
||||
self.manage_packages_table = QtWidgets.QTableWidget(self.account_tab)
|
||||
self.manage_packages_table.setGeometry(QtCore.QRect(10, 240, 871, 411))
|
||||
self.manage_packages_table.setStyleSheet("QTableWidget\n"
|
||||
"{\n"
|
||||
"color: white;\n"
|
||||
"font: 15pt \"MS Shell Dlg 2\";\n"
|
||||
"margin: 20px;\n"
|
||||
"border-radius: 45px;\n"
|
||||
"}\n"
|
||||
"")
|
||||
"{\n"
|
||||
"color: white;\n"
|
||||
"font: 15pt \"MS Shell Dlg 2\";\n"
|
||||
"margin: 20px;\n"
|
||||
"border-radius: 45px;\n"
|
||||
"}\n"
|
||||
"")
|
||||
self.manage_packages_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
|
||||
self.manage_packages_table.setAutoScroll(False)
|
||||
self.manage_packages_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
|
||||
@@ -217,7 +217,7 @@ class Ui_MainWindow(object):
|
||||
self.manage_packages_table.setDragDropOverwriteMode(False)
|
||||
self.manage_packages_table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
|
||||
self.manage_packages_table.setShowGrid(False)
|
||||
self.manage_packages_table.setObjectName("manage_packages_table")
|
||||
self.manage_packages_table.setObjectName("installed_table")
|
||||
self.manage_packages_table.horizontalHeader().setVisible(False)
|
||||
self.manage_packages_table.horizontalHeader().setDefaultSectionSize(203)
|
||||
self.manage_packages_table.horizontalHeader().setHighlightSections(False)
|
||||
@@ -225,6 +225,10 @@ class Ui_MainWindow(object):
|
||||
self.manage_packages_table.verticalHeader().setVisible(False)
|
||||
self.manage_packages_table.verticalHeader().setDefaultSectionSize(120)
|
||||
self.manage_packages_table.verticalHeader().setHighlightSections(False)
|
||||
self.manage_packages_table.setLayoutDirection(QtCore.Qt.LeftToRight)
|
||||
self.manage_packages_table.setColumnCount(0)
|
||||
self.manage_packages_table.setRowCount(0)
|
||||
self.manage_packages_table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
||||
self.manage_packages_message = QtWidgets.QTextBrowser(self.account_tab)
|
||||
self.manage_packages_message.setGeometry(QtCore.QRect(380, 230, 121, 21))
|
||||
self.manage_packages_message.setStyleSheet("color: white;\n"
|
||||
@@ -803,6 +807,116 @@ class Ui_DownloadWindow(object):
|
||||
self.logs_box.setPlaceholderText(_translate("MainWindow", "Logs"))
|
||||
|
||||
|
||||
class Ui_PackageWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(331, 433)
|
||||
MainWindow.setMinimumSize(QtCore.QSize(331, 433))
|
||||
MainWindow.setMaximumSize(QtCore.QSize(331, 433))
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setStyleSheet("QWidget{\n"
|
||||
" background-color: rgb(30, 30, 30);\n"
|
||||
"}\n"
|
||||
"")
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.packagename_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.packagename_box.setGeometry(QtCore.QRect(20, 20, 151, 31))
|
||||
self.packagename_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.packagename_box.setText("")
|
||||
self.packagename_box.setReadOnly(True)
|
||||
self.packagename_box.setObjectName("packagename_box")
|
||||
self.main_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.main_exe_box.setGeometry(QtCore.QRect(20, 305, 291, 31))
|
||||
self.main_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.main_exe_box.setObjectName("main_exe_box")
|
||||
self.source_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.source_url_box.setGeometry(QtCore.QRect(20, 200, 291, 31))
|
||||
self.source_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.source_url_box.setObjectName("source_url_box")
|
||||
self.url_of_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.url_of_exe_box.setGeometry(QtCore.QRect(20, 165, 291, 31))
|
||||
self.url_of_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.url_of_exe_box.setObjectName("url_of_exe_box")
|
||||
self.dependency_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.dependency_url_box.setGeometry(QtCore.QRect(20, 235, 291, 31))
|
||||
self.dependency_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.dependency_url_box.setObjectName("dependency_url_box")
|
||||
self.dependency_run_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.dependency_run_box.setGeometry(QtCore.QRect(20, 270, 291, 31))
|
||||
self.dependency_run_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.dependency_run_box.setObjectName("dependency_run_box")
|
||||
self.package_desc_box = QtWidgets.QTextBrowser(self.centralwidget)
|
||||
self.package_desc_box.setGeometry(QtCore.QRect(20, 60, 256, 101))
|
||||
self.package_desc_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.package_desc_box.setAcceptRichText(False)
|
||||
self.package_desc_box.setTextInteractionFlags(
|
||||
QtCore.Qt.LinksAccessibleByKeyboard | QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextBrowserInteraction | QtCore.Qt.TextEditable | QtCore.Qt.TextEditorInteraction | QtCore.Qt.TextSelectableByKeyboard | QtCore.Qt.TextSelectableByMouse)
|
||||
self.package_desc_box.setObjectName("package_desc_box")
|
||||
self.update_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.update_button.setEnabled(True)
|
||||
self.update_button.setGeometry(QtCore.QRect(20, 360, 291, 50))
|
||||
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.update_button.setStyleSheet("QPushButton {\n"
|
||||
" color: rgb(204, 204, 204);\n"
|
||||
" border-width: 1px;\n"
|
||||
" border-radius:6px;\n"
|
||||
" border-style: solid;\n"
|
||||
" background-color: rgb(28, 30, 33);\n"
|
||||
" border-color: rgb(66, 143, 225);\n"
|
||||
"}\n"
|
||||
"QPushButton:hover{\n"
|
||||
" border-width: 2px;\n"
|
||||
"}\n"
|
||||
"QPushButton:pressed{\n"
|
||||
" background-color: rgb(50, 60, 63);\n"
|
||||
"}\n"
|
||||
"QPushButton:disabled{\n"
|
||||
" border-width: 0px;\n"
|
||||
" background-color: rgb(92, 99, 109);\n"
|
||||
"}")
|
||||
self.update_button.setObjectName("update_button")
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "horsy - editing package"))
|
||||
self.packagename_box.setPlaceholderText(_translate("MainWindow", "Editing package"))
|
||||
self.main_exe_box.setPlaceholderText(
|
||||
_translate("MainWindow", "Main executable command (file.exe, python main.py, etc)"))
|
||||
self.source_url_box.setPlaceholderText(
|
||||
_translate("MainWindow", "Url of source (project on GitHub, source archive)"))
|
||||
self.url_of_exe_box.setPlaceholderText(_translate("MainWindow", "Url of executable (ends on .exe or .zip)"))
|
||||
self.dependency_url_box.setPlaceholderText(_translate("MainWindow", "Dependency URL (installer in .exe)"))
|
||||
self.dependency_run_box.setPlaceholderText(
|
||||
_translate("MainWindow", "Dependency run (run this during installation)"))
|
||||
self.package_desc_box.setHtml(_translate("MainWindow",
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||
"p, li { white-space: pre-wrap; }\n"
|
||||
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
|
||||
self.package_desc_box.setPlaceholderText(
|
||||
_translate("MainWindow", "Package description. It should be a short text under 256 characters"))
|
||||
self.update_button.setText(_translate("MainWindow", "Update"))
|
||||
|
||||
|
||||
def popup(title, text):
|
||||
QtWidgets.QMessageBox.information(None, title, text)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import zipfile
|
||||
from modules.virustotal import get_key, scan_file, get_report
|
||||
|
||||
|
||||
def install(package, is_gui=False, UiDownloadWindow=None, ui_download=None):
|
||||
def install(package):
|
||||
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
||||
if r == "":
|
||||
print(f"[red]Package {package} not found[/]")
|
||||
@@ -127,7 +127,7 @@ def install(package, is_gui=False, UiDownloadWindow=None, ui_download=None):
|
||||
return
|
||||
|
||||
|
||||
def uninstall(package, is_gui=False):
|
||||
def uninstall(package):
|
||||
if os.path.exists('{1}apps/{0}'.format(package, horsy_vars.horsypath)):
|
||||
os.system('rmdir /s /q "{1}apps/{0}"'.format(package, horsy_vars.horsypath))
|
||||
print(f"[green][OK] Files deleted[/]")
|
||||
|
||||
69
modules/package_edit.py
Normal file
69
modules/package_edit.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import time
|
||||
from modules.auth import get_auth
|
||||
from horsygui import login_ui, UiLoginWindow as Ui_LoginWindow
|
||||
import modules.gui as gui
|
||||
import requests
|
||||
from PyQt5 import QtWidgets
|
||||
import modules.vars as horsy_vars
|
||||
import json
|
||||
|
||||
|
||||
def edit(package, UiPackageWindow):
|
||||
package_ui = gui.Ui_PackageWindow()
|
||||
package_ui.setupUi(UiPackageWindow)
|
||||
|
||||
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
||||
if r == "":
|
||||
gui.cpopup("Installation", f"Package {package} not found")
|
||||
return f"Package {package} not found"
|
||||
try:
|
||||
r = json.loads(r)
|
||||
except:
|
||||
print("[red]Error with unsupported message[/]")
|
||||
gui.cpopup("Error", "Error with unsupported message")
|
||||
return "Error with unsupported message"
|
||||
try:
|
||||
if r["message"] == "Internal server error":
|
||||
print("Internal server error")
|
||||
gui.cpopup("Error", "Internal server error")
|
||||
return "Internal server error"
|
||||
if r["message"] == "Too many requests":
|
||||
try:
|
||||
if r['message'] == 'Too many requests':
|
||||
while r['message'] == 'Too many requests':
|
||||
time.sleep(0.5)
|
||||
r = requests.get(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages/json/{package}").text
|
||||
try:
|
||||
r = json.loads(r)
|
||||
except:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
package_ui.packagename_box.setText("Editing package " + r["name"])
|
||||
package_ui.package_desc_box.setText(r["description"])
|
||||
package_ui.url_of_exe_box.setText(r["url"])
|
||||
package_ui.source_url_box.setText(r["sourceUrl"])
|
||||
package_ui.dependency_url_box.setText(r["download"])
|
||||
package_ui.dependency_run_box.setText(r["install"])
|
||||
package_ui.main_exe_box.setText(r["run"])
|
||||
|
||||
UiPackageWindow.show()
|
||||
|
||||
def send():
|
||||
body = {
|
||||
'auth': get_auth(True, login_ui, Ui_LoginWindow),
|
||||
'name': package,
|
||||
'description': (lambda x: x if x != '' else None)(package_ui.package_desc_box.toPlainText()),
|
||||
'url': (lambda x: x if x != '' else None)(package_ui.url_of_exe_box.text()),
|
||||
'sourceUrl': (lambda x: x if x != '' else None)(package_ui.source_url_box.text()),
|
||||
'download': (lambda x: x if x != '' else None)(package_ui.dependency_url_box.text()),
|
||||
'install': (lambda x: x if x != '' else None)(package_ui.dependency_run_box.text()),
|
||||
'run': (lambda x: x if x != '' else None)(package_ui.main_exe_box.text())
|
||||
}
|
||||
|
||||
r = requests.put(f"{horsy_vars.protocol}{horsy_vars.server_url}/packages", json=body).text # TODO: add error handling
|
||||
|
||||
package_ui.update_button.clicked.connect(send)
|
||||
@@ -385,6 +385,9 @@ QPushButton:disabled{
|
||||
<height>411</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QTableWidget
|
||||
{
|
||||
@@ -423,10 +426,10 @@ border-radius: 45px;
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="rowCount">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>4</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
@@ -449,21 +452,6 @@ border-radius: 45px;
|
||||
<attribute name="verticalHeaderHighlightSections">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<row/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column/>
|
||||
<item row="0" column="0">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
<widget class="QTextBrowser" name="manage_packages_message">
|
||||
<property name="geometry">
|
||||
|
||||
123
uis/horsy_package.py
Normal file
123
uis/horsy_package.py
Normal file
@@ -0,0 +1,123 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'D:\RAZNOE\prgrming\horsy\Source\client\uis\horsy_package.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.6
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(331, 433)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setStyleSheet("QWidget{\n"
|
||||
" background-color: rgb(30, 30, 30);\n"
|
||||
"}\n"
|
||||
"")
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.packagename_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.packagename_box.setGeometry(QtCore.QRect(20, 20, 151, 31))
|
||||
self.packagename_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.packagename_box.setText("")
|
||||
self.packagename_box.setReadOnly(True)
|
||||
self.packagename_box.setObjectName("packagename_box")
|
||||
self.main_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.main_exe_box.setGeometry(QtCore.QRect(20, 305, 291, 31))
|
||||
self.main_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.main_exe_box.setObjectName("main_exe_box")
|
||||
self.source_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.source_url_box.setGeometry(QtCore.QRect(20, 200, 291, 31))
|
||||
self.source_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.source_url_box.setObjectName("source_url_box")
|
||||
self.url_of_exe_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.url_of_exe_box.setGeometry(QtCore.QRect(20, 165, 291, 31))
|
||||
self.url_of_exe_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.url_of_exe_box.setObjectName("url_of_exe_box")
|
||||
self.dependency_url_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.dependency_url_box.setGeometry(QtCore.QRect(20, 235, 291, 31))
|
||||
self.dependency_url_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.dependency_url_box.setObjectName("dependency_url_box")
|
||||
self.dependency_run_box = QtWidgets.QLineEdit(self.centralwidget)
|
||||
self.dependency_run_box.setGeometry(QtCore.QRect(20, 270, 291, 31))
|
||||
self.dependency_run_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.dependency_run_box.setObjectName("dependency_run_box")
|
||||
self.package_desc_box = QtWidgets.QTextBrowser(self.centralwidget)
|
||||
self.package_desc_box.setGeometry(QtCore.QRect(20, 60, 256, 101))
|
||||
self.package_desc_box.setStyleSheet("background-color: rgb(74, 76, 83);\n"
|
||||
"border-radius: 5px; \n"
|
||||
"color: rgb(242, 242, 242);")
|
||||
self.package_desc_box.setAcceptRichText(False)
|
||||
self.package_desc_box.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByKeyboard|QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextBrowserInteraction|QtCore.Qt.TextEditable|QtCore.Qt.TextEditorInteraction|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
|
||||
self.package_desc_box.setObjectName("package_desc_box")
|
||||
self.update_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.update_button.setEnabled(True)
|
||||
self.update_button.setGeometry(QtCore.QRect(20, 360, 291, 50))
|
||||
self.update_button.setMinimumSize(QtCore.QSize(0, 50))
|
||||
self.update_button.setStyleSheet("QPushButton {\n"
|
||||
" color: rgb(204, 204, 204);\n"
|
||||
" border-width: 1px;\n"
|
||||
" border-radius:6px;\n"
|
||||
" border-style: solid;\n"
|
||||
" background-color: rgb(28, 30, 33);\n"
|
||||
" border-color: rgb(66, 143, 225);\n"
|
||||
"}\n"
|
||||
"QPushButton:hover{\n"
|
||||
" border-width: 2px;\n"
|
||||
"}\n"
|
||||
"QPushButton:pressed{\n"
|
||||
" background-color: rgb(50, 60, 63);\n"
|
||||
"}\n"
|
||||
"QPushButton:disabled{\n"
|
||||
" border-width: 0px;\n"
|
||||
" background-color: rgb(92, 99, 109);\n"
|
||||
"}")
|
||||
self.update_button.setObjectName("update_button")
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "horsy - editing package"))
|
||||
self.packagename_box.setPlaceholderText(_translate("MainWindow", "Editing package"))
|
||||
self.main_exe_box.setPlaceholderText(_translate("MainWindow", "Main executable command (file.exe, python main.py, etc)"))
|
||||
self.source_url_box.setPlaceholderText(_translate("MainWindow", "Url of source (project on GitHub, source archive)"))
|
||||
self.url_of_exe_box.setPlaceholderText(_translate("MainWindow", "Url of executable (ends on .exe or .zip)"))
|
||||
self.dependency_url_box.setPlaceholderText(_translate("MainWindow", "Dependency URL (installer in .exe)"))
|
||||
self.dependency_run_box.setPlaceholderText(_translate("MainWindow", "Dependency run (run this during installation)"))
|
||||
self.package_desc_box.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||
"p, li { white-space: pre-wrap; }\n"
|
||||
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
|
||||
self.package_desc_box.setPlaceholderText(_translate("MainWindow", "Package description. It should be a short text under 256 characters"))
|
||||
self.update_button.setText(_translate("MainWindow", "Update"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
MainWindow = QtWidgets.QMainWindow()
|
||||
ui = Ui_MainWindow()
|
||||
ui.setupUi(MainWindow)
|
||||
MainWindow.show()
|
||||
sys.exit(app.exec_())
|
||||
214
uis/horsy_package.ui
Normal file
214
uis/horsy_package.ui
Normal file
@@ -0,0 +1,214 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>331</width>
|
||||
<height>433</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>horsy - editing package</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QWidget{
|
||||
background-color: rgb(30, 30, 30);
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<widget class="QLineEdit" name="packagename_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>20</y>
|
||||
<width>151</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Editing package</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="main_exe_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>305</y>
|
||||
<width>291</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Main executable command (file.exe, python main.py, etc)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="source_url_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>200</y>
|
||||
<width>291</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Url of source (project on GitHub, source archive)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="url_of_exe_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>165</y>
|
||||
<width>291</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Url of executable (ends on .exe or .zip)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="dependency_url_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>235</y>
|
||||
<width>291</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Dependency URL (installer in .exe)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="dependency_run_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>270</y>
|
||||
<width>291</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Dependency run (run this during installation)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTextBrowser" name="package_desc_box">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>60</y>
|
||||
<width>256</width>
|
||||
<height>101</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(74, 76, 83);
|
||||
border-radius: 5px;
|
||||
color: rgb(242, 242, 242);</string>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></string>
|
||||
</property>
|
||||
<property name="acceptRichText">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextEditable|Qt::TextEditorInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>Package description. It should be a short text under 256 characters</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="update_button">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>360</y>
|
||||
<width>291</width>
|
||||
<height>50</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>50</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton {
|
||||
color: rgb(204, 204, 204);
|
||||
border-width: 1px;
|
||||
border-radius:6px;
|
||||
border-style: solid;
|
||||
background-color: rgb(28, 30, 33);
|
||||
border-color: rgb(66, 143, 225);
|
||||
}
|
||||
QPushButton:hover{
|
||||
border-width: 2px;
|
||||
}
|
||||
QPushButton:pressed{
|
||||
background-color: rgb(50, 60, 63);
|
||||
}
|
||||
QPushButton:disabled{
|
||||
border-width: 0px;
|
||||
background-color: rgb(92, 99, 109);
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Update</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
Reference in New Issue
Block a user