Skip to content

Commit 6ab09f2

Browse files
committed
Metadata view for debugging purposes
1 parent 040862b commit 6ab09f2

5 files changed

Lines changed: 91 additions & 1 deletion

File tree

activity_browser/actions/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,4 @@
9393
from .settings_wizard_open import SettingsWizardOpen
9494
from .migrations_install import MigrationsInstall
9595
from .pyside_upgrade import PysideUpgrade
96+
from .metadatastore_open import MetaDataStoreOpen
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from logging import getLogger
2+
3+
from activity_browser import application
4+
from activity_browser.actions.base import ABAction, exception_dialogs
5+
from activity_browser.ui.icons import qicons
6+
from activity_browser.ui.widgets.main_window import global_shortcut
7+
8+
log = getLogger(__name__)
9+
10+
11+
class MetaDataStoreOpen(ABAction):
12+
13+
icon = qicons.right
14+
text = "Open activity / activities"
15+
16+
@staticmethod
17+
@global_shortcut("Ctrl+Shift+M")
18+
@exception_dialogs
19+
def run():
20+
from activity_browser.layouts import pages
21+
print("Running MetaDataStoreOpen action")
22+
23+
# Create a details page for the activity
24+
page = pages.MetaDataStorePage()
25+
central = application.main_window.centralWidget()
26+
27+
# Add the details page to the "Activity Details" group in the central widget
28+
central.addToGroup("DEBUG", page)

activity_browser/layouts/pages/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
from .impact_category_details import ImpactCategoryDetailsPage
55
from .lca_results import LCAResultsPage
66
from .parameters import ParametersPage
7+
from .metadatastore import MetaDataStorePage
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from qtpy import QtWidgets
2+
3+
from activity_browser.ui import widgets
4+
from activity_browser.bwutils import AB_metadata
5+
6+
7+
class MetaDataStorePage(QtWidgets.QWidget):
8+
def __init__(self, parent=None):
9+
super().__init__(parent)
10+
self.setObjectName("MetaDataStorePage")
11+
12+
self.model = MDSModel(self, AB_metadata.dataframe)
13+
self.view = MDSView(self)
14+
self.view.setModel(self.model)
15+
16+
self.build_layout()
17+
self.connect_signals()
18+
19+
def connect_signals(self):
20+
AB_metadata.synced.connect(self.sync)
21+
22+
def sync(self):
23+
self.model.setDataFrame(AB_metadata.dataframe)
24+
25+
def build_layout(self):
26+
layout = QtWidgets.QVBoxLayout()
27+
layout.addWidget(self.view)
28+
self.setLayout(layout)
29+
30+
31+
class MDSView(widgets.ABTreeView):
32+
pass
33+
34+
35+
class MDSItem(widgets.ABDataItem):
36+
pass
37+
38+
class MDSModel(widgets.ABItemModel):
39+
pass

activity_browser/ui/widgets/main_window.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pickle
22
from logging import getLogger
33

4-
from qtpy import QtCore, QtWidgets
4+
from qtpy import QtCore, QtWidgets, QtGui
55

66
import bw2data as bd
77

@@ -27,6 +27,7 @@ def __init__(self, parent=None):
2727
self.setMenuBar(self.menu_bar)
2828

2929
self.connect_signals()
30+
self.connect_shortcuts()
3031

3132
def sync(self):
3233
"""
@@ -87,6 +88,12 @@ def connect_signals(self):
8788
# Keyboard shortcuts
8889
signals.project.changed.connect(self.sync)
8990

91+
def connect_shortcuts(self):
92+
"""Connect global keyboard shortcuts to their respective functions. Only called once during initialization."""
93+
for seq, func in _main_window_shortcuts.items():
94+
shortcut = QtWidgets.QShortcut(QtGui.QKeySequence(seq), self)
95+
shortcut.activated.connect(func)
96+
9097
def clearPanes(self):
9198
for pane in self.panes():
9299
pane.deleteLater()
@@ -108,3 +115,17 @@ def dialog_on_exception(self, exception: Exception):
108115
f"An error occurred, check the logs for more information \n\n {str(exception)}",
109116
QtWidgets.QMessageBox.Ok,
110117
)
118+
119+
120+
def global_shortcut(key_sequence):
121+
"""
122+
Decorator to register a global keyboard shortcut for the main window. Decorate a function with e.g.
123+
@global_shortcut("Ctrl+S") to register it as a shortcut. Also works on the run method of actions as long as the
124+
parameters of said action are taken care of.
125+
"""
126+
def decorator(func):
127+
_main_window_shortcuts[key_sequence] = func
128+
return func
129+
return decorator
130+
131+
_main_window_shortcuts = {}

0 commit comments

Comments
 (0)