adding item
This commit is contained in:
@@ -6,8 +6,8 @@ from gui.modules.initialize import setup_ui
|
|||||||
from gui.modules.handlers.register import register_handlers
|
from gui.modules.handlers.register import register_handlers
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.excepthook = hook
|
# sys.excepthook = hook
|
||||||
threading.excepthook = thread_hook
|
# threading.excepthook = thread_hook
|
||||||
|
|
||||||
app = QtWidgets.QApplication(sys.argv)
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
MainWindow = QtWidgets.QMainWindow()
|
MainWindow = QtWidgets.QMainWindow()
|
||||||
|
|||||||
15
gui/gui.py
15
gui/gui.py
@@ -364,6 +364,20 @@ class Ui_MainWindow(object):
|
|||||||
spacerItem15 = QtWidgets.QSpacerItem(20, 154, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
spacerItem15 = QtWidgets.QSpacerItem(20, 154, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
self.verticalLayout_11.addItem(spacerItem15)
|
self.verticalLayout_11.addItem(spacerItem15)
|
||||||
self.adding_item_main_layout.addWidget(self.new_item_image_page)
|
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.verticalLayout_5.addWidget(self.adding_item_main_layout)
|
||||||
self.content.addWidget(self.add_page)
|
self.content.addWidget(self.add_page)
|
||||||
self.verticalLayout_4.addWidget(self.content)
|
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_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_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_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
|
import gui.images_rc
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
43
gui/gui.ui
43
gui/gui.ui
@@ -1259,6 +1259,49 @@ p, li { white-space: pre-wrap; }
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</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 "Segoe UI";</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>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
17
gui/modules/adding_item/write_item.py
Normal file
17
gui/modules/adding_item/write_item.py
Normal 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
|
||||||
|
))
|
||||||
@@ -14,8 +14,12 @@ def refill_list(ui: Ui_MainWindow):
|
|||||||
list_item = QtWidgets.QListWidgetItem()
|
list_item = QtWidgets.QListWidgetItem()
|
||||||
list_item.setText(f'{item.item_name} - ${"{:,}".format(item.price)}')
|
list_item.setText(f'{item.item_name} - ${"{:,}".format(item.price)}')
|
||||||
pixmap = QtGui.QPixmap()
|
pixmap = QtGui.QPixmap()
|
||||||
pixmap.loadFromData(requests.get(item.image).content)
|
try:
|
||||||
list_item.setIcon(QtGui.QIcon(pixmap))
|
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)
|
ui.items_list.addItem(list_item)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -11,8 +11,12 @@ def on_item_click(ui: Ui_MainWindow, mode: str):
|
|||||||
]
|
]
|
||||||
|
|
||||||
pixmap = QtGui.QPixmap()
|
pixmap = QtGui.QPixmap()
|
||||||
pixmap.loadFromData(requests.get(item.image).content)
|
try:
|
||||||
ui.properties_image.setPixmap(pixmap)
|
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_name.setText(item.item_name)
|
||||||
ui.properties_price.setText(f'${"{:,}".format(item.price)}')
|
ui.properties_price.setText(f'${"{:,}".format(item.price)}')
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from gui.gui import Ui_MainWindow
|
from gui.gui import Ui_MainWindow
|
||||||
from gui.modules.handlers import fill_info
|
from gui.modules.handlers import fill_info
|
||||||
from gui.modules.handlers import on_item_remove
|
from gui.modules.handlers import on_item_remove
|
||||||
|
from gui.modules.adding_item import on_add_click
|
||||||
|
|
||||||
|
|
||||||
def register_handlers(ui: Ui_MainWindow):
|
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.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.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))
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from PyQt5.QtWidgets import QMainWindow
|
|||||||
from modules.config import Config
|
from modules.config import Config
|
||||||
from gui.modules.core import items_list
|
from gui.modules.core import items_list
|
||||||
from modules.database import Database
|
from modules.database import Database
|
||||||
|
from modules.database.model import Item
|
||||||
|
|
||||||
|
|
||||||
def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
|
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)
|
GlobalBlur(MainWindow.winId(), acrylic=True)
|
||||||
|
|
||||||
items_list.refill_list(ui)
|
items_list.refill_list(ui)
|
||||||
|
Database.add_item(Item("aa", "aa", "aa", "aa", 10, "aa"))
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import json
|
import json
|
||||||
from .model import DatabaseModel, default_database
|
from modules.database.model import DatabaseModel, default_database, Item
|
||||||
from modules.config import Config
|
from modules.config import Config
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
class Database:
|
class Database:
|
||||||
@@ -14,10 +13,21 @@ class Database:
|
|||||||
json.dump(default_database, f, indent=4)
|
json.dump(default_database, f, indent=4)
|
||||||
return DatabaseModel.from_dict(default_database)
|
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
|
@staticmethod
|
||||||
def remove_item(item_name: str):
|
def remove_item(item_name: str):
|
||||||
db = Database.get()
|
db = Database.get()
|
||||||
db.items.pop(item_name)
|
db.items.pop(item_name)
|
||||||
|
|
||||||
with open(Config.get().database, 'w') as f:
|
Database.write(db)
|
||||||
json.dump(db.to_dict(), f, indent=4)
|
|
||||||
|
@staticmethod
|
||||||
|
def add_item(item: Item):
|
||||||
|
db = Database.get()
|
||||||
|
db.items[item.item_name] = item
|
||||||
|
|
||||||
|
Database.write(db)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class Item:
|
|||||||
item_type: str
|
item_type: str
|
||||||
shop: str
|
shop: str
|
||||||
price: int
|
price: int
|
||||||
image: str
|
image: str | None
|
||||||
|
|
||||||
|
|
||||||
@dataclass_json
|
@dataclass_json
|
||||||
|
|||||||
Reference in New Issue
Block a user