Loads database and fills gui with items

This commit is contained in:
BarsTiger
2022-07-29 18:11:05 +03:00
commit 096e9d7f0d
30 changed files with 3864 additions and 0 deletions

0
gui/modules/__init__.py Normal file
View File

133
gui/modules/blur.py Normal file
View File

@@ -0,0 +1,133 @@
# source: https://github.com/Opticos/GWSL-Source/blob/master/blur.py,
# https://www.cnblogs.com/zhiyiYo/p/14659981.html ,
# https://github.com/ifwe/digsby/blob/master/digsby/src/gui/vista.py
import platform
import ctypes
if platform.system() == 'Windows':
from ctypes.wintypes import DWORD, BOOL, HRGN, HWND
user32 = ctypes.windll.user32
dwm = ctypes.windll.dwmapi
class ACCENTPOLICY(ctypes.Structure):
_fields_ = [
("AccentState", ctypes.c_uint),
("AccentFlags", ctypes.c_uint),
("GradientColor", ctypes.c_uint),
("AnimationId", ctypes.c_uint)
]
class WINDOWCOMPOSITIONATTRIBDATA(ctypes.Structure):
_fields_ = [
("Attribute", ctypes.c_int),
("Data", ctypes.POINTER(ctypes.c_int)),
("SizeOfData", ctypes.c_size_t)
]
class DWM_BLURBEHIND(ctypes.Structure):
_fields_ = [
('dwFlags', DWORD),
('fEnable', BOOL),
('hRgnBlur', HRGN),
('fTransitionOnMaximized', BOOL)
]
class MARGINS(ctypes.Structure):
_fields_ = [("cxLeftWidth", ctypes.c_int),
("cxRightWidth", ctypes.c_int),
("cyTopHeight", ctypes.c_int),
("cyBottomHeight", ctypes.c_int)
]
SetWindowCompositionAttribute = user32.SetWindowCompositionAttribute
SetWindowCompositionAttribute.argtypes = (HWND, WINDOWCOMPOSITIONATTRIBDATA)
SetWindowCompositionAttribute.restype = ctypes.c_int
def ExtendFrameIntoClientArea(hwnd):
margins = MARGINS(-1, -1, -1, -1)
dwm.DwmExtendFrameIntoClientArea(hwnd, ctypes.byref(margins))
def Win7Blur(hwnd, Acrylic):
if not Acrylic:
DWM_BB_ENABLE = 0x01
bb = DWM_BLURBEHIND()
bb.dwFlags = DWM_BB_ENABLE
bb.fEnable = 1
bb.hRgnBlur = 1
dwm.DwmEnableBlurBehindWindow(hwnd, ctypes.byref(bb))
else:
ExtendFrameIntoClientArea(hwnd)
def HEXtoRGBAint(HEX: str):
alpha = HEX[7:]
blue = HEX[5:7]
green = HEX[3:5]
red = HEX[1:3]
gradient_color = alpha + blue + green + red
return int(gradient_color, base=16)
def blur(hwnd, hex_color=False, acrylic=False, dark=False):
accent = ACCENTPOLICY()
accent.AccentState = 3 # Default window Blur #ACCENT_ENABLE_BLURBEHIND
gradient_color = 0
if hex_color:
gradient_color = HEXtoRGBAint(hex_color)
accent.AccentFlags = 2 # Window Blur With Accent Color #ACCENT_ENABLE_TRANSPARENTGRADIENT
if acrylic:
accent.AccentState = 4 # UWP but LAG #ACCENT_ENABLE_ACRYLICBLURBEHIND
if not hex_color: # UWP without color is translucent
accent.AccentFlags = 2
gradient_color = HEXtoRGBAint('#12121240') # placeholder color
accent.GradientColor = gradient_color
data = WINDOWCOMPOSITIONATTRIBDATA()
data.Attribute = 19 # WCA_ACCENT_POLICY
data.SizeOfData = ctypes.sizeof(accent)
data.Data = ctypes.cast(ctypes.pointer(accent), ctypes.POINTER(ctypes.c_int))
SetWindowCompositionAttribute(int(hwnd), data)
if dark:
data.Attribute = 26 # WCA_USEDARKMODECOLORS
SetWindowCompositionAttribute(int(hwnd), data)
def BlurLinux(WID): # may not work in all distros (working in Deepin)
import os
c = "xprop -f _KDE_NET_WM_BLUR_BEHIND_REGION 32c -set _KDE_NET_WM_BLUR_BEHIND_REGION 0 -id " + str(WID)
os.system(c)
def GlobalBlur(hwnd, hex_color=False, acrylic=False, dark=False):
release = platform.release()
system = platform.system()
if system == 'Windows':
if release == 'Vista':
Win7Blur(hwnd, acrylic)
else:
release = int(float(release))
if release == 10 or release == 8 or release == 11:
blur(hwnd, hex_color, acrylic, dark)
else:
Win7Blur(hwnd, acrylic)
if system == 'Linux':
BlurLinux(hwnd)

20
gui/modules/popup.py Normal file
View File

@@ -0,0 +1,20 @@
import ctypes
def qtpopup(title, text):
from PyQt5 import QtWidgets
QtWidgets.QMessageBox.information(None, title, text)
def popup(title, text, style=0):
"""
Styles:
0 : OK
1 : OK | Cancel
2 : Abort | Retry | Ignore
3 : Yes | No | Cancel
4 : Yes | No
5 : Retry | Cancel
6 : Cancel | Try Again | Continue
"""
return ctypes.windll.user32.MessageBoxW(0, text, title, style)

32
gui/modules/setup_ui.py Normal file
View File

@@ -0,0 +1,32 @@
import requests
from gui.gui import Ui_MainWindow
from .blur import GlobalBlur
from gui.modules import styles
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QMainWindow
from modules.config import Config
from modules.database import Database
def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
ui.logo_if_empty.hide()
ui.content.setCurrentIndex(0)
MainWindow.setStyleSheet(styles.centralwidget())
if 'acrylic' in Config.get().theme:
GlobalBlur(MainWindow.winId(), acrylic=True)
if Database.get().items:
for item in Database.get().items:
item = Database.get().items[item]
list_item = QtWidgets.QListWidgetItem()
list_item.setText(f'{item.item_name} - ${"{:,}".format(item.price)}')
pixmap = QtGui.QPixmap()
pixmap.loadFromData(requests.get(item.image).content)
list_item.setIcon(QtGui.QIcon(pixmap))
ui.items_list.addItem(list_item)
else:
ui.logo_if_empty.show()
ui.items_list.hide()

545
gui/modules/styles.py Normal file
View File

@@ -0,0 +1,545 @@
from modules.config import Config
centralwidget_b = """
QWidget {
background-color: rgba(30, 30, 30, 0.1);
color: white;
font: 10pt "Segoe UI";
}
QScrollBar:vertical,
QScrollBar:horizontal {
border: none;
background: rgba(30, 30, 30, 0);
width: 10px;
margin: 15px 0 15px 0;
border-radius: 0px;
}
QScrollBar::handle:vertical,
QScrollBar::handle:horizontal {
background-color: rgba(139, 139, 139, 0);
min-height: 30px;
border-radius: 5px;
}
QScrollBar::handle:vertical:hover,
QScrollBar::handle:vertical:pressed,
QScrollBar::handle:horizontal:hover,
QScrollBar::handle:horizontal:pressed {
background-color: rgba(149, 149, 149, 0);
}
QScrollBar::sub-line:vertical,
QScrollBar::add-line:vertical,
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical {
height: 0px;
}
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical,
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical,
QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
background: none;
}
QPushButton {
color: white;
border-width: 1px;
border-radius:6px;
border-style: solid;
border-color: rgba(48, 48, 48, 0.5);
background-color: rgba(44, 45, 46, 0.3);
}
QPushButton:hover {
border-width: 2px;
background-color: rgba(50, 50, 50, 0.7);
}
QPushButton:pressed {
background-color: rgba(38, 39, 40, 0.7);
}
QPushButton:disabled {
background-color: rgba(67, 67, 67, 0.7);
border-color: rgba(0, 0, 0, 0.7);
}
QLineEdit, QTextBrowser, QPlainTextEdit, QTextEdit {
border-width: 1px;
border-radius: 5px;
border-style: solid;
border-color: rgba(48, 48, 48);
background-color: rgba(36, 36, 36, 0);
font: 10pt "Segoe UI";
}
QListWidget {
border-width: 1px;
border-radius: 15px;
border-style: solid;
border-color: rgba(48, 48, 48);
padding: 10px;
background-color: rgba(100, 100, 100, 0);
font: 10pt "Segoe UI";
}
QListWidget:item {
background-color: rgba(36, 36, 36, 0);
selection-color: white;
}
QListWidget:item:hover {
background-color: rgba(50, 50, 50, 0);
}
QListWidget:item:selected {
background-color: rgba(119, 119, 119, 1);
}
QComboBox
{
border-width: 1px;
border-radius:6px;
border-style: solid;
border-color: rgba(48, 48, 48);
background-color: rgba(44, 45, 46, 0);
color: white;
}
QComboBox::disabled
{
background-color: rgba(67, 67, 67, 0);
color: #656565;
border-color: rgba(67, 67, 67);
}
QComboBox:hover
{
background-color: rgba(50, 50, 50, 0);
}
QComboBox:on
{
background-color: rgba(67, 67, 67, 0);
}
QComboBox QAbstractItemView
{
background-color: rgba(67, 67, 67, 0);
color: #ffffff;
selection-background-color: rgba(119, 119, 119, 0);
selection-color: white;
outline: 0;
}
QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
border-radius: 6px;
}
QTabBar::tab
{
background-color: rgba(44, 45, 46, 0);
color: #ffffff;
border-style: solid;
border-width: 1px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-color: rgba(48, 48, 48);
padding: 5px;
}
QTabBar::tab:disabled
{
background-color: rgba(101, 101, 101, 0);
color: #656565;
}
QTabWidget::pane
{
background-color: rgba(160, 160, 160, 0);
color: #ffffff;
border: 3px solid;
border-radius: 15px;
border-color: rgba(28, 28, 28);
}
QTabBar::tab:selected
{
background-color: rgba(38, 39, 40, 0);
color: #ffffff;
border-style: solid;
border-width: 1px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-color: rgba(48, 48, 48);
padding: 5px;
}
QTabBar::tab:selected:disabled
{
background-color: rgba(64, 64, 64, 0);
color: #656565;
}
QTabBar::tab:!selected
{
background-color: rgba(38, 38, 38, 0);
}
QTabBar::tab:!selected:hover
{
background-color: rgba(50, 50, 50, 0);
}
QTabBar::tab:top:!selected
{
margin-top: 3px;
}
QTabBar::tab:bottom:!selected
{
margin-bottom: 3px;
}
QTabBar::tab:top, QTabBar::tab:bottom
{
min-width: 8ex;
margin-right: -1px;
padding: 5px 10px 5px 10px;
}
QTabBar::tab:top:selected
{
border-bottom-color: none;
}
QTabBar::tab:bottom:selected
{
border-top-color: none;
}
QTabBar::tab:top:last, QTabBar::tab:bottom:last,
QTabBar::tab:top:only-one, QTabBar::tab:bottom:only-one
{
margin-right: 0;
}
QTabBar::tab:left:!selected
{
margin-right: 3px;
}
QTabBar::tab:right:!selected
{
margin-left: 3px;
}
QTabBar::tab:left, QTabBar::tab:right
{
min-height: 8ex;
margin-bottom: -1px;
padding: 10px 5px 10px 5px;
}
QTabBar::tab:left:selected
{
border-left-color: none;
}
QTabBar::tab:right:selected
{
border-right-color: none;
}
QTabBar::tab:left:last, QTabBar::tab:right:last,
QTabBar::tab:left:only-one, QTabBar::tab:right:only-one
{
margin-bottom: 0;
}
"""
menupage_b = """
QListWidget {
border-width: 0px;
border-radius: 0px;
border: none;
padding: 0px;
background-color: rgba(36, 36, 36, 0);
font: 10pt "Segoe UI";
}
QListWidget:item {
padding-left: 10px;
height: 60px;
background-color: rgba(25, 25, 25, 0);
selection-color: rgba(255, 255, 255);
}
QListWidget:item:hover {
background-color: rgba(50, 50, 50, 0);
}
QListWidget:item:selected {
background-color: rgba(38, 39, 40, 0);
}
"""
centralwidget_g = """
QWidget {
background-color: rgb(30, 30, 30);
color: rgb(255, 255, 255);
font: 10pt "Segoe UI";
}
QScrollBar:vertical,
QScrollBar:horizontal {
border: none;
background: rgb(30, 30, 30);
width: 10px;
margin: 15px 0 15px 0;
border-radius: 0px;
}
QScrollBar::handle:vertical,
QScrollBar::handle:horizontal {
background-color: rgb(139, 139, 139);
min-height: 30px;
border-radius: 5px;
}
QScrollBar::handle:vertical:hover,
QScrollBar::handle:vertical:pressed,
QScrollBar::handle:horizontal:hover,
QScrollBar::handle:horizontal:pressed {
background-color: rgb(149, 149, 149);
}
QScrollBar::sub-line:vertical,
QScrollBar::add-line:vertical,
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical {
height: 0px;
}
QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical,
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical,
QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
background: none;
}
QPushButton {
color: white;
border-width: 1px;
border-radius:6px;
border-style: solid;
border-color: #303030;
background-color: #2c2d2e;
}
QPushButton:hover {
border-width: 2px;
background-color: #323232;
}
QPushButton:pressed {
background-color: #262728;
}
QPushButton:disabled {
background-color: #434343;
border-color: #0000;
}
QLineEdit, QTextBrowser, QPlainTextEdit, QTextEdit {
border-width: 1px;
border-radius: 5px;
border-style: solid;
border-color: #303030;
background-color: #242424;
font: 10pt "Segoe UI";
}
QListWidget {
border-width: 1px;
border-radius: 15px;
border-style: solid;
border-color: #303030;
padding: 10px;
background-color: #242424;
font: 10pt "Segoe UI";
}
QListWidget:item {
background-color: #242424;
selection-color: white;
}
QListWidget:item:hover {
background-color: #323232;
}
QListWidget:item:selected {
background-color: #777777;
}
QComboBox
{
border-width: 1px;
border-radius:6px;
border-style: solid;
border-color: #303030;
background-color: #2c2d2e;
color: #ffffff;
}
QComboBox::disabled
{
background-color: #434343;
color: #656565;
border-color: #434343;
}
QComboBox:hover
{
background-color: #323232;
}
QComboBox:on
{
background-color: #434343;
}
QComboBox QAbstractItemView
{
background-color: #434343;
color: #ffffff;
selection-background-color: #777777;
selection-color: white;
outline: 0;
}
QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
border-radius: 6px;
}
QTabBar::tab
{
background-color: #2c2d2e;
color: #ffffff;
border-style: solid;
border-width: 1px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-color: #303030;
padding: 5px;
}
QTabBar::tab:disabled
{
background-color: #656565;
color: #656565;
}
QTabWidget::pane
{
background-color: #a0a0a0;
color: #ffffff;
border: 3px solid;
border-radius: 15px;
border-color: #1c1c1c;
}
QTabBar::tab:selected
{
background-color: #262728;
color: #ffffff;
border-style: solid;
border-width: 1px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-color: #303030;
padding: 5px;
}
QTabBar::tab:selected:disabled
{
background-color: #404040;
color: #656565;
}
QTabBar::tab:!selected
{
background-color: #262626;
}
QTabBar::tab:!selected:hover
{
background-color: #323232;
}
QTabBar::tab:top:!selected
{
margin-top: 3px;
}
QTabBar::tab:bottom:!selected
{
margin-bottom: 3px;
}
QTabBar::tab:top, QTabBar::tab:bottom
{
min-width: 8ex;
margin-right: -1px;
padding: 5px 10px 5px 10px;
}
QTabBar::tab:top:selected
{
border-bottom-color: none;
}
QTabBar::tab:bottom:selected
{
border-top-color: none;
}
QTabBar::tab:top:last, QTabBar::tab:bottom:last,
QTabBar::tab:top:only-one, QTabBar::tab:bottom:only-one
{
margin-right: 0;
}
QTabBar::tab:left:!selected
{
margin-right: 3px;
}
QTabBar::tab:right:!selected
{
margin-left: 3px;
}
QTabBar::tab:left, QTabBar::tab:right
{
min-height: 8ex;
margin-bottom: -1px;
padding: 10px 5px 10px 5px;
}
QTabBar::tab:left:selected
{
border-left-color: none;
}
QTabBar::tab:right:selected
{
border-right-color: none;
}
QTabBar::tab:left:last, QTabBar::tab:right:last,
QTabBar::tab:left:only-one, QTabBar::tab:right:only-one
{
margin-bottom: 0;
}
"""
menupage_g = """
QListWidget {
border-width: 0px;
border-radius: 0px;
border: none;
padding: 0px;
background-color: #242424;
font: 10pt "Segoe UI";
}
QListWidget:item {
padding-left: 10px;
height: 60px;
background-color: #191919;
selection-color: rgba(255, 255, 255);
}
QListWidget:item:hover {
background-color: #323232;
}
QListWidget:item:selected {
background-color: #262728;
}
"""
def centralwidget():
return centralwidget_g if Config.get().theme == "Dark gray" else centralwidget_b
def menupage():
return menupage_g if Config.get().theme == "Dark gray" else menupage_b