Skip to content

Commit bc153f6

Browse files
committed
refactored EditDataClass
1 parent 2a7e4e9 commit bc153f6

File tree

10 files changed

+85
-73
lines changed

10 files changed

+85
-73
lines changed

src/pymapmanager/interface/mainMenus.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -511,18 +511,18 @@ def _refreshFileMenu(self):
511511
self.fileMenu.addMenu(self.sampleDataMenu)
512512

513513
# abj: copy spine dataframe to clip board or export spine dataframe to csv
514-
self.fileMenu.addSeparator()
515-
self.spineTableMenu = QtWidgets.QMenu("Spine Table ...")
516-
self.spineTableMenu.setEnabled(_frontStackWindow is not None)
517-
self.fileMenu.addMenu(self.spineTableMenu)
514+
# self.fileMenu.addSeparator()
515+
# self.spineTableMenu = QtWidgets.QMenu("Spine Table ...")
516+
# self.spineTableMenu.setEnabled(_frontStackWindow is not None)
517+
# self.fileMenu.addMenu(self.spineTableMenu)
518518

519-
copySpineTableAction = QtWidgets.QAction('Copy to ClipBoard', self.getApp())
520-
copySpineTableAction.triggered.connect(lambda: self.getApp().exportSpineTable("copy"))
521-
self.spineTableMenu.addAction(copySpineTableAction)
519+
# copySpineTableAction = QtWidgets.QAction('Copy to ClipBoard', self.getApp())
520+
# copySpineTableAction.triggered.connect(lambda: self.getApp().exportSpineTable("copy"))
521+
# self.spineTableMenu.addAction(copySpineTableAction)
522522

523-
exportSpineTableAction = QtWidgets.QAction('Export to CSV', self.getApp())
524-
exportSpineTableAction.triggered.connect(lambda: self.getApp().exportSpineTable("export"))
525-
self.spineTableMenu.addAction(exportSpineTableAction)
523+
# exportSpineTableAction = QtWidgets.QAction('Export to CSV', self.getApp())
524+
# exportSpineTableAction.triggered.connect(lambda: self.getApp().exportSpineTable("export"))
525+
# self.spineTableMenu.addAction(exportSpineTableAction)
526526

527527
def _refreshOpenRecent(self):
528528
"""Dynamically generate the open recent stack/map menu.

src/pymapmanager/interface/pyMapManagerApp.py

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

3030
from pymapmanager.interface.openFirstWindow import OpenFirstWindow
3131
from pymapmanager.interface.openFolderWindow import OpenFolderWindow
32-
from pymapmanager.interface.stackWidgets.analysisParamWidget2 import AnalysisParamWidget
32+
from pymapmanager.interface.stackWidgets.metaDataWidget import AnalysisParamWidget
3333
from pymapmanager.timeseriesCore import TimeSeriesCore
3434

3535
from pymapmanager.interface.mapWidgets.mapWidget import mapWidget

src/pymapmanager/interface/stackWidgets/annotationListWidget2.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,6 @@ def __init__(self,
4545
# rewire context menu
4646
self._myTableView.contextMenuEvent = self._contextMenuEvent
4747

48-
def _contextMenuEvent(self, event):
49-
self.menu = QtWidgets.QMenu(self)
50-
colorAction = QtWidgets.QAction('Set Color', self)
51-
colorAction.triggered.connect(lambda: self._colorPickerSlot(event))
52-
self.menu.addAction(colorAction)
53-
54-
# action = _menu.exec_(self.mapToGlobal(event.pos()))
55-
self.menu.popup(QtGui.QCursor.pos())
56-
5748
def _colorPickerSlot(self, event):
5849
"""Show color dialog and set segment color.
5950
"""
@@ -273,6 +264,10 @@ def on_table_selection(self, itemList : List[int], isAlt : bool = False):
273264
event.getStackSelection().setPointSelection(itemList)
274265
self.emitEvent(event, blockSlots=False)
275266

267+
def _contextMenuEvent(self, event):
268+
"""Define in derived."""
269+
logger.error(f'{self.getClassName()} base class called')
270+
276271
class pointListWidget(annotationListWidget):
277272

278273
_widgetName = 'Point List'
@@ -362,6 +357,31 @@ def _deleteSelected(self):
362357
deleteSpineEvent = DeleteSpineEvent(self, spineLabelList)
363358
self.emitEvent(deleteSpineEvent)
364359

360+
def _contextMenuEvent(self, event):
361+
362+
logger.info(f'{self.getClassName()}')
363+
364+
self.menu = QtWidgets.QMenu(self)
365+
366+
# export spines to clipboard
367+
exportToClipboardAction = QtWidgets.QAction('Copy Spines To Clipboard', self)
368+
# exportToClipboardAction.triggered.connect(lambda: self.getStackWidget().exportSpines(mode='copy'))
369+
exportToClipboardAction.triggered.connect(lambda: self._exportSpines(mode='copy'))
370+
self.menu.addAction(exportToClipboardAction)
371+
372+
# export spines to csv file
373+
exportToFileAction = QtWidgets.QAction('Export Spines To File', self)
374+
# exportToFileAction.triggered.connect(lambda: self.getStackWidget().exportSpines(mode='export'))
375+
exportToFileAction.triggered.connect(lambda: self._exportSpines(mode='export'))
376+
self.menu.addAction(exportToFileAction)
377+
378+
# action = _menu.exec_(self.mapToGlobal(event.pos()))
379+
self.menu.popup(QtGui.QCursor.pos())
380+
381+
def _exportSpines(self, mode):
382+
logger.warning(f'mode:{mode}')
383+
self.getStackWidget().exportSpines(mode=mode)
384+
365385
class lineListWidget(annotationListWidget):
366386

367387
_widgetName = 'Segment List'
@@ -581,3 +601,13 @@ def addSegment(self):
581601
"""
582602
self.tracingWidget.on_segment_button_clicked(state = None, buttonName= '+')
583603

604+
def _contextMenuEvent(self, event):
605+
self.menu = QtWidgets.QMenu(self)
606+
607+
# color dialog to set color
608+
colorAction = QtWidgets.QAction('Set Color', self)
609+
colorAction.triggered.connect(lambda: self._colorPickerSlot(event))
610+
self.menu.addAction(colorAction)
611+
612+
# action = _menu.exec_(self.mapToGlobal(event.pos()))
613+
self.menu.popup(QtGui.QCursor.pos())

src/pymapmanager/interface/stackWidgets/base/editDataclass.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ class EditDataClass(mmWidget2):
1414

1515
def __init__(self,
1616
stackWidget: stackWidget,
17+
dataClass: "_metadataBase" = None,
1718
):
1819
"""After init, must call setDataclass().
1920
"""
2021
super().__init__(stackWidget)
2122

22-
# self._dataclass: _metadataBase = None
2323
self._dataclass: "_metadataBase" = None
2424
"""The dataclass we are editing."""
2525

@@ -29,7 +29,13 @@ def __init__(self,
2929
self.widgetDict = {}
3030
self.canApply = False
3131

32+
if dataClass is not None:
33+
self.setDataclass(dataClass)
34+
3235
def setDataclass(self, dataClass):
36+
if self._dataclass is not None:
37+
logger.warning(f'reassigning _dataclass, already assigned as {type(self_dataclass)}')
38+
3339
self._dataclass = dataClass
3440
self._dict = self._dataclass.to_dict_with_metadata()
3541

src/pymapmanager/interface/stackWidgets/base/mmWidget2.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,14 +1382,15 @@ def exportSpines(self, mode: str):
13821382
Parameters
13831383
----------
13841384
mode: str
1385-
"export" or "copy"
1385+
"export" to file or "copy" to clipboard.
13861386
"""
13871387
filename = None
13881388
if mode == 'export':
1389-
logger.error('todo: prompt user for a file')
1390-
filename = ''
1389+
# abb, we need this here because once we are in stack(), we don't have a GUI
1390+
logger.error('todo: prompt user for a csv file')
1391+
# filename = ''
13911392

1392-
self.getStack().exportSpines(mode, filename=filename)
1393+
self.getStack().exportSpines(filename=filename)
13931394

13941395
if __name__ == '__main__':
13951396
from pymapmanager._logger import setLogLevel

src/pymapmanager/interface/stackWidgets/experimentMetadata.py

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/pymapmanager/interface/stackWidgets/metaDataWidget.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1+
from qtpy import QtWidgets
2+
13
from pymapmanager.interface.stackWidgets.base.editDataclass import EditDataClass
24
from pymapmanager.interface.stackWidgets import stackWidget
3-
from pymapmanager._logger import logger, setLogLevel
4-
from qtpy import QtGui, QtCore, QtWidgets
55

6-
from pymapmanager.interface.pyMapManagerApp import PyMapManagerApp
7-
from pymapmanager._logger import logger
8-
from pymapmanager.interface.stackWidgets.experimentMetadata import ExperimentMetadata
9-
from pymapmanager.interface.stackWidgets.voxelMetadata import VoxelMetadata
106
from pymapmanager.interface.stackWidgets.analysisParamWidget2 import AnalysisParamWidget
7+
from pymapmanager.interface.stackWidgets.base.mmWidget2 import mmWidget2
118

12-
from pymapmanager.interface.stackWidgets.base.mmWidget2 import mmWidget2, pmmEventType, pmmEvent
9+
# from pymapmanager._logger import logger
1310

1411
class MetaDataWidget(mmWidget2):
1512
_widgetName = 'Metadata Widget'
@@ -21,9 +18,13 @@ def __init__(self, stackWidget: stackWidget):
2118
self.tabWidget = QtWidgets.QTabWidget()
2219
layout.addWidget(self.tabWidget)
2320

24-
# Instantiate and add tabs
25-
self.voxelTab = VoxelMetadata(stackWidget)
26-
self.experimentTab = ExperimentMetadata(stackWidget)
21+
# add tabs
22+
voxelMetadata = stackWidget.getStack().getMetadata().voxelMetadata
23+
self.voxelTab = EditDataClass(stackWidget, dataClass=voxelMetadata)
24+
25+
experimentMetadata = stackWidget.getStack().getMetadata().experimentMetadata
26+
self.experimentTab = EditDataClass(stackWidget, dataClass=experimentMetadata)
27+
2728
self.analysisParamsTab = AnalysisParamWidget(stackWidget)
2829

2930
# self.tabWidget.addTab(self.geometryTab, self.geometryTab._widgetName)

src/pymapmanager/interface/stackWidgets/stackWidget.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ def __init__(self,
9696
self.setWindowTitle(self.getStack().getFileName())
9797

9898
self._buildUI()
99-
self._buildMenus()
99+
100+
# moved to MainWindow
101+
# self._buildMenus()
100102

101103
# self.setContextMenuPolicy(QtCore.Qt.NoContextMenu) # abj - disabled hidden context menu
102104

src/pymapmanager/interface/stackWidgets/voxelMetadata.py

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/pymapmanager/stack.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,13 @@ def shape(self):
241241
def getDendrogramReplot(self, newSegmentID, spineAngleChecked, spineLengthChecked , spineLengthConstant):
242242
return self._fullMap.getDendrogramReplot(newSegmentID, spineAngleChecked, spineLengthChecked, spineLengthConstant)
243243

244-
def exportSpines(self, mode:str, filename:str = None):
244+
def exportSpines(self, filename:str = None):
245245
"""Export spines to clipboard or file.
246246
247247
Parameters
248248
==========
249-
mode:
250-
in ['export', 'copy']
251249
filename:
252-
file name to save to if mode is 'export'
250+
file name to export to, if None then copy to clipboard
253251
"""
254252
# get the spine dataframe in physical units
255253
df = self._convertToMicrometer()
@@ -258,14 +256,14 @@ def exportSpines(self, mode:str, filename:str = None):
258256
logger.error('empty df')
259257
return
260258

261-
if mode == 'export':
262-
logger.error(f'todo: save csv to filename:{filename}')
263-
#df.to_csv(filename, index=False)
264-
265-
elif mode == 'copy':
266-
logger.info(f'copied {len(df)} spines to clipboard.')
259+
if filename is None:
267260
df.to_clipboard()
268-
261+
logger.info(f'copied {len(df)} spines to clipboard')
262+
263+
else:
264+
logger.error('todo: be sure to fill in proper filename when still in PyQt GUI')
265+
df.to_csv(filename, index=False)
266+
269267
def _convertToMicrometer(self):
270268
""" Convert df columns values in pixels to micrometer
271269

0 commit comments

Comments
 (0)