Skip to content

Commit 668f5b8

Browse files
authored
Merge pull request #1608 from mrvisscher/major-ui-refactor
Major UI refactor
2 parents cc735c5 + c14cda6 commit 668f5b8

230 files changed

Lines changed: 6236 additions & 5188 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

activity_browser/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,5 @@
1414
except ImportError:
1515
import qtpy
1616

17-
from .ui.application import application
18-
from .signals import signals
19-
2017
def run_activity_browser():
2118
from .__main__ import run_activity_browser

activity_browser/__main__.py

Lines changed: 35 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
# Divert the program flow in worker sub-process as soon as possible,
2+
# before importing heavy-weight modules.
3+
if __name__ == '__main__':
4+
import multiprocessing
5+
multiprocessing.freeze_support()
6+
17
import sys
28
import os
3-
from logging import getLogger
49
from importlib import metadata
510

611
import requests
@@ -13,13 +18,11 @@
1318
import ctypes
1419
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("activity.browser.1")
1520

16-
from activity_browser import application
17-
from activity_browser.ui import icons
18-
19-
from .logger import setup_ab_logging
21+
from loguru import logger
22+
import platformdirs
2023
from .static.icons import main
2124

22-
log = getLogger(__name__)
25+
2326

2427

2528
class SpecialProgressBar(QtWidgets.QWidget):
@@ -88,29 +91,12 @@ def load_modules(self):
8891
thread.start()
8992

9093
def load_layout(self):
91-
from .ui.widgets import MainWindow, CentralTabWidget
92-
from .layouts import panes, pages
93-
from activity_browser.bwutils import AB_metadata
94-
from activity_browser import signals
95-
96-
application.main_window = MainWindow()
97-
central_widget = CentralTabWidget(application.main_window)
98-
central_widget.addTab(pages.WelcomePage(), "Welcome")
99-
central_widget.addTab(pages.ParametersPage(), "Parameters")
100-
101-
application.main_window.setCentralWidget(central_widget)
102-
103-
self.load_settings()
104-
105-
def load_settings(self):
106-
self.text_label.setText("Loading project")
107-
thread = SettingsThread(self)
108-
thread.finished.connect(self.load_finished)
109-
thread.start()
94+
self.load_finished()
11095

11196
def load_finished(self):
112-
application.main_window.sync()
113-
application.main_window.show()
97+
from activity_browser import app
98+
app.main_window.sync()
99+
app.main_window.show()
114100
self.deleteLater()
115101

116102

@@ -119,68 +105,47 @@ class ModuleThread(QtCore.QThread):
119105

120106
def run(self):
121107
self.status.emit("Loading Numpy")
122-
log.debug("ABLoader: Importing numpy")
108+
logger.debug("ABLoader: Importing numpy")
123109
import numpy, pandas
124110
self.status.emit("Loading Brightway25")
125-
log.debug("ABLoader: Importing brightway modules")
111+
logger.debug("ABLoader: Importing brightway modules")
126112
import bw2data, bw2calc, bw2analyzer, bw2io, bw_functional, bw_processing, matrix_utils
127-
self.status.emit("Loading Activity Browser")
128-
log.debug("ABLoader: Importing activity_browser")
129-
from activity_browser import actions, layouts, mod, settings, ui, signals
130-
from activity_browser.layouts import panes, pages
131-
from activity_browser.ui import core, widgets, web, wizards
132113

133114

134-
class SettingsThread(QtCore.QThread):
135-
def run(self):
136-
import bw2data as bd
137-
from activity_browser import settings, actions
138-
139-
if settings.ab_settings.settings:
140-
from pathlib import Path
115+
def setup_logging():
116+
"""Configure loguru sinks for console and file logging."""
117+
logger.remove()
118+
logger.add(sys.stderr, level="DEBUG", colorize=True,
119+
format="<green>{time:HH:mm:ss}</green> | <level>{level: <8}</level> | <level>{message}</level>")
141120

142-
base_dir = Path(settings.ab_settings.current_bw_dir)
143-
project_name = settings.ab_settings.startup_project
144-
bd.projects.change_base_directories(base_dir, project_name=project_name, update=False)
145-
146-
if not bd.projects.twofive:
147-
log.warning(f"Project: {bd.projects.current} is not yet BW25 compatible")
148-
actions.ProjectSwitch.set_warning_bar()
149-
150-
log.info(f"Brightway2 data directory: {bd.projects._base_data_dir}")
151-
log.info(f"Brightway2 current project: {bd.projects.current}")
121+
log_dir = platformdirs.user_log_dir("ActivityBrowser", "ActivityBrowser")
122+
os.makedirs(log_dir, exist_ok=True)
123+
log_file = os.path.join(log_dir, "activity_browser.log")
124+
logger.add(log_file, level="DEBUG", rotation="5 MB", retention=5)
152125

153126

154127
def run_activity_browser():
128+
from activity_browser.ui.core.application import ABApplication
129+
app = ABApplication()
130+
155131
pre_flight_checks()
156-
setup_ab_logging()
132+
setup_logging()
157133
loader = ABLoader()
158134
loader.show()
159-
application.set_icon() # setting this here seems to fix the icon not showing sometimes
160-
sys.exit(application.exec_())
135+
136+
app.set_icon() # setting this here seems to fix the icon not showing sometimes
137+
sys.exit(app.exec_())
161138

162139

163140
def run_activity_browser_no_launcher():
164141
pre_flight_checks()
165-
setup_ab_logging()
142+
setup_logging()
166143

167144
modules = ModuleThread()
168145
modules.run()
169146

170-
from .ui.widgets import MainWindow, CentralTabWidget
171-
from .layouts import panes, pages
172-
from activity_browser.bwutils import AB_metadata
173-
from activity_browser import signals
174-
175-
application.main_window = MainWindow()
176-
central_widget = CentralTabWidget(application.main_window)
177-
central_widget.addTab(pages.WelcomePage(), "Welcome")
178-
central_widget.addTab(pages.ParametersPage(), "Parameters")
179-
180-
application.main_window.setCentralWidget(central_widget)
181-
182-
settings = SettingsThread()
183-
settings.run()
147+
from .ui.widgets import CentralTabWidget
148+
from .app import panes, pages, application, metadata
184149

185150
application.main_window.sync()
186151
application.main_window.show()
@@ -252,7 +217,7 @@ def check_pypi_update():
252217
if "--no-launcher" in sys.argv:
253218
run_activity_browser_no_launcher()
254219
elif sys.version_info[1] == 10:
255-
log.info("Running Activity Browser without launcher for Python 3.10")
220+
logger.info("Running Activity Browser without launcher for Python 3.10")
256221
run_activity_browser_no_launcher()
257222
else:
258223
run_activity_browser()

0 commit comments

Comments
 (0)