def __init__(self):
		super(TransformationParameterWidget, self).__init__()

		self.cancelButton = QPushButton("Cancel")
		self.cancelButton.clicked.connect(self.cancelButtonClicked)

		self.applyButton = QPushButton("Apply")
		self.applyButton.clicked.connect(self.applyButtonClicked)

		self.mainLayout = QGridLayout()
		self.mainLayout.setSpacing(0)
		self.mainLayout.setContentsMargins(0, 0, 0, 0)

		self.widget = QWidget()
		self.widget.setLayout(self.mainLayout)

		self.showControls(False)

		self.transformationWidget = None
		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(self.widget, 0, 0, 1, 2)
		layout.addWidget(self.cancelButton, 1, 0)
		layout.addWidget(self.applyButton, 1, 1)
		self.setLayout(layout)
	def __init__(self, renderController, parent=None):
		super(RenderSlicerParamWidget, self).__init__(parent=parent)

		self.renderController = renderController
		self.renderController.slicesChanged.connect(self.setSlices)
		self.renderController.clippingBoxChanged.connect(self.showsClippingBox)

		self.slicesLabel = QLabel("Show slices for directions:")
		self.sliceLabelTexts = ["x:", "y:", "z:"]
		self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts]
		self.sliceCheckBoxes = [QCheckBox() for i in range(3)]
		for index in range(3):
			self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged)
			self.sliceLabels[index].setAlignment(Qt.AlignRight | Qt.AlignVCenter)
			self.sliceCheckBoxes[index].setEnabled(True)

		# Create a nice layout for the labels
		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setColumnStretch(0, 1)
		layout.setColumnStretch(1, 3)
		layout.addWidget(self.slicesLabel, 0, 0, 1, -1)
		for index in range(3):
			layout.addWidget(self.sliceLabels[index], index+1, 0)
			layout.addWidget(self.sliceCheckBoxes[index], index+1, 1)

		# Create option to show clipping box
		self.clippingCheckBox = QCheckBox()
		self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged)
		self.clippingLabel = QLabel("Clipping box:")
		self.clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

		layout.addWidget(self.clippingLabel, 5, 0)
		layout.addWidget(self.clippingCheckBox, 5, 1)
		self.setLayout(layout)
Example #3
0
	def __init__(self, renderController, parent=None):
		super(RenderParameterWidget, self).__init__(parent=parent)

		self.renderController = renderController
		self.renderController.visualizationChanged.connect(self.visualizationLoaded)

		self.paramWidget = None

		self.visTypeComboBox = QComboBox()
		for visualizationType in self.renderController.visualizationTypes:
			self.visTypeComboBox.addItem(visualizationType)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setSpacing(10)
		layout.setContentsMargins(10, 0, 10, 0)
		if len(self.renderController.visualizationTypes) > 1:
			layout.addWidget(QLabel("Visualization type:"), 0, 0)
			layout.addWidget(self.visTypeComboBox, 0, 1)
		self.setLayout(layout)

		self.scrollArea = QScrollArea()
		self.scrollArea.setFrameShape(QFrame.NoFrame)
		self.scrollArea.setAutoFillBackground(False)
		self.scrollArea.setAttribute(Qt.WA_TranslucentBackground)
		self.scrollArea.setWidgetResizable(True)

		self.visTypeComboBox.currentIndexChanged.connect(self.visTypeComboBoxChanged)
	def __init__(self):
		super(PointsWidget, self).__init__()

		self.landmarkWidgets = []
		self.activeIndex = 0

		self.scrollArea = QScrollArea(self)
		self.scrollArea.setFrameShape(QFrame.NoFrame)
		self.scrollArea.setAutoFillBackground(False)
		self.scrollArea.setAttribute(Qt.WA_TranslucentBackground)
		self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
		self.scrollArea.setWidgetResizable(True)

		landmarkLocationsLayout = QGridLayout()
		landmarkLocationsLayout.setSpacing(0)
		landmarkLocationsLayout.setContentsMargins(0, 0, 0, 0)
		landmarkLocationsLayout.setAlignment(Qt.AlignTop)

		self.landmarkLocationsWidget = QWidget()
		Style.styleWidgetForTab(self.landmarkLocationsWidget)
		self.landmarkLocationsWidget.setLayout(landmarkLocationsLayout)
		self.scrollArea.setWidget(self.landmarkLocationsWidget)

		layout = QGridLayout()
		layout.setContentsMargins(0, 0, 0, 0)
		layout.addWidget(self.scrollArea)
		self.setLayout(layout)
Example #5
0
    def getParameterWidget(self):
        """
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
        layout = QGridLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setAlignment(Qt.AlignTop)

        self.sliders = []
        for index in range(7):
            slider = QSlider(Qt.Horizontal)
            slider.setMinimum(0)
            slider.setMaximum(1000)
            slider.setValue(
                int(
                    math.pow(self.sectionsOpacity[index], 1.0 / 3.0) *
                    slider.maximum()))
            slider.valueChanged.connect(self.valueChanged)
            self.sliders.append(slider)
            label = QLabel(self.sectionNames[index])
            label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
            layout.addWidget(label, index, 0)
            layout.addWidget(slider, index, 1)

        try:
            from ColumnResizer import ColumnResizer
            columnResizer = ColumnResizer()
            columnResizer.addWidgetsFromLayout(layout, 0)
        except Exception, e:
            print e
	def __init__(self, parent):
		super(ElastixMainDialog, self).__init__(parent)
		self.transformation = None

		self.transformations = AppResources.elastixTemplates()
		self.radioButtons = []
		for transformation in self.transformations:
			self.radioButtons.append(QRadioButton(transformation.name))
		self.radioButtons.append(QRadioButton("Load custom parameter file..."))
		self.radioButtons[0].setChecked(True)

		self.nextButton = QPushButton("Next")
		self.nextButton.clicked.connect(self.next)
		self.cancelButton = QPushButton("Cancel")
		self.cancelButton.clicked.connect(self.cancel)

		groupLayout = QVBoxLayout()
		for radioButton in self.radioButtons:
			groupLayout.addWidget(radioButton)
		
		self.groupBox = QGroupBox("Choose parameter file")
		self.groupBox.setLayout(groupLayout)

		self.setModal(True)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(self.groupBox, 0, 0, 1, 2)
		layout.addWidget(self.cancelButton, 1, 0)
		layout.addWidget(self.nextButton, 1, 1)
		self.setLayout(layout)
Example #7
0
    def __init__(self, parent):
        super(ElastixMainDialog, self).__init__(parent)
        self.transformation = None

        self.transformations = AppResources.elastixTemplates()
        self.radioButtons = []
        for transformation in self.transformations:
            self.radioButtons.append(QRadioButton(transformation.name))
        self.radioButtons.append(QRadioButton("Load custom parameter file..."))
        self.radioButtons[0].setChecked(True)

        self.nextButton = QPushButton("Next")
        self.nextButton.clicked.connect(self.next)
        self.cancelButton = QPushButton("Cancel")
        self.cancelButton.clicked.connect(self.cancel)

        groupLayout = QVBoxLayout()
        for radioButton in self.radioButtons:
            groupLayout.addWidget(radioButton)

        self.groupBox = QGroupBox("Choose parameter file")
        self.groupBox.setLayout(groupLayout)

        self.setModal(True)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.addWidget(self.groupBox, 0, 0, 1, 2)
        layout.addWidget(self.cancelButton, 1, 0)
        layout.addWidget(self.nextButton, 1, 1)
        self.setLayout(layout)
	def __init__(self):
		super(TwoStepLandmarkWidget, self).__init__()

		self.textFrame = QTextEdit("<p>Place your mouse over the desired "
			"landmark point. Press 'Space' to shoot a ray through the volume. "
			"Move the volume around and move the mouse to move the locator. "
			"Press 'Space' again to define the final place of the landmark.</p>"
			"<p>You can also use the ray profile to define the landmark's location.</p>")
		self.textFrame.setReadOnly(True)
		self.textFrame.setFrameShape(QFrame.NoFrame)
		self.textFrame.setAutoFillBackground(False)
		self.textFrame.setAttribute(Qt.WA_TranslucentBackground)
		self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
		self.textFrame.setStyleSheet("background: #aaa")

		self.histogramWidget = TrackingHistogramWidget()
		self.histogramWidget.setMinimumHeight(100)
		self.histogramWidget.setVisible(False)

		self.button = QPushButton("Pick current landmark position")
		self.button.clicked.connect(self.applyButtonClicked)
		self.button.setVisible(False)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setSpacing(0)
		layout.setContentsMargins(0, 0, 0, 0)
		layout.addWidget(self.textFrame)
		layout.addWidget(self.histogramWidget)
		layout.addWidget(self.button)
		self.setLayout(layout)
Example #9
0
    def __init__(self):
        super(TwoStepLandmarkWidget, self).__init__()

        self.textFrame = QTextEdit(
            "<p>Place your mouse over the desired "
            "landmark point. Press 'Space' to shoot a ray through the volume. "
            "Move the volume around and move the mouse to move the locator. "
            "Press 'Space' again to define the final place of the landmark.</p>"
            "<p>You can also use the ray profile to define the landmark's location.</p>"
        )
        self.textFrame.setReadOnly(True)
        self.textFrame.setFrameShape(QFrame.NoFrame)
        self.textFrame.setAutoFillBackground(False)
        self.textFrame.setAttribute(Qt.WA_TranslucentBackground)
        self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.textFrame.setStyleSheet("background: #aaa")

        self.histogramWidget = TrackingHistogramWidget()
        self.histogramWidget.setMinimumHeight(100)
        self.histogramWidget.setVisible(False)

        self.button = QPushButton("Pick current landmark position")
        self.button.clicked.connect(self.applyButtonClicked)
        self.button.setVisible(False)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setSpacing(0)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.textFrame)
        layout.addWidget(self.histogramWidget)
        layout.addWidget(self.button)
        self.setLayout(layout)
	def getParameterWidget(self):
		"""
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
		layout = QGridLayout()
		layout.setContentsMargins(0, 0, 0, 0)
		layout.setAlignment(Qt.AlignTop)

		self.sliders = []
		for index in range(7):
			slider = QSlider(Qt.Horizontal)
			slider.setMinimum(0)
			slider.setMaximum(1000)
			slider.setValue(int(math.pow(self.sectionsOpacity[index], 1.0/3.0) * slider.maximum()))
			slider.valueChanged.connect(self.valueChanged)
			self.sliders.append(slider)
			label = QLabel(self.sectionNames[index])
			label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
			layout.addWidget(label, index, 0)
			layout.addWidget(slider, index, 1)

		try:
			from ColumnResizer import ColumnResizer
			columnResizer = ColumnResizer()
			columnResizer.addWidgetsFromLayout(layout, 0)
		except Exception, e:
			print e
    def getParameterWidget(self):
        matrixLayout = QGridLayout()
        matrixLayout.setAlignment(Qt.AlignTop)
        matrixLayout.setContentsMargins(0, 0, 0, 0)
        matrixLayout.setSpacing(5)
        matrixLayout.addWidget(QLabel("Transformation matrix:"), 0, 0, 1, 4)
        self.m1Edits = [QLineEdit() for _ in range(4)]
        self.m2Edits = [QLineEdit() for _ in range(4)]
        self.m3Edits = [QLineEdit() for _ in range(4)]
        self.m4Edits = [QLineEdit() for _ in range(4)]
        self.initLineEdits(self.m1Edits, matrixLayout, 1, 0)
        self.initLineEdits(self.m2Edits, matrixLayout, 2, 0)
        self.initLineEdits(self.m3Edits, matrixLayout, 3, 0)
        self.initLineEdits(self.m4Edits, matrixLayout, 4, 0)
        expandingWidget = QWidget()
        expandingWidget.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
        matrixLayout.addWidget(expandingWidget, 5, 0, 1, 4)

        matrixWidget = QWidget()
        matrixWidget.setLayout(matrixLayout)
        self.transformUpdated(
            self.renderWidget.transformations.completeTransform())

        return matrixWidget
    def __init__(self):
        super(LandmarkLocationWidget, self).__init__()
        self._active = False
        self._font = QFont()
        self._font.setPointSize(10)

        self.indexLabel = QLabel()
        self.indexLabel.setMaximumWidth(8)
        self.indexLabel.setMinimumWidth(8)

        self.doneButton = QPushButton("Done")
        self.doneButton.setMaximumWidth(50)
        self.doneButton.setFont(self._font)
        self.doneButton.clicked.connect(self.doneButtonClicked)

        self.fixedButton = QPushButton("")
        self.fixedButton.setFont(self._font)
        self.movingButton = QPushButton("")
        self.movingButton.setFont(self._font)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setHorizontalSpacing(4)
        layout.setVerticalSpacing(0)
        layout.addWidget(self.indexLabel, 0, 0)
        layout.addWidget(self.fixedButton, 0, 1)
        layout.addWidget(self.movingButton, 0, 2)
        layout.addWidget(self.doneButton, 0, 3)
        self.setLayout(layout)
        self._updateState()
	def __init__(self, renderController, parent=None):
		super(RenderSlicerParamWidget, self).__init__(parent=parent)

		self.renderController = renderController
		self.renderController.slicesChanged.connect(self.setSlices)
		self.renderController.clippingBoxChanged.connect(self.showsClippingBox)
		self.renderController.clippingPlanesChanged.connect(self.showsClippingPlanes)

		self.sliceLabelTexts = ["Axial:", "Coronal:", "Sagittal:"]
		self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts]
		self.sliceCheckBoxes = [QCheckBox() for i in range(3)]
		for index in range(3):
			self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged)
			self.sliceLabels[index].setAlignment(Qt.AlignRight | Qt.AlignVCenter)
			self.sliceCheckBoxes[index].setEnabled(True)

		slicesLayout = QGridLayout()
		slicesLayout.setAlignment(Qt.AlignTop)
		for index in range(3):
			slicesLayout.addWidget(self.sliceLabels[index], index+1, 0)
			slicesLayout.addWidget(self.sliceCheckBoxes[index], index+1, 1)

		self.slicesGroupBox = QGroupBox()
		self.slicesGroupBox.setTitle("Visible slices")
		self.slicesGroupBox.setLayout(slicesLayout)

		# Create option to show clipping box
		self.clippingCheckBox = QCheckBox()
		self.clippingCheckBox.setChecked(self.renderController.clippingBox)
		self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged)
		self.clippingPlanesCheckBox = QCheckBox()
		self.clippingPlanesCheckBox.setChecked(self.renderController.clippingPlanes)
		self.clippingPlanesCheckBox.clicked.connect(self.clippingPlanesCheckBoxChanged)
		self.resetButton = QPushButton("Reset")
		self.resetButton.clicked.connect(self.resetClippingBox)

		clippingLabel = QLabel("Clipping box:")
		clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
		clippingPlanesLabel = QLabel("Clipping planes:")
		clippingPlanesLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

		clipLayout = QGridLayout()
		clipLayout.addWidget(clippingLabel, 0, 0)
		clipLayout.addWidget(self.clippingCheckBox, 0, 1)
		clipLayout.addWidget(clippingPlanesLabel, 1, 0)
		clipLayout.addWidget(self.clippingPlanesCheckBox, 1, 1)
		clipLayout.addWidget(self.resetButton, 2, 0)

		self.clippingGroupBox = QGroupBox()
		self.clippingGroupBox.setTitle("Clipping box")
		self.clippingGroupBox.setLayout(clipLayout)

		# Create a nice layout for the labels
		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(self.slicesGroupBox, 0, 0)
		layout.addWidget(self.clippingGroupBox, 0, 1)
		self.setLayout(layout)
	def getParameterWidget(self):
		"""
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)

		widget = QWidget()
		widget.setLayout(layout)
		return widget
    def getParameterWidget(self):
        """
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)

        widget = QWidget()
        widget.setLayout(layout)
        return widget
Example #16
0
    def createDragOverlay(self, tags, texts, images=None):
        """Creates a DragOverlay for this ModuleFrame with the given
           text and optional images. When DataIndexMimes (DataTree indices)
           are dropped on the text/images of this overlay, they are
           associated with the tag of the same index of the text/image.

           This is a user interface for when a ModuleFrame wants to
           accept drops for multiple purposes.
        """
        self.dragOverlay = True

        self.overlay = OverlayFrame(self)

        layout = QGridLayout(self.overlay)
        layout.setAlignment(Qt.AlignCenter)
        layout.setColumnStretch(0, 5)
        if images is not None:
            for i, tag, text, image in zip(range(len(tags)), tags, texts,
                                           images):
                layout.addWidget(
                    DropPanel(tag, text, self.overlay, self.overlayDroppedData,
                              image), i, 0, 1, 1)
                layout.setRowStretch(i, 5)
        else:
            for i, tag, text in zip(range(len(tags)), tags, texts):
                layout.addWidget(
                    DropPanel(tag, text, self.overlay,
                              self.overlayDroppedData), i, 0, 1, 1)
                layout.setRowStretch(i, 5)

        # Add a Close button to deal with lack of cancel signal
        # for drag/drop
        class CloseLabel(QLabel):

            closeSignal = Signal()

            def __init__(self):
                super(CloseLabel, self).__init__("Close")

                self.setStyleSheet("QLabel { color : white; }")

            def mousePressEvent(self, e):
                self.closeSignal.emit()

        closeButton = CloseLabel()
        closeButton.closeSignal.connect(self.killRogueOverlays)
        layout.addWidget(closeButton, len(tags), 0, 1, 1)
        layout.setRowStretch(len(tags), 0)

        self.overlay.setLayout(layout)
Example #17
0
	def getParameterWidget(self):
		self.hueSlider = QSlider(Qt.Horizontal)
		self.hueSlider.setMaximum(360)
		self.hueSlider.setValue(self.fixedHue)
		self.hueSlider.valueChanged.connect(self.valueChanged)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(QLabel("Base hue"), 0, 0)
		layout.addWidget(self.hueSlider, 0, 1)

		widget = QWidget()
		widget.setLayout(layout)
		return widget
	def __init__(self):
		super(LandmarkWidget, self).__init__()

		self.histogramWidget = TrackingHistogramWidget()
		self.button = QPushButton("Pick current landmark position")
		self.button.clicked.connect(self.applyButtonClicked)
		self.button.setVisible(False)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(QLabel("Ray profile:"))
		layout.addWidget(self.histogramWidget)
		layout.addWidget(self.button)

		self.setLayout(layout)
Example #19
0
    def create_grid_layout(self, rows=0, columns=1, v_margin=0, h_margin=0):
        """ Returns a new GUI toolkit neutral grid layout manager which
            supports a (rows,columns) sized grid, with each grid element
            having (v_margin,h_margin) pixels of space around it.

            If rows is 0, the number of rows is not predefined, but will be
            determined by the actual number of controls added to the layout.
        """
        layout = QGridLayout()
        layout.setHorizontalSpacing(h_margin)
        layout.setVerticalSpacing(v_margin)
        layout.setAlignment(Qt.AlignTop)
        ### PYSIDE: layout.setMargin( 4 )

        return layout_adapter(layout, columns=columns)
    def getParameterWidget(self):
        titleLabel = QLabel(self.transformation.name)

        paramWidget = ParameterWidget()
        paramWidget.parameterModel.setTransformation(self.transformation)

        layout = QGridLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        layout.setAlignment(Qt.AlignTop)
        layout.addWidget(titleLabel)
        layout.addWidget(paramWidget)

        widget = QWidget()
        widget.setLayout(layout)
        return widget
Example #21
0
	def __init__(self, parent=None):
		super(EditPreferencesDlg, self).__init__(parent)
		self.setWindowTitle("Preferences")
		# define widgets
		pref_list = QListWidget()
		pref_list.addItem("General")
		pref_list.addItem("Display")
		pref_list.setMaximumWidth(150)
		pref_list.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)
		
		button_box = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
		
		general_page = QWidget()
		general_layout = QGridLayout()
		general_layout.setAlignment(Qt.AlignTop)
		general_layout.addWidget(QLabel("<b>General</b>"), 0, 0)
		general_page.setLayout(general_layout)
		
		display_page = QWidget()
		display_layout = QGridLayout()
		display_layout.setAlignment(Qt.AlignTop)
		display_layout.addWidget(QLabel("<b>Display Options</b>"), 0, 0)
		self.multitabs_checkbox = QCheckBox("Limit the display of tabs to one relief device (and the device's scenarios) at a time")
		if parent.limit_tabs is True:
			self.multitabs_checkbox.setChecked(True)
		display_layout.addWidget(self.multitabs_checkbox, 1, 0)
		display_page.setLayout(display_layout)

		stacked_widget = QStackedWidget()
		for page in general_page, display_page:
			stacked_widget.addWidget(page)
		
		main_layout = QVBoxLayout()
		widgets_layout = QHBoxLayout()
		widgets_layout.addWidget(pref_list)
		widgets_layout.addWidget(stacked_widget)
		buttons_layout = QHBoxLayout()
		buttons_layout.addStretch()
		buttons_layout.addWidget(button_box)
		main_layout.addLayout(widgets_layout)
		main_layout.addLayout(buttons_layout)
		self.setLayout(main_layout)
		
		pref_list.currentRowChanged.connect(stacked_widget.setCurrentIndex)
		
		button_box.accepted.connect(self.accept)
		button_box.rejected.connect(self.reject)
Example #22
0
    def createDragOverlay(self, tags, texts, images=None):
        """Creates a DragOverlay for this ModuleFrame with the given
           text and optional images. When DataIndexMimes (DataTree indices)
           are dropped on the text/images of this overlay, they are
           associated with the tag of the same index of the text/image.

           This is a user interface for when a ModuleFrame wants to
           accept drops for multiple purposes.
        """
        self.dragOverlay = True

        self.overlay = OverlayFrame(self)

        layout = QGridLayout(self.overlay)
        layout.setAlignment(Qt.AlignCenter)
        layout.setColumnStretch(0, 5)
        if images is not None:
            for i, tag, text, image in zip(range(len(tags)), tags, texts, images):
                layout.addWidget(DropPanel(tag, text, self.overlay, self.overlayDroppedData, image), i, 0, 1, 1)
                layout.setRowStretch(i, 5)
        else:
            for i, tag, text in zip(range(len(tags)), tags, texts):
                layout.addWidget(DropPanel(tag, text, self.overlay, self.overlayDroppedData), i, 0, 1, 1)
                layout.setRowStretch(i, 5)

        # Add a Close button to deal with lack of cancel signal
        # for drag/drop
        class CloseLabel(QLabel):

            closeSignal = Signal()

            def __init__(self):
                super(CloseLabel, self).__init__("Close")

                self.setStyleSheet("QLabel { color : white; }")

            def mousePressEvent(self, e):
                self.closeSignal.emit()

        closeButton = CloseLabel()
        closeButton.closeSignal.connect(self.killRogueOverlays)
        layout.addWidget(closeButton, len(tags), 0, 1, 1)
        layout.setRowStretch(len(tags), 0)

        self.overlay.setLayout(layout)
Example #23
0
	def __init__(self, parent=None):
		super(AreaPage, self).__init__(parent)
		
		name_label = QLabel("Name:")
		self.name_lineedit = QLineEdit()
		self.name_lineedit.setReadOnly(True)
		devicenum_label = QLabel("Number of devices in this relief device area:")
		self.devicenum_lineedit = QLineEdit()
		self.devicenum_lineedit.setReadOnly(True)
		
		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(name_label, 0, 0)
		layout.addWidget(self.name_lineedit, 0, 1)
		layout.addWidget(devicenum_label, 1, 0)
		layout.addWidget(self.devicenum_lineedit, 1, 1)
		self.setLayout(layout)

		self.mapper = QDataWidgetMapper()
    def getParameterWidget(self):
        self.labelFixedOpacity = QLabel("Fixed:")
        self.labelFixedOpacity.setAlignment(Qt.AlignRight)
        self.labelMovingOpacity = QLabel("Moving:")
        self.labelMovingOpacity.setAlignment(Qt.AlignRight)

        self.sliderFixedOpacity = QSlider(Qt.Horizontal)
        self.sliderFixedOpacity.setValue(
            pow(self.fixedOpacity, 1.0 / 3.0) * 100.0)

        self.sliderMovingOpacity = QSlider(Qt.Horizontal)
        self.sliderMovingOpacity.setValue(
            pow(self.movingOpacity, 1.0 / 3.0) * 100.0)

        self.blendTypeComboBox = QComboBox()
        self.blendTypeComboBox.addItem("Default additive blend")
        self.blendTypeComboBox.addItem("Difference blend")
        self.blendTypeComboBox.currentIndexChanged.connect(self.valueChanged)

        # Be sure to connect after the values are set...
        self.sliderFixedOpacity.valueChanged.connect(self.valueChanged)
        self.sliderMovingOpacity.valueChanged.connect(self.valueChanged)

        groupLayout = QGridLayout()
        groupLayout.setAlignment(Qt.AlignTop)
        groupLayout.addWidget(self.labelFixedOpacity, 0, 0)
        groupLayout.addWidget(self.sliderFixedOpacity, 0, 1)
        groupLayout.addWidget(self.labelMovingOpacity, 1, 0)
        groupLayout.addWidget(self.sliderMovingOpacity, 1, 1)

        groupBox = QGroupBox()
        groupBox.setTitle("Opacity:")
        groupBox.setLayout(groupLayout)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.addWidget(groupBox)

        widget = QWidget()
        widget.setLayout(layout)
        return widget
	def __init__(self):
		super(SurfaceLandmarkWidget, self).__init__()
		
		self.textFrame = QTextEdit("<p>Hold your mouse over the volume "
			"to move the locator. To create a landmark, press 'Space'.</p>"
			"<p>When you want to proceed to the following landmark, "
			"click the 'Done' button behind the landmark pair in the "
			"center of the window.</p>")
		self.textFrame.setReadOnly(True)
		self.textFrame.setFrameShape(QFrame.NoFrame)
		self.textFrame.setAutoFillBackground(False)
		self.textFrame.setAttribute(Qt.WA_TranslucentBackground)
		self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
		self.textFrame.setStyleSheet("background: #aaa")

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setSpacing(0)
		layout.setContentsMargins(0, 0, 0, 0)
		layout.addWidget(self.textFrame)
		self.setLayout(layout)
Example #26
0
    def __init__(self, parent):
        super(PickerTypeDialog, self).__init__(parent)

        self.pickerType = None

        self.pickerTypes = [(SurfaceType, "Surface picker"),
                            (TwoStepType, "Two step picker")]

        self.radioButtons = []
        for picker in self.pickerTypes:
            self.radioButtons.append(QRadioButton(picker[1]))
        # self.radioButtons[0].setChecked(True)
        self.buttonGroup = QButtonGroup()
        ind = 0
        for button in self.radioButtons:
            self.buttonGroup.addButton(button)
            self.buttonGroup.setId(button, ind)
            ind += 1

        self.nextButton = QPushButton("Choose")
        self.nextButton.clicked.connect(self.choose)
        self.cancelButton = QPushButton("Cancel")
        self.cancelButton.clicked.connect(self.cancel)

        groupLayout = QVBoxLayout()
        for radioButton in self.radioButtons:
            groupLayout.addWidget(radioButton)

        self.groupBox = QGroupBox("Choose picker type:")
        self.groupBox.setLayout(groupLayout)

        self.setModal(True)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.addWidget(self.groupBox, 0, 0, 1, 2)
        layout.addWidget(self.cancelButton, 1, 0)
        layout.addWidget(self.nextButton, 1, 1)
        self.setLayout(layout)
Example #27
0
    def __init__(self):
        super(SurfaceLandmarkWidget, self).__init__()

        self.textFrame = QTextEdit(
            "<p>Hold your mouse over the volume "
            "to move the locator. To create a landmark, press 'Space'.</p>"
            "<p>When you want to proceed to the following landmark, "
            "click the 'Done' button behind the landmark pair in the "
            "center of the window.</p>")
        self.textFrame.setReadOnly(True)
        self.textFrame.setFrameShape(QFrame.NoFrame)
        self.textFrame.setAutoFillBackground(False)
        self.textFrame.setAttribute(Qt.WA_TranslucentBackground)
        self.textFrame.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.textFrame.setStyleSheet("background: #aaa")

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setSpacing(0)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.textFrame)
        self.setLayout(layout)
	def getParameterWidget(self):
		self.pointsWidget = PointsWidget()

		self.landmarkComboBox = QComboBox()
		self.landmarkComboBox.addItem("Rigid body")
		self.landmarkComboBox.addItem("Similarity")
		self.landmarkComboBox.addItem("Affine")

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setContentsMargins(0, 0, 0, 0)
		layout.addWidget(QLabel("Transform type:"), 0, 0)
		layout.addWidget(self.landmarkComboBox, 0, 1)
		layout.addWidget(self.pointsWidget, 1, 0, 1, 2)
		
		self.updatedLandmarks.connect(self.pointsWidget.setPoints)
		self.landmarkComboBox.currentIndexChanged.connect(self.landmarkTransformTypeChanged)
		self.pointsWidget.activeLandmarkChanged.connect(self.setActiveLandmark)
		self.pointsWidget.landmarkDeleted.connect(self.deleteLandmark)

		widget = QWidget()
		widget.setLayout(layout)
		return widget
	def __init__(self):
		super(LandmarkWidget, self).__init__()
		
		self.typeLabel = QLabel("Picker type:")
		self.typeCombo = QComboBox()
		self.typeCombo.addItem("Surface")
		self.typeCombo.addItem("Two step")
		self.typeCombo.currentIndexChanged.connect(self.comboboxChanged)

		self.surfaceWidget = SurfaceLandmarkWidget()
		self.twoStepWidget = TwoStepLandmarkWidget()
		self.surfaceWidget.setHidden(True)
		self.twoStepWidget.setHidden(True)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.addWidget(self.typeLabel, 0, 0)
		layout.addWidget(self.typeCombo, 0, 1)
		layout.addWidget(self.surfaceWidget, 1, 0, 1, 2)
		layout.addWidget(self.twoStepWidget, 2, 0, 1, 2)
		self.setLayout(layout)

		self.update()
	def getParameterWidget(self):
		matrixLayout = QGridLayout()
		matrixLayout.setAlignment(Qt.AlignTop)
		matrixLayout.setContentsMargins(0, 0, 0, 0)
		matrixLayout.setSpacing(5)
		matrixLayout.addWidget(QLabel("Transformation matrix:"), 0, 0, 1, 4)
		self.m1Edits = [QLineEdit() for _ in range(4)]
		self.m2Edits = [QLineEdit() for _ in range(4)]
		self.m3Edits = [QLineEdit() for _ in range(4)]
		self.m4Edits = [QLineEdit() for _ in range(4)]
		self.initLineEdits(self.m1Edits, matrixLayout, 1, 0)
		self.initLineEdits(self.m2Edits, matrixLayout, 2, 0)
		self.initLineEdits(self.m3Edits, matrixLayout, 3, 0)
		self.initLineEdits(self.m4Edits, matrixLayout, 4, 0)
		expandingWidget = QWidget()
		expandingWidget.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
		matrixLayout.addWidget(expandingWidget, 5, 0, 1, 4)
		
		matrixWidget = QWidget()
		matrixWidget.setLayout(matrixLayout)
		self.transformUpdated(self.renderWidget.transformations.completeTransform())

		return matrixWidget
Example #31
0
    def __init__(self):
        super(LandmarkWidget, self).__init__()

        self.typeLabel = QLabel("Picker type:")
        self.typeCombo = QComboBox()
        self.typeCombo.addItem("Surface")
        self.typeCombo.addItem("Two step")
        self.typeCombo.currentIndexChanged.connect(self.comboboxChanged)

        self.surfaceWidget = SurfaceLandmarkWidget()
        self.twoStepWidget = TwoStepLandmarkWidget()
        self.surfaceWidget.setHidden(True)
        self.twoStepWidget.setHidden(True)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.addWidget(self.typeLabel, 0, 0)
        layout.addWidget(self.typeCombo, 0, 1)
        layout.addWidget(self.surfaceWidget, 1, 0, 1, 2)
        layout.addWidget(self.twoStepWidget, 2, 0, 1, 2)
        self.setLayout(layout)

        self.update()
    def getParameterWidget(self):
        self.pointsWidget = PointsWidget()

        self.landmarkComboBox = QComboBox()
        self.landmarkComboBox.addItem("Rigid body")
        self.landmarkComboBox.addItem("Similarity")
        self.landmarkComboBox.addItem("Affine")

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(QLabel("Transform type:"), 0, 0)
        layout.addWidget(self.landmarkComboBox, 0, 1)
        layout.addWidget(self.pointsWidget, 1, 0, 1, 2)

        self.updatedLandmarks.connect(self.pointsWidget.setPoints)
        self.landmarkComboBox.currentIndexChanged.connect(
            self.landmarkTransformTypeChanged)
        self.pointsWidget.activeLandmarkChanged.connect(self.setActiveLandmark)
        self.pointsWidget.landmarkDeleted.connect(self.deleteLandmark)

        widget = QWidget()
        widget.setLayout(layout)
        return widget
Example #33
0
    def __init__(self, renderController, parent=None):
        super(RenderSlicerParamWidget, self).__init__(parent=parent)

        self.renderController = renderController
        self.renderController.slicesChanged.connect(self.setSlices)
        self.renderController.clippingBoxChanged.connect(self.showsClippingBox)

        self.slicesLabel = QLabel("Show slices for directions:")
        self.sliceLabelTexts = ["x:", "y:", "z:"]
        self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts]
        self.sliceCheckBoxes = [QCheckBox() for i in range(3)]
        for index in range(3):
            self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged)
            self.sliceLabels[index].setAlignment(Qt.AlignRight
                                                 | Qt.AlignVCenter)
            self.sliceCheckBoxes[index].setEnabled(True)

        # Create a nice layout for the labels
        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setColumnStretch(0, 1)
        layout.setColumnStretch(1, 3)
        layout.addWidget(self.slicesLabel, 0, 0, 1, -1)
        for index in range(3):
            layout.addWidget(self.sliceLabels[index], index + 1, 0)
            layout.addWidget(self.sliceCheckBoxes[index], index + 1, 1)

        # Create option to show clipping box
        self.clippingCheckBox = QCheckBox()
        self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged)
        self.clippingLabel = QLabel("Clipping box:")
        self.clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        layout.addWidget(self.clippingLabel, 5, 0)
        layout.addWidget(self.clippingCheckBox, 5, 1)
        self.setLayout(layout)
    def __init__(self, renderController, parent=None):
        super(RenderSlicerParamWidget, self).__init__(parent=parent)

        self.renderController = renderController
        self.renderController.slicesChanged.connect(self.setSlices)
        self.renderController.clippingBoxChanged.connect(self.showsClippingBox)
        self.renderController.clippingPlanesChanged.connect(
            self.showsClippingPlanes)

        self.sliceLabelTexts = ["Axial:", "Coronal:", "Sagittal:"]
        self.sliceLabels = [QLabel(text) for text in self.sliceLabelTexts]
        self.sliceCheckBoxes = [QCheckBox() for i in range(3)]
        for index in range(3):
            self.sliceCheckBoxes[index].clicked.connect(self.checkBoxChanged)
            self.sliceLabels[index].setAlignment(Qt.AlignRight
                                                 | Qt.AlignVCenter)
            self.sliceCheckBoxes[index].setEnabled(True)

        slicesLayout = QGridLayout()
        slicesLayout.setAlignment(Qt.AlignTop)
        for index in range(3):
            slicesLayout.addWidget(self.sliceLabels[index], index + 1, 0)
            slicesLayout.addWidget(self.sliceCheckBoxes[index], index + 1, 1)

        self.slicesGroupBox = QGroupBox()
        self.slicesGroupBox.setTitle("Visible slices")
        self.slicesGroupBox.setLayout(slicesLayout)

        # Create option to show clipping box
        self.clippingCheckBox = QCheckBox()
        self.clippingCheckBox.setChecked(self.renderController.clippingBox)
        self.clippingCheckBox.clicked.connect(self.clippingCheckBoxChanged)
        self.clippingPlanesCheckBox = QCheckBox()
        self.clippingPlanesCheckBox.setChecked(
            self.renderController.clippingPlanes)
        self.clippingPlanesCheckBox.clicked.connect(
            self.clippingPlanesCheckBoxChanged)
        self.resetButton = QPushButton("Reset")
        self.resetButton.clicked.connect(self.resetClippingBox)

        clippingLabel = QLabel("Clipping box:")
        clippingLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        clippingPlanesLabel = QLabel("Clipping planes:")
        clippingPlanesLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        clipLayout = QGridLayout()
        clipLayout.addWidget(clippingLabel, 0, 0)
        clipLayout.addWidget(self.clippingCheckBox, 0, 1)
        clipLayout.addWidget(clippingPlanesLabel, 1, 0)
        clipLayout.addWidget(self.clippingPlanesCheckBox, 1, 1)
        clipLayout.addWidget(self.resetButton, 2, 0)

        self.clippingGroupBox = QGroupBox()
        self.clippingGroupBox.setTitle("Clipping box")
        self.clippingGroupBox.setLayout(clipLayout)

        # Create a nice layout for the labels
        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.addWidget(self.slicesGroupBox, 0, 0)
        layout.addWidget(self.clippingGroupBox, 0, 1)
        self.setLayout(layout)
Example #35
0
    def getParameterWidget(self):
        """
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
        self.lowerBoundSlider = SliderFloatWidget()
        self.lowerBoundSlider.setName("Lower:")
        self.lowerBoundSlider.setRange([self.minimum, self.maximum])
        self.lowerBoundSlider.setValue(self.lowerBound)
        self.lowerBoundSlider.label.setAlignment(Qt.AlignRight
                                                 | Qt.AlignVCenter)
        self.lowerBoundSlider.valueChanged.connect(self.valueChanged)

        self.upperBoundSlider = SliderFloatWidget()
        self.upperBoundSlider.setName("Upper:")
        self.upperBoundSlider.setRange([self.minimum, self.maximum])
        self.upperBoundSlider.setValue(self.upperBound)
        self.upperBoundSlider.label.setAlignment(Qt.AlignRight
                                                 | Qt.AlignVCenter)
        self.upperBoundSlider.valueChanged.connect(self.valueChanged)

        layoutGroup = QGridLayout()
        layoutGroup.setAlignment(Qt.AlignTop)
        layoutGroup.setContentsMargins(5, 0, 0, 0)
        layoutGroup.setSpacing(0)
        layoutGroup.addWidget(self.lowerBoundSlider)
        layoutGroup.addWidget(self.upperBoundSlider)

        groupbox = QGroupBox("Thresholds:")
        groupbox.setLayout(layoutGroup)

        self.opacitySlider = SliderFloatWidget()
        self.opacitySlider.setName("Opacity:")
        self.opacitySlider.setRange([0.0, 1.0])
        self.opacitySlider.setValue(self.opacity)
        self.opacitySlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.opacitySlider.valueChanged.connect(self.valueChanged)

        self.colorChooser = ColorChoiceWidget()
        self.colorChooser.setName("Color:")
        self.colorChooser.setColors(self.colors)
        self.colorChooser.setColor(self.color)
        self.colorChooser.setMinimumHeight(
            self.upperBoundSlider.sizeHint().height())
        self.colorChooser.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.colorChooser.valueChanged.connect(self.valueChanged)

        otherLayoutGroup = QGridLayout()
        otherLayoutGroup.setAlignment(Qt.AlignTop)
        otherLayoutGroup.setContentsMargins(5, 0, 0, 0)
        otherLayoutGroup.setSpacing(0)
        otherLayoutGroup.addWidget(self.opacitySlider)
        # otherLayoutGroup.addWidget(self.colorChooser)

        # otherBox = QGroupBox("Color and opacity:")
        otherBox = QGroupBox()
        otherBox.setLayout(otherLayoutGroup)

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setHorizontalSpacing(0)
        layout.addWidget(groupbox)
        layout.addWidget(otherBox)

        widget = QWidget()
        widget.setLayout(layout)

        try:
            from ColumnResizer import ColumnResizer
            self.columnResizer = ColumnResizer()
            self.columnResizer.addWidgetsFromLayout(
                self.lowerBoundSlider.layout(), 0)
            self.columnResizer.addWidgetsFromLayout(
                self.upperBoundSlider.layout(), 0)
            self.columnResizer.addWidgetsFromLayout(self.colorChooser.layout(),
                                                    0)
            self.columnResizer.addWidgetsFromLayout(
                self.opacitySlider.layout(), 0)

            self.otherColRes = ColumnResizer()
            self.otherColRes.addWidgetsFromLayout(
                self.lowerBoundSlider.layout(), 2)
            self.otherColRes.addWidgetsFromLayout(
                self.upperBoundSlider.layout(), 2)
            self.otherColRes.addWidgetsFromLayout(self.opacitySlider.layout(),
                                                  2)
        except Exception, e:
            print e
	def getParameterWidget(self):
		"""
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
		self.brightnessSlider = QSlider(Qt.Horizontal)
		self.brightnessSlider.setMinimum(0)
		self.brightnessSlider.setMaximum(500)
		self.brightnessSlider.setValue(int(self.brightness))
		self.brightnessSlider.valueChanged.connect(self.valueChanged)
		self.brightnessLabel = QLabel(str(self.brightness/100.0))

		self.windowSlider = QSlider(Qt.Horizontal)
		self.windowSlider.setMinimum(0)
		self.windowSlider.setMaximum(int(abs(self.maximum - self.minimum)))
		self.windowSlider.setValue(int(self.window))
		self.windowSlider.valueChanged.connect(self.valueChanged)
		self.windowLabel = QLabel(str(self.window))

		self.levelSlider = QSlider(Qt.Horizontal)
		self.levelSlider.setMinimum(int(self.minimum))
		self.levelSlider.setMaximum(int(self.maximum))
		self.levelSlider.setValue(int(self.level))
		self.levelSlider.valueChanged.connect(self.valueChanged)
		self.levelLabel = QLabel(str(self.level))

		self.lowerBoundSlider = QSlider(Qt.Horizontal)
		self.lowerBoundSlider.setMinimum(int(self.minimum))
		self.lowerBoundSlider.setMaximum(int(self.maximum))
		self.lowerBoundSlider.setValue(int(self.lowerBound))
		self.lowerBoundSlider.valueChanged.connect(self.valueChanged)
		self.lowerBoundLabel = QLabel(str(self.lowerBound))

		self.upperBoundSlider = QSlider(Qt.Horizontal)
		self.upperBoundSlider.setMinimum(int(self.minimum))
		self.upperBoundSlider.setMaximum(int(self.maximum))
		self.upperBoundSlider.setValue(int(self.upperBound))
		self.upperBoundSlider.valueChanged.connect(self.valueChanged)
		self.upperBoundLabel = QLabel(str(self.upperBound))

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setContentsMargins(0, 0, 0, 0)
		layout.addWidget(QLabel("Window"), 0, 0)
		layout.addWidget(self.windowSlider, 0, 1)
		layout.addWidget(self.windowLabel, 0, 2)
		layout.addWidget(QLabel("Level"), 1, 0)
		layout.addWidget(self.levelSlider, 1, 1)
		layout.addWidget(self.levelLabel, 1, 2)
		layout.addWidget(QLabel("Brightness"), 2, 0)
		layout.addWidget(self.brightnessSlider, 2, 1)
		layout.addWidget(self.brightnessLabel, 2, 2)
		layout.addWidget(QLabel("Lower threshold"), 3, 0)
		layout.addWidget(self.lowerBoundSlider, 3, 1)
		layout.addWidget(self.lowerBoundLabel, 3, 2)
		layout.addWidget(QLabel("Upper threshold"), 4, 0)
		layout.addWidget(self.upperBoundSlider, 4, 1)
		layout.addWidget(self.upperBoundLabel, 4, 2)

		widget = QWidget()
		widget.setLayout(layout)
		return widget
Example #37
0
    def getParameterWidget(self):
        """
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
        self.brightnessSlider = QSlider(Qt.Horizontal)
        self.brightnessSlider.setMinimum(0)
        self.brightnessSlider.setMaximum(500)
        self.brightnessSlider.setValue(int(self.brightness))
        self.brightnessSlider.valueChanged.connect(self.valueChanged)
        self.brightnessLabel = QLabel(str(self.brightness / 100.0))

        self.windowSlider = QSlider(Qt.Horizontal)
        self.windowSlider.setMinimum(0)
        self.windowSlider.setMaximum(int(abs(self.maximum - self.minimum)))
        self.windowSlider.setValue(int(self.window))
        self.windowSlider.valueChanged.connect(self.valueChanged)
        self.windowLabel = QLabel(str(self.window))

        self.levelSlider = QSlider(Qt.Horizontal)
        self.levelSlider.setMinimum(int(self.minimum))
        self.levelSlider.setMaximum(int(self.maximum))
        self.levelSlider.setValue(int(self.level))
        self.levelSlider.valueChanged.connect(self.valueChanged)
        self.levelLabel = QLabel(str(self.level))

        self.lowerBoundSlider = QSlider(Qt.Horizontal)
        self.lowerBoundSlider.setMinimum(int(self.minimum))
        self.lowerBoundSlider.setMaximum(int(self.maximum))
        self.lowerBoundSlider.setValue(int(self.lowerBound))
        self.lowerBoundSlider.valueChanged.connect(self.valueChanged)
        self.lowerBoundLabel = QLabel(str(self.lowerBound))

        self.upperBoundSlider = QSlider(Qt.Horizontal)
        self.upperBoundSlider.setMinimum(int(self.minimum))
        self.upperBoundSlider.setMaximum(int(self.maximum))
        self.upperBoundSlider.setValue(int(self.upperBound))
        self.upperBoundSlider.valueChanged.connect(self.valueChanged)
        self.upperBoundLabel = QLabel(str(self.upperBound))

        layout = QGridLayout()
        layout.setAlignment(Qt.AlignTop)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(QLabel("Window"), 0, 0)
        layout.addWidget(self.windowSlider, 0, 1)
        layout.addWidget(self.windowLabel, 0, 2)
        layout.addWidget(QLabel("Level"), 1, 0)
        layout.addWidget(self.levelSlider, 1, 1)
        layout.addWidget(self.levelLabel, 1, 2)
        layout.addWidget(QLabel("Brightness"), 2, 0)
        layout.addWidget(self.brightnessSlider, 2, 1)
        layout.addWidget(self.brightnessLabel, 2, 2)
        layout.addWidget(QLabel("Lower threshold"), 3, 0)
        layout.addWidget(self.lowerBoundSlider, 3, 1)
        layout.addWidget(self.lowerBoundLabel, 3, 2)
        layout.addWidget(QLabel("Upper threshold"), 4, 0)
        layout.addWidget(self.upperBoundSlider, 4, 1)
        layout.addWidget(self.upperBoundLabel, 4, 2)

        widget = QWidget()
        widget.setLayout(layout)
        return widget
	def getParameterWidget(self):
		"""
		Returns a widget with sliders / fields with which properties of this
		volume property can be adjusted.
		:rtype: QWidget
		"""
		self.lowerBoundSlider = SliderFloatWidget()
		self.lowerBoundSlider.setName("Lower:")
		self.lowerBoundSlider.setRange([self.minimum, self.maximum])
		self.lowerBoundSlider.setValue(self.lowerBound)
		self.lowerBoundSlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
		self.lowerBoundSlider.valueChanged.connect(self.valueChanged)

		self.upperBoundSlider = SliderFloatWidget()
		self.upperBoundSlider.setName("Upper:")
		self.upperBoundSlider.setRange([self.minimum, self.maximum])
		self.upperBoundSlider.setValue(self.upperBound)
		self.upperBoundSlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
		self.upperBoundSlider.valueChanged.connect(self.valueChanged)

		layoutGroup = QGridLayout()
		layoutGroup.setAlignment(Qt.AlignTop)
		layoutGroup.setContentsMargins(5, 0, 0, 0)
		layoutGroup.setSpacing(0)
		layoutGroup.addWidget(self.lowerBoundSlider)
		layoutGroup.addWidget(self.upperBoundSlider)

		groupbox = QGroupBox("Thresholds:")
		groupbox.setLayout(layoutGroup)

		self.opacitySlider = SliderFloatWidget()
		self.opacitySlider.setName("Opacity:")
		self.opacitySlider.setRange([0.0, 1.0])
		self.opacitySlider.setValue(self.opacity)
		self.opacitySlider.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
		self.opacitySlider.valueChanged.connect(self.valueChanged)

		self.colorChooser = ColorChoiceWidget()
		self.colorChooser.setName("Color:")
		self.colorChooser.setColors(self.colors)
		self.colorChooser.setColor(self.color)
		self.colorChooser.setMinimumHeight(self.upperBoundSlider.sizeHint().height())
		self.colorChooser.label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
		self.colorChooser.valueChanged.connect(self.valueChanged)

		otherLayoutGroup = QGridLayout()
		otherLayoutGroup.setAlignment(Qt.AlignTop)
		otherLayoutGroup.setContentsMargins(5, 0, 0, 0)
		otherLayoutGroup.setSpacing(0)
		otherLayoutGroup.addWidget(self.opacitySlider)
		# otherLayoutGroup.addWidget(self.colorChooser)

		# otherBox = QGroupBox("Color and opacity:")
		otherBox = QGroupBox()
		otherBox.setLayout(otherLayoutGroup)

		layout = QGridLayout()
		layout.setAlignment(Qt.AlignTop)
		layout.setContentsMargins(0, 0, 0, 0)
		layout.setHorizontalSpacing(0)
		layout.addWidget(groupbox)
		layout.addWidget(otherBox)

		widget = QWidget()
		widget.setLayout(layout)

		try:
			from ColumnResizer import ColumnResizer
			self.columnResizer = ColumnResizer()
			self.columnResizer.addWidgetsFromLayout(self.lowerBoundSlider.layout(), 0)
			self.columnResizer.addWidgetsFromLayout(self.upperBoundSlider.layout(), 0)
			self.columnResizer.addWidgetsFromLayout(self.colorChooser.layout(), 0)
			self.columnResizer.addWidgetsFromLayout(self.opacitySlider.layout(), 0)

			self.otherColRes = ColumnResizer()
			self.otherColRes.addWidgetsFromLayout(self.lowerBoundSlider.layout(), 2)
			self.otherColRes.addWidgetsFromLayout(self.upperBoundSlider.layout(), 2)
			self.otherColRes.addWidgetsFromLayout(self.opacitySlider.layout(), 2)
		except Exception, e:
			print e
	def setFile(self, fileName):
		"""
		Slot that reads properties of the dataset and displays them in a few widgets.
		"""
		if fileName is None:
			return

		self.fileName = fileName

		# Read info from dataset
		# TODO: read out the real world dimensions in inch or cm
		# TODO: scalar type (int, float, short, etc.)
		imageReader = DataReader()
		imageData = imageReader.GetImageData(fileName)

		directory, name = os.path.split(fileName)
		dimensions = imageData.GetDimensions()
		minimum, maximum = imageData.GetScalarRange()
		scalarType = imageData.GetScalarTypeAsString()

		bins = DataAnalyzer.histogramForData(imageData, 256)

		self.histogram = Histogram()
		self.histogram.bins = bins
		self.histogram.enabled = True

		self.histogramWidget = HistogramWidget()
		self.histogramWidget.setMinimumHeight(100)
		self.histogramWidget.setHistogram(self.histogram)
		self.histogramWidget.setAxeMode(bottom=HistogramWidget.AxeClear,
			left=HistogramWidget.AxeLog)
		Style.styleWidgetForTab(self.histogramWidget)

		nameText = name
		dimsText = "(" + str(dimensions[0]) + ", " + str(dimensions[1]) + ", " + str(dimensions[2]) + ")"
		voxsText = str(dimensions[0] * dimensions[1] * dimensions[2])
		rangText = "[" + str(minimum) + " : " + str(maximum) + "]"
		typeText = scalarType

		layout = self.layout()
		if not layout:
			# Create a new layout
			layout = QGridLayout()
			layout.setAlignment(Qt.AlignTop)

			# Create string representations
			nameLabels = []
			nameLabels.append(QLabel("File name:"))
			nameLabels.append(QLabel("Dimensions:"))
			nameLabels.append(QLabel("Voxels:"))
			nameLabels.append(QLabel("Range:"))
			nameLabels.append(QLabel("Data type:"))

			for label in nameLabels:
				label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

			# Create 'dynamic' labels
			self.labelTitle = QLabel(nameText)
			self.labelDimensions = QLabel(dimsText)
			self.labelVoxels = QLabel(voxsText)
			self.labelRange = QLabel(rangText)
			self.labelType = QLabel(typeText)

			index = 0
			for label in nameLabels:
				layout.addWidget(label, index, 0)
				index += 1

			layout.addWidget(self.labelTitle, 0, 1)
			layout.addWidget(self.labelDimensions, 1, 1)
			layout.addWidget(self.labelVoxels, 2, 1)
			layout.addWidget(self.labelRange, 3, 1)
			layout.addWidget(self.labelType, 4, 1)
			layout.addWidget(self.histogramWidget, 5, 0, 1, 2)

			widget = QWidget()
			widget.setLayout(layout)
			Style.styleWidgetForTab(widget)
			self.scrollArea.setWidget(widget)

			scrollLayout = QGridLayout()
			scrollLayout.setSpacing(0)
			scrollLayout.setContentsMargins(0, 0, 0, 0)
			scrollLayout.addWidget(self.scrollArea)
			self.setLayout(scrollLayout)
		else:
			# Just update the text for the 'dynamic' labels
			self.labelTitle.setText(nameText)
			self.labelDimensions.setText(dimsText)
			self.labelVoxels.setText(voxsText)
			self.labelRange.setText(rangText)
			self.labelType.setText(typeText)
	def setFile(self, fileName):
		"""
		Slot that reads properties of the dataset and displays them in a few widgets.
		"""
		if fileName is None:
			return

		# Read info from dataset
		# TODO: read out the real world dimensions in inch or cm
		# TODO: scalar type (int, float, short, etc.)
		imageReader = DataReader()
		imageData = imageReader.GetImageData(fileName)

		directory, name = os.path.split(fileName)
		dimensions = imageData.GetDimensions()
		minimum, maximum = imageData.GetScalarRange()

		bins = DataAnalyzer.histogramForData(imageData, 256)

		self.histogram = Histogram()
		self.histogram.bins = bins
		self.histogram.enabled = True

		self.histogramWidget = HistogramWidget()
		self.histogramWidget.setHistogram(self.histogram)
		self.histogramWidget.setAxeMode(bottom=HistogramWidget.AxeClear,
			left=HistogramWidget.AxeLog)
		Style.styleWidgetForTab(self.histogramWidget)

		nameText = name
		dimsText = "(" + str(dimensions[0]) + ", " + str(dimensions[1]) + ", " + str(dimensions[2]) + ")"
		voxsText = str(dimensions[0] * dimensions[1] * dimensions[2])
		rangText = "[" + str(minimum) + " : " + str(maximum) + "]"

		layout = self.layout()
		if not layout:
			# Create a new layout
			layout = QGridLayout()
			layout.setAlignment(Qt.AlignTop)

			# Create string representations
			nameField = QLabel("File name:")
			dimsField = QLabel("Dimensions:")
			voxsField = QLabel("Voxels:")
			rangField = QLabel("Range:")

			nameField.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
			dimsField.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
			voxsField.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
			rangField.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

			# Create 'dynamic' labels
			self.labelTitle = QLabel(nameText)
			self.labelDimensions = QLabel(dimsText)
			self.labelVoxels = QLabel(voxsText)
			self.labelRange = QLabel(rangText)

			layout.addWidget(nameField, 0, 0)
			layout.addWidget(dimsField, 1, 0)
			layout.addWidget(voxsField, 2, 0)
			layout.addWidget(rangField, 3, 0)

			layout.addWidget(self.labelTitle, 0, 1)
			layout.addWidget(self.labelDimensions, 1, 1)
			layout.addWidget(self.labelVoxels, 2, 1)
			layout.addWidget(self.labelRange, 3, 1)
			layout.addWidget(self.histogramWidget, 4, 0, 1, 2)
			self.setLayout(layout)
		else:
			# Just update the text for the 'dynamic' labels
			self.labelTitle.setText(nameText)
			self.labelDimensions.setText(dimsText)
			self.labelVoxels.setText(voxsText)
			self.labelRange.setText(rangText)