You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
6.6 KiB
144 lines
6.6 KiB
import sys |
|
from PyQt5.QtCore import Qt |
|
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFrame, QHBoxLayout, QPushButton |
|
from PyQt5.QtGui import QIcon, QPixmap |
|
from ui import MainWindow, ManageVendorsTab, SettingsTab, FetchReportsTab, FetchSpecialReportsTab, ImportReportTab,\ |
|
SearchTab, VisualTab, CostsTab |
|
from ManageVendors import ManageVendorsController |
|
from FetchData import FetchReportsController, FetchSpecialReportsController |
|
from ImportFile import ImportReportController |
|
from Costs import CostsController |
|
from Search import SearchController |
|
from Settings import SettingsController, SettingsModel |
|
from Visual import VisualController |
|
import GeneralUtils |
|
import ManageDB |
|
from Constants import * |
|
|
|
# region debug_stuff |
|
|
|
def trap_exc_during_debug(*args): |
|
# when app raises uncaught exception, print info |
|
print(args) |
|
|
|
|
|
# install exception hook: without this, uncaught exception would cause application to exit |
|
sys.excepthook = trap_exc_during_debug |
|
|
|
# endregion |
|
|
|
if hasattr(Qt, 'AA_EnableHighDpiScaling'): |
|
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) |
|
|
|
if hasattr(Qt, 'AA_UseHighDpiPixmaps'): |
|
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True) |
|
|
|
if __name__ == "__main__": |
|
app = QApplication(sys.argv) |
|
app.setStyleSheet("QWidget {font-family: Segoe UI; font-size: 12pt;}") |
|
|
|
main_window = QMainWindow() |
|
main_window_ui = MainWindow.Ui_mainWindow() |
|
main_window_ui.setupUi(main_window) |
|
|
|
GeneralUtils.main_window = main_window |
|
|
|
# region Setup Tab Controllers |
|
settings_tab = QWidget(main_window) |
|
settings_ui = SettingsTab.Ui_settings_tab() |
|
settings_ui.setupUi(settings_tab) |
|
settings_controller = SettingsController(settings_tab, settings_ui) |
|
|
|
manage_vendors_tab = QWidget(main_window) |
|
manage_vendors_ui = ManageVendorsTab.Ui_manage_vendors_tab() |
|
manage_vendors_ui.setupUi(manage_vendors_tab) |
|
manage_vendors_controller = ManageVendorsController(manage_vendors_tab, manage_vendors_ui, settings_controller.settings) |
|
|
|
ManageDB.update_settings(settings_controller.settings) |
|
ManageDB.first_time_setup() |
|
|
|
fetch_reports_tab = QWidget(main_window) |
|
fetch_reports_ui = FetchReportsTab.Ui_fetch_reports_tab() |
|
fetch_reports_ui.setupUi(fetch_reports_tab) |
|
fetch_reports_controller = FetchReportsController(manage_vendors_controller.vendors, settings_controller.settings, |
|
fetch_reports_tab, fetch_reports_ui) |
|
|
|
fetch_special_reports_tab = QWidget(main_window) |
|
fetch_special_reports_ui = FetchSpecialReportsTab.Ui_fetch_special_reports_tab() |
|
fetch_special_reports_ui.setupUi(fetch_special_reports_tab) |
|
fetch_special_reports_controller = FetchSpecialReportsController(manage_vendors_controller.vendors, |
|
settings_controller.settings, |
|
fetch_special_reports_tab, |
|
fetch_special_reports_ui) |
|
|
|
costs_tab = QWidget(main_window) |
|
costs_tab_ui = CostsTab.Ui_costs_tab() |
|
costs_tab_ui.setupUi(costs_tab) |
|
costs_controller = CostsController(costs_tab_ui, settings_controller.settings) |
|
|
|
import_report_tab = QWidget(main_window) |
|
import_report_ui = ImportReportTab.Ui_import_report_tab() |
|
import_report_ui.setupUi(import_report_tab) |
|
import_report_controller = ImportReportController(manage_vendors_controller.vendors, settings_controller.settings, |
|
import_report_tab, import_report_ui) |
|
|
|
search_tab = QWidget(main_window) |
|
search_ui = SearchTab.Ui_search_tab() |
|
search_ui.setupUi(search_tab) |
|
search_controller = SearchController(search_ui, settings_controller.settings) |
|
|
|
visual_tab = QWidget(main_window) |
|
visual_ui = VisualTab.Ui_visual_tab() |
|
visual_ui.setupUi(visual_tab) |
|
visual_controller = VisualController(visual_ui, settings_controller.settings) |
|
|
|
# # endregion |
|
|
|
# region Connect Signals |
|
manage_vendors_controller.vendors_changed_signal.connect(fetch_reports_controller.on_vendors_changed) |
|
manage_vendors_controller.vendors_changed_signal.connect(fetch_special_reports_controller.on_vendors_changed) |
|
manage_vendors_controller.vendors_changed_signal.connect(import_report_controller.on_vendors_changed) |
|
manage_vendors_controller.vendors_changed_signal.connect(costs_controller.load_vendor_list) |
|
manage_vendors_controller.vendors_changed_signal.connect(visual_controller.load_vendor_list) |
|
|
|
settings_controller.settings_changed_signal.connect(ManageDB.update_settings) |
|
settings_controller.settings_changed_signal.connect(search_controller.update_settings) |
|
settings_controller.settings_changed_signal.connect(costs_controller.update_settings) |
|
settings_controller.settings_changed_signal.connect(visual_controller.update_settings) |
|
|
|
ManageDB.managedb_signal_handler.database_changed_signal.connect(costs_controller.database_updated) |
|
ManageDB.managedb_signal_handler.database_changed_signal.connect(visual_controller.database_updated) |
|
# endregion |
|
|
|
# region Add tabs to main window |
|
main_window_ui.tab_widget.addTab(manage_vendors_tab, manage_vendors_tab.windowIcon(), "Manage Vendors") |
|
main_window_ui.tab_widget.addTab(fetch_reports_tab, fetch_reports_tab.windowIcon(), "Fetch Reports") |
|
main_window_ui.tab_widget.addTab(fetch_special_reports_tab, fetch_special_reports_tab.windowIcon(), |
|
"Fetch Special Reports") |
|
main_window_ui.tab_widget.addTab(import_report_tab, import_report_tab.windowIcon(), "Import Report") |
|
main_window_ui.tab_widget.addTab(costs_tab, costs_tab.windowIcon(), "Costs") |
|
main_window_ui.tab_widget.addTab(search_tab, search_tab.windowIcon(), "Search") |
|
main_window_ui.tab_widget.addTab(visual_tab, visual_tab.windowIcon(), "Visual") |
|
main_window_ui.tab_widget.addTab(settings_tab, settings_tab.windowIcon(), "Settings") |
|
|
|
main_window_ui.tab_widget.setCurrentIndex(1) |
|
# endregion |
|
|
|
# region Status Bar |
|
status_bar = main_window_ui.statusbar |
|
|
|
help_frame = QFrame(status_bar) |
|
help_frame_layout = QHBoxLayout(help_frame) |
|
help_frame_layout.setContentsMargins(-1, 2, -1, 5) |
|
help_frame.setLayout(help_frame_layout) |
|
help_button = QPushButton("Help", help_frame) |
|
help_pixmap = QPixmap(":/ui/resources/help_icon.png") |
|
help_button.setIcon(QIcon(help_pixmap)) |
|
help_button.clicked.connect(lambda: GeneralUtils.open_in_browser(HELP_SITE)) |
|
help_frame_layout.addWidget(help_button) |
|
|
|
status_bar.addWidget(help_frame) |
|
# endregion |
|
|
|
main_window.show() |
|
sys.exit(app.exec_())
|
|
|