Skip to content

Commit

Permalink
re-organize the plot context menu
Browse files Browse the repository at this point in the history
  • Loading branch information
danielhrisca committed May 9, 2024
1 parent 12b657a commit 972495a
Show file tree
Hide file tree
Showing 8 changed files with 1,743 additions and 133 deletions.
Binary file added src/asammdf/gui/ui/images/copy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/asammdf/gui/ui/images/structure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions src/asammdf/gui/ui/resource.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<file alias="comments.png">images/comments.png</file>
<file alias="compare.png">images/compare.png</file>
<file alias="convert.png">images/convert.png</file>
<file alias="copy.png">images/copy.png</file>
<file alias="csv.png">images/csv.png</file>
<file alias="cursor.png">images/cursor.png</file>
<file alias="cut.png">images/cut.png</file>
Expand Down Expand Up @@ -66,13 +67,15 @@
<file alias="save.png">images/save.png</file>
<file alias="scramble.png">images/scramble.png</file>
<file alias="search.png">images/search.png</file>
<file alias="settings.png">images/settings.png</file>
<file alias="shift_down.png">images/shift_down.png</file>
<file alias="shift_left.png">images/shift_left.png</file>
<file alias="shift_right.png">images/shift_right.png</file>
<file alias="shift_up.png">images/shift_up.png</file>
<file alias="sort-ascending.png">images/sort-ascending.png</file>
<file alias="sort-descending.png">images/sort-descending.png</file>
<file alias="stack.png">images/stack.png</file>
<file alias="structure.png">images/structure.png</file>
<file alias="undo.png">images/undo.png</file>
<file alias="unlocked.png">images/unlocked.png</file>
<file alias="up.png">images/up.png</file>
Expand Down
1,656 changes: 1,598 additions & 58 deletions src/asammdf/gui/ui/resource_rc.py

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions src/asammdf/gui/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,10 @@ def close(self):
self.processEvents()
self.destroy()

def hide(self):
super().hide()
self.processEvents()

def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key.Key_Escape and event.modifiers() == QtCore.Qt.KeyboardModifier.NoModifier:
event.accept()
Expand Down Expand Up @@ -366,13 +370,21 @@ def setValue(self, value):
self.processEvents()

def setWindowIcon(self, icon):
if isinstance(icon, str):
icon_name = icon
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(f":/{icon_name}.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
super().setWindowIcon(icon)
self.processEvents()

def setWindowTitle(self, title):
super().setWindowTitle(title)
self.processEvents()

def show(self):
super().show()
self.processEvents()


def setup_progress(parent, title="", message="", icon_name="", autoclose=False):
progress = ProgressDialog(message, "Cancel", 0, 0, parent)
Expand Down
52 changes: 26 additions & 26 deletions src/asammdf/gui/widgets/list.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,38 +190,38 @@ def open_menu(self, position):

else:
menu = QtWidgets.QMenu()
menu.addAction(self.tr(f"{self.count()} items in the list"))
menu.addAction(f"{self.count()} items in the list")
menu.addSeparator()
menu.addAction(self.tr("Copy name (Ctrl+C)"))
menu.addAction(self.tr("Copy display properties (Ctrl+Shift+C)"))
menu.addAction(self.tr("Paste display properties (Ctrl+Shift+P)"))
menu.addAction("Copy name (Ctrl+C)")
menu.addAction("Copy display properties (Ctrl+Shift+C)")
menu.addAction("Paste display properties (Ctrl+Shift+P)")
menu.addSeparator()
menu.addAction(self.tr("Enable all"))
menu.addAction(self.tr("Disable all"))
menu.addAction(self.tr("Enable all but this"))
menu.addAction("Enable all")
menu.addAction("Disable all")
menu.addAction("Enable all but this")
menu.addSeparator()
if self._has_hidden_items:
show_hide = "Show disabled items"
else:
show_hide = "Hide disabled items"
menu.addAction(self.tr(show_hide))
menu.addAction(show_hide)
menu.addSeparator()

menu.addAction(self.tr("Add to common Y axis"))
menu.addAction(self.tr("Remove from common Y axis"))
menu.addAction("Add to common Y axis")
menu.addAction("Remove from common Y axis")
menu.addSeparator()
menu.addAction(self.tr("Set unit"))
menu.addAction(self.tr("Set precision"))
menu.addAction("Set unit")
menu.addAction("Set precision")
menu.addSeparator()
menu.addAction(self.tr("Relative time base shift"))
menu.addAction(self.tr("Set time base start offset"))
menu.addAction("Relative time base shift")
menu.addAction("Set time base start offset")
menu.addSeparator()
menu.addAction(self.tr("Insert computation using this channel"))
menu.addAction("Insert computation using this channel")
menu.addSeparator()
menu.addAction(self.tr("Delete (Del)"))
menu.addAction("Delete (Del)")
menu.addSeparator()
menu.addAction(self.tr("Toggle details"))
menu.addAction(self.tr("File/Computation properties"))
menu.addAction("Toggle details")
menu.addAction("File/Computation properties")

action = menu.exec_(self.viewport().mapToGlobal(position))

Expand Down Expand Up @@ -501,25 +501,25 @@ def open_menu(self, position):

if self.minimal_menu:
if self.count() > 0:
menu.addAction(self.tr(f"{self.count()} items in the list"))
menu.addAction(f"{self.count()} items in the list")
menu.addSeparator()
menu.addAction(self.tr("Delete (Del)"))
menu.addAction("Delete (Del)")
else:
return
else:
if self.count() == 0:
menu.addAction(self.tr(f"{self.count()} items in the list"))
menu.addAction(f"{self.count()} items in the list")
menu.addSeparator()
if self.user_editable:
menu.addAction(self.tr("Paste names (Ctrl+V)"))
menu.addAction("Paste names (Ctrl+V)")
else:
menu.addAction(self.tr(f"{self.count()} items in the list"))
menu.addAction(f"{self.count()} items in the list")
menu.addSeparator()
menu.addAction(self.tr("Copy names (Ctrl+C)"))
menu.addAction("Copy names (Ctrl+C)")
if self.user_editable:
menu.addAction(self.tr("Paste names (Ctrl+V)"))
menu.addAction("Paste names (Ctrl+V)")
menu.addSeparator()
menu.addAction(self.tr("Delete (Del)"))
menu.addAction("Delete (Del)")

action = menu.exec_(self.viewport().mapToGlobal(position))

Expand Down
2 changes: 1 addition & 1 deletion src/asammdf/gui/widgets/tabular_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1553,7 +1553,7 @@ def prefix_changed(self, index):
def open_menu(self, position):
menu = QtWidgets.QMenu()

menu.addAction(self.tr("Export to CSV"))
menu.addAction("Export to CSV")

action = menu.exec_(self.tree.viewport().mapToGlobal(position))

Expand Down
151 changes: 103 additions & 48 deletions src/asammdf/gui/widgets/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ def open_menu(self, position=None):
iterator += 1

self.context_menu = menu = QtWidgets.QMenu()
menu.addAction(self.tr(f"{count} items in the list, {enabled} enabled"))
menu.addAction(f"{count} items in the list, {enabled} enabled")
menu.addSeparator()

submenu = QtWidgets.QMenu("Columns")
Expand All @@ -904,92 +904,117 @@ def open_menu(self, position=None):
menu.addAction(QtGui.QIcon(":/down.png"), f"Find next {item.name}")
menu.addSeparator()

menu.addAction(self.tr("Add channel group [Shift+Insert]"))
menu.addAction(self.tr("Add pattern based channel group [Ctrl+Insert]"))
menu.addAction("Add channel group [Shift+Insert]")
menu.addAction("Add pattern based channel group [Ctrl+Insert]")
menu.addSeparator()

menu.addAction(self.tr("Copy names [Ctrl+N]"))
menu.addAction(self.tr("Copy names and values"))
menu.addAction(self.tr("Copy display properties [Ctrl+Shift+C]"))
menu.addAction(self.tr("Paste display properties [Ctrl+Shift+V]"))
menu.addAction(self.tr("Copy channel structure [Ctrl+C]"))
menu.addAction(self.tr("Paste channel structure [Ctrl+V]"))
submenu = QtWidgets.QMenu("Copy")
submenu.setIcon(QtGui.QIcon(":/copy.png"))
submenu.addAction("Copy names [Ctrl+N]")
submenu.addAction("Copy names and values")
menu.addMenu(submenu)

if item and item.type() == ChannelsTreeItem.Channel:
menu.addAction(self.tr("Rename channel"))
menu.addSeparator()
submenu = QtWidgets.QMenu("Tree structure")
submenu.setIcon(QtGui.QIcon(":/structure.png"))
submenu.addAction("Copy display properties [Ctrl+Shift+C]")
submenu.addAction("Paste display properties [Ctrl+Shift+V]")
submenu.addAction("Copy channel structure [Ctrl+C]")
submenu.addAction("Paste channel structure [Ctrl+V]")
menu.addMenu(submenu)

submenu = QtWidgets.QMenu("Enable/disable")
if item and item.type() == item.Group and item.isDisabled():
submenu.addAction(self.tr("Activate group"))
submenu.addAction(self.tr("Deactivate groups"))
submenu.addAction(self.tr("Enable all"))
submenu.addAction(self.tr("Disable all"))
submenu.addAction(self.tr("Enable selected"))
submenu.addAction(self.tr("Disable selected"))
submenu.addAction("Activate group")
submenu.addAction("Deactivate groups")
submenu.addAction("Enable all")
submenu.addAction("Disable all")
submenu.addAction("Enable selected")
submenu.addAction("Disable selected")
if item:
submenu.addAction(self.tr("Disable all but this"))
submenu.addAction("Disable all but this")
menu.addMenu(submenu)
menu.addSeparator()
submenu = QtWidgets.QMenu("Show/hide")

if self.hide_disabled_channels:
show_disabled_channels = "Show disabled items"
else:
show_disabled_channels = "Hide disabled items"
submenu.addAction(self.tr(show_disabled_channels))
submenu.addAction(show_disabled_channels)
if self.hide_missing_channels:
show_missing_channels = "Show missing items"
else:
show_missing_channels = "Hide missing items"
submenu.addAction(self.tr(show_missing_channels))
submenu.addAction(show_missing_channels)
submenu.addAction("Filter only computed channels")
submenu.addAction("Un-filter computed channels")
menu.addMenu(submenu)
menu.addSeparator()

menu.addAction(self.tr("Edit Y axis scaling [Ctrl+G]"))
submenu = QtWidgets.QMenu("Axis")
submenu.addAction("Edit Y axis scaling [Ctrl+G]")
if item and item.type() == ChannelsTreeItem.Channel:
menu.addAction(self.tr("Add to common Y axis"))
menu.addAction(self.tr("Remove from common Y axis"))
submenu.addAction("Add to common Y axis")
submenu.addAction("Remove from common Y axis")
menu.addMenu(submenu)
menu.addSeparator()

menu.addAction(self.tr("Set color [C]"))
menu.addAction(self.tr("Set random color"))
menu.addAction(self.tr("Set precision"))
menu.addAction(self.tr("Set color ranges [Ctrl+R]"))
menu.addAction(self.tr("Set channel conversion"))
menu.addAction(self.tr("Set channel comment"))
menu.addAction(self.tr("Set unit"))
if item and item.type() == ChannelsTreeItem.Channel and item.signal.flags & Signal.Flags.computed:
menu.addSeparator()
menu.addAction(self.tr("Edit this computed channel"))
submenu = QtWidgets.QMenu("Edit")
submenu.setIcon(QtGui.QIcon(":/edit.png"))

submenu.addAction("Set color [C]")
submenu.addAction("Set random color")
submenu.addAction("Set precision")
submenu.addAction("Set color ranges [Ctrl+R]")
submenu.addAction("Set channel conversion")
submenu.addAction("Set channel comment")
submenu.addAction("Set unit")
if item:
if item.type() == ChannelsTreeItem.Channel:
if item.signal.flags & Signal.Flags.computed:
submenu.addAction("Edit this computed channel")
else:
submenu.addAction("Rename channel")
elif item.type() == ChannelsTreeItem.Group:
submenu.addAction("Edit group")
menu.addMenu(submenu)

submenu = QtWidgets.QMenu("Display")
# submenu.setIcon(QtGui.QIcon(":/edit.png"))
submenu.addAction("Ascii\t[Ctrl+T]")
submenu.addAction("Bin\t[Ctrl+B]")
submenu.addAction("Hex\t[Ctrl+H]")
submenu.addAction("Physical\t[Ctrl+P]")
submenu.addSeparator()
submenu.addAction("Raw samples\t[Alt+R]")
submenu.addAction("Scaled samples\t[Alt+S]")
menu.addMenu(submenu)
menu.addSeparator()

if item and item.type() == ChannelsTreeItem.Channel:
menu.addSeparator()
submenu = QtWidgets.QMenu("Time shift")
submenu.addAction(self.tr("Relative time base shift"))
submenu.addAction(self.tr("Set time base start offset"))
submenu.addAction("Relative time base shift")
submenu.addAction("Set time base start offset")

try:
import scipy # noqa: F401

menu.addAction(self.tr("Compute FFT"))
except ImportError:
pass
# try:
# import scipy
#
# menu.addAction("Compute FFT"))
# except ImportError:
# pass

menu.addMenu(submenu)
menu.addSeparator()
if item:
menu.addAction(self.tr("Delete [Del]"))
menu.addAction(QtGui.QIcon(":/erase.png"), "Delete [Del]")
menu.addSeparator()
menu.addAction(self.tr("Toggle details"))

menu.addAction("Toggle details")

if item and item.type() == ChannelsTreeItem.Channel:
menu.addAction(self.tr("File/Computation properties"))
menu.addAction("File/Computation properties")
elif item and item.type() == ChannelsTreeItem.Group:
menu.addAction(self.tr("Edit group"))
menu.addAction(self.tr("Group properties"))
menu.addAction("Group properties")

action = menu.exec(self.viewport().mapToGlobal(position))

Expand Down Expand Up @@ -1569,6 +1594,36 @@ def open_menu(self, position=None):
self.setColumnHidden(self.CommonAxisColumn, not self.isColumnHidden(self.CommonAxisColumn))
elif action_text == "Individual Axis Column":
self.setColumnHidden(self.IndividualAxisColumn, not self.isColumnHidden(self.IndividualAxisColumn))
elif action_text == "Raw samples\t[Alt+R]":
event = QtGui.QKeyEvent(
QtCore.QEvent.Type.KeyPress, QtCore.Qt.Key.Key_R, QtCore.Qt.KeyboardModifier.AltModifier
)
self.plot.keyPressEvent(event)
elif action_text == "Scaled samples\t[Alt+S]":
event = QtGui.QKeyEvent(
QtCore.QEvent.Type.KeyPress, QtCore.Qt.Key.Key_S, QtCore.Qt.KeyboardModifier.AltModifier
)
self.plot.keyPressEvent(event)
elif action_text == "Ascii\t[Ctrl+T]":
event = QtGui.QKeyEvent(
QtCore.QEvent.Type.KeyPress, QtCore.Qt.Key.Key_T, QtCore.Qt.KeyboardModifier.ControlModifier
)
self.plot.keyPressEvent(event)
elif action_text == "Bin\t[Ctrl+B]":
event = QtGui.QKeyEvent(
QtCore.QEvent.Type.KeyPress, QtCore.Qt.Key.Key_B, QtCore.Qt.KeyboardModifier.ControlModifier
)
self.plot.keyPressEvent(event)
elif action_text == "Hex\t[Ctrl+H]":
event = QtGui.QKeyEvent(
QtCore.QEvent.Type.KeyPress, QtCore.Qt.Key.Key_H, QtCore.Qt.KeyboardModifier.ControlModifier
)
self.plot.keyPressEvent(event)
elif action_text == "Physical\t[Ctrl+P]":
event = QtGui.QKeyEvent(
QtCore.QEvent.Type.KeyPress, QtCore.Qt.Key.Key_P, QtCore.Qt.KeyboardModifier.ControlModifier
)
self.plot.keyPressEvent(event)

self.update_channel_groups_count()

Expand Down

0 comments on commit 972495a

Please sign in to comment.