Skip to content

Commit

Permalink
Merge pull request #274 from che85/Refactoring
Browse files Browse the repository at this point in the history
fixed messed up NewCaseSelectionNameWidget and implemented Slicelet
  • Loading branch information
che85 committed Apr 21, 2017
2 parents 34a1a53 + 5615669 commit c735eb1
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 7 deletions.
98 changes: 97 additions & 1 deletion SliceTracker/SliceTracker.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import ast
import vtk
import logging

from SliceTrackerUtils.configuration import SliceTrackerConfiguration
Expand Down Expand Up @@ -222,4 +223,99 @@ def onCurrentTabChanged(self, index):
if step.active:
self.session.previousStep = step
step.active = False
self.session.steps[index].active = True
self.session.steps[index].active = True


class SliceTrackerSlicelet(qt.QWidget, ModuleWidgetMixin):

class MainWindow(qt.QWidget):

def __init__(self, parent=None):
qt.QWidget.__init__(self)
self.objectName = "qSlicerAppMainWindow"
self.setLayout(qt.QVBoxLayout())
self.mainFrame = qt.QFrame()
self.mainFrame.setLayout(qt.QHBoxLayout())

self._statusBar = qt.QStatusBar()
self._statusBar.setMaximumHeight(35)

self.layout().addWidget(self.mainFrame)
self.layout().addWidget(self._statusBar)

def statusBar(self):
self._statusBar = getattr(self, "_statusBar", None)
if not self._statusBar:
self._statusBar = qt.QStatusBar()
return self._statusBar

def __init__(self):
qt.QWidget.__init__(self)

print slicer.dicomDatabase

self.mainWidget = SliceTrackerSlicelet.MainWindow()

self.setupLayoutWidget()

self.moduleFrame = qt.QWidget()
self.moduleFrame.setLayout(qt.QVBoxLayout())
self.widget = SliceTrackerWidget(self.moduleFrame)
self.widget.setup()

# TODO: resize self.widget.parent to minimum possible width

self.scrollArea = qt.QScrollArea()
self.scrollArea.setWidget(self.widget.parent)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setMinimumWidth(self.widget.parent.minimumSizeHint.width())

self.splitter = qt.QSplitter()
self.splitter.setOrientation(qt.Qt.Horizontal)
self.splitter.addWidget(self.scrollArea)
self.splitter.addWidget(self.layoutWidget)
self.splitter.splitterMoved.connect(self.onSplitterMoved)

self.splitter.setStretchFactor(0,0)
self.splitter.setStretchFactor(1,1)
self.splitter.handle(1).installEventFilter(self)

self.mainWidget.mainFrame.layout().addWidget(self.splitter)
self.mainWidget.show()

def setupLayoutWidget(self):
self.layoutWidget = qt.QWidget()
self.layoutWidget.setLayout(qt.QHBoxLayout())
layoutWidget = slicer.qMRMLLayoutWidget()
layoutManager = slicer.qSlicerLayoutManager()
layoutManager.setMRMLScene(slicer.mrmlScene)
layoutManager.setScriptedDisplayableManagerDirectory(slicer.app.slicerHome + "/bin/Python/mrmlDisplayableManager")
layoutWidget.setLayoutManager(layoutManager)
slicer.app.setLayoutManager(layoutManager)
layoutWidget.setLayout(slicer.vtkMRMLLayoutNode.SlicerLayoutFourUpView)
self.layoutWidget.layout().addWidget(layoutWidget)

def eventFilter(self, obj, event):
if event.type() == qt.QEvent.MouseButtonDblClick:
self.onSplitterClick()

def onSplitterMoved(self, pos, index):
vScroll = self.scrollArea.verticalScrollBar()
print self.moduleFrame.width, self.widget.parent.width, self.scrollArea.width, vScroll.width
vScrollbarWidth = 4 if not vScroll.isVisible() else vScroll.width + 4 # TODO: find out, what is 4px wide
if self.scrollArea.minimumWidth != self.widget.parent.minimumSizeHint.width() + vScrollbarWidth:
self.scrollArea.setMinimumWidth(self.widget.parent.minimumSizeHint.width() + vScrollbarWidth)

def onSplitterClick(self):
if self.splitter.sizes()[0] > 0:
self.splitter.setSizes([0, self.splitter.sizes()[1]])
else:
minimumWidth = self.widget.parent.minimumSizeHint.width()
self.splitter.setSizes([minimumWidth, self.splitter.sizes()[1]-minimumWidth])


if __name__ == "SliceTrackerSlicelet":
import sys
print( sys.argv )

slicelet = SliceTrackerSlicelet()
38 changes: 32 additions & 6 deletions SliceTracker/SliceTrackerUtils/helpers.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import os
import datetime
import qt
import re
import slicer

from SlicerProstateUtils.mixins import ModuleWidgetMixin

Expand All @@ -25,7 +27,6 @@ def __init__(self, destination, parent=None):
self.onCaseNumberChanged(self.minimum)

def getNextCaseNumber(self):
import re
caseNumber = 0
for dirName in [dirName for dirName in os.listdir(self.destinationRoot)
if os.path.isdir(os.path.join(self.destinationRoot, dirName)) and re.match(self.PATTERN, dirName)]:
Expand All @@ -35,19 +36,44 @@ def getNextCaseNumber(self):

def setupUI(self):
self.setWindowTitle("Case Number Selection")
self.setText("Please select a case number for the new case.")
self.setIcon(qt.QMessageBox.Question)
self.spinbox = qt.QSpinBox()
self.spinbox.setRange(self.minimum, int("9"*self.CASE_NUMBER_DIGITS))

self.hideInvisibleUnneededComponents()

self.textLabel = qt.QLabel("Please select a case number for the new case.")
self.textLabel.setStyleSheet("font-weight: bold;")
self.previewLabel = qt.QLabel("New case directory:")
self.preview = qt.QLabel()
self.notice = qt.QLabel()
self.layout().addWidget(self.createVLayout([self.createHLayout([qt.QLabel("Proposed Case Number"), self.spinbox]),
self.preview, self.notice]), 2, 1)
self.notice.setStyleSheet("color:red;")

self.okButton = self.addButton(self.Ok)
self.okButton.enabled = False
self.cancelButton = self.addButton(self.Cancel)
self.setDefaultButton(self.okButton)

self.groupBox = qt.QGroupBox()
self.groupBox.setLayout(qt.QGridLayout())
self.groupBox.layout().addWidget(self.textLabel, 0, 0, 1, 2)
self.groupBox.layout().addWidget(qt.QLabel("Proposed Case Number"), 1, 0)
self.groupBox.layout().addWidget(self.spinbox, 1, 1)
self.groupBox.layout().addWidget(self.previewLabel, 2, 0, 1, 2)
self.groupBox.layout().addWidget(self.preview, 3, 0, 1, 2)
self.groupBox.layout().addWidget(self.notice, 4, 0, 1, 2)

self.groupBox.layout().addWidget(self.okButton, 5, 0)
self.groupBox.layout().addWidget(self.cancelButton, 5, 1)

self.layout().addWidget(self.groupBox, 1, 1)

def hideInvisibleUnneededComponents(self):
for oName in ["qt_msgbox_label", "qt_msgboxex_icon_label"]:
try:
slicer.util.findChild(self, oName).hide()
except RuntimeError:
pass

def setupConnections(self):
self.spinbox.valueChanged.connect(self.onCaseNumberChanged)

Expand All @@ -56,7 +82,7 @@ def onCaseNumberChanged(self, caseNumber):
caseNumber = formatString % caseNumber
directory = self.PREFIX+caseNumber+self.SUFFIX
self.newCaseDirectory = os.path.join(self.destinationRoot, directory)
self.preview.setText("New case directory: " + self.newCaseDirectory)
self.preview.setText( self.newCaseDirectory)
self.okButton.enabled = not os.path.exists(self.newCaseDirectory)
self.notice.text = "" if not os.path.exists(self.newCaseDirectory) else "Note: Directory already exists."

4 changes: 4 additions & 0 deletions startSlicelet_Ubuntu.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
SLICER="/home/parallels/sources/cpp/Slicer/Build/Slicer-build/Slicer"

$SLICER --python-code "from SliceTracker import SliceTrackerSlicelet; slicelet=SliceTrackerSlicelet();" --no-splash --no-main-window

0 comments on commit c735eb1

Please sign in to comment.