Skip to content

Commit 9748280

Browse files
committed
Merge branch 'cudmore-dev' into johnson-dev
2 parents 3f07ada + c285506 commit 9748280

28 files changed

Lines changed: 327 additions & 288 deletions

pyproject.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ dependencies = [
2121
'PyQt5', # This will not work on macOS arm
2222
'pyqtgraph',
2323
'pyqtdarktheme',
24-
# 'plotly'
24+
# 'plotly',
25+
'qtawesome', # for icons
2526
]
2627
requires-python = ">=3.11"
2728

2829
[project.scripts]
29-
pymapmanager = "pymapmanager.interface2.pyMapManagerApp2:run"
30+
pymapmanager = "pymapmanager.interface.pyMapManagerApp:run"
3031

3132
[tool.setuptools_scm]
3233
version_file = "src/pymapmanager/_version.py"

src/pymapmanager.egg-info/PKG-INFO

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Metadata-Version: 2.4
22
Name: pymapmanager
3-
Version: 0.0.7.dev374+gb914846.d20250422
3+
Version: 0.0.7.dev384+g144a945.d20250430
44
Requires-Python: >=3.11
55
License-File: LICENSE
66
Requires-Dist: numpy

src/pymapmanager.egg-info/SOURCES.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,6 @@ src/pymapmanager/interface/openFolderWindow.py
136136
src/pymapmanager/interface/preferences.py
137137
src/pymapmanager/interface/pyMapManagerApp.py
138138
src/pymapmanager/interface/runInterface2.py
139-
src/pymapmanager/interface/runInterfaceBob.py
140-
src/pymapmanager/interface/runInterfaceJohnson.py
141139
src/pymapmanager/interface/runMap2.py
142140
src/pymapmanager/interface/core/__init__.py
143141
src/pymapmanager/interface/core/_data_model.py
@@ -154,13 +152,15 @@ src/pymapmanager/interface/mapWidgets/mapTableWidget.py
154152
src/pymapmanager/interface/mapWidgets/mapWidget.py
155153
src/pymapmanager/interface/mapWidgets/mmMapPlot_mpl.py
156154
src/pymapmanager/interface/stackWidgets/__init__.py
155+
src/pymapmanager/interface/stackWidgets/_old_experimentMetadata.py
156+
src/pymapmanager/interface/stackWidgets/_old_voxelMetadata.py
157157
src/pymapmanager/interface/stackWidgets/analysisParamWidget2.py
158158
src/pymapmanager/interface/stackWidgets/annotationListWidget2.py
159159
src/pymapmanager/interface/stackWidgets/channelEditor.py
160160
src/pymapmanager/interface/stackWidgets/dendrogramWidget.py
161-
src/pymapmanager/interface/stackWidgets/experimentMetadata.py
162161
src/pymapmanager/interface/stackWidgets/histogramWidget2.py
163162
src/pymapmanager/interface/stackWidgets/imagePlotWidget2.py
163+
src/pymapmanager/interface/stackWidgets/metaDataWidget.py
164164
src/pymapmanager/interface/stackWidgets/scatterplotwidget.py
165165
src/pymapmanager/interface/stackWidgets/searchWidget.py
166166
src/pymapmanager/interface/stackWidgets/spineInfoWidget.py
@@ -196,11 +196,14 @@ src/pymapmanager/tests/test_stack.py
196196
src/pymapmanager/tests/test_timeseries_core.py
197197
src/pymapmanager/tests/interface/__init__.py
198198
src/pymapmanager/tests/interface/readme.md
199+
src/pymapmanager/tests/interface/runInterfaceBob.py
200+
src/pymapmanager/tests/interface/runInterfaceJohnson.py
199201
src/pymapmanager/tests/interface/test_about.py
200202
src/pymapmanager/tests/interface/test_app.py
201203
src/pymapmanager/tests/interface/test_channel_editor.py
202204
src/pymapmanager/tests/interface/test_editEvent.py
203205
src/pymapmanager/tests/interface/test_load_tif.py
206+
src/pymapmanager/tests/interface/test_menus.py
204207
src/pymapmanager/tests/interface/test_stack_widgets.py
205208
src/pymapmanager/tests/interface/test_undoRedo.py
206209
src/pymapmanager/tests/interface/_old/_test_annotationListWidget.py
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[console_scripts]
2-
pymapmanager = pymapmanager.interface2.pyMapManagerApp2:run
2+
pymapmanager = pymapmanager.interface.pyMapManagerApp:run

src/pymapmanager/_logger.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ def setLogLevel(newLogLevel : str = 'INFO'):
1414
logger = logging.getLogger(__name__)
1515

1616
logger.info(f'setLogLevel() newLogLevel "{newLogLevel}"')
17-
logger.info(f' logging to file: {getLoggerFilePath()}')
17+
logger.info(f' logging to file:')
18+
logger.info(f'{getLoggerFilePath()}')
1819

1920
if newLogLevel == 'DEBUG':
2021
logLevel = logging.DEBUG

src/pymapmanager/_version.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@
1717
__version_tuple__: VERSION_TUPLE
1818
version_tuple: VERSION_TUPLE
1919

20-
__version__ = version = '0.0.7.dev374+gb914846.d20250422'
21-
__version_tuple__ = version_tuple = (0, 0, 7, 'dev374', 'gb914846.d20250422')
20+
__version__ = version = '0.0.7.dev384+g144a945.d20250430'
21+
__version_tuple__ = version_tuple = (0, 0, 7, 'dev384', 'g144a945.d20250430')

src/pymapmanager/annotations/lineAnnotationsCore.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ def _buildSummaryDf(self) -> pd.DataFrame:
112112

113113
segmentDf = self.singleTimepoint.segments[:]
114114

115-
_columns = ['Segment', 'Points', 'Length', 'Radius', 'Pivot Distance', 'Color']
115+
# _columns = ['Segment', 'Points', 'Length', 'Radius', 'Pivot Distance', 'Color']
116+
_columns = ['Segment', 'Length', 'Radius', 'Pivot Distance', 'Color']
116117
summaryDf = pd.DataFrame(columns=_columns)
117118

118119
try:
@@ -128,7 +129,7 @@ def _buildSummaryDf(self) -> pd.DataFrame:
128129
# summaryDf['roughTracing'] = segmentDf['roughTracing'] # Represents point or linestring of segment
129130

130131
except (KeyError) as e:
131-
logger.error(e)
132+
logger.error(f'KeyError:"{e}"')
132133
logger.error(f'available keys are: {segmentDf.keys()}')
133134

134135
except (AttributeError) as e:
@@ -155,7 +156,7 @@ def _buildDataFrame(self) -> None:
155156
dfRet = pd.DataFrame(columns=_columns)
156157

157158
segmentDf = self.singleTimepoint.segments[:]
158-
logger.info(f"check {segmentDf.columns}")
159+
# logger.info(f"check {segmentDf.columns}")
159160

160161
if len(segmentDf) > 0:
161162
# xyCoord = segmentDf['segment'].get_coordinates(include_z=True)

src/pymapmanager/interface/mainMenus.py

Lines changed: 43 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,6 @@ def _buildMenus(self, mainMenu, mainWindow):
6363
self.viewMenu.addAction(_emptyAction)
6464
self._menuDict['View'] = self.viewMenu
6565

66-
# self.mapsMenu.aboutToShow.connect(self._refreshMapsMenu)
67-
68-
# #
69-
# # stacks
70-
# name = "Stacks"
71-
# self.stacksMenu = mainMenu.addMenu(name)
72-
# _emptyAction = QtWidgets.QAction("None", self.getApp())
73-
# self.stacksMenu.addAction(_emptyAction)
74-
# self.stacksMenu.aboutToShow.connect(self._refreshStacksMenu)
75-
# # self.stacksMenu.triggered.connect(partial(self._onStacksMenuAction, name))
76-
77-
# #
78-
# # maps
79-
# self.mapsMenu = mainMenu.addMenu("Maps")
80-
# _emptyAction = QtWidgets.QAction("None", self.getApp())
81-
# self.mapsMenu.addAction(_emptyAction)
82-
# self.mapsMenu.aboutToShow.connect(self._refreshMapsMenu)
83-
8466
# plugin (stack then map plugins)
8567
name = "Plugins"
8668
self.pluginsMenu = mainMenu.addMenu(name)
@@ -316,11 +298,12 @@ def _refreshEditMenu(self):
316298

317299
# from pymapmanager.interface.stackWidgets import stackWidget
318300
frontWindow = self.getApp().getFrontWindow()
319-
if isinstance(frontWindow, (mmWidget2, mapWidget)):
320-
nextUndo = frontWindow.getUndoRedo().nextUndoStr()
321-
nextRedo = frontWindow.getUndoRedo().nextRedoStr()
322-
enableUndo = frontWindow.getUndoRedo().numUndo() > 0
323-
enableRedo = frontWindow.getUndoRedo().numRedo() > 0
301+
if isinstance(frontWindow, (mmWidget2, mapWidget)) \
302+
and frontWindow.getUndoRedo() is not None:
303+
nextUndo = frontWindow.getUndoRedo().nextUndoStr()
304+
nextRedo = frontWindow.getUndoRedo().nextRedoStr()
305+
enableUndo = frontWindow.getUndoRedo().numUndo() > 0
306+
enableRedo = frontWindow.getUndoRedo().numRedo() > 0
324307
else:
325308
nextUndo = ''
326309
nextRedo = ''
@@ -416,25 +399,35 @@ def _refreshFileMenu(self):
416399

417400
self.fileMenu.clear()
418401

419-
frontWindow = self.getApp().getFrontWindow()
420-
_frontStackWindow = self.getApp().getFrontStackWindow()
421-
422-
loadFileAction = QtWidgets.QAction("Open...", self.getApp())
423-
loadFileAction.setCheckable(False) # setChecked is True by default?
424-
loadFileAction.setShortcut("Ctrl+O")
425402
_app = self.getApp()
426-
# if _app is not None:
427-
# loadFileAction.triggered.connect(_app.openFile)
428-
self.fileMenu.addAction(loadFileAction)
403+
frontWindow = self.getApp().getFrontWindow()
404+
# _frontStackWindow = self.getApp().getFrontStackWindow()
405+
406+
openMapAction = QtWidgets.QAction("Open mmap Folder...", self.getApp())
407+
openMapAction.setCheckable(False) # setChecked is True by default?
408+
openMapAction.setShortcut("Ctrl+O")
409+
if _app is not None:
410+
openMapAction.triggered.connect(_app.openMap)
411+
self.fileMenu.addAction(openMapAction)
412+
413+
importFileAction = QtWidgets.QAction("Open File...", self.getApp())
414+
importFileAction.setCheckable(False) # setChecked is True by default?
415+
importFileAction.setShortcut("Ctrl+Shift+O")
416+
if _app is not None:
417+
importFileAction.triggered.connect(_app.openFile)
418+
self.fileMenu.addAction(importFileAction)
429419

430420
# loadFolderAction = QtWidgets.QAction("Open Time-Series...", self.getApp())
431421
# loadFolderAction.setCheckable(False) # setChecked is True by default?
432422
# loadFolderAction.triggered.connect(self.getApp().openTimeSeries)
433423
# self.fileMenu.addAction(loadFolderAction)
434424
# self.fileMenu.addSeparator()
435425

436-
# enableUndo = False
437-
# enableRedo = False
426+
# open recent (submenu) will show two lists, one for files and then one for folders
427+
self.openRecentMenu = QtWidgets.QMenu("Open Recent ...")
428+
self.openRecentMenu.aboutToShow.connect(self._refreshOpenRecent)
429+
self.fileMenu.addMenu(self.openRecentMenu)
430+
438431
enableSave = False
439432

440433
if isinstance(frontWindow, (mmWidget2, mapWidget)):
@@ -451,37 +444,18 @@ def _refreshFileMenu(self):
451444
saveFileAction.setShortcut("Ctrl+S")
452445
# saveFileAction.setEnabled(enableUndo and isDirty)
453446
saveFileAction.setEnabled(enableSave)
454-
# saveFileAction.triggered.connect(self.getApp().saveFile)
447+
saveFileAction.triggered.connect(self.getApp().saveAs)
455448
self.fileMenu.addAction(saveFileAction)
456449

450+
# TODO: add export mmap to zip (a bit complicated)
457451
# save as
458-
saveAsFileAction = QtWidgets.QAction("Save As", self.getApp())
452+
saveAsFileAction = QtWidgets.QAction("Save As...", self.getApp())
459453
saveAsFileAction.setCheckable(False) # setChecked is True by default?
460454
saveAsFileAction.triggered.connect(self.getApp().saveAs)
461455
self.fileMenu.addAction(saveAsFileAction)
462456

463457
self.fileMenu.addSeparator()
464458

465-
# open recent (submenu) will show two lists, one for files and then one for folders
466-
self.openRecentMenu = QtWidgets.QMenu("Open Recent ...")
467-
self.openRecentMenu.aboutToShow.connect(self._refreshOpenRecent)
468-
self.fileMenu.addMenu(self.openRecentMenu)
469-
470-
clearRecentAction = QtWidgets.QAction("Clear Recent", self.getApp()) # abj
471-
clearRecentAction.setObjectName("Clear Recent")
472-
clearRecentAction.setCheckable(False)
473-
clearRecentAction.triggered.connect(self.getApp().clearRecentFiles)
474-
self.fileMenu.addAction(clearRecentAction)
475-
self.fileMenu.addSeparator()
476-
477-
# 202504 debug
478-
# _actions = self.fileMenu.actions()
479-
# for _action in _actions:
480-
# logger.error(f' action.objectName(): "{_action.objectName()}"')
481-
# logger.error(f'clearRecentAction objectName:{clearRecentAction.objectName()}')
482-
# clear_recent_action = self.fileMenu.findChild(QtWidgets.QAction, 'Clear Recent')
483-
# logger.error(f'clear_recent_action:{clear_recent_action}')
484-
485459
self.settingsMenu = self.fileMenu.addMenu('User Options...')
486460
self.settingsMenu.aboutToShow.connect(self._refreshSettingsMenu)
487461
self.fileMenu.addSeparator()
@@ -490,11 +464,11 @@ def _refreshFileMenu(self):
490464
analysisParametersAction.triggered.connect(self.getApp()._showAnalysisParameters)
491465
self.fileMenu.addAction(analysisParametersAction)
492466

493-
self.fileMenu.addSeparator()
494-
importNewTIFAction = QtWidgets.QAction('Import new TIF (channel)', self.getApp())
495-
importNewTIFAction.setEnabled(_frontStackWindow is not None)
496-
importNewTIFAction.triggered.connect(self.getApp().importNewTIF)
497-
self.fileMenu.addAction(importNewTIFAction)
467+
# self.fileMenu.addSeparator()
468+
# importNewTIFAction = QtWidgets.QAction('Import new TIF (channel)', self.getApp())
469+
# importNewTIFAction.setEnabled(_frontStackWindow is not None)
470+
# importNewTIFAction.triggered.connect(self.getApp().importNewTIF)
471+
# self.fileMenu.addAction(importNewTIFAction)
498472

499473
# open some mapmanagercore sample data (download and store locally with pooch)
500474
self.fileMenu.addSeparator()
@@ -544,6 +518,14 @@ def _refreshOpenRecent(self):
544518

545519
self.openRecentMenu.addAction(loadFileAction)
546520

521+
self.openRecentMenu.addSeparator()
522+
523+
clearRecentAction = QtWidgets.QAction("Clear Recent", self.getApp()) # abj
524+
# clearRecentAction.setObjectName("Clear Recent")
525+
clearRecentAction.setCheckable(False)
526+
clearRecentAction.triggered.connect(self.getApp().clearRecentFiles)
527+
self.openRecentMenu.addAction(clearRecentAction)
528+
547529
# self.openRecentMenu.addSeparator()
548530

549531
# add recent folders

src/pymapmanager/interface/mapWidgets/mapTableWidget.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from qtpy import QtGui, QtCore, QtWidgets
66

7-
from mapmanagercore import IMPORT_FILE_EXTENSIONS
7+
# from mapmanagercore import IMPORT_FILE_EXTENSIONS
88
from pymapmanager.interface.core.search_widget import myQTableView
99
from pymapmanager.timeseriesCore import TimeSeriesCore
1010
from pymapmanager._logger import logger

0 commit comments

Comments
 (0)