Skip to content

Commit

Permalink
Revert "Re #676 Duplicate right click context actions in the Image Menu"
Browse files Browse the repository at this point in the history
This reverts commit b6f6766.
  • Loading branch information
Pasarus committed Dec 3, 2020
1 parent b6f6766 commit 1e4a468
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 197 deletions.
24 changes: 0 additions & 24 deletions mantidimaging/gui/ui/main_window.ui
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,6 @@
<addaction name="actionExit"/>
</widget>
<widget class="QMenu" name="menuWorkflow">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Workflow</string>
</property>
Expand All @@ -61,17 +58,8 @@
<addaction name="actionAbout"/>
<addaction name="actionDebug_Me"/>
</widget>
<widget class="QMenu" name="menuImage">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Image</string>
</property>
</widget>
<addaction name="menuFile"/>
<addaction name="menuWorkflow"/>
<addaction name="menuImage"/>
<addaction name="menuHelp"/>
</widget>
<action name="actionLoad">
Expand All @@ -83,9 +71,6 @@
</property>
</action>
<action name="actionSave">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Save</string>
</property>
Expand Down Expand Up @@ -123,9 +108,6 @@
</property>
</action>
<action name="actionFilters">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Operations</string>
</property>
Expand Down Expand Up @@ -178,17 +160,11 @@
</property>
</action>
<action name="actionSampleLoadLog">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Load log for stack...</string>
</property>
</action>
<action name="actionLoad180deg">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Load 180 deg projection...</string>
</property>
Expand Down
12 changes: 1 addition & 11 deletions mantidimaging/gui/utility/qt_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from PyQt5 import uic # type: ignore
from PyQt5.QtCore import QObject
from PyQt5.QtWidgets import QLabel, QLineEdit, QPushButton, QSpinBox, QDoubleSpinBox, QCheckBox, QComboBox, QWidget, \
QSizePolicy, QAction
QSizePolicy

from mantidimaging.core.utility import finder

Expand Down Expand Up @@ -235,13 +235,3 @@ def delete_all_widgets_from_layout(lo):
# layout and marks them for deletion)
elif item.widget() is not None:
item.widget().setParent(None)


def populate_menu(menu, actions_list):
for (menu_text, func) in actions_list:
if func is None:
menu.addSeparator()
else:
action = QAction(menu_text, menu)
action.triggered.connect(func)
menu.addAction(action)
98 changes: 5 additions & 93 deletions mantidimaging/gui/windows/main/test/view_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def test_find_images_stack_title(self):
self.assertEqual(return_value, self.presenter.get_stack_with_images.return_value.name)

@mock.patch("mantidimaging.gui.windows.main.view.StackSelectorDialog")
@mock.patch("mantidimaging.gui.windows.main.view.QFileDialog.getOpenFileName")
@mock.patch("mantidimaging.gui.windows.main.view.Qt.QFileDialog.getOpenFileName")
def test_load_180_deg_dialog(self, get_open_file_name: mock.Mock, stack_selector_diag: mock.Mock):
stack_selector_diag.return_value.exec.return_value = QDialog.Accepted
selected_stack = "selected_stack"
Expand Down Expand Up @@ -187,9 +187,9 @@ def test_open_online_documentation(self, mock_qtgui: mock.Mock):
setCentralWidget=DEFAULT,
addDockWidget=DEFAULT)
@mock.patch("mantidimaging.gui.windows.main.view.StackVisualiserView")
@mock.patch("mantidimaging.gui.windows.main.view.QDockWidget")
@mock.patch("mantidimaging.gui.windows.main.view.Qt")
def test_create_stack_window(self,
mock_dock: mock.Mock,
mock_qt: mock.Mock,
mock_sv: mock.Mock,
setCentralWidget: Mock = Mock(),
addDockWidget: Mock = Mock()):
Expand All @@ -200,99 +200,11 @@ def test_create_stack_window(self,

self.view.create_stack_window(images, title, position=position, floating=floating)

mock_dock.assert_called_once_with(title, self.view)
dock = mock_dock.return_value
mock_qt.QDockWidget.assert_called_once_with(title, self.view)
dock = mock_qt.QDockWidget.return_value
setCentralWidget.assert_called_once_with(dock)
addDockWidget.assert_called_once_with(position, dock)

mock_sv.assert_called_once_with(self.view, dock, images)
dock.setWidget.assert_called_once_with(mock_sv.return_value)
dock.setFloating.assert_called_once_with(floating)

def test_update_shortcuts_with_presenter_with_one_or_more_stacks(self):
self.presenter.stack_names = ["1", "2"]

self._update_shortcuts_test(False, True)
self._update_shortcuts_test(True, True)

def test_update_shortcuts_with_presenter_with_no_stacks(self):
self.presenter.stack_names = []

self._update_shortcuts_test(False, False)
self._update_shortcuts_test(True, False)

def _update_shortcuts_test(self, original_state, expected_state):
self.view.actionSave.setEnabled(original_state)
self.view.actionSampleLoadLog.setEnabled(original_state)
self.view.actionLoad180deg.setEnabled(original_state)
self.view.menuWorkflow.setEnabled(original_state)
self.view.menuImage.setEnabled(original_state)

self.view.update_shortcuts()

self.assertEqual(expected_state, self.view.actionSave.isEnabled())
self.assertEqual(expected_state, self.view.actionSampleLoadLog.isEnabled())
self.assertEqual(expected_state, self.view.actionLoad180deg.isEnabled())
self.assertEqual(expected_state, self.view.menuWorkflow.isEnabled())
self.assertEqual(expected_state, self.view.menuImage.isEnabled())

@mock.patch("mantidimaging.gui.windows.main.view.populate_menu")
def test_populate_image_menu_with_no_stack(self, populate_menu):
self.view.menuImage = mock.MagicMock()
self.view.current_showing_stack = mock.MagicMock(return_value=None)

self.view.populate_image_menu()

populate_menu.assert_not_called()
self.view.menuImage.addAction.assert_called_once_with("No stack loaded!")

@mock.patch("mantidimaging.gui.windows.main.view.populate_menu")
def test_populate_image_menu_with_stack_and_actions(self, populate_menu):
self.view.menuImage = mock.MagicMock()
stack = mock.MagicMock()
actions = mock.MagicMock()
stack.actions = actions
self.view.current_showing_stack = mock.MagicMock(return_value=stack)

self.view.populate_image_menu()

populate_menu.assert_called_once_with(self.view.menuImage, actions)
self.view.menuImage.addAction.assert_not_called()

@mock.patch("mantidimaging.gui.windows.main.view.StackVisualiserView")
def test_current_showing_stack_with_stack_with_visible(self, stack_visualiser_view):
stack = mock.MagicMock()
stack.visibleRegion.return_value.isEmpty.return_value = False
self.view.findChildren = mock.MagicMock(return_value=[stack])

current_stack = self.view.current_showing_stack()

self.assertEqual(stack, current_stack)
stack.visibleRegion.assert_called_once()
stack.visibleRegion.return_value.isEmpty.assert_called_once()
self.view.findChildren.assert_called_once_with(stack_visualiser_view)

@mock.patch("mantidimaging.gui.windows.main.view.StackVisualiserView")
def test_current_showing_stack_with_stack_not_visible(self, stack_visualiser_view):
stack = mock.MagicMock()
stack.visibleRegion.return_value.isEmpty.return_value = True
self.view.findChildren = mock.MagicMock(return_value=[stack])

current_stack = self.view.current_showing_stack()

self.assertEqual(None, current_stack)
stack.visibleRegion.assert_called_once()
stack.visibleRegion.return_value.isEmpty.assert_called_once()
self.view.findChildren.assert_called_once_with(stack_visualiser_view)

@mock.patch("mantidimaging.gui.windows.main.view.StackVisualiserView")
def test_current_showing_stack_no_stack(self, stack_visualiser_view):
stack = mock.MagicMock()
self.view.findChildren = mock.MagicMock(return_value=[])

current_stack = self.view.current_showing_stack()

self.assertEqual(None, current_stack)
stack.visibleRegion.assert_not_called()
stack.visibleRegion.return_value.isEmpty.assert_not_called()
self.view.findChildren.assert_called_once_with(stack_visualiser_view)
56 changes: 14 additions & 42 deletions mantidimaging/gui/windows/main/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@
from typing import Optional
from uuid import UUID

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSignal
from PyQt5 import Qt, QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QInputDialog, QLabel, QMessageBox, QMenu, QDockWidget, QFileDialog
from PyQt5.QtWidgets import QAction, QDialog, QInputDialog, QLabel, QMessageBox

from mantidimaging.gui.utility.qt_helpers import populate_menu
from mantidimaging.gui.widgets.stack_selector_dialog.stack_selector_dialog import StackSelectorDialog

from mantidimaging.core.data import Images
Expand All @@ -35,19 +33,14 @@ class MainWindowView(BaseMainWindowView):
NOT_THE_LATEST_VERSION = "This is not the latest version"
UNCAUGHT_EXCEPTION = "Uncaught exception"

active_stacks_changed = pyqtSignal()
backend_message = pyqtSignal(bytes)

menuFile: QMenu
menuWorkflow: QMenu
menuImage: QMenu
menuHelp: QMenu
active_stacks_changed = Qt.pyqtSignal()
backend_message = Qt.pyqtSignal(bytes)

actionRecon: QAction
actionFilters: QAction
actionSavuFilters: QAction
actionCompareImages: QAction
actionSampleLoadLog: QAction
actionLoadLog: QAction
actionLoad180deg: QAction
actionLoad: QAction
actionSave: QAction
Expand Down Expand Up @@ -89,8 +82,6 @@ def setup_shortcuts(self):
self.actionSave.triggered.connect(self.show_save_dialogue)
self.actionExit.triggered.connect(self.close)

self.menuImage.aboutToShow.connect(self.populate_image_menu)

self.actionOnlineDocumentation.triggered.connect(self.open_online_documentation)
self.actionAbout.triggered.connect(self.show_about)

Expand All @@ -103,27 +94,8 @@ def setup_shortcuts(self):

self.actionDebug_Me.triggered.connect(self.attach_debugger)

def populate_image_menu(self):
self.menuImage.clear()
current_stack = self.current_showing_stack()
if current_stack is None:
self.menuImage.addAction("No stack loaded!")
else:
populate_menu(self.menuImage, current_stack.actions)

def current_showing_stack(self) -> Optional[StackVisualiserView]:
for stack in self.findChildren(StackVisualiserView):
if not stack.visibleRegion().isEmpty():
return stack
return None

def update_shortcuts(self):
enabled = len(self.presenter.stack_names) > 0
self.actionSave.setEnabled(enabled)
self.actionSampleLoadLog.setEnabled(enabled)
self.actionLoad180deg.setEnabled(enabled)
self.menuWorkflow.setEnabled(enabled)
self.menuImage.setEnabled(enabled)
self.actionSave.setEnabled(len(self.presenter.stack_names) > 0)

@staticmethod
def open_online_documentation():
Expand Down Expand Up @@ -157,9 +129,9 @@ def load_sample_log_dialog(self):

# Open file dialog
file_filter = "Log File (*.txt *.log)"
selected_file, _ = QFileDialog.getOpenFileName(caption="Log to be loaded",
filter=f"{file_filter};;All (*.*)",
initialFilter=file_filter)
selected_file, _ = Qt.QFileDialog.getOpenFileName(caption="Log to be loaded",
filter=f"{file_filter};;All (*.*)",
initialFilter=file_filter)
# Cancel/Close was clicked
if selected_file == "":
return
Expand All @@ -180,9 +152,9 @@ def load_180_deg_dialog(self):

# Open file dialog
file_filter = "Image File (*.tif *.tiff)"
selected_file, _ = QFileDialog.getOpenFileName(caption="180 Degree Image",
filter=f"{file_filter};;All (*.*)",
initialFilter=file_filter)
selected_file, _ = Qt.QFileDialog.getOpenFileName(caption="180 Degree Image",
filter=f"{file_filter};;All (*.*)",
initialFilter=file_filter)
# Cancel/Close was clicked
if selected_file == "":
return
Expand Down Expand Up @@ -261,8 +233,8 @@ def create_stack_window(self,
stack: Images,
title: str,
position=QtCore.Qt.TopDockWidgetArea,
floating=False) -> QDockWidget:
dock = QDockWidget(title, self)
floating=False) -> Qt.QDockWidget:
dock = Qt.QDockWidget(title, self)

# this puts the new stack window into the centre of the window
self.setCentralWidget(dock)
Expand Down
Loading

0 comments on commit 1e4a468

Please sign in to comment.