adding item

This commit is contained in:
BarsTiger
2022-08-05 23:01:21 +03:00
parent e85db18b9f
commit e01fb0efd1
11 changed files with 166 additions and 11 deletions

View File

@@ -6,8 +6,8 @@ from gui.modules.initialize import setup_ui
from gui.modules.handlers.register import register_handlers
import sys
sys.excepthook = hook
threading.excepthook = thread_hook
# sys.excepthook = hook
# threading.excepthook = thread_hook
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()

View File

@@ -364,6 +364,20 @@ class Ui_MainWindow(object):
spacerItem15 = QtWidgets.QSpacerItem(20, 154, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_11.addItem(spacerItem15)
self.adding_item_main_layout.addWidget(self.new_item_image_page)
self.new_item_finish_page = QtWidgets.QWidget()
self.new_item_finish_page.setObjectName("new_item_finish_page")
self.verticalLayout_12 = QtWidgets.QVBoxLayout(self.new_item_finish_page)
self.verticalLayout_12.setObjectName("verticalLayout_12")
spacerItem16 = QtWidgets.QSpacerItem(20, 176, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_12.addItem(spacerItem16)
self.new_item_finish_label = QtWidgets.QLabel(self.new_item_finish_page)
self.new_item_finish_label.setStyleSheet("font: 16pt \"Segoe UI\";")
self.new_item_finish_label.setWordWrap(True)
self.new_item_finish_label.setObjectName("new_item_finish_label")
self.verticalLayout_12.addWidget(self.new_item_finish_label)
spacerItem17 = QtWidgets.QSpacerItem(20, 175, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_12.addItem(spacerItem17)
self.adding_item_main_layout.addWidget(self.new_item_finish_page)
self.verticalLayout_5.addWidget(self.adding_item_main_layout)
self.content.addWidget(self.add_page)
self.verticalLayout_4.addWidget(self.content)
@@ -406,6 +420,7 @@ class Ui_MainWindow(object):
self.new_item_shop_label.setText(_translate("MainWindow", "Choose website, where you can get this item"))
self.new_item_image_label.setText(_translate("MainWindow", "Paste here URL of image with item"))
self.new_item_image_box.setPlaceholderText(_translate("MainWindow", "https://www.gtabase.com/images/jch-optimize/ng/images_gta-5_vehicles_planes_main_luxor-deluxe.webp"))
self.new_item_finish_label.setText(_translate("MainWindow", "Fill all fields first"))
import gui.images_rc

View File

@@ -1259,6 +1259,49 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</widget>
<widget class="QWidget" name="new_item_finish_page">
<layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<spacer name="verticalSpacer_15">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>176</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="new_item_finish_label">
<property name="styleSheet">
<string notr="true">font: 16pt &quot;Segoe UI&quot;;</string>
</property>
<property name="text">
<string>Fill all fields first</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_16">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>175</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>

View File

@@ -0,0 +1,57 @@
from gui.gui import Ui_MainWindow
from gui.modules.adding_item.write_item import add_item_if_can
from data import common
def on_add_button_click(ui: Ui_MainWindow):
sender_page = ui.content.currentWidget()
ui.content.setCurrentWidget(ui.add_page)
ui.adding_item_main_layout.setCurrentIndex(0)
ui.new_item_finish_label.setText("Fill all fields first")
ui.new_item_name_box.clear()
ui.new_item_price_box.setValue(0)
ui.new_item_class_box.clear()
ui.new_item_type_box.clear()
ui.new_item_type_box.addItem("Other")
ui.new_item_shop_box.clear()
ui.new_item_image_box.clear()
ui.new_item_class_box.addItems(common.items_class)
ui.new_item_class_box.setCurrentIndex(len(common.items_class) - 1)
ui.new_item_class_box.currentIndexChanged.connect(
lambda: (
ui.new_item_type_box.clear(),
ui.new_item_type_box.addItems(
common.vehicle_type if ui.new_item_class_box.currentText() == "Vehicle"
else common.property_type if ui.new_item_class_box.currentText() == "Property"
else ["Other"]
)
)
)
ui.new_item_shop_box.addItems(common.shop_sites)
ui.new_item_shop_box.setCurrentIndex(len(common.shop_sites) - 1)
ui.next_adding_item_button.clicked.connect(
lambda: (
ui.adding_item_main_layout.setCurrentIndex(
(lambda x: x if x <= ui.adding_item_main_layout.count() else ui.adding_item_main_layout.count())
(ui.adding_item_main_layout.currentIndex() + 1)),
ui.new_item_finish_label.setText("Item registered. Press exit button on left side" if
ui.new_item_name_box.text() != "" and
ui.new_item_price_box.value() != 0
else "Fill all fields first! (Image is not required)"
),
add_item_if_can(ui)
)
)
ui.back_adding_item_button.clicked.connect(
lambda: ui.adding_item_main_layout.setCurrentIndex(
(lambda x: x if x >= 0 else 0)(ui.adding_item_main_layout.currentIndex() - 1)
)
)
ui.cancel_adding_item_button.clicked.connect(lambda: ui.content.setCurrentWidget(sender_page))

View File

@@ -0,0 +1,17 @@
from modules.database import Database
from modules.database.model import Item
from gui.gui import Ui_MainWindow
def add_item_if_can(ui: Ui_MainWindow):
if {"", 0} & {ui.new_item_name_box.text(), ui.new_item_price_box.value()}:
return
Database.add_item(Item(
ui.new_item_name_box.text(),
ui.new_item_class_box.currentText(),
ui.new_item_type_box.currentText(),
ui.new_item_shop_box.currentText(),
ui.new_item_price_box.value(),
ui.new_item_image_box.text() if ui.new_item_image_box.text() != "" else None
))

View File

@@ -14,8 +14,12 @@ def refill_list(ui: Ui_MainWindow):
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))
try:
pixmap.loadFromData(requests.get(item.image).content)
list_item.setIcon(QtGui.QIcon(pixmap))
except Exception as e:
print(f"Failed to load {item.image}, {e}")
ui.items_list.addItem(list_item)
else:

View File

@@ -11,8 +11,12 @@ def on_item_click(ui: Ui_MainWindow, mode: str):
]
pixmap = QtGui.QPixmap()
pixmap.loadFromData(requests.get(item.image).content)
ui.properties_image.setPixmap(pixmap)
try:
pixmap.loadFromData(requests.get(item.image).content)
ui.properties_image.setPixmap(pixmap)
except Exception as e:
ui.properties_image.clear()
print(f"Failed to load {item.image}, {e}")
ui.properties_name.setText(item.item_name)
ui.properties_price.setText(f'${"{:,}".format(item.price)}')

View File

@@ -1,6 +1,7 @@
from gui.gui import Ui_MainWindow
from gui.modules.handlers import fill_info
from gui.modules.handlers import on_item_remove
from gui.modules.adding_item import on_add_click
def register_handlers(ui: Ui_MainWindow):
@@ -8,3 +9,5 @@ def register_handlers(ui: Ui_MainWindow):
ui.items_list.itemDoubleClicked.connect(lambda: fill_info.on_item_click(ui, 'close'))
ui.delete_item_button.clicked.connect(lambda: on_item_remove.on_rm_click(ui))
ui.add_item_button.clicked.connect(lambda: on_add_click.on_add_button_click(ui))

View File

@@ -5,6 +5,7 @@ from PyQt5.QtWidgets import QMainWindow
from modules.config import Config
from gui.modules.core import items_list
from modules.database import Database
from modules.database.model import Item
def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
@@ -18,3 +19,4 @@ def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
GlobalBlur(MainWindow.winId(), acrylic=True)
items_list.refill_list(ui)
Database.add_item(Item("aa", "aa", "aa", "aa", 10, "aa"))

View File

@@ -1,7 +1,6 @@
import json
from .model import DatabaseModel, default_database
from modules.database.model import DatabaseModel, default_database, Item
from modules.config import Config
import os
class Database:
@@ -14,10 +13,21 @@ class Database:
json.dump(default_database, f, indent=4)
return DatabaseModel.from_dict(default_database)
@staticmethod
def write(db: DatabaseModel):
with open(Config.get().database, 'w') as f:
json.dump(db.to_dict(), f, indent=4, sort_keys=True)
@staticmethod
def remove_item(item_name: str):
db = Database.get()
db.items.pop(item_name)
with open(Config.get().database, 'w') as f:
json.dump(db.to_dict(), f, indent=4)
Database.write(db)
@staticmethod
def add_item(item: Item):
db = Database.get()
db.items[item.item_name] = item
Database.write(db)

View File

@@ -11,7 +11,7 @@ class Item:
item_type: str
shop: str
price: int
image: str
image: str | None
@dataclass_json