def _loadProductSpecsGroupBox(self, inPmGroupBox): """ Load widgets in the Product specifications group box. @param inPmGroupBox: The roduct specifications box in the PM @type inPmGroupBox: L{PM_GroupBox} """ productChoices = ['Rod', 'Ring'] self.extrude_productTypeComboBox = \ PM_ComboBox( inPmGroupBox, label = 'Final product:', labelColumn = 0, choices = productChoices, index = 0, setAsDefault = True, spanWidth = False ) # names used in the code, same order #if you comment out items from combobox, you also have to remove them # from this list unless they are at the end!!! self.extrude_productTypeComboBox_ptypes = ["straight rod", \ "closed ring", \ "corkscrew"] self.extrudeSpinBox_n = \ PM_SpinBox( inPmGroupBox, label = "Number of copies:", labelColumn = 0, value = 3, minimum = 1, maximum = 99 ) #@WARNING: This method initializes some instance varaiables for various #checkboxes. (Example: self.mergeCopiesCheckBox.default = False). #These values are needed in extrudemode.py. This #won't be needed once extrudeMode.py is cleaned up. -- ninad 2007-09-10 self.extrudeBondCriterionSlider = \ PM_Slider( inPmGroupBox, currentValue = 100, minimum = 0, maximum = 300, label = 'Tolerence' ) self.extrudeBondCriterionLabel = \ self.extrudeBondCriterionSlider.labelWidget self.extrudeBondCriterionSlider_dflt = 100 self.extrudeBondCriterionSlider.setPageStep(5) self.makeBondsCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Make bonds' , widgetColumn = 0, state = Qt.Checked ) self.makeBondsCheckBox.default = True self.makeBondsCheckBox.attr = 'whendone_make_bonds' self.makeBondsCheckBox.repaintQ = False
def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ #stereoSettingsGroupBox = PM_GroupBox( None ) self.stereoEnabledCheckBox = \ PM_CheckBox(pmGroupBox, text = 'Enable Stereo View', widgetColumn = 1 ) stereoModeChoices = [ 'Relaxed view', 'Cross-eyed view', 'Red/blue anaglyphs', 'Red/cyan anaglyphs', 'Red/green anaglyphs' ] self.stereoModeComboBox = \ PM_ComboBox( pmGroupBox, label = "Stereo Mode:", choices = stereoModeChoices, setAsDefault = True) self.stereoModeComboBox.setCurrentIndex( env.prefs[stereoViewMode_prefs_key] - 1) self.stereoSeparationSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 300, label = 'Separation' ) self.stereoSeparationSlider.setValue( env.prefs[stereoViewSeparation_prefs_key]) self.stereoAngleSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 100, label = 'Angle' ) self.stereoAngleSlider.setValue(env.prefs[stereoViewAngle_prefs_key]) self._updateWidgets()
def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ #stereoSettingsGroupBox = PM_GroupBox( None ) self.stereoEnabledCheckBox = \ PM_CheckBox(pmGroupBox, text = 'Enable Stereo View', widgetColumn = 1 ) stereoModeChoices = ['Relaxed view', 'Cross-eyed view', 'Red/blue anaglyphs', 'Red/cyan anaglyphs', 'Red/green anaglyphs'] self.stereoModeComboBox = \ PM_ComboBox( pmGroupBox, label = "Stereo Mode:", choices = stereoModeChoices, setAsDefault = True) self.stereoModeComboBox.setCurrentIndex(env.prefs[stereoViewMode_prefs_key]-1) self.stereoSeparationSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 300, label = 'Separation' ) self.stereoSeparationSlider.setValue(env.prefs[stereoViewSeparation_prefs_key]) self.stereoAngleSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 100, label = 'Angle' ) self.stereoAngleSlider.setValue(env.prefs[stereoViewAngle_prefs_key]) self._updateWidgets()
def _loadFuseOptionsGroupBox(self, inPmGroupBox): """ Load the widgets inside the Fuse Options groupbox. """ #@ Warning: If you change fuseChoices, you must also change the # constants MAKEBONDS and FUSEATOMS in FuseChunks_Command.py. # This implementation is fragile and should be fixed. Mark 2008-07-16 fuseChoices = ['Make bonds between chunks', 'Fuse overlapping atoms'] self.fuseComboBox = \ PM_ComboBox( inPmGroupBox, label = '', choices = fuseChoices, index = 0, setAsDefault = False, spanWidth = True) self.connect(self.fuseComboBox, SIGNAL("activated(const QString&)"), self.parentMode.change_fuse_mode) self.fusePushButton = PM_PushButton( inPmGroupBox, label = "", text = "Make Bonds", spanWidth = True ) self.connect( self.fusePushButton, SIGNAL("clicked()"), self.parentMode.fuse_something) self.toleranceSlider = PM_Slider( inPmGroupBox, currentValue = 100, minimum = 0, maximum = 300, label = \ 'Tolerance:100% => 0 bondable pairs' ) self.connect(self.toleranceSlider, SIGNAL("valueChanged(int)"), self.parentMode.tolerance_changed) self.mergeChunksCheckBox = PM_CheckBox( inPmGroupBox, text = 'Merge chunks', widgetColumn = 0, state = Qt.Checked )
def _loadMovieControlsGroupBox(self, inPmGroupBox): """ Load widgets in the Movie Controls group box. @param inPmGroupBox: The Movie Controls groupbox in the PM @type inPmGroupBox: L{PM_GroupBox} """ #Movie Slider self.frameNumberSlider = \ PM_Slider( inPmGroupBox, currentValue = 0, minimum = 0, maximum = 999999, label = 'Current Frame: 0/900' ) self.movieFrameUpdateLabel = self.frameNumberSlider.labelWidget #Movie Controls self.movieButtonsToolBar = NE1ToolBar(inPmGroupBox) _movieActionList = [self.movieResetAction, self.moviePlayRevActiveAction, self.moviePlayRevAction, self.moviePauseAction, self.moviePlayAction, self.moviePlayActiveAction, self.movieMoveToEndAction ] for _action in _movieActionList: self.movieButtonsToolBar.addAction(_action) self.moviePlayActiveAction.setVisible(0) self.moviePlayRevActiveAction.setVisible(0) WIDGET_LIST = [("PM_", self.movieButtonsToolBar, 0)] self.moviecontrolsWidgetRow = PM_WidgetRow(inPmGroupBox, widgetList = WIDGET_LIST, spanWidth = True) self.movieLoop_checkbox = PM_CheckBox(inPmGroupBox, text = "Loop", widgetColumn = 0, state = Qt.Unchecked)
class StereoProperties_PropertyManager(Command_PropertyManager): """ The StereoProperties_PropertyManager class provides a Property Manager for the Stereo View command. @ivar title: The title that appears in the property manager header. @type title: str @ivar pmName: The name of this property manager. This is used to set the name of the PM_Dialog object via setObjectName(). @type name: str @ivar iconPath: The relative path to the PNG file that contains a 22 x 22 icon image that appears in the PM header. @type iconPath: str """ title = "Stereo View" pmName = title iconPath = "ui/actions/View/Stereo_View.png" def __init__( self, command ): """ Constructor for the property manager. """ _superclass.__init__(self, command) self.showTopRowButtons( PM_DONE_BUTTON | \ PM_WHATS_THIS_BUTTON) msg = "Modify the Stereo View settings below." self.updateMessage(msg) def connect_or_disconnect_signals(self, isConnect): """ Connect or disconnect widget signals sent to their slot methods. This can be overridden in subclasses. By default it does nothing. @param isConnect: If True the widget will send the signals to the slot method. @type isConnect: boolean """ if isConnect: change_connect = self.win.connect else: change_connect = self.win.disconnect change_connect(self.stereoEnabledCheckBox, SIGNAL("toggled(bool)"), self._enableStereo ) change_connect( self.stereoModeComboBox, SIGNAL("currentIndexChanged(int)"), self._stereoModeComboBoxChanged ) change_connect(self.stereoSeparationSlider, SIGNAL("valueChanged(int)"), self._stereoModeSeparationSliderChanged ) change_connect(self.stereoAngleSlider, SIGNAL("valueChanged(int)"), self._stereoModeAngleSliderChanged ) def _addGroupBoxes( self ): """ Add the Property Manager group boxes. """ self._pmGroupBox1 = PM_GroupBox( self, title = "Settings") self._loadGroupBox1( self._pmGroupBox1 ) #@ self._pmGroupBox1.hide() def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ #stereoSettingsGroupBox = PM_GroupBox( None ) self.stereoEnabledCheckBox = \ PM_CheckBox(pmGroupBox, text = 'Enable Stereo View', widgetColumn = 1 ) stereoModeChoices = ['Relaxed view', 'Cross-eyed view', 'Red/blue anaglyphs', 'Red/cyan anaglyphs', 'Red/green anaglyphs'] self.stereoModeComboBox = \ PM_ComboBox( pmGroupBox, label = "Stereo Mode:", choices = stereoModeChoices, setAsDefault = True) self.stereoModeComboBox.setCurrentIndex(env.prefs[stereoViewMode_prefs_key]-1) self.stereoSeparationSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 300, label = 'Separation' ) self.stereoSeparationSlider.setValue(env.prefs[stereoViewSeparation_prefs_key]) self.stereoAngleSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 100, label = 'Angle' ) self.stereoAngleSlider.setValue(env.prefs[stereoViewAngle_prefs_key]) self._updateWidgets() def _addWhatsThisText( self ): """ What's This text for widgets in the Stereo Property Manager. """ pass def _addToolTipText(self): """ Tool Tip text for widgets in the Stereo Property Manager. """ pass def _enableStereo(self, enabled): """ Enable stereo view. """ glpane = self.o if glpane: glpane.set_stereo_enabled( enabled) # switch to perspective mode if enabled: # store current projection mode glpane.__StereoProperties_last_ortho = glpane.ortho if glpane.ortho: # dont use glpane.setViewProjection # because we don't want to modify # default projection setting glpane.ortho = 0 else: # restore default mode if hasattr(glpane, "__StereoProperties_last_ortho"): projection = glpane.__StereoProperties_last_ortho if glpane.ortho != projection: glpane.ortho = projection self._updateWidgets() glpane.gl_update() def _stereoModeComboBoxChanged(self, mode): """ Change stereo mode. @param mode: stereo mode (0=relaxed, 1=cross-eyed, 2=red/blue, 3=red/cyan, 4=red/green) @type value: int """ env.prefs[stereoViewMode_prefs_key] = mode + 1 self._updateSeparationSlider() def _stereoModeSeparationSliderChanged(self, value): """ Change stereo view separation. @param value: separation (0..300) @type value: int """ env.prefs[stereoViewSeparation_prefs_key] = value def _stereoModeAngleSliderChanged(self, value): """ Change stereo view angle. @param value: stereo angle (0..100) @type value: int """ env.prefs[stereoViewAngle_prefs_key] = value def _updateSeparationSlider(self): """ Update the separation slider widget. """ if self.stereoModeComboBox.currentIndex() >= 2: # for anaglyphs disable the separation slider self.stereoSeparationSlider.setEnabled(False) else: # otherwise, enable the separation slider self.stereoSeparationSlider.setEnabled(True) def _updateWidgets(self): """ Update stereo PM widgets. """ if self.stereoEnabledCheckBox.isChecked(): self.stereoModeComboBox.setEnabled(True) self.stereoSeparationSlider.setEnabled(True) self.stereoAngleSlider.setEnabled(True) self._updateSeparationSlider() else: self.stereoModeComboBox.setEnabled(False) self.stereoSeparationSlider.setEnabled(False) self.stereoAngleSlider.setEnabled(False)
class Ui_ExtrudePropertyManager(Command_PropertyManager): """ The Ui_ExtrudePropertyManager class defines UI elements for the Property Manager of the B{Extrude mode}. @ivar title: The title that appears in the property manager header. @type title: str @ivar pmName: The name of this property manager. This is used to set the name of the PM_Dialog object via setObjectName(). @type name: str @ivar iconPath: The relative path to the PNG file that contains a 22 x 22 icon image that appears in the PM header. @type iconPath: str """ # The title that appears in the Property Manager header title = "Extrude" # The name of this Property Manager. This will be set to # the name of the PM_Dialog object via setObjectName(). pmName = title # The relative path to the PNG file that appears in the header iconPath = "ui/actions/Properties Manager/Extrude.png" def __init__(self, command): """ Constructor for the B{Extrude} property manager class that defines its UI. @param command: The parent mode where this Property Manager is used @type command: L{extrudeMode} """ _superclass.__init__(self, command) self.showTopRowButtons( PM_DONE_BUTTON | \ PM_CANCEL_BUTTON | \ PM_PREVIEW_BUTTON|\ PM_WHATS_THIS_BUTTON) msg = '' self.MessageGroupBox.insertHtmlMessage(msg, setAsDefault=False) def _addGroupBoxes(self): """ Add various group boxes to the Extrude Property manager. """ self._addProductSpecsGroupBox() self._addAdvancedOptionsGroupBox() #Define extrude preference toggles. This needs to be defined before #the superclass calls connect_or_disconnect_signals! Defining it in #_addGroupBoxes is not intuitive. But the problem is the superclass method #also makes connections in its __init__ method. This can be cleaned up #during major reafctoring of extrude Mode -- Ninad 2008-10-02 self.extrude_pref_toggles = ( self.showEntireModelCheckBox, self.showBondOffsetCheckBox, self.makeBondsCheckBox, self.mergeCopiesCheckBox, self.extrudePrefMergeSelection) def _addProductSpecsGroupBox(self): """ """ self.productSpecsGroupBox = \ PM_GroupBox( self, title = "Product Specifications" ) self._loadProductSpecsGroupBox(self.productSpecsGroupBox) def _addAdvancedOptionsGroupBox(self): """ Add 'Advanced Options' groupbox """ self.advancedOptionsGroupBox = \ PM_GroupBox( self, title = "Advanced Options" ) self._loadAdvancedOptionsGroupBox(self.advancedOptionsGroupBox) def _loadProductSpecsGroupBox(self, inPmGroupBox): """ Load widgets in the Product specifications group box. @param inPmGroupBox: The roduct specifications box in the PM @type inPmGroupBox: L{PM_GroupBox} """ productChoices = ['Rod', 'Ring'] self.extrude_productTypeComboBox = \ PM_ComboBox( inPmGroupBox, label = 'Final product:', labelColumn = 0, choices = productChoices, index = 0, setAsDefault = True, spanWidth = False ) # names used in the code, same order #if you comment out items from combobox, you also have to remove them # from this list unless they are at the end!!! self.extrude_productTypeComboBox_ptypes = ["straight rod", \ "closed ring", \ "corkscrew"] self.extrudeSpinBox_n = \ PM_SpinBox( inPmGroupBox, label = "Number of copies:", labelColumn = 0, value = 3, minimum = 1, maximum = 99 ) #@WARNING: This method initializes some instance varaiables for various #checkboxes. (Example: self.mergeCopiesCheckBox.default = False). #These values are needed in extrudemode.py. This #won't be needed once extrudeMode.py is cleaned up. -- ninad 2007-09-10 self.extrudeBondCriterionSlider = \ PM_Slider( inPmGroupBox, currentValue = 100, minimum = 0, maximum = 300, label = 'Tolerence' ) self.extrudeBondCriterionLabel = \ self.extrudeBondCriterionSlider.labelWidget self.extrudeBondCriterionSlider_dflt = 100 self.extrudeBondCriterionSlider.setPageStep(5) self.makeBondsCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Make bonds' , widgetColumn = 0, state = Qt.Checked ) self.makeBondsCheckBox.default = True self.makeBondsCheckBox.attr = 'whendone_make_bonds' self.makeBondsCheckBox.repaintQ = False def _loadAdvancedOptionsGroupBox(self, inPmGroupBox): """ Load widgets in the Advanced Options group box. @param inPmGroupBox: The Advanced Options box in the PM @type inPmGroupBox: L{PM_GroupBox} """ self.offsetSpecsGroupBox = PM_GroupBox(inPmGroupBox, title = 'Offset Between Copies:' ) self._loadOffsetSpecsGroupBox(self.offsetSpecsGroupBox) self.mergeOptionsGroupBox = PM_GroupBox(inPmGroupBox, title = 'Merge Options:' ) self._loadMergeOptionsGroupBox(self.mergeOptionsGroupBox) self.displayOptionsGroupBox = PM_GroupBox(inPmGroupBox, title = 'Display Options:') self._loadDisplayOptionsGroupBox(self.displayOptionsGroupBox) return def _loadDisplayOptionsGroupBox(self, inPmGroupBox): """ Load widgets in the Display Options groupbox (which is a groupbox within the B{Advanced Options group box} ) . @param inPmGroupBox: The Display Options groupbox @type inPmGroupBox: L{PM_GroupBox} @WARNING: This method initializes some instance varaiables for various checkboxes. (Example: self.mergeCopiesCheckBox.default = False). This won't be needed once extrudeMode.py is cleaned up. """ self.showEntireModelCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Show entire model' , widgetColumn = 1, state = Qt.Unchecked ) self.showEntireModelCheckBox.default = False self.showEntireModelCheckBox.attr = 'show_entire_model' self.showEntireModelCheckBox.repaintQ = True self.showBondOffsetCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Show bond-offset spheres' , widgetColumn = 1, state = Qt.Unchecked ) self.showBondOffsetCheckBox.default = False self.showBondOffsetCheckBox.attr = 'show_bond_offsets' self.showBondOffsetCheckBox.repaintQ = True def _loadMergeOptionsGroupBox(self, inPmGroupBox): """ Load widgets in the Merge Options groupbox (which is a groupbox within the B{Advanced Options group box}). @param inPmGroupBox: The Merge Options groupbox @type inPmGroupBox: L{PM_GroupBox} @WARNING: This method initializes some instance varaiables for various checkboxes. (Example: self.mergeCopiesCheckBox.default = False). This won't be needed once extrudeMode.py is cleaned up. """ self.mergeCopiesCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Merge copies' , widgetColumn = 1, state = Qt.Unchecked ) self.mergeCopiesCheckBox.default = False self.mergeCopiesCheckBox.attr = 'whendone_all_one_part' self.mergeCopiesCheckBox.repaintQ = False self.extrudePrefMergeSelection = \ PM_CheckBox(inPmGroupBox, text = 'Merge selection' , widgetColumn = 1, state = Qt.Unchecked ) self.extrudePrefMergeSelection.default = False self.extrudePrefMergeSelection.attr = 'whendone_merge_selection' self.extrudePrefMergeSelection.repaintQ = False def _loadOffsetSpecsGroupBox(self, inPmGroupBox): """ Load widgets in the Offset specs groupbox (which is a groupbox within the B{Advanced Options group box}). @param inPmGroupBox: The Offset Specs gropbox box @type inPmGroupBox: L{PM_GroupBox} """ self.extrudeSpinBox_length = \ PM_DoubleSpinBox( inPmGroupBox, label = "Total offset", value = 7.0, setAsDefault = True, minimum = 0.1, maximum = 2000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) self.extrudeSpinBox_x = \ PM_DoubleSpinBox( inPmGroupBox, label = "X offset", value = 0, minimum = -1000.0, maximum = 1000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) self.extrudeSpinBox_y = \ PM_DoubleSpinBox( inPmGroupBox, label = "Y offset", value = 0, minimum = -1000.0, maximum = 1000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) self.extrudeSpinBox_z = \ PM_DoubleSpinBox( inPmGroupBox, label = "Z offset", value = 0, minimum = -1000.0, maximum = 1000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) def _addWhatsThisText(self): """ What's This text for widgets in this Property Manager. @note: Many PM widgets are still missing their "What's This" text. """ from ne1_ui.WhatsThisText_for_PropertyManagers import whatsThis_ExtrudePropertyManager whatsThis_ExtrudePropertyManager(self) return
class Ui_ExtrudePropertyManager(Command_PropertyManager): """ The Ui_ExtrudePropertyManager class defines UI elements for the Property Manager of the B{Extrude mode}. @ivar title: The title that appears in the property manager header. @type title: str @ivar pmName: The name of this property manager. This is used to set the name of the PM_Dialog object via setObjectName(). @type name: str @ivar iconPath: The relative path to the PNG file that contains a 22 x 22 icon image that appears in the PM header. @type iconPath: str """ # The title that appears in the Property Manager header title = "Extrude" # The name of this Property Manager. This will be set to # the name of the PM_Dialog object via setObjectName(). pmName = title # The relative path to the PNG file that appears in the header iconPath = "ui/actions/Properties Manager/Extrude.png" def __init__(self, command): """ Constructor for the B{Extrude} property manager class that defines its UI. @param command: The parent mode where this Property Manager is used @type command: L{extrudeMode} """ _superclass.__init__(self, command) self.showTopRowButtons( PM_DONE_BUTTON | \ PM_CANCEL_BUTTON | \ PM_PREVIEW_BUTTON|\ PM_WHATS_THIS_BUTTON) msg = '' self.MessageGroupBox.insertHtmlMessage(msg, setAsDefault=False) def _addGroupBoxes(self): """ Add various group boxes to the Extrude Property manager. """ self._addProductSpecsGroupBox() self._addAdvancedOptionsGroupBox() #Define extrude preference toggles. This needs to be defined before #the superclass calls connect_or_disconnect_signals! Defining it in #_addGroupBoxes is not intuitive. But the problem is the superclass method #also makes connections in its __init__ method. This can be cleaned up #during major reafctoring of extrude Mode -- Ninad 2008-10-02 self.extrude_pref_toggles = (self.showEntireModelCheckBox, self.showBondOffsetCheckBox, self.makeBondsCheckBox, self.mergeCopiesCheckBox, self.extrudePrefMergeSelection) def _addProductSpecsGroupBox(self): """ """ self.productSpecsGroupBox = \ PM_GroupBox( self, title = "Product Specifications" ) self._loadProductSpecsGroupBox(self.productSpecsGroupBox) def _addAdvancedOptionsGroupBox(self): """ Add 'Advanced Options' groupbox """ self.advancedOptionsGroupBox = \ PM_GroupBox( self, title = "Advanced Options" ) self._loadAdvancedOptionsGroupBox(self.advancedOptionsGroupBox) def _loadProductSpecsGroupBox(self, inPmGroupBox): """ Load widgets in the Product specifications group box. @param inPmGroupBox: The roduct specifications box in the PM @type inPmGroupBox: L{PM_GroupBox} """ productChoices = ['Rod', 'Ring'] self.extrude_productTypeComboBox = \ PM_ComboBox( inPmGroupBox, label = 'Final product:', labelColumn = 0, choices = productChoices, index = 0, setAsDefault = True, spanWidth = False ) # names used in the code, same order #if you comment out items from combobox, you also have to remove them # from this list unless they are at the end!!! self.extrude_productTypeComboBox_ptypes = ["straight rod", \ "closed ring", \ "corkscrew"] self.extrudeSpinBox_n = \ PM_SpinBox( inPmGroupBox, label = "Number of copies:", labelColumn = 0, value = 3, minimum = 1, maximum = 99 ) #@WARNING: This method initializes some instance varaiables for various #checkboxes. (Example: self.mergeCopiesCheckBox.default = False). #These values are needed in extrudemode.py. This #won't be needed once extrudeMode.py is cleaned up. -- ninad 2007-09-10 self.extrudeBondCriterionSlider = \ PM_Slider( inPmGroupBox, currentValue = 100, minimum = 0, maximum = 300, label = 'Tolerence' ) self.extrudeBondCriterionLabel = \ self.extrudeBondCriterionSlider.labelWidget self.extrudeBondCriterionSlider_dflt = 100 self.extrudeBondCriterionSlider.setPageStep(5) self.makeBondsCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Make bonds' , widgetColumn = 0, state = Qt.Checked ) self.makeBondsCheckBox.default = True self.makeBondsCheckBox.attr = 'whendone_make_bonds' self.makeBondsCheckBox.repaintQ = False def _loadAdvancedOptionsGroupBox(self, inPmGroupBox): """ Load widgets in the Advanced Options group box. @param inPmGroupBox: The Advanced Options box in the PM @type inPmGroupBox: L{PM_GroupBox} """ self.offsetSpecsGroupBox = PM_GroupBox(inPmGroupBox, title='Offset Between Copies:') self._loadOffsetSpecsGroupBox(self.offsetSpecsGroupBox) self.mergeOptionsGroupBox = PM_GroupBox(inPmGroupBox, title='Merge Options:') self._loadMergeOptionsGroupBox(self.mergeOptionsGroupBox) self.displayOptionsGroupBox = PM_GroupBox(inPmGroupBox, title='Display Options:') self._loadDisplayOptionsGroupBox(self.displayOptionsGroupBox) return def _loadDisplayOptionsGroupBox(self, inPmGroupBox): """ Load widgets in the Display Options groupbox (which is a groupbox within the B{Advanced Options group box} ) . @param inPmGroupBox: The Display Options groupbox @type inPmGroupBox: L{PM_GroupBox} @WARNING: This method initializes some instance varaiables for various checkboxes. (Example: self.mergeCopiesCheckBox.default = False). This won't be needed once extrudeMode.py is cleaned up. """ self.showEntireModelCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Show entire model' , widgetColumn = 1, state = Qt.Unchecked ) self.showEntireModelCheckBox.default = False self.showEntireModelCheckBox.attr = 'show_entire_model' self.showEntireModelCheckBox.repaintQ = True self.showBondOffsetCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Show bond-offset spheres' , widgetColumn = 1, state = Qt.Unchecked ) self.showBondOffsetCheckBox.default = False self.showBondOffsetCheckBox.attr = 'show_bond_offsets' self.showBondOffsetCheckBox.repaintQ = True def _loadMergeOptionsGroupBox(self, inPmGroupBox): """ Load widgets in the Merge Options groupbox (which is a groupbox within the B{Advanced Options group box}). @param inPmGroupBox: The Merge Options groupbox @type inPmGroupBox: L{PM_GroupBox} @WARNING: This method initializes some instance varaiables for various checkboxes. (Example: self.mergeCopiesCheckBox.default = False). This won't be needed once extrudeMode.py is cleaned up. """ self.mergeCopiesCheckBox = \ PM_CheckBox(inPmGroupBox, text = 'Merge copies' , widgetColumn = 1, state = Qt.Unchecked ) self.mergeCopiesCheckBox.default = False self.mergeCopiesCheckBox.attr = 'whendone_all_one_part' self.mergeCopiesCheckBox.repaintQ = False self.extrudePrefMergeSelection = \ PM_CheckBox(inPmGroupBox, text = 'Merge selection' , widgetColumn = 1, state = Qt.Unchecked ) self.extrudePrefMergeSelection.default = False self.extrudePrefMergeSelection.attr = 'whendone_merge_selection' self.extrudePrefMergeSelection.repaintQ = False def _loadOffsetSpecsGroupBox(self, inPmGroupBox): """ Load widgets in the Offset specs groupbox (which is a groupbox within the B{Advanced Options group box}). @param inPmGroupBox: The Offset Specs gropbox box @type inPmGroupBox: L{PM_GroupBox} """ self.extrudeSpinBox_length = \ PM_DoubleSpinBox( inPmGroupBox, label = "Total offset", value = 7.0, setAsDefault = True, minimum = 0.1, maximum = 2000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) self.extrudeSpinBox_x = \ PM_DoubleSpinBox( inPmGroupBox, label = "X offset", value = 0, minimum = -1000.0, maximum = 1000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) self.extrudeSpinBox_y = \ PM_DoubleSpinBox( inPmGroupBox, label = "Y offset", value = 0, minimum = -1000.0, maximum = 1000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) self.extrudeSpinBox_z = \ PM_DoubleSpinBox( inPmGroupBox, label = "Z offset", value = 0, minimum = -1000.0, maximum = 1000.0, singleStep = 1, decimals = 3, suffix = ' Angstroms' ) def _addWhatsThisText(self): """ What's This text for widgets in this Property Manager. @note: Many PM widgets are still missing their "What's This" text. """ from ne1_ui.WhatsThisText_for_PropertyManagers import whatsThis_ExtrudePropertyManager whatsThis_ExtrudePropertyManager(self) return
class StereoProperties_PropertyManager(Command_PropertyManager): """ The StereoProperties_PropertyManager class provides a Property Manager for the Stereo View command. @ivar title: The title that appears in the property manager header. @type title: str @ivar pmName: The name of this property manager. This is used to set the name of the PM_Dialog object via setObjectName(). @type name: str @ivar iconPath: The relative path to the PNG file that contains a 22 x 22 icon image that appears in the PM header. @type iconPath: str """ title = "Stereo View" pmName = title iconPath = "ui/actions/View/Stereo_View.png" def __init__(self, command): """ Constructor for the property manager. """ _superclass.__init__(self, command) self.showTopRowButtons( PM_DONE_BUTTON | \ PM_WHATS_THIS_BUTTON) msg = "Modify the Stereo View settings below." self.updateMessage(msg) def connect_or_disconnect_signals(self, isConnect): """ Connect or disconnect widget signals sent to their slot methods. This can be overridden in subclasses. By default it does nothing. @param isConnect: If True the widget will send the signals to the slot method. @type isConnect: boolean """ if isConnect: change_connect = self.win.connect else: change_connect = self.win.disconnect change_connect(self.stereoEnabledCheckBox, SIGNAL("toggled(bool)"), self._enableStereo) change_connect(self.stereoModeComboBox, SIGNAL("currentIndexChanged(int)"), self._stereoModeComboBoxChanged) change_connect(self.stereoSeparationSlider, SIGNAL("valueChanged(int)"), self._stereoModeSeparationSliderChanged) change_connect(self.stereoAngleSlider, SIGNAL("valueChanged(int)"), self._stereoModeAngleSliderChanged) def _addGroupBoxes(self): """ Add the Property Manager group boxes. """ self._pmGroupBox1 = PM_GroupBox(self, title="Settings") self._loadGroupBox1(self._pmGroupBox1) #@ self._pmGroupBox1.hide() def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ #stereoSettingsGroupBox = PM_GroupBox( None ) self.stereoEnabledCheckBox = \ PM_CheckBox(pmGroupBox, text = 'Enable Stereo View', widgetColumn = 1 ) stereoModeChoices = [ 'Relaxed view', 'Cross-eyed view', 'Red/blue anaglyphs', 'Red/cyan anaglyphs', 'Red/green anaglyphs' ] self.stereoModeComboBox = \ PM_ComboBox( pmGroupBox, label = "Stereo Mode:", choices = stereoModeChoices, setAsDefault = True) self.stereoModeComboBox.setCurrentIndex( env.prefs[stereoViewMode_prefs_key] - 1) self.stereoSeparationSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 300, label = 'Separation' ) self.stereoSeparationSlider.setValue( env.prefs[stereoViewSeparation_prefs_key]) self.stereoAngleSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 100, label = 'Angle' ) self.stereoAngleSlider.setValue(env.prefs[stereoViewAngle_prefs_key]) self._updateWidgets() def _addWhatsThisText(self): """ What's This text for widgets in the Stereo Property Manager. """ pass def _addToolTipText(self): """ Tool Tip text for widgets in the Stereo Property Manager. """ pass def _enableStereo(self, enabled): """ Enable stereo view. """ glpane = self.o if glpane: glpane.set_stereo_enabled(enabled) # switch to perspective mode if enabled: # store current projection mode glpane.__StereoProperties_last_ortho = glpane.ortho if glpane.ortho: # dont use glpane.setViewProjection # because we don't want to modify # default projection setting glpane.ortho = 0 else: # restore default mode if hasattr(glpane, "__StereoProperties_last_ortho"): projection = glpane.__StereoProperties_last_ortho if glpane.ortho != projection: glpane.ortho = projection self._updateWidgets() glpane.gl_update() def _stereoModeComboBoxChanged(self, mode): """ Change stereo mode. @param mode: stereo mode (0=relaxed, 1=cross-eyed, 2=red/blue, 3=red/cyan, 4=red/green) @type value: int """ env.prefs[stereoViewMode_prefs_key] = mode + 1 self._updateSeparationSlider() def _stereoModeSeparationSliderChanged(self, value): """ Change stereo view separation. @param value: separation (0..300) @type value: int """ env.prefs[stereoViewSeparation_prefs_key] = value def _stereoModeAngleSliderChanged(self, value): """ Change stereo view angle. @param value: stereo angle (0..100) @type value: int """ env.prefs[stereoViewAngle_prefs_key] = value def _updateSeparationSlider(self): """ Update the separation slider widget. """ if self.stereoModeComboBox.currentIndex() >= 2: # for anaglyphs disable the separation slider self.stereoSeparationSlider.setEnabled(False) else: # otherwise, enable the separation slider self.stereoSeparationSlider.setEnabled(True) def _updateWidgets(self): """ Update stereo PM widgets. """ if self.stereoEnabledCheckBox.isChecked(): self.stereoModeComboBox.setEnabled(True) self.stereoSeparationSlider.setEnabled(True) self.stereoAngleSlider.setEnabled(True) self._updateSeparationSlider() else: self.stereoModeComboBox.setEnabled(False) self.stereoSeparationSlider.setEnabled(False) self.stereoAngleSlider.setEnabled(False)
class StereoProperties_PropertyManager( PM_Dialog, DebugMenuMixin ): """ The StereoProperties_PropertyManager class provides a Property Manager for the Stereo View command. @ivar title: The title that appears in the property manager header. @type title: str @ivar pmName: The name of this property manager. This is used to set the name of the PM_Dialog object via setObjectName(). @type name: str @ivar iconPath: The relative path to the PNG file that contains a 22 x 22 icon image that appears in the PM header. @type iconPath: str """ title = "Stereo View" pmName = title iconPath = "ui/actions/View/Stereo_View.png" def __init__( self, parentCommand ): """ Constructor for the property manager. """ self.parentMode = parentCommand self.w = self.parentMode.w self.win = self.parentMode.w self.pw = self.parentMode.pw self.o = self.win.glpane PM_Dialog.__init__(self, self.pmName, self.iconPath, self.title) DebugMenuMixin._init1( self ) self.showTopRowButtons( PM_DONE_BUTTON | \ PM_WHATS_THIS_BUTTON) msg = "Modify the Stereo View settings below." self.updateMessage(msg) def connect_or_disconnect_signals(self, isConnect): """ Connect or disconnect widget signals sent to their slot methods. This can be overridden in subclasses. By default it does nothing. @param isConnect: If True the widget will send the signals to the slot method. @type isConnect: boolean """ if isConnect: change_connect = self.win.connect else: change_connect = self.win.disconnect change_connect(self.stereoEnabledCheckBox, SIGNAL("toggled(bool)"), self._enableStereo ) change_connect( self.stereoModeComboBox, SIGNAL("currentIndexChanged(int)"), self._stereoModeComboBoxChanged ) change_connect(self.stereoSeparationSlider, SIGNAL("valueChanged(int)"), self._stereoModeSeparationSliderChanged ) change_connect(self.stereoAngleSlider, SIGNAL("valueChanged(int)"), self._stereoModeAngleSliderChanged ) def ok_btn_clicked(self): """ Slot for the OK button """ self.win.toolsDone() def cancel_btn_clicked(self): """ Slot for the Cancel button. """ #TODO: Cancel button needs to be removed. See comment at the top self.win.toolsDone() def show(self): """ Shows the Property Manager. Overrides PM_Dialog.show. """ PM_Dialog.show(self) # self.updateDnaDisplayStyleWidgets() self.connect_or_disconnect_signals(isConnect = True) def close(self): """ Closes the Property Manager. Overrides PM_Dialog.close. """ self.connect_or_disconnect_signals(False) PM_Dialog.close(self) def _addGroupBoxes( self ): """ Add the Property Manager group boxes. """ self._pmGroupBox1 = PM_GroupBox( self, title = "Settings") self._loadGroupBox1( self._pmGroupBox1 ) #@ self._pmGroupBox1.hide() def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ #stereoSettingsGroupBox = PM_GroupBox( None ) self.stereoEnabledCheckBox = \ PM_CheckBox(pmGroupBox, text = 'Enable Stereo View', widgetColumn = 1 ) stereoModeChoices = ['Relaxed view', 'Cross-eyed view', 'Red/blue anaglyphs', 'Red/cyan anaglyphs', 'Red/green anaglyphs'] self.stereoModeComboBox = \ PM_ComboBox( pmGroupBox, label = "Stereo Mode:", choices = stereoModeChoices, setAsDefault = True) self.stereoModeComboBox.setCurrentIndex(env.prefs[stereoViewMode_prefs_key]-1) self.stereoSeparationSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 300, label = 'Separation' ) self.stereoSeparationSlider.setValue(env.prefs[stereoViewSeparation_prefs_key]) self.stereoAngleSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 100, label = 'Angle' ) self.stereoAngleSlider.setValue(env.prefs[stereoViewAngle_prefs_key]) self._updateWidgets() def _addWhatsThisText( self ): """ What's This text for widgets in the Stereo Property Manager. """ pass def _addToolTipText(self): """ Tool Tip text for widgets in the Stereo Property Manager. """ pass def _enableStereo(self, enabled): """ Enable stereo view. """ if self.o: self.o.stereo_enabled = enabled # switch to perspective mode if enabled: # store current projection mode self.o.last_ortho = self.o.ortho if self.o.ortho is not 0: # dont use glpane.setViewProjection # because we don't want to modify # default projection setting self.o.ortho = 0 else: # restore default mode if hasattr(self.o, "last_ortho"): projection = self.o.last_ortho if self.o.ortho != projection: self.o.ortho = projection self._updateWidgets() self.o.gl_update() def _stereoModeComboBoxChanged(self, mode): """ Change stereo mode. """ env.prefs[stereoViewMode_prefs_key] = mode + 1 self._updateSeparationSlider() if self.o: self.o.gl_update() def _stereoModeSeparationSliderChanged(self, value): """ Change stereo view separation. """ env.prefs[stereoViewSeparation_prefs_key] = value if self.o: self.o.gl_update() def _stereoModeAngleSliderChanged(self, value): """ Change stereo view angle. """ env.prefs[stereoViewAngle_prefs_key] = value if self.o: self.o.gl_update() def _updateSeparationSlider(self): if self.stereoModeComboBox.currentIndex() >= 2: # for anaglyphs disable the separation slider self.stereoSeparationSlider.setEnabled(False) else: # otherwise, enable the separation slider self.stereoSeparationSlider.setEnabled(True) def _updateWidgets(self): if self.stereoEnabledCheckBox.isChecked(): self.stereoModeComboBox.setEnabled(True) self.stereoSeparationSlider.setEnabled(True) self.stereoAngleSlider.setEnabled(True) self._updateSeparationSlider() else: self.stereoModeComboBox.setEnabled(False) self.stereoSeparationSlider.setEnabled(False) self.stereoAngleSlider.setEnabled(False)
class StereoProperties_PropertyManager(PM_Dialog, DebugMenuMixin): """ The StereoProperties_PropertyManager class provides a Property Manager for the Stereo View command. @ivar title: The title that appears in the property manager header. @type title: str @ivar pmName: The name of this property manager. This is used to set the name of the PM_Dialog object via setObjectName(). @type name: str @ivar iconPath: The relative path to the PNG file that contains a 22 x 22 icon image that appears in the PM header. @type iconPath: str """ title = "Stereo View" pmName = title iconPath = "ui/actions/View/Stereo_View.png" def __init__(self, parentCommand): """ Constructor for the property manager. """ self.parentMode = parentCommand self.w = self.parentMode.w self.win = self.parentMode.w self.pw = self.parentMode.pw self.o = self.win.glpane PM_Dialog.__init__(self, self.pmName, self.iconPath, self.title) DebugMenuMixin._init1(self) self.showTopRowButtons( PM_DONE_BUTTON | \ PM_WHATS_THIS_BUTTON) msg = "Modify the Stereo View settings below." self.updateMessage(msg) def connect_or_disconnect_signals(self, isConnect): """ Connect or disconnect widget signals sent to their slot methods. This can be overridden in subclasses. By default it does nothing. @param isConnect: If True the widget will send the signals to the slot method. @type isConnect: boolean """ if isConnect: change_connect = self.win.connect else: change_connect = self.win.disconnect change_connect(self.stereoEnabledCheckBox, SIGNAL("toggled(bool)"), self._enableStereo) change_connect(self.stereoModeComboBox, SIGNAL("currentIndexChanged(int)"), self._stereoModeComboBoxChanged) change_connect(self.stereoSeparationSlider, SIGNAL("valueChanged(int)"), self._stereoModeSeparationSliderChanged) change_connect(self.stereoAngleSlider, SIGNAL("valueChanged(int)"), self._stereoModeAngleSliderChanged) def ok_btn_clicked(self): """ Slot for the OK button """ self.win.toolsDone() def cancel_btn_clicked(self): """ Slot for the Cancel button. """ #TODO: Cancel button needs to be removed. See comment at the top self.win.toolsDone() def show(self): """ Shows the Property Manager. Overrides PM_Dialog.show. """ PM_Dialog.show(self) # self.updateDnaDisplayStyleWidgets() self.connect_or_disconnect_signals(isConnect=True) def close(self): """ Closes the Property Manager. Overrides PM_Dialog.close. """ self.connect_or_disconnect_signals(False) PM_Dialog.close(self) def _addGroupBoxes(self): """ Add the Property Manager group boxes. """ self._pmGroupBox1 = PM_GroupBox(self, title="Settings") self._loadGroupBox1(self._pmGroupBox1) #@ self._pmGroupBox1.hide() def _loadGroupBox1(self, pmGroupBox): """ Load widgets in group box. """ #stereoSettingsGroupBox = PM_GroupBox( None ) self.stereoEnabledCheckBox = \ PM_CheckBox(pmGroupBox, text = 'Enable Stereo View', widgetColumn = 1 ) stereoModeChoices = [ 'Relaxed view', 'Cross-eyed view', 'Red/blue anaglyphs', 'Red/cyan anaglyphs', 'Red/green anaglyphs' ] self.stereoModeComboBox = \ PM_ComboBox( pmGroupBox, label = "Stereo Mode:", choices = stereoModeChoices, setAsDefault = True) self.stereoModeComboBox.setCurrentIndex( env.prefs[stereoViewMode_prefs_key] - 1) self.stereoSeparationSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 300, label = 'Separation' ) self.stereoSeparationSlider.setValue( env.prefs[stereoViewSeparation_prefs_key]) self.stereoAngleSlider = \ PM_Slider( pmGroupBox, currentValue = 50, minimum = 0, maximum = 100, label = 'Angle' ) self.stereoAngleSlider.setValue(env.prefs[stereoViewAngle_prefs_key]) self._updateWidgets() def _addWhatsThisText(self): """ What's This text for widgets in the Stereo Property Manager. """ pass def _addToolTipText(self): """ Tool Tip text for widgets in the Stereo Property Manager. """ pass def _enableStereo(self, enabled): """ Enable stereo view. """ if self.o: self.o.stereo_enabled = enabled # switch to perspective mode if enabled: # store current projection mode self.o.last_ortho = self.o.ortho if self.o.ortho is not 0: # dont use glpane.setViewProjection # because we don't want to modify # default projection setting self.o.ortho = 0 else: # restore default mode if hasattr(self.o, "last_ortho"): projection = self.o.last_ortho if self.o.ortho != projection: self.o.ortho = projection self._updateWidgets() self.o.gl_update() def _stereoModeComboBoxChanged(self, mode): """ Change stereo mode. """ env.prefs[stereoViewMode_prefs_key] = mode + 1 self._updateSeparationSlider() if self.o: self.o.gl_update() def _stereoModeSeparationSliderChanged(self, value): """ Change stereo view separation. """ env.prefs[stereoViewSeparation_prefs_key] = value if self.o: self.o.gl_update() def _stereoModeAngleSliderChanged(self, value): """ Change stereo view angle. """ env.prefs[stereoViewAngle_prefs_key] = value if self.o: self.o.gl_update() def _updateSeparationSlider(self): if self.stereoModeComboBox.currentIndex() >= 2: # for anaglyphs disable the separation slider self.stereoSeparationSlider.setEnabled(False) else: # otherwise, enable the separation slider self.stereoSeparationSlider.setEnabled(True) def _updateWidgets(self): if self.stereoEnabledCheckBox.isChecked(): self.stereoModeComboBox.setEnabled(True) self.stereoSeparationSlider.setEnabled(True) self.stereoAngleSlider.setEnabled(True) self._updateSeparationSlider() else: self.stereoModeComboBox.setEnabled(False) self.stereoSeparationSlider.setEnabled(False) self.stereoAngleSlider.setEnabled(False)