def __getDebugGroupbox(self): " Creates the debug settings groupbox " dbgGroupbox = QGroupBox(self) dbgGroupbox.setTitle("Debugger") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( dbgGroupbox.sizePolicy().hasHeightForWidth()) dbgGroupbox.setSizePolicy(sizePolicy) dbgLayout = QVBoxLayout(dbgGroupbox) self.__reportExceptionCheckBox = QCheckBox("Report &exceptions") self.__reportExceptionCheckBox.stateChanged.connect( self.__onReportExceptionChanged) self.__traceInterpreterCheckBox = QCheckBox("T&race interpreter libs") self.__traceInterpreterCheckBox.stateChanged.connect( self.__onTraceInterpreterChanged) self.__stopAtFirstCheckBox = QCheckBox("Stop at first &line") self.__stopAtFirstCheckBox.stateChanged.connect( self.__onStopAtFirstChanged) self.__autoforkCheckBox = QCheckBox("&Fork without asking") self.__autoforkCheckBox.stateChanged.connect(self.__onAutoforkChanged) self.__debugChildCheckBox = QCheckBox("Debu&g child process") self.__debugChildCheckBox.stateChanged.connect(self.__onDebugChild) dbgLayout.addWidget(self.__reportExceptionCheckBox) dbgLayout.addWidget(self.__traceInterpreterCheckBox) dbgLayout.addWidget(self.__stopAtFirstCheckBox) dbgLayout.addWidget(self.__autoforkCheckBox) dbgLayout.addWidget(self.__debugChildCheckBox) return dbgGroupbox
def __getProfileLimitsGroupbox(self): " Creates the profile limits groupbox " limitsGroupbox = QGroupBox(self) limitsGroupbox.setTitle("Profiler diagram limits") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( limitsGroupbox.sizePolicy().hasHeightForWidth()) limitsGroupbox.setSizePolicy(sizePolicy) layoutLimits = QGridLayout(limitsGroupbox) self.__nodeLimitEdit = QLineEdit() self.__nodeLimitEdit.textEdited.connect(self.__setRunButtonProps) self.__nodeLimitValidator = QDoubleValidator(0.0, 100.0, 2, self) self.__nodeLimitValidator.setNotation( QDoubleValidator.StandardNotation) self.__nodeLimitEdit.setValidator(self.__nodeLimitValidator) nodeLimitLabel = QLabel("Hide nodes below") self.__edgeLimitEdit = QLineEdit() self.__edgeLimitEdit.textEdited.connect(self.__setRunButtonProps) self.__edgeLimitValidator = QDoubleValidator(0.0, 100.0, 2, self) self.__edgeLimitValidator.setNotation( QDoubleValidator.StandardNotation) self.__edgeLimitEdit.setValidator(self.__edgeLimitValidator) edgeLimitLabel = QLabel("Hide edges below") layoutLimits.addWidget(nodeLimitLabel, 0, 0) layoutLimits.addWidget(self.__nodeLimitEdit, 0, 1) layoutLimits.addWidget(QLabel("%"), 0, 2) layoutLimits.addWidget(edgeLimitLabel, 1, 0) layoutLimits.addWidget(self.__edgeLimitEdit, 1, 1) layoutLimits.addWidget(QLabel("%"), 1, 2) return limitsGroupbox
def __init__(self,resource_name,parent=None): super().__init__(parent) self.inst = HP54616B(resource_name) self.inst.initialize() self.timer = QTimer(self) self.timer.setSingleShot(True) self.timer.timeout.connect(self.refresh) self.ui = Ui_main_window() self.ui.setupUi(self) connect_driver(self,self.inst) self.channelControls = [] for channel in self.inst.channels: chan = QGroupBox() self.channelControls.append(chan) chan.n = channel chan_ui = Ui_channel_controls() chan_ui.setupUi(chan) chan.setTitle('Channel {:d}'.format(channel)) connect_feat(chan_ui.range, self.inst, 'range', channel) connect_feat(chan_ui.offset, self.inst, 'offset', channel) connect_feat(chan_ui.visible, self.inst, 'visible', channel) self.ui.controlBox.addWidget(chan) self.figure = Figure() self.figureCanvas = FigureCanvasQTAgg(self.figure) self.ui.plotBox.addWidget(self.figureCanvas) self.axes = self.figure.add_subplot(111) self.ui.plot.clicked.connect(self.refresh) self.ui.save.clicked.connect(self.save) self.ui.checkMosaic.stateChanged.connect(self.setMosaic) self.ui.refreshAuto.clicked.connect(self.refreshConfig) self.plotDelay = self.findChild((QWidget,),'refreshDelay') self.mosaic = False
def __getIDEWideGroupbox(self): " Creates the IDE wide groupbox " ideGroupbox = QGroupBox(self) ideGroupbox.setTitle("IDE Wide Settings") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( ideGroupbox.sizePolicy().hasHeightForWidth()) ideGroupbox.setSizePolicy(sizePolicy) layoutIDE = QHBoxLayout(ideGroupbox) termGroupbox = self.__getTermGroupbox() termGroupbox.setTitle("Terminal to run in") layoutIDE.addWidget(termGroupbox) if self.__action == "profile": # Profile version of the dialog limitsGroupbox = self.__getProfileLimitsGroupbox() layoutIDE.addWidget(limitsGroupbox) else: # Debug version of the dialog dbgGroupbox = self.__getDebugGroupbox() layoutIDE.addWidget(dbgGroupbox) return ideGroupbox
def __getProfileLimitsGroupbox( self ): " Creates the profile limits groupbox " limitsGroupbox = QGroupBox( self ) limitsGroupbox.setTitle( "Profiler diagram limits" ) sizePolicy = QSizePolicy( QSizePolicy.Expanding, QSizePolicy.Preferred ) sizePolicy.setHorizontalStretch( 0 ) sizePolicy.setVerticalStretch( 0 ) sizePolicy.setHeightForWidth( limitsGroupbox.sizePolicy().hasHeightForWidth() ) limitsGroupbox.setSizePolicy( sizePolicy ) layoutLimits = QGridLayout( limitsGroupbox ) self.__nodeLimitEdit = QLineEdit() self.__nodeLimitEdit.textEdited.connect( self.__setRunButtonProps ) self.__nodeLimitValidator = QDoubleValidator( 0.0, 100.0, 2, self ) self.__nodeLimitValidator.setNotation( QDoubleValidator.StandardNotation ) self.__nodeLimitEdit.setValidator( self.__nodeLimitValidator ) nodeLimitLabel = QLabel( "Hide nodes below" ) self.__edgeLimitEdit = QLineEdit() self.__edgeLimitEdit.textEdited.connect( self.__setRunButtonProps ) self.__edgeLimitValidator = QDoubleValidator( 0.0, 100.0, 2, self ) self.__edgeLimitValidator.setNotation( QDoubleValidator.StandardNotation ) self.__edgeLimitEdit.setValidator( self.__edgeLimitValidator ) edgeLimitLabel = QLabel( "Hide edges below" ) layoutLimits.addWidget( nodeLimitLabel, 0, 0 ) layoutLimits.addWidget( self.__nodeLimitEdit, 0, 1 ) layoutLimits.addWidget( QLabel( "%" ), 0, 2 ) layoutLimits.addWidget( edgeLimitLabel, 1, 0 ) layoutLimits.addWidget( self.__edgeLimitEdit, 1, 1 ) layoutLimits.addWidget( QLabel( "%" ), 1, 2 ) return limitsGroupbox
def __getIDEWideGroupbox( self ): " Creates the IDE wide groupbox " ideGroupbox = QGroupBox( self ) ideGroupbox.setTitle( "IDE Wide Settings" ) sizePolicy = QSizePolicy( QSizePolicy.Expanding, QSizePolicy.Preferred ) sizePolicy.setHorizontalStretch( 0 ) sizePolicy.setVerticalStretch( 0 ) sizePolicy.setHeightForWidth( ideGroupbox.sizePolicy().hasHeightForWidth() ) ideGroupbox.setSizePolicy( sizePolicy ) layoutIDE = QHBoxLayout( ideGroupbox ) termGroupbox = self.__getTermGroupbox() termGroupbox.setTitle( "Terminal to run in" ) layoutIDE.addWidget( termGroupbox ) if self.__action == "profile": # Profile version of the dialog limitsGroupbox = self.__getProfileLimitsGroupbox() layoutIDE.addWidget( limitsGroupbox ) else: # Debug version of the dialog dbgGroupbox = self.__getDebugGroupbox() layoutIDE.addWidget( dbgGroupbox ) return ideGroupbox
def __getDebugGroupbox( self ): " Creates the debug settings groupbox " dbgGroupbox = QGroupBox( self ) dbgGroupbox.setTitle( "Debugger" ) sizePolicy = QSizePolicy( QSizePolicy.Expanding, QSizePolicy.Preferred ) sizePolicy.setHorizontalStretch( 0 ) sizePolicy.setVerticalStretch( 0 ) sizePolicy.setHeightForWidth( dbgGroupbox.sizePolicy().hasHeightForWidth() ) dbgGroupbox.setSizePolicy( sizePolicy ) dbgLayout = QVBoxLayout( dbgGroupbox ) self.__reportExceptionCheckBox = QCheckBox( "Report &exceptions" ) self.__reportExceptionCheckBox.stateChanged.connect( self.__onReportExceptionChanged ) self.__traceInterpreterCheckBox = QCheckBox( "T&race interpreter libs" ) self.__traceInterpreterCheckBox.stateChanged.connect( self.__onTraceInterpreterChanged ) self.__stopAtFirstCheckBox = QCheckBox( "Stop at first &line" ) self.__stopAtFirstCheckBox.stateChanged.connect( self.__onStopAtFirstChanged ) self.__autoforkCheckBox = QCheckBox( "&Fork without asking" ) self.__autoforkCheckBox.stateChanged.connect(self.__onAutoforkChanged ) self.__debugChildCheckBox = QCheckBox( "Debu&g child process" ) self.__debugChildCheckBox.stateChanged.connect( self.__onDebugChild ) dbgLayout.addWidget( self.__reportExceptionCheckBox ) dbgLayout.addWidget( self.__traceInterpreterCheckBox ) dbgLayout.addWidget( self.__stopAtFirstCheckBox ) dbgLayout.addWidget( self.__autoforkCheckBox ) dbgLayout.addWidget( self.__debugChildCheckBox ) return dbgGroupbox
def buildAntispam(self, layout, row, col): antispam = QGroupBox(self) antispam.setTitle(tr('Antispam')) antispam_layout = QFormLayout(antispam) antispam_enable = QCheckBox() info = QLabel(tr("This will add an <code>X-Spam-Score:</code> header " "field to all the messages and add a <code>Subject:</code> line " "beginning with *<i>SPAM</i>* and containing the original subject " "to the messages detected as spam.")) info.setWordWrap(True) antispam_layout.addRow(info) antispam_layout.addRow(tr('Activate the antispam'), antispam_enable) mark_spam_level = QDoubleSpinBox(self) mark_spam_level.setDecimals(1) antispam_layout.addRow(tr('Mark the message as spam if its score is greater than'), mark_spam_level) deny_spam_level = QDoubleSpinBox(self) deny_spam_level.setDecimals(1) antispam_layout.addRow(tr('Refuse the message if its score is greater than'), deny_spam_level) # enable/disable spam levels self.connect(antispam_enable, SIGNAL('toggled(bool)'), mark_spam_level.setEnabled) self.connect(antispam_enable, SIGNAL('toggled(bool)'), deny_spam_level.setEnabled) # update config self.connect(mark_spam_level, SIGNAL('valueChanged(double)'), self.setMarkSpamLevel) self.connect(deny_spam_level, SIGNAL('valueChanged(double)'), self.setDenySpamLevel) self.connect(antispam_enable, SIGNAL('clicked(bool)'), self.setAntispamEnabled) layout.addWidget(antispam, row, col) self.mainwindow.writeAccessNeeded(mark_spam_level, deny_spam_level) return antispam_enable, mark_spam_level, deny_spam_level
def buildGui(self): layout = QFormLayout(self) self.is_default = False self.setTitle(tr("Route specification")) self.setSubTitle(tr("Specify a route")) self.network = NetworkCombo(parent=self, modelname=MODEL_NETWORKS_EXCL_HA) layout.addRow(tr("Network :"), self.network) dst_group = QGroupBox() layout.addRow(dst_group) dst_group.setTitle(tr("Route parameters")) form = QGridLayout(dst_group) self.destination = NetworkEdit() self.gateway = IpEdit() self.registerField("destination", self.destination) form.addWidget(QLabel(tr("Destination")), 0, 0) form.addWidget(self.destination, 0, 1) self.connect(self.gateway, SIGNAL('textChanged(QString)'), self.ifCompleteChanged) self.connect(self.destination, SIGNAL('textChanged(QString)'), self.ifCompleteChanged) build_default = QPushButton(tr("Build a default route")) form.addWidget(build_default, 0, 2) self.connect(build_default, SIGNAL('clicked()'), self.setDefaultRoute) self.registerField("gateway", self.gateway) form.addWidget(QLabel(tr("Gateway")), 2, 0) form.addWidget(self.gateway, 2, 1) self.message = Help() form.addWidget(self.message, 3, 0, 1, 3)
def buildAntivirus(self, layout, row, col): antivirus = QGroupBox(self) antivirus.setTitle(tr('Antivirus')) antivirus_layout = QFormLayout(antivirus) antivirus_enable = QCheckBox() antivirus_layout.addRow(tr('Enable antivirus'), antivirus_enable) self.connect(antivirus_enable, SIGNAL('clicked(bool)'), self.setAntivirusEnabled) layout.addWidget(antivirus, row, col) return antivirus_enable
def buildPostProcessorForm(self, theParams): """Build Post Processor Tab Args: * theParams - dictionary containing element of form Returns: not applicable """ # create postprocessors tab myTab = QWidget() myFormLayout = QFormLayout(myTab) myFormLayout.setLabelAlignment(Qt.AlignLeft) self.tabWidget.addTab(myTab, self.tr('Postprocessors')) self.tabWidget.tabBar().setVisible(True) # create element for the tab myValues = {} for myLabel, myOptions in theParams.items(): myInputValues = {} # NOTE (gigih) : 'params' is assumed as dictionary if 'params' in myOptions: myGroupBox = QGroupBox() myGroupBox.setCheckable(True) myGroupBox.setTitle(get_postprocessor_human_name(myLabel)) # NOTE (gigih): is 'on' always exist?? myGroupBox.setChecked(myOptions.get('on')) myInputValues['on'] = self.bind(myGroupBox, 'checked', bool) myLayout = QFormLayout(myGroupBox) myGroupBox.setLayout(myLayout) # create widget element from 'params' myInputValues['params'] = {} for myKey, myValue in myOptions['params'].items(): myHumanName = get_postprocessor_human_name(myKey) myInputValues['params'][myKey] = self.buildWidget( myLayout, myHumanName, myValue) myFormLayout.addRow(myGroupBox, None) elif 'on' in myOptions: myCheckBox = QCheckBox() myCheckBox.setText(get_postprocessor_human_name(myLabel)) myCheckBox.setChecked(myOptions['on']) myInputValues['on'] = self.bind(myCheckBox, 'checked', bool) myFormLayout.addRow(myCheckBox, None) else: raise NotImplementedError('This case is not handled for now') myValues[myLabel] = myInputValues self.values['postprocessors'] = myValues
class Score(_base.Group, scoreproperties.ScoreProperties): @staticmethod def title(_=_base.translate): return _("Score") def createWidgets(self, layout): self.pieceLabel = QLabel() self.piece = QLineEdit() self.pieceLabel.setBuddy(self.piece) self.opusLabel = QLabel() self.opus = QLineEdit() self.opusLabel.setBuddy(self.opus) self.scoreProps = QGroupBox(checkable=True, checked=False) scoreproperties.ScoreProperties.createWidgets(self) grid = QGridLayout() grid.addWidget(self.pieceLabel, 0, 0) grid.addWidget(self.piece, 0, 1) grid.addWidget(self.opusLabel, 1, 0) grid.addWidget(self.opus, 1, 1) layout.addLayout(grid) layout.addWidget(self.scoreProps) layout = QVBoxLayout() self.scoreProps.setLayout(layout) scoreproperties.ScoreProperties.layoutWidgets(self, layout) scorewiz = self.scoreProps.window() self.setPitchLanguage(scorewiz.pitchLanguage()) scorewiz.pitchLanguageChanged.connect(self.setPitchLanguage) def translateWidgets(self): self.pieceLabel.setText(_("Piece:")) self.opusLabel.setText(_("Opus:")) self.scoreProps.setTitle(_("Properties")) scoreproperties.ScoreProperties.translateWidgets(self) def accepts(self): return (StaffGroup, _base.Part) def makeNode(self, node): score = ly.dom.Score(node) h = ly.dom.Header() piece = self.piece.text().strip() opus = self.opus.text().strip() if piece: h['piece'] = ly.dom.QuotedString(piece) if opus: h['opus'] = ly.dom.QuotedString(opus) if len(h): score.append(h) return score def globalSection(self, builder): if self.scoreProps.isChecked(): return scoreproperties.ScoreProperties.globalSection(self, builder)
class Score(_base.Group, scoreproperties.ScoreProperties): @staticmethod def title(_=_base.translate): return _("Score") def createWidgets(self, layout): self.pieceLabel = QLabel() self.piece = QLineEdit() self.pieceLabel.setBuddy(self.piece) self.opusLabel = QLabel() self.opus = QLineEdit() self.opusLabel.setBuddy(self.opus) self.scoreProps = QGroupBox(checkable=True, checked=False) scoreproperties.ScoreProperties.createWidgets(self) grid = QGridLayout() grid.addWidget(self.pieceLabel, 0 ,0) grid.addWidget(self.piece, 0, 1) grid.addWidget(self.opusLabel, 1, 0) grid.addWidget(self.opus, 1, 1) layout.addLayout(grid) layout.addWidget(self.scoreProps) layout = QVBoxLayout() self.scoreProps.setLayout(layout) scoreproperties.ScoreProperties.layoutWidgets(self, layout) scorewiz = self.scoreProps.window() self.setPitchLanguage(scorewiz.pitchLanguage()) scorewiz.pitchLanguageChanged.connect(self.setPitchLanguage) def translateWidgets(self): self.pieceLabel.setText(_("Piece:")) self.opusLabel.setText(_("Opus:")) self.scoreProps.setTitle(_("Properties")) scoreproperties.ScoreProperties.translateWidgets(self) def accepts(self): return (StaffGroup, _base.Part) def makeNode(self, node): score = ly.dom.Score(node) h = ly.dom.Header() piece = self.piece.text().strip() opus = self.opus.text().strip() if piece: h['piece'] = ly.dom.QuotedString(piece) if opus: h['opus'] = ly.dom.QuotedString(opus) if len(h): score.append(h) return score def globalSection(self, builder): if self.scoreProps.isChecked(): return scoreproperties.ScoreProperties.globalSection(self, builder)
def build_post_processor_form(self, parameters): """Build Post Processor Tab. :param parameters: A Dictionary containing element of form :type parameters: dict """ # create postprocessors tab tab = QWidget() form_layout = QFormLayout(tab) form_layout.setLabelAlignment(Qt.AlignLeft) self.tabWidget.addTab(tab, self.tr('Postprocessors')) self.tabWidget.tabBar().setVisible(True) # create element for the tab values = OrderedDict() for label, options in parameters.items(): input_values = OrderedDict() # NOTE (gigih) : 'params' is assumed as dictionary if 'params' in options: group_box = QGroupBox() group_box.setCheckable(True) group_box.setTitle(get_postprocessor_human_name(label)) # NOTE (gigih): is 'on' always exist?? # (MB) should always be there group_box.setChecked(options.get('on')) input_values['on'] = self.bind(group_box, 'checked', bool) layout = QFormLayout(group_box) group_box.setLayout(layout) # create widget element from 'params' input_values['params'] = OrderedDict() for key, value in options['params'].items(): input_values['params'][key] = self.build_widget( layout, key, value) form_layout.addRow(group_box, None) elif 'on' in options: checkbox = QCheckBox() checkbox.setText(get_postprocessor_human_name(label)) checkbox.setChecked(options['on']) input_values['on'] = self.bind(checkbox, 'checked', bool) form_layout.addRow(checkbox, None) else: raise NotImplementedError('This case is not handled for now') values[label] = input_values self.values['postprocessors'] = values
def _parseDict(self, config, ui): l = QVBoxLayout() lst = list(config.keys()) for k in lst: t = type(config[k]) if t == type(int()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QIntValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(float()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QDoubleValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(list()): hbox = QHBoxLayout() label = QLabel(k) edit = QComboBox() i = 0 for s in config[k][0]: edit.addItem(s) if i == config[k][1]: edit.setCurrentIndex(i) i += 1 hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox) elif t == type(dict()): gbox = QGroupBox() gbox.setTitle(k) ui[k] = {"gbox": gbox} l2 = self._parseDict(config[k], ui[k]) ui[k]["layout"] = l2 gbox.setLayout(l2) l.addWidget(gbox) return l
def _parseDict(self, config, ui): l = QVBoxLayout() lst = list(config.keys()) for k in lst: t = type(config[k]) if t == type(int()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QIntValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(float()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QDoubleValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(list()): hbox = QHBoxLayout() label = QLabel(k) edit = QComboBox() i = 0 for s in config[k][0]: edit.addItem(s) if i == config[k][1]: edit.setCurrentIndex(i) i += 1 hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox) elif t == type(dict()): gbox = QGroupBox() gbox.setTitle(k) ui[k] = {"gbox":gbox} l2 = self._parseDict(config[k], ui[k]) ui[k]["layout"] = l2 gbox.setLayout(l2) l.addWidget(gbox) return l
def buildAdminMail(self, layout, row, col): admin_mail = QGroupBox(self) admin_mail.setTitle(tr("Administrator email address")) admin_mail_layout = QGridLayout(admin_mail) admin_mail_info = QLabel(tr("Administrator email address (EdenWall will send the system alerts to this address)")) admin_mail_info.setWordWrap(True) admin_mail_edit = MailEdit() admin_mail_edit.setMinimumWidth(admin_mail_edit.fontMetrics().averageCharWidth() * 15) admin_mail_edit.setMaximumWidth(admin_mail_edit.fontMetrics().averageCharWidth() * 45) admin_mail_layout.addWidget(admin_mail_info, 0, 0) admin_mail_layout.addWidget(admin_mail_edit, 1, 0) admin_mail_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) , 2, 0) self.connect(admin_mail_edit, SIGNAL('textEdited(QString)'), self.setAdminMail) layout.addWidget(admin_mail, row, col) self.mainwindow.writeAccessNeeded(admin_mail_info, admin_mail_edit) return admin_mail_edit
def buildChooseLanguage(self, layout, row, col): language = QGroupBox(self) language.setTitle(tr('Language for emails')) language_layout = QGridLayout(language) language_info = QLabel(tr('Language for emails sent by EdenWall to the Administrator')) language_info.setWordWrap(True) language_choose = QComboBox() for name in ContactConf.CODE_TO_NAME.itervalues(): language_choose.addItem(name) language_layout.addWidget(language_info, 0, 0, 1, 0) language_layout.addWidget(language_choose, 1, 0) language_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) , 1, 1) self.connect(language_choose, SIGNAL('activated(QString)'), self.setLanguage) layout.addWidget(language, row, col) self.mainwindow.writeAccessNeeded(language_info, language_choose) return language_choose
def buildOutgoing(self, layout, row, col): outgoing = QGroupBox(self) outgoing.setTitle(tr('Outgoing emails')) outgoing_layout = QGridLayout(outgoing) relayed_net = NetworkListEdit(self) relayed_net.setMaximumHeight(relayed_net.fontMetrics().height() * 5) self.connect(relayed_net, SIGNAL("textChanged()"), self.setMailModified) outgoing_layout.addWidget(QLabel(tr('Networks for which EdenWall relays emails')), 0, 0) outgoing_layout.addWidget(relayed_net, 1, 0, 1, 2) outgoing_layout.addWidget(QLabel(tr( """If outgoing mail should be relayed through a 'smarthost', configure this host in the "Contact" page of the "Services" tab.""" ))) layout.addWidget(outgoing, row, col) return relayed_net
def buildTestMail(self, layout, row, col): test = QGroupBox(self) test.setTitle(tr('Test for emails')) test_layout = QGridLayout(test) test_info = QLabel(tr( "To check the configuration, you can send a test " "email to your contact email address. Be sure to configure the " "smarthost in the Mail page if needed." )) test_info.setWordWrap(True) test_button = Button(text=tr('Send test email'), flat=False) test_layout.addWidget(test_info, 0, 0, 1, 0) test_layout.addWidget(test_button, 1, 0) test_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) , 1, 1) self.connect(test_button, SIGNAL('clicked()'), self.sendTestMail) layout.addWidget(test, row, col) self.mainwindow.writeAccessNeeded(test_info, test_button) return test_button
def buildTestMail(self, layout, row, col): test = QGroupBox(self) test.setTitle(tr('Test for emails')) test_layout = QGridLayout(test) test_info = QLabel(tr('To check the configuration, you can send a test ' 'email to the email address of your contact. Be sure to configure the ' 'smarthost in the Email page if you need one.')) test_info.setWordWrap(True) test_button = Button(text=tr('Send test email'), flat=False) test_layout.addWidget(test_info, 0, 0, 1, 2) test_layout.addWidget(test_button, 1, 0) test_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Preferred), 1, 1) self.connect(test_button, SIGNAL('clicked()'), self.sendTestMail) layout.addWidget(test, row, col) return test_button
def __init__(self, client, parent): ScrollArea.__init__(self) self.client = client self.mainwindow = parent self.form = QFormLayout(self) title = QLabel("<H1>Services</H1>") self.form.addRow(title) self.monitor = None group = QGroupBox() group.setTitle(self.tr("System Services Status")) box = QVBoxLayout(group) #parent is expected to be MainWindow ! self.monitor = MonitorWindow(client, self, parent) box.addWidget(self.monitor) self.form.addRow(group)
def buildSenderMail(self, layout, row, col): sender_mail = QGroupBox(self) sender_mail.setTitle(tr("Sender email address for system messages")) sender_mail_layout = QGridLayout(sender_mail) sender_mail_info = QLabel( tr("Email address that will be used as the sender address in the emails sent to the administrator by EdenWall.") ) sender_mail_info.setWordWrap(True) sender_mail_edit = MailEdit() sender_mail_edit.setMinimumWidth(sender_mail_edit.fontMetrics().averageCharWidth() * 15) sender_mail_edit.setMaximumWidth(sender_mail_edit.fontMetrics().averageCharWidth() * 45) sender_mail_layout.addWidget(sender_mail_info, 0, 0) sender_mail_layout.addWidget(sender_mail_edit, 1, 0) sender_mail_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) , 2, 0) self.connect(sender_mail_edit, SIGNAL('textEdited(QString)'), self.setSenderMail) layout.addWidget(sender_mail, row, col) self.mainwindow.writeAccessNeeded(sender_mail_info, sender_mail_edit) return sender_mail_edit
def buildOutgoing(self, layout, row, col): outgoing = QGroupBox(self) outgoing.setTitle(tr('Outgoing emails')) outgoing_layout = QGridLayout(outgoing) use_smarthost = QCheckBox() outgoing_layout.addWidget(QLabel(tr('Use smarthost')), 1, 0) outgoing_layout.addWidget(use_smarthost, 1, 1) mail_relay = IpOrFqdnEdit() outgoing_layout.addWidget(QLabel(tr('Host which relays EdenWall emails')), 2, 0) outgoing_layout.addWidget(mail_relay, 2, 1) self.mainwindow.writeAccessNeeded(use_smarthost, mail_relay) self.connect(use_smarthost, SIGNAL('toggled(bool)'), mail_relay.setEnabled) self.connect(use_smarthost, SIGNAL('clicked()'), partial(self.setModified, True)) self.connect(mail_relay, SIGNAL('textEdited(QString)'), self.setSmarthost) layout.addWidget(outgoing, row, col) return outgoing, use_smarthost, mail_relay
def __createLayout(self): """ Creates the dialog layout """ self.resize(450, 150) self.setSizeGripEnabled(True) verticalLayout = QVBoxLayout(self) whereGroupbox = QGroupBox(self) whereGroupbox.setTitle("Garbage collector message destination") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( whereGroupbox.sizePolicy().hasHeightForWidth()) whereGroupbox.setSizePolicy(sizePolicy) layoutWhere = QVBoxLayout(whereGroupbox) self.__silentRButton = QRadioButton(whereGroupbox) self.__silentRButton.setText("Silent") layoutWhere.addWidget(self.__silentRButton) self.__statusbarRButton = QRadioButton(whereGroupbox) self.__statusbarRButton.setText("Status bar") layoutWhere.addWidget(self.__statusbarRButton) self.__logtabRButton = QRadioButton(whereGroupbox) self.__logtabRButton.setText("Log tab") layoutWhere.addWidget(self.__logtabRButton) verticalLayout.addWidget(whereGroupbox) buttonBox = QDialogButtonBox(self) buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.__OKButton = buttonBox.button(QDialogButtonBox.Ok) self.__OKButton.setDefault(True) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.close) verticalLayout.addWidget(buttonBox) return
def __createLayout( self ): """ Creates the dialog layout """ self.resize( 450, 150 ) self.setSizeGripEnabled( True ) verticalLayout = QVBoxLayout( self ) whereGroupbox = QGroupBox( self ) whereGroupbox.setTitle( "Garbage collector message destination" ) sizePolicy = QSizePolicy( QSizePolicy.Expanding, QSizePolicy.Preferred ) sizePolicy.setHorizontalStretch( 0 ) sizePolicy.setVerticalStretch( 0 ) sizePolicy.setHeightForWidth( whereGroupbox.sizePolicy().hasHeightForWidth() ) whereGroupbox.setSizePolicy( sizePolicy ) layoutWhere = QVBoxLayout( whereGroupbox ) self.__silentRButton = QRadioButton( whereGroupbox ) self.__silentRButton.setText( "Silent" ) layoutWhere.addWidget( self.__silentRButton ) self.__statusbarRButton = QRadioButton( whereGroupbox ) self.__statusbarRButton.setText( "Status bar" ) layoutWhere.addWidget( self.__statusbarRButton ) self.__logtabRButton = QRadioButton( whereGroupbox ) self.__logtabRButton.setText( "Log tab" ) layoutWhere.addWidget( self.__logtabRButton ) verticalLayout.addWidget( whereGroupbox ) buttonBox = QDialogButtonBox( self ) buttonBox.setOrientation( Qt.Horizontal ) buttonBox.setStandardButtons( QDialogButtonBox.Ok | QDialogButtonBox.Cancel ) self.__OKButton = buttonBox.button( QDialogButtonBox.Ok ) self.__OKButton.setDefault( True ) buttonBox.accepted.connect( self.accept ) buttonBox.rejected.connect( self.close ) verticalLayout.addWidget( buttonBox ) return
def buildIncoming(self, layout, row, col): incoming = QGroupBox(self) incoming.setTitle(tr('Incoming emails')) incoming_layout = QGridLayout(incoming) incoming_info = QLabel(tr('Domains for which EdenWall relays emails')) relayed_domains = ListEdit() relayed_domains.headers = self.getColumnLabels() relayed_domains.readOnly = self.mainwindow.readonly relayed_domains.setColDelegate(self.createDelegateForColumn) relayed_domains.setEditInPopup(True) relayed_domains.displayUpDown = False self.connect(relayed_domains, SIGNAL('itemDeleted'), self.incomingDeleted) self.connect(relayed_domains, SIGNAL('itemAdded'), self.incomingAdded) self.connect(relayed_domains, SIGNAL('itemModified'), self.incomingModified) self.connect(relayed_domains, SIGNAL('itemDeleted'), self.updateConfig) self.connect(relayed_domains, SIGNAL('itemAdded'), self.updateConfig) self.connect(relayed_domains, SIGNAL('itemModified'), self.updateConfig) incoming_layout.addWidget(incoming_info, 0, 0) incoming_layout.addWidget(relayed_domains, 1, 0) layout.addWidget(incoming, row, col) return relayed_domains
def buildMixer(self): log.debug("Building mixer") self.MatrixButtonControls={} self.MatrixRotaryControls={} self.MatrixVolumeControls={} self.VolumeControls={} self.SelectorControls={} self.SPDIFmodeControls={} self.TriggerControls={} nb_pys_out = self.hw.getDiscrete("/HwInfo/PhysicalAudioOutCount") nb_pys_in = self.hw.getDiscrete("/HwInfo/PhysicalAudioInCount") outputtabslayout = QHBoxLayout( self ) outputtabs = QTabWidget(self) outputtabslayout.addWidget( outputtabs, 1 ) for outpair in range(nb_pys_out/2): tab = QWidget( outputtabs ) tablayout = QHBoxLayout( tab ) grpMonitor = QGroupBox(tab) tablayout.addWidget(grpMonitor) grpPlayback = QGroupBox(tab) tablayout.addWidget(grpPlayback) grpOutput = QGroupBox(tab) tablayout.addWidget(grpOutput) grpMonitor.setTitle("Monitor") grpPlayback.setTitle("Playback") grpOutput.setTitle("Output") # monitor controls grpMonitorLayout = QHBoxLayout() grpMonitor.setLayout(grpMonitorLayout); output_id = outpair * 2 for inpair in range(nb_pys_in/2): # create GUI elements strip = AfMonitorWidget( grpMonitor ) grpMonitorLayout.addWidget( strip, 1 ) input_id = inpair*2 strip.lblName.setText("In %d/%d" % (input_id+1, input_id+2)) # add the elements to the control structure self.MatrixButtonControls[strip.btnMute0] = ['/Mixer/MonitorMute', input_id, output_id] self.MatrixButtonControls[strip.btnMute1] = ['/Mixer/MonitorMute', input_id + 1, output_id + 1] self.MatrixButtonControls[strip.btnSolo0] = ['/Mixer/MonitorSolo', input_id, output_id] self.MatrixButtonControls[strip.btnSolo1] = ['/Mixer/MonitorSolo', input_id + 1, output_id + 1] self.MatrixRotaryControls[strip.rotPan0] = ['/Mixer/MonitorPan', input_id, output_id] self.MatrixRotaryControls[strip.rotPan1] = ['/Mixer/MonitorPan', input_id + 1, output_id + 1] self.MatrixVolumeControls[strip.sldGain0] = ['/Mixer/MonitorGain', input_id, output_id] self.MatrixVolumeControls[strip.sldGain1] = ['/Mixer/MonitorGain', input_id + 1, output_id + 1] # playback grpPlaybackLayout = QHBoxLayout() grpPlayback.setLayout(grpPlaybackLayout); strip = AfMonitorWidget( grpPlayback ) grpPlaybackLayout.addWidget(strip, 1) strip.lblName.setText("Playback %d/%d" % (output_id+1, output_id+2)) self.VolumeControls[strip.sldGain0] = ["/Mixer/PC%dGain" % (output_id)] self.VolumeControls[strip.sldGain1] = ["/Mixer/PC%dGain" % (output_id+1)] self.SelectorControls[strip.btnMute0] = ["/Mixer/PC%dMute" % (output_id)] self.SelectorControls[strip.btnMute1] = ["/Mixer/PC%dMute" % (output_id+1)] self.SelectorControls[strip.btnSolo0] = ["/Mixer/PC%dSolo" % (output_id)] self.SelectorControls[strip.btnSolo1] = ["/Mixer/PC%dSolo" % (output_id+1)] # fix up mixer strip gui strip.rotPan0.hide() strip.rotPan1.hide() # output grpOutputLayout = QHBoxLayout() grpOutput.setLayout(grpOutputLayout); strip = AfMonitorWidget( grpOutput ) grpOutputLayout.addWidget(strip, 1) strip.lblName.setText("Output %d/%d" % (output_id+1, output_id+2)) self.VolumeControls[strip.sldGain0] = ["/Mixer/OUT%dGain" % (output_id)] self.VolumeControls[strip.sldGain1] = ["/Mixer/OUT%dGain" % (output_id+1)] self.SelectorControls[strip.btnMute0] = ["/Mixer/OUT%dMute" % (output_id)] self.SelectorControls[strip.btnMute1] = ["/Mixer/OUT%dMute" % (output_id+1)] self.SelectorControls[strip.btnSolo0] = ["/Mixer/OUT%dNominal" % (output_id)] self.SelectorControls[strip.btnSolo1] = ["/Mixer/OUT%dNominal" % (output_id+1)] # fix up mixer strip gui strip.btnSolo0.setText("Pad") strip.btnSolo1.setText("Pad") strip.rotPan0.hide() strip.rotPan1.hide() # add the tab outputtabs.addTab( tab, "Out %d/%d" % (output_id+1, output_id+2)) # add an input config tab tab = QWidget( outputtabs ) tablayout = QHBoxLayout( tab ) for inpair in range(nb_pys_in): # create GUI elements log.debug("strip") grpInput = QGroupBox(tab) tablayout.addWidget(grpInput) grpInput.setTitle("In %d" % (inpair+1)) grpInputLayout = QVBoxLayout() grpInput.setLayout(grpInputLayout); label = QLabel( grpInput ) grpInputLayout.addWidget( label ) label.setText("In %d" % (inpair+1)) label.setAlignment(Qt.AlignCenter) btn = QToolButton( grpInput ) grpInputLayout.addWidget( btn ) btn.setText("Pad") btn.setCheckable(True) self.SelectorControls[btn] = ["/Mixer/IN%dNominal" % (inpair)] spacer = QSpacerItem(1,1,QSizePolicy.Minimum,QSizePolicy.Expanding) grpInputLayout.addItem(spacer) outputtabs.addTab( tab, "Input") # add an settings tab tab = QWidget( outputtabs ) tablayout = QHBoxLayout( tab ) outputtabs.addTab( tab, "Settings") settings = AfSettingsWidget( tab ) has_sw_phantom = self.hw.getDiscrete("/HwInfo/PhantomPower") if has_sw_phantom: self.SelectorControls[settings.btnPhantom] = ["/PhantomPower"] else: settings.btnPhantom.hide() self.TriggerControls[settings.btnSaveSettings] = ["/SaveSettings"] self.TriggerControls[settings.btnIdentify] = ["/Identify"] self.SPDIFmodeControls[settings.radioConsumer] = ["/SpdifMode", 0] self.SPDIFmodeControls[settings.radioProfessional] = ["/SpdifMode", 1] # Store a reference to the "save" button for later manipulation self.btnSaveSettings = settings.btnSaveSettings
def __init__(self, template, character, parent=None): super(SkillWidget, self).__init__(template, character, parent) self.__layout = QVBoxLayout() self.setLayout(self.__layout) self.__scrollArea = QScrollArea() ## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben. self.__scrollArea.setObjectName("transparentWidget") ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen. if os.name == "nt": self.__scrollArea.setStyleSheet( "QWidget#transparentWidget { background: transparent; }") self.__layout.addWidget(self.__scrollArea) self.__scrollLayout = QVBoxLayout() self.__scrollWidget = QWidget() ## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben. Indem ich den selben Namen wie zuvor vergebe, wirkt auch das Stylsheet auf dieses Widget. self.__scrollWidget.setObjectName("transparentWidget") #self.__scrollWidget.setStyleSheet( "QWidget#transparentWidget { background-color:transparent; }" ) #scrollWidget.setMinimumSize(this.width(), 400); self.__scrollWidget.setLayout(self.__scrollLayout) typ = "Skill" ## Eine Liste, in der alle Eigenschafts-Widgets aufgelistet werden. self.__traitWidgets = [] for item in Config.CATEGORIES_MAIN: #Debug.debug(self._character.traits) # Für jede Kategorie wird ein eigener Abschnitt erzeugt. widgetSkillCategory = QGroupBox() widgetSkillCategory.setTitle(item) widgetSkillCategory.setFlat(True) layoutSkillCategory = QVBoxLayout() widgetSkillCategory.setLayout(layoutSkillCategory) self.__scrollLayout.addWidget(widgetSkillCategory) __list = list(self._character.traits[typ][item].items()) __list.sort() for skill in __list: # Anlegen des Widgets, das diese Eigenschaft repräsentiert. traitWidget = CharaTrait(skill[1], self) traitWidget.buttonText = 0 traitWidget.setDescriptionHidden(True) traitWidget.enableButton( 0 ) # Zu Beginn sollen die Spezailisierungen nicht enabled sein. # Dieses Widget auch an Liste anhängen, damit ich einfacher darauf zugreifen kann. traitListItem = traitWidget self.__traitWidgets.append(traitListItem) # Es werden nur Fertigkeiten der richtigen Alters- und Zeit-Kategorie angezeigt. self.hideReasonChanged.connect(traitWidget.hideOrShowTrait) # Fertigkeiten haben Spezialisierungen. traitWidget.specialtiesClicked.connect( self.uncheckOtherButtons) traitWidget.specialtiesClicked.connect( self.specialtiesActivated.emit) ## Wenn sich die Spezialisierungen ändern, sollen die veränderten Spezialisierungen auch angezeigt werden. Das wird so gelöst, als wäre der Knopf für die Spezialisierungen erneut gedrückt worden. #skill.specialtiesChanged.connect(self.emitSpecialtiesActivated) layoutSkillCategory.addWidget(traitWidget) self.maxTraitChanged.connect(traitWidget.setMaximum) # Stretch einfügen, damit die Eigenschaften besser angeordnet sind. self.__scrollLayout.addStretch() self.__scrollArea.setWidget(self.__scrollWidget) self.__scrollArea.setWidgetResizable(True) self.__scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.__scrollArea.setMinimumWidth( self.__scrollArea.viewport().minimumWidth())
def initSettingTab(self): # ##Setting Tab### setting_tab = QWidget() setting_tab_layout = QVBoxLayout() self.tabWidget.addTab(setting_tab, "Settings") # Task Box task_box = QGroupBox() task_box.setTitle(QString("Task properties")) task_layout = QGridLayout() # Name name = QLabel("Name:") name_value = QLineEdit() name_value.setText(self.task.hittypename) name_value.setEnabled(False) clickable(name_value).connect(self.enable) task_layout.addWidget(name, 0, 1) task_layout.addWidget(name_value, 0, 2, 1, 3) # Description description = QLabel("Description:") description_value = QLineEdit() description_value.setText(self.task.description) description_value.setEnabled(False) clickable(description_value).connect(self.enable) task_layout.addWidget(description, 1, 1) task_layout.addWidget(description_value, 1, 2, 1, 3) # Keywords keywords = QLabel("Keywords:") keywords_value = QLineEdit() keywords_value.setText(','.join(self.task.keywords)) keywords_value.setEnabled(False) clickable(keywords_value).connect(self.enable) task_layout.addWidget(keywords, 2, 1) task_layout.addWidget(keywords_value, 2, 2, 1, 3) # Qualification qualification = QLabel("Qualification [%]:") qualification_value = QSpinBox() qualification_value.setSuffix('%') qualification_value.setValue(int(self.task.qualification)) qualification_value.setEnabled(False) clickable(qualification_value).connect(self.enable) task_layout.addWidget(qualification, 3, 1) task_layout.addWidget(qualification_value, 3, 4) # Assignments assignments = QLabel("Assignments:") assignments_value = QSpinBox() assignments_value.setSuffix('') assignments_value.setValue(int(self.task.assignments)) assignments_value.setEnabled(False) clickable(assignments_value).connect(self.enable) task_layout.addWidget(assignments, 4, 1) task_layout.addWidget(assignments_value, 4, 4) # Duration duration = QLabel("Duration [min]:") duration_value = QSpinBox() duration_value.setSuffix('min') duration_value.setValue(int(self.task.duration)) duration_value.setEnabled(False) clickable(duration_value).connect(self.enable) task_layout.addWidget(duration, 5, 1) task_layout.addWidget(duration_value, 5, 4) # Reward reward = QLabel("Reward [0.01$]:") reward_value = QDoubleSpinBox() reward_value.setRange(0.01, 0.5) reward_value.setSingleStep(0.01) reward_value.setSuffix('$') reward_value.setValue(self.task.reward) reward_value.setEnabled(False) clickable(reward_value).connect(self.enable) task_layout.addWidget(reward, 6, 1) task_layout.addWidget(reward_value, 6, 4) # Lifetime lifetime = QLabel("Lifetime [d]:") lifetime_value = QSpinBox() lifetime_value.setSuffix('d') lifetime_value.setValue(self.task.lifetime) lifetime_value.setEnabled(False) clickable(lifetime_value).connect(self.enable) task_layout.addWidget(lifetime, 7, 1) task_layout.addWidget(lifetime_value, 7, 4) # sandbox sandbox = QCheckBox("Sandbox") sandbox.setChecked(self.task.sandbox) task_layout.addWidget(sandbox, 8, 1) task_box.setLayout(task_layout) task_layout.setColumnMinimumWidth(1, 120) # Image Storage Box storage_box = QGroupBox() storage_box.setTitle(QString("Image Storage")) storage_layout = QGridLayout() # Host URL host_url = QLabel("Host-URL:") host_url_value = QLineEdit() host_url_value.setText(self.task.host_url) host_url_value.setEnabled(False) clickable(host_url_value).connect(self.enable) # Dropbox Path dropbox_path = QLabel("Dropbox-Path:") dropbox_path_value = QLineEdit() dropbox_path_value.setText(self.task.dropbox_path) dropbox_path_value.setEnabled(False) clickable(dropbox_path_value).connect(self.enable) # Dropbox or S3 usingS3 = QRadioButton("S3") usingS3.setChecked(self.task.usingS3) usingS3.setEnabled(False) usingDropbox = QRadioButton("Dropbox") usingDropbox.setChecked(self.task.usingDropbox) storage_layout.addWidget(host_url, 0, 1) storage_layout.addWidget(host_url_value, 0, 2, 1, 3) storage_layout.addWidget(dropbox_path, 1, 1) storage_layout.addWidget(dropbox_path_value, 1, 2, 1, 3) # Add Layouts save_button = QPushButton("Save Settings") setting_tab_layout.addWidget(task_box) setting_tab_layout.addWidget(storage_box) setting_tab.setLayout(setting_tab_layout) save_button.clicked.connect(self.SaveSettings) storage_layout.addWidget(usingS3, 2, 1) storage_layout.addWidget(usingDropbox, 3, 1) storage_layout.addWidget(save_button, 3, 4) # storage_layout.addStretch(1) storage_box.setLayout(storage_layout)
def initDownloadTab(self): # # # Download Tab# # # download_tab = QWidget() download_tab_layout = QVBoxLayout() self.tabWidget.addTab(download_tab, "Download HITs") # Status status_box = QGroupBox() status_box.setTitle("Status") status_layout = QGridLayout() self.table_turk = ContextTable(0, 4, self) self.table_turk.setSelectionBehavior(QAbstractItemView.SelectRows) self.table_turk.setColumnWidth(0, 160) self.table_turk.setColumnWidth(1, 50) self.table_turk.setColumnWidth(2, 90) self.table_turk.setColumnWidth(3, 90) # self.table_turk.verticalHeader().setVisible(False) # Set Headers header_0 = QTableWidgetItem() header_0.setText("Turker") self.table_turk.setHorizontalHeaderItem(0, header_0) header_1 = QTableWidgetItem() header_1.setText("HITs") self.table_turk.setHorizontalHeaderItem(1, header_1) header_2 = QTableWidgetItem() header_2.setText("Rejected") self.table_turk.setHorizontalHeaderItem(2, header_2) header_3 = QTableWidgetItem() header_3.setText("Approved") self.table_turk.setHorizontalHeaderItem(3, header_3) status_layout.addWidget(self.table_turk, 0, 0, 1, 2) # Status Button status_button = QPushButton('Update Status') status_button.clicked.connect(self.getStatus) status_layout.addWidget(status_button, 1, 1) status_box.setLayout(status_layout) download_tab_layout.addWidget(status_box) # Download Button download_button = QPushButton("Download Results") download_button.clicked.connect(self.download) status_layout.addWidget(download_button, 1, 0) # Options Box options_box = QGroupBox() options_box.setTitle("Import results") options_box_layout = QGridLayout() matching = QRadioButton("Choose best matching Outlines") matching.setEnabled(False) review = QRadioButton("Review by hand") review.setChecked(True) review_button = QPushButton("Review Results") review_button.clicked.connect(self.review) # Import Button import_button = QPushButton("Import results") import_button.clicked.connect(self.importResults) options_box_layout.addWidget(review, 0, 0) options_box_layout.addWidget(review_button, 0, 1) options_box_layout.addWidget(matching, 1, 0) options_box_layout.addWidget(import_button, 2, 0, 1, 2) options_box.setLayout(options_box_layout) download_tab_layout.addWidget(options_box) download_tab.setLayout(download_tab_layout)
def initGui(self): """ Initialize the GUI. """ self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.initMainWidget() self.setMenuBar() self.setWindowTitle("VMI Viewer") self.resize(self._init_window_width, self._init_window_height) ### RunInfo. group_runinfo = QGroupBox(self) group_runinfo.setTitle("RunInfo") font = group_runinfo.font() font.setPointSize(self._font_size_groupbox_title) group_runinfo.setFont(font) group_runinfo.resize(400, 100) grid_runinfo = QGridLayout(group_runinfo) # Run No. label_run = QLabel(self) label_run.setText("Run No. : ") label_run.setAlignment(Qt.AlignRight) font = label_run.font() font.setPointSize(self._font_size_label) font.setBold(self._font_bold_label) label_run.setFont(font) self.label_run_number = QLabel(self) self.label_run_number.setText("Unknown") pal = QPalette() pal.setColor(QPalette.Foreground, QColor("#0B5345")) self.label_run_number.setPalette(pal) font = self.label_run_number.font() font.setBold(True) font.setPointSize(self._font_size_label) self.label_run_number.setFont(font) # Tag No. label_tag = QLabel(self) label_tag.setText("Tag No. : ") label_tag.setAlignment(Qt.AlignRight) font = label_tag.font() font.setPointSize(self._font_size_label) font.setBold(self._font_bold_label) label_tag.setFont(font) self.label_tag_start = QLabel(self) self.label_tag_start.setText("None") font = self.label_tag_start.font() font.setBold(True) font.setPointSize(self._font_size_label) self.label_tag_start.setFont(font) label_tag_hyphen = QLabel(self) label_tag_hyphen.setText(" - ") label_tag_hyphen.setFixedWidth(30) font = label_tag_hyphen.font() font.setPointSize(self._font_size_label) font.setBold(self._font_bold_label) label_tag_hyphen.setFont(font) self.label_tag_end = QLabel(self) self.label_tag_end.setText("None") font = self.label_tag_end.font() font.setBold(True) font.setPointSize(self._font_size_label) self.label_tag_end.setFont(font) # Sig / BG. label_sig = QLabel(self) label_sig.setText("# of Sig : ") label_sig.setAlignment(Qt.AlignRight) font = label_sig.font() font.setPointSize(self._font_size_label) font.setBold(self._font_bold_label) label_sig.setFont(font) self.label_nbr_of_sig = QLabel(self) self.label_nbr_of_sig.setText("None") font = self.label_nbr_of_sig.font() font.setBold(True) font.setPointSize(self._font_size_label) self.label_nbr_of_sig.setFont(font) label_bg = QLabel(self) label_bg.setText("# of BG : ") label_bg.setAlignment(Qt.AlignRight) font = label_bg.font() font.setPointSize(self._font_size_label) font.setBold(self._font_bold_label) label_bg.setFont(font) self.label_nbr_of_bg = QLabel(self) self.label_nbr_of_bg.setText("None") font = self.label_nbr_of_bg.font() font.setBold(True) font.setPointSize(self._font_size_label) self.label_nbr_of_bg.setFont(font) # Construct the layout. grid_runinfo.addWidget(label_run, 0, 0) grid_runinfo.addWidget(self.label_run_number, 0, 1, 1, 3) grid_runinfo.addWidget(label_tag, 1, 0) grid_runinfo.addWidget(self.label_tag_start, 1, 1) grid_runinfo.addWidget(label_tag_hyphen, 1, 2) grid_runinfo.addWidget(self.label_tag_end, 1, 3) grid_runinfo.addWidget(label_sig, 2, 0) grid_runinfo.addWidget(self.label_nbr_of_sig, 2, 1) grid_runinfo.addWidget(label_bg, 2, 2) grid_runinfo.addWidget(self.label_nbr_of_bg, 2, 3) ### Settings. # group_settings = QGroupBox(self) # group_settings.setTitle("Settings") # font = group_settings.font() # font.setPointSize(self._font_size_groupbox_title) # group_settings.setFont(font) # group_settings.resize(400, 100) # grid_settings = QGridLayout(group_settings) # # Update interval. # label_upd_rate = QLabel(self) # label_upd_rate.setText("Upd. image interval: ") # font = label_upd_rate.font() # font.setPointSize(self._font_size_label) # font.setBold(self._font_bold_label) # label_upd_rate.setFont(font) # self.spinbox_upd_img_interval = QDoubleSpinBox(self) # self.spinbox_upd_img_interval.setValue(self._get_data_interval) # self.spinbox_upd_img_interval.setFixedWidth(100) # self.spinbox_upd_img_interval.setAlignment(Qt.AlignRight) # font = self.spinbox_upd_img_interval.font() # font.setBold(True) # font.setPointSize(self._font_size_label) # self.spinbox_upd_img_interval.setFont(font) # label_upd_rate_unit = QLabel(self) # label_upd_rate_unit.setText("sec") # font = label_upd_rate_unit.font() # font.setPointSize(self._font_size_label) # font.setBold(self._font_bold_label) # label_upd_rate_unit.setFont(font) # Construct the layout. # grid_settings.addWidget(label_upd_rate, 0, 0, 1, 3) # grid_settings.addWidget(self.spinbox_upd_img_interval, 0, 3) # grid_settings.addWidget(label_upd_rate_unit, 0, 4) ### Function buttons. group_func = QGroupBox(self) group_func.setTitle("Function") font = group_func.font() font.setPointSize(self._font_size_groupbox_title) group_func.setFont(font) group_func.resize(400, 100) grid_func = QGridLayout(group_func) grid_func.setSpacing(10) # Start/Stop main process button. self.brun = QPushButton(group_func) self.brun.setText("Start") font = self.brun.font() font.setPointSize(self._font_size_button) self.brun.setFont(font) self.brun.resize(400, 50) self.brun.setStyleSheet("background-color:{};".format( self._init_button_color)) self.brun.clicked.connect(self.runMainProcess) # Clear data button. bclear = QPushButton(group_func) bclear.setText("Clear") font = bclear.font() font.setPointSize(self._font_size_button) bclear.setFont(font) bclear.resize(400, 50) bclear.setStyleSheet("background-color:{};".format( self._init_button_color)) bclear.clicked.connect(self.clearData) # Save images button. bsave = QPushButton(group_func) bsave.setText("Save") font = bsave.font() font.setPointSize(self._font_size_button) bsave.setFont(font) bsave.resize(400, 50) bsave.setStyleSheet("background-color:{};".format( self._init_button_color)) bsave.clicked.connect(self.saveData) # New window button. bwindow = QPushButton(group_func) bwindow.setText("Window") font = bwindow.font() font.setPointSize(self._font_size_button) bwindow.setFont(font) bwindow.resize(400, 50) bwindow.setStyleSheet("background-color:{};".format( self._init_button_color)) bwindow.clicked.connect(self.showWindow) # Construct the layout of RunInfo groupbox. grid_func.addWidget(self.brun, 0, 0) grid_func.addWidget(bclear, 0, 1) grid_func.addWidget(bsave, 1, 0) grid_func.addWidget(bwindow, 1, 1) ### Plotting area. grp1 = QGroupBox(self) # grp1.setTitle("SIG WL") grp1.setTitle("SIG") font = grp1.font() font.setPointSize(self._font_size_groupbox_title) grp1.setFont(font) gp1 = QGridLayout(grp1) gp1.setSpacing(10) grp2 = QGroupBox(self) # grp2.setTitle("SIG WOL") grp2.setTitle("BG") font = grp2.font() font.setPointSize(self._font_size_groupbox_title) grp2.setFont(font) gp2 = QGridLayout(grp2) gp2.setSpacing(10) grp3 = QGroupBox(self) # grp3.setTitle("BG WL") grp3.setTitle("SIg - BG") font = grp3.font() font.setPointSize(self._font_size_groupbox_title) grp3.setFont(font) gp3 = QGridLayout(grp3) gp3.setSpacing(10) # grp4 = QGroupBox(self) # grp4.setTitle("BG WOL") # font = grp4.font() # font.setPointSize(self._font_size_groupbox_title) # grp4.setFont(font) # gp4 = QGridLayout(grp4) # gp4.setSpacing(10) kwargs = dict(px=False, py=False, ph=False, bp=False) self.pw1 = PlotWindow(self, **kwargs) self.pw2 = PlotWindow(self, **kwargs) self.pw3 = PlotWindow(self, **kwargs) # self.pw4 = PlotWindow(self, **kwargs) gp1.addWidget(self.pw1, 0, 0) gp2.addWidget(self.pw2, 0, 0) gp3.addWidget(self.pw3, 0, 0) # gp4.addWidget(self.pw4, 0, 0) ### Construct the layout. self.grid.addWidget(group_runinfo, 0, 0) # self.grid.addWidget(group_settings, 0, 1) self.grid.addWidget(group_func, 0, 1) self.grid.addWidget(grp1, 1, 0, 2, 1) self.grid.addWidget(grp2, 1, 1, 2, 1) self.grid.addWidget(grp3, 1, 2, 2, 1) # self.grid.addWidget(grp4, 1, 3, 2, 1) self.main_widget.setFocus() self.setCentralWidget(self.main_widget)
class Main(plugin.Plugin): " Main Class " def initialize(self, *args, **kwargs): " Init Main Class " super(Main, self).initialize(*args, **kwargs) self.chooser, self.process = QComboBox(), QProcess() self.chooser.addItems([' Ubuntu Unity QuickList .desktop ', ' KDE Plasma MetaData .desktop ', ' FreeDesktop Standard .desktop ']) self.chooser.currentIndexChanged.connect(self.on_index_changed) self.chooser.setToolTip('Select a target .desktop file format') # Standard FreeDesktop self.group1 = QGroupBox() self.group1.setTitle(' Standard ') self.ledVersion, self.ledCategories = QDoubleSpinBox(), QComboBox() self.ledVersion.setMinimum(0.1) self.ledVersion.setMaximum(999.9) self.ledVersion.setValue(1.0) self.ledVersion.setDecimals(1) self.ledType, self.ledName = QLineEdit('Application'), QLineEdit('App') self.ledGenericName = QLineEdit('Generic App') self.ledComment, self.ledIcon = QLineEdit('App'), QLineEdit('icon.svg') self.ledCategories.addItems(['Python Programming Language', 'Development', 'Ruby', 'C++', 'Amateur Radio', 'Communication', 'Cross Platform', 'Databases', 'Debug', 'Documentation', 'Editors', 'Education', 'Electronics', 'Email', 'Embebed Devices', 'Fonts', 'GNOME Desktop Environment', 'GNU R Statistical System', 'GObject Introspection Data', 'Games and Amusement', 'Gnustep Desktop Environtment', 'Graphics', 'Haskell Programming Language', 'Internationalization and Localization', 'Internet', 'Interpreted Computer Languages', 'KDE Software Compilation', 'Kernel and Modules', 'Libraries', 'Libraries - Development', 'Libraries - Old', 'Lisp Programming Language', 'Localization', 'Mathematics', 'Meta Packages', 'Miscelaneous - Graphical', 'Miscelaneous - Text Based', 'Mono/CLI Infraestructure', 'Multimedia', 'Networking', 'Newsgroups', 'OCaml Programming Language', 'PHP Programming Language', 'Perl Programming Language', 'Ruby Programming Language', 'Science', 'Shells', 'System Administration', 'TeX Authoring', 'Utilities', 'Version Control Systems', 'Video Software', 'Web Servers', 'Word Processing', 'Xfce Desktop Environment', 'Zope/Plone Environment']) self.ledExec, self.ledTryExec = QLineEdit('myapp'), QLineEdit('myapp') self.ledMymeType = QLineEdit('application/x-desktop') self.ledTerminal = QComboBox() self.ledTerminal.addItems(['False', 'True']) self.ledActions = QLineEdit('Next;Previous') self.ledOnlyShowIn = QLineEdit('Unity;KDE') self.ledNotShowIn = QLineEdit('Gnome2') vboxg1 = QVBoxLayout(self.group1) for each_widget in (QLabel('Version'), self.ledVersion, QLabel('Type'), self.ledType, QLabel('Name'), self.ledName, QLabel('GenericName'), self.ledGenericName, QLabel('Comment'), self.ledComment, QLabel('Icon'), self.ledIcon, QLabel('Categories'), self.ledCategories, QLabel('Exec'), self.ledExec, QLabel('TryExec'), self.ledTryExec, QLabel('MymeType'), self.ledMymeType, QLabel('Terminal'), self.ledTerminal, QLabel('Actions'), self.ledActions, QLabel('OnlyShowIn'), self.ledOnlyShowIn, QLabel('NotShowIn'), self.ledNotShowIn): vboxg1.addWidget(each_widget) # KDE Plasma self.group2 = QGroupBox() self.group2.setTitle(' KDE Plasma ') self.group2.setGraphicsEffect(QGraphicsBlurEffect(self)) self.ledEncoding, self.ledXPlasmaAPI = QComboBox(), QComboBox() self.ledEncoding.addItems(['UTF-8', 'ISO-8859-1']) self.ledServiceType = QLineEdit('Plasma/Applet') self.ledXPlasmaAPI.addItems([ 'Python', 'Javascript', 'Ruby', 'C++', 'HTML5', 'QML']) self.ledXPlasmaMainScript = QLineEdit('path/to/your/code.py') self.ledXKDEPluginInfoAuthor = QLineEdit(getuser()) self.ledXKDEPluginInfoEmail = QLineEdit(getuser() + '@gmail.com') self.ledXKDEPluginInfoName = QLineEdit('Hello-World') self.ledXKDEPluginInfoVersion = QLineEdit('1.0') self.ledXKDEPluginInfoWebsite = QLineEdit('http:plasma.kde.org') self.ledXKDEPluginInfoCategory = QComboBox() self.ledXKDEPluginInfoCategory.addItems(['Application Launchers', 'Accessibility', 'Astronomy', 'Date and Time', 'Development Tools', 'Education', 'Environment', 'Examples', 'File System', 'Fun and Games', 'Graphics', 'Language', 'Mapping', 'Multimedia', 'Online Services', 'System Information', 'Utilities', 'Windows and Tasks', 'Miscelaneous']) self.ledXKDEPluginInfoDepends = QLineEdit() self.ledXKDEPluginInfoLicense = QLineEdit('GPL') self.ledXKDEPluginInfoEnabledByDefault = QComboBox() self.ledXKDEPluginInfoEnabledByDefault.addItems(['True', 'False']) vboxg2 = QVBoxLayout(self.group2) for each_widget in ( QLabel('Encoding'), self.ledEncoding, QLabel('ServiceType'), self.ledServiceType, QLabel('X-Plasma-API'), self.ledXPlasmaAPI, QLabel('X-Plasma-MainScript'), self.ledXPlasmaMainScript, QLabel('X-KDE-PluginInfo-Author'), self.ledXKDEPluginInfoAuthor, QLabel('X-KDE-PluginInfo-Email'), self.ledXKDEPluginInfoEmail, QLabel('X-KDE-PluginInfo-Name'), self.ledXKDEPluginInfoName, QLabel('X-KDE-PluginInfo-Version'), self.ledXKDEPluginInfoVersion, QLabel('X-KDE-PluginInfo-Website'), self.ledXKDEPluginInfoWebsite, QLabel('X-KDE-PluginInfo-Category'), self.ledXKDEPluginInfoCategory, QLabel('X-KDE-PluginInfo-Depends'), self.ledXKDEPluginInfoDepends, QLabel('X-KDE-PluginInfo-License'), self.ledXKDEPluginInfoLicense, QLabel('X-KDE-PluginInfo-EnabledByDefault'), self.ledXKDEPluginInfoEnabledByDefault): vboxg2.addWidget(each_widget) # Ubuntu Unity self.ledXAyatanaDesktopShortcuts = QLineEdit('Next;Previous') self.checkbox1 = QCheckBox('Open .desktop file when done') self.checkbox2 = QCheckBox('Make .desktop file Executable') [a.setChecked(True) for a in (self.checkbox1, self.checkbox2)] self.button = QPushButton(' Make .Desktop File ! ') self.button.setMinimumSize(100, 50) self.button.clicked.connect(self.writeFile) glow = QGraphicsDropShadowEffect(self) glow.setOffset(0) glow.setBlurRadius(99) glow.setColor(QColor(99, 255, 255)) self.button.setGraphicsEffect(glow) glow.setEnabled(True) class TransientWidget(QWidget): ' persistant widget thingy ' def __init__(self, widget_list): ' init sub class ' super(TransientWidget, self).__init__() vbox = QVBoxLayout(self) for each_widget in widget_list: vbox.addWidget(each_widget) tw = TransientWidget((self.chooser, self.group1, self.group2, QLabel('X-Ayatana-Desktop-Shortcuts'), self.ledXAyatanaDesktopShortcuts, QLabel(''), self.checkbox1, self.checkbox2, self.button)) self.dock, self.scrollable = QDockWidget(), QScrollArea() self.scrollable.setWidgetResizable(True) self.scrollable.setWidget(tw) self.dock.setWindowTitle(__doc__) self.dock.setStyleSheet('QDockWidget::title{text-align: center;}') self.dock.setWidget(self.scrollable) ExplorerContainer().addTab(self.dock, "DotDesktop") QPushButton(QIcon.fromTheme("help-about"), 'About', self.dock ).clicked.connect(lambda: QMessageBox.information(self.dock, __doc__, ''.join((__doc__, __version__, __license__, 'by', __author__)))) def writeFile(self): ' write the .desktop file to disk ' UNITY = ''.join(a for a in iter(( 'OnlyShowIn=', str(self.ledOnlyShowIn.text()), linesep, 'NotShowIn=', str(self.ledNotShowIn.text()), linesep, 'X-Ayatana-Desktop-Shortcuts=', str(self.ledXAyatanaDesktopShortcuts.text()), linesep))) PLASMA = ''.join(a for a in iter(( 'OnlyShowIn=', str(self.ledOnlyShowIn.text()), linesep, 'NotShowIn=', str(self.ledNotShowIn.text()), linesep, 'Encoding=', str(self.ledEncoding.currentText()), linesep, 'ServiceTypes=', str(self.ledServiceType.text()), linesep, 'X-Plasma-API=', str(self.ledXPlasmaAPI.currentText()), linesep, 'X-Plasma-MainScript=', str(self.ledXPlasmaMainScript.text()), linesep, 'X-KDE-PluginInfo-Author=', str(self.ledXKDEPluginInfoAuthor.text()), linesep, 'X-KDE-PluginInfo-Email=', str(self.ledXKDEPluginInfoEmail.text()), linesep, 'X-KDE-PluginInfo-Name=', str(self.ledXKDEPluginInfoName.text()), linesep, 'X-KDE-PluginInfo-Version=', str(self.ledXKDEPluginInfoVersion.text()), linesep, 'X-KDE-PluginInfo-Website=', str(self.ledXKDEPluginInfoWebsite.text()), linesep, 'X-KDE-PluginInfo-Category=', str(self.ledXKDEPluginInfoCategory.currentText()), linesep, 'X-KDE-PluginInfo-Depends=', str(self.ledXKDEPluginInfoDepends.text()), linesep, 'X-KDE-PluginInfo-License=', str(self.ledXKDEPluginInfoLicense.text()), linesep, 'X-KDE-PluginInfo-EnabledByDefault=', str(self.ledXKDEPluginInfoEnabledByDefault.currentText()), linesep))) BASE = ''.join(a for a in iter(( '[Desktop Entry]', linesep, 'Version=', str(self.ledVersion.value()), linesep, 'Type=', str(self.ledType.text()), linesep, 'Name=', str(self.ledName.text()), linesep, 'Comment=', str(self.ledComment.text()), linesep, 'TryExec=', str(self.ledTryExec.text()), linesep, 'Exec=', str(self.ledExec.text()), linesep, 'Icon=', str(self.ledIcon.text()), linesep, 'MimeType=', str(self.ledMymeType.text()), linesep, 'Actions=', str(self.ledActions.text()), linesep, 'Terminal=', str(self.ledTerminal.currentText()), linesep))) ACTIONS * len(str(self.ledActions.text()).lower().strip().split(';')) fnm = str(QFileDialog.getSaveFileName(self.dock, '', '', "(*.desktop)")) with open(fnm, 'w') as f: if self.chooser.currentIndex() is 0 and fnm is not '': f.write(''.join(a for a in iter((BASE, UNITY, ACTIONS)))) elif self.chooser.currentIndex() is 1 and fnm is not '': f.write(''.join(a for a in iter((BASE, PLASMA)))) elif fnm is not '': f.write(BASE) if self.checkbox2.isChecked() and fnm is not '': try: chmod(fnm, 0775) # Py2 except: chmod(fnm, 0o775) # Py3 if self.checkbox1.isChecked() and fnm is not '': self.process.start('ninja-ide ' + fnm) if not self.process.waitForStarted(): print((" ERROR: FAIL: {} failed!".format(fnm))) return def on_index_changed(self): ' enable disable the qgroupbox if needed ' if self.chooser.currentIndex() is 1: self.group2.graphicsEffect().setEnabled(False) self.group2.setEnabled(True) else: self.group2.graphicsEffect().setEnabled(True) self.group2.setEnabled(False) if self.chooser.currentIndex() is 0: self.ledXAyatanaDesktopShortcuts.setEnabled(True) else: self.ledXAyatanaDesktopShortcuts.setEnabled(False)
class SessionsManager(QDialog): def __init__(self, n, parent=None): super(SessionsManager, self).__init__(parent) self.par = n #main title = Settingz().positions(30) self.titleID = title['id'] self.titlePage = title['page'] self.titleName = title['name'] self.titleSub = title['subID'] self.titleIcon = title['icon'] self.pagetitle = self.titlePage #stylesheet stylesheet = Valid().background() + Valid().font() treeStyleSheet = Valid().treez() self.groupBox1 = QGroupBox(self.titleName) self.groupBox2 = QGroupBox('Add') #items self.tree = QTreeWidget() self.tree.setHeaderLabel("Choose " + self.titleName) #tree.setItemDelegate(Delegate()) self.tree.setItemDelegate(Delegates()) self.tree.headerItem().setText(0, 'Name') self.tree.setStyleSheet(treeStyleSheet) self.makeTree() self.tree.setMinimumHeight(250) self.tree.clicked.connect(lambda: self.getSelection()) self.tree.itemClicked.connect(lambda state: self.getChecked(state)) #buttons #add nImg = Buttons().addButton() self.pb = QPushButton() self.pb.setFlat(True) self.pb.setIcon(QIcon(nImg)) self.pb.setMaximumHeight(30) self.pb.setMaximumWidth(30) nImg1 = Buttons().closeButton() self.pb1 = QPushButton() self.pb1.setFlat(True) self.pb1.setIcon(QIcon(nImg1)) self.pb1.setMaximumHeight(30) self.pb1.setMaximumWidth(30) nImg2 = Buttons().editButton() self.pb2 = QPushButton() self.pb2.setFlat(True) self.pb2.setIcon(QIcon(nImg2)) self.pb2.setMaximumHeight(30) self.pb2.setMaximumWidth(30) nImg3 = Buttons().deleteButton() self.pb3 = QPushButton() self.pb3.setFlat(True) self.pb3.setIcon(QIcon(nImg3)) self.pb3.setMaximumHeight(30) self.pb3.setMaximumWidth(30) nImg4 = Buttons().saveButton() self.pb4 = QPushButton() self.pb4.setFlat(True) self.pb4.setIcon(QIcon(nImg4)) self.pb4.setMaximumHeight(30) self.pb4.setMaximumWidth(30) nImg5 = Buttons().resetButton() self.pb5 = QPushButton() self.pb5.setFlat(True) self.pb5.setIcon(QIcon(nImg5)) self.pb5.setMaximumHeight(30) self.pb5.setMaximumWidth(30) nImg6 = Buttons().closeButton() self.pb6 = QPushButton() self.pb6.setFlat(True) self.pb6.setIcon(QIcon(nImg6)) self.pb6.setMaximumHeight(30) self.pb6.setMaximumWidth(30) nImg7 = Buttons().addButton() self.pb7 = QPushButton() self.pb7.setFlat(True) self.pb7.setIcon(QIcon(nImg7)) self.pb7.setMaximumHeight(30) self.pb7.setMaximumWidth(30) hbo = QHBoxLayout() hbo.addStretch() hbo.addWidget(self.pb1) hbo.addWidget(self.pb3) hbo.addWidget(self.pb2) hbo.addWidget(self.pb7) vbo = QVBoxLayout() vbo.addWidget(self.tree) vbo.addLayout(hbo) self.l1 = QLabel("Name") self.le1 = QLineEdit() self.le1.setObjectName("name") vals1 = Valid().fullNum() self.le1.setValidator(vals1) self.le1.setPlaceholderText("Lowercase max 25 letters") self.fromLbl = QLabel("Starts") self.toLbl = QLabel("Ends") self.fromData = QDateEdit() self.toData = QDateEdit() currentDate = QDate() self.fromData.setDate(currentDate.currentDate()) self.fromData.setCalendarPopup(True) self.toData.setDate(currentDate.currentDate()) self.toData.setCalendarPopup(True) FormLayout = QFormLayout() FormLayout.addRow(self.l1, self.le1) FormLayout.addRow(self.fromLbl, self.fromData) FormLayout.addRow(self.toLbl, self.toData) Hlayout1 = QHBoxLayout() Hlayout1.addStretch() Hlayout1.addWidget(self.pb6) Hlayout1.addWidget(self.pb5) Hlayout1.addWidget(self.pb4) Hlayout1.addWidget(self.pb) Vlayout1 = QVBoxLayout() Vlayout1.addLayout(FormLayout) Vlayout1.addLayout(Hlayout1) self.groupBox1.setLayout(vbo) self.groupBox2.setLayout(Vlayout1) self.groupBox2.hide() self.connect(self.pb, SIGNAL("clicked()"), lambda: self.button_add()) #add self.connect(self.pb1, SIGNAL("clicked()"), lambda: self.button_close()) #close self.connect(self.pb2, SIGNAL("clicked()"), lambda: self.button_edit()) #edit self.connect(self.pb3, SIGNAL("clicked()"), lambda: self.button_delete()) #delete self.connect(self.pb4, SIGNAL("clicked()"), lambda: self.button_save()) #save self.connect(self.pb5, SIGNAL("clicked()"), lambda: self.button_reset()) #reset self.pb4.hide() self.pb7.hide() grid = QGridLayout() grid.addWidget(self.groupBox1, 0, 0) grid.addWidget(self.groupBox2, 1, 0) self.setLayout(grid) self.setStyleSheet(stylesheet) self.setWindowIcon(QIcon(self.titleIcon)) self.setWindowTitle(self.pagetitle) def makeTree(self): self.tree.clear() arr = Db().selectn('session', '', 5) self.hold_data = {} self.hold_mdata = {} self.hold_data_add = {} self.hold_data_add_item = {} current = time.time() if self.titleSub and self.titleSub > 0: if arr and len(arr) > 0: for val in arr: ch = Valid().pullData('terms', '', {'sessionID': val['id']}) child = QTreeWidgetItem(self.tree) child.setIcon(0, QIcon('icons.cfolder.png')) try: ts = int(float(val['start_date'])) except: ts = int(current) ts = datetime.utcfromtimestamp(ts).strftime('%d-%m-%Y') try: ts1 = int(float(val['end_date'])) except: ts1 = int(current) ts1 = datetime.utcfromtimestamp(ts1).strftime('%d-%m-%Y') child.setText( 0, str(val['name']).upper() + " - " + ts + " " + ts1) self.hold_mdata[val['id']] = child for va in ch: child1 = QTreeWidgetItem(child) child1.setFlags(child1.flags() | Qt.ItemIsUserCheckable) try: ts2 = int(float(va['start_date'])) except: ts2 = int(current) ts2 = datetime.utcfromtimestamp(ts2).strftime( '%d-%m-%Y') try: ts3 = int(float(va['end_date'])) except: ts3 = int(current) ts3 = datetime.utcfromtimestamp(ts3).strftime( '%d-%m-%Y') child1.setText( 0, str(va['name']).upper() + " " + ts2 + " " + ts3) self.hold_data[va['id']] = child1 if (va['active'] == 1): child1.setCheckState(0, Qt.Checked) else: child1.setCheckState(0, Qt.Unchecked) child1 = QTreeWidgetItem(child) child1.setFlags(child1.flags() | Qt.ItemIsUserCheckable) child1.setText(0, 'Add New Term') self.hold_data_add_item[val['id']] = child1 else: if arr and len(arr) > 0: for val in arr: child = QTreeWidgetItem(self.tree) child.setFlags(child.flags() | Qt.ItemIsUserCheckable) child.setText(0, str(val['name']).upper()) child.setText(1, str(val['abbrv']).upper()) self.hold_data[val['id']] = child if (val['active'] == 0): child.setCheckState(0, Qt.Checked) else: child.setCheckState(0, Qt.Unchecked) child = QTreeWidgetItem(self.tree) child.setFlags(child.flags() | Qt.ItemIsUserCheckable) child.setText(0, 'Add New Session') self.hold_data_add['addnew'] = child def getChecked(self, a): arr_hold = [] g = Db() for i in self.hold_data: if self.hold_data[i].checkState(0) == Qt.Checked: arr_hold.append(i) self.hold_data[i].setCheckState(0, Qt.Checked) g.update('terms', {'active': 0}, {'active': 1}) g.update('terms', {'active': 1}, {'id': i}) tt = g.selectn('terms', '', 1, {'id': i}) g.update('session', {'active': 0}, {'active': 1}) g.update('session', {'active': 1}, {'id': tt['sessionID']}) g.selectn('session', '', 1, {'id': tt['sessionID']}) else: self.hold_data[i].setCheckState(0, Qt.Unchecked) self.reloadTerm() def reloadTerm(self): session = self.par.activeTerm() activeTerm = str(session[1]) + ' SESSION ' + str(session[3]) + ' TERM' self.par.majorSession = session[2] self.par.lbl.setText(activeTerm) def getSelected(self): r = False self.sessionMain = False for i in self.hold_mdata: if self.hold_mdata[i].isSelected(): r = i if r and r > 0: self.groupBox2.show() self.sessionMain = True return r else: for i in self.hold_data: if self.hold_data[i].isSelected(): r = i if r and r > 0: self.sessionMain = False self.groupBox2.show() return r else: self.groupBox2.hide() def getSession(self): self.sessionID = None for i in self.hold_data_session: if self.hold_data_session[i].isSelected(): r = i if r and r > 0: self.sessionID = r def getSelection(self): self.le1.clear() currentDate = QDate() self.fromData.setDate(currentDate.currentDate()) self.toData.setDate(currentDate.currentDate()) self.sessionMain = False if self.hold_data_add['addnew'].isSelected(): self.groupBox2.setTitle('Add New') self.groupBox2.show() self.sessionMain = True self.sessionID = False else: self.sessionMain = False r = None for i in self.hold_data_add_item: if self.hold_data_add_item[i].isSelected(): r = i if r: g = Db() v = g.selectn('session', '', 1, {'id': r}) vname = str(v['name']).upper() + ' Session' self.groupBox2.setTitle('ADD ' + str(vname) + ' Term') self.sessionID = r self.groupBox2.show() else: self.groupBox2.setTitle('Add') self.sessionID = False self.groupBox2.hide() def setActive(self): g = Db() for i in self.hold_data: if self.hold_data[i].checkState(0) == Qt.Checked: g.update('datas', {'active': 0}, {'id': i}) else: g.update('datas', {'active': 1}, {'id': i}) def button_add(self): s1 = self.le1.text() _datef = self.fromData.date().toPyDate() _datef = time.mktime(_datef.timetuple()) _datee = self.toData.date().toPyDate() _datee = time.mktime(_datee.timetuple()) g = Db() if self.sessionID and self.sessionID > 0: try: if (len(s1) > 0): y = { 'name': s1.lower(), 'start_date': _datef, 'sessionID': self.sessionID, 'end_date': _datee, 'active': 0 } z = g.insert('terms', y) if z and z > 0: g.createClass(z) g.createSubject(z) g.createFee(z) g.createPay(z) g.createResult(z) g.createAffective(z) g.createPsychomoto(z) self.makeTree() self.button_reset() self.par.menuSession() self.par.dropdownSession() else: pass except: pass else: try: if (len(s1) > 0): y = { 'name': s1.lower(), 'start_date': _datef, 'end_date': _datee, 'active': 0 } z = g.insert('session', y) if z and z > 0: g.createExpenses(z) g.createStores(z) g.createAwards(z) g.createConducts(z) g.createMails(z) g.createMedicals(z) self.makeTree() self.button_reset() self.par.menuSession() self.par.dropdownSession() else: pass except: pass def button_save(self): row = self.editrow s1 = self.le1.text() _datef = self.fromData.date().toPyDate() _datef = time.mktime(_datef.timetuple()) _datee = self.toData.date().toPyDate() _datee = time.mktime(_datee.timetuple()) g = Db() if (len(s1) > 0) and row and row > 0: if self.sessionID and self.sessionID > 0: try: if (len(s1) > 0): y = { 'name': s1.lower(), 'start_date': _datef, 'sessionID': self.sessionID, 'end_date': _datee, 'active': 0 } k = {'id': row} g.update('terms', y, k) z = row if z and z > 0: g.createClass(z) g.createSubject(z) g.createFee(z) g.createPay(z) g.createResult(z) g.createAffective(z) g.createPsychomoto(z) self.makeTree() self.button_reset() self.par.menuSession() self.par.dropdownSession() else: pass except: pass else: try: if (len(s1) > 0): y = { 'name': s1.lower(), 'start_date': _datef, 'end_date': _datee, 'active': 0 } k = {'id': row} g.update('session', y, k) z = row if z and z > 0: g.createExpenses(z) g.createStores(z) g.createAwards(z) g.createConducts(z) g.createMails(z) g.createMedicals(z) self.makeTree() self.button_reset() self.par.menuSession() self.par.dropdownSession() else: pass except: pass def button_delete(self): row = self.getSelected() g = Db() try: if row and row > 0: y = {'abbrv': '', 'active': 2} z = {'id': row} g.update('datas', y, z) self.makeTree() else: pass except: pass def button_reset(self): self.le1.clear() currentDate = QDate() self.fromData.setDate(currentDate.currentDate()) self.toData.setDate(currentDate.currentDate()) self.groupBox2.setTitle('Add') self.groupBox2.hide() self.pb.show() self.pb4.hide() def button_edit(self): row = self.getSelected() currentDate = QDate() if row: self.editrow = row g = Db() if self.sessionMain: data = g.selectn('session', '', 1, {'id': row}) data_name = str(data['name']) self.groupBox2.setTitle('Edit') self.sessionID = False else: data = g.selectn('terms', '', 1, {'id': row}) data_sess = g.selectn('session', '', 1, {'id': data['sessionID']}) data_name = str(data['name']) self.sessionID = data['sessionID'] self.groupBox2.setTitle('Edit ' + str(data_sess['name'])) try: self.le1.setText(data_name) except: self.le1.setText('') try: self.fromData.setDate(data['start_date']) except: self.fromData.setDate(currentDate.currentDate()) try: self.toData.setDate(data['end_date']) except: self.toData.setDate(currentDate.currentDate()) self.pb.hide() self.pb4.show() def button_close(self): self.close()
def restore_default_values_page(self): """Setup UI for default values setting.""" # Clear parameters so it doesn't add parameters when # restore from changes. if self.default_value_parameters: self.default_value_parameters = [] if self.default_value_parameter_containers: self.default_value_parameter_containers = [] default_fields = all_default_fields() for field_group in all_field_groups: settable_fields = [] for field in field_group['fields']: if field not in default_fields: continue else: settable_fields.append(field) default_fields.remove(field) if not settable_fields: continue # Create group box for each field group group_box = QGroupBox(self) group_box.setTitle(field_group['name']) self.container_layout.addWidget(group_box) parameters = [] for settable_field in settable_fields: parameter = self.default_field_to_parameter(settable_field) if parameter: parameters.append(parameter) parameter_container = ParameterContainer( parameters, description_text=field_group['description']) parameter_container.setup_ui(must_scroll=False) group_box_inner_layout = QVBoxLayout() group_box_inner_layout.addWidget(parameter_container) group_box.setLayout(group_box_inner_layout) # Add to attribute self.default_value_parameter_containers.append(parameter_container) # Only show non-groups default fields if there is one if len(default_fields) > 0: for default_field in default_fields: parameter = self.default_field_to_parameter(default_field) if parameter: self.default_value_parameters.append(parameter) description_text = tr( 'In this options you can change the global default values for ' 'these variables.') parameter_container = ParameterContainer( self.default_value_parameters, description_text=description_text) parameter_container.setup_ui(must_scroll=False) self.other_group_box = QGroupBox(tr('Non-group fields')) other_group_inner_layout = QVBoxLayout() other_group_inner_layout.addWidget(parameter_container) self.other_group_box.setLayout(other_group_inner_layout) self.container_layout.addWidget(self.other_group_box) # Add to attribute self.default_value_parameter_containers.append(parameter_container)
class ViewDataToolsHistory(QMainWindow): def __init__(self, parent=None): super(ViewDataToolsHistory, self).__init__(parent) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # DATATOOLS HISTORY WINDOWS: # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ self.setWindowTitle(ui_strings.DATATOOLS_HISTORY_TITLE) self._width = 700 self._height = 380 self._left_margin = 10 self.resize(self._width, self._height) size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(size_policy) self.setMinimumSize(QtCore.QSize(self._width, self._height)) self.setMaximumSize(QtCore.QSize(self._width, self._height)) self.setWindowIcon(QIcon(resources.ICON_LOGO)) # central widget self.central_widget = QWidget(self) # toolbar # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # add toolbar options self.export_action = QAction(QIcon(resources.ICON_EXPORT), 'Export (Ctrl+E)', self) self.export_action.setShortcut('Ctrl+E') self.print_action = QAction(QIcon(resources.ICON_PRINT), 'Print (Ctrl+P)', self) self.print_action.setShortcut('Ctrl+P') self.toolbar = self.addToolBar('Options') self.toolbar.addAction(self.export_action) self.toolbar.addAction(self.print_action) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # group input files self.group_period = QGroupBox(self.central_widget) self.group_period.setGeometry( QtCore.QRect(self._left_margin, 10, 250, 50)) self.group_period.setTitle(ui_strings.DATATOOLS_HISTORY_FILTER) # group by: self.group_group_by = QGroupBox(self.central_widget) self.group_group_by.setGeometry(QtCore.QRect(270, 10, 250, 50)) self.group_group_by.setTitle(ui_strings.DATATOOLS_HISTORY_GROUP) # group by: errors self.rbtn_by_errors = QRadioButton( ui_strings.DATATOOLS_HISTORY_GROUP_ERROR, self.group_group_by) self.rbtn_by_errors.setGeometry(QtCore.QRect(10, 10, 80, 50)) # group by: status #self.group_by_status = QRadioButton(ui_strings.DATATOOLS_HISTORY_GROUP_STATUS, self.group_group_by) #self.group_by_status.setGeometry(QtCore.QRect(100, 10, 80, 50)) # group by: no group #self.group_by_no = QRadioButton(ui_strings.DATATOOLS_HISTORY_GROUP_NO, self.group_group_by) #self.group_by_no.setGeometry(QtCore.QRect(190, 10, 80, 50)) # push button to update table #self.btn_view_group = QPushButton(self.group_group_by) #self.btn_view_group.setGeometry(QtCore.QRect(160, 20, 50, 20)) #self.btn_view_group.setText(ui_strings.DATATOOLS_HISTORY_VIEW) # combobox periods self.cbo_period = QComboBox(self.group_period) self.cbo_period.setGeometry( QtCore.QRect(self._left_margin, 20, 130, 20)) # push button to update table #self.btn_view = QPushButton(self.group_period) #self.btn_view.setGeometry(QtCore.QRect(160, 20, 50, 20)) #self.btn_view.setText(ui_strings.DATATOOLS_HISTORY_VIEW) # table history self.tbl_uploads = QTableWidget(self.central_widget) self.tbl_uploads.setGeometry( QtCore.QRect(self._left_margin, 70, 680, 120)) # chart self.plot_widget = PlotWidget(self.central_widget, 8, 2) self.plot_widget.setGeometry( QtCore.QRect(self._left_margin, 200, 680, 130)) # records - "x records found" self.setCentralWidget(self.central_widget)
class Main(plugin.Plugin): " Main Class " def initialize(self, *args, **kwargs): " Init Main Class " super(Main, self).initialize(*args, **kwargs) self.process = QProcess() self.process.readyReadStandardOutput.connect(self.readOutput) self.process.readyReadStandardError.connect(self.readErrors) self.process.finished.connect(self._process_finished) self.process.error.connect(self._process_finished) # directory auto completer self.completer, self.dirs = QCompleter(self), QDirModel(self) self.dirs.setFilter(QDir.AllEntries | QDir.NoDotAndDotDot) self.completer.setModel(self.dirs) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) self.group0 = QGroupBox() self.group0.setTitle(' Source ') self.source, self.infile = QComboBox(), QLineEdit(path.expanduser("~")) self.source.addItems(['Local File', 'Remote URL']) self.source.currentIndexChanged.connect(self.on_source_changed) self.infile.setPlaceholderText(' /full/path/to/file.html ') self.infile.setCompleter(self.completer) self.open = QPushButton(QIcon.fromTheme("folder-open"), 'Open') self.open.setCursor(QCursor(Qt.PointingHandCursor)) self.open.clicked.connect(lambda: self.infile.setText( str( QFileDialog.getOpenFileName( self.dock, "Open a File to read from", path.expanduser( "~"), ';;'.join([ '{}(*.{})'.format(e.upper(), e) for e in ['html', 'webp', 'webm', 'svg', 'css', 'js', '*'] ]))))) self.inurl, self.output = QLineEdit('http://www.'), QTextEdit() self.inurl.setPlaceholderText( 'http://www.full/url/to/remote/file.html') self.inurl.hide() vboxg0 = QVBoxLayout(self.group0) for each_widget in (self.source, self.infile, self.open, self.inurl): vboxg0.addWidget(each_widget) self.group1 = QGroupBox() self.group1.setTitle(' Mobile ') self.ckcss1 = QCheckBox('Run in full screen using current resolution') self.ckcss2 = QCheckBox('Disable touch mode and use keypad mode') self.ckcss3 = QCheckBox( 'Disable touch mode but allow to use the mouse') self.ckcss4 = QCheckBox( 'Enable mouse,disable pointer & zoom emulation') self.ckcss5 = QCheckBox('Start the Mobile version of the browser') self.ckcss6 = QCheckBox('Start the Tablet version of the browser') self.ckcss7 = QCheckBox('Emulate hardware with Menu and Back keys') self.ckcss8 = QCheckBox('Start the browser in Kiosk mode') self.width, self.height = QSpinBox(), QSpinBox() self.zoom, self.ram, self.dpi = QSpinBox(), QSpinBox(), QSpinBox() self.cpulag, self.gpulag = QSpinBox(), QSpinBox() self.lang, self.agent = QComboBox(), QComboBox() self.lang.addItems(['EN', 'ES', 'PT', 'JA', 'ZH', 'DE', 'RU', 'FR']) self.agent.addItems(['Default', 'Android', 'MeeGo', 'Desktop']) self.fonts = QLineEdit() self.width.setMaximum(9999) self.width.setMinimum(100) self.width.setValue(480) self.height.setMaximum(9999) self.height.setMinimum(100) self.height.setValue(800) self.zoom.setMaximum(999) self.zoom.setMinimum(1) self.zoom.setValue(100) self.ram.setMaximum(999) self.ram.setMinimum(1) self.ram.setValue(100) self.dpi.setMaximum(200) self.dpi.setMinimum(50) self.dpi.setValue(96) self.cpulag.setMaximum(9999) self.cpulag.setMinimum(0) self.cpulag.setValue(1) self.gpulag.setMaximum(9999) self.gpulag.setMinimum(0) self.gpulag.setValue(1) vboxg1 = QVBoxLayout(self.group1) for each_widget in ( self.ckcss1, self.ckcss2, self.ckcss3, self.ckcss4, self.ckcss5, self.ckcss6, self.ckcss7, self.ckcss8, QLabel('Width Pixels of the emulated device screen'), self.width, QLabel('Height Pixels of the emulated device screen'), self.height, QLabel('Zoom Percentage of emulated screen'), self.zoom, QLabel('RAM MegaBytes of the emulated device'), self.ram, QLabel('Language of the emulated device'), self.lang, QLabel('D.P.I. of the emulated device'), self.dpi, QLabel('User-Agent of the emulated device'), self.agent, QLabel('CPU Core Lag Miliseconds of emulated device'), self.cpulag, QLabel('GPU Video Lag Miliseconds of emulated device'), self.gpulag, QLabel('Extra Fonts Directory Full Path'), self.fonts): vboxg1.addWidget(each_widget) self.group2 = QGroupBox() self.group2.setTitle(' General ') self.nice, self.opera = QSpinBox(), QLineEdit(path.expanduser("~")) self.nice.setValue(20) self.nice.setMaximum(20) self.nice.setMinimum(0) self.opera.setCompleter(self.completer) if path.exists(CONFIG_FILE): with codecs.open(CONFIG_FILE, encoding='utf-8') as fp: self.opera.setText(fp.read()) self.open2 = QPushButton(QIcon.fromTheme("folder-open"), 'Open') self.open2.setCursor(QCursor(Qt.PointingHandCursor)) self.open2.clicked.connect(lambda: self.opera.setText( str( QFileDialog.getOpenFileName( self.dock, "Open Opera Mobile Emulator", path.expanduser("~"), 'Opera Mobile Emulator Executable(opera-mobile-emulator)')) )) self.help1 = QLabel('''<a href= "http://www.opera.com/developer/mobile-emulator"> <small><center>Download Opera Mobile Emulator !</a>''') self.help1.setTextInteractionFlags(Qt.LinksAccessibleByMouse) self.help1.setOpenExternalLinks(True) vboxg4 = QVBoxLayout(self.group2) for each_widget in (QLabel(' Backend CPU priority: '), self.nice, QLabel(' Opera Mobile Emulator Full Path: '), self.opera, self.open2, self.help1): vboxg4.addWidget(each_widget) self.button = QPushButton('Preview on Mobile') self.button.setCursor(QCursor(Qt.PointingHandCursor)) self.button.setMinimumSize(100, 50) self.button.clicked.connect(self.run) glow = QGraphicsDropShadowEffect(self) glow.setOffset(0) glow.setBlurRadius(99) glow.setColor(QColor(99, 255, 255)) self.button.setGraphicsEffect(glow) glow.setEnabled(True) class TransientWidget(QWidget): ' persistant widget thingy ' def __init__(self, widget_list): ' init sub class ' super(TransientWidget, self).__init__() vbox = QVBoxLayout(self) for each_widget in widget_list: vbox.addWidget(each_widget) tw = TransientWidget(( QLabel('<b>Mobile Browser Emulator'), self.group0, self.group1, self.group2, self.output, self.button, )) self.scrollable, self.dock = QScrollArea(), QDockWidget() self.scrollable.setWidgetResizable(True) self.scrollable.setWidget(tw) self.dock.setWindowTitle(__doc__) self.dock.setStyleSheet('QDockWidget::title{text-align: center;}') self.dock.setWidget(self.scrollable) ExplorerContainer().addTab(self.dock, "Mobile") QPushButton( QIcon.fromTheme("help-about"), 'About', self.dock).clicked.connect( lambda: QMessageBox.information(self.dock, __doc__, HELPMSG)) def run(self): ' run the string replacing ' self.output.clear() self.button.setEnabled(False) self.output.append(self.formatInfoMsg('INFO:{}'.format( datetime.now()))) if self.source.currentText() == 'Local File': target = 'file://' + str(self.infile.text()).strip() else: target = self.inurl.text() self.output.append(self.formatInfoMsg(' INFO: OK: Parsing Arguments')) cmd = ' '.join( ('nice --adjustment={}'.format(self.nice.value()), '"{}"'.format( self.opera.text()), '-fullscreen' if self.ckcss1.isChecked() is True else '', '-notouch' if self.ckcss2.isChecked() is True else '', '-notouchwithtouchevents' if self.ckcss3.isChecked() is True else '', '-usemouse' if self.ckcss4.isChecked() is True else '', '-mobileui' if self.ckcss5.isChecked() is True else '', '-tabletui' if self.ckcss6.isChecked() is True else '', '-hasmenuandback' if self.ckcss7.isChecked() is True else '', '-k' if self.ckcss8.isChecked() is True else '', '-displaysize {}x{}'.format( self.width.value(), self.height.value()), '-displayzoom {}'.format( self.zoom.value()), '-mem {}M'.format(self.ram.value()), '-lang {}'.format(self.lang.currentText()), '-ppi {}'.format( self.dpi.value()), '-extra-fonts {}'.format(self.fonts.text()) if str(self.fonts.text()).strip() is not '' else '', '-user-agent-string {}'.format( self.agent.currentText()), '-delaycorethread {}'.format( self.cpulag.value()), '-delayuithread {}'.format( self.gpulag.value()), '-url "{}"'.format(target))) self.output.append(self.formatInfoMsg( 'INFO:OK:Command:{}'.format(cmd))) self.process.start(cmd) if not self.process.waitForStarted(): self.output.append(self.formatErrorMsg(' ERROR: FAIL: Meh. ')) self.output.append( self.formatErrorMsg( 'ERROR: FAIL: Failed with Arguments: {} '.format(cmd))) self.button.setEnabled(True) return self.output.setFocus() self.output.selectAll() self.button.setEnabled(True) def on_source_changed(self): ' do something when the desired source has changed ' if self.source.currentText() == 'Local File': self.open.show() self.infile.show() self.inurl.hide() else: self.inurl.show() self.open.hide() self.infile.hide() def _process_finished(self): """ finished sucessfully """ self.output.append(self.formatInfoMsg('INFO:{}'.format( datetime.now()))) self.output.selectAll() self.output.setFocus() def readOutput(self): """Read and append output to the logBrowser""" self.output.append(str(self.process.readAllStandardOutput()).strip()) def readErrors(self): """Read and append errors to the logBrowser""" self.output.append( self.formatErrorMsg(str(self.process.readAllStandardError()))) def formatErrorMsg(self, msg): """Format error messages in red color""" return self.formatMsg(msg, 'red') def formatInfoMsg(self, msg): """Format informative messages in blue color""" return self.formatMsg(msg, 'green') def formatMsg(self, msg, color): """Format message with the given color""" return '<font color="{}">{}</font>'.format(color, msg) def finish(self): ' save when finish ' with codecs.open(CONFIG_FILE, "w", encoding='utf-8') as fp: fp.write(self.opera.text())
def buildMixer(self): log.debug("Building mixer") self.MatrixButtonControls={} self.MatrixRotaryControls={} self.MatrixVolumeControls={} self.VolumeControls={} self.SelectorControls={} self.SPDIFmodeControls={} self.TriggerControls={} nb_pys_out = self.hw.getDiscrete("/HwInfo/PhysicalAudioOutCount") nb_pys_in = self.hw.getDiscrete("/HwInfo/PhysicalAudioInCount") outputtabslayout = QHBoxLayout( self ) outputtabs = QTabWidget(self) outputtabslayout.addWidget( outputtabs, 1 ) for outpair in range(nb_pys_out/2): tab = QWidget( outputtabs ) tablayout = QHBoxLayout( tab ) grpMonitor = QGroupBox(tab) tablayout.addWidget(grpMonitor) grpPlayback = QGroupBox(tab) tablayout.addWidget(grpPlayback) grpOutput = QGroupBox(tab) tablayout.addWidget(grpOutput) grpMonitor.setTitle("Monitor") grpPlayback.setTitle("Playback") grpOutput.setTitle("Output") # monitor controls grpMonitorLayout = QHBoxLayout() grpMonitor.setLayout(grpMonitorLayout); output_id = outpair * 2 for inpair in range(nb_pys_in/2): # create GUI elements strip = AfMonitorWidget( grpMonitor ) grpMonitorLayout.addWidget( strip, 1 ) input_id = inpair*2 strip.lblName.setText("IN %d/%d" % (input_id+1, input_id+2)) # add the elements to the control structure self.MatrixButtonControls[strip.btnMute0] = ['/Mixer/MonitorMute', input_id, output_id] self.MatrixButtonControls[strip.btnMute1] = ['/Mixer/MonitorMute', input_id + 1, output_id + 1] self.MatrixButtonControls[strip.btnSolo0] = ['/Mixer/MonitorSolo', input_id, output_id] self.MatrixButtonControls[strip.btnSolo1] = ['/Mixer/MonitorSolo', input_id + 1, output_id + 1] self.MatrixRotaryControls[strip.rotPan0] = ['/Mixer/MonitorPan', input_id, output_id] self.MatrixRotaryControls[strip.rotPan1] = ['/Mixer/MonitorPan', input_id + 1, output_id + 1] self.MatrixVolumeControls[strip.sldGain0] = ['/Mixer/MonitorGain', input_id, output_id] self.MatrixVolumeControls[strip.sldGain1] = ['/Mixer/MonitorGain', input_id + 1, output_id + 1] # playback grpPlaybackLayout = QHBoxLayout() grpPlayback.setLayout(grpPlaybackLayout); strip = AfMonitorWidget( grpPlayback ) grpPlaybackLayout.addWidget(strip, 1) strip.lblName.setText("Playback %d/%d" % (output_id+1, output_id+2)) self.VolumeControls[strip.sldGain0] = ["/Mixer/PC%dGain" % (output_id)] self.VolumeControls[strip.sldGain1] = ["/Mixer/PC%dGain" % (output_id+1)] self.SelectorControls[strip.btnMute0] = ["/Mixer/PC%dMute" % (output_id)] self.SelectorControls[strip.btnMute1] = ["/Mixer/PC%dMute" % (output_id+1)] self.SelectorControls[strip.btnSolo0] = ["/Mixer/PC%dSolo" % (output_id)] self.SelectorControls[strip.btnSolo1] = ["/Mixer/PC%dSolo" % (output_id+1)] # fix up mixer strip gui strip.rotPan0.hide() strip.rotPan1.hide() # output grpOutputLayout = QHBoxLayout() grpOutput.setLayout(grpOutputLayout); strip = AfMonitorWidget( grpOutput ) grpOutputLayout.addWidget(strip, 1) strip.lblName.setText("Output %d/%d" % (output_id+1, output_id+2)) self.VolumeControls[strip.sldGain0] = ["/Mixer/OUT%dGain" % (output_id)] self.VolumeControls[strip.sldGain1] = ["/Mixer/OUT%dGain" % (output_id+1)] self.SelectorControls[strip.btnMute0] = ["/Mixer/OUT%dMute" % (output_id)] self.SelectorControls[strip.btnMute1] = ["/Mixer/OUT%dMute" % (output_id+1)] self.SelectorControls[strip.btnSolo0] = ["/Mixer/OUT%dNominal" % (output_id)] self.SelectorControls[strip.btnSolo1] = ["/Mixer/OUT%dNominal" % (output_id+1)] # fix up mixer strip gui strip.btnSolo0.setText("Pad") strip.btnSolo1.setText("Pad") strip.rotPan0.hide() strip.rotPan1.hide() # add the tab outputtabs.addTab( tab, "OUT %d/%d" % (output_id+1, output_id+2)) # add an input config tab tab = QWidget( outputtabs ) tablayout = QHBoxLayout( tab ) for inpair in range(nb_pys_in): # create GUI elements log.debug("strip") grpInput = QGroupBox(tab) tablayout.addWidget(grpInput) grpInput.setTitle("IN %d" % (inpair+1)) grpInputLayout = QVBoxLayout() grpInput.setLayout(grpInputLayout); label = QLabel( grpInput ) grpInputLayout.addWidget( label ) label.setText("frienlyname %d" % (inpair+1)) label.setAlignment(Qt.AlignCenter) btn = QPushButton( grpInput ) grpInputLayout.addWidget( btn ) btn.setText("Pad") btn.setCheckable(True) self.SelectorControls[btn] = ["/Mixer/IN%dNominal" % (inpair)] spacer = QSpacerItem(1,1,QSizePolicy.Minimum,QSizePolicy.Expanding) grpInputLayout.addItem(spacer) outputtabs.addTab( tab, "INPUT") # add an settings tab tab = QWidget( outputtabs ) tablayout = QHBoxLayout( tab ) outputtabs.addTab( tab, "SETTINGS") settings = AfSettingsWidget( tab ) has_sw_phantom = self.hw.getDiscrete("/HwInfo/PhantomPower") if has_sw_phantom: self.SelectorControls[settings.btnPhantom] = ["/PhantomPower"] else: settings.btnPhantom.hide() self.TriggerControls[settings.btnSaveSettings] = ["/SaveSettings"] self.TriggerControls[settings.btnIdentify] = ["/Identify"] self.SPDIFmodeControls[settings.radioConsumer] = ["/SpdifMode", 0] self.SPDIFmodeControls[settings.radioProfessional] = ["/SpdifMode", 1]
def buildMixer(self): log.debug("Building mixer") self.MatrixButtonControls = {} self.MatrixRotaryControls = {} self.MatrixVolumeControls = {} self.VolumeControls = {} self.SelectorControls = {} self.SPDIFmodeControls = {} self.TriggerControls = {} self.DigIfaceControls = {} self.PlbkRouteControls = {} self.StreamMonitors = [] nb_pys_out = self.hw.getDiscrete("/HwInfo/PhysicalAudioOutCount") nb_pys_in = self.hw.getDiscrete("/HwInfo/PhysicalAudioInCount") outputtabslayout = QHBoxLayout(self) outputtabs = QTabWidget(self) outputtabslayout.addWidget(outputtabs, 1) for outpair in range(int(nb_pys_out / 2)): tab = QWidget(outputtabs) tablayout = QHBoxLayout(tab) grpMonitor = QGroupBox(tab) tablayout.addWidget(grpMonitor) grpPlayback = QGroupBox(tab) tablayout.addWidget(grpPlayback) grpOutput = QGroupBox(tab) tablayout.addWidget(grpOutput) grpMonitor.setTitle("Monitor") grpPlayback.setTitle("Playback") grpOutput.setTitle("Output") # monitor controls grpMonitorLayout = QHBoxLayout() grpMonitor.setLayout(grpMonitorLayout) output_id = outpair * 2 for inpair in range(int(nb_pys_in / 2)): # create GUI elements strip = AfMonitorWidget(grpMonitor) grpMonitorLayout.addWidget(strip, 1) input_id = inpair * 2 strip.lblName.setText("In %d/%d" % (input_id + 1, input_id + 2)) # add the elements to the control structure self.MatrixButtonControls[strip.btnMute0] = [ '/Mixer/MonitorMute', input_id, output_id ] self.MatrixButtonControls[strip.btnMute1] = [ '/Mixer/MonitorMute', input_id + 1, output_id + 1 ] self.MatrixButtonControls[strip.btnSolo0] = [ '/Mixer/MonitorSolo', input_id, output_id ] self.MatrixButtonControls[strip.btnSolo1] = [ '/Mixer/MonitorSolo', input_id + 1, output_id + 1 ] self.MatrixRotaryControls[strip.rotPan0] = [ '/Mixer/MonitorPan', input_id, output_id ] self.MatrixRotaryControls[strip.rotPan1] = [ '/Mixer/MonitorPan', input_id + 1, output_id + 1 ] self.MatrixVolumeControls[strip.sldGain0] = [ '/Mixer/MonitorGain', input_id, output_id ] self.MatrixVolumeControls[strip.sldGain1] = [ '/Mixer/MonitorGain', input_id + 1, output_id + 1 ] # playback grpPlaybackLayout = QHBoxLayout() grpPlayback.setLayout(grpPlaybackLayout) strip = AfMonitorWidget(grpPlayback) grpPlaybackLayout.addWidget(strip, 1) strip.lblName.setText("Playback %d/%d" % (output_id + 1, output_id + 2)) self.StreamMonitors.append(strip) self.VolumeControls[strip.sldGain0] = [ "/Mixer/PC%dGain" % (output_id) ] self.VolumeControls[strip.sldGain1] = [ "/Mixer/PC%dGain" % (output_id + 1) ] self.SelectorControls[strip.btnMute0] = [ "/Mixer/PC%dMute" % (output_id) ] self.SelectorControls[strip.btnMute1] = [ "/Mixer/PC%dMute" % (output_id + 1) ] self.SelectorControls[strip.btnSolo0] = [ "/Mixer/PC%dSolo" % (output_id) ] self.SelectorControls[strip.btnSolo1] = [ "/Mixer/PC%dSolo" % (output_id + 1) ] # fix up mixer strip gui strip.rotPan0.hide() strip.rotPan1.hide() # output grpOutputLayout = QHBoxLayout() grpOutput.setLayout(grpOutputLayout) strip = AfMonitorWidget(grpOutput) grpOutputLayout.addWidget(strip, 1) strip.lblName.setText("Output %d/%d" % (output_id + 1, output_id + 2)) self.VolumeControls[strip.sldGain0] = [ "/Mixer/OUT%dGain" % (output_id) ] self.VolumeControls[strip.sldGain1] = [ "/Mixer/OUT%dGain" % (output_id + 1) ] self.SelectorControls[strip.btnMute0] = [ "/Mixer/OUT%dMute" % (output_id) ] self.SelectorControls[strip.btnMute1] = [ "/Mixer/OUT%dMute" % (output_id + 1) ] self.SelectorControls[strip.btnSolo0] = [ "/Mixer/OUT%dNominal" % (output_id) ] self.SelectorControls[strip.btnSolo1] = [ "/Mixer/OUT%dNominal" % (output_id + 1) ] # fix up mixer strip gui strip.btnSolo0.setText("Pad") strip.btnSolo1.setText("Pad") strip.rotPan0.hide() strip.rotPan1.hide() # add the tab outputtabs.addTab(tab, "Out %d/%d" % (output_id + 1, output_id + 2)) # add an input config tab tab = QWidget(outputtabs) tablayout = QHBoxLayout(tab) for inpair in range(nb_pys_in): # create GUI elements log.debug("strip") grpInput = QGroupBox(tab) tablayout.addWidget(grpInput) grpInput.setTitle("In %d" % (inpair + 1)) grpInputLayout = QVBoxLayout() grpInput.setLayout(grpInputLayout) label = QLabel(grpInput) grpInputLayout.addWidget(label) label.setText("In %d" % (inpair + 1)) label.setAlignment(Qt.AlignCenter) btn = QToolButton(grpInput) grpInputLayout.addWidget(btn) btn.setText("Pad") btn.setCheckable(True) self.SelectorControls[btn] = ["/Mixer/IN%dNominal" % (inpair)] spacer = QSpacerItem(1, 1, QSizePolicy.Minimum, QSizePolicy.Expanding) grpInputLayout.addItem(spacer) outputtabs.addTab(tab, "Input") # add an settings tab tab = QWidget(outputtabs) tablayout = QHBoxLayout(tab) outputtabs.addTab(tab, "Settings") settings = AfSettingsWidget(tab) has_sw_phantom = self.hw.getDiscrete("/HwInfo/PhantomPower") if has_sw_phantom: self.SelectorControls[settings.btnPhantom] = ["/PhantomPower"] else: settings.btnPhantom.hide() has_opt_iface = self.hw.getDiscrete('/HwInfo/OpticalInterface') if has_opt_iface: self.DigIfaceControls[settings.cmbDigIface] = ['/DigitalInterface'] else: settings.DigIface.hide() has_plbk_route = self.hw.getDiscrete('/HwInfo/PlaybackRouting') if has_plbk_route: self.PlbkRouteControls[settings.cmbRoute1] = [ '/PlaybackRouting', 0 ] self.PlbkRouteControls[settings.cmbRoute2] = [ '/PlaybackRouting', 1 ] self.PlbkRouteControls[settings.cmbRoute3] = [ '/PlaybackRouting', 2 ] if self.configrom.getModelId() == 0x0AF2: label_route2 = 'Headphone Out 1/2' else: label_route2 = 'Analog Out 3/4' settings.labelRoute2.setText(label_route2) else: settings.PlbkRoute.hide() self.TriggerControls[settings.btnSaveSettings] = ["/SaveSettings"] self.TriggerControls[settings.btnIdentify] = ["/Identify"] if self.configrom.getModelId() == 0x0AF12: settings.spdifMode.hide() else: self.SPDIFmodeControls[settings.radioConsumer] = ["/SpdifMode", 0] self.SPDIFmodeControls[settings.radioProfessional] = [ "/SpdifMode", 1 ] # Store a reference to the "save" button for later manipulation self.btnSaveSettings = settings.btnSaveSettings
class ViewDataTools(QMainWindow): def __init__(self, parent=None): super(ViewDataTools, self).__init__(parent) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # DATATOOLS WINDOWS: # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ self.setWindowTitle(ui_strings.DATATOOLS_TITLE) self._width = 680 self._height = 560 self._left_margin = 10 self.resize(self._width, self._height) size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) size_policy.setHorizontalStretch(0) size_policy.setVerticalStretch(0) size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(size_policy) self.setMinimumSize(QtCore.QSize(self._width, self._height)) self.setMaximumSize(QtCore.QSize(self._width, self._height)) self.setWindowIcon(QIcon(resources.ICON_LOGO)) # central widget self.central_widget = QWidget(self) # DataTools description self.lbl_description = QLabel(self.central_widget) self.lbl_description.setGeometry(QtCore.QRect(0, 0, self._width, 30)) self.lbl_description.setAlignment(QtCore.Qt.AlignCenter) self.lbl_description.setText(ui_strings.DATATOOLS_DESCRIPTION) # group input files self.group_input_file = QGroupBox(self.central_widget) self.group_input_file.setGeometry( QtCore.QRect(self._left_margin, 30, 660, 80)) self.group_input_file.setTitle(ui_strings.DATATOOLS_GROUP_INPUT) # frame input files self.frame_inputs = QFrame(self.group_input_file) self.frame_inputs.setGeometry( QtCore.QRect(self._left_margin, 0, 270, 80)) self.frame_inputs.setFrameShape(QFrame.StyledPanel) self.frame_inputs.setFrameShadow(QFrame.Raised) # label input type self.lbl_input_type = QLabel(self.frame_inputs) self.lbl_input_type.setGeometry(QtCore.QRect(20, 20, 60, 15)) self.lbl_input_type.setText(ui_strings.DATATOOLS_INPUT_TYPE) # button xls self.btn_xls = QToolButton(self.frame_inputs) self.btn_xls.setGeometry(QtCore.QRect(20, 35, 35, 35)) icon_xls = QIcon() icon_xls.addPixmap(QPixmap(resources.ICON_XLS), QIcon.Normal, QIcon.Off) self.btn_xls.setIcon(icon_xls) self.btn_xls.setIconSize(QtCore.QSize(24, 24)) self.btn_xls.setCheckable(True) self.btn_xls.setAutoExclusive(True) self.btn_xls.setObjectName("xls_button") # button csv self.btn_csv = QToolButton(self.frame_inputs) self.btn_csv.setGeometry(QtCore.QRect(60, 35, 35, 35)) icon_csv = QIcon() icon_csv.addPixmap(QPixmap(resources.ICON_CSV), QIcon.Normal, QIcon.Off) self.btn_csv.setIcon(icon_csv) self.btn_csv.setIconSize(QtCore.QSize(24, 24)) self.btn_csv.setCheckable(True) self.btn_csv.setAutoExclusive(True) self.btn_csv.setObjectName("csv_button") # checkbox csv with headers self.chk_csv_headers = QCheckBox(ui_strings.DATATOOLS_WITH_HEADERS, self.frame_inputs) self.chk_csv_headers.setGeometry(QtCore.QRect(100, 45, 110, 15)) self.chk_csv_headers.setEnabled(False) # TextEdit + PushButton (FindFolder) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # lbl sheet name self.lbl_file_path = QLabel(self.group_input_file) self.lbl_file_path.setGeometry(QtCore.QRect(250, 20, 120, 15)) self.lbl_file_path.setText(ui_strings.DATATOOLS_SELECT_FILE) self.txt_file = QLineEdit(self.group_input_file) self.txt_file.setGeometry(QtCore.QRect(250, 35, 160, 20)) self.txt_file.setReadOnly(True) self.btn_path = QPushButton(self.group_input_file) self.btn_path.setGeometry(QtCore.QRect(410, 34, 50, 22)) self.btn_path.setText(ui_strings.DATATOOLS_SELECT_BUTTON) # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # lbl sheet name self.lbl_sheet_name = QLabel(self.group_input_file) self.lbl_sheet_name.setGeometry(QtCore.QRect(500, 20, 120, 15)) self.lbl_sheet_name.setText(ui_strings.DATATOOLS_SHEET_NAME) # Combobox select sheet - initially does not contain values self.cbo_sheet = QComboBox(self.group_input_file) self.cbo_sheet.setGeometry(QtCore.QRect(500, 35, 130, 20)) # data grid to visualize error messages self.tbl_errors = QTableWidget(self.central_widget) self.tbl_errors.setGeometry( QtCore.QRect(self._left_margin, 420, 660, 100)) # data grid to visualize those records with errors. self.tbl_uploaded_data = QTableWidget(self.central_widget) self.tbl_uploaded_data.setGeometry( QtCore.QRect(self._left_margin, 120, 500, 220)) # group run options self.group_run_options = QGroupBox(self.central_widget) self.group_run_options.setGeometry(QtCore.QRect(520, 120, 150, 220)) self.group_run_options.setTitle(ui_strings.DATATOOLS_GROUP_RUN) # Errors summary: # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # group summary errors self.group_errors = QGroupBox(self.central_widget) self.group_errors.setGeometry( QtCore.QRect(self._left_margin, 350, 660, 60)) self.group_errors.setTitle(ui_strings.DATATOOLS_HEADER_ERRORS) # lbl records self.lbl_records = QLabel(self.group_errors) self.lbl_records.setGeometry(QtCore.QRect(165, 15, 80, 15)) self.lbl_records.setAlignment(QtCore.Qt.AlignCenter) self.lbl_records.setText(ui_strings.DATATOOLS_RECORDS) self.txt_records = QLineEdit(self.group_errors) self.txt_records.setGeometry(QtCore.QRect(165, 30, 80, 20)) self.txt_records.setAlignment(QtCore.Qt.AlignCenter) self.txt_records.setReadOnly(True) # lbl errors self.lbl_errors = QLabel(self.group_errors) self.lbl_errors.setGeometry(QtCore.QRect(275, 15, 80, 15)) self.lbl_errors.setAlignment(QtCore.Qt.AlignCenter) self.lbl_errors.setText(ui_strings.DATATOOLS_ERRORS) self.txt_errors = QLineEdit(self.group_errors) self.txt_errors.setGeometry(QtCore.QRect(275, 30, 80, 20)) self.txt_errors.setAlignment(QtCore.Qt.AlignCenter) self.txt_errors.setReadOnly(True) # lbl time self.lbl_time = QLabel(self.group_errors) self.lbl_time.setGeometry(QtCore.QRect(385, 15, 80, 15)) self.lbl_time.setAlignment(QtCore.Qt.AlignCenter) self.lbl_time.setText(ui_strings.DATATOOLS_TIME) self.txt_time = QLineEdit(self.group_errors) self.txt_time.setGeometry(QtCore.QRect(385, 30, 80, 20)) self.txt_time.setAlignment(QtCore.Qt.AlignCenter) self.txt_time.setReadOnly(True) # history button self.btn_history = QToolButton(self.group_errors) self.btn_history.setGeometry(QtCore.QRect(500, 25, 100, 25)) icon_history = QIcon() icon_history.addPixmap(QPixmap(resources.ICON_HISTORY), QIcon.Normal, QIcon.Off) self.btn_history.setIcon(icon_history) self.btn_history.setIconSize(QtCore.QSize(20, 20)) self.btn_history.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.btn_history.setText(ui_strings.DATATOOLS_HISTORY) self.btn_history.setCheckable(True) self.btn_history.setAutoExclusive(True) self.btn_history.setObjectName("history_button") # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # btn data uploader self.btn_data_uploader = QPushButton( ui_strings.DATATOOLS_DATA_UPLOADER, self.group_run_options) self.btn_data_uploader.setGeometry(QtCore.QRect(10, 120, 90, 25)) self.btn_data_uploader.setCheckable(True) self.btn_data_uploader.setAutoExclusive(True) self.btn_data_uploader.setFlat(False) # btn data testing self.btn_data_testing = QPushButton(ui_strings.DATATOOLS_DATA_TESTING, self.group_run_options) self.btn_data_testing.setEnabled(False) self.btn_data_testing.setGeometry(QtCore.QRect(10, 150, 90, 25)) self.btn_data_testing.setCheckable(True) self.btn_data_testing.setAutoExclusive(True) # btn data to database self.btn_data_db = QPushButton(ui_strings.DATATOOLS_DATA_DB, self.group_run_options) self.btn_data_db.setEnabled(False) self.btn_data_db.setGeometry(QtCore.QRect(10, 179, 91, 23)) self.btn_data_db.setCheckable(True) self.btn_data_db.setAutoExclusive(True) # frame run options self.frame_run = QFrame(self.group_run_options) self.frame_run.setGeometry(QtCore.QRect(10, 30, 130, 80)) self.frame_run.setFrameShape(QFrame.StyledPanel) self.frame_run.setFrameShadow(QFrame.Raised) # option process until first error self.rbtn_process_error = QRadioButton( ui_strings.DATATOOLS_PROCESS_ERROR, self.frame_run) self.rbtn_process_error.setGeometry(QtCore.QRect(0, 0, 150, 20)) # option process all data self.rbtn_process_all = QRadioButton(ui_strings.DATATOOLS_PROCESS_ALL, self.frame_run) self.rbtn_process_all.setGeometry(QtCore.QRect(0, 20, 150, 30)) # checkbox to filter by records with errors. #self.chk_filter_errors = QCheckBox(ui_strings.DATATOOLS_FILTER_ERRORS, self.frame_run) #self.chk_filter_errors.setGeometry(QtCore.QRect(0, 50, 100, 15)) #self.chk_filter_errors.setEnabled(False) # icons -> pass - error: Initially are empty labels # if not started -> ICON_MINI_WAIT # if error -> ICON_DELETE # if pass -> ICON_CHECK # state icon data uploader self.lbl_state_du = QLabel(self.group_run_options) self.lbl_state_du.setGeometry(QtCore.QRect(110, 120, 20, 20)) self.lbl_state_du.setPixmap(QPixmap(resources.ICON_MINI_WAIT)) self.lbl_state_du.setScaledContents(True) # state icon data to database self.lbl_state_dt = QLabel(self.group_run_options) self.lbl_state_dt.setGeometry(QtCore.QRect(110, 150, 20, 20)) self.lbl_state_dt.setPixmap(QPixmap(resources.ICON_MINI_WAIT)) self.lbl_state_dt.setScaledContents(True) # state icon data testing self.lbl_state_db = QLabel(self.group_run_options) self.lbl_state_db.setGeometry(QtCore.QRect(110, 180, 20, 20)) self.lbl_state_db.setPixmap(QPixmap(resources.ICON_MINI_WAIT)) self.lbl_state_db.setScaledContents(True) # progress bar self.progress_bar = QProgressBar(self.central_widget) self.progress_bar.setGeometry( QtCore.QRect(self._left_margin, 530, 660, 15)) self.progress_bar.setMaximum(100) self.progress_bar.setProperty("value", 0) self.progress_bar.setTextVisible(True) self.progress_bar.setOrientation(QtCore.Qt.Horizontal) self.progress_bar.setInvertedAppearance(False) self.progress_bar.setTextDirection(QProgressBar.TopToBottom) self.setCentralWidget(self.central_widget)
def __init__(self): ' make a diff method with GUI ' self.dialog = QDialog() self.diff_path = None # directory auto completer self.completer = QCompleter(self.dialog) self.dirs = QDirModel(self.dialog) self.dirs.setFilter(QDir.AllEntries | QDir.NoDotAndDotDot) self.completer.setModel(self.dirs) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) #self.completer.setCompletionMode(QCompleter.InlineCompletion) self.group1 = QGroupBox() self.group1.setTitle('Diff') self.frmt = QComboBox(self.group1) self.frmt.addItems(['Unified', 'Normal', 'Context']) self.file1 = QLineEdit() self.file1.setPlaceholderText('/full/path/to/one_file.py') self.file1.setCompleter(self.completer) self.file2 = QLineEdit() self.file2.setPlaceholderText('/full/path/to/another_file.py') self.file2.setCompleter(self.completer) self.fout = QLineEdit() self.fout.setText(''.join((path.join(gettempdir(), datetime.now().strftime('%d-%b-%Y_%H:%M:%S.diff'))))) self.fout.setPlaceholderText('/full/path/to/output_file.diff') self.fout.setCompleter(self.completer) self.regex = QLineEdit() self.regex.setPlaceholderText('DONT use unless you know what are doing') self.regex.setToolTip('Do NOT use unless you know what you are doing !') self.borig = QPushButton(QIcon.fromTheme("folder-open"), 'Open') self.borig.clicked.connect(lambda: self.file1.setText(str( QFileDialog.getOpenFileName(self.dialog, 'Open file to compare', path.expanduser("~"), ';;(*.*)')))) self.bmodi = QPushButton(QIcon.fromTheme("folder-open"), 'Open') self.bmodi.clicked.connect(lambda: self.file2.setText(str( QFileDialog.getOpenFileName(self.dialog, 'Open file to compare', path.expanduser("~"), ';;(*.*)')))) self.bout = QPushButton(QIcon.fromTheme("folder-open"), 'Open') self.bout.clicked.connect(lambda: self.fout.setText(str( QFileDialog.getSaveFileName(self.dialog, 'Save a Diff file', path.expanduser("~"), ';;(*.diff)')))) vboxg1 = QVBoxLayout(self.group1) for each_widget in (QLabel('Original file full path'), self.file1, self.borig, QLabel('Modified file full path'), self.file2, self.bmodi, QLabel('Output file full Path'), self.fout, self.bout, QLabel('Diff Output Format'), self.frmt, QLabel('Diff REGEX to Ignore (ADVANCED)'), self.regex): vboxg1.addWidget(each_widget) self.group2 = QGroupBox() self.group2.setTitle('Options') self.nwfl = QCheckBox('Treat new files as Empty') self.smll = QCheckBox('Look for smaller changes') self.lrgf = QCheckBox('Optimize for large files') self.case = QCheckBox('Ignore case changes on content') self.cnvt = QCheckBox('Convert Tabs to Spaces') self.blnk = QCheckBox('Ignore added or removed Blank lines') self.spac = QCheckBox('Ignore changes in amount of Spaces') self.whit = QCheckBox('Ignore ALL white Spaces') self.tabz = QCheckBox('Ignore changes by Tab expansions') self.sprs = QCheckBox('Remove Space or Tab before empty lines') self.filn = QCheckBox('Ignore case when comparing file names') self.tbs = QComboBox(self.group2) self.tbs.addItems(['4', '6', '8', '10', '2']) self.nice = QComboBox(self.group2) self.nice.addItems(['20', '15', '10', '5', '0']) vboxg2 = QVBoxLayout(self.group2) for each_widget in (self.nwfl, self.smll, self.lrgf, self.case, self.cnvt, self.blnk, self.spac, self.whit, self.tabz, self.sprs, self.filn, QLabel('Diff Tabs-to-Spaces Size'), self.tbs, QLabel('Diff Backend CPU Priority'), self.nice): vboxg2.addWidget(each_widget) try: each_widget.setToolTip(each_widget.text()) except: each_widget.setToolTip(each_widget.currentText()) each_widget.setCursor(QCursor(Qt.PointingHandCursor)) group3 = QGroupBox() group3.setTitle('Even More Options') self.plai = QCheckBox('Force treat all files as plain text') self.nocr = QCheckBox('Force strip trailing carriage return') self.ridt = QCheckBox('Report when two files are identical') self.nocm = QCheckBox('Do not output common lines') self.rdif = QCheckBox('Report only when files differ') self.clip = QCheckBox('Copy Diff to Clipboard when done') self.noti = QCheckBox('Use system Notification when done') self.pret = QCheckBox('Align all Tabs by prepending a Tab') self.lolz = QCheckBox('Output Diff in two equal columns') self.odif = QCheckBox('Open Diff with Ninja-IDE when done') self.plac = QCheckBox('Make an Awesome Diff view when done') self.wdth = QComboBox(group3) self.wdth.addItems(['80', '100', '120', '130', '250', '500', '999999']) self.bcknd = QComboBox(group3) self.bcknd.addItems(['diff', 'diff.py']) self.bcknd.setDisabled(True) #TODO this feature needs work vboxg3 = QVBoxLayout(group3) for each_widget in (self.plai, self.nocr, self.ridt, self.nocm, self.rdif, self.pret, self.clip, self.noti, self.lolz, self.odif, self.plac, QLabel('Diff Maximum Total Width'), self.wdth, QLabel('Diff Backend (EXPERIMENTAL)'), self.bcknd): vboxg3.addWidget(each_widget) try: each_widget.setToolTip(each_widget.text()) except: each_widget.setToolTip(each_widget.currentText()) each_widget.setCursor(QCursor(Qt.PointingHandCursor)) for widget_should_be_checked in (self.nwfl, self.smll, self.lrgf, self.clip, self.cnvt, self.plai, self.noti): widget_should_be_checked.setChecked(True) container = QWidget() hbox = QHBoxLayout(container) for each_widget in (self.group2, self.group1, group3): hbox.addWidget(each_widget) buttons = QDialogButtonBox() buttons.resize(self.dialog.size().width(), buttons.size().height() * 2) buttons.setOrientation(Qt.Horizontal) buttons.setStandardButtons( QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Close | QDialogButtonBox.Help) buttons.setCenterButtons(False) buttons.helpRequested.connect(lambda: QMessageBox.about( self.dialog, __doc__, ''.join((__doc__, ' GUI and Visualizer Plugin,', linesep, 'version ', __version__, ', (', __license__, '), by ', linesep, __author__, ', ( ', __email__, ' ).', linesep)))) buttons.rejected.connect(self.dialog.close) buttons.accepted.connect(self.make_diff) info = QLabel(''.join(('<b> Current Backend Diff Engine: </b>', getoutput('diff --version').split(linesep)[0]))) vbox = QVBoxLayout(self.dialog) for each_widget in ( QLabel('<center><h2> Ninja IDE Diff and Patch </h2></center>'), container, info, buttons): vbox.addWidget(each_widget) self.dialog.resize(1024, self.dialog.size().height()) self.dialog.exec_()
def viewDatasetAction(self): #print "viewDatasetAction" model = self.model table_name = str(model.fileName(self.currentIndex)) table_name_full = str(model.filePath(self.currentIndex)) parentIndex = model.parent(self.currentIndex) parent_name = str(model.fileName(parentIndex)) parent_name_full = str(model.filePath(parentIndex)) storage = StorageFactory().get_storage( 'flt_storage', storage_location=parent_name_full) columns = storage.get_column_names(table_name) # temporarily use the table name for the dataset name # dataset_name = DatasetFactory().dataset_name_for_table(table_name) # Aaron - please check this way of getting the XMLConfiguration -- is this the best way? # general = self.mainwindow.toolboxBase.opus_core_xml_configuration.get_section('general') # # problem: this gets the package order for the current project, but the viewer shows all the data # package_order = general['dataset_pool_configuration'].package_order # PREVIOUS HACK: # package_order = ['seattle_parcel','urbansim_parcel', 'eugene', 'urbansim', 'opus_core'] # temporary code: just use a generic dataset for now data = Dataset(in_storage=storage, dataset_name=table_name, in_table_name=table_name, id_name=[]) # code to get a more specialized dataset if possible (doesn't work with table names not ending in 's' # unless they are in the exceptions list in DatasetFactory) # data = DatasetFactory().search_for_dataset_with_hidden_id(dataset_name, package_order, # arguments={'in_storage': storage, 'in_table_name': table_name}) # Need to add a new tab to the main tabs for display of the data container = QWidget() widgetLayout = QVBoxLayout(container) summaryGroupBox = QGroupBox(container) summaryGroupBox.setTitle( QString("Year: %s Run name: %s" % (parent_name, table_name_full.split('/')[-3]))) summaryGroupBox.setFlat(True) summaryGroupBoxLayout = QVBoxLayout(summaryGroupBox) # Grab the summary data buffer = StringIO() data.summary(output=buffer, unload_after_each_attribute=True) strng = buffer.getvalue() buffer.close() textBrowser = QTextBrowser() # textBrowser.insertPlainText(strng) textBrowser.insertHtml(self.parse_dataset_summary(strng)) summaryGroupBoxLayout.addWidget(textBrowser) widgetLayout.addWidget(summaryGroupBox) tableGroupBox = QGroupBox(container) tableGroupBox.setTitle(QString("Table View")) tableGroupBox.setFlat(True) tableGroupBoxLayout = QVBoxLayout(tableGroupBox) tv = QTableView() header = columns tabledata_tmp = [] for column in columns: tabledata_tmp.append(data.get_attribute(column)) # Transpose the lists tabledata = map(None, *tabledata_tmp) # If the table data is not empty then we display it if tabledata: #tv.resizeColumnsToContents() tm = TableModel(tabledata, header, container) tv.setModel(tm) tv.setSortingEnabled(True) tableGroupBoxLayout.addWidget(tv) widgetLayout.addWidget(tableGroupBox) container.tabIcon = IconLibrary.icon('inspect') container.tabLabel = QString(table_name) self.manager._attach_tab(container)
class RegistrationViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(RegistrationViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.parentWidget().set_window_title("FORMULAIRE D’IMMATRICULATION") self.title = FLabel("<h3>FORMULAIRE D’IMMATRICULATION</h3>") self.office = Office.select().where(Office.id == 1).get() self.created_date_field = FormatDate(QDate.currentDate()) self.created_date_field.setMaximumWidth(130) # self.created_date_field.setInputMask('##/##/####') self.rue_field = IntLineEdit() self.porte_field = IntLineEdit() self.tel_field = IntLineEdit() self.tel_field.setInputMask('## ## ## ##') self.tel2_field = IntLineEdit() self.tel2_field.setInputMask('## ## ## ##') self.bp_field = IntLineEdit() self.email_field = LineEdit() self.denomination_field = LineEdit() self.commercial_name_field = LineEdit() self.declaration_date_field = FormatDate(QDate.currentDate()) self.declaration_date_field.setMaximumWidth(130) self.amount_capital_social_initial = FLabel() self.amount_part_social_field = IntLineEdit() self.apports_numeraire_field = IntLineEdit() self.apports_numeraire_field.textChanged.connect(self.cal_total) self.apports_nature_field = IntLineEdit() self.apports_nature_field.textChanged.connect(self.cal_total) self.apports_industrie_field = IntLineEdit() self.apports_industrie_field.textChanged.connect(self.cal_total) self.duree_statutaire_field = IntLineEdit() self.duree_statutaire_field.setMaximumWidth(80) self.spinneret_box = QComboBox() self.spinneret_box.setMaximumWidth(800) self.activites_box = QComboBox() self.activites_box.setMaximumWidth(800) self.activites_box.currentIndexChanged.connect(self.sp_change_select) self.activities_list = get_activities() for index, value in enumerate(self.activities_list): self.activites_box.addItem( "{}".format(self.activities_list.get(value).upper()), value) # if self.store and self.store.name == op.name: # self.box_store.setCurrentIndex(index) self.formes_box = QComboBox() self.formes_box.setMaximumWidth(800) self.formes_list = get_formes() for index, value in enumerate(self.formes_list): self.formes_box.addItem( "{}".format(self.formes_list.get(value).upper()), value) self.commune_list = entity_children(self.office.slug_cercle).items() self.commune_box = ExtendedComboBox() for index, value in enumerate(self.commune_list): self.commune_box.addItem("{}".format(value[1].upper()), value[0]) # self.commune_box.addItems(self.commune_list) self.commune_box.setToolTip("commune") self.commune_box.currentIndexChanged.connect(self.c_change_select) # self.vfq_list = self.get_vfq_list() self.vfq_box = ExtendedComboBox() self.vfq_list = self.get_vfq_list() for index, value in enumerate(self.vfq_list): self.vfq_box.addItem("{}".format(self.vfq_list.get(value).upper()), value) self.vfq_box.setToolTip("vfq") formbox = QFormLayout() formbox.addRow(FLabel(DATE_DEMANTE), self.declaration_date_field) formbox.addRow(FLabel("1. " + DENOMINATION_S_SC), self.denomination_field) formbox.addRow(FLabel("2. " + NOM_COMMERCIAL), self.commercial_name_field) formbox.addRow(FLabel("3. " + DATE_CREATION_SC), self.created_date_field) formbox.addRow(FLabel("4. " + ACTIVITES_E), self.activites_box) formbox.addRow(FLabel("5. " + FILIERE), self.spinneret_box) formbox.addRow(FLabel("6. " + FORME_SC), self.formes_box) # Capital Social Initial capital_formbox = QFormLayout() capital_formbox.addRow(FLabel("7.1. " + MONTANT_PART_S), self.amount_part_social_field) capital_formbox.addRow(FLabel("7.2. " + MONTANT_APPORTS_NUM), self.apports_numeraire_field) capital_formbox.addRow(FLabel("7.3. " + MONTANT_APPORTS_NAT), self.apports_nature_field) capital_formbox.addRow(FLabel("7.4. " + MONTANT_APPORTS_INDU), self.apports_industrie_field) self.capitalSGroupBox = QGroupBox("7. " + MONTANT_CAPITAL_SI) self.capitalSGroupBox.setLayout(capital_formbox) self.capitalSGroupBox.setStyleSheet(CSS) # self.capitalSGroupBox.setMaximumWidth(1300) # Adresse du siège social self.vline = QFrame() self.vline.setFrameShape(QFrame.VLine) self.vline.setFrameShadow(QFrame.Sunken) self.addresGroupBox = QGroupBox("8. " + ADRESSE_SS) self.addresGroupBox.setStyleSheet(CSS) addres_gribox = QGridLayout() addres_gribox.addWidget(FRLabel(CERCLE), 0, 0) addres_gribox.addWidget(FLabel(self.office.cercle_name()), 0, 1) addres_gribox.addWidget(FRLabel(COMMUNE), 1, 0) addres_gribox.addWidget(self.commune_box, 1, 1) # addres_gribox.addWidget(self.vline, 0, 3, 2, 5) addres_gribox.addWidget(FRLabel(VFQ), 2, 0) addres_gribox.addWidget(self.vfq_box, 2, 1) addres_gribox.addWidget(FRLabel(RUE), 0, 2) addres_gribox.addWidget(self.rue_field, 0, 3) addres_gribox.addWidget(FRLabel(PORTE), 1, 2) addres_gribox.addWidget(self.porte_field, 1, 3) addres_gribox.addWidget(FRLabel(BP), 0, 4) addres_gribox.addWidget(self.bp_field, 0, 5) addres_gribox.addWidget(FRLabel(EMAIL), 1, 4) addres_gribox.addWidget(self.email_field, 1, 5) addres_gribox.addWidget(FRLabel(TEL), 2, 2) addres_gribox.addWidget(self.tel_field, 2, 3) addres_gribox.addWidget(FRLabel(TEL2), 2, 4) addres_gribox.addWidget(self.tel2_field, 2, 5) # addres_gribox.setColumnStretch(6, 5) self.addresGroupBox.setLayout(addres_gribox) # self.addresGroupBox.setMaximumWidth(1300) # Durée statutaire de la société coopérative duree_fbox = QFormLayout() duree_fbox.addRow(FLabel("9. " + DUREE_STATUTAIRE_SC), self.duree_statutaire_field) butt = Button_save(SAVE) butt.clicked.connect(self.save_and_goto_manager) butt_and_continous = Button_save(SAVE_AND_CONTINNUES) butt_and_continous.clicked.connect(self.save_and_goto_add_member) butt_and_continous.setMaximumWidth(300) duree_fbox.addRow(FLabel(""), FLabel("")) duree_fbox.addRow(butt, butt_and_continous) vbox = QVBoxLayout() vbox.addLayout(formbox) vbox.addWidget(self.capitalSGroupBox) vbox.addWidget(self.addresGroupBox) vbox.addLayout(duree_fbox) self.setLayout(vbox) def get_vfq_list(self): # c_dic = {} co_select = self.commune_box.itemData(self.commune_box.currentIndex()) return entity_children(co_select) def c_change_select(self): self.vfq_box.clear() self.vfq_list = self.get_vfq_list() for index, value in enumerate(self.vfq_list): self.vfq_box.addItem("{}".format(self.vfq_list.get(value).upper()), value) def get_spinneret_list(self): # c_dic = {} r_select = self.activites_box.itemData( self.activites_box.currentIndex()) return get_spinneret_activites(r_select) def sp_change_select(self): self.spinneret_box.clear() self.spinneret_list = self.get_spinneret_list() for index, value in enumerate(self.spinneret_list): self.spinneret_box.addItem( "{}".format(self.spinneret_list.get(value).upper()), value) def is_valide(self): if check_is_empty(self.denomination_field): return False if CooperativeCompanie.select().where( CooperativeCompanie.denomination == self.denomination_field.text()).exists(): field_error( self.denomination_field, "Cette dénomination existe déjà dans la base de données !") return False if check_is_empty(self.commercial_name_field): return False if check_is_empty(self.created_date_field): return False if check_is_empty(self.denomination_field): return False if check_is_empty(self.apports_numeraire_field): return False if check_is_empty(self.apports_nature_field): return False if check_is_empty(self.apports_industrie_field): return False # if check_is_empty(self.rue_field): # return False # if check_is_empty(self.porte_field): # return False # print(len(self.tel_field.text())) if len(self.tel_field.text()) != 11: field_error(self.tel_field, "Numéro requis") return False # if check_is_empty(self.bp_field): # return False # if check_is_empty(self.email_field): # return False if check_is_empty(self.duree_statutaire_field): return False # print(int(self.duree_statutaire_field.text())) if int(self.duree_statutaire_field.text()) > 99: field_error( self.duree_statutaire_field, "La durée statutaire ne peut être supérieure à 99 ans") return False return True def save(self): if not self.is_valide(): return self.scoop = CooperativeCompanie() self.scoop.office = self.office self.scoop.created_date = str(self.created_date_field.text()) self.scoop.denomination = str(self.denomination_field.text()) self.scoop.commercial_name = str(self.commercial_name_field.text()) self.scoop.activity = self.activites_box.itemData( self.activites_box.currentIndex()) self.scoop.spinneret = self.spinneret_box.itemData( self.spinneret_box.currentIndex()) self.scoop.forme = self.formes_box.itemData( self.formes_box.currentIndex()) self.scoop.amount_part_social = is_int( self.amount_part_social_field.text()) self.scoop.apports_numeraire = is_int( self.apports_numeraire_field.text()) self.scoop.apports_nature = is_int(self.apports_nature_field.text()) self.scoop.apports_industrie = is_int( self.apports_industrie_field.text()) self.scoop.region = self.office.slug_region self.scoop.cercle = self.office.slug_cercle self.scoop.commune = self.commune_box.itemData( self.commune_box.currentIndex()) self.scoop.vfq = self.vfq_box.itemData(self.vfq_box.currentIndex()) self.scoop.rue = is_int(self.rue_field.text()) self.scoop.porte = is_int(self.porte_field.text()) self.scoop.tel = is_int(self.tel_field.text()) self.scoop.tel2 = is_int(self.tel2_field.text()) self.scoop.bp = is_int(self.bp_field.text()) self.scoop.email = self.email_field.text() self.scoop.duree_statutaire = is_int( self.duree_statutaire_field.text()) self.scoop.save_() check_list = CheckList() check_list.save_() self.dmd = Demande() self.dmd.check_list = check_list self.dmd.declaration_date = str(self.declaration_date_field.text()) self.dmd.scoop = self.scoop self.dmd.status = self.dmd.ADDMEMBER self.dmd.save_() return True def save_and_goto_add_member(self): if self.save(): from ui.member_manager import MemberManagerWidget self.parent.change_context(MemberManagerWidget, dmd=self.dmd) def save_and_goto_manager(self): if self.save(): self.parent.change_context(ResgistrationManagerWidget) def cal_total(self): total = is_int(self.apports_numeraire_field.text() or 0) + is_int( self.apports_nature_field.text() or 0) + is_int( self.apports_industrie_field.text() or 0) self.capitalSGroupBox.setTitle("7. {} : {}".format( MONTANT_CAPITAL_SI, device_amount(total)))
def __createLayout(self): """ Creates the dialog layout """ self.resize(600, 300) self.setSizeGripEnabled(True) verticalLayout = QVBoxLayout(self) gridLayout = QGridLayout() # Combo box for the text to search findLabel = QLabel(self) findLabel.setText("Find text:") self.findCombo = QComboBox(self) self.__tuneCombo(self.findCombo) self.findCombo.lineEdit().setToolTip( "Regular expression to search for") self.findCombo.editTextChanged.connect(self.__someTextChanged) gridLayout.addWidget(findLabel, 0, 0, 1, 1) gridLayout.addWidget(self.findCombo, 0, 1, 1, 1) verticalLayout.addLayout(gridLayout) # Check boxes horizontalCBLayout = QHBoxLayout() self.caseCheckBox = QCheckBox(self) self.caseCheckBox.setText("Match &case") horizontalCBLayout.addWidget(self.caseCheckBox) self.wordCheckBox = QCheckBox(self) self.wordCheckBox.setText("Match whole &word") horizontalCBLayout.addWidget(self.wordCheckBox) self.regexpCheckBox = QCheckBox(self) self.regexpCheckBox.setText("Regular &expression") horizontalCBLayout.addWidget(self.regexpCheckBox) verticalLayout.addLayout(horizontalCBLayout) # Files groupbox filesGroupbox = QGroupBox(self) filesGroupbox.setTitle("Find in") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( filesGroupbox.sizePolicy().hasHeightForWidth()) filesGroupbox.setSizePolicy(sizePolicy) gridLayoutFG = QGridLayout(filesGroupbox) self.projectRButton = QRadioButton(filesGroupbox) self.projectRButton.setText("&Project") gridLayoutFG.addWidget(self.projectRButton, 0, 0) self.projectRButton.clicked.connect(self.__projectClicked) self.openFilesRButton = QRadioButton(filesGroupbox) self.openFilesRButton.setText("&Opened files only") gridLayoutFG.addWidget(self.openFilesRButton, 1, 0) self.openFilesRButton.clicked.connect(self.__openFilesOnlyClicked) self.dirRButton = QRadioButton(filesGroupbox) self.dirRButton.setText("&Directory tree") gridLayoutFG.addWidget(self.dirRButton, 2, 0) self.dirRButton.clicked.connect(self.__dirClicked) self.dirEditCombo = QComboBox(filesGroupbox) self.__tuneCombo(self.dirEditCombo) self.dirEditCombo.lineEdit().setToolTip("Directory to search in") gridLayoutFG.addWidget(self.dirEditCombo, 2, 1) self.dirEditCombo.editTextChanged.connect(self.__someTextChanged) self.dirSelectButton = QPushButton(filesGroupbox) self.dirSelectButton.setText("...") gridLayoutFG.addWidget(self.dirSelectButton, 2, 2) self.dirSelectButton.clicked.connect(self.__selectDirClicked) filterLabel = QLabel(filesGroupbox) filterLabel.setText("Files filter:") gridLayoutFG.addWidget(filterLabel, 3, 0) self.filterCombo = QComboBox(filesGroupbox) self.__tuneCombo(self.filterCombo) self.filterCombo.lineEdit().setToolTip("File names regular expression") gridLayoutFG.addWidget(self.filterCombo, 3, 1) self.filterCombo.editTextChanged.connect(self.__someTextChanged) verticalLayout.addWidget(filesGroupbox) # File label self.fileLabel = FitPathLabel(self) self.fileLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Fixed) verticalLayout.addWidget(self.fileLabel) # Progress bar self.progressBar = QProgressBar(self) self.progressBar.setValue(0) self.progressBar.setOrientation(Qt.Horizontal) verticalLayout.addWidget(self.progressBar) # Buttons at the bottom buttonBox = QDialogButtonBox(self) buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Cancel) self.findButton = buttonBox.addButton("Find", QDialogButtonBox.AcceptRole) self.findButton.setDefault(True) self.findButton.clicked.connect(self.__process) verticalLayout.addWidget(buttonBox) buttonBox.rejected.connect(self.__onClose) return
class CalcDlg(QDialog): def __init__(self, parent, point3d, startBearing, flagStr): QDialog.__init__(self, parent) self.parent0 = parent self.point = point3d self.flagStr = flagStr self.calcedPoint = None self.startBearing = startBearing # self.flagStrName = flagStr # self.resize(326, 310) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setSpacing(6) self.verticalLayout.setMargin(3) self.verticalLayout.setObjectName(("verticalLayout")) self.groupBox = QGroupBox(self) self.groupBox.setTitle(("")) self.groupBox.setObjectName(("groupBox")) self.verticalLayout_2 = QVBoxLayout(self.groupBox) self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setMargin(3) self.verticalLayout_2.setObjectName(("verticalLayout_2")) self.groupBox_5 = QGroupBox(self.groupBox) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.groupBox_5.sizePolicy().hasHeightForWidth()) self.groupBox_5.setSizePolicy(sizePolicy) font = QFont() font.setFamily(("Arial")) self.groupBox_5.setFont(font) self.groupBox_5.setObjectName(("groupBox_5")) self.horizontalLayout_19 = QHBoxLayout(self.groupBox_5) self.horizontalLayout_19.setSpacing(0) self.horizontalLayout_19.setMargin(0) self.horizontalLayout_19.setObjectName(("horizontalLayout_19")) self.groupBox_5.setVisible(False) self.frame_18 = QFrame(self.groupBox_5) self.frame_18.setFrameShape(QFrame.StyledPanel) self.frame_18.setFrameShadow(QFrame.Raised) self.frame_18.setObjectName(("frame_18")) self.verticalLayout_13 = QVBoxLayout(self.frame_18) self.verticalLayout_13.setSpacing(0) self.verticalLayout_13.setContentsMargins(-1, -1, 0, -1) self.verticalLayout_13.setObjectName(("verticalLayout_13")) self.frame_19 = QFrame(self.frame_18) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_19.sizePolicy().hasHeightForWidth()) self.frame_19.setSizePolicy(sizePolicy) self.frame_19.setFrameShape(QFrame.StyledPanel) self.frame_19.setFrameShadow(QFrame.Raised) self.frame_19.setObjectName(("frame_19")) self.horizontalLayout_20 = QHBoxLayout(self.frame_19) self.horizontalLayout_20.setSpacing(0) self.horizontalLayout_20.setMargin(0) self.horizontalLayout_20.setObjectName(("horizontalLayout_20")) self.label_9 = QLabel(self.frame_19) self.label_9.setMaximumSize(QSize(60, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.label_9.setFont(font) self.label_9.setObjectName(("label_9")) self.horizontalLayout_20.addWidget(self.label_9) self.txtTHR_X = QLineEdit(self.frame_19) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtTHR_X.sizePolicy().hasHeightForWidth()) self.txtTHR_X.setSizePolicy(sizePolicy) self.txtTHR_X.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtTHR_X.setFont(font) self.txtTHR_X.setObjectName(("txtTHR_X")) self.horizontalLayout_20.addWidget(self.txtTHR_X) self.verticalLayout_13.addWidget(self.frame_19) self.frame_20 = QFrame(self.frame_18) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_20.sizePolicy().hasHeightForWidth()) self.frame_20.setSizePolicy(sizePolicy) self.frame_20.setFrameShape(QFrame.StyledPanel) self.frame_20.setFrameShadow(QFrame.Raised) self.frame_20.setObjectName(("frame_20")) self.horizontalLayout_21 = QHBoxLayout(self.frame_20) self.horizontalLayout_21.setSpacing(0) self.horizontalLayout_21.setMargin(0) self.horizontalLayout_21.setObjectName(("horizontalLayout_21")) self.label_10 = QLabel(self.frame_20) self.label_10.setMaximumSize(QSize(60, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.label_10.setFont(font) self.label_10.setObjectName(("label_10")) self.horizontalLayout_21.addWidget(self.label_10) self.txtTHR_Y = QLineEdit(self.frame_20) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtTHR_Y.sizePolicy().hasHeightForWidth()) self.txtTHR_Y.setSizePolicy(sizePolicy) self.txtTHR_Y.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtTHR_Y.setFont(font) self.txtTHR_Y.setObjectName(("txtTHR_Y")) self.horizontalLayout_21.addWidget(self.txtTHR_Y) self.verticalLayout_13.addWidget(self.frame_20) self.horizontalLayout_19.addWidget(self.frame_18) self.frame_21 = QFrame(self.groupBox_5) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_21.sizePolicy().hasHeightForWidth()) self.frame_21.setSizePolicy(sizePolicy) self.frame_21.setMaximumSize(QSize(30, 70)) self.frame_21.setFrameShape(QFrame.StyledPanel) self.frame_21.setFrameShadow(QFrame.Raised) self.frame_21.setObjectName(("frame_21")) self.verticalLayout_14 = QVBoxLayout(self.frame_21) self.verticalLayout_14.setSpacing(0) self.verticalLayout_14.setMargin(0) self.verticalLayout_14.setObjectName(("verticalLayout_14")) self.btnCaptureRunwayTHR = QToolButton(self.frame_21) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.btnCaptureRunwayTHR.sizePolicy().hasHeightForWidth()) self.btnCaptureRunwayTHR.setSizePolicy(sizePolicy) self.btnCaptureRunwayTHR.setMaximumSize(QSize(16777215, 47)) icon = QIcon() icon.addPixmap(QPixmap(("Resource/coordinate_capture.png")), QIcon.Normal, QIcon.Off) self.btnCaptureRunwayTHR.setIcon(icon) self.btnCaptureRunwayTHR.setObjectName(("btnCaptureRunwayTHR")) self.verticalLayout_14.addWidget(self.btnCaptureRunwayTHR) # self.btnToolTHR = QToolButton(self.frame_21) # sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(0) # sizePolicy.setHeightForWidth(self.btnToolTHR.sizePolicy().hasHeightForWidth()) # self.btnToolTHR.setSizePolicy(sizePolicy) # self.btnToolTHR.setMaximumSize(QSize(16777215, 20)) # icon1 = QIcon() # icon1.addPixmap(QPixmap(("Resource/sort2.png")), QIcon.Normal, QIcon.Off) # self.btnToolTHR.setIcon(icon1) # self.btnToolTHR.setObjectName(("btnToolTHR")) # self.verticalLayout_14.addWidget(self.btnToolTHR) self.horizontalLayout_19.addWidget(self.frame_21) self.verticalLayout_2.addWidget(self.groupBox_5) self.groupBox_4 = QGroupBox(self.groupBox) self.groupBox_4.setVisible(False) # self.groupBox.setVisible(False) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.groupBox_4.sizePolicy().hasHeightForWidth()) self.groupBox_4.setSizePolicy(sizePolicy) font = QFont() font.setFamily(("Arial")) self.groupBox_4.setFont(font) self.groupBox_4.setObjectName(("groupBox_4")) self.horizontalLayout_16 = QHBoxLayout(self.groupBox_4) self.horizontalLayout_16.setSpacing(0) self.horizontalLayout_16.setMargin(0) self.horizontalLayout_16.setObjectName(("horizontalLayout_16")) self.frame_14 = QFrame(self.groupBox_4) self.frame_14.setFrameShape(QFrame.StyledPanel) self.frame_14.setFrameShadow(QFrame.Raised) self.frame_14.setObjectName(("frame_14")) self.verticalLayout_11 = QVBoxLayout(self.frame_14) self.verticalLayout_11.setSpacing(0) self.verticalLayout_11.setContentsMargins(-1, -1, 0, -1) self.verticalLayout_11.setObjectName(("verticalLayout_11")) self.frame_15 = QFrame(self.frame_14) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_15.sizePolicy().hasHeightForWidth()) self.frame_15.setSizePolicy(sizePolicy) self.frame_15.setFrameShape(QFrame.StyledPanel) self.frame_15.setFrameShadow(QFrame.Raised) self.frame_15.setObjectName(("frame_15")) self.horizontalLayout_17 = QHBoxLayout(self.frame_15) self.horizontalLayout_17.setSpacing(0) self.horizontalLayout_17.setMargin(0) self.horizontalLayout_17.setObjectName(("horizontalLayout_17")) self.label_7 = QLabel(self.frame_15) self.label_7.setMaximumSize(QSize(60, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.label_7.setFont(font) self.label_7.setObjectName(("label_7")) self.horizontalLayout_17.addWidget(self.label_7) self.txtEND_X = QLineEdit(self.frame_15) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtEND_X.sizePolicy().hasHeightForWidth()) self.txtEND_X.setSizePolicy(sizePolicy) self.txtEND_X.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtEND_X.setFont(font) self.txtEND_X.setObjectName(("txtEND_X")) self.horizontalLayout_17.addWidget(self.txtEND_X) self.verticalLayout_11.addWidget(self.frame_15) self.frame_16 = QFrame(self.frame_14) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_16.sizePolicy().hasHeightForWidth()) self.frame_16.setSizePolicy(sizePolicy) self.frame_16.setFrameShape(QFrame.StyledPanel) self.frame_16.setFrameShadow(QFrame.Raised) self.frame_16.setObjectName(("frame_16")) self.horizontalLayout_18 = QHBoxLayout(self.frame_16) self.horizontalLayout_18.setSpacing(0) self.horizontalLayout_18.setMargin(0) self.horizontalLayout_18.setObjectName(("horizontalLayout_18")) self.label_8 = QLabel(self.frame_16) self.label_8.setMaximumSize(QSize(60, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.label_8.setFont(font) self.label_8.setObjectName(("label_8")) self.horizontalLayout_18.addWidget(self.label_8) self.txtEND_Y = QLineEdit(self.frame_16) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtEND_Y.sizePolicy().hasHeightForWidth()) self.txtEND_Y.setSizePolicy(sizePolicy) self.txtEND_Y.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtEND_Y.setFont(font) self.txtEND_Y.setObjectName(("txtEND_Y")) self.horizontalLayout_18.addWidget(self.txtEND_Y) self.verticalLayout_11.addWidget(self.frame_16) self.horizontalLayout_16.addWidget(self.frame_14) self.frame_17 = QFrame(self.groupBox_4) self.frame_17.setMaximumSize(QSize(30, 16777215)) self.frame_17.setFrameShape(QFrame.StyledPanel) self.frame_17.setFrameShadow(QFrame.Raised) self.frame_17.setObjectName(("frame_17")) self.verticalLayout_12 = QVBoxLayout(self.frame_17) self.verticalLayout_12.setSpacing(0) self.verticalLayout_12.setMargin(0) self.verticalLayout_12.setObjectName(("verticalLayout_12")) self.btnCaptureRunwayEND = QToolButton(self.frame_17) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.btnCaptureRunwayEND.sizePolicy().hasHeightForWidth()) self.btnCaptureRunwayEND.setSizePolicy(sizePolicy) self.btnCaptureRunwayEND.setMaximumSize(QSize(16777215, 47)) self.btnCaptureRunwayEND.setIcon(icon) self.btnCaptureRunwayEND.setObjectName(("btnCaptureRunwayEND")) self.verticalLayout_12.addWidget(self.btnCaptureRunwayEND) # self.btnToolEND = QToolButton(self.frame_17) # sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(0) # sizePolicy.setHeightForWidth(self.btnToolEND.sizePolicy().hasHeightForWidth()) # self.btnToolEND.setSizePolicy(sizePolicy) # self.btnToolEND.setMaximumSize(QSize(16777215, 20)) # self.btnToolEND.setIcon(icon1) # self.btnToolEND.setObjectName(("btnToolEND")) # self.verticalLayout_12.addWidget(self.btnToolEND) self.horizontalLayout_16.addWidget(self.frame_17) self.verticalLayout_2.addWidget(self.groupBox_4) self.lbl1 = QLabel(self.groupBox) font = QFont() font.setFamily(("Arial")) self.lbl1.setFont(font) self.lbl1.setText(("")) self.lbl1.setAlignment(Qt.AlignCenter) self.lbl1.setWordWrap(False) self.lbl1.setMargin(0) self.lbl1.setObjectName(("lbl1")) self.verticalLayout_2.addWidget(self.lbl1) self.lbl2 = QLabel(self.groupBox) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.lbl2.setFont(font) self.lbl2.setText(("")) self.lbl2.setAlignment(Qt.AlignCenter) self.lbl2.setObjectName(("lbl2")) self.verticalLayout_2.addWidget(self.lbl2) self.frame_22 = QFrame(self.groupBox) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_22.sizePolicy().hasHeightForWidth()) self.frame_22.setSizePolicy(sizePolicy) self.frame_22.setFrameShape(QFrame.StyledPanel) self.frame_22.setFrameShadow(QFrame.Raised) self.frame_22.setObjectName(("frame_22")) self.horizontalLayout_22 = QHBoxLayout(self.frame_22) self.horizontalLayout_22.setSpacing(0) self.horizontalLayout_22.setMargin(0) self.horizontalLayout_22.setObjectName(("horizontalLayout_22")) self.label_11 = QLabel(self.frame_22) self.label_11.setMinimumSize(QSize(170, 0)) self.label_11.setMaximumSize(QSize(180, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.label_11.setFont(font) self.label_11.setObjectName(("label_11")) self.horizontalLayout_22.addWidget(self.label_11) self.txtForm = QLineEdit(self.frame_22) self.txtForm.setEnabled(False) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtForm.sizePolicy().hasHeightForWidth()) self.txtForm.setSizePolicy(sizePolicy) self.txtForm.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtForm.setFont(font) self.txtForm.setObjectName(("txtForm")) self.horizontalLayout_22.addWidget(self.txtForm) self.verticalLayout_2.addWidget(self.frame_22) self.frame_23 = QFrame(self.groupBox) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_23.sizePolicy().hasHeightForWidth()) self.frame_23.setSizePolicy(sizePolicy) self.frame_23.setFrameShape(QFrame.StyledPanel) self.frame_23.setFrameShadow(QFrame.Raised) self.frame_23.setObjectName(("frame_23")) self.horizontalLayout_23 = QHBoxLayout(self.frame_23) self.horizontalLayout_23.setSpacing(0) self.horizontalLayout_23.setMargin(0) self.horizontalLayout_23.setObjectName(("horizontalLayout_23")) self.label_12 = QLabel(self.frame_23) self.label_12.setMinimumSize(QSize(170, 0)) self.label_12.setMaximumSize(QSize(180, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.label_12.setFont(font) self.label_12.setObjectName(("label_12")) self.horizontalLayout_23.addWidget(self.label_12) self.txtBearing = QLineEdit(self.frame_23) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtBearing.sizePolicy().hasHeightForWidth()) self.txtBearing.setSizePolicy(sizePolicy) self.txtBearing.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtBearing.setFont(font) self.txtBearing.setObjectName(("txtBearing")) self.horizontalLayout_23.addWidget(self.txtBearing) self.btnCaptureBearing = QToolButton(self.frame_23) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.btnCaptureBearing.sizePolicy().hasHeightForWidth()) self.btnCaptureBearing.setSizePolicy(sizePolicy) self.btnCaptureBearing.setMaximumSize(QSize(16777215, 25)) self.btnCaptureBearing.setStyleSheet(("")) self.btnCaptureBearing.setIcon(icon) self.btnCaptureBearing.setObjectName(("btnCaptureBearing")) self.horizontalLayout_23.addWidget(self.btnCaptureBearing) self.verticalLayout_2.addWidget(self.frame_23) self.frame_24 = QFrame(self.groupBox) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.frame_24.sizePolicy().hasHeightForWidth()) self.frame_24.setSizePolicy(sizePolicy) self.frame_24.setFrameShape(QFrame.StyledPanel) self.frame_24.setFrameShadow(QFrame.Raised) self.frame_24.setObjectName(("frame_24")) self.horizontalLayout_24 = QHBoxLayout(self.frame_24) self.horizontalLayout_24.setSpacing(0) self.horizontalLayout_24.setMargin(0) self.horizontalLayout_24.setObjectName(("horizontalLayout_24")) self.lblDistance = QLabel(self.frame_24) self.lblDistance.setMinimumSize(QSize(170, 0)) self.lblDistance.setMaximumSize(QSize(180, 16777215)) font = QFont() font.setFamily(("Arial")) font.setBold(False) font.setWeight(50) self.lblDistance.setFont(font) self.lblDistance.setObjectName(("lblDistance")) self.horizontalLayout_24.addWidget(self.lblDistance) self.txtDistance = QLineEdit(self.frame_24) self.txtDistance.setEnabled(False) sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.txtDistance.sizePolicy().hasHeightForWidth()) self.txtDistance.setSizePolicy(sizePolicy) self.txtDistance.setMaximumSize(QSize(16777215, 16777215)) font = QFont() font.setFamily(("Arial")) self.txtDistance.setFont(font) self.txtDistance.setObjectName(("txtDistance")) self.horizontalLayout_24.addWidget(self.txtDistance) self.btnCaptureDistance = QToolButton(self.frame_24) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.btnCaptureDistance.sizePolicy().hasHeightForWidth()) self.btnCaptureDistance.setSizePolicy(sizePolicy) self.btnCaptureDistance.setMaximumSize(QSize(16777215, 23)) self.btnCaptureDistance.setStyleSheet(("")) self.btnCaptureDistance.setIcon(icon) self.btnCaptureDistance.setObjectName(("btnCaptureDistance")) self.horizontalLayout_24.addWidget(self.btnCaptureDistance) self.verticalLayout_2.addWidget(self.frame_24) self.verticalLayout.addWidget(self.groupBox) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName(("buttonBox")) self.verticalLayout.addWidget(self.buttonBox) self.btnCaptureDistance.clicked.connect(self.method_9) self.btnCaptureBearing.clicked.connect(self.method_8) self.txtEND_X.textChanged.connect(self.method_4) self.txtEND_Y.textChanged.connect(self.method_4) self.txtTHR_X.textChanged.connect(self.method_4) self.txtTHR_Y.textChanged.connect(self.method_4) # self.type = rnavType # self.category = category # self.resultPosionList = position_List self.MinBearing2 = 0 self.MaxBearing2 = 0 self.waypoint = None self.distanceMeasureTool = MeasureTool(define._canvas, self.txtDistance, DistanceUnits.NM) self.bearingTool = CaptureBearingTool(define._canvas, self.txtBearing) self.CaptureTHRCoordTool = CaptureCoordinateTool( define._canvas, self.txtTHR_X, self.txtTHR_Y) self.CaptureTHRCoordTool.rubberBandClick.setColor(Qt.green) self.CaptureENDCoordTool = CaptureCoordinateTool( define._canvas, self.txtEND_X, self.txtEND_Y) self.CaptureENDCoordTool.rubberBandClick.setColor(Qt.blue) # if rnavType == RnavCommonWaypoint.FAWP or rnavType == RnavCommonWaypoint.MAWP: # self.from1 = position_0 # # self.resize(326, 310) # if position_List[0] != None: # self.setThrPosition(position_List[0].x(),position_List[0].y()) # self.CaptureTHRCoordTool.rubberBandClick.addPoint(QgsPoint(position_List[0].x(),position_List[0].y())) # # self.CaptureTHRCoordTool.rubberBandClick.show() # if position_List[1] != None: # self.setEndPosition(position_List[1].x(),position_List[1].y()) # self.CaptureENDCoordTool.rubberBandClick.addPoint(QgsPoint(position_List[1].x(),position_List[1].y())) # # self.setWaypoint(position_List[2]) # else: # self.from1 = position_1 # num = RnavWaypoints.smethod_0(position_0, position_1) # self.MinBearing = RnavWaypoints.smethod_7(rnavType, category, num) # self.MaxBearing= RnavWaypoints.smethod_8(rnavType, category, num) # self.MinDistance = RnavWaypoints.smethod_4(rnavType, category) # if flagStr == "Y-Bar": # if (rnavType == RnavCommonWaypoint.IAWP1): # self.setBearing(self.MaxBearing) # elif (rnavType != RnavCommonWaypoint.IAWP3): # self.setBearing(num) # else: # self.setBearing(self.MinBearing) # else: # if (rnavType == RnavCommonWaypoint.IAWP1): # self.setBearing(self.MinBearing) # elif (rnavType != RnavCommonWaypoint.IAWP3): # self.setBearing(num) # else: # self.setBearing(self.MaxBearing) # # if self.txtDistance.isEnabled(): # # self.setDistance(RnavWaypoints.smethod_6(rnavType, category).NauticalMiles) # # self.setWaypoint(position_List.pop(0)) # self.method_4() self.retranslateUi() QObject.connect(self.buttonBox, SIGNAL(("accepted()")), self.btnCalculate_Click) QObject.connect(self.buttonBox, SIGNAL(("rejected()")), self.reject) # QMetaObject.connectSlotsByName(Dialog) # self.btnToolEND.clicked.connect(self.removeEnd) # self.btnToolTHR.clicked.connect(self.removeThr) self.btnCaptureRunwayTHR.clicked.connect(self.captureTHR) self.btnCaptureRunwayEND.clicked.connect(self.captureEND) self.txtDistance.setText("10") def retranslateUi(self): self.setWindowTitle("CaculaterDlg") self.groupBox_5.setTitle("Runway THR") self.label_9.setText("X:") self.label_10.setText("Y:") self.btnCaptureRunwayTHR.setText("...") # self.btnToolTHR.setText("...") self.groupBox_4.setTitle("Runway END") self.label_7.setText("X:") self.label_8.setText("Y:") self.btnCaptureRunwayEND.setText("...") # self.btnToolEND.setText("...") self.label_11.setText("From:") self.txtForm.setText("FAWP") self.label_12.setText(unicode("Bearing (°) :", "utf-8")) # self.txtBearing.setText("188.25") self.btnCaptureBearing.setText("...") self.lblDistance.setText("Distance (nm):") self.txtDistance.setText("5") self.btnCaptureDistance.setText("...") def captureTHR(self): define._canvas.setMapTool(self.CaptureTHRCoordTool) def captureEND(self): define._canvas.setMapTool(self.CaptureENDCoordTool) def close(self): scene = define._canvas.scene() scene.removeItem(self.CaptureTHRCoordTool.rubberBandClick) scene.removeItem(self.CaptureENDCoordTool.rubberBandClick) scene.removeItem(self.bearingTool.rubberBand) scene.removeItem(self.distanceMeasureTool.rubberBand) # self.CaptureTHRCoordTool.rubberBand.hide() # self.CaptureENDCoordTool.rubberBand.hide() define._canvas.setMapTool(QgsMapToolPan(define._canvas)) # self.reject() def reject(self): self.close() QDialog.reject(self) def getThrPoint3D(self): if self.txtTHR_X.text() != "" and self.txtTHR_Y.text() != "": try: x = float(self.txtTHR_X.text()) except ValueError: x = 0 try: y = float(self.txtTHR_Y.text()) except ValueError: y = 0 return Point3D(x, y, 0) else: return None def getEndPoint3D(self): if self.txtEND_X.text() != "" and self.txtEND_Y.text() != "": try: x = float(self.txtEND_X.text()) except ValueError: x = 0 try: y = float(self.txtEND_Y.text()) except ValueError: y = 0 return Point3D(x, y, 0) else: return None def setEndPosition(self, x, y): self.txtEND_X.setText(str(x)) self.txtEND_Y.setText(str(y)) def setThrPosition(self, x, y): self.txtTHR_X.setText(str(x)) self.txtTHR_Y.setText(str(y)) def getWaypoint(self): if (self.type == RnavCommonWaypoint.FAWP): nauticalMiles = float(self.txtDistance.text()) value = float(self.txtBearing.text()) num1 = math.fabs(self.rethr - value) if (num1 > 180): num1 = 360 - num1 num2 = math.sin(Unit.smethod_0(num1)) * 0.7559395 num3 = Unit.smethod_1(math.asin(num2 / nauticalMiles)) num4 = math.cos(Unit.smethod_0(num1)) * 0.755939525 num5 = math.cos(Unit.smethod_0(num3)) * nauticalMiles return RnavWaypoints.smethod_3( self.pos1400m, float(self.txtBearing.text()), Distance(math.fabs(num5 - num4), DistanceUnits.NM)) if (self.type != RnavCommonWaypoint.MAWP): return RnavWaypoints.smethod_3( self.from1, float(self.txtBearing.text()), Distance(float(self.txtDistance.text()), DistanceUnits.NM)) if (float(self.txtBearing.text()) > self.thrre or float(self.txtBearing.text()) - self.thrre >= 90): angle = 90 if self.flagStrName == "Y-Bar": angle = 70 num = self.rethr - angle if (num < 0): num = num + 360 else: num = self.rethr + angle if (num > 360): num = num - 360 point3d1 = self.from1 point3d2 = self.getThrPoint3D() point3d = MathHelper.getIntersectionPoint( point3d1, RnavWaypoints.smethod_3(self.from1, float(self.txtBearing.text()), Distance(1000)), point3d2, RnavWaypoints.smethod_3(self.getThrPoint3D(), num, Distance(1000))) if point3d == None: raise UserWarning, Messages.ERR_FAILED_TO_CALCULATE_INTERSECTION_POINT return RnavWaypoints.smethod_3( self.getThrPoint3D(), num, Distance(MathHelper.calcDistance(point3d2, point3d))) def setWaypoint(self, value): self.waypoint = value if self.from1 != None and self.waypoint != None: # self.setBearing(RnavWaypoints.smethod_0(self.from1, value)) # if self.txtDistance.isEnabled(): # print RnavWaypoints.smethod_2(self.from1, value).NauticalMiles # print RnavWaypoints.smethod_2(self.from1, value).NauticalMiles self.setDistance( RnavWaypoints.smethod_2(self.from1, value).NauticalMiles) def setDistance(self, value): self.txtDistance.setText("%i" % round(value)) def setBearing(self, value): self.txtBearing.setText(str(value)) def btnCalculate_Click(self): try: bearing = Unit.ConvertDegToRad(float(self.txtBearing.text())) distance0 = Distance(float(self.txtDistance.text()), DistanceUnits.NM).Metres self.calcedPoint = MathHelper.distanceBearingPoint( self.point, bearing, distance0) if self.flagStr == "R": self.parent0.parametersPanel.pnlIAWP1.Point3d = self.calcedPoint self.parent0.parametersPanel.txtRadiusIAWP1.setText( self.txtDistance.text()) elif self.flagStr == "L": self.parent0.parametersPanel.txtRadiusIAWP3.setText( self.txtDistance.text()) self.parent0.parametersPanel.pnlIAWP3.Point3d = self.calcedPoint elif self.flagStr == "C": self.parent0.parametersPanel.txtRadiusIAWP2.setText( self.txtDistance.text()) self.parent0.parametersPanel.pnlIAWP2.Point3d = self.calcedPoint self.accept() except UserWarning as e: QMessageBox.warning(self, "warning", e.message) def method_9(self): # self.distanceMeasureTool = MeasureTool(define._canvas, self.txtDistance, DistanceUnits.NM) define._canvas.setMapTool(self.distanceMeasureTool) def method_8(self): # self.bearingTool = CaptureBearingTool(define._canvas, self.txtBearing) define._canvas.setMapTool(self.bearingTool) def method_4(self): num = None num1 = None num2 = None num3 = None num4 = None num5 = None num6 = None num7 = None num8 = None num9 = None self.lbl1.setText(Validations.PLEASE_ENTER_VALID_RUNWAY_POSITIONS) self.lbl2.setText(" ") if (self.type == RnavCommonWaypoint.FAWP): position = self.getThrPoint3D() position1 = self.getEndPoint3D() if position is None or position1 is None: self.txtBearing.setText("") # self.txtDistance.setText("") return self.thrre = RnavWaypoints.smethod_0(position, position1) self.rethr = RnavWaypoints.smethod_0(position1, position) self.pos1400m = RnavWaypoints.smethod_3(position, self.rethr, Distance(1400)) self.MinDistance = RnavWaypoints.smethod_4(self.type, self.category) # if self.txtDistance.isEnabled(): # self.setDistance(RnavWaypoints.smethod_6(self.type, self.category).NauticalMiles) self.setBearing(self.rethr) self.MinBearing = RnavWaypoints.smethod_7(self.type, self.category, self.rethr) self.MaxBearing = RnavWaypoints.smethod_8(self.type, self.category, self.rethr) # if self.waypoint is not None: # self.setBearing(round(RnavWaypoints.smethod_0(self.pos1400m, self.waypoint), 2)) # # if self.txtDistance.isEnabled(): # self.setDistance(RnavWaypoints.smethod_2(position, self.waypoint).NauticalMiles) elif (self.type == RnavCommonWaypoint.MAWP): position2 = self.getThrPoint3D() position3 = self.getEndPoint3D() if position2 is None or position3 is None: self.txtBearing.setText("") return self.thrre = RnavWaypoints.smethod_0(position2, position3) self.rethr = RnavWaypoints.smethod_0(position3, position2) self.pos1400m = RnavWaypoints.smethod_3(position2, self.rethr, Distance(1400)) num10 = RnavWaypoints.smethod_1(self.pos1400m, self.from1) num = RnavWaypoints.smethod_1(self.from1, self.pos1400m) num11 = 15 position4 = None if (self.category == AircraftSpeedCategory.A or self.category == AircraftSpeedCategory.B or self.category == AircraftSpeedCategory.H): num11 = 30 if (num10 > self.rethr or self.rethr - num10 >= 90): num1 = self.thrre + num11 num2 = num if (num2 > 360): num2 = num2 - 360 else: num1 = num num2 = self.thrre - num11 if (num2 < 0): num2 = num2 + 360 if (max(num1, num2) <= 270 or min(num1, num2) >= 90): num3 = min(num1, num2) num4 = max(num1, num2) else: num3 = max(num1, num2) num4 = min(num1, num2) position4 = RnavWaypoints.smethod_3(position2, self.thrre, Distance(466)) num12 = RnavWaypoints.smethod_0(position4, self.from1) num13 = math.fabs(num12 - self.rethr) if (num13 > 180): num13 = 360 - num13 if (num13 > 5): num5 = 0 num6 = 0 num7 = 0 num8 = 0 else: if (num12 > self.rethr or self.rethr - num12 >= 90): num9 = self.rethr + 90 if (num9 > 360): num9 = num9 - 360 else: num9 = self.rethr - 90 if (num9 < 0): num9 = num9 + 360 position5 = RnavWaypoints.smethod_3(self.pos1400m, num9, Distance(150)) num5 = RnavWaypoints.smethod_0(self.from1, position5) num6 = RnavWaypoints.smethod_0(self.from1, self.pos1400m) if (max(num5, num6) <= 270 or min(num5, num6) >= 90): num7 = min(num5, num6) num8 = max(num5, num6) else: num7 = max(num5, num6) num8 = min(num5, num6) if (MathHelper.smethod_99(num, self.thrre, 1)): position6 = RnavWaypoints.smethod_3(self.pos1400m, self.rethr - 90, Distance(150)) position7 = RnavWaypoints.smethod_3(self.pos1400m, self.rethr + 90, Distance(150)) num1 = RnavWaypoints.smethod_0(self.from1, position6) num2 = RnavWaypoints.smethod_0(self.from1, position7) num7 = 0 num8 = 0 if (max(num1, num2) <= 270 or min(num1, num2) >= 90): num3 = min(num1, num2) num4 = max(num1, num2) else: num3 = max(num1, num2) num4 = min(num1, num2) if (MathHelper.smethod_96(num7) or MathHelper.smethod_96(num8)): self.MinBearing = MathHelper.smethod_3(num3) self.MaxBearing = MathHelper.smethod_3(num4) self.MinBearing2 = MathHelper.smethod_3(num7) self.MaxBearing2 = MathHelper.smethod_3(num8) elif (min(num3, num4) >= min(num7, num8)): if (MathHelper.smethod_99(num8, num3, 0.3)): num8 = num4 num3 = 0 num4 = 0 self.MinBearing = MathHelper.smethod_3(num7) self.MaxBearing = MathHelper.smethod_3(num8) self.MinBearing2 = MathHelper.smethod_3(num3) self.MaxBearing2 = MathHelper.smethod_3(num4) else: if (MathHelper.smethod_99(num4, num7, 0.3)): num4 = num8 num7 = 0 num8 = 0 self.MinBearing = MathHelper.smethod_3(num3) self.MaxBearing = MathHelper.smethod_3(num4) self.MinBearing2 = MathHelper.smethod_3(num7) self.MaxBearing2 = MathHelper.smethod_3(num8) self.MinDistance = RnavWaypoints.smethod_4(self.type, self.category) # if self.txtDistance.isEnabled(): # self.setDistance(RnavWaypoints.smethod_6(self.type, self.category).NauticalMiles) if (self.MinBearing <= self.MaxBearing): self.setBearing((self.MinBearing + self.MaxBearing) / 2) else: self.setBearing( MathHelper.smethod_3(self.MinBearing + (360 - self.MinBearing + self.MaxBearing))) # if (self.waypoint is not None): # self.setBearing(RnavWaypoints.smethod_0(self.from1, self.waypoint)) if (MathHelper.smethod_96(self.MinBearing2) or MathHelper.smethod_96(self.MaxBearing2)): self.lbl1.setText( unicode("Acceptable bearings are %.1f° - %.1f°", "utf-8") % (self.MinBearing, self.MaxBearing)) else: self.lbl1.setText(Validations.ACCEPTABLE_BEARINGS_ARE_X_Y_AND_X_Y % (self.MinBearing, self.MaxBearing, self.MinBearing2, self.MaxBearing2)) if self.MinDistance != None and self.type != RnavCommonWaypoint.MAWP: self.lbl2.setText(Validations.ACCEPTABLE_MINIMUM_DISTANCE_IS_X % (self.MinDistance.NauticalMiles)) # def removeEnd(self): # self.txtEND_X.setText("") # self.txtEND_Y.setText("") # def removeThr(self): # self.txtTHR_X.setText("") # self.txtTHR_Y.setText("") # @staticmethod # def smethod_0( parent, rnavCommonWaypoint_0, aircraftSpeedCategory_0, position_0, position_1, position_List): # flag = None # using (DlgCalculateWaypoint dlgCalculateWaypoint = new DlgCalculateWaypoint()) # { # dlgCalculateWaypoint.Text = string.Format("{0} {1}", Captions.CALCULATE, EnumHelper.smethod_0(rnavCommonWaypoint_0)) # dlgCalculateWaypoint.Type = rnavCommonWaypoint_0 # dlgCalculateWaypoint.Category = aircraftSpeedCategory_0 # dlgCalculateWaypoint.From = position_1 # double num = RnavWaypoints.smethod_0(position_0, position_1) # dlgCalculateWaypoint.MinBearing = RnavWaypoints.smethod_7(rnavCommonWaypoint_0, aircraftSpeedCategory_0, num) # dlgCalculateWaypoint.MaxBearing = RnavWaypoints.smethod_8(rnavCommonWaypoint_0, aircraftSpeedCategory_0, num) # dlgCalculateWaypoint.MinDistance = RnavWaypoints.smethod_4(rnavCommonWaypoint_0, aircraftSpeedCategory_0) # if (rnavCommonWaypoint_0 == RnavCommonWaypoint.IAWP1) # { # dlgCalculateWaypoint.Bearing = dlgCalculateWaypoint.MinBearing # } # else if (rnavCommonWaypoint_0 != RnavCommonWaypoint.IAWP3) # { # dlgCalculateWaypoint.Bearing = num # } # else # { # dlgCalculateWaypoint.Bearing = dlgCalculateWaypoint.MaxBearing # } # dlgCalculateWaypoint.Distance = RnavWaypoints.smethod_6(rnavCommonWaypoint_0, aircraftSpeedCategory_0) # dlgCalculateWaypoint.Waypoint = position_2 # if (dlgCalculateWaypoint.method_2(iwin32Window_0) != System.Windows.Forms.DialogResult.OK) # { # flag = false # } # else # { # position_2 = dlgCalculateWaypoint.Waypoint # flag = true # } # } # return flag # } # # public static bool smethod_1(IWin32Window iwin32Window_0, RnavCommonWaypoint rnavCommonWaypoint_0, AircraftSpeedCategory aircraftSpeedCategory_0, Position position_0, ref Position position_1, ref Position position_2, ref Position position_3) # { # bool flag # using (DlgCalculateWaypoint dlgCalculateWaypoint = new DlgCalculateWaypoint()) # { # dlgCalculateWaypoint.Text = string.Format("{0} {1}", Captions.CALCULATE, EnumHelper.smethod_0(rnavCommonWaypoint_0)) # dlgCalculateWaypoint.Type = rnavCommonWaypoint_0 # dlgCalculateWaypoint.Category = aircraftSpeedCategory_0 # dlgCalculateWaypoint.From = position_0 # dlgCalculateWaypoint.RwyThr = position_1 # dlgCalculateWaypoint.RwyEnd = position_2 # dlgCalculateWaypoint.Waypoint = position_3 # bool flag1 = dlgCalculateWaypoint.method_2(iwin32Window_0) == System.Windows.Forms.DialogResult.OK # position_1 = dlgCalculateWaypoint.RwyThr # position_2 = dlgCalculateWaypoint.RwyEnd # if (flag1) # { # position_3 = dlgCalculateWaypoint.Waypoint # } # flag = flag1 # } # return flag # } # }
def __createLayout(self, action): """ Creates the dialog layout """ self.resize(650, 300) self.setSizeGripEnabled(True) # Top level layout layout = QVBoxLayout(self) # Cmd line arguments argsLabel = QLabel("Command line arguments") self.__argsEdit = QLineEdit() self.__argsEdit.textChanged.connect(self.__argsChanged) argsLayout = QHBoxLayout() argsLayout.addWidget(argsLabel) argsLayout.addWidget(self.__argsEdit) layout.addLayout(argsLayout) # Working directory workDirGroupbox = QGroupBox(self) workDirGroupbox.setTitle("Working directory") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( \ workDirGroupbox.sizePolicy().hasHeightForWidth() ) workDirGroupbox.setSizePolicy(sizePolicy) gridLayoutWD = QGridLayout(workDirGroupbox) self.__scriptWDRButton = QRadioButton(workDirGroupbox) self.__scriptWDRButton.setText("&Use script location") gridLayoutWD.addWidget(self.__scriptWDRButton, 0, 0) self.__scriptWDRButton.clicked.connect(self.__scriptWDirClicked) self.__dirRButton = QRadioButton(workDirGroupbox) self.__dirRButton.setText("Select &directory") gridLayoutWD.addWidget(self.__dirRButton, 1, 0) self.__dirRButton.clicked.connect(self.__dirClicked) self.__dirEdit = QLineEdit(workDirGroupbox) gridLayoutWD.addWidget(self.__dirEdit, 1, 1) self.__dirEdit.textChanged.connect(self.__workingDirChanged) self.__dirSelectButton = QPushButton(workDirGroupbox) self.__dirSelectButton.setText("...") gridLayoutWD.addWidget(self.__dirSelectButton, 1, 2) self.__dirSelectButton.clicked.connect(self.__selectDirClicked) layout.addWidget(workDirGroupbox) # Environment envGroupbox = QGroupBox(self) envGroupbox.setTitle("Environment") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( \ envGroupbox.sizePolicy().hasHeightForWidth() ) envGroupbox.setSizePolicy(sizePolicy) layoutEnv = QVBoxLayout(envGroupbox) self.__inheritParentRButton = QRadioButton(envGroupbox) self.__inheritParentRButton.setText("Inherit &parent") self.__inheritParentRButton.clicked.connect(self.__inhClicked) layoutEnv.addWidget(self.__inheritParentRButton) self.__inheritParentPlusRButton = QRadioButton(envGroupbox) self.__inheritParentPlusRButton.setText( "Inherit parent and add/&modify") self.__inheritParentPlusRButton.clicked.connect(self.__inhPlusClicked) layoutEnv.addWidget(self.__inheritParentPlusRButton) hInhPlusLayout = QHBoxLayout() self.__inhPlusEnvTable = QTreeWidget() self.__inhPlusEnvTable.itemActivated.connect( self.__inhPlusItemActivated) self.__tuneTable(self.__inhPlusEnvTable) hInhPlusLayout.addWidget(self.__inhPlusEnvTable) vInhPlusLayout = QVBoxLayout() self.__addInhButton = QPushButton() self.__addInhButton.clicked.connect(self.__addInhClicked) self.__addInhButton.setText('Add') vInhPlusLayout.addWidget(self.__addInhButton) self.__delInhButton = QPushButton() self.__delInhButton.clicked.connect(self.__delInhClicked) self.__delInhButton.setText('Delete') vInhPlusLayout.addWidget(self.__delInhButton) self.__editInhButton = QPushButton() self.__editInhButton.clicked.connect(self.__editInhClicked) self.__editInhButton.setText("Edit") vInhPlusLayout.addWidget(self.__editInhButton) hInhPlusLayout.addLayout(vInhPlusLayout) layoutEnv.addLayout(hInhPlusLayout) self.__specificRButton = QRadioButton(envGroupbox) self.__specificRButton.setText("&Specific") self.__specificRButton.clicked.connect(self.__specClicked) layoutEnv.addWidget(self.__specificRButton) hSpecLayout = QHBoxLayout() self.__specEnvTable = QTreeWidget() self.__specEnvTable.itemActivated.connect(self.__specItemActivated) self.__tuneTable(self.__specEnvTable) hSpecLayout.addWidget(self.__specEnvTable) vSpecLayout = QVBoxLayout() self.__addSpecButton = QPushButton() self.__addSpecButton.clicked.connect(self.__addSpecClicked) self.__addSpecButton.setText('Add') vSpecLayout.addWidget(self.__addSpecButton) self.__delSpecButton = QPushButton() self.__delSpecButton.clicked.connect(self.__delSpecClicked) self.__delSpecButton.setText('Delete') vSpecLayout.addWidget(self.__delSpecButton) self.__editSpecButton = QPushButton() self.__editSpecButton.clicked.connect(self.__editSpecClicked) self.__editSpecButton.setText("Edit") vSpecLayout.addWidget(self.__editSpecButton) hSpecLayout.addLayout(vSpecLayout) layoutEnv.addLayout(hSpecLayout) layout.addWidget(envGroupbox) # Terminal and profile limits if self.__action in ["profile", "debug"]: layout.addWidget(self.__getIDEWideGroupbox()) else: termGroupbox = self.__getTermGroupbox() termGroupbox.setTitle("Terminal to run in (IDE wide setting)") layout.addWidget(termGroupbox) # Close checkbox self.__closeCheckBox = QCheckBox("&Close terminal upon " "successful completion") self.__closeCheckBox.stateChanged.connect(self.__onCloseChanged) layout.addWidget(self.__closeCheckBox) # Buttons at the bottom buttonBox = QDialogButtonBox(self) buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Cancel) self.__runButton = buttonBox.addButton(action, QDialogButtonBox.AcceptRole) self.__runButton.setDefault(True) self.__runButton.clicked.connect(self.onAccept) layout.addWidget(buttonBox) buttonBox.rejected.connect(self.close) return
def __init__(self, parent=None): super(Widget, self).__init__(parent) label = QLabel() label.setText('The neuron that you will be examining will divide the objects you will show it into the ones\n' + 'that it likes and the ones it dislikes\n' + 'Let\'s assume that be recognized objects are flowers\n') # groupbox1 groupBox1 = QGroupBox() groupBox1.setTitle('Feature weight') groupBox1Label1 = QLabel() groupBox1Label1.setText('Here you enter the neuron\'s weight coefficients for the individual object features. Positve\n' + 'coefficient means approval to the attribute, and negative one will indicate that the given\n' + 'attribute should be disliked by the neuron.') groupBox1Label2 = QLabel() groupBox1Label2.setText('Now, enter if you want the neuron to like the flower that is:') self.spinBoxWeightFragment = QDoubleSpinBox() self.spinBoxWeightFragment.setValue(1.0) self.spinBoxWeightFragment.setRange(-100.0, 100.0) self.spinBoxWeightColorful = QDoubleSpinBox() self.spinBoxWeightColorful.setValue(2.0) self.spinBoxWeightColorful.setRange(-100.0, 100.0) groupBox1HLayout = QHBoxLayout() groupBox1HLayout.addWidget(QLabel('Fragment:')) groupBox1HLayout.addWidget(self.spinBoxWeightFragment) groupBox1HLayout.addWidget(QLabel('Colorful:')) groupBox1HLayout.addWidget(self.spinBoxWeightColorful) groupBox1VLayout = QVBoxLayout() groupBox1VLayout.addWidget(groupBox1Label1) groupBox1VLayout.addWidget(groupBox1Label2) groupBox1VLayout.addLayout(groupBox1HLayout) groupBox1.setLayout(groupBox1VLayout) # groupbox2 groupBox2 = QGroupBox() groupBox2.setTitle('Evaluated object') self.spinBoxObjectFragment = QDoubleSpinBox() self.spinBoxObjectFragment.setRange(-100.0, 100.0) self.spinBoxObjectColorful = QDoubleSpinBox() self.spinBoxObjectColorful.setRange(-100.0, 100.0) groupBox2HLayout = QHBoxLayout() groupBox2HLayout.addWidget(QLabel('Fragment')) groupBox2HLayout.addWidget(self.spinBoxObjectFragment) groupBox2HLayout.addWidget(QLabel('Colorful')) groupBox2HLayout.addWidget(self.spinBoxObjectColorful) groupBox2VLayout = QVBoxLayout() groupBox2VLayout.addWidget(QLabel('After setting the weight, yout can perform experiments. Enter if the flower is:')) groupBox2VLayout.addLayout(groupBox2HLayout) groupBox2.setLayout(groupBox2VLayout) # groupbox3 groupBox3 = QGroupBox() groupBox3.setTitle('Neuron\'s response') pushbuttonGroup3 = QPushButton('Recalculate!') self.output = QLabel() self.attitude = QLabel() groupBox3HLayout1 = QHBoxLayout() groupBox3HLayout1.addWidget(QLabel('The neuron\'s response value is:')) groupBox3HLayout1.addWidget(self.output) groupBox3HLayout2 = QHBoxLayout() groupBox3HLayout2.addWidget(QLabel('It means that the neuron\'s attitude against the flower is:')) groupBox3HLayout2.addWidget(self.attitude) groupBox3HLayout2.addWidget(pushbuttonGroup3) groupBox3VLayout = QVBoxLayout() groupBox3VLayout.addLayout(groupBox3HLayout1) groupBox3VLayout.addLayout(groupBox3HLayout2) groupBox3.setLayout(groupBox3VLayout) layout = QVBoxLayout() layout.addWidget(label) layout.addWidget(groupBox1) layout.addWidget(groupBox2) layout.addWidget(groupBox3) self.setLayout(layout) self.setWindowTitle('Single neuron examination (example 01a)') self.connect(self.spinBoxWeightFragment, SIGNAL('valueChanged(double)'), self.evaluateObject) self.connect(self.spinBoxWeightColorful, SIGNAL('valueChanged(double)'), self.evaluateObject) self.connect(self.spinBoxObjectFragment, SIGNAL('valueChanged(double)'), self.evaluateObject) self.connect(self.spinBoxObjectColorful, SIGNAL('valueChanged(double)'), self.evaluateObject) self.connect(pushbuttonGroup3, SIGNAL('clicked()'), self.evaluateObject) self.neuron = Neuron(2)
class SettingsManager(QDialog): def __init__(self, num, n, parent=None): super(SettingsManager, self).__init__(parent) #main self.par = n title = Settingz().positions(num) self.titleID = title['id'] self.titleIDx = str(title['id']) + 'x' self.titlePage = title['page'] self.titleName = title['name'] self.titleSub = title['subID'] self.titleIcon = title['icon'] self.pagetitle = self.titlePage self.sessionMain = 0 #stylesheet stylesheet = Valid().background() + Valid().font() treeStyleSheet = Valid().treez() self.groupBox1 = QGroupBox(self.titleName) self.groupBox2 = QGroupBox('Add') #items self.tree = QTreeWidget() self.tree.setHeaderLabel("Choose " + self.titleName) self.tree.headerItem().setText(0, 'Name') self.tree.headerItem().setText(1, 'Abbrv.') self.tree.setStyleSheet(treeStyleSheet) self.makeTree() self.tree.setMinimumHeight(250) self.tree.clicked.connect(lambda: self.getSelection()) self.tree.itemClicked.connect(lambda state: self.getChecked(state)) #buttons #add nImg = Buttons().addButton() self.pb = QPushButton() self.pb.setFlat(True) self.pb.setIcon(QIcon(nImg)) self.pb.setMaximumHeight(30) self.pb.setMaximumWidth(30) nImg1 = Buttons().closeButton() self.pb1 = QPushButton() self.pb1.setFlat(True) self.pb1.setIcon(QIcon(nImg1)) self.pb1.setMaximumHeight(30) self.pb1.setMaximumWidth(30) nImg2 = Buttons().editButton() self.pb2 = QPushButton() self.pb2.setFlat(True) self.pb2.setIcon(QIcon(nImg2)) self.pb2.setMaximumHeight(30) self.pb2.setMaximumWidth(30) nImg3 = Buttons().deleteButton() self.pb3 = QPushButton() self.pb3.setFlat(True) self.pb3.setIcon(QIcon(nImg3)) self.pb3.setMaximumHeight(30) self.pb3.setMaximumWidth(30) nImg4 = Buttons().saveButton() self.pb4 = QPushButton() self.pb4.setFlat(True) self.pb4.setIcon(QIcon(nImg4)) self.pb4.setMaximumHeight(30) self.pb4.setMaximumWidth(30) nImg5 = Buttons().resetButton() self.pb5 = QPushButton() self.pb5.setFlat(True) self.pb5.setIcon(QIcon(nImg5)) self.pb5.setMaximumHeight(30) self.pb5.setMaximumWidth(30) nImg6 = Buttons().closeButton() self.pb6 = QPushButton() self.pb6.setFlat(True) self.pb6.setIcon(QIcon(nImg6)) self.pb6.setMaximumHeight(30) self.pb6.setMaximumWidth(30) nImg7 = Buttons().addButton() self.pb7 = QPushButton() self.pb7.setFlat(True) self.pb7.setIcon(QIcon(nImg7)) self.pb7.setMaximumHeight(30) self.pb7.setMaximumWidth(30) hbo = QHBoxLayout() hbo.addStretch() hbo.addWidget(self.pb1) hbo.addWidget(self.pb3) hbo.addWidget(self.pb2) hbo.addWidget(self.pb7) vbo = QVBoxLayout() vbo.addWidget(self.tree) vbo.addLayout(hbo) self.l1 = QLabel("Name") self.le1 = QLineEdit() self.le1.setObjectName("name") vals1 = Valid().fullText() self.le1.setValidator(vals1) self.le1.setPlaceholderText("Lowercase max 25 letters") self.l2 = QLabel("Abbrv") self.le2 = QLineEdit() self.le2.setObjectName("abbrv") vals2 = Valid().limitText() self.le2.setValidator(vals2) self.le2.setPlaceholderText("Lowercase max 5 letters") FormLayout = QFormLayout() FormLayout.addRow(self.l1, self.le1) FormLayout.addRow(self.l2, self.le2) Hlayout1 = QHBoxLayout() Hlayout1.addStretch() Hlayout1.addWidget(self.pb6) Hlayout1.addWidget(self.pb5) Hlayout1.addWidget(self.pb4) Hlayout1.addWidget(self.pb) Vlayout1 = QVBoxLayout() Vlayout1.addLayout(FormLayout) Vlayout1.addLayout(Hlayout1) self.groupBox1.setLayout(vbo) self.groupBox2.setLayout(Vlayout1) self.groupBox2.hide() self.connect(self.pb, SIGNAL("clicked()"), lambda: self.button_add()) #add self.connect(self.pb1, SIGNAL("clicked()"), lambda: self.button_close()) #close self.connect(self.pb2, SIGNAL("clicked()"), lambda: self.button_edit()) #edit self.connect(self.pb3, SIGNAL("clicked()"), lambda: self.button_delete()) #delete self.connect(self.pb4, SIGNAL("clicked()"), lambda: self.button_save()) #save self.connect(self.pb5, SIGNAL("clicked()"), lambda: self.button_reset()) #reset self.pb4.hide() self.pb7.hide() grid = QGridLayout() grid.addWidget(self.groupBox1, 0, 0) grid.addWidget(self.groupBox2, 1, 0) self.setLayout(grid) self.setStyleSheet(stylesheet) self.setWindowIcon(QIcon(self.titleIcon)) self.setWindowTitle(self.pagetitle) def makeTree(self): self.tree.clear() arr = Valid().pullData('datas', '', {'pubID': self.titleID}) self.hold_data = {} self.hold_mdata = {} self.hold_data_add = {} self.hold_data_add_item = {} if self.titleSub and self.titleSub > 0: if arr and len(arr) > 0: for val in arr: ch = Valid().pullData('datas', '', {'subID': val['id']}) child = QTreeWidgetItem(self.tree) child.setFlags(child.flags() | Qt.ItemIsUserCheckable) child.setText(0, str(val['name']).upper()) child.setText(1, str(val['abbrv']).upper()) self.hold_data[val['id']] = child self.hold_mdata[val['id']] = child if (val['active'] == 0): child.setCheckState(0, Qt.Checked) else: child.setCheckState(0, Qt.Unchecked) for va in ch: child1 = QTreeWidgetItem(child) child1.setFlags(child1.flags() | Qt.ItemIsUserCheckable) child1.setText(0, str(va['name']).upper()) child1.setText(1, str(va['abbrv']).upper()) self.hold_data[va['id']] = child1 if (va['active'] == 0): child1.setCheckState(0, Qt.Checked) else: child1.setCheckState(0, Qt.Unchecked) child1 = QTreeWidgetItem(child) child1.setFlags(child1.flags() | Qt.ItemIsUserCheckable) child1.setText(0, 'Add New Item') self.hold_data_add_item[val['id']] = child1 else: if arr and len(arr) > 0: for val in arr: child = QTreeWidgetItem(self.tree) child.setFlags(child.flags() | Qt.ItemIsUserCheckable) child.setText(0, str(val['name']).upper()) child.setText(1, str(val['abbrv']).upper()) self.hold_data[val['id']] = child if (val['active'] == 0): child.setCheckState(0, Qt.Checked) else: child.setCheckState(0, Qt.Unchecked) child = QTreeWidgetItem(self.tree) child.setFlags(child.flags() | Qt.ItemIsUserCheckable) child.setText(0, 'Add New') self.hold_data_add['addnew'] = child def getChecked(self, a): g = Db() for i in self.hold_data: if self.hold_data[i].checkState(0) == Qt.Checked: g.update('datas', {'active': 0}, {'id': i}) else: g.update('datas', {'active': 1}, {'id': i}) if self.titleID == 1: #if class was changed only reload class menu on main window self.par.menuStudent() self.par.dropdownStudent() def getSelected(self): r = None k = None for i in self.hold_data: if self.hold_data[i].isSelected(): r = i for j in self.hold_mdata: if self.hold_mdata[j].isSelected(): k = j if r and r > 0: if r == k: self.sessionMain = r else: self.sessionMain = 0 self.groupBox2.show() return r else: self.groupBox2.hide() def getSelection(self): self.le1.clear() self.le2.clear() if self.hold_data_add['addnew'].isSelected(): self.sessionMain = 0 self.groupBox2.setTitle('Add New') self.groupBox2.show() else: r = None for i in self.hold_data_add_item: if self.hold_data_add_item[i].isSelected(): r = i if r: self.sessionMain = r g = Db() v = g.selectn('datas', '', 1, {'id': r}) vname = str(v['name']).upper() self.groupBox2.setTitle('ADD ' + str(vname) + ' ITEM') self.groupBox2.show() else: self.groupBox2.setTitle('Add') self.groupBox2.hide() def setActive(self): g = Db() for i in self.hold_data: if self.hold_data[i].checkState(0) == Qt.Checked: g.update('datas', {'active': 0}, {'id': i}) else: g.update('datas', {'active': 1}, {'id': i}) def button_add(self): s1 = self.le1.text() s2 = self.le2.text() g = Db() try: if (len(s1) > 0) and (len(s2) > 0): if self.sessionMain == 0: y = { 'name': s1.lower(), 'abbrv': s2.lower(), 'pubID': self.titleID, 'active': 0 } else: y = { 'name': s1.lower(), 'abbrv': s2.lower(), 'subID': self.sessionMain, 'pubID': self.titleIDx, 'active': 0 } g.insert('datas', y) self.makeTree() self.button_reset() if self.titleID == 1: #if class was changed only relod class menu on main window self.par.menuStudent() self.par.dropdownStudent() else: pass except: pass def button_save(self): row = self.editrow s1 = self.le1.text() s2 = self.le2.text() g = Db() try: if (len(s1) > 0) and (len(s2) > 0) and row and row > 0: y = {'name': s1.lower(), 'abbrv': s2.lower(), 'active': 0} z = {'id': row} g.update('datas', y, z) self.makeTree() self.button_reset() if self.titleID == 1: #if class was changed only relod class menu on main window self.par.menuStudent() self.par.dropdownStudent() else: pass except: pass def button_delete(self): row = self.getSelected() g = Db() try: if row and row > 0: y = {'abbrv': '', 'active': 2} z = {'id': row} g.update('datas', y, z) self.makeTree() else: pass except: pass def button_reset(self): self.le1.clear() self.le2.clear() self.groupBox2.setTitle('Add') self.groupBox2.hide() self.pb.show() self.pb4.hide() self.sessionMain = 0 def button_edit(self): row = self.getSelected() self.sessionMain = 0 if row: self.groupBox2.setTitle('Edit') self.editrow = row g = Db() data = g.selectn('datas', '', 1, {'id': row}) if self.titleID == data['pubID']: self.sessionMain = 1 else: self.sessionMain = 0 try: self.le1.setText(data['name']) except: self.le1.setText('') try: self.le2.setText(data['abbrv']) except: self.le2.setText('') self.pb.hide() self.pb4.show() def button_close(self): self.close()
def initUploadTab(self): ###Upload Tab### upload_tab = QWidget() upload_tab_layout = QVBoxLayout() self.tabWidget.addTab(upload_tab, "Upload HITs") # Frames Box frames_box = QGroupBox() frames_box.setTitle("Frame selection") frames_layout = QVBoxLayout() frames_label = QLabel("Select which frames to upload:") frames_layout.addWidget(frames_label) # Init list view self.view = QListView() frames_layout.addWidget(self.view) upload_button = QPushButton("Upload HITs") upload_button.clicked.connect(self.upload) frames_layout.addWidget(upload_button) frames_box.setLayout(frames_layout) # MotionOptions Box motionOptionsBox = QGroupBox() motionOptionsBox.setTitle("Motion Annotation Options") patchLabel = QLabel("Patch size: 50x50 Pixels") motionOptionsBoxLayout = QHBoxLayout() overlapping = QCheckBox("Overlapping Patches") overlapping.clicked.connect(self.getBalance) motionOptionsBoxLayout.addWidget(overlapping) motionOptionsBoxLayout.addWidget(patchLabel) motionOptionsBox.setLayout(motionOptionsBoxLayout) # LayerOptions Box options_box = QGroupBox() options_box.setTitle('Layer Annotation Options') blurLabel = QLabel("Amount: 4 Pixels") options_box_layout = QHBoxLayout() blur = QCheckBox("Blur Outlines") options_box_layout.addWidget(blur) options_box_layout.addWidget(blurLabel) options_box.setLayout(options_box_layout) # Disable not needed options if self.segmentation_mode: motionOptionsBox.setEnabled(False) else: options_box.setEnabled(False) # Costs costs_box = QGroupBox() costs_box.setTitle('Costs') costs_box_layout = QVBoxLayout() self.credit_label = QLabel("Your current account balance is:") self.costLabel = QLabel("Costs per frame:") costs_box_layout.addWidget(self.credit_label) costs_box_layout.addWidget(self.costLabel) costs_box.setLayout(costs_box_layout) # Upload Box upload_tab_layout.addWidget(frames_box) upload_tab_layout.addWidget(motionOptionsBox) upload_tab_layout.addWidget(options_box) upload_tab_layout.addWidget(costs_box) upload_tab.setLayout(upload_tab_layout)
def __createLayout(self): " Creates the dialog layout " self.resize(640, 480) self.setSizeGripEnabled(True) vboxLayout = QVBoxLayout(self) hLayout = QHBoxLayout() self.__propsView = QTreeWidget() self.__propsView.setAlternatingRowColors(True) self.__propsView.setRootIsDecorated(False) self.__propsView.setItemsExpandable(False) self.__propsView.setSortingEnabled(True) self.__propsView.setItemDelegate(NoOutlineHeightDelegate(4)) self.__propsView.itemSelectionChanged.connect( self.__propsSelectionChanged) propsViewHeader = QTreeWidgetItem(["Property Name", "Property Value"]) self.__propsView.setHeaderItem(propsViewHeader) self.__propsView.header().setSortIndicator(0, Qt.DescendingOrder) hLayout.addWidget(self.__propsView) self.__delButton = QToolButton() self.__delButton.setText("Delete") self.__delButton.setFocusPolicy(Qt.NoFocus) self.__delButton.setEnabled(False) self.__delButton.clicked.connect(self.__onDel) hLayout.addWidget(self.__delButton, 0, Qt.AlignBottom) vboxLayout.addLayout(hLayout) # Set property part setGroupbox = QGroupBox(self) setGroupbox.setTitle("Set Property") setLayout = QGridLayout(setGroupbox) setLayout.addWidget(QLabel("Name"), 0, 0, Qt.AlignTop | Qt.AlignRight) setLayout.addWidget(QLabel("Value"), 1, 0, Qt.AlignTop | Qt.AlignRight) self.__nameEdit = QLineEdit() self.__nameEdit.textChanged.connect(self.__nameChanged) setLayout.addWidget(self.__nameEdit, 0, 1) self.__valueEdit = QTextEdit() self.__valueEdit.setAcceptRichText(False) self.__valueEdit.textChanged.connect(self.__valueChanged) metrics = QFontMetrics(self.__valueEdit.font()) rect = metrics.boundingRect("X") self.__valueEdit.setFixedHeight(rect.height() * 4 + 5) setLayout.addWidget(self.__valueEdit, 1, 1) self.__setButton = QToolButton() self.__setButton.setText("Set") self.__setButton.setFocusPolicy(Qt.NoFocus) self.__setButton.setEnabled(False) self.__setButton.clicked.connect(self.__onSet) setLayout.addWidget(self.__setButton, 1, 2, Qt.AlignBottom | Qt.AlignHCenter) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( setGroupbox.sizePolicy().hasHeightForWidth()) setGroupbox.setSizePolicy(sizePolicy) vboxLayout.addWidget(setGroupbox) # Buttons at the bottom buttonBox = QDialogButtonBox(self) buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Ok) buttonBox.button(QDialogButtonBox.Ok).setDefault(True) buttonBox.accepted.connect(self.close) vboxLayout.addWidget(buttonBox) return
def initManageTab(self): ###Manage Tab### manage_tab = QWidget() manage_tab_layout = QVBoxLayout() self.tabWidget.addTab(manage_tab, "Manage HITs") # Send Box send_box_layout = QVBoxLayout() subject = QLineEdit() subject_label = QLabel("Subject:") send_text = QTextEdit() send_button = QPushButton("Send Message") send_button.setMinimumWidth(135) send_button.clicked.connect(self.sendMessage) allTurkers = QRadioButton("Send message to all Turkers") allTurkers.setChecked(True) singleTurker = QRadioButton("Send message to single Turker") workerIDLabel = QLabel('Worker-ID:') workerID = QLineEdit() def checkState(): # Set enabled if checked if allTurkers.isChecked(): workerIDLabel.setEnabled(False) workerID.setEnabled(False) else: workerIDLabel.setEnabled(True) workerID.setEnabled(True) # Connect to check state allTurkers.clicked.connect(checkState) singleTurker.clicked.connect(checkState) checkState() # Choose if single or all turkers receive message chooseSendLayout = QHBoxLayout() chooseSendLayout.addWidget(singleTurker) chooseSendLayout.addWidget(workerIDLabel) chooseSendLayout.addWidget(workerID) # Send box layout send_box = QGroupBox() send_box_layout.addWidget(allTurkers) send_box_layout.addLayout(chooseSendLayout) send_box_layout.addWidget(subject_label) send_box_layout.addWidget(subject) send_box_layout.addWidget(send_text) send_box_layout.addWidget(send_button) send_box_layout.setAlignment(send_button, Qt.AlignRight) send_box.setTitle("Notify Workers") send_box.setLayout(send_box_layout) manage_tab_layout.addWidget(send_box) # Pay box payBox = QGroupBox() payBox.setTitle("Pay Workers") payBox_layout = QGridLayout() approveFeedbackLabel = QLabel("Approve Feedback:") approveFeedback = QTextEdit() approveFeedback.setText("Thank you for your work.") rejectFeedback = QTextEdit() rejectFeedback.setText("We are sorry, but we cannot accept your work because you did not follow the instructions or submitted careless work.") payBox_layout.addWidget(approveFeedbackLabel, 0, 0) payBox_layout.addWidget(approveFeedback , 1, 0, 1, 0) reject_label = QLabel("{0} HITs will be rejected".format(0)) approve_label = QLabel("{0} HITs will be approved".format(0)) pay_button = QPushButton("Pay Turkers") pay_button.clicked.connect(self.pay) payBox_layout.addWidget(reject_label, 2, 0) payBox_layout.addWidget(approve_label, 3, 0) payBox_layout.addWidget(pay_button, 4, 0) payBox.setLayout(payBox_layout) manage_tab_layout.addWidget(payBox) # Delete Box deleteBox = QGroupBox() deleteBox.setTitle("Clean up finished HITs") deleteBox_layout = QHBoxLayout() delete_label = QLabel("{0} HITs are finished and can be deleted".format(0)) delete_button = QPushButton("Delete HITs") delete_button.clicked.connect(self.delete) deleteBox_layout.addWidget(delete_label) deleteBox_layout.addWidget(delete_button) deleteBox.setLayout(deleteBox_layout) manage_tab_layout.addWidget(deleteBox) # Evaluation Button evalButton = QPushButton("Evaluate") evalButton.clicked.connect(self.evaluate) manage_tab_layout.addWidget(evalButton) # Add layouts to tab manage_tab.setLayout(manage_tab_layout)
class LeggerWidget(QDockWidget): """Legger Network widget with tree tables, cross section and sideview and legger profile selection""" # todo: # - category filter on map and tree instead of shortcut # - improve performance 'initial loop tree' closingWidget = pyqtSignal() def __init__(self, parent=None, iface=None, path_legger_db=None): """Constructor.""" super(LeggerWidget, self).__init__(parent) # store arguments self.iface = iface self.path_legger_db = path_legger_db # init parameters self.measured_model = ProfileModel() self.variant_model = ProfileModel() self.legger_model = LeggerTreeModel() self.area_model = AreaTreeModel() if not path_legger_db: messagebar_message("Database selectie", "Selecteer eerst een legger database", level=1) raise Exception("Selecteer eerst een legger database") # create session (before setup_ui) db = LeggerDatabase( {'db_path': path_legger_db}, 'spatialite' ) db.create_and_check_fields() self.session = db.get_session() # todo: request something to test connection and through error message otherwise hydro_object_count = self.session.query(HydroObject).count() if hydro_object_count == 0: messagebar_message("Database selectie", "Database bevat geen hydrovakken", level=1) raise Exception("Database bevat geen hydrovakken") # initial values self.selected_hydrovak = None self.active_begroeiings_variant = SHOW_ALL self.active_begroeiings_variant_strategy = None # setup ui self.setup_ui(self) self.legger_model.setTreeWidget(self.legger_tree_widget) self.area_model.setTreeWidget(self.startpoint_tree_widget) self.category_combo.insertItems(0, ['4', '3', '2', '1']) self.category_combo.setCurrentIndex(0) self.category_filter = 4 self.begroeiings_varianten = OrderedDict( [(SHOW_ALL, 'all'), (PRE_SELECTED, 'pre_selected'), ] + [(v.naam, v) for v in self.session.query(BegroeiingsVariant)] ) self.begroeiings_combo.insertItems( 0, self.begroeiings_varianten.keys()) self.begroeiings_variant_strategies = OrderedDict(( ('alleen dit hydrovak', 'only_this_hydrovak'), ('alle bovenstroomse hydrovakken', 'all_upstream'), )) self.begroeiings_strategy_combo.insertItems(0, self.begroeiings_variant_strategies.keys()) self.begroeiings_strategy_combo.setCurrentIndex(0) self.child_selection_strategies = OrderedDict(( ('gekozen traject tot waarde', 'selected_branch_till_value'), ('gekozen traject tot eind', 'selected_branch_till_end'), ('alleen dit hydrovak', 'selected_hydrovak'), ('bovenstrooms (met zijtakken) tot waarde ', 'upstream_till_value'), ('bovenstrooms (met zijtakken) tot eind', 'upstream_till_end'), )) self.child_selection_strategy_combo.insertItems(0, self.child_selection_strategies.keys()) self.child_selection_strategy_combo.setCurrentIndex(0) # create line layer and add to map self.layer_manager = LeggerMapManager(self.iface, self.path_legger_db) self.line_layer = self.layer_manager.get_line_layer(add_to_map=True) self.vl_tree_layer = self.layer_manager.get_virtual_tree_layer(add_to_map=True) self.vl_endpoint_layer = self.layer_manager.get_endpoint_layer(add_to_map=True) self.vl_track_layer = self.layer_manager.get_track_layer(add_to_map=True) self.vl_hover_layer = self.layer_manager.get_hover_layer(add_to_map=True) self.vl_selected_layer = self.layer_manager.get_selected_layer(add_to_map=True) self.vl_startpoint_hover_layer = self.layer_manager.get_hover_startpoint_layer(add_to_map=True) self.map_visualisation = LeggerMapVisualisation( self.iface, self.line_layer.crs()) # init network line_direct = self.layer_manager.get_line_layer(geometry_col='line') field_nr = line_direct.fieldNameIndex('direction') director = QgsLineVectorLayerDirector( line_direct, field_nr, '2', '1', '3', 3) self.network = NewNetwork( line_direct, self.line_layer, director, None, self.vl_tree_layer, self.vl_endpoint_layer ) # add listeners self.category_combo.currentIndexChanged.connect(self.category_change) self.variant_model.dataChanged.connect(self.data_changed_variant) self.legger_model.dataChanged.connect(self.data_changed_legger_tree) self.area_model.dataChanged.connect(self.data_changed_area_model) self.show_manual_input_button.clicked.connect( self.show_manual_input_window) self.next_endpoint_button.clicked.connect( self.set_next_endpoint) self.begroeiings_combo.currentIndexChanged.connect(self.onSelectBegroeiingsVariant) # self.begroeiings_strategy_combo.currentIndexChanged.connect(self.onSelectBegroeiingsVariantStrategy) # create and init startpoint (AreaTree) model def loop_over(parent, data): for child in data['children']: area = area_class(child) item = AreaTreeItem(area, parent) parent.appendChild(item) loop_over(item, child) # get startingpoints and select first sp_tree = self.network.get_start_arc_tree() root = AreaTreeItem(None, None) loop_over(root, sp_tree) self.area_model.setNewTree(root.childs) # initial, select first area first_area = root.child(0) self.area_model.setDataItemKey(first_area, 'selected', True) def category_change(self, nr): """ filters the tree and re-initialize legger tree nr: nr of selected option (hydrovak category) of combobox return: - """ self.category_filter = int(self.category_combo.currentText()) root = LeggerTreeItem(None, None) self.network.get_tree_data(root, self.category_filter) self.legger_model.setNewTree(root.childs) self.legger_model.set_column_sizes_on_view(self.legger_tree_widget) if len(root.childs) > 0: self.loop_tree(root.childs[0], initial=True) def show_manual_input_window(self): self._new_window = NewWindow( self.legger_model.selected, self.session, callback_on_save=self.update_available_profiles) self._new_window.show() def set_next_endpoint(self): """ select the next endpoint in a traject with no selected variant called by the next_endpoint_button returns: - """ sp = self.legger_model.sp if sp is None: messagebar_message('Fout', 'Selecteer eerst een startpunt (kolom sp)', level=1, # Warning duration=15) return missing_values, endpoint = self.legger_model.find_endpoint_traject_without_legger_profile(sp) if not missing_values or endpoint is None: messagebar_message('Eindpunt selectie', 'Geen traject gevonden met ontbrekende legger', duration=15) else: self.legger_model.open_till_endpoint(endpoint, close_other=True) self.legger_model.setDataItemKey(endpoint, 'ep', True) def loop_tree(self, node, depth=None, initial=False, hover=False, begroeiingsvariant=None, variant_id=None, child_strategy='selected_branch_till_value', begroeiings_strategy='pre_selected', traject_nodes=None): """ recursive loop over younger items where depth can be applied according to available profiles initial (bool): initiele loop om aantal berekende velden te bepalen child_strategy (str): options: - 'selected_branch_till_value', - 'selected_branch_till_end', - 'selected_hydrovak', - 'upstream_till_value', - 'upstream_till_end' begroeiings_strategy (str): options: - 'only_this_hydrovak' - 'all_upstream' - 'minimum' --> not implemented yet - 'maximum' --> not implemented yet :return: """ output_hydrovakken = [node] if initial: variant_id = node.hydrovak.get('selected_variant_id') depth = node.hydrovak.get('selected_depth') elif (variant_id is None and child_strategy in ['selected_branch_till_value', 'upstream_till_value'] and node.hydrovak.get('selected_variant_id')): # stop here, already value there return if initial and variant_id is None: pass elif node.hydrovak['variant_min_depth'] is None: # no variants available, so skip this one and continue downstream pass else: # get selected variant. if variant_id is None, try based on depth and begroeiingsvariant if variant_id is not None: profile_variant = self.session.query(Varianten).filter(Varianten.id == variant_id) if begroeiingsvariant is None or begroeiingsvariant == 'all' and profile_variant.count(): begroeiingsvariant = profile_variant[0].begroeiingsvariant_id else: # use given begroeiingsvariant if stategy is all_upstream otherwise use begroeiingsgraad # set on hydrovak or the default begroeiingsgraad # (correct begroeiingsvariant of first hydrovak is selected by setting variant_id) # "type(begroeiingsvariant) != str" is to filter out setting 'all' if begroeiings_strategy == 'all_upstream' and begroeiingsvariant is not None and type( begroeiingsvariant) != str: profile_variant = self.session.query(Varianten).filter( Varianten.hydro_id == node.hydrovak.get('hydro_id'), Varianten.begroeiingsvariant_id == begroeiingsvariant, Varianten.diepte < depth + precision, Varianten.diepte > depth - precision ) else: profile_variant = self.session.query(Varianten).filter( Varianten.hydro_id == node.hydrovak.get('hydro_id'), or_(Varianten.hydro.has( HydroObject.begroeiingsvariant_id == Varianten.begroeiingsvariant_id), and_(Varianten.hydro.has(HydroObject.begroeiingsvariant_id == None), Varianten.begroeiingsvariant.has(is_default=True))), Varianten.diepte < depth + precision, Varianten.diepte > depth - precision ) if profile_variant.count() > 0: if hover: # self.legger_model.setDataItemKey(node, 'sel d', depth) self.legger_model.setDataItemKey(node, 'selected_depth_tmp', depth) else: # get all info to display in legger table over_depth = node.hydrovak.get('depth') - depth if node.hydrovak.get('depth') is not None else None profilev = profile_variant.first() width = profilev.waterbreedte over_width = node.hydrovak.get('width') - width \ if node.hydrovak.get('width') is not None else None figuren = profilev.figuren score = None if len(figuren) > 0: figuur = figuren[0] over_width = "{0:.2f}".format(figuur.t_overbreedte_l + figuur.t_overbreedte_r) \ if figuur.t_overbreedte_l is not None else over_width score = "{0:.2f}".format(figuur.t_fit) over_depth = "{0:.2f}".format( figuur.t_overdiepte) if figuur.t_overdiepte is not None else over_depth else: over_depth = "{}*".format(try_round(over_depth, 2, '-')) over_width = "{}*".format(try_round(over_width, 2, '-')) verhang = try_round(profilev.verhang, 1, '-') self.legger_model.setDataItemKey(node, 'selected_depth', depth) self.legger_model.setDataItemKey(node, 'selected_width', width) self.legger_model.setDataItemKey(node, 'selected_variant_id', profilev.id) self.legger_model.setDataItemKey(node, 'selected_begroeiingsvariant_id', profilev.begroeiingsvariant_id) self.legger_model.setDataItemKey(node, 'verhang', verhang) self.legger_model.setDataItemKey(node, 'score', score) self.legger_model.setDataItemKey(node, 'over_depth', over_depth) self.legger_model.setDataItemKey(node, 'over_width', over_width) if not initial: # save selected variant selected = self.session.query(GeselecteerdeProfielen).filter( GeselecteerdeProfielen.hydro_id == node.hydrovak.get('hydro_id')).first() if selected: selected.variant = profilev else: selected = GeselecteerdeProfielen( hydro_id=node.hydrovak.get('hydro_id'), variant_id=profilev.id ) self.session.add(selected) elif not initial: # no variant which fits criteria. stop iteration here return if begroeiings_strategy == 'only_this_hydrovak': begroeiingsvariant = None elif begroeiings_strategy == 'all_upstream': # keep variant as it is pass # elif begroeiings_strategy == 'minimum': # pass # elif begroeiings_strategy == 'maximum': # pass if child_strategy == 'selected_hydrovak': loop_childs = [] elif child_strategy in ['upstream_till_value', 'upstream_till_end'] or initial: loop_childs = node.younger() else: # 'selected_branch_till_value', 'selected_branch_till_end' if traject_nodes is None or len(traject_nodes) == 0: loop_childs = [] else: child = traject_nodes.pop(0) loop_childs = [child] for young in loop_childs: hydrovakken = self.loop_tree( young, depth=depth, initial=initial, hover=hover, begroeiingsvariant=begroeiingsvariant, child_strategy=child_strategy, begroeiings_strategy=begroeiings_strategy, traject_nodes=traject_nodes, ) if hydrovakken is not None: output_hydrovakken += hydrovakken return output_hydrovakken def data_changed_legger_tree(self, index, to_index): """ changes during selection and hover of hydrovak / legger tree index (QIndex): index of changed field """ # activate draw node = self.legger_model.data(index, role=Qt.UserRole) if self.legger_model.columns[index.column()].get('field') == 'hover': ids = [feat.id() for feat in self.vl_hover_layer.getFeatures()] self.vl_hover_layer.dataProvider().deleteFeatures(ids) if node.hydrovak.get('hover'): features = [] feat = QgsFeature() feat.setGeometry(node.hydrovak.get('feature').geometry()) try: feat.setAttributes([ node.hydrovak.get('feature')['id']]) features.append(feat) self.vl_hover_layer.dataProvider().addFeatures(features) except KeyError: pass self.vl_hover_layer.commitChanges() self.vl_hover_layer.updateExtents() self.vl_hover_layer.triggerRepaint() elif self.legger_model.columns[index.column()].get('field') == 'selected': if self.legger_model.data(index, role=Qt.CheckStateRole) == Qt.Unchecked: self.save_remarks() self.selected_variant_remark.setPlainText('') self.selected_variant_remark.setDisabled(True) ids = [feat.id() for feat in self.vl_selected_layer.getFeatures()] self.vl_selected_layer.dataProvider().deleteFeatures(ids) if node.hydrovak.get('selected'): if node.hydrovak.get('tak'): self.legger_model.setDataItemKey(node.younger()[1], 'selected', Qt.Checked) else: features = [] feat = QgsFeature() feat.setGeometry(node.hydrovak.get('feature').geometry()) feat.setAttributes([ node.hydrovak.get('feature')['id']]) features.append(feat) self.vl_selected_layer.dataProvider().addFeatures(features) self.vl_selected_layer.commitChanges() self.vl_selected_layer.updateExtents() self.vl_selected_layer.triggerRepaint() if node.hydrovak.get('tak'): pass elif node.hydrovak.get('selected'): self.on_select_edit_hydrovak(self.legger_model.data(index, role=Qt.UserRole)) self.show_manual_input_button.setDisabled(False) elif (self.legger_model.selected is None or self.legger_model.data(index, role=Qt.UserRole) == self.legger_model.selected): self.variant_model.removeRows(0, len(self.variant_model.rows)) self.show_manual_input_button.setDisabled(True) elif self.legger_model.columns[index.column()].get('field') in ['ep', 'sp']: # clear current track if self.legger_model.sp is None or self.legger_model.ep is None: ids = [feat.id() for feat in self.vl_track_layer.getFeatures()] self.vl_track_layer.dataProvider().deleteFeatures(ids) self.vl_track_layer.commitChanges() self.vl_track_layer.triggerRepaint() elif node.hydrovak.get('tak'): if self.legger_model.columns[index.column()].get('field') == 'ep': self.legger_model.setDataItemKey(node.younger()[1], 'ep', Qt.Checked) if self.legger_model.columns[index.column()].get('field') == 'sp': self.legger_model.setDataItemKey(node.younger()[1], 'sp', Qt.Checked) elif self.legger_model.sp and self.legger_model.ep: features = [] def loop_rec(node): if node.hydrovak.get('tak'): node = node.older() else: feat = QgsFeature() feat.setGeometry(node.hydrovak.get('feature').geometry()) feat.setAttributes([ node.hydrovak.get('feature')['id']]) features.append(feat) if node != self.legger_model.sp: loop_rec(node.older()) loop_rec(self.legger_model.ep) self.vl_track_layer.dataProvider().addFeatures(features) self.vl_track_layer.commitChanges() self.vl_track_layer.updateExtents() self.vl_track_layer.triggerRepaint() if self.legger_model.sp is not None: self.next_endpoint_button.setDisabled(False) else: self.next_endpoint_button.setDisabled(True) def data_changed_area_model(self, index, to_index): """ changes during selection and hover of area (start point) table index (QIndex): index of changed field """ if self.area_model.columns[index.column()].get('field') == 'selected': # clear display elements if self.area_model.data(index, role=Qt.CheckStateRole) == Qt.Checked: self.variant_model.removeRows(0, len(self.variant_model.rows)) self.legger_model.set_column_value('hover', False) self.legger_model.set_column_value('selected', False) self.legger_model.set_column_value('ep', False) self.legger_model.set_column_value('sp', False) area_item = self.area_model.data(index, role=Qt.UserRole) self.network.set_tree_start_arc(area_item.area.get('arc_nr')) self.legger_model.clear() root = LeggerTreeItem(None, None) self.network.get_tree_data(root, self.category_filter) self.legger_model.setNewTree(root.childs) self.legger_model.set_column_sizes_on_view(self.legger_tree_widget) if len(root.childs) > 0: self.loop_tree(root.childs[0], initial=True) canvas = self.iface.mapCanvas() extent = self.vl_tree_layer.extent() if extent: extent.scale(1.2) canvas.setExtent(extent) elif self.area_model.columns[index.column()].get('field') == 'hover': ids = [feat.id() for feat in self.vl_startpoint_hover_layer.getFeatures()] self.vl_startpoint_hover_layer.dataProvider().deleteFeatures(ids) value = self.area_model.data(index, role=Qt.DisplayRole) if self.area_model.data(index, role=Qt.CheckStateRole) == Qt.Checked: features = [] node = self.area_model.data(index, role=Qt.UserRole) feat = QgsFeature() feat.setGeometry(QgsGeometry.fromPoint(node.area.get('point'))) feat.setAttributes([ node.area.get('vertex_id')]) features.append(feat) self.vl_startpoint_hover_layer.dataProvider().addFeatures(features) self.vl_startpoint_hover_layer.commitChanges() self.vl_startpoint_hover_layer.updateExtents() self.vl_startpoint_hover_layer.triggerRepaint() def data_changed_variant(self, index): """ changes during selection and hover of variant table index (QIndex): index of changed field """ item = self.variant_model.rows[index.row()] if self.variant_model.columns[index.column()].name == 'active': if item.active.value: # only one selected at the time item.color.value = list(item.color.value)[:3] + [255] for row in self.variant_model.rows: if row.active.value and row != item: row.active.value = False depth = item.depth.value selected_variant_id = item.name.value traject = [] if self.legger_model.ep: traject = self.legger_model.ep.up(self.legger_model.selected) traject.reverse() if len(traject) > 0: traject.pop(0) else: messagebar_message( 'Traject nodig', 'Selecteer eerst een traject (sp en ep) voordat diepte kan worden doorgetrokken.', 1, 15) return self.loop_tree( self.legger_model.selected, depth=depth, initial=False, variant_id=selected_variant_id, begroeiingsvariant=self.get_begroeiings_variant(), child_strategy=self.get_child_selection_strategy(), begroeiings_strategy=self.get_begroeiings_strategy(), traject_nodes=traject ) self.session.commit() # trigger repaint of sideview self.sideview_widget.draw_selected_lines(self.sideview_widget._get_data()) else: item.color.value = list(item.color.value)[:3] + [20] # trigger repaint of sideview self.sideview_widget.draw_selected_lines(self.sideview_widget._get_data()) elif self.variant_model.columns[index.column()].name == 'hover': if item.hover.value: # only one selected at the time item.color.value = list(item.color.value)[:3] + [255] for row in self.variant_model.rows: if row.hover.value and row != item: row.hover.value = False depth = item.depth.value selected_variant_id = item.name.value traject = [] self.legger_model.set_column_value('selected_depth_tmp', None) if self.legger_model.ep: traject = self.legger_model.ep.up(self.legger_model.selected) traject.reverse() if len(traject) > 0: traject.pop(0) else: messagebar_message( 'Traject nodig', 'Selecteer eerst een traject (sp en ep) voordat diepte kan worden doorgetrokken.', 1, 15) return hydrovakken = self.loop_tree( self.legger_model.selected, depth=depth, initial=False, hover=True, variant_id=selected_variant_id, begroeiingsvariant=self.get_begroeiings_variant(), child_strategy=self.get_child_selection_strategy(), begroeiings_strategy=self.get_begroeiings_strategy(), traject_nodes=traject ) # set map visualisation of selected hydrovakken self.network._virtual_tree_layer.setSubsetString( '"hydro_id" in (\'{ids}\')'.format( ids='\',\''.join([str(hydrovak.hydrovak['hydro_id']) for hydrovak in hydrovakken]))) # trigger repaint of sideview self.sideview_widget.draw_selected_lines(self.sideview_widget._get_data()) else: self.legger_model.set_column_value('selected_depth_tmp', None) # reset map visualisation self.network._virtual_tree_layer.setSubsetString('') # trigger repaint of sideview self.sideview_widget.draw_selected_lines(self.sideview_widget._get_data()) def on_select_edit_hydrovak(self, item): """ set elements after selection of a hydrovak for profile selection item (LeggerTreeItem): selected hydrovak LeggerTreeItem return: - """ hydro_object = self.session.query(HydroObject).filter_by(id=item.hydrovak.get('hydro_id')).first() if hydro_object is None: self.selected_variant_remark.setPlainText('') self.selected_variant_remark.setDisabled(True) return None self.selected_hydrovak = item self.selected_hydrovak = item self.selected_hydrovak_db = hydro_object self.selected_variant_remark.setDisabled(False) self.selected_variant_remark.setPlainText(item.hydrovak.get('selected_remarks')) self.update_available_variants() def save_remarks(self): if self.selected_hydrovak: if self.selected_hydrovak_db: self.selected_hydrovak_db.opmerkingen = self.selected_variant_remark.toPlainText() self.session.add(self.selected_hydrovak_db) self.session.commit() self.legger_model.setDataItemKey( self.selected_hydrovak, 'selected_remarks', self.selected_variant_remark.toPlainText()) def update_available_variants(self): item = self.selected_hydrovak hydro_object = self.selected_hydrovak_db self.variant_model.removeRows(0, len(self.variant_model.rows)) selected_variant_id = item.hydrovak.get('selected_variant_id') var = self.session.query(Varianten) \ .join(BegroeiingsVariant) \ .outerjoin(ProfielFiguren) \ .filter(Varianten.hydro == hydro_object) \ .order_by(Varianten.diepte) if self.active_begroeiings_variant == SHOW_ALL: pass elif self.active_begroeiings_variant == PRE_SELECTED: var = var.filter(or_(Varianten.begroeiingsvariant == hydro_object.begroeiingsvariant, Varianten.id == selected_variant_id)) elif self.active_begroeiings_variant is not None: var = var.filter(or_(BegroeiingsVariant.naam == self.active_begroeiings_variant, Varianten.id == selected_variant_id)) from legger import settings verhang = 3.0 color_map = ( (1.0, settings.LOW_COLOR), (3.0, settings.OK_COLOR), (4.0, settings.HIGH_COLOR), ) profs = [] for profile in var.all(): active = selected_variant_id == profile.id over_width = None over_depth = None if profile.figuren: over_width = profile.figuren[0].t_overbreedte_l + profile.figuren[0].t_overbreedte_r over_depth = profile.figuren[0].t_overdiepte else: if profile.hydro.kenmerken and profile.hydro.kenmerken[0].diepte is not None and profile.diepte is not None: over_depth = profile.hydro.kenmerken[0].diepte - profile.diepte if profile.hydro.kenmerken and profile.hydro.kenmerken[0].breedte is not None and profile.waterbreedte is not None: over_width = profile.hydro.kenmerken[0].breedte - profile.waterbreedte profs.append({ 'name': profile.id, 'active': active, # digits differ far after the 'depth': profile.diepte, 'begroeiingsvariant': profile.begroeiingsvariant.naam, 'score': profile.figuren[0].t_fit if profile.figuren else None, 'over_depth': over_depth if over_depth is not None else None, 'over_width': over_width if over_depth is not None else None, 'over_width_color': [255, 0, 0] if over_width < 0 else [255, 255, 255], 'verhang': profile.verhang, 'color': interpolated_color(value=profile.verhang, color_map=color_map, alpha=(255 if active else 80)), 'points': [ (-0.5 * profile.waterbreedte, hydro_object.streefpeil), (-0.5 * profile.bodembreedte, hydro_object.streefpeil - profile.diepte), (0.5 * profile.bodembreedte, hydro_object.streefpeil - profile.diepte), (0.5 * profile.waterbreedte, hydro_object.streefpeil), ] }) self.variant_model.insertRows(profs) def update_available_profiles(self, item, variant): """ used for updating ranges after adding a profile manually """ # update variant table self.on_select_edit_hydrovak(item) diepte = float(variant.diepte) if item.hydrovak.get('variant_max_depth') is None or diepte > item.hydrovak.get('variant_max_depth'): self.legger_model.setDataItemKey(item, 'variant_max_depth', diepte) if item.hydrovak.get('variant_min_depth') is None or diepte < item.hydrovak.get('variant_min_depth'): self.legger_model.setDataItemKey(item, 'variant_min_depth', diepte) def onSelectBegroeiingsVariant(self): self.active_begroeiings_variant = self.begroeiings_combo.currentText() self.update_available_variants() def get_begroeiings_variant(self): return self.begroeiings_varianten[self.begroeiings_combo.currentText()] def get_begroeiings_strategy(self): return self.begroeiings_variant_strategies[self.begroeiings_strategy_combo.currentText()] def get_child_selection_strategy(self): return self.child_selection_strategies[self.child_selection_strategy_combo.currentText()] def closeEvent(self, event): """ close event for widget, including removal of layers and disconnection of listeners event: close event return: None """ self.save_remarks() if self.vl_tree_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.vl_tree_layer) if self.line_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.line_layer) if self.vl_endpoint_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.vl_endpoint_layer) if self.vl_track_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.vl_track_layer) if self.vl_hover_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.vl_hover_layer) if self.vl_selected_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.vl_selected_layer) if self.vl_startpoint_hover_layer in QgsMapLayerRegistry.instance().mapLayers().values(): QgsMapLayerRegistry.instance().removeMapLayer(self.vl_startpoint_hover_layer) self.category_combo.currentIndexChanged.disconnect(self.category_change) self.show_manual_input_button.clicked.disconnect(self.show_manual_input_window) self.next_endpoint_button.clicked.disconnect(self.set_next_endpoint) self.variant_model.dataChanged.disconnect(self.data_changed_variant) self.legger_model.dataChanged.disconnect(self.data_changed_legger_tree) self.area_model.dataChanged.disconnect(self.data_changed_area_model) self.begroeiings_combo.currentIndexChanged.disconnect(self.onSelectBegroeiingsVariant) self.legger_model.setTreeWidget(None) self.closingWidget.emit() event.accept() def setup_ui(self, dock_widget): """ initiate main Qt building blocks of interface :param dock_widget: QDockWidget instance """ dock_widget.setObjectName("dock_widget") dock_widget.setAttribute(Qt.WA_DeleteOnClose) self.dock_widget_content = QWidget(self) self.dock_widget_content.setObjectName("dockWidgetContent") self.main_vlayout = QVBoxLayout(self) self.dock_widget_content.setLayout(self.main_vlayout) # add button to add objects to graphs self.button_bar_hlayout = QHBoxLayout(self) self.show_manual_input_button = QPushButton(self) self.button_bar_hlayout.addWidget(self.show_manual_input_button) self.show_manual_input_button.setDisabled(True) self.button_bar_hlayout.addWidget(QLabel("filter t/m categorie:")) self.category_combo = QComboBox(self) self.button_bar_hlayout.addWidget(self.category_combo) self.next_endpoint_button = QPushButton(self) self.button_bar_hlayout.addWidget(self.next_endpoint_button) self.next_endpoint_button.setDisabled(True) self.child_selection_strategy_combo = QComboBox(self) self.button_bar_hlayout.addWidget(QLabel("doortrekken tot:")) self.button_bar_hlayout.addWidget(self.child_selection_strategy_combo) spacer_item = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.button_bar_hlayout.addItem(spacer_item) # self.button_bar_hlayout.addItem(QLabel("doortrekken tot:")) # self.button_bar_hlayout.addItem(self.begroeiings_strategy_combo) self.main_vlayout.addLayout(self.button_bar_hlayout) # add tabWidget for graphWidgets self.contentLayout = QHBoxLayout(self) self.tree_table_tab = QTabWidget(self) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.tree_table_tab.sizePolicy().hasHeightForWidth()) self.tree_table_tab.setSizePolicy(sizePolicy) self.tree_table_tab.setMinimumSize(QSize(850, 0)) self.contentLayout.addWidget(self.tree_table_tab) # startpointTree self.startpoint_tree_widget = StartpointTreeWidget(self, self.area_model) # sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(0) # sizePolicy.setHeightForWidth( # self.legger_tree_widget.sizePolicy().hasHeightForWidth()) # self.legger_tree_widget.setSizePolicy(sizePolicy) # self.legger_tree_widget.setMinimumSize(QSize(750, 0)) self.tree_table_tab.addTab(self.startpoint_tree_widget, 'startpunten') # LeggerTree self.legger_tree_widget = LeggerTreeWidget(self, self.legger_model) # sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) # sizePolicy.setHorizontalStretch(0) # sizePolicy.setVerticalStretch(0) # sizePolicy.setHeightForWidth( # self.legger_tree_widget.sizePolicy().hasHeightForWidth()) # self.legger_tree_widget.setSizePolicy(sizePolicy) # self.legger_tree_widget.setMinimumSize(QSize(750, 0)) self.tree_table_tab.addTab(self.legger_tree_widget, 'hydrovakken') # graphs self.graph_vlayout = QVBoxLayout(self) # Graph self.plot_widget = LeggerPlotWidget( self, session=self.session, legger_model=self.legger_model, variant_model=self.variant_model) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.plot_widget.sizePolicy().hasHeightForWidth()) self.plot_widget.setSizePolicy(sizePolicy) self.plot_widget.setMinimumSize(QSize(250, 150)) self.graph_vlayout.addWidget(self.plot_widget, 2) # Sideview Graph self.sideview_widget = LeggerSideViewPlotWidget( self, session=self.session, legger_model=self.legger_model) sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.sideview_widget.sizePolicy().hasHeightForWidth()) self.sideview_widget.setSizePolicy(sizePolicy) self.sideview_widget.setMinimumSize(QSize(250, 150)) self.graph_vlayout.addWidget(self.sideview_widget) self.contentLayout.addLayout(self.graph_vlayout, 2) self.rightVstack = QVBoxLayout(self) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) self.begroeiings_combo = QComboBox(self) self.begroeiings_strategy_combo = QComboBox(self) self.groupBox_begroeiings = QGroupBox(self) self.groupBox_begroeiings.setTitle("begroeiingsfilter en voor welk deel") vbox_strat = QVBoxLayout() vbox_strat.addWidget(self.begroeiings_combo) vbox_strat.addWidget(self.begroeiings_strategy_combo) self.groupBox_begroeiings.setLayout(vbox_strat) self.rightVstack.addWidget(self.groupBox_begroeiings) # variantentable self.plot_item_table = VariantenTable(self, variant_model=self.variant_model) self.plot_item_table.setMinimumWidth(380) self.rightVstack.addWidget(self.plot_item_table) self.selected_variant_remark = QPlainTextEdit(self) self.selected_variant_remark.setFixedHeight(100) self.selected_variant_remark.setDisabled(True) self.rightVstack.addWidget(self.selected_variant_remark) self.contentLayout.addLayout(self.rightVstack, 0) self.main_vlayout.addLayout(self.contentLayout) # add dockwidget dock_widget.setWidget(self.dock_widget_content) self.retranslate_ui(dock_widget) QMetaObject.connectSlotsByName(dock_widget) def retranslate_ui(self, dock_widget): pass dock_widget.setWindowTitle(_translate( "DockWidget", "Legger", None)) self.show_manual_input_button.setText(_translate( "DockWidget", "Voeg profiel toe", None)) self.next_endpoint_button.setText(_translate( "DockWidget", "Volgend eindpunt", None))
def __init__(self, parent=None): super(Widget, self).__init__(parent) groupBox1 = QGroupBox() groupBox1.setTitle('Feature weights (model object)') self.w1 = QDoubleSpinBox() self.w1.setRange(-10.0, 10.0) self.w1.setValue(5.0) self.w2 = QDoubleSpinBox() self.w2.setRange(-10.0, 10.0) self.w2.setValue(5.0) buttonHelpGroupBox1 = QPushButton('help') buttonHelpGroupBox1.setToolTip('Here you enter the neuron\'s weight coefficients for the individual object features.\n' + 'Positive coefficient means approval to the feature, and negative one will indicate that\n' + 'the given feature should be disliked by the neuron.\n\n' + 'Now the only important thing will be the numeric values of the weights and input signals.\n' + 'However, if you want, you can still imagine that the examined objects are flowers - as\n' + 'in the previous program. The w(1) weight will then indicate the fragrance intensity of\n' + 'the flower, and the w(2) weight - its colour intensity.\n\n' + 'You can also think about this as the location of the "model object".') buttonHelpGroupBox1.setEnabled(False) hBoxLayoutGroupBox1 = QHBoxLayout() hBoxLayoutGroupBox1.addWidget(QLabel('w(1) = ')) hBoxLayoutGroupBox1.addWidget(self.w1) hBoxLayoutGroupBox1.addWidget(QLabel('w(2) = ')) hBoxLayoutGroupBox1.addWidget(self.w2) hBoxLayoutGroupBox1.addWidget(buttonHelpGroupBox1) groupBox1.setLayout(hBoxLayoutGroupBox1) groupBox2 = QGroupBox() groupBox2.setTitle('Evaluated object') self.x1 = QDoubleSpinBox() self.x1.setRange(-10.0, 10.0) self.x1.setValue(-5.0) self.x2 = QDoubleSpinBox() self.x2.setRange(-10.0, 10.0) self.x2.setValue(-5.0) buttonHelpGroupBox2 = QPushButton('help') buttonHelpGroupBox2.setToolTip('Here you can enter the feature values of the evaluated object. As above, you are\n' + 'free to imagine that it is a flower whose fragrance intensity is x(1) and colour intensity\n' + 'is x(2).a') buttonHelpGroupBox2.setEnabled(False) hBoxLayoutGroupBox2 = QHBoxLayout() hBoxLayoutGroupBox2.addWidget(QLabel('x(1) = ')) hBoxLayoutGroupBox2.addWidget(self.x1) hBoxLayoutGroupBox2.addWidget(QLabel('x(2) = ')) hBoxLayoutGroupBox2.addWidget(self.x2) hBoxLayoutGroupBox2.addWidget(buttonHelpGroupBox2) groupBox2.setLayout(hBoxLayoutGroupBox2) groupBox3 = QGroupBox() groupBox3.setTitle('Graph') self.colorResponse = QLabel('Evaluated object') buttonHelpGroupBox3 = QPushButton('help') buttonHelpGroupBox3.setToolTip('On your left, you see a signal graph. The blue point represents the location of the\n' + 'model object. The other point is the location of the evaluated object. Its color, shown\n' + 'on the chart\'s key, corresponds to the neuron\'s attitude towards the evaluated\n' + 'object.\n\n' + 'Click the graph with the right mouse button to set the model object location. The left\n' + 'mouse button sets the evaluated object. You can also perform dragging to move the\n' + 'objects smoothly.') buttonHelpGroupBox3.setEnabled(False) hBoxLayoutGroupBox3 = QHBoxLayout() hBoxLayoutGroupBox3.addWidget(self.colorResponse) hBoxLayoutGroupBox3.addWidget(buttonHelpGroupBox3) vBoxLayoutGroupBox3 = QVBoxLayout() vBoxLayoutGroupBox3.addWidget(QLabel('Key')) vBoxLayoutGroupBox3.addWidget(QLabel('Model object')) vBoxLayoutGroupBox3.addLayout(hBoxLayoutGroupBox3) groupBox3.setLayout(vBoxLayoutGroupBox3) self.response = QLabel('0') hBoxLayoutResponse = QHBoxLayout() hBoxLayoutResponse.addWidget(QLabel('Neuron\'s response: ')) hBoxLayoutResponse.addWidget(self.response) vBoxlayout = QVBoxLayout() vBoxlayout.addWidget(QLabel('The neuron that you will be examining will divide the objects you\n' + 'will show it into the ones that it likes and the ones id dislikes.')) vBoxlayout.addWidget(groupBox1) vBoxlayout.addWidget(groupBox2) vBoxlayout.addLayout(hBoxLayoutResponse) vBoxlayout.addWidget(groupBox3) self.figure = plot.figure() self.canvas = FigureCanvas(self.figure) self.customePlot() hBoxLayout = QHBoxLayout() hBoxLayout.addWidget(self.canvas) hBoxLayout.addLayout(vBoxlayout) self.neuron = Neuron(2) self.evaluatedObject() self.setLayout(hBoxLayout) self.setWindowTitle('Single neuron examination with visualization (example 01b)') self.connect(self.w1, SIGNAL('valueChanged(double)'), self.evaluatedObject) self.connect(self.w2, SIGNAL('valueChanged(double)'), self.evaluatedObject) self.connect(self.x1, SIGNAL('valueChanged(double)'), self.evaluatedObject) self.connect(self.x2, SIGNAL('valueChanged(double)'), self.evaluatedObject)
class Main(plugin.Plugin): " Main Class " def initialize(self, *args, **kwargs): " Init Main Class " super(Main, self).initialize(*args, **kwargs) self.scriptPath, self.scriptArgs = "", [] self.profilerPath, self.tempPath = profilerPath, tempPath self.output = " ERROR: FAIL: No output ! " self.process = QProcess() self.process.finished.connect(self.on_process_finished) self.process.error.connect(self.on_process_error) self.tabWidget, self.stat = QTabWidget(), QWidget() self.tabWidget.tabCloseRequested.connect( lambda: self.tabWidget.setTabPosition(1) if self.tabWidget. tabPosition() == 0 else self.tabWidget.setTabPosition(0)) self.tabWidget.setStyleSheet('QTabBar{font-weight:bold;}') self.tabWidget.setMovable(True) self.tabWidget.setTabsClosable(True) self.vboxlayout1 = QVBoxLayout(self.stat) self.hboxlayout1 = QHBoxLayout() self.filterTableLabel = QLabel("<b>Type to Search : </b>", self.stat) self.hboxlayout1.addWidget(self.filterTableLabel) self.filterTableLineEdit = QLineEdit(self.stat) self.filterTableLineEdit.setPlaceholderText(' Type to Search . . . ') self.hboxlayout1.addWidget(self.filterTableLineEdit) self.filterHintTableLabel = QLabel(" ? ", self.stat) self.hboxlayout1.addWidget(self.filterHintTableLabel) self.vboxlayout1.addLayout(self.hboxlayout1) self.tableWidget = QTableWidget(self.stat) self.tableWidget.setAlternatingRowColors(True) self.tableWidget.setColumnCount(8) self.tableWidget.setRowCount(2) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(0, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(1, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(2, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(3, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(4, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(5, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(6, item) item = QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(7, item) self.tableWidget.itemDoubleClicked.connect( self.on_tableWidget_itemDoubleClicked) self.vboxlayout1.addWidget(self.tableWidget) self.tabWidget.addTab(self.stat, " ? ") self.source = QWidget() self.gridlayout = QGridLayout(self.source) self.scintillaWarningLabel = QLabel( "QScintilla is not installed!. Falling back to basic text edit!.", self.source) self.gridlayout.addWidget(self.scintillaWarningLabel, 1, 0, 1, 2) self.sourceTreeWidget = QTreeWidget(self.source) self.sourceTreeWidget.setAlternatingRowColors(True) self.sourceTreeWidget.itemActivated.connect( self.on_sourceTreeWidget_itemActivated) self.sourceTreeWidget.itemClicked.connect( self.on_sourceTreeWidget_itemClicked) self.sourceTreeWidget.itemDoubleClicked.connect( self.on_sourceTreeWidget_itemClicked) self.gridlayout.addWidget(self.sourceTreeWidget, 0, 0, 1, 1) self.sourceTextEdit = QTextEdit(self.source) self.sourceTextEdit.setReadOnly(True) self.gridlayout.addWidget(self.sourceTextEdit, 0, 1, 1, 1) self.tabWidget.addTab(self.source, " ? ") self.result = QWidget() self.vlayout = QVBoxLayout(self.result) self.globalStatGroupBox = QGroupBox(self.result) self.hboxlayout = QHBoxLayout(self.globalStatGroupBox) self.totalTimeLcdNumber = QLCDNumber(self.globalStatGroupBox) self.totalTimeLcdNumber.setSegmentStyle(QLCDNumber.Filled) self.totalTimeLcdNumber.setNumDigits(7) self.totalTimeLcdNumber.display(1000000) self.totalTimeLcdNumber.setFrameShape(QFrame.StyledPanel) self.totalTimeLcdNumber.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.hboxlayout.addWidget(self.totalTimeLcdNumber) self.tTimeLabel = QLabel("<b>Total Time (Sec)</b>", self.globalStatGroupBox) self.tTimeLabel.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.hboxlayout.addWidget(self.tTimeLabel) self.numCallLcdNumber = QLCDNumber(self.globalStatGroupBox) self.numCallLcdNumber.setNumDigits(7) self.numCallLcdNumber.display(1000000) self.numCallLcdNumber.setSegmentStyle(QLCDNumber.Filled) self.numCallLcdNumber.setFrameShape(QFrame.StyledPanel) self.numCallLcdNumber.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.hboxlayout.addWidget(self.numCallLcdNumber) self.numCallLabel = QLabel("<b>Number of calls</b>", self.globalStatGroupBox) self.numCallLabel.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.hboxlayout.addWidget(self.numCallLabel) self.primCallLcdNumber = QLCDNumber(self.globalStatGroupBox) self.primCallLcdNumber.setSegmentStyle(QLCDNumber.Filled) self.primCallLcdNumber.setFrameShape(QFrame.StyledPanel) self.primCallLcdNumber.setNumDigits(7) self.primCallLcdNumber.display(1000000) self.primCallLcdNumber.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.hboxlayout.addWidget(self.primCallLcdNumber) self.primCallLabel = QLabel("<b>Primitive calls (%)</b>", self.globalStatGroupBox) self.primCallLabel.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.hboxlayout.addWidget(self.primCallLabel) self.vlayout.addWidget(self.globalStatGroupBox) try: from PyKDE4.kdeui import KRatingWidget self.rating = KRatingWidget(self.globalStatGroupBox) self.rating.setToolTip('Profiling Performance Rating') except ImportError: pass self.tabWidget.addTab(self.result, " Get Results ! ") self.resgraph = QWidget() self.vlayout2 = QVBoxLayout(self.result) self.graphz = QGroupBox(self.resgraph) self.hboxlayout2 = QHBoxLayout(self.graphz) try: from PyKDE4.kdeui import KLed KLed(self.graphz) except ImportError: pass self.hboxlayout2.addWidget( QLabel(''' Work in Progress :) Not Ready Yet''')) self.vlayout2.addWidget(self.graphz) self.tabWidget.addTab(self.resgraph, " Graphs and Charts ") self.pathz = QWidget() self.vlayout3 = QVBoxLayout(self.pathz) self.patz = QGroupBox(self.pathz) self.hboxlayout3 = QVBoxLayout(self.patz) self.profilepath = QLineEdit(profilerPath) self.getprofile = QPushButton(QIcon.fromTheme("document-open"), 'Open') self.getprofile.setToolTip( 'Dont touch if you dont know what are doing') self.getprofile.clicked.connect(lambda: self.profilepath.setText( str( QFileDialog.getOpenFileName( self.patz, ' Open the profile.py file ', path.expanduser("~"), ';;(profile.py)')))) self.hboxlayout3.addWidget( QLabel( '<center><b>Profile.py Python Library Full Path:</b></center>') ) self.hboxlayout3.addWidget(self.profilepath) self.hboxlayout3.addWidget(self.getprofile) self.argGroupBox = QGroupBox(self.pathz) self.hbxlayout = QHBoxLayout(self.argGroupBox) self.argLineEdit = QLineEdit(self.argGroupBox) self.argLineEdit.setToolTip( 'Not touch if you dont know what are doing') self.argLineEdit.setPlaceholderText( 'Dont touch if you dont know what are doing') self.hbxlayout.addWidget( QLabel('<b>Additional Profile Arguments:</b>')) self.hbxlayout.addWidget(self.argLineEdit) self.hboxlayout3.addWidget(self.argGroupBox) self.vlayout3.addWidget(self.patz) self.tabWidget.addTab(self.pathz, " Paths and Configs ") self.outp = QWidget() self.vlayout4 = QVBoxLayout(self.outp) self.outgro = QGroupBox(self.outp) self.outgro.setTitle(" MultiProcessing Output Logs ") self.hboxlayout4 = QVBoxLayout(self.outgro) self.outputlog = QTextEdit() self.outputlog.setText(''' I do not fear computers, I fear the lack of them. -Isaac Asimov ''') self.hboxlayout4.addWidget(self.outputlog) self.vlayout4.addWidget(self.outgro) self.tabWidget.addTab(self.outp, " Logs ") self.actionNew_profiling = QAction(QIcon.fromTheme("document-new"), 'New Profiling', self) self.actionLoad_profile = QAction(QIcon.fromTheme("document-open"), 'Open Profiling', self) self.actionClean = QAction(QIcon.fromTheme("edit-clear"), 'Clean', self) self.actionClean.triggered.connect(lambda: self.clearContent) self.actionAbout = QAction(QIcon.fromTheme("help-about"), 'About', self) self.actionAbout.triggered.connect(lambda: QMessageBox.about( self.dock, __doc__, ', '.join( (__doc__, __license__, __author__, __email__)))) self.actionSave_profile = QAction(QIcon.fromTheme("document-save"), 'Save Profiling', self) self.actionManual = QAction(QIcon.fromTheme("help-contents"), 'Help', self) self.actionManual.triggered.connect(lambda: open_new_tab( 'http://docs.python.org/library/profile.html')) self.tabWidget.setCurrentIndex(2) self.globalStatGroupBox.setTitle("Global Statistics") item = self.tableWidget.horizontalHeaderItem(0) item.setText("Number of Calls") item = self.tableWidget.horizontalHeaderItem(1) item.setText("Total Time") item = self.tableWidget.horizontalHeaderItem(2) item.setText("Per Call") item = self.tableWidget.horizontalHeaderItem(3) item.setText("Cumulative Time") item = self.tableWidget.horizontalHeaderItem(4) item.setText("Per Call") item = self.tableWidget.horizontalHeaderItem(5) item.setText("Filename") item = self.tableWidget.horizontalHeaderItem(6) item.setText("Line") item = self.tableWidget.horizontalHeaderItem(7) item.setText("Function") self.tabWidget.setTabText(self.tabWidget.indexOf(self.stat), "Statistics per Function") self.sourceTreeWidget.headerItem().setText(0, "Source files") self.tabWidget.setTabText(self.tabWidget.indexOf(self.source), "Sources Navigator") ####################################################################### self.scrollable, self.dock = QScrollArea(), QDockWidget() self.scrollable.setWidgetResizable(True) self.scrollable.setWidget(self.tabWidget) self.dock.setWindowTitle(__doc__) self.dock.setStyleSheet('QDockWidget::title{text-align: center;}') self.dock.setWidget(self.scrollable) QToolBar(self.dock).addActions( (self.actionNew_profiling, self.actionClean, self.actionSave_profile, self.actionLoad_profile, self.actionManual, self.actionAbout)) self.actionNew_profiling.triggered.connect( self.on_actionNew_profiling_triggered) self.actionLoad_profile.triggered.connect( self.on_actionLoad_profile_triggered) self.actionSave_profile.triggered.connect( self.on_actionSave_profile_triggered) self.locator.get_service('misc').add_widget( self.dock, QIcon.fromTheme("document-open-recent"), __doc__) if QSCI: # Scintilla source editor management self.scintillaWarningLabel.setText(' QScintilla is Ready ! ') layout = self.source.layout() layout.removeWidget(self.sourceTextEdit) self.sourceTextEdit = Qsci.QsciScintilla(self.source) layout.addWidget(self.sourceTextEdit, 0, 1) doc = self.sourceTextEdit doc.setLexer(Qsci.QsciLexerPython(self.sourceTextEdit)) doc.setReadOnly(True) doc.setEdgeMode(Qsci.QsciScintilla.EdgeLine) doc.setEdgeColumn(80) doc.setEdgeColor(QColor("#FF0000")) doc.setFolding(Qsci.QsciScintilla.BoxedTreeFoldStyle) doc.setBraceMatching(Qsci.QsciScintilla.SloppyBraceMatch) doc.setCaretLineVisible(True) doc.setMarginLineNumbers(1, True) doc.setMarginWidth(1, 25) doc.setTabWidth(4) doc.setEolMode(Qsci.QsciScintilla.EolUnix) self.marker = {} for color in COLORS: mnr = doc.markerDefine(Qsci.QsciScintilla.Background) doc.setMarkerBackgroundColor(color, mnr) self.marker[color] = mnr self.currentSourcePath = None # Connect table and tree filter edit signal to unique slot self.filterTableLineEdit.textEdited.connect( self.on_filterLineEdit_textEdited) # Timer to display filter hint message self.filterHintTimer = QTimer(self) self.filterHintTimer.setSingleShot(True) self.filterHintTimer.timeout.connect(self.on_filterHintTimer_timeout) # Timer to start search self.filterSearchTimer = QTimer(self) self.filterSearchTimer.setSingleShot(True) self.filterSearchTimer.timeout.connect( self.on_filterSearchTimer_timeout) self.tabLoaded = {} for i in range(10): self.tabLoaded[i] = False self.backgroundTreeMatchedItems = {} self.resizeWidgetToContent(self.tableWidget) def on_actionNew_profiling_triggered(self): self.clearContent() self.scriptPath = str( QFileDialog.getOpenFileName(self.dock, "Choose your script to profile", path.expanduser("~"), "Python (*.py *.pyw)")) commandLine = [ self.profilerPath, "-o", self.tempPath, self.scriptPath ] + self.scriptArgs commandLine = " ".join(commandLine) ##if self.termCheckBox.checkState() == Qt.Checked: #termList = ["xterm", "aterm"] #for term in termList: #termPath = which(term) #if termPath: #break #commandLine = """%s -e "%s ; echo 'Press ENTER Exit' ; read" """ \ #% (termPath, commandLine) self.process.start(commandLine) if not self.process.waitForStarted(): print((" ERROR: {} failed!".format(commandLine))) return def on_process_finished(self, exitStatus): ' whan the process end ' print((" INFO: OK: QProcess is %s" % self.process.exitCode())) self.output = self.process.readAll().data() if not self.output: self.output = " ERROR: FAIL: No output ! " self.outputlog.setText(self.output + str(self.process.exitCode())) if path.exists(self.tempPath): self.setStat(self.tempPath) remove(self.tempPath) else: self.outputlog.setText(" ERROR: QProcess FAIL: Profiling failed.") self.tabWidget.setCurrentIndex(2) def on_process_error(self, error): ' when the process fail, I hope you never see this ' print(" ERROR: QProcess FAIL: Profiler Dead, wheres your God now ? ") if error == QProcess.FailedToStart: self.outputlog.setText(" ERROR: FAIL: Profiler execution failed ") elif error == QProcess.Crashed: self.outputlog.setText(" ERROR: FAIL: Profiler execution crashed ") else: self.outputlog.setText(" ERROR: FAIL: Profiler unknown error ") def on_actionLoad_profile_triggered(self): """Load a previous profile sessions""" statPath = str( QFileDialog.getOpenFileName(self.dock, "Open profile dump", path.expanduser("~"), "Profile file (*)")) if statPath: self.clearContent() print(' INFO: OK: Loading profiling from ' + statPath) self.setStat(statPath) def on_actionSave_profile_triggered(self): """Save a profile sessions""" statPath = str( QFileDialog.getSaveFileName(self.dock, "Save profile dump", path.expanduser("~"), "Profile file (*)")) if statPath: #TODO: handle error case and give feelback to user print(' INFO: OK: Saving profiling to ' + statPath) self.stat.save(statPath) #=======================================================================# # Common parts # #=======================================================================# def on_tabWidget_currentChanged(self, index): """slot for tab change""" # Kill search and hint timer if running to avoid cross effect for timer in (self.filterHintTimer, self.filterSearchTimer): if timer.isActive(): timer.stop() if not self.stat: #No stat loaded, nothing to do return self.populateTable() self.populateSource() def on_filterLineEdit_textEdited(self, text): """slot for filter change (table or tree""" if self.filterSearchTimer.isActive(): # Already runnning, stop it self.filterSearchTimer.stop() # Start timer self.filterSearchTimer.start(300) def on_filterHintTimer_timeout(self): """Timeout to warn user about text length""" print("timeout") tab = self.tabWidget.currentIndex() if tab == TAB_FUNCTIONSTAT: label = self.filterHintTableLabel label.setText("Type > 2 characters to search") def on_filterSearchTimer_timeout(self): """timeout to start search""" tab = self.tabWidget.currentIndex() if tab == TAB_FUNCTIONSTAT: text = self.filterTableLineEdit.text() label = self.filterHintTableLabel edit = self.filterTableLineEdit widget = self.tableWidget else: print("Unknow tab for filterSearch timeout !") print(("do search for %s" % text)) if not len(text): # Empty keyword, just clean all if self.filterHintTimer.isActive(): self.filterHintTimer.stop() label.setText(" ? ") self.warnUSer(True, edit) self.clearSearch() return if len(text) < 2: # Don't filter if text is too short and tell it to user self.filterHintTimer.start(600) return else: if self.filterHintTimer.isActive(): self.filterHintTimer.stop() label.setText(" ? ") # Search self.clearSearch() matchedItems = [] if tab == TAB_FUNCTIONSTAT: # Find items matchedItems = widget.findItems(text, Qt.MatchContains) widget.setSortingEnabled(False) matchedRows = [item.row() for item in matchedItems] # Hide matched items header = widget.verticalHeader() for row in range(widget.rowCount()): if row not in matchedRows: header.hideSection(row) widget.setSortingEnabled(True) else: print(" Unknow tab for filterSearch timeout ! ") print(("got %s members" % len(matchedItems))) self.warnUSer(matchedItems, edit) self.resizeWidgetToContent(widget) def resizeWidgetToContent(self, widget): """Resize all columns according to content""" for i in range(widget.columnCount()): widget.resizeColumnToContents(i) def clearSearch(self): """Clean search result For table, show all items For tree, remove colored items""" tab = self.tabWidget.currentIndex() if tab == TAB_FUNCTIONSTAT: header = self.tableWidget.verticalHeader() if header.hiddenSectionCount(): for i in range(header.count()): if header.isSectionHidden(i): header.showSection(i) def clearContent(self): # Clear tabs self.tableWidget.clearContents() self.sourceTreeWidget.clear() # Reset LCD numbers for lcdNumber in (self.totalTimeLcdNumber, self.numCallLcdNumber, self.primCallLcdNumber): lcdNumber.display(1000000) # Reset stat self.pstat = None # Disable save as menu self.actionSave_profile.setEnabled(False) # Mark all tabs as unloaded for i in range(10): self.tabLoaded[i] = False def warnUSer(self, result, inputWidget): palette = inputWidget.palette() if result: palette.setColor(QPalette.Normal, QPalette.Base, QColor(255, 255, 255)) else: palette.setColor(QPalette.Normal, QPalette.Base, QColor(255, 136, 138)) inputWidget.setPalette(palette) inputWidget.update() def setStat(self, statPath): self.stat = Stat(path=statPath) # Global stat update self.totalTimeLcdNumber.display(self.stat.getTotalTime()) self.numCallLcdNumber.display(self.stat.getCallNumber()) self.primCallLcdNumber.display(self.stat.getPrimitiveCallRatio()) # Refresh current tab self.on_tabWidget_currentChanged(self.tabWidget.currentIndex()) # Activate save as menu self.actionSave_profile.setEnabled(True) try: self.rating.setMaxRating(10) self.rating.setRating( int(self.stat.getPrimitiveCallRatio()) / 10 - 1) except: pass #========================================================================# # Statistics table # #=======================================================================# def populateTable(self): row = 0 rowCount = self.stat.getStatNumber() progress = QProgressDialog("Populating statistics table...", "Abort", 0, 2 * rowCount) self.tableWidget.setSortingEnabled(False) self.tableWidget.setRowCount(rowCount) progress.setWindowModality(Qt.WindowModal) for (key, value) in self.stat.getStatItems(): #ncalls item = StatTableWidgetItem(str(value[0])) item.setTextAlignment(Qt.AlignRight) self.tableWidget.setItem(row, STAT_NCALLS, item) colorTableItem(item, self.stat.getCallNumber(), value[0]) #total time item = StatTableWidgetItem(str(value[2])) item.setTextAlignment(Qt.AlignRight) self.tableWidget.setItem(row, STAT_TTIME, item) colorTableItem(item, self.stat.getTotalTime(), value[2]) #per call (total time) if value[0] != 0: tPerCall = str(value[2] / value[0]) cPerCall = str(value[3] / value[0]) else: tPerCall = "" cPerCall = "" item = StatTableWidgetItem(tPerCall) item.setTextAlignment(Qt.AlignRight) self.tableWidget.setItem(row, STAT_TPERCALL, item) colorTableItem( item, 100.0 * self.stat.getTotalTime() / self.stat.getCallNumber(), tPerCall) #per call (cumulative time) item = StatTableWidgetItem(cPerCall) item.setTextAlignment(Qt.AlignRight) self.tableWidget.setItem(row, STAT_CPERCALL, item) colorTableItem( item, 100.0 * self.stat.getTotalTime() / self.stat.getCallNumber(), cPerCall) #cumulative time item = StatTableWidgetItem(str(value[3])) item.setTextAlignment(Qt.AlignRight) self.tableWidget.setItem(row, STAT_CTIME, item) colorTableItem(item, self.stat.getTotalTime(), value[3]) #Filename self.tableWidget.setItem(row, STAT_FILENAME, StatTableWidgetItem(str(key[0]))) #Line item = StatTableWidgetItem(str(key[1])) item.setTextAlignment(Qt.AlignRight) self.tableWidget.setItem(row, STAT_LINE, item) #Function name self.tableWidget.setItem(row, STAT_FUNCTION, StatTableWidgetItem(str(key[2]))) row += 1 # Store it in stat hash array self.stat.setStatLink(item, key, TAB_FUNCTIONSTAT) progress.setValue(row) if progress.wasCanceled(): return for i in range(self.tableWidget.rowCount()): progress.setValue(row + i) for j in range(self.tableWidget.columnCount()): item = self.tableWidget.item(i, j) if item: item.setFlags(Qt.ItemIsEnabled) self.tableWidget.setSortingEnabled(True) self.resizeWidgetToContent(self.tableWidget) progress.setValue(2 * rowCount) def on_tableWidget_itemDoubleClicked(self, item): matchedItems = [] filename = str(self.tableWidget.item(item.row(), STAT_FILENAME).text()) if not filename or filename.startswith("<"): # No source code associated, return immediatly return function = self.tableWidget.item(item.row(), STAT_FUNCTION).text() line = self.tableWidget.item(item.row(), STAT_LINE).text() self.on_tabWidget_currentChanged(TAB_SOURCE) # load source tab function = "%s (%s)" % (function, line) fathers = self.sourceTreeWidget.findItems(filename, Qt.MatchContains, SOURCE_FILENAME) print(("find %s father" % len(fathers))) for father in fathers: findItems(father, function, SOURCE_FILENAME, matchedItems) print(("find %s items" % len(matchedItems))) if matchedItems: self.tabWidget.setCurrentIndex(TAB_SOURCE) self.sourceTreeWidget.scrollToItem(matchedItems[0]) self.on_sourceTreeWidget_itemClicked(matchedItems[0], SOURCE_FILENAME) matchedItems[0].setSelected(True) else: print("oups, item found but cannot scroll to it !") #=======================================================================# # Source explorer # #=====================================================================# def populateSource(self): items = {} for stat in self.stat.getStatKeys(): source = stat[0] function = "%s (%s)" % (stat[2], stat[1]) if source in ("", "profile") or source.startswith("<"): continue # Create the function child child = QTreeWidgetItem([function]) # Store it in stat hash array self.stat.setStatLink(child, stat, TAB_SOURCE) if source in items: father = items[source] else: # Create the father father = QTreeWidgetItem([source]) items[source] = father father.addChild(child) self.sourceTreeWidget.setSortingEnabled(False) for value in list(items.values()): self.sourceTreeWidget.addTopLevelItem(value) self.sourceTreeWidget.setSortingEnabled(True) def on_sourceTreeWidget_itemActivated(self, item, column): self.on_sourceTreeWidget_itemClicked(item, column) def on_sourceTreeWidget_itemClicked(self, item, column): line = 0 parent = item.parent() if QSCI: doc = self.sourceTextEdit if parent: pathz = parent.text(column) result = match("(.*) \(([0-9]+)\)", item.text(column)) if result: try: function = str(result.group(1)) line = int(result.group(2)) except ValueError: # We got garbage... falling back to line 0 pass else: pathz = item.text(column) pathz = path.abspath(str(pathz)) if self.currentSourcePath != pathz: # Need to load source self.currentSourcePath == pathz try: if QSCI: doc.clear() doc.insert(file(pathz).read()) else: self.sourceTextEdit.setPlainText(file(pathz).read()) except IOError: QMessageBox.warning(self, "Error", "Source file could not be found", QMessageBox.Ok) return if QSCI: for function, line in [(i[2], i[1]) for i in self.stat.getStatKeys() if i[0] == pathz]: # expr, regexp, case sensitive, whole word, wrap, forward doc.findFirst("def", False, True, True, False, True, line, 0, True) end, foo = doc.getCursorPosition() time = self.stat.getStatTotalTime((pathz, line, function)) colorSource(doc, self.stat.getTotalTime(), time, line, end, self.marker) if QSCI: doc.ensureLineVisible(line)
class previewDlg(QMainWindow): ''' classdocs ''' def __init__(self, parent, comp, basePMCheck, model): ''' Constructor ''' QMainWindow.__init__(self, parent) self.basePMCheck = basePMCheck # self.ui = Ui_Previewself.grbPageProperty() # self.ui.setupUi(self) self.resize(1000, 700) self.setWindowTitle("Preview Dialog") self.view = QgsComposerView(self) viewLayout = QGridLayout() viewLayout.setSpacing(0) viewLayout.setMargin(0) mHorizontalRuler = QgsComposerRuler(QgsComposerRuler.Horizontal) mVerticalRuler = QgsComposerRuler(QgsComposerRuler.Vertical) mRulerLayoutFix = QWidget() mRulerLayoutFix.setAttribute(Qt.WA_NoMousePropagation) mRulerLayoutFix.setBackgroundRole(QPalette.Window) mRulerLayoutFix.setFixedSize(mVerticalRuler.rulerSize(), mHorizontalRuler.rulerSize()) viewLayout.addWidget(mRulerLayoutFix, 0, 0) viewLayout.addWidget(mHorizontalRuler, 0, 1) viewLayout.addWidget(mVerticalRuler, 1, 0) self.view.setContentsMargins(0, 0, 0, 0) self.view.setHorizontalRuler(mHorizontalRuler) self.view.setVerticalRuler(mVerticalRuler) viewLayout.addWidget(self.view, 1, 1) # self.scene = comp self.view.setZoomLevel(1.0) self.view.setComposition(comp) self.scene = self.view.composition() layout = QVBoxLayout() hLayout = QHBoxLayout() hLayout.addLayout(viewLayout) self.mapItem = self.scene.getComposerMapById(0) self.view.scale(2.8, 2.8) self.view.setPreviewModeEnabled(True) self.toolBarAction = self.addToolBar("composer action") self.actionMapRefresh = QAction(self) self.actionMapRefresh.setObjectName("actionMapRefresh") icon3 = QIcon("Resource/Refresh.png") self.actionMapRefresh.setIcon(icon3) self.actionMapRefresh.setToolTip("Refresh") # self.textItemAction.setCheckable(True) self.connect(self.actionMapRefresh, SIGNAL("triggered()"), self.actionMapRefresh_triggered) self.toolBarAction.addAction(self.actionMapRefresh) # # self.templeteCreateAction = QAction(self) # # self.templeteCreateAction.setObjectName("createTempleteAction") # # icon4 = QIcon("Resource\\templetepointer.png") # # self.templeteCreateAction.setIcon(icon4) # # self.templeteCreateAction.setToolTip("Create Templete") # # self.templeteCreateAction.setCheckable(True) # # self.connect(self.templeteCreateAction, SIGNAL("triggered()"), self.createTempleteAction) # # self.toolBar.addAction(self.templeteCreateAction) # layout.insertWidget(0, self.toolBar) # self.scene.selectedItemChanged.connect(self.selectedItemDisplay) self.view.selectedItemChanged.connect(self.selectedItemDisplay) self.view.cursorPosChanged.connect(self.cursorPosChangedEvent) # self.connect(self.view, SIGNAL("selectedItemChanged(QgsComposerItem)"),self, SLOT("selectedItemDisplay(QgsComposerItem)")) # self.scene.composerLabelAdded.connect(self.composerLabelAddedEvent) self.view.itemRemoved.connect(self.deleteItem) # self.connect( self.view, SIGNAL( "actionFinished()" ), self.setSelectionTool) #listen out for position updates from the QgsComposerView self.propertyWidget = QWidget(self) hLayout.addWidget(self.propertyWidget) self.propertyWidget.setObjectName("propertyWidget") self.propertyWidget.resize(222, 302) self.vLayout_3 = QVBoxLayout(self.propertyWidget) self.vLayout_3.setObjectName("vLayout_3") self.groupBox = QGroupBox(self.propertyWidget) self.groupBox.setObjectName("groupBox") self.horizontalLayout_2 = QHBoxLayout(self.groupBox) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.frame = QFrame(self.groupBox) self.frame.setFrameShape(QFrame.StyledPanel) self.frame.setFrameShadow(QFrame.Raised) self.frame.setObjectName("frame") self.verticalLayout = QVBoxLayout(self.frame) self.verticalLayout.setObjectName("verticalLayout") self.label = QLabel(self.frame) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.labelText = QPlainTextEdit(self.frame) self.labelText.setObjectName("labelText") self.verticalLayout.addWidget(self.labelText) self.btnLabelFont = QPushButton(self.frame) self.btnLabelFont.setObjectName("btnLabelFont") self.verticalLayout.addWidget(self.btnLabelFont) self.btnLabelColor = QPushButton(self.frame) self.btnLabelColor.setObjectName("btnLabelColor") self.verticalLayout.addWidget(self.btnLabelColor) self.frame_2 = QFrame(self.frame) self.frame_2.setFrameShape(QFrame.StyledPanel) self.frame_2.setFrameShadow(QFrame.Raised) self.frame_2.setObjectName("frame_2") self.horizontalLayout = QHBoxLayout(self.frame_2) self.horizontalLayout.setObjectName("horizontalLayout") self.label_2 = QLabel(self.frame_2) self.label_2.setObjectName("label_2") self.horizontalLayout.addWidget(self.label_2) self.spinLabelRotation = QSpinBox(self.frame_2) self.spinLabelRotation.setObjectName("spinLabelRotation") self.spinLabelRotation.setMinimum(-360) self.spinLabelRotation.setMaximum(360) self.horizontalLayout.addWidget(self.spinLabelRotation) self.verticalLayout.addWidget(self.frame_2) self.chbBackgroundEnable = QCheckBox(self.frame) self.chbBackgroundEnable.setChecked(True) self.chbBackgroundEnable.setObjectName("chbBackgroundEnable") self.verticalLayout.addWidget(self.chbBackgroundEnable) self.horizontalLayout_2.addWidget(self.frame) self.vLayout_3.addWidget(self.groupBox) self.resolutionFrame = QFrame(self.frame) self.resolutionFrame.setFrameShape(QFrame.StyledPanel) self.resolutionFrame.setFrameShadow(QFrame.Raised) self.resolutionFrame.setObjectName("resolutionFrame") self.horizontalLayout4 = QHBoxLayout(self.resolutionFrame) self.horizontalLayout4.setObjectName("horizontalLayout4") self.label_resolution = QLabel(self.resolutionFrame) self.label_resolution.setObjectName("label_resolution") self.label_resolution.setText("Print Resolution (dpi):") self.horizontalLayout4.addWidget(self.label_resolution) self.spinResolution = QSpinBox(self.resolutionFrame) self.spinResolution.setObjectName("spinResolution") self.spinResolution.setMinimum(0) self.spinResolution.setMaximum(1000) self.spinResolution.setValue(300) self.horizontalLayout4.addWidget(self.spinResolution) # self.verticalLayout.addWidget(self.frame_2) self.vLayout_3.addWidget(self.resolutionFrame) self.gbTable = GroupBox(self.propertyWidget) self.gbTable.Caption = "Table" self.vLayout_3.addWidget(self.gbTable) self.mTableView = QTableView(self.gbTable) self.gbTable.Add = self.mTableView hHeder = self.mTableView.horizontalHeader() hHeder.setVisible(False) vHeder = self.mTableView.verticalHeader() vHeder.setVisible(False) # self.mTableView.setFixedHeight(70) # self.mTableView.setFixedWidth(comp.paperWidth() - 40) # self.stdItemModel = QStandardItemModel() # self. self.spaceItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.vLayout_3.addItem(self.spaceItem) self.groupBox.setTitle("Label Property") self.label.setText("Label Text:") self.btnLabelFont.setText("Label Font") self.btnLabelColor.setText("Label Color") self.label_2.setText("Label Rotation:") self.chbBackgroundEnable.setText("Background Enable") self.groupBox.setEnabled(False) self.connect(self.btnLabelFont, SIGNAL("clicked()"), self.btnLabelFontClick) self.connect(self.btnLabelColor, SIGNAL("clicked()"), self.btnLabelColorClick) self.connect(self.chbBackgroundEnable, SIGNAL("clicked()"), self.chbBackgroundEnableClick) self.labelText.textChanged.connect(self.labelTextChanged) self.spinLabelRotation.valueChanged.connect( self.spinLabelRotationValueChanged) layout.addLayout(hLayout) # self.btnBack = QPushButton() self.btnBack.setText("back") footerLayout = QHBoxLayout() footerLayout.addWidget(self.btnBack) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") footerLayout.addWidget(self.buttonBox) layout.addLayout(footerLayout) self.setLayout(layout) deleteItemKey = QShortcut(QKeySequence(Qt.Key_Delete), self) deleteItemKey.activated.connect(self.deleteItem) # self.btnBack.clicked.connect(self.back) self.connect(self.buttonBox, SIGNAL("accepted()"), self.acceptMethod) self.connect(self.buttonBox, SIGNAL("rejected()"), self.reject) self.btnCancel = self.buttonBox.button(QDialogButtonBox.Cancel) self.view.setCurrentTool(QgsComposerView.Select) self.btnLabelColor.setVisible(False) # self.btnBack.setVisible(False) self.chbBackgroundEnable.setVisible(False) # self.view.emit(SIGNAL("actionFinished")) # if self.scene.plotStyle() != QgsComposition.Preview: # self.scene.setPlotStyle(QgsComposition.Preview) # self.mapItem.setPreviewMode(QgsComposerMap.Render) # self.mapItem.updateCachedImage() # self.mapItem.setSelected(True) self.mComposition = comp self.composerMapItem = self.mComposition.composerMapItems()[0] self.composerMapItem.setUpdatesEnabled(True) self.mStdModel = model self.mTableView.setModel(self.mStdModel) self.mTableView.setSpan(0, 0, 1, 6) self.mTableView.setSpan(1, 0, 1, 2) self.mTableView.setSpan(2, 0, 2, 1) self.mTableView.setSpan(4, 0, 1, 2) self.mTableView.setSpan(5, 0, 1, 2) self.mTableView.setSpan(6, 0, 1, 2) self.mTableView.setSpan(0, 6, 1, 8) self.mTableView.setSpan(1, 7, 1, 4) self.mTableView.setSpan(1, 11, 1, 3) self.mTableView.setSpan(2, 7, 1, 4) self.mTableView.setSpan(2, 11, 1, 3) def acceptMethod(self): # self.mStdModel.setItem(0, QStandardItem("nnnnnnnn")) filePath = QFileDialog.getSaveFileName( self, "Save PDF File", QCoreApplication.applicationDirPath(), "pdf files(*.pdf )") if filePath == "": return self.mComposition.clearSelection() self.mComposition.setPrintResolution(self.spinResolution.value()) resultPdf = self.mComposition.exportAsPDF(filePath) if resultPdf: message = QMessageBox.information(self, "Result", "Successful export PDF") else: message = QMessageBox.information(self, "Result", "Don't export PDF") def rePresent(self, comp, model): self.mComposition = comp self.mStdModel = model self.view.setComposition(comp) self.scene = self.view.composition() def back(self): self.done(2) def spinLabelRotationValueChanged(self, rotationValue): self.selectedLabelItem.setItemRotation(rotationValue) def cursorPosChangedEvent(self, scenePointF): self.scenePoint = scenePointF # i = 100 def labelTextChanged(self): self.selectedLabelItem.beginCommand( "Label text changed", QgsComposerMergeCommand.ComposerLabelSetText) self.selectedLabelItem.blockSignals(True) self.selectedLabelItem.setText(self.labelText.toPlainText()) self.selectedLabelItem.update() self.selectedLabelItem.blockSignals(False) self.selectedLabelItem.endCommand() def chbBackgroundEnableClick(self): if self.chbBackgroundEnable.isChecked(): self.selectedLabelItem.setBackgroundEnabled(True) self.mapItem.updateCachedImage() else: self.selectedLabelItem.setBackgroundEnabled(False) self.mapItem.updateCachedImage() def btnLabelFontClick(self): dlgFont = QFontDialog(self) dlgFont.setCurrentFont(self.selectedLabelItem.font()) result = dlgFont.exec_() if result == 1: self.labelFont = dlgFont.selectedFont() else: self.labelFont = QFont() self.selectedLabelItem.setFont(self.labelFont) def btnLabelColorClick(self): dlgColor = QColorDialog(self) dlgColor.setCurrentColor(self.selectedLabelItem.fontColor()) result = dlgColor.exec_() if result == 1: self.labelColor = dlgColor.selectedColor() self.selectedLabelItem.setFontColor(self.labelColor) def createTempleteAction(self): if self.templeteCreateAction.isChecked() and self.basePMCheck: font = QFont("Arial", 13) font.setItalic(True) self.compLabel1 = QgsComposerLabel(self.scene) self.compLabel1.setFont(font) self.compLabel1.setText("South China Sea") self.compLabel1.setBackgroundEnabled(False) self.compLabel1.setItemPosition(156, 100) self.compLabel1.adjustSizeToText() self.compLabel1.setItemRotation(60) # mapitem = self.scene.composerMapItems() # mapitem[0].addItem(self.compLabel1) self.scene.addItem(self.compLabel1) self.compLabel2 = QgsComposerLabel(self.scene) self.compLabel2.setFont(font) self.compLabel2.setText("Straits Of Malacca") self.compLabel2.setBackgroundEnabled(False) self.compLabel2.setItemPosition(35, 100) self.compLabel2.adjustSizeToText() self.compLabel2.setItemRotation(60) self.scene.addItem(self.compLabel2) font.setItalic(False) self.compLabel3 = QgsComposerLabel(self.scene) self.compLabel3.setFont(font) self.compLabel3.setBackgroundEnabled(False) self.compLabel3.setText("THAILAND") self.compLabel3.setItemPosition(68, 60) self.compLabel3.adjustSizeToText() # self.compLabel3.setItemRotation(0.5) self.scene.addItem(self.compLabel3) # self.templeteCreateAction.setChecked(False) self.compLabel4 = QgsComposerLabel(self.scene) self.compLabel4.setFont(font) self.compLabel4.setBackgroundEnabled(False) self.compLabel4.setText("SINGAPORE") self.compLabel4.setItemPosition(141, 218) self.compLabel4.adjustSizeToText() # self.compLabel3.setItemRotation(0.5) self.scene.addItem(self.compLabel4) self.templeteCreateAction.setChecked(False) self.compLabel4.setSelected(True) elif self.templeteCreateAction.isChecked( ) and self.basePMCheck == False: font = QFont("Arial", 14) font.setItalic(True) self.compLabel5 = QgsComposerLabel(self.scene) self.compLabel5.setFont(font) self.compLabel5.setText("South China Sea") self.compLabel5.setBackgroundEnabled(False) self.compLabel5.setItemPosition(108, 86) self.compLabel5.adjustSizeToText() self.compLabel5.setItemRotation(-45) # mapitem = self.scene.composerMapItems() # mapitem[0].addItem(self.compLabel1) self.scene.addItem(self.compLabel5) self.compLabel6 = QgsComposerLabel(self.scene) self.compLabel6.setFont(font) self.compLabel6.setText("Sulu Sea") self.compLabel6.setBackgroundEnabled(False) self.compLabel6.setItemPosition(236, 38) self.compLabel6.adjustSizeToText() self.compLabel6.setItemRotation(45) self.scene.addItem(self.compLabel6) font.setItalic(False) self.compLabel7 = QgsComposerLabel(self.scene) self.compLabel7.setFont(font) self.compLabel7.setBackgroundEnabled(False) self.compLabel7.setText("Celebes Sea") self.compLabel7.setItemPosition(242, 112) self.compLabel7.adjustSizeToText() self.compLabel7.setItemRotation(-45) # self.compLabel3.setItemRotation(0.5) self.scene.addItem(self.compLabel7) # self.templeteCreateAction.setChecked(False) self.compLabel8 = QgsComposerLabel(self.scene) self.compLabel8.setFont(font) self.compLabel8.setBackgroundEnabled(False) self.compLabel8.setText("INDONESIA\n(Kalimantan)") self.compLabel8.setItemPosition(172, 148, 32, 16) # self.compLabel8.setHAlign(Qt.AlignHCenter) # self.compLabel8.setVAlign(Qt.AlignVCenter) # self.compLabel8.setFrameEnabled(False) # self.compLabel8.setItemPosition() # self.compLabel8.adjustSizeToText() # self.compLabl3.setItemRotation(0.5) self.scene.addItem(self.compLabel8) self.compLabel9 = QgsComposerLabel(self.scene) self.compLabel9.setFont(font) self.compLabel9.setBackgroundEnabled(False) self.compLabel9.setText("BRUNEI") self.compLabel9.setItemPosition(136, 83) self.compLabel9.adjustSizeToText() # self.compLabl3.setItemRotation(0.5) self.scene.addItem(self.compLabel9) self.templeteCreateAction.setChecked(False) pass def actionMapRefresh_triggered(self): self.view.setCurrentTool(QgsComposerView.AddRectangle) def setSelectionTool(self): self.view.deleteSelectedItems() font = QFont("Arial", 14) newLabelItem = QgsComposerLabel(self.scene) newLabelItem.setText("QGIS") newLabelItem.setFont(font) newLabelItem.setItemPosition(self.scenePoint.x(), self.scenePoint.y()) newLabelItem.adjustSizeToText() self.scene.addItem(newLabelItem) # selectItemPoint = self.scene.composerItemAt(self.scenePoint) newLabelItem.setSelected(True) self.groupBox.setEnabled(True) self.selectedLabelItem = newLabelItem # txt = self.selectedLabelItem.text() # textDoc = QTextDocument(txt) self.labelText.setPlainText(self.selectedLabelItem.text()) # self.scene.setSelectedItem(self.newLabelItem) self.view.setCurrentTool(QgsComposerView.Select) # self.selectedLabelItem = self.view.currentTool() self.textItemAction.setChecked(False) def selectedItemDisplay(self, item): if self.scene.plotStyle() != QgsComposition.Preview: self.scene.setPlotStyle(QgsComposition.Preview) self.mapItem.setPreviewMode(QgsComposerMap.Render) self.mapItem.updateCachedImage() item._class_ = QgsComposerLabel # selectedItems = self.scene.selectedComposerItems(True) # if isinstance(item, QgsComposerItem): # self.selectedLabelItem = item # if isinstance(item, QGraphicsRectItem): # self.selectedLabelItem = item if isinstance(item, QgsComposerLabel): self.selectedLabelItem = item self.groupBox.setEnabled(True) self.labelText.setPlainText(self.selectedLabelItem.text()) self.spinLabelRotation.setValue(self.selectedLabelItem.rotation()) else: self.groupBox.setEnabled(False) # print "debug" itemName = self.view.currentTool() if itemName == 5: item.setText("label") pass def deleteItem(self): self.view.deleteSelectedItems()
def __createLayout(self): " Creates the dialog layout " self.resize(640, 480) self.setSizeGripEnabled(True) vboxLayout = QVBoxLayout(self) # Revisions to compare compareGroupbox = QGroupBox(self) compareGroupbox.setTitle("Revisions to compare") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( compareGroupbox.sizePolicy().hasHeightForWidth()) compareGroupbox.setSizePolicy(sizePolicy) revisionLayout = QHBoxLayout(compareGroupbox) self.__lhsRevisionLabel = QLabel() self.__lhsRevisionLabel.setFrameStyle(QFrame.StyledPanel) self.__lhsResetButton = QToolButton() self.__lhsResetButton.setIcon(PixmapCache().getIcon(pluginHomeDir + 'svnclearrev.png')) self.__lhsResetButton.setFocusPolicy(Qt.NoFocus) self.__lhsResetButton.setEnabled(False) self.__lhsResetButton.setToolTip("Reset revision to compare") self.__lhsResetButton.clicked.connect(self.__onLHSReset) self.__rhsRevisionLabel = QLabel() self.__rhsRevisionLabel.setFrameStyle(QFrame.StyledPanel) self.__rhsResetButton = QToolButton() self.__rhsResetButton.setIcon(PixmapCache().getIcon(pluginHomeDir + 'svnclearrev.png')) self.__rhsResetButton.setFocusPolicy(Qt.NoFocus) self.__rhsResetButton.setEnabled(False) self.__rhsResetButton.setToolTip("Reset revision to compare") self.__rhsResetButton.clicked.connect(self.__onRHSReset) lhsLayout = QHBoxLayout() lhsLayout.addWidget(self.__lhsRevisionLabel) lhsLayout.addWidget(self.__lhsResetButton) rhsLayout = QHBoxLayout() rhsLayout.addWidget(self.__rhsRevisionLabel) rhsLayout.addWidget(self.__rhsResetButton) bothLayout = QVBoxLayout() bothLayout.addLayout(lhsLayout) bothLayout.addLayout(rhsLayout) revisionLayout.addLayout(bothLayout) self.__diffButton = QToolButton() self.__diffButton.setText("Diff") self.__diffButton.setFocusPolicy(Qt.NoFocus) self.__diffButton.setEnabled(False) self.__diffButton.clicked.connect(self.__onDiff) revisionLayout.addWidget(self.__diffButton) vboxLayout.addWidget(compareGroupbox) # Log table logHeaderFrame = QFrame() logHeaderFrame.setFrameStyle(QFrame.StyledPanel) logHeaderFrame.setAutoFillBackground(True) self.__setLightPalette(logHeaderFrame) logHeaderFrame.setFixedHeight(24) logHeaderLayout = QHBoxLayout() logHeaderLayout.setContentsMargins(3, 0, 0, 0) logHeaderLayout.addWidget(QLabel("Subversion log of " + self.__path)) logHeaderFrame.setLayout(logHeaderLayout) vboxLayout.addWidget(logHeaderFrame) self.__logView = QTreeWidget() self.__logView.setAlternatingRowColors(True) self.__logView.setRootIsDecorated(False) self.__logView.setItemsExpandable(False) self.__logView.setSortingEnabled(True) self.__logView.setItemDelegate(NoOutlineHeightDelegate(4)) self.__logViewHeader = QTreeWidgetItem( ["", "", "Revision", "Date", "Author", "Message"]) self.__logView.setHeaderItem(self.__logViewHeader) self.__logView.header().setSortIndicator(REVISION_COL, Qt.AscendingOrder) self.__logView.itemChanged.connect(self.__onLogViewChanged) vboxLayout.addWidget(self.__logView) # Diff part diffHeaderFrame = QFrame() diffHeaderFrame.setFrameStyle(QFrame.StyledPanel) diffHeaderFrame.setAutoFillBackground(True) self.__setLightPalette(diffHeaderFrame) diffHeaderFrame.setFixedHeight(24) diffLabel = QLabel("Diff") diffExpandingSpacer = QSpacerItem(10, 10, QSizePolicy.Expanding) self.__showHideDiffButton = QToolButton() self.__showHideDiffButton.setAutoRaise(True) self.__showHideDiffButton.setIcon(PixmapCache().getIcon('less.png')) self.__showHideDiffButton.setFixedSize(20, 20) self.__showHideDiffButton.setToolTip("Show diff") self.__showHideDiffButton.setFocusPolicy(Qt.NoFocus) self.__showHideDiffButton.clicked.connect(self.__onShowHideDiff) diffLayout = QHBoxLayout() diffLayout.setContentsMargins(3, 0, 0, 0) diffLayout.addWidget(diffLabel) diffLayout.addSpacerItem(diffExpandingSpacer) diffLayout.addWidget(self.__showHideDiffButton) diffHeaderFrame.setLayout(diffLayout) self.__diffViewer = DiffTabWidget() self.__diffViewer.setHTML(self.NODIFF) self.__diffViewer.setVisible(False) vboxLayout.addWidget(diffHeaderFrame) vboxLayout.addWidget(self.__diffViewer) # Buttons at the bottom buttonBox = QDialogButtonBox(self) buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Ok) buttonBox.button(QDialogButtonBox.Ok).setDefault(True) buttonBox.accepted.connect(self.close) vboxLayout.addWidget(buttonBox) return
class Main(plugin.Plugin): ' main class for plugin ' def initialize(self, *args, **kwargs): ' class init ' super(Main, self).initialize(*args, **kwargs) self.group0 = QGroupBox() self.group0.setTitle(' Options ') self.group0.setCheckable(True) self.group0.toggled.connect(lambda: self.group0.hide()) self.spin1, self.spin2, self.spin3 = QSpinBox(), QSpinBox(), QSpinBox() self.spin4, self.spin5, self.spin6 = QSpinBox(), QSpinBox(), QSpinBox() self.spin7, self.spin8, self.spin9 = QSpinBox(), QSpinBox(), QSpinBox() self.spin10, self.output = QSpinBox(), QTextEdit() self.reset = QPushButton(QIcon.fromTheme("face-smile"), 'Reset Options') self.reset.clicked.connect(self.reset_options) self.reset_options() self.output.setReadOnly(True) vboxg3 = QVBoxLayout(self.group0) for each_widget in (QLabel('<b>Max Attributes Per Class:'), self.spin1, QLabel('<b>Max Methods Per Class:'), self.spin2, QLabel('<b>Max Functions Per File:'), self.spin3, QLabel('<b>Max Classes Per File:'), self.spin4, QLabel('<b>Max Parameters Per Function:'), self.spin5, QLabel('<b>Max Lines Per Function:'), self.spin6, QLabel('<b>Max ControlStatements Per Function:'), self.spin7, QLabel('<b>Max Lines Per File:'), self.spin8, QLabel('<b>Max Indentation Levels:'), self.spin9, QLabel('<b>Max Tabs:'), self.spin10, self.reset): vboxg3.addWidget(each_widget) self.group1, self.auto = QGroupBox(), QComboBox() self.group1.setTitle(' Automation ') self.group1.setCheckable(True) self.group1.setToolTip('<font color="red"><b>WARNING:Advanced Setting!') self.group1.toggled.connect(lambda: self.group1.hide()) self.auto.addItems(['Never run automatically', 'Run when File Saved', 'Run when File Executed', 'Run when Tab Changed', 'Run when File Opened', 'Run before File Saved']) self.auto.currentIndexChanged.connect(self.on_auto_changed) QVBoxLayout(self.group1).addWidget(self.auto) self.button = QPushButton(' Analyze for Best Practice ') self.button.setMinimumSize(75, 50) self.button.clicked.connect(self.run) glow = QGraphicsDropShadowEffect(self) glow.setOffset(0) glow.setBlurRadius(99) glow.setColor(QColor(99, 255, 255)) self.button.setGraphicsEffect(glow) class TransientWidget(QWidget): ' persistant widget thingy ' def __init__(self, widget_list): ' init sub class ' super(TransientWidget, self).__init__() vbox = QVBoxLayout(self) for each_widget in widget_list: vbox.addWidget(each_widget) tw = TransientWidget((QLabel('<i>Best Practice analyzer'), self.group0, self.group1, QLabel('<b>Best Practice Errors:'), self.output, self.button)) self.scrollable, self.dock = QScrollArea(), QDockWidget() self.scrollable.setWidgetResizable(True) self.scrollable.setWidget(tw) self.dock.setWindowTitle(__doc__) self.dock.setStyleSheet('QDockWidget::title{text-align: center;}') self.dock.setWidget(self.scrollable) ExplorerContainer().addTab(self.dock, "Check") QPushButton(QIcon.fromTheme("help-about"), 'About', self.dock ).clicked.connect(lambda: QMessageBox.information(self.dock, __doc__, HELPMSG)) def run(self): ' run the actions ' global MAXVAL self.output.clear() self.button.setDisabled(True) maxvalues = {'maxAttributesPerClass': int(self.spin1.value()), 'maxFunctionsPerClass': int(self.spin2.value()), 'maxFunctionsPerFile': int(self.spin3.value()), 'maxClassesPerFile': int(self.spin4.value()), 'maxParametersPerFunction': int(self.spin5.value()), 'maxLinesPerFunction': int(self.spin6.value()), 'maxControlStatementsPerFunction': int(self.spin7.value()), 'maxLinesPerFile': int(self.spin8.value()), 'maxIndentationLevel': int(self.spin9.value()), 'maxTabs': int(self.spin10.value())} MAXVAL = maxvalues self.output.append(SimplePythonChecker().analyze(str( self.locator.get_service("editor").get_opened_documents()[ self.locator.get_service("editor").get_tab_manager().currentIndex() ]), maxvalues)) self.output.setFocus() self.button.setEnabled(True) def on_auto_changed(self): ' automation connects ' if self.auto.currentIndex() is 1: self.locator.get_service('editor').fileSaved.connect(lambda: self.run()) QMessageBox.information(self.dock, __doc__, '<b>Now Actions will Run Automatically when any File is Saved !') elif self.auto.currentIndex() is 2: self.locator.get_service('editor').fileExecuted.connect(lambda: self.run()) QMessageBox.information(self.dock, __doc__, '<b>Now Actions will Run Automatically when any File is Executed !') elif self.auto.currentIndex() is 3: self.locator.get_service('editor').currentTabChanged.connect(lambda: self.run()) QMessageBox.information(self.dock, __doc__, '<b>Now Actions will Run Automatically when current Tab is Changed') elif self.auto.currentIndex() is 4: self.locator.get_service('editor').fileOpened.connect(lambda: self.run()) QMessageBox.information(self.dock, __doc__, '<b>Now Actions will Run Automatically when any File is Opened !') elif self.auto.currentIndex() is 5: self.locator.get_service('editor').beforeFileSaved.connect(lambda: self.run()) QMessageBox.information(self.dock, __doc__, '<b>Now Actions will Run Automatically before any File is Saved !') self.group1.setDisabled(True) def reset_options(self): ' reset the options ' self.spin1.setRange(1, 99) self.spin2.setRange(1, 99) self.spin3.setRange(1, 99) self.spin4.setRange(1, 99) self.spin5.setRange(1, 9) self.spin6.setRange(1, 999) self.spin7.setRange(1, 99) self.spin8.setRange(1, 9999) self.spin9.setRange(1, 9) self.spin10.setRange(1, 9) self.spin1.setValue(20) self.spin2.setValue(20) self.spin3.setValue(20) self.spin4.setValue(5) self.spin5.setValue(5) self.spin6.setValue(100) self.spin7.setValue(20) self.spin8.setValue(999) self.spin9.setValue(5) self.spin10.setValue(5)
class LeadSheet(VocalPart, _base.ChordNames): @staticmethod def title(_=_base.translate): return _("Lead sheet") def createWidgets(self, layout): self.label = QLabel(wordWrap=True) self.chords = QGroupBox(checkable=True, checked=True) layout.addWidget(self.label) layout.addWidget(self.chords) box = QVBoxLayout() self.chords.setLayout(box) _base.ChordNames.createWidgets(self, box) self.accomp = QCheckBox() layout.addWidget(self.accomp) VocalPart.createWidgets(self, layout) def translateWidgets(self): VocalPart.translateWidgets(self) _base.ChordNames.translateWidgets(self) self.label.setText('<i>{0}</i>'.format(_( "The Lead Sheet provides a staff with chord names above " "and lyrics below it. A second staff is optional."))) self.chords.setTitle(_("Chord names")) self.accomp.setText(_("Add accompaniment staff")) self.accomp.setToolTip(_( "Adds an accompaniment staff and also puts an accompaniment " "voice in the upper staff.")) def build(self, data, builder): """Create chord names, song and lyrics. Optionally a second staff with a piano accompaniment. """ if self.chords.isChecked(): _base.ChordNames.build(self, data, builder) if self.accomp.isChecked(): p = ly.dom.ChoirStaff() #TODO: instrument names ? #TODO: different midi instrument for voice and accompaniment ? s = ly.dom.Sim(p) mel = ly.dom.Sim(ly.dom.Staff(parent=s)) v1 = ly.dom.Voice(parent=mel) s1 = ly.dom.Seq(v1) ly.dom.Text('\\voiceOne', s1) a = data.assignMusic('melody', 1) ly.dom.Identifier(a.name, s1) s2 = ly.dom.Seq(ly.dom.Voice(parent=mel)) ly.dom.Text('\\voiceTwo', s2) a = data.assignMusic('accRight', 0) ly.dom.Identifier(a.name, s2) acc = ly.dom.Seq(ly.dom.Staff(parent=s)) ly.dom.Clef('bass', acc) a = data.assignMusic('accLeft', -1) ly.dom.Identifier(a.name, acc) if self.ambitus.isChecked(): # We can't use \addlyrics when the voice has a \with {} # section, because it creates a nested Voice context. # So if the ambitus engraver should be added to the Voice, # we don't use \addlyrics but create a new Lyrics context. # So in that case we don't use addStanzas, but insert the # Lyrics contexts manually inside our ChoirStaff. v1.cid = ly.dom.Reference('melody') ly.dom.Line('\\consists "Ambitus_engraver"', v1.getWith()) count = self.stanzas.value() # number of stanzas if count == 1: l = ly.dom.Lyrics() s.insert_before(acc.parent(), l) a = self.assignLyrics(data, 'verse') ly.dom.Identifier(a.name, ly.dom.LyricsTo(v1.cid, l)) else: for i in range(count): l = ly.dom.Lyrics() s.insert_before(acc.parent(), l) a = self.assignLyrics(data, 'verse', i + 1) ly.dom.Identifier(a.name, ly.dom.LyricsTo(v1.cid, l)) else: self.addStanzas(data, v1) else: a = data.assignMusic('melody', 1) p = ly.dom.Staff() ly.dom.Identifier(a.name, ly.dom.Seq(p)) self.addStanzas(data, p) if self.ambitus.isChecked(): ly.dom.Line('\\consists "Ambitus_engraver"', p.getWith()) data.nodes.append(p)