6 from Vispa.Main.TabController
import TabController
7 from Vispa.Gui.FindDialog
import FindDialog
8 from Vispa.Share.FindAlgorithm
import FindAlgorithm
9 from Vispa.Gui.BoxContentDialog
import BoxContentDialog
10 from Vispa.Views.AbstractView
import AbstractView
11 from Vispa.Plugins.Browser.BrowserTab
import BrowserTab
12 from Vispa.Gui.Zoomable
import Zoomable
15 """ Controls a tab with a TreeView, an AbstractView and a PropertiesView.
17 The tab is filled using a DataAccessor. The controller supports find
18 functionality as well as a dialog for choosing the box content in the WidgetView.
21 logging.debug(__name__ +
": __init__")
22 TabController.__init__(self, plugin)
42 return self.plugin().viewClassId(self.tab().
centerView().__class__)
46 disabledCenterViewIds = []
47 for viewClass
in self.plugin().availableCenterViews():
48 viewClassId=self.plugin().viewClassId(viewClass)
49 if enable==
False and viewClassId!=exceptionViewClassId:
50 disabledCenterViewIds+=[viewClassId]
51 if enable==
True and viewClassId==exceptionViewClassId:
52 disabledCenterViewIds+=[viewClassId]
53 self.plugin().setDisabledCenterViewIds(disabledCenterViewIds)
56 """ Shows view menu when user selects tab.
59 self.tab().mainWindow().application().showPluginMenu(self.plugin().viewMenu())
65 requestedViewClass =
None
66 for viewClass
in self.plugin().availableCenterViews():
67 if requestedViewClassId == self.plugin().viewClassId(viewClass):
68 requestedViewClass = viewClass
69 if not requestedViewClass
and len(self.plugin().availableCenterViews())>0:
70 logging.warning(self.__class__.__name__ +
": switchCenterView() - Unknown view class id "+ requestedViewClassId +
".")
71 requestedViewClass = self.plugin().availableCenterViews()[0]
72 elif not requestedViewClass:
73 logging.error(self.__class__.__name__ +
": switchCenterView() - Unknown view class id "+ requestedViewClassId +
". Aborting...")
75 self.tab().setCenterView(requestedViewClass())
79 if hasattr(self.tab().
centerView(),
"setEditable"):
83 selection = self.tab().treeView().
selection()
85 self.tab().
centerView().setDataObjects([selection])
88 self.connect(self.tab().
centerView(), SIGNAL(
"modified"), self.setModified)
94 self._boxContentDialog.onScreen()
97 """ Makes sure an existing property view's read-only mode is set accordingly.
99 TabController.setEditable(self, edit)
100 if self.tab()
and self.tab().propertyView():
101 self.tab().propertyView().setReadOnly(
not edit)
104 """ Sets tab and connects signals to tab.
106 if not (isinstance(tab.treeView(), AbstractView)
and isinstance(tab.treeView(), QWidget)):
107 raise TypeError(__name__ +
" requires a center view of type AbstractView and QWidget.")
108 if not (isinstance(tab.centerView(), AbstractView)
and isinstance(tab.centerView(), QWidget)):
109 raise TypeError(__name__ +
" requires a center view of type AbstractView and QWidget.")
110 if not isinstance(tab, BrowserTab):
111 raise TypeError(__name__ +
" requires a tab of type BrowserTab.")
112 TabController.setTab(self, tab)
127 """ Set the DataAccessor and show data in the TreeView.
129 logging.debug(__name__ +
": setDataAccessor")
135 self.tab().treeView().setFilter(self.
filter)
142 """ Sets zoom of tab's scroll area.
144 Needed for zoom tool bar. See TabController setZoom().
146 if hasattr(self.tab(),
"scrollArea"):
147 self.tab().scrollArea().
setZoom(zoom)
150 """ Returns zoom of tab's scoll area.
152 Needed for zoom tool bar. See TabController zoom().
154 if hasattr(self.tab(),
"scrollArea"):
155 return self.tab().scrollArea().
zoom()
160 """ Fill the center view from an item in the TreeView and update it """
161 logging.debug(__name__ +
": updateCenterView")
162 statusMessage = self.plugin().application().startWorking(
"Updating center view")
167 if self.tab().propertyView().dataObject() != select
and propertyView:
168 self.tab().propertyView().setDataObject(select)
170 self.plugin().application().stopWorking(statusMessage)
173 """ When object is selected in the TreeView update center view and PropertyView.
175 logging.debug(__name__ +
": onTreeViewSelected")
181 """ When object is selected in the center view update PropertyView.
183 logging.debug(__name__ +
": onSelected")
184 if self.tab().propertyView().dataObject() != select:
185 statusMessage = self.plugin().application().startWorking(
"Updating property view")
186 self.tab().propertyView().setDataObject(select)
188 self.plugin().application().stopWorking(statusMessage)
191 """ Updates all three views and restores the selection, e.g. after moving to next event.
193 logging.debug(__name__ +
": updateContent")
196 self._filterAlgoritm.setDataObjects(self._dataAccessor.topLevelObjects())
197 self._filterDialog.filter()
199 statusMessage = self.plugin().application().startWorking(
"Updating all views")
201 self._findAlgorithm.setDataObjects(self._dataAccessor.topLevelObjects())
202 self._findDialog.edited()
203 self.tab().treeView().setDataObjects(self._dataAccessor.topLevelObjects())
206 self.tab().propertyView().setDataObject(self.tab().treeView().
selection())
207 if not propertyView
or self.tab().propertyView().
updateContent():
208 selection = self.tab().treeView().
selection()
210 self.tab().
centerView().setDataObjects([selection])
212 self.plugin().application().stopWorking(statusMessage)
216 self.tab().treeView().restoreSelection()
222 """ Open find dialog and find items.
224 logging.debug(__name__ +
": find")
228 self._findAlgorithm.setFilter(self.
filter)
233 self._findAlgorithm.setDataObjects(self._dataAccessor.topLevelObjects())
234 self._findDialog.onScreen()
237 """ Open filter dialog and filter items.
239 logging.debug(__name__ +
": filterDialog")
247 self._filterAlgoritm.setDataObjects(self._dataAccessor.topLevelObjects())
248 self._filterDialog.onScreen(
True,
False)
255 """ Select an object in all views.
257 logging.debug(__name__ +
": select : " + str(object))
258 self.tab().treeView().
select(object)
260 if self.tab().propertyView().dataObject() != object:
261 statusMessage = self.plugin().application().startWorking(
"Updating property view")
262 self.tab().propertyView().setDataObject(object)
264 self.plugin().application().stopWorking(statusMessage)
267 """ Update box content of center view when script is changed.
269 if hasattr(self.tab().
centerView(),
"setBoxContentScript"):
270 self.tab().
centerView().setBoxContentScript(script)
275 return TabController.close(self)
281 """ Save screenshot of the center view to file.
286 """ Filter all final state objects using the output of the filterDialog.
290 return [o
for o
in objects
if o
in self.
_filterObjects or len(self.
filter(self._dataAccessor.children(o)))>0]
295 """ Cancel all operations in tab.
297 logging.debug(__name__ +
": cancel")
298 self.tab().treeView().
cancel()
300 self.tab().propertyView().
cancel()
303 return self.tab().treeView().
isBusy()
or\
305 self.tab().propertyView().
isBusy()
308 """ write options to ini """
309 logging.debug(__name__ +
": saveIni")
310 if not self.plugin():
311 logging.waring(self.__class__.__name__ +
": saveIni() - No plugin set. Aborting...")
313 ini = self.plugin().application().ini()
314 if not ini.has_section(
"view"):
315 ini.add_section(
"view")
318 if hasattr(self.
centerView(),
"boxContentScript"):
319 ini.set(
"view",
"box content script", self.
centerView().boxContentScript())
320 self.plugin().application().writeIni()
323 """ read options from ini """
324 logging.debug(__name__ +
": loadIni")
325 ini = self.plugin().application().ini()
326 if ini.has_option(
"view",
"CurrentView"):
327 proposed_view = ini.get(
"view",
"CurrentView")
329 elif self.plugin().defaultCenterViewId():
331 elif len(self.plugin().availableCenterViews()) > 0:
332 self.
switchCenterView(self.plugin().viewClassId(self.plugin().availableCenterViews()[0]))
333 if ini.has_option(
"view",
"box content script"):
334 self._boxContentDialog.setScript(str(ini.get(
"view",
"box content script")))
335 if hasattr(self.
centerView(),
"setBoxContentScript"):
336 self.
centerView().setBoxContentScript(str(ini.get(
"view",
"box content script")))
339 """ Enable/disable menu entries, when center view changes.
341 self.plugin().boxContentAction().setVisible(hasattr(self.tab().
centerView(),
"setBoxContentScript"))
342 self.plugin().saveImageAction().setVisible(hasattr(self.tab().
centerView(),
"exportImage"))
343 self.plugin().zoomAction().setVisible(hasattr(self.tab().
centerView(),
"setZoom"))
344 self.plugin().expandAllAction().setVisible(hasattr(self.tab().treeView(),
"expandAll"))
345 self.plugin().expandToDepthAction().setVisible(hasattr(self.tab().treeView(),
"expandToDepth"))
346 self.plugin().collapseAllAction().setVisible(hasattr(self.tab().treeView(),
"collapseAll"))
347 for action
in self.plugin().viewMenu().
actions():
349 action.setEnabled(
not action.data().
toString()
in self.plugin().disabledCenterViewIds())
351 action.setChecked(currentAction)
353 self.tab().setCenterViewHeader(action.text().
replace(
"&",
""))
354 if self.tab().mainWindow():
355 if isinstance(self.tab().
centerView(), Zoomable):
356 self.tab().mainWindow().application().showZoomToolBar()
358 self.tab().mainWindow().application().hideZoomToolBar()
361 popup=QMenu(self.tab().centerViewMenuButton())
362 popup.addAction(self.plugin()._boxContentAction)
363 popup.addAction(self.plugin()._saveImageAction)
364 popup.addAction(self.plugin()._zoomAction)
366 for action
in self.plugin().viewMenu().
actions():
368 popup.addAction(action)
369 if not isinstance(point,QPoint):
370 point=self.tab().centerViewMenuButton().mapToGlobal(QPoint(self.tab().centerViewMenuButton().
width(),0))
374 popup=QMenu(self.tab().treeViewMenuButton())
375 popup.addAction(self.plugin()._expandAllAction)
376 popup.addAction(self.plugin()._expandToDepthAction)
377 popup.addAction(self.plugin()._collapseAllAction)
378 popup.addAction(self.plugin()._filterAction)
380 if not isinstance(point,QPoint):
381 point=self.tab().treeViewMenuButton().mapToGlobal(QPoint(self.tab().treeViewMenuButton().
width(),0))
def currentCenterViewClassId
roAction_t actions[nactions]
def centerViewMenuButtonClicked
def enableCenterViewSelectionMenu
def treeViewMenuButtonClicked
std::string toString(const std::pair< T, T > &aT)