def build_menu(self, position, structure): if isinstance(structure, list): for item in structure: self.build_menu(position, item) elif structure["type"] is QAction: action = QAction(structure["name"], self) if "shortcut" in structure: action.setShortcut(structure["shortcut"]) if "enabled" in structure and not structure["enabled"]: action.setDisabled(True) if "internal_name" in structure: setattr(self, structure["internal_name"], action) if hasattr(self, structure["internal_name"] + "_clicked"): action.triggered.connect( getattr(self, structure["internal_name"] + "_clicked")) position.addAction(action) elif structure["type"] is QMenu: menu = QMenu(structure["name"], self) position.addMenu(menu) for item in structure["contents"]: self.build_menu(menu, item)
class GoToDefinitionMode(Mode, QObject): """ Goes to the assignments (using jedi.Script.goto_assignments). If there are more than one assignments, an input dialog is used to ask the user to choose the desired assignment. This mode will emit :attr:`pyqode.python.GoToAssignmentsMode.outOfDocument` if the definition can not be reached in the current document. IDEs will typically open a new editor tab and go to the definition. """ IDENTIFIER = "gotoAssignmentsMode" DESCRIPTION = "Move the text cursor to the symbol assignments/definitions" def __init__(self): Mode.__init__(self) QObject.__init__(self) self._pending = False self.aGotToDef = QAction("Go to assignments", self) self.aGotToDef.setShortcut("F2") self.aGotToDef.triggered.connect(self.requestGoTo) def _onInstall(self, editor): Mode._onInstall(self, editor) def _onStateChanged(self, state): if state: assert hasattr(self.editor, "wordClickMode") self.editor.wordClickMode.wordClicked.connect(self.requestGoTo) self.sep = self.editor.addSeparator() self.editor.addAction(self.aGotToDef) if hasattr(self.editor, "codeCompletionMode"): self.editor.codeCompletionMode.preLoadStarted.connect(self._onPreloadStarted) self.editor.codeCompletionMode.preLoadCompleted.connect(self._onPreloadCompleted) else: self.editor.wordClickMode.wordClicked.disconnect(self.requestGoTo) self.editor.removeAction(self.aGotToDef) self.editor.removeAction(self.sep) if hasattr(self.editor, "codeCompletionMode"): self.editor.codeCompletionMode.preLoadStarted.disconnect(self._onPreloadStarted) self.editor.codeCompletionMode.preLoadCompleted.disconnect(self._onPreloadCompleted) def _onPreloadStarted(self): self.aGotToDef.setDisabled(True) def _onPreloadCompleted(self): self.aGotToDef.setEnabled(True) def requestGoTo(self, tc=None): """ Request a go to assignment. :param tc: Text cursor which contains the text that we must look for its assignment. Can be None to go to the text that is under the text cursor. :type tc: QtGui.QTextCursor """ if not tc: tc = self.editor.selectWordUnderCursor() symbol = tc.selectedText() analyser = getattr(self.editor, "analyserMode") if analyser: node = analyser.root_node.find(symbol) if node: self._definition = node QTimer.singleShot(100, self._goToDefinition) def _goToDefinition(self): line = self._definition.line col = self._definition.column self.editor.gotoLine(line, move=True, column=col) def _makeUnique(self, seq): """ Not performant but works. """ # order preserving checked = [] for e in seq: present = False for c in checked: if str(c) == str(e): present = True break if not present: checked.append(e) return checked
class Tool(QToolBar): def __init__(self,parent): QToolBar.__init__(self,parent) self.parent = parent self.action_NewProject = QAction(Icons.newprj, 'Project', self) self.action_NewProject.triggered.connect(self.parent.treeWidget.newProject) self.action_NewProject.setToolTip("Create a New Project") self.action_Open = QAction(Icons.open, 'Open', self) self.action_Open.triggered.connect(self.parent.fileOpen) self.action_Open.setToolTip("Open File") self.action_Save = QAction(Icons.save, 'Save', self) self.action_Save.setShortcut('Ctrl+S') self.action_Save.triggered.connect(self.parent.fileSave) self.action_Save.setToolTip("Save Current File") self.action_SaveAll = QAction(Icons.saveall, 'SaveAll', self) self.action_SaveAll.setShortcut('Ctrl+A') self.action_SaveAll.triggered.connect(self.parent.fileSaveAll) self.action_SaveAll.setToolTip("Save All Files") self.action_Build = QAction(Icons.thread_view, 'Build', self) self.action_Build.setShortcut('Ctrl+B') self.action_Build.triggered.connect(self.parent.build_project) self.action_Debug = QAction(Icons.debug_exec, 'Debug', self) self.action_Refresh = QAction(Icons.refresh_tab, 'Refresh', self) self.action_Refresh.triggered.connect(self.parent.treeWidget.refreshCurrentProject) self.action_Run = QAction(Icons.run, 'Run', self) self.action_Run.setShortcut('Ctrl+R') self.action_Run.triggered.connect(self.parent.adb.run) self.action_RunFile = QAction(Icons.go, 'Cmd', self) self.action_RunFile.triggered.connect(self.parent.openCommand) self.parent.runButton.clicked.connect(self.parent.command.setCmdLine) self.action_Stop = QAction(Icons.stop, 'Stop', self) self.action_Stop.setShortcut('Ctrl+Q') self.action_Stop.triggered.connect(self.parent.adb.stop) self.action_Design = QAction(Icons.color_palette, 'Design', self) self.action_Design.triggered.connect(self.parent.design) self.action_Level = QAction(Icons.cmpC_pal, 'Level', self) self.action_Level.triggered.connect(self.parent.level) self.action_Todo = QAction(Icons.task_set, 'Todo', self) self.action_Todo.triggered.connect(self.parent.todo) self.action_Help = QAction(Icons.toc_open, 'Help', self) self.action_Help.triggered.connect(self.parent.help) self.action_Full = QAction(Icons.fullscreen, 'Full', self) self.action_Full.triggered.connect(self.parent.full) self.action_Stop.setDisabled(True) self.setToolLabel() self.setAllowedAreas(Qt.AllToolBarAreas) #self.setFixedHeight(40) #self.setIconSize(QSize(config.iconSize(),config.iconSize())) ''' Adding all Actions ''' self.addAction(self.action_NewProject) self.addAction(self.action_Open) self.addAction(self.action_Save) self.addAction(self.action_SaveAll) #self.addAction(self.action_Refresh) self.addSeparator() self.addAction(self.action_Build) self.addAction(self.action_Run) #self.addAction(self.action_RunFile) self.addAction(self.action_Stop) self.addAction(self.action_Debug) self.addSeparator() self.addAction(self.action_Design) self.addAction(self.action_Level) self.addAction(self.action_Todo) self.initOptionsMenu() self.addSeparator() self.initStyleMenu() self.initLexerMenu() self.initApiMenu() #self.addAction(self.action_Help) #self.addAction(self.action_Full) self.addSeparator() self.initModeMenu() def colorChange(self, text, color): #print "colorChange ",text,color editStyle = config.readStyle() editStyle[text] = color config.writeStyle(editStyle) for i in range(len(self.parent.files)): self.parent.tabWidget.widget(i).setEditorStyle() def setColors(self,action): print action.text() def changeAll(self): self.colorChange("base", "#ffffff") def setIcon(self,val): config.setIconSize(val) self.setIconSize(QSize(val,val)) def setToolLabel(self): if (config.toolLabel()): self.setToolButtonStyle(Qt.ToolButtonIconOnly) self.setIconSize(QSize(24,24)) else: self.setIconSize(QSize(16,16)) self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) '''Important for multiple callbacks in for loop''' def make_callback(self, text): return lambda:self.colorChange(text) ''' Options Menu ''' def initOptionsMenu(self): men = QMenu() #Threshold Slider self.threshSlider = QSlider() self.threshSlider.setTickPosition(QSlider.TicksLeft) self.threshSlider.setOrientation(Qt.Horizontal) self.threshSlider.setValue(config.thresh()) self.threshSlider.setMinimum(0) self.threshSlider.setMaximum(5) self.threshSlider.valueChanged.connect(self.parent.setThreshold) self.threshSliderAction = QWidgetAction(men) self.threshSliderAction.setDefaultWidget(self.threshSlider) #TabsWidth Slider self.tabsSlider = QSlider() self.tabsSlider.setTickPosition(QSlider.TicksLeft) self.tabsSlider.setOrientation(Qt.Horizontal) self.tabsSlider.setValue(config.tabwidth()) self.tabsSlider.setMinimum(0) self.tabsSlider.setMaximum(8) self.tabsSlider.valueChanged.connect(self.parent.setTabWidth) self.tabsSliderAction = QWidgetAction(men) self.tabsSliderAction.setDefaultWidget(self.tabsSlider) #iconSize Slider self.iconSlider = QSlider() self.iconSlider.setTickPosition(QSlider.TicksLeft) self.iconSlider.setOrientation(Qt.Horizontal) self.iconSlider.setValue(config.iconSize()) self.iconSlider.setMinimum(16) self.iconSlider.setMaximum(32) self.iconSlider.setSingleStep(2) self.iconSlider.valueChanged.connect(self.setIcon) self.iconSliderAction = QWidgetAction(men) self.iconSliderAction.setDefaultWidget(self.iconSlider) '''Font Button''' self.fontCombo = QFontComboBox() self.fontCombo.currentFontChanged.connect(self.parent.setFont) self.fontCombo.setCurrentFont(QFont(config.fontName())) self.fontComboMenu = QWidgetAction(men) self.fontComboMenu.setDefaultWidget(self.fontCombo) '''Font Size''' self.fontSizeCombo = QComboBox() for size in range(1,40): self.fontSizeCombo.addItem(str(size)) self.fontSizeCombo.setCurrentIndex(config.fontSize()) self.fontSizeCombo.currentIndexChanged.connect(self.parent.setFontSize) self.fontSizeComboMenu = QWidgetAction(men) self.fontSizeComboMenu.setDefaultWidget(self.fontSizeCombo) action_Android = QAction(Icons.android,'Android', self) action_Android.triggered.connect(self.parent.android) action_Ant = QAction(Icons.ant_view,'Ant', self) action_Ant.triggered.connect(self.parent.antt) action_Squirrel = QAction(Icons.nut,'Squirrel', self) action_Squirrel.triggered.connect(self.parent.squirrel) action_Ios1 = QAction(Icons.ios,'iOS', self) action_Update = QAction(Icons.update,"Update",self) action_Update.triggered.connect(self.parent.update) action_explorer = QAction("Explorer",self) action_explorer.triggered.connect(self.parent.exp) action_explorer.setCheckable(True) action_explorer.setChecked(True) action_console = QAction("Console",self) action_console.triggered.connect(self.parent.cmd) action_console.setCheckable(True) action_console.setChecked(False) #action_designer = QAction("Designer",self) #action_designer.triggered.connect(self.parent.design) action_Indentation = QAction("Indentation Guides",self) action_Indentation.triggered.connect(self.parent.setIndent) action_Indentation.setCheckable(True) action_Indentation.setChecked(config.indent()) action_WhiteSpace = QAction("WhiteSpace",self) action_WhiteSpace.triggered.connect(self.parent.setWhiteSpace) action_WhiteSpace.setCheckable(True) action_WhiteSpace.setChecked(config.whiteSpace()) action_EndLine = QAction("End of Lines",self) action_EndLine.triggered.connect(self.parent.setEndLine) action_EndLine.setCheckable(True) action_Margin = QAction("Line Numbers",self) action_Margin.triggered.connect(self.parent.setMargin) action_Margin.setCheckable(True) action_Margin.setChecked(config.margin()) action_ToolLabel = QAction("Tool Labels",self) action_ToolLabel.triggered.connect(self.setToolLabel) action_ToolLabel.setCheckable(True) #action_ToolLabel.setChecked(config.toolLabel()) '''Encoding''' encodingGroup = QActionGroup(self) encodingGroup.setExclusive(True) action_Ascii = QAction("Ascii",encodingGroup) action_Ascii.setCheckable(True) action_Unicode = QAction("Unicode",encodingGroup) action_Unicode.setCheckable(False) encodingGroup.addAction(action_Ascii) encodingGroup.addAction(action_Unicode) encodingGroup.selected.connect(self.parent.setEncoding) if(config.encoding() == Encoding.ASCII): action_Ascii.setChecked(True) else: action_Unicode.setChecked(True) men.addAction(action_Update) men.addAction(self.action_Help) men.addAction(self.action_Full) men.addSeparator() men.addAction(action_Android) men.addAction(action_Ant) men.addAction(action_Squirrel) men.addAction(action_Ios1) men.addSeparator() men.addAction(action_explorer) men.addAction(action_console) #men.addAction(action_designer) men.addSeparator() men.addAction(action_Indentation) men.addAction(action_WhiteSpace) men.addAction(action_EndLine) men.addAction(action_Margin) men.addAction(action_ToolLabel) men.addSeparator() men.addActions(encodingGroup.actions()) men.addSeparator() head_font = QLabel("Font---------------------") fnt = head_font.font() fnt.setBold(True) head_font.setFont(fnt) head_fontWidgetAction = QWidgetAction(men) head_fontWidgetAction.setDefaultWidget(head_font) men.addAction(head_fontWidgetAction) men.addAction(self.fontComboMenu) men.addAction(self.fontSizeComboMenu) men.addSeparator() men.addAction(QAction("TabWidth",self)) men.addAction(self.tabsSliderAction) men.addSeparator() men.addAction(QAction("Threshold",self)) men.addAction(self.threshSliderAction) #men.addAction(QAction("Icon Size",self)) #men.addAction(self.iconSliderAction) self.action_Options = QAction(Icons.emblem_system, 'Options', self) self.action_Options.setMenu(men) self.addAction(self.action_Options) ''' Mode Menu ''' def initModeMenu(self): self.modeGroup = QActionGroup(self) self.modeGroup.setExclusive(True) self.modeGroup.selected.connect(self.parent.setMode) self.action_Squirrel = QAction(Icons.nut, 'Squ', self.modeGroup) self.action_Squirrel.setCheckable(True) self.action_Emo = QAction(Icons.emo, 'Emo', self.modeGroup) self.action_Emo.setCheckable(True) self.action_And = QAction(Icons.android, 'Android', self.modeGroup) self.action_And.setCheckable(True) self.action_Ios = QAction(Icons.ios, 'ios', self.modeGroup) self.action_Ios.setCheckable(True) self.modeGroup.addAction(self.action_Squirrel) self.modeGroup.addAction(self.action_Emo) self.modeGroup.addAction(self.action_And) self.modeGroup.addAction(self.action_Ios) self.addActions(self.modeGroup.actions()) if(config.mode() == 0): self.action_Squirrel.setChecked(True) self.action_Build.setEnabled(False) self.action_Run.setEnabled(False) elif(config.mode() == 1): self.action_Emo.setChecked(True) self.action_Build.setEnabled(True) self.action_Run.setEnabled(True) elif(config.mode() == 2): self.action_And.setChecked(True) self.action_Build.setEnabled(True) self.action_Run.setEnabled(True) elif(config.mode() == 3): self.action_Ios.setChecked(True) self.action_Build.setEnabled(False) self.action_Run.setEnabled(False) ''' Style Menu ''' def initStyleMenu(self): editStyle = config.readStyle() self.action_Style = QAction(Icons.style, 'Style', self) men = QMenu(self) men1 = QMenu() self.base = StyleWidget(self,"base",editStyle["base"]) self.back = StyleWidget(self,"back",editStyle["back"]) self.caret = StyleWidget(self,"caret",editStyle["caret"]) self.margin = StyleWidget(self,"margin",editStyle["margin"]) self.marker = StyleWidget(self,"marker",editStyle["marker"]) self.comment = StyleWidget(self,"comment",editStyle["comment"]) self.number = StyleWidget(self,"number",editStyle["number"]) self.keyword = StyleWidget(self,"keyword",editStyle["keyword"]) self.string = StyleWidget(self,"string",editStyle["string"]) self.operator = StyleWidget(self,"operator",editStyle["operator"]) self.connect(self.base, SIGNAL("colorChange"),self.colorChange) self.connect(self.back, SIGNAL("colorChange"),self.colorChange) self.connect(self.caret, SIGNAL("colorChange"),self.colorChange) self.connect(self.margin, SIGNAL("colorChange"),self.colorChange) self.connect(self.marker, SIGNAL("colorChange"),self.colorChange) self.connect(self.comment, SIGNAL("colorChange"),self.colorChange) self.connect(self.number, SIGNAL("colorChange"),self.colorChange) self.connect(self.keyword, SIGNAL("colorChange"),self.colorChange) self.connect(self.string, SIGNAL("colorChange"),self.colorChange) self.connect(self.operator, SIGNAL("colorChange"),self.colorChange) self.baseMenu = QWidgetAction(men) self.baseMenu.setDefaultWidget(self.base) self.backMenu = QWidgetAction(men) self.backMenu.setDefaultWidget(self.back) self.caretMenu = QWidgetAction(men) self.caretMenu.setDefaultWidget(self.caret) self.marginMenu = QWidgetAction(men) self.marginMenu.setDefaultWidget(self.margin) self.markerMenu = QWidgetAction(men) self.markerMenu.setDefaultWidget(self.marker) self.commentMenu = QWidgetAction(men) self.commentMenu.setDefaultWidget(self.comment) self.numberMenu = QWidgetAction(men) self.numberMenu.setDefaultWidget(self.number) self.keywordMenu = QWidgetAction(men) self.keywordMenu.setDefaultWidget(self.keyword) self.stringMenu = QWidgetAction(men) self.stringMenu.setDefaultWidget(self.string) self.operatorMenu = QWidgetAction(men) self.operatorMenu.setDefaultWidget(self.operator) self.styleGroup = QActionGroup(self) self.styleGroup.setExclusive(True) self.styleGroup.selected.connect(self.setColors) self.style1 = QAction("All Hallow's Eve",self.styleGroup) self.style1.setCheckable(True) self.style2 = QAction("Amy",self.styleGroup) self.style2.setCheckable(True) self.style3 = QAction("Aptana Studio",self.styleGroup) self.style3.setCheckable(True) self.style4 = QAction("Bespin",self.styleGroup) self.style4.setCheckable(True) self.style5 = QAction("Blackboard",self.styleGroup) self.style5.setCheckable(True) self.style6 = QAction("Choco",self.styleGroup) self.style6.setCheckable(True) self.style7 = QAction("Cobalt",self.styleGroup) self.style7.setCheckable(True) self.style8 = QAction("Dawn",self.styleGroup) self.style8.setCheckable(True) self.style9 = QAction("Eclipse",self.styleGroup) self.style9.setCheckable(True) self.styleGroup.addAction(self.style1) self.styleGroup.addAction(self.style2) self.styleGroup.addAction(self.style3) self.styleGroup.addAction(self.style4) self.styleGroup.addAction(self.style5) self.styleGroup.addAction(self.style6) self.styleGroup.addAction(self.style7) self.styleGroup.addAction(self.style8) self.styleGroup.addAction(self.style9) men1.addAction(self.baseMenu) men1.addAction(self.backMenu) men1.addAction(self.caretMenu) men1.addAction(self.marginMenu) men1.addAction(self.markerMenu) men1.addAction(self.commentMenu) men1.addAction(self.numberMenu) men1.addAction(self.keywordMenu) men1.addAction(self.stringMenu) men1.addAction(self.operatorMenu) men1.addSeparator() men2 = QMenu(self) men2.setTitle("Styles") men2.addActions(self.styleGroup.actions()) men1.addMenu(men2) self.action_Style.setMenu(men1) self.addAction(self.action_Style) ''' Lexer Menu''' def make_action_lex(self, text): action = QAction(text, self.lexGroup) action.setCheckable(True) return action def initLexerMenu(self): self.action_Lexer = QAction(Icons.file_obj, 'Lexer', self) men = QMenu() self.lexGroup = QActionGroup(self) self.lexGroup.setExclusive(True) self.lexGroup.selected.connect(self.parent.setLexer) #langs = [i for i in dir(Qsci) if i.startswith('QsciLexer')] langs = ['Bash', 'Batch', 'CMake', 'CPP', 'CSS', 'C#','HTML','Java', 'JavaScript', 'Lua', 'Makefile','Python', 'SQL', 'XML', 'YAML'] for l in langs: act = self.make_action_lex(l) self.lexGroup.addAction(act) if(langs.index(l) == 8): #For javascript act.setChecked(True) #print l[9:] # we don't need to print "QsciLexer" before each name men.addActions(self.lexGroup.actions()) self.action_Lexer.setMenu(men) self.addAction(self.action_Lexer) ''' Api Menu ''' def make_action_api(self, text): action = QAction(text, self.apiGroup) action.setCheckable(True) return action def initApiMenu(self): self.action_Api = QAction(Icons.lib, 'Api', self) men = QMenu() self.apiGroup = QActionGroup(self) self.apiGroup.setExclusive(True) self.apiGroup.selected.connect(self.parent.setApi) list = oslistdir(apiDir) apis = [] if(list != None): for i in list: if i.endswith("api"): apis.append(i.replace(".api", "")) if(apis != None): for i in apis: act = self.make_action_api(i) self.apiGroup.addAction(act) if(i == "emo"): #For emo act.setChecked(True) men.addActions(self.apiGroup.actions()) self.action_Api.setMenu(men) self.addAction(self.action_Api)
class GeometryCopier: def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins/geometry_copier" # initialize locale locale_path = "" if sip.getapi("QVariant") > 1: # new API style locale = QSettings().value("locale/userLocale")[0:2] else: # the old API style locale = QSettings().value("locale/userLocale").toString()[0:2] if QFileInfo(self.plugin_dir).exists(): locale_path = self.plugin_dir + "/i18n/geometry_copier_" + locale + ".qm" if QFileInfo(locale_path).exists(): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) self._geom_buffer = None def initGui(self): # Create action that will start plugin configuration self.copy_action = QAction( QIcon(':/plugins/geometrycopier/mActionEditCopyGeom.png'), self.tr(u"Copy geometry"), self.iface.mainWindow()) self.insert_action = QAction( QIcon(':/plugins/geometrycopier/mActionEditPasteGeom.png'), self.tr(u"Insert geometry"), self.iface.mainWindow()) # connect the action to the run method QObject.connect(self.copy_action, SIGNAL("triggered()"), self.copy_geometry) QObject.connect(self.insert_action, SIGNAL("triggered()"), self.insert_geometry) # Add hotkeys self.iface.registerMainWindowAction(self.copy_action, "F7") self.iface.registerMainWindowAction(self.insert_action, "F8") # Add toolbar button and menu item self.iface.digitizeToolBar().addAction(self.copy_action) self.iface.digitizeToolBar().addAction(self.insert_action) self.iface.addPluginToVectorMenu(u"&Geometry copier", self.copy_action) self.iface.addPluginToVectorMenu(u"&Geometry copier", self.insert_action) # Add global signals QObject.connect(self.iface, SIGNAL('currentLayerChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.connect(self.iface.mapCanvas(), SIGNAL('selectionChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.connect(self.iface.actionToggleEditing(), SIGNAL('triggered()'), self.check_buttons_state) #iface.actionToggleEditing().triggered # init state self.check_buttons_state(None) def unload(self): self.iface.unregisterMainWindowAction(self.copy_action) self.iface.unregisterMainWindowAction(self.insert_action) self.iface.removePluginVectorMenu(u"&Geometry copier", self.copy_action) self.iface.removePluginVectorMenu(u"&Geometry copier", self.insert_action) self.iface.digitizeToolBar().removeAction(self.copy_action) self.iface.digitizeToolBar().removeAction(self.insert_action) QObject.disconnect(self.iface, SIGNAL('currentLayerChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.disconnect(self.iface.mapCanvas(), SIGNAL('selectionChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.disconnect(self.iface.actionToggleEditing(), SIGNAL('triggered()'), self.check_buttons_state) def check_buttons_state(self, layer=None): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer): self.copy_action.setDisabled(True) self.insert_action.setDisabled(True) return sel_feat_count = layer.selectedFeatureCount() if sel_feat_count != 1: self.copy_action.setDisabled(True) self.insert_action.setDisabled(True) return self.copy_action.setEnabled(True) # copy button can be pressed! if not layer.isEditable() or not self._geom_buffer or self._geom_buffer.type() != layer.geometryType(): self.insert_action.setDisabled(True) return self.insert_action.setEnabled(True) # insert button can be pressed! (type geom??) def copy_geometry(self): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer): QMessageBox.information(None, self.tr('Geometry was not copied'), self.tr('Select any vector layer and feature!')) return sel_feat_count = layer.selectedFeatureCount() if sel_feat_count != 1: QMessageBox.information(None, self.tr('Geometry was not copied'), self.tr('Select one feature!')) return feature = layer.selectedFeatures()[0] self._geom_buffer = QgsGeometry(feature.geometry()) self.check_buttons_state() def insert_geometry(self): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer): QMessageBox.information(None, self.tr('Geometry can\'t be inserted'), self.tr('Select any vector layer and feature for inserting geom!')) return if not self._geom_buffer: QMessageBox.information(None, self.tr('Geometry can\'t be inserted'), self.tr('Buffer is empty!')) return if not layer.isEditable(): QMessageBox.critical(None, self.tr('Geometry can\'t be inserted'), self.tr('Layer is not editable!')) return if self._geom_buffer.type() != layer.geometryType(): # and layer.geometryType() != 2: QMessageBox.critical(None, self.tr('Geometry can\'t be inserted'), self.tr('Target layer has other geometry type!')) return sel_feat_count = layer.selectedFeatureCount() if sel_feat_count != 1: QMessageBox.critical(None, self.tr('Geometry can\'t be inserted'), self.tr('Select one feature for inserting geom!')) return feature = layer.selectedFeatures()[0] layer.changeGeometry(feature.id(), QgsGeometry(self._geom_buffer)) self.iface.mapCanvas().refresh() def tr(self, text): return QCoreApplication.translate('GeometryCopier', text)
class MainWindow(QMainWindow): """ class MainWindow for the gui """ def __init__(self, config, parent=None): """ Constructor for class MainWindow :rtype : object :param parent: @param config: iHike configuration """ QMainWindow.__init__(self) self.config = config self.setGeometry( self.config.settings['app_x'], self.config.settings['app_y'], self.config.settings['app_w'], self.config.settings['app_h'] ) self.setWindowTitle( self.config.settings['appname'] + ' - Version: ' + self.config.settings['appversion'] ) globalFont = QFont( self.config.settings['fontfamily'], self.config.settings['pointsize'] ) self.statusbar = self.statusBar() self.center() self.exit = QAction('Quit iHike', self) self.menuLoadFile = QAction('Load File...', self) self.menubar = QMenuBar(None) self.file = self.menubar.addMenu('&File') self.file.addAction(self.exit) self.file.addAction(self.menuLoadFile) self.setMenuBar(self.menubar) self.save = QAction(QIcon('rsc/icons/fileSave.png'), 'Save current page', self) self.save.setShortcut('Ctrl+S') self.save.setDisabled(True) self.search = QAction(QIcon('rsc/icons/magfit.png'), 'Search for', self) self.toolbar = self.addToolBar('Toolbar') self.toolbar.addAction(self.save) self.toolbar.addSeparator() self.toolbar.addAction(self.search) self.toolbar.setMaximumHeight(24) self.trackListView = TrackListView() self.trackListView.setAllowedAreas(Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea) self.addDockWidget(Qt.TopDockWidgetArea, self.trackListView) detailView = DetailView() detailView.setAllowedAreas( Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) self.addDockWidget(Qt.RightDockWidgetArea, detailView) self.mainWidget = QWidget(self) # self.mainWidget.setLayout(self.gridLayout) self.setCentralWidget(self.mainWidget) def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
def __init__(self, parent=None): " Initialize QWidget inside MyMainWindow " super(MyMainWindow, self).__init__(parent) QWidget.__init__(self) self.statusBar().showMessage(" " + __doc__) self.setStyleSheet("QStatusBar{color:grey;}") self.setWindowTitle(__doc__) self.setWindowIcon(QIcon.fromTheme("face-monkey")) self.setFont(QFont("Ubuntu Light", 10)) self.setMaximumSize(QDesktopWidget().screenGeometry().width(), QDesktopWidget().screenGeometry().height()) # directory auto completer self.completer = QCompleter(self) self.dirs = QDirModel(self) self.dirs.setFilter(QDir.AllEntries | QDir.NoDotAndDotDot) self.completer.setModel(self.dirs) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) # process self.process = QProcess(self) # self.process.finished.connect(self.on_process_finished) # self.process.error.connect(self.on_process_error) # Proxy support, by reading http_proxy os env variable proxy_url = QUrl(environ.get("http_proxy", "")) QNetworkProxy.setApplicationProxy( QNetworkProxy( QNetworkProxy.HttpProxy if str(proxy_url.scheme()).startswith("http") else QNetworkProxy.Socks5Proxy, proxy_url.host(), proxy_url.port(), proxy_url.userName(), proxy_url.password(), ) ) if "http_proxy" in environ else None print((" INFO: Proxy Auto-Config as " + str(proxy_url))) # basic widgets layouts and set up self.mainwidget = QTabWidget() self.mainwidget.setToolTip(__doc__) self.mainwidget.setMovable(True) self.mainwidget.setTabShape(QTabWidget.Triangular) self.mainwidget.setTabsClosable(True) self.mainwidget.setContextMenuPolicy(Qt.CustomContextMenu) self.mainwidget.tabCloseRequested.connect( lambda: self.mainwidget.setTabPosition(1) if self.mainwidget.tabPosition() == 0 else self.mainwidget.setTabPosition(0) ) self.setCentralWidget(self.mainwidget) self.dock1 = QDockWidget() self.dock2 = QDockWidget() self.dock3 = QDockWidget() for a in (self.dock1, self.dock2, self.dock3): a.setWindowModality(Qt.NonModal) a.setWindowOpacity(0.9) a.setWindowTitle(__doc__ if a.windowTitle() == "" else a.windowTitle()) a.setStyleSheet(" QDockWidget::title{text-align:center;}") a.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.mainwidget.addTab(a, QIcon.fromTheme("face-cool"), str(a.windowTitle()).strip().lower()) # Paleta de colores para pintar transparente self.palette().setBrush(QPalette.Base, Qt.transparent) self.setPalette(self.palette()) self.setAttribute(Qt.WA_OpaquePaintEvent, False) # toolbar and basic actions self.toolbar = QToolBar(self) self.toolbar.setIconSize(QSize(24, 24)) # spacer widget for left self.left_spacer = QWidget(self) self.left_spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # spacer widget for right self.right_spacer = QWidget(self) self.right_spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) qaqq = QAction(QIcon.fromTheme("application-exit"), "Quit", self) qaqq.setShortcut("Ctrl+Q") qaqq.triggered.connect(exit) qamin = QAction(QIcon.fromTheme("go-down"), "Minimize", self) qamin.triggered.connect(lambda: self.showMinimized()) qamax = QAction(QIcon.fromTheme("go-up"), "Maximize", self) qanor = QAction(QIcon.fromTheme("go-up"), "AutoCenter AutoResize", self) qanor.triggered.connect(self.center) qatim = QAction(QIcon.fromTheme("go-up"), "View Date and Time", self) qatim.triggered.connect(self.timedate) qabug = QAction(QIcon.fromTheme("help-about"), "Report a Problem", self) qabug.triggered.connect( lambda: qabug.setDisabled(True) if not call("xdg-open mailto:" + "*****@*****.**".decode("rot13"), shell=True) else " ERROR " ) qamax.triggered.connect(lambda: self.showMaximized()) qaqt = QAction(QIcon.fromTheme("help-about"), "About Qt", self) qaqt.triggered.connect(lambda: QMessageBox.aboutQt(self)) qaslf = QAction(QIcon.fromTheme("help-about"), "About Self", self) qaslf.triggered.connect( lambda: QMessageBox.about( self.mainwidget, __doc__, "".join( ( __doc__, linesep, "version ", __version__, ", (", __license__, "), by ", __author__, ", ( ", __email__, " )", linesep, ) ), ) ) qasrc = QAction(QIcon.fromTheme("applications-development"), "View Source Code", self) qasrc.triggered.connect(lambda: call("xdg-open " + __file__, shell=1)) qakb = QAction(QIcon.fromTheme("input-keyboard"), "Keyboard Shortcuts", self) qakb.triggered.connect( lambda: QMessageBox.information(self.mainwidget, "Keyboard Shortcuts", " Ctrl+Q = Quit ") ) qapic = QAction(QIcon.fromTheme("camera-photo"), "Take a Screenshot", self) qapic.triggered.connect( lambda: QPixmap.grabWindow(QApplication.desktop().winId()).save( QFileDialog.getSaveFileName( self.mainwidget, " Save Screenshot As ...", path.expanduser("~"), ";;(*.png) PNG", "png" ) ) ) qatb = QAction(QIcon.fromTheme("help-browser"), "Toggle ToolBar", self) qatb.triggered.connect(lambda: self.toolbar.hide() if self.toolbar.isVisible() is True else self.toolbar.show()) qati = QAction(QIcon.fromTheme("help-browser"), "Switch ToolBar Icon Size", self) qati.triggered.connect( lambda: self.toolbar.setIconSize(self.toolbar.iconSize() * 4) if self.toolbar.iconSize().width() * 4 == 24 else self.toolbar.setIconSize(self.toolbar.iconSize() / 4) ) qasb = QAction(QIcon.fromTheme("help-browser"), "Toggle Tabs Bar", self) qasb.triggered.connect( lambda: self.mainwidget.tabBar().hide() if self.mainwidget.tabBar().isVisible() is True else self.mainwidget.tabBar().show() ) qadoc = QAction(QIcon.fromTheme("help-browser"), "On-line Docs", self) qadoc.triggered.connect(lambda: open_new_tab(__url__)) qapy = QAction(QIcon.fromTheme("help-browser"), "About Python", self) qapy.triggered.connect(lambda: open_new_tab("http://python.org/about")) qali = QAction(QIcon.fromTheme("help-browser"), "Read Licence", self) qali.triggered.connect(lambda: open_new_tab(__full_licence__)) qacol = QAction(QIcon.fromTheme("preferences-system"), "Set GUI Colors", self) qacol.triggered.connect( lambda: self.setStyleSheet( """ * { background-color: %s } """ % QColorDialog.getColor().name() ) ) qatit = QAction(QIcon.fromTheme("preferences-system"), "Set the App Window Title", self) qatit.triggered.connect(self.seTitle) qafnt = QAction(QIcon.fromTheme("help-about"), "Set GUI Font", self) if KDE: font = QFont() qafnt.triggered.connect( lambda: self.setStyleSheet("*{font-family: %s}" % font.toString()) if KFontDialog.getFont(font)[0] == QDialog.Accepted else "" ) else: qafnt.triggered.connect( lambda: self.setStyleSheet("*{font-family: %s}" % QFontDialog.getFont()[0].toString()) ) self.toolbar.addWidget(self.left_spacer) self.toolbar.addSeparator() for b in ( qaqq, qamin, qanor, qamax, qasrc, qakb, qacol, qatim, qatb, qati, qasb, qatit, qafnt, qapic, qadoc, qali, qaslf, qaqt, qapy, qabug, ): self.toolbar.addAction(b) self.addToolBar(Qt.TopToolBarArea, self.toolbar) self.toolbar.addSeparator() self.toolbar.addWidget(self.right_spacer) def contextMenuRequested(point): " quick and dirty custom context menu " menu = QMenu() menu.addActions( ( qaqq, qamin, qanor, qamax, qasrc, qakb, qacol, qati, qasb, qatb, qatim, qatit, qafnt, qapic, qadoc, qali, qaslf, qaqt, qapy, qabug, ) ) menu.exec_(self.mapToGlobal(point)) self.mainwidget.customContextMenuRequested.connect(contextMenuRequested) def must_be_checked(widget_list): " widget tuple passed as argument should be checked as ON " for each_widget in widget_list: try: each_widget.setChecked(True) except: pass def must_have_tooltip(widget_list): " widget tuple passed as argument should have tooltips " for each_widget in widget_list: try: each_widget.setToolTip(each_widget.text()) except: each_widget.setToolTip(each_widget.currentText()) finally: each_widget.setCursor(QCursor(Qt.PointingHandCursor)) def must_autofillbackground(widget_list): " widget tuple passed as argument should have filled background " for each_widget in widget_list: try: each_widget.setAutoFillBackground(True) except: pass ####################################################################### self.group1 = QGroupBox() self.group1.setTitle(" Blender ") self.arch = QLabel("<center><b>" + architecture()[0]) self.ost = QLabel("<center><b>" + sys.platform) self.downf = QLineEdit(path.join(path.expanduser("~"), "blender")) self.downf.setCompleter(self.completer) self.borig = QPushButton(QIcon.fromTheme("folder-open"), "Open") self.borig.clicked.connect( lambda: self.downf.setText( path.join( str(QFileDialog.getExistingDirectory(self.mainwidget, "Open a Folder", path.expanduser("~"))), "blender", ) ) ) self.bugs = QPushButton(QIcon.fromTheme("help-faq"), "Report Bugs!") self.bugs.clicked.connect(lambda: open_new_tab("http://www.blender.org/development/report-a-bug")) self.go = QPushButton(QIcon.fromTheme("emblem-favorite"), "Run Blender") self.go.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.go.clicked.connect(self.run) vboxg1 = QVBoxLayout(self.group1) for each_widget in ( self.go, QLabel(""), QLabel('<h3 style="color:white;"> Download Folder Path: </h3>'), self.downf, self.borig, QLabel('<h3 style="color:white;"> Bugs: </h3>'), self.bugs, QLabel('<h3 style="color:white;"> OS: </h3>'), self.ost, QLabel('<h3 style="color:white;"> Architexture: </h3>'), self.arch, QLabel( """<i style="color:white;"> Warning: this builds arent as stable as releases, use at your own risk</i>""" ), ): vboxg1.addWidget(each_widget) self.group2 = QGroupBox() self.group2.setTitle("Options") self.nwfl = QCheckBox("Force opening with borders") self.smll = QCheckBox("Auto Center and Auto Resize the Window") self.lrgf = QCheckBox("Start with the console window open") self.case = QCheckBox("BGE: Run on 50 hertz without dropping frames") self.cnvt = QCheckBox("BGE: Use Vertex Arrays for rendering") self.blnk = QCheckBox("BGE: No Texture Mipmapping") self.spac = QCheckBox("BGE: Linear Texture Mipmap instead of Nearest") self.whit = QCheckBox("Turn Debugging ON") self.tabz = QCheckBox("Enable floating point exceptions") self.sprs = QCheckBox("Disable the crash handler") self.filn = QCheckBox("Enable debug messages from FFmpeg library") self.plac = QCheckBox("Enable debug messages for python") self.plac = QCheckBox("Enable debug messages for the event system") self.plac = QCheckBox("Enable debug messages for event handling") self.plac = QCheckBox("Enable debug messages for the window manager") self.tbs = QComboBox(self.group2) self.tbs.addItems(["0", "1", "2", "3"]) self.nice = QComboBox(self.group2) self.nice.addItems(["0", "1", "2", "3"]) 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("BLAH BLAH BLAH"), self.tbs, QLabel("BLAH BLAH BLAH"), self.nice, ): vboxg2.addWidget(each_widget) group3 = QGroupBox() group3.setTitle("Even More Options") self.plai = QCheckBox("Enable debug messages from libmv library") self.nocr = QCheckBox("Skip reading the startup.blend in the home dir") self.ridt = QCheckBox("Set BLENDER_SYSTEM_DATAFILES environment var") self.nocm = QCheckBox("Set BLENDER_SYSTEM_SCRIPTS environment var") self.rdif = QCheckBox("Set BLENDER_SYSTEM_PYTHON environment var") self.clip = QCheckBox("Disable joystick support") self.noti = QCheckBox("Disable GLSL shading") self.pret = QCheckBox("Force sound system to None") self.lolz = QCheckBox("Disable automatic python script execution") self.odif = QCheckBox("Run blender with an interactive console") self.plac = QCheckBox("Enable all debug messages, excludes libmv") self.plac = QCheckBox("Enable time profiling for background jobs") self.plac = QCheckBox("Do not use native pixel size for high res") self.wdth = QComboBox(group3) self.wdth.addItems(["OPENAL", "NULL", "SDL", "JACK"]) self.bcknd = QComboBox(group3) self.bcknd.addItems(["0", "5", "10", "15", "20"]) 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('<b style="color:white">Force sound system to specific device'), self.wdth, QLabel('<b style="color:white">CPU Priority'), self.bcknd, ): vboxg3.addWidget(each_widget) # dock 2 the waterfall scrollable = QScrollArea() scrollable.setWidget(QLabel("".join((urlopen("http://builder.blender.org/waterfall").readlines()[23:])))) self.dock2.setWidget(scrollable) # dock 3 the build status stats = QLabel( "<center>" + "".join((urlopen("http://builder.blender.org/one_line_per_build").readlines()[23:])).strip() + "</center>" ) self.dock3.setWidget(stats) # configure some widget settings must_be_checked((self.nwfl, self.smll, self.lrgf, self.clip, self.cnvt, self.plai, self.noti)) must_have_tooltip( ( self.plai, self.nocr, self.ridt, self.nocm, self.rdif, self.pret, self.clip, self.noti, self.lolz, self.odif, self.plac, self.wdth, self.bcknd, self.nwfl, self.smll, self.lrgf, self.case, self.cnvt, self.blnk, self.spac, self.whit, self.tabz, self.sprs, self.filn, self.tbs, self.nice, self.arch, self.ost, ) ) must_autofillbackground( ( self.plai, self.nocr, self.ridt, self.nocm, self.rdif, self.pret, self.clip, self.noti, self.lolz, self.odif, self.plac, self.wdth, self.bcknd, self.nwfl, self.smll, self.lrgf, self.case, self.cnvt, self.blnk, self.spac, self.whit, self.tabz, self.sprs, self.filn, self.tbs, self.nice, scrollable, stats, self.arch, self.ost, ) ) container = QWidget() hbox = QHBoxLayout(container) for each_widget in (self.group2, self.group1, group3): hbox.addWidget(each_widget) self.dock1.setWidget(container)
def __init__(self, parent=None): " Initialize QWidget inside MyMainWindow " super(MyMainWindow, self).__init__(parent) QWidget.__init__(self) self.statusBar().showMessage(" {}".format(__doc__)) self.setStyleSheet("QStatusBar{color:grey;}") self.setWindowTitle(__doc__) self.setWindowIcon(QIcon.fromTheme("face-monkey")) self.setFont(QFont("Ubuntu Light", 10)) self.setMaximumSize(QDesktopWidget().screenGeometry().width(), QDesktopWidget().screenGeometry().height()) # directory auto completer self.completer = QCompleter(self) self.dirs = QDirModel(self) self.dirs.setFilter(QDir.AllEntries | QDir.NoDotAndDotDot) self.completer.setModel(self.dirs) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) # Proxy support, by reading http_proxy os env variable proxy_url = QUrl(environ.get("http_proxy", "")) QNetworkProxy.setApplicationProxy( QNetworkProxy( QNetworkProxy.HttpProxy if str(proxy_url.scheme()).startswith("http") else QNetworkProxy.Socks5Proxy, proxy_url.host(), proxy_url.port(), proxy_url.userName(), proxy_url.password(), ) ) if "http_proxy" in environ else None print((" INFO: Proxy Auto-Config as " + str(proxy_url))) # basic widgets layouts and set up self.mainwidget = QTabWidget() self.mainwidget.setToolTip(__doc__) self.mainwidget.setContextMenuPolicy(Qt.CustomContextMenu) self.mainwidget.tabCloseRequested.connect(lambda: self.mainwidget.setTabPosition(randint(0, 3))) # if self.mainwidget.tabPosition() == 0 # else self.mainwidget.setTabPosition(0)) self.mainwidget.setStyleSheet("QTabBar{color:white;font-weight:bold;}") self.mainwidget.setTabBar(TabBar(self)) self.mainwidget.setMovable(True) self.mainwidget.setTabsClosable(True) self.mainwidget.setTabShape(QTabWidget.Triangular) self.setCentralWidget(self.mainwidget) self.dock1 = QDockWidget() self.dock2 = QDockWidget() self.dock3 = QDockWidget() for a in (self.dock1, self.dock2, self.dock3): a.setWindowModality(Qt.NonModal) a.setWindowOpacity(0.9) a.setWindowTitle(__doc__ if a.windowTitle() == "" else a.windowTitle()) a.setStyleSheet(" QDockWidget::title{text-align:center;}") self.mainwidget.addTab(a, QIcon.fromTheme("face-smile"), "Double Click Me") # Paleta de colores para pintar transparente self.palette().setBrush(QPalette.Base, Qt.transparent) self.setPalette(self.palette()) self.setAttribute(Qt.WA_OpaquePaintEvent, False) # toolbar and basic actions self.toolbar = QToolBar(self) self.toolbar.setIconSize(QSize(24, 24)) # spacer widget for left self.left_spacer = QWidget(self) self.left_spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # spacer widget for right self.right_spacer = QWidget(self) self.right_spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) qaqq = QAction(QIcon.fromTheme("application-exit"), "Quit", self) qaqq.setShortcut("Ctrl+Q") qaqq.triggered.connect(exit) qamin = QAction(QIcon.fromTheme("go-down"), "Minimize", self) qamin.triggered.connect(lambda: self.showMinimized()) qamax = QAction(QIcon.fromTheme("go-up"), "Maximize", self) qanor = QAction(QIcon.fromTheme("view-fullscreen"), "AutoCenter AutoResize", self) qanor.triggered.connect(self.center) qatim = QAction(QIcon.fromTheme("mail-signed-verified"), "View Date and Time", self) qatim.triggered.connect(self.timedate) qabug = QAction(QIcon.fromTheme("help-about"), "Report a Problem", self) qabug.triggered.connect( lambda: qabug.setDisabled(True) if not call("xdg-open mailto:" + "*****@*****.**".decode("rot13"), shell=True) else " ERROR " ) qamax.triggered.connect(lambda: self.showMaximized()) qaqt = QAction(QIcon.fromTheme("help-about"), "About Qt", self) qaqt.triggered.connect(lambda: QMessageBox.aboutQt(self)) qakde = QAction(QIcon.fromTheme("help-about"), "About KDE", self) if KDE: qakde.triggered.connect(KHelpMenu(self, "", False).aboutKDE) qaslf = QAction(QIcon.fromTheme("help-about"), "About Self", self) if KDE: qaslf.triggered.connect(KAboutApplicationDialog(aboutData, self).exec_) else: qaslf.triggered.connect( lambda: QMessageBox.about( self.mainwidget, __doc__, "".join( ( __doc__, linesep, "version ", __version__, ", (", __license__, "), by ", __author__, ", ( ", __email__, " )", linesep, ) ), ) ) qafnt = QAction(QIcon.fromTheme("tools-check-spelling"), "Set GUI Font", self) if KDE: font = QFont() qafnt.triggered.connect( lambda: self.setStyleSheet( "".join(("*{font-family:", str(font.toString()), "}")) if KFontDialog.getFont(font)[0] == QDialog.Accepted else "" ) ) else: qafnt.triggered.connect( lambda: self.setStyleSheet("".join(("*{font-family:", str(QFontDialog.getFont()[0].toString()), "}"))) ) qasrc = QAction(QIcon.fromTheme("applications-development"), "View Source Code", self) qasrc.triggered.connect(lambda: call("xdg-open {}".format(__file__), 1)) qakb = QAction(QIcon.fromTheme("input-keyboard"), "Keyboard Shortcuts", self) qakb.triggered.connect( lambda: QMessageBox.information(self.mainwidget, "Keyboard Shortcuts", " Ctrl+Q = Quit ") ) qapic = QAction(QIcon.fromTheme("camera-photo"), "Take a Screenshot", self) qapic.triggered.connect( lambda: QPixmap.grabWindow(QApplication.desktop().winId()).save( QFileDialog.getSaveFileName( self.mainwidget, " Save Screenshot As ...", path.expanduser("~"), ";;(*.png) PNG", "png" ) ) ) qatb = QAction(QIcon.fromTheme("go-top"), "Toggle ToolBar", self) qatb.triggered.connect(lambda: self.toolbar.hide() if self.toolbar.isVisible() is True else self.toolbar.show()) qati = QAction(QIcon.fromTheme("help-browser"), "Switch ToolBar Icon Size", self) qati.triggered.connect( lambda: self.toolbar.setIconSize(self.toolbar.iconSize() * 4) if self.toolbar.iconSize().width() * 4 == 24 else self.toolbar.setIconSize(self.toolbar.iconSize() / 4) ) qasb = QAction(QIcon.fromTheme("zoom-in"), "Toggle Tabs Bar", self) qasb.triggered.connect( lambda: self.mainwidget.tabBar().hide() if self.mainwidget.tabBar().isVisible() is True else self.mainwidget.tabBar().show() ) qadoc = QAction(QIcon.fromTheme("help-browser"), "On-line Docs", self) qadoc.triggered.connect(lambda: open_new_tab(__url__)) qapy = QAction(QIcon.fromTheme("help-about"), "About Python", self) qapy.triggered.connect(lambda: open_new_tab("http://python.org/about")) qali = QAction(QIcon.fromTheme("help-browser"), "Read Licence", self) qali.triggered.connect(lambda: open_new_tab(__full_licence__)) qacol = QAction(QIcon.fromTheme("preferences-system"), "Set GUI Colors", self) if KDE: color = QColor() qacol.triggered.connect( lambda: self.setStyleSheet("".join(("* { background-color: ", str(color.name()), "}"))) if KColorDialog.getColor(color, self) else "" ) else: qacol.triggered.connect( lambda: self.setStyleSheet( "".join((" * { background-color: ", str(QColorDialog.getColor().name()), " } ")) ) ) qatit = QAction(QIcon.fromTheme("preferences-system"), "Set the App Window Title", self) qatit.triggered.connect(self.seTitle) self.toolbar.addWidget(self.left_spacer) self.toolbar.addSeparator() for b in ( qaqq, qamin, qanor, qamax, qasrc, qakb, qacol, qatim, qatb, qafnt, qati, qasb, qatit, qapic, qadoc, qali, qaslf, qaqt, qakde, qapy, qabug, ): self.toolbar.addAction(b) self.addToolBar(Qt.TopToolBarArea, self.toolbar) self.toolbar.addSeparator() self.toolbar.addWidget(self.right_spacer) # define the menu menu = self.menuBar() # File menu items menu.addMenu("&File").addActions((qaqq,)) menu.addMenu("&Window").addActions((qamax, qanor, qamin)) # Settings menu menu.addMenu("&Settings").addActions((qasrc, qacol, qafnt, qatim, qatb, qati, qasb, qapic)) # Help menu items menu.addMenu("&Help").addActions((qadoc, qakb, qabug, qali, qaqt, qakde, qapy, qaslf)) # Tray Icon tray = QSystemTrayIcon(QIcon.fromTheme("face-devilish"), self) tray.setToolTip(__doc__) traymenu = QMenu() traymenu.addActions((qamax, qanor, qamin, qaqq)) tray.setContextMenu(traymenu) tray.show() def contextMenuRequested(point): " quick and dirty custom context menu " menu = QMenu() menu.addActions( ( qaqq, qamin, qanor, qamax, qasrc, qakb, qacol, qafnt, qati, qasb, qatb, qatim, qatit, qapic, qadoc, qali, qaslf, qaqt, qakde, qapy, qabug, ) ) menu.exec_(self.mapToGlobal(point)) self.mainwidget.customContextMenuRequested.connect(contextMenuRequested) def must_be_checked(widget_list): " widget tuple passed as argument should be checked as ON " for each_widget in widget_list: try: each_widget.setChecked(True) except: pass def must_have_tooltip(widget_list): " widget tuple passed as argument should have tooltips " for each_widget in widget_list: try: each_widget.setToolTip(each_widget.text()) except: each_widget.setToolTip(each_widget.currentText()) finally: each_widget.setCursor(QCursor(Qt.PointingHandCursor)) def must_autofillbackground(widget_list): " widget tuple passed as argument should have filled background " for each_widget in widget_list: try: each_widget.setAutoFillBackground(True) except: pass def must_glow(widget_list): " apply an glow effect to the widget " for glow, each_widget in enumerate(widget_list): try: if each_widget.graphicsEffect() is None: glow = QGraphicsDropShadowEffect(self) glow.setOffset(0) glow.setBlurRadius(99) glow.setColor(QColor(99, 255, 255)) each_widget.setGraphicsEffect(glow) # glow.setEnabled(False) try: each_widget.clicked.connect( lambda: each_widget.graphicsEffect().setEnabled(True) if each_widget.graphicsEffect().isEnabled() is False else each_widget.graphicsEffect().setEnabled(False) ) except: each_widget.sliderPressed.connect( lambda: each_widget.graphicsEffect().setEnabled(True) if each_widget.graphicsEffect().isEnabled() is False else each_widget.graphicsEffect().setEnabled(False) ) except: pass ####################################################################### self.group1 = QGroupBox() self.group1.setTitle(__doc__) self.frmt = QComboBox(self.group1) self.frmt.addItems(["blah ", "blah blah", "blah blah blah"]) self.file1 = QLineEdit() self.file1.setPlaceholderText("/full/path/to/one_file.py") self.file1.setCompleter(self.completer) self.borig = QPushButton(QIcon.fromTheme("folder-open"), "Open") vboxg1 = QVBoxLayout(self.group1) for each_widget in ( QLabel('<b style="color:white;">some comment'), self.file1, self.borig, QLabel('<b style="color:white;">Lorem Impsum'), self.frmt, ): vboxg1.addWidget(each_widget) self.group2 = QGroupBox() self.group2.setTitle(__doc__) self.nwfl = QCheckBox("Be Awesome") self.smll = QCheckBox("Solve the Squaring of the Circle") self.lrgf = QCheckBox("Im just a QCheckBox") self.case = QCheckBox("Use Quantum Processing") vboxg2 = QVBoxLayout(self.group2) for each_widget in (self.nwfl, self.smll, self.lrgf, self.case): vboxg2.addWidget(each_widget) group3 = QGroupBox() group3.setTitle(__doc__) self.plai = QCheckBox("May the Force be with You") self.nocr = QCheckBox("Im just a Place Holder") self.ridt = QCheckBox("Lorem Impsum") self.nocm = QCheckBox("Divide by Zero") vboxg3 = QVBoxLayout(group3) for each_widget in (self.plai, self.nocr, self.ridt, self.nocm): vboxg3.addWidget(each_widget) container = QWidget() hbox = QHBoxLayout(container) for each_widget in (self.group2, self.group1, group3): hbox.addWidget(each_widget) self.dock1.setWidget(container) # dock 2 self.dock2.setWidget(QPlainTextEdit()) # dock 3 self.dock3.setWidget(QCalendarWidget()) # configure some widget settings must_be_checked((self.nwfl, self.smll, self.lrgf, self.plai)) must_have_tooltip((self.plai, self.nocr, self.ridt, self.nocm, self.nwfl, self.smll, self.lrgf, self.case)) must_autofillbackground( (self.plai, self.nocr, self.ridt, self.nocm, self.nwfl, self.smll, self.lrgf, self.case) ) must_glow((self.plai, self.nocr, self.ridt, self.nocm, self.nwfl))
class LiveCapture_ui(QObject): def __init__(self, parent=None): super(LiveCapture_ui, self).__init__(parent) self.parent = parent self.initUi() self.liveCapture = None self.packetDataUi = None ''' Description: Initialise the buttons and actions to control the live captring of data graphically. Add corresponding actions/tool buttons to toolbars/menubars of the mainWindow ''' def initUi(self): startPixmap = QPixmap( os.path.dirname(os.path.realpath(__file__)) + '/Start.png') stopPixmap = QPixmap( os.path.dirname(os.path.realpath(__file__)) + '/Stop.png') startIcon = QIcon(startPixmap) stopIcon = QIcon(stopPixmap) self.startToolButton = QToolButton(self.parent) self.stopToolButton = QToolButton(self.parent) self.startToolButton.setIcon(startIcon) self.stopToolButton.setIcon(stopIcon) self.startToolButton.setIconSize(QSize(32, 32)) self.stopToolButton.setIconSize(QSize(32, 32)) self.startToolButton.clicked.connect(self.startToolButtonClicked) self.stopToolButton.clicked.connect(self.stopToolButtonClicked) self.startAction = QAction("Start Live Capturing", self.parent) self.startAction.triggered.connect(self.startToolButtonClicked) self.stopAction = QAction("Stop Live Capture", self.parent) self.stopAction.triggered.connect(self.stopToolButtonClicked) # Setup initial values for the buttons/actions self.startToolButton.setEnabled(True) self.stopToolButton.setDisabled(True) self.startAction.setEnabled(True) self.stopAction.setDisabled(True) # Add Actions to the Menu bar menuCapture = self.parent.GetMenu("Capture") if menuCapture != None: menuCapture.addAction(self.startAction) menuCapture.addAction(self.stopAction) menuCapture.addSeparator() # Add tool buttons to the appropriate tool bar toolBarCapture = self.parent.GetToolBar("Capture") if toolBarCapture != None: toolBarCapture.addWidget(self.startToolButton) toolBarCapture.addWidget(self.stopToolButton) ''' Description: Obtain the interface to capture the data from. Check if user has appropriate privilege levels to start capturing data. Toggle tools in the GUI and initialise the packet capturing/display process in separate threads. ''' @pyqtSlot() def startToolButtonClicked(self): self.liveCapture = LiveCapture() iface = InterfaceSelection(self.parent) ifaceName = iface.GetInterface() if ifaceName == None: return self.liveCapture.setInterface(ifaceName) retVal = self.liveCapture.startLiveCapture() if retVal != -1: self.startToolButton.setDisabled(True) self.stopToolButton.setEnabled(True) self.startAction.setDisabled(True) self.stopAction.setEnabled(True) self.packetDataUi = PacketData_ui(self.parent) getPacketThread = GetPacketThread(self.liveCapture, self.packetDataUi) ''' Description: Notify the capturing thread to stop and toggle the buttons in the GUI ''' @pyqtSlot() def stopToolButtonClicked(self): self.startToolButton.setEnabled(True) self.stopToolButton.setDisabled(True) self.startAction.setEnabled(True) self.stopAction.setDisabled(True) self.liveCapture.stopLiveCapture() ''' Description: Description: Wrapper to trigger the Start capturing ''' def triggerStart(self): self.startAction.trigger() ''' Description: Description: Wrapper to trigger the Stop capturing ''' def triggerStop(self): self.stopAction.trigger()
def __init__(self, AUTO): ' Initialize QWidget inside MyMainWindow ' super(MyMainWindow, self).__init__() QWidget.__init__(self) self.auto = AUTO self.statusBar().showMessage(' {}'.format(__doc__)) self.setStyleSheet('QStatusBar{color:grey;}') self.setWindowTitle(__doc__) self.setWindowIcon(QIcon.fromTheme("face-monkey")) self.setFont(QFont('Ubuntu Light', 10)) self.setMaximumSize(QDesktopWidget().screenGeometry().width(), QDesktopWidget().screenGeometry().height()) self.base = path.abspath(path.join(getcwd(), str(datetime.now().year))) # directory auto completer self.completer = QCompleter(self) self.dirs = QDirModel(self) self.dirs.setFilter(QDir.AllEntries | QDir.NoDotAndDotDot) self.completer.setModel(self.dirs) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) # process self.process1 = None self.process2 = None self.cmd1 = 'nice -n {n} arecord{v} -f {f} -c {c} -r {b} -t raw' self.cmd2 = 'oggenc - -r -C {c} -R {b} -q {q} {d}{t}{a} -o {o}' self.process3 = QProcess(self) #self.process3.finished.connect(self.on_process3_finished) #self.process3.error.connect(self.on_process3_error) self.cmd3 = ('nice -n 20 ' + 'sox "{o}" -n spectrogram -x {x} -y {y} -z 99 -t "{o}" -o "{o}.png"') self.actual_file = '' # re starting timers, one stops, one starts self.timerFirst = QTimer(self) self.timerFirst.timeout.connect(self.end) self.timerSecond = QTimer(self) self.timerSecond.timeout.connect(self.run) # Proxy support, by reading http_proxy os env variable proxy_url = QUrl(environ.get('http_proxy', '')) QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.HttpProxy if str(proxy_url.scheme()).startswith('http') else QNetworkProxy.Socks5Proxy, proxy_url.host(), proxy_url.port(), proxy_url.userName(), proxy_url.password())) \ if 'http_proxy' in environ else None print((' INFO: Proxy Auto-Config as ' + str(proxy_url))) # basic widgets layouts and set up self.mainwidget = QTabWidget() self.mainwidget.setToolTip(__doc__) self.mainwidget.setMovable(True) self.mainwidget.setTabShape(QTabWidget.Triangular) self.mainwidget.setContextMenuPolicy(Qt.CustomContextMenu) self.mainwidget.setStyleSheet('QTabBar{color:white;font-weight:bold;}') self.mainwidget.setTabBar(TabBar(self)) self.mainwidget.setTabsClosable(False) self.setCentralWidget(self.mainwidget) self.dock1 = QDockWidget() self.dock2 = QDockWidget() self.dock3 = QDockWidget() self.dock4 = QDockWidget() self.dock5 = QDockWidget() for a in (self.dock1, self.dock2, self.dock3, self.dock4, self.dock5): a.setWindowModality(Qt.NonModal) # a.setWindowOpacity(0.9) a.setWindowTitle(__doc__ if a.windowTitle() == '' else a.windowTitle()) a.setStyleSheet('QDockWidget::title{text-align:center;}') self.mainwidget.addTab(a, QIcon.fromTheme("face-smile"), 'Double Click Me') # Paleta de colores para pintar transparente self.palette().setBrush(QPalette.Base, Qt.transparent) self.setPalette(self.palette()) self.setAttribute(Qt.WA_OpaquePaintEvent, False) # toolbar and basic actions self.toolbar = QToolBar(self) self.toolbar.setIconSize(QSize(24, 24)) # spacer widget for left self.left_spacer = QWidget(self) self.left_spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # spacer widget for right self.right_spacer = QWidget(self) self.right_spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) qaqq = QAction(QIcon.fromTheme("application-exit"), 'Quit', self) qaqq.setShortcut('Ctrl+Q') qaqq.triggered.connect(exit) qamin = QAction(QIcon.fromTheme("go-down"), 'Minimize', self) qamin.triggered.connect(lambda: self.showMinimized()) qamax = QAction(QIcon.fromTheme("go-up"), 'Maximize', self) qanor = QAction(QIcon.fromTheme("view-fullscreen"), 'AutoCenter AutoResize', self) qanor.triggered.connect(self.center) qatim = QAction(QIcon.fromTheme("mail-signed-verified"), 'View Date and Time', self) qatim.triggered.connect(self.timedate) qabug = QAction(QIcon.fromTheme("help-about"), 'Report a Problem', self) qabug.triggered.connect(lambda: qabug.setDisabled(True) if not call( 'xdg-open mailto:' + '*****@*****.**'.decode('rot13'), shell=True) else ' ERROR ') qamax.triggered.connect(lambda: self.showMaximized()) qaqt = QAction(QIcon.fromTheme("help-about"), 'About Qt', self) qaqt.triggered.connect(lambda: QMessageBox.aboutQt(self)) qakde = QAction(QIcon.fromTheme("help-about"), 'About KDE', self) if KDE: qakde.triggered.connect(KHelpMenu(self, "", False).aboutKDE) qaslf = QAction(QIcon.fromTheme("help-about"), 'About Self', self) if KDE: qaslf.triggered.connect( KAboutApplicationDialog(aboutData, self).exec_) else: qaslf.triggered.connect(lambda: QMessageBox.about(self.mainwidget, __doc__, ''.join((__doc__, linesep, 'version ', __version__, ', (', __license__, '), by ', __author__, ', ( ', __email__, ' )', linesep )))) qafnt = QAction(QIcon.fromTheme("tools-check-spelling"), 'Set GUI Font', self) if KDE: font = QFont() qafnt.triggered.connect(lambda: self.setStyleSheet(''.join(( '*{font-family:', str(font.toString()), '}')) if KFontDialog.getFont(font)[0] == QDialog.Accepted else '')) else: qafnt.triggered.connect(lambda: self.setStyleSheet(''.join(('*{font-family:', str(QFontDialog.getFont()[0].toString()), '}')))) qasrc = QAction(QIcon.fromTheme("applications-development"), 'View Source Code', self) qasrc.triggered.connect(lambda: call('xdg-open {}'.format(__file__), shell=True)) qakb = QAction(QIcon.fromTheme("input-keyboard"), 'Keyboard Shortcuts', self) qakb.triggered.connect(lambda: QMessageBox.information(self.mainwidget, 'Keyboard Shortcuts', ' Ctrl+Q = Quit ')) qapic = QAction(QIcon.fromTheme("camera-photo"), 'Take a Screenshot', self) qapic.triggered.connect(lambda: QPixmap.grabWindow( QApplication.desktop().winId()).save(QFileDialog.getSaveFileName( self.mainwidget, " Save Screenshot As ...", path.expanduser("~"), ';;(*.png) PNG', 'png'))) qatb = QAction(QIcon.fromTheme("go-top"), 'Toggle ToolBar', self) qatb.triggered.connect(lambda: self.toolbar.hide() if self.toolbar.isVisible() is True else self.toolbar.show()) qati = QAction(QIcon.fromTheme("zoom-in"), 'Switch ToolBar Icon Size', self) qati.triggered.connect(lambda: self.toolbar.setIconSize(self.toolbar.iconSize() * 4) if self.toolbar.iconSize().width() * 4 == 24 else self.toolbar.setIconSize(self.toolbar.iconSize() / 4)) qasb = QAction(QIcon.fromTheme("preferences-other"), 'Toggle Tabs Bar', self) qasb.triggered.connect(lambda: self.mainwidget.tabBar().hide() if self.mainwidget.tabBar().isVisible() is True else self.mainwidget.tabBar().show()) qadoc = QAction(QIcon.fromTheme("help-browser"), 'On-line Docs', self) qadoc.triggered.connect(lambda: open_new_tab(str(__url__).strip())) qapy = QAction(QIcon.fromTheme("help-about"), 'About Python', self) qapy.triggered.connect(lambda: open_new_tab('http://python.org/about')) qali = QAction(QIcon.fromTheme("help-browser"), 'Read Licence', self) qali.triggered.connect(lambda: open_new_tab(__full_licence__)) qacol = QAction(QIcon.fromTheme("preferences-system"), 'Set GUI Colors', self) if KDE: color = QColor() qacol.triggered.connect(lambda: self.setStyleSheet(''.join(('* { background-color: ', str(color.name()), '}'))) if KColorDialog.getColor(color, self) else '') else: qacol.triggered.connect(lambda: self.setStyleSheet(''.join(( ' * { background-color: ', str(QColorDialog.getColor().name()), ' } ')))) qatit = QAction(QIcon.fromTheme("preferences-system"), 'Set the App Window Title', self) qatit.triggered.connect(self.seTitle) self.toolbar.addWidget(self.left_spacer) self.toolbar.addSeparator() self.toolbar.addActions((qaqq, qamin, qanor, qamax, qasrc, qakb, qacol, qatim, qatb, qafnt, qati, qasb, qatit, qapic, qadoc, qali, qaslf, qaqt, qakde, qapy, qabug)) self.addToolBar(Qt.TopToolBarArea, self.toolbar) self.toolbar.addSeparator() self.toolbar.addWidget(self.right_spacer) # define the menu menu = self.menuBar() # File menu items menu.addMenu('&File').addActions((qaqq, )) menu.addMenu('&Window').addActions((qamax, qanor, qamin)) # Settings menu menu.addMenu('&Settings').addActions((qasrc, qacol, qafnt, qatim, qatb, qati, qasb, qapic)) # Help menu items menu.addMenu('&Help').addActions((qadoc, qakb, qabug, qali, qaqt, qakde, qapy, qaslf)) # Tray Icon tray = QSystemTrayIcon(QIcon.fromTheme("face-devilish"), self) tray.setToolTip(__doc__) traymenu = QMenu() traymenu.addActions((qamax, qanor, qamin, qaqq)) tray.setContextMenu(traymenu) tray.show() def contextMenuRequested(point): ' quick and dirty custom context menu ' menu = QMenu() menu.addActions((qaqq, qamin, qanor, qamax, qasrc, qakb, qacol, qafnt, qati, qasb, qatb, qatim, qatit, qapic, qadoc, qali, qaslf, qaqt, qakde, qapy, qabug)) menu.exec_(self.mapToGlobal(point)) self.mainwidget.customContextMenuRequested.connect(contextMenuRequested) def must_be_checked(widget_list): ' widget tuple passed as argument should be checked as ON ' for each_widget in widget_list: try: each_widget.setChecked(True) except: pass def must_have_tooltip(widget_list): ' widget tuple passed as argument should have tooltips ' for each_widget in widget_list: try: each_widget.setToolTip(each_widget.text()) except: each_widget.setToolTip(each_widget.currentText()) finally: each_widget.setCursor(QCursor(Qt.PointingHandCursor)) def must_autofillbackground(widget_list): ' widget tuple passed as argument should have filled background ' for each_widget in widget_list: try: each_widget.setAutoFillBackground(True) except: pass def must_glow(widget_list): ' apply an glow effect to the widget ' for glow, each_widget in enumerate(widget_list): try: if each_widget.graphicsEffect() is None: glow = QGraphicsDropShadowEffect(self) glow.setOffset(0) glow.setBlurRadius(99) glow.setColor(QColor(99, 255, 255)) each_widget.setGraphicsEffect(glow) # glow.setEnabled(False) try: each_widget.clicked.connect(lambda: each_widget.graphicsEffect().setEnabled(True) if each_widget.graphicsEffect().isEnabled() is False else each_widget.graphicsEffect().setEnabled(False)) except: each_widget.sliderPressed.connect(lambda: each_widget.graphicsEffect().setEnabled(True) if each_widget.graphicsEffect().isEnabled() is False else each_widget.graphicsEffect().setEnabled(False)) except: pass ####################################################################### # dock 1 QLabel('<h1 style="color:white;"> Record !</h1>', self.dock1).resize( self.dock3.size().width() / 4, 25) self.group1 = QGroupBox() self.group1.setTitle(__doc__) self.spec = QPushButton(self) self.spec.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.spec.setMinimumSize(self.spec.size().width(), 250) self.spec.setFlat(True) self.spec.clicked.connect(self.spectro) self.clock = QLCDNumber() self.clock.setSegmentStyle(QLCDNumber.Flat) self.clock.setMinimumSize(self.clock.size().width(), 50) self.clock.setNumDigits(25) self.timer1 = QTimer(self) self.timer1.timeout.connect(lambda: self.clock.display( datetime.now().strftime("%d-%m-%Y %H:%M:%S %p"))) self.timer1.start(1000) self.clock.setToolTip(datetime.now().strftime("%c %x")) self.clock.setCursor(QCursor(Qt.CrossCursor)) self.diskBar = QProgressBar() self.diskBar.setMinimum(0) self.diskBar.setMaximum(statvfs(HOME).f_blocks * statvfs(HOME).f_frsize / 1024 / 1024 / 1024) self.diskBar.setValue(statvfs(HOME).f_bfree * statvfs(HOME).f_frsize / 1024 / 1024 / 1024) self.diskBar.setToolTip(str(statvfs(HOME).f_bfree * statvfs(HOME).f_frsize / 1024 / 1024 / 1024) + ' Gigabytes free') self.feedback = QPlainTextEdit(''.join(('<center><h3>', __doc__, ', version', __version__, __license__, ' <br> by ', __author__, ' <i>(Dev)</i>, Radio Comunitaria FM Reconquista <i>(Q.A.)</i><br>', 'FMReconquista.org.ar & GitHub.com/JuanCarlosPaco/Cinta-Testigo'))) self.rec = QPushButton(QIcon.fromTheme("media-record"), 'Record') self.rec.setMinimumSize(self.rec.size().width(), 50) self.rec.clicked.connect(self.go) # self.run self.stop = QPushButton(QIcon.fromTheme("media-playback-stop"), 'Stop') self.stop.clicked.connect(self.end) self.kill = QPushButton(QIcon.fromTheme("process-stop"), 'Kill') self.kill.clicked.connect(self.killer) vboxg1 = QVBoxLayout(self.group1) for each_widget in ( QLabel('<b style="color:white;"> Spectro'), self.spec, QLabel('<b style="color:white;"> Time '), self.clock, QLabel('<b style="color:white;"> Disk '), self.diskBar, QLabel('<b style="color:white;"> STDOUT + STDIN '), self.feedback, QLabel('<b style="color:white;"> Record '), self.rec, self.stop, self.kill): vboxg1.addWidget(each_widget) self.group2 = QGroupBox() self.group2.setTitle(__doc__) self.slider = QSlider(self) self.slid_l = QLabel(self.slider) self.slider.setCursor(QCursor(Qt.OpenHandCursor)) self.slider.sliderPressed.connect(lambda: self.slider.setCursor(QCursor(Qt.ClosedHandCursor))) self.slider.sliderReleased.connect(lambda: self.slider.setCursor(QCursor(Qt.OpenHandCursor))) self.slider.valueChanged.connect(lambda: self.slider.setToolTip(str(self.slider.value()))) self.slider.valueChanged.connect(lambda: self.slid_l.setText( '<h2 style="color:white;">{}'.format(self.slider.value()))) self.slider.setMinimum(10) self.slider.setMaximum(99) self.slider.setValue(30) self.slider.setOrientation(Qt.Vertical) self.slider.setTickPosition(QSlider.TicksBothSides) self.slider.setTickInterval(2) self.slider.setSingleStep(10) self.slider.setPageStep(10) vboxg2 = QVBoxLayout(self.group2) for each_widget in ( QLabel('<b style="color:white;">MINUTES of recording'), self.slider, QLabel('<b style="color:white;"> Default: 30 Min')): vboxg2.addWidget(each_widget) group3 = QGroupBox() group3.setTitle(__doc__) try: self.label2 = QLabel(getoutput('sox --version', shell=True)) self.label4 = QLabel(getoutput('arecord --version', shell=1)[:25]) self.label6 = QLabel(str(getoutput('oggenc --version', shell=True))) except: print(''' ERROR: No SOX, OGGenc avaliable ! ( sudo apt-get install vorbis-tools sox alsa-utils ) ''') exit() self.button5 = QPushButton(QIcon.fromTheme("audio-x-generic"), 'OGG --> ZIP') self.button5.clicked.connect(lambda: make_archive( str(QFileDialog.getSaveFileName(self, "Save OGG to ZIP file As...", getcwd(), ';;(*.zip)', 'zip')).replace('.zip', ''), "zip", path.abspath(path.join(getcwd(), str(datetime.now().year))))) self.button1 = QPushButton(QIcon.fromTheme("folder-open"), 'Files') self.button1.clicked.connect(lambda: call('xdg-open ' + getcwd(), shell=True)) self.button0 = QPushButton( QIcon.fromTheme("preferences-desktop-screensaver"), 'LCD OFF') self.button0.clicked.connect(lambda: call('sleep 3 ; xset dpms force off', shell=True)) vboxg3 = QVBoxLayout(group3) for each_widget in ( QLabel('<b style="color:white;"> OGG Output Codec '), self.label6, QLabel('<b style="color:white;"> Raw Record Backend '), self.label4, QLabel('<b style="color:white;"> Helper Libs '), self.label2, QLabel('<b style="color:white;"> OGG ZIP '), self.button5, QLabel('<b style="color:white;"> Files '), self.button1, QLabel('<b style="color:white;"> LCD '), self.button0): vboxg3.addWidget(each_widget) container = QWidget() hbox = QHBoxLayout(container) for each_widget in (self.group2, self.group1, group3): hbox.addWidget(each_widget) self.dock1.setWidget(container) # dock 2 QLabel('<h1 style="color:white;"> Hardware !</h1>', self.dock2).resize( self.dock2.size().width() / 4, 25) try: audioDriverStr = {Solid.AudioInterface.Alsa: "ALSA", Solid.AudioInterface.OpenSoundSystem: "Open Sound", Solid.AudioInterface.UnknownAudioDriver: "Unknown?"} audioInterfaceTypeStr = { Solid.AudioInterface.AudioControl: "Control", Solid.AudioInterface.UnknownAudioInterfaceType: "Unknown?", Solid.AudioInterface.AudioInput: "In", Solid.AudioInterface.AudioOutput: "Out"} soundcardTypeStr = { Solid.AudioInterface.InternalSoundcard: "Internal", Solid.AudioInterface.UsbSoundcard: "USB3", Solid.AudioInterface.FirewireSoundcard: "FireWire", Solid.AudioInterface.Headset: "Headsets", Solid.AudioInterface.Modem: "Modem"} display = QTreeWidget() display.setAlternatingRowColors(True) display.setHeaderLabels(["Items", "ID", "Drivers", "I / O", "Type"]) display.setColumnWidth(0, 350) display.setColumnWidth(1, 350) display.setColumnWidth(3, 75) # retrieve a list of Solid.Device for this machine deviceList = Solid.Device.allDevices() # filter the list of all devices and display matching results # note that we never create a Solid.AudioInterface object, but # receive one from the 'asDeviceInterface' call for device in deviceList: if device.isDeviceInterface( Solid.DeviceInterface.AudioInterface): audio = device.asDeviceInterface( Solid.DeviceInterface.AudioInterface) devtype = audio.deviceType() devstr = [] for key in audioInterfaceTypeStr: flag = key & devtype if flag: devstr.append(audioInterfaceTypeStr[key]) QTreeWidgetItem(display, [device.product(), audio.name(), audioDriverStr[audio.driver()], "/".join(devstr), soundcardTypeStr[audio.soundcardType()]]) self.dock2.setWidget(display) except: self.dock2.setWidget(QLabel(""" <center style='color:white;'> <h1>:(<br>ERROR: Please, install PyKDE !</h1><br> <br><i> (Sorry, can not use non-Qt Libs). Thanks </i><center>""")) ## dock 3 QLabel('<h1 style="color:white;"> Previews !</h1>', self.dock3).resize( self.dock3.size().width() / 4, 25) self.fileView = QColumnView() self.fileView.updatePreviewWidget.connect(self.play) self.fileView.setToolTip(' Browse and Preview Files ') self.media = None self.model = QDirModel() self.fileView.setModel(self.model) self.dock3.setWidget(self.fileView) # dock4 QLabel('<h1 style="color:white;"> Setup !</h1>', self.dock4).resize( self.dock4.size().width() / 4, 25) self.group4 = QGroupBox() self.group4.setTitle(__doc__) self.combo0 = QComboBox() self.combo0.addItems(['S16_LE', 'S32_LE', 'S16_BE', 'U16_LE', 'U16_BE', 'S24_LE', 'S24_BE', 'U24_LE', 'U24_BE', 'S32_BE', 'U32_LE', 'U32_BE']) self.combo1 = QComboBox() self.combo1.addItems(['1', '-1', '0', '2', '3', '4', '5', '6', '7', '8', '9', '10']) self.combo2 = QComboBox() self.combo2.addItems(['128', '256', '512', '1024', '64', '32', '16']) self.combo3 = QComboBox(self) self.combo3.addItems(['MONO', 'STEREO', 'Surround']) self.combo4 = QComboBox() self.combo4.addItems(['44100', '96000', '48000', '32000', '22050', '16000', '11025', '8000']) self.combo5 = QComboBox(self) self.combo5.addItems(['20', '19', '18', '17', '16', '15', '14', '13', '12', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0']) self.nepochoose = QCheckBox('Auto-Tag Files using Nepomuk Semantic') self.chckbx0 = QCheckBox('Disable Software based Volume Control') self.chckbx1 = QCheckBox('Output Sound Stereo-to-Mono Downmix') self.chckbx2 = QCheckBox('Add Date and Time MetaData to Sound files') self.chckbx3 = QCheckBox('Add Yourself as the Author Artist of Sound') vboxg4 = QVBoxLayout(self.group4) for each_widget in ( QLabel('<b style="color:white;"> Sound OGG Quality'), self.combo1, QLabel('<b style="color:white;"> Sound Record Format'), self.combo0, QLabel('<b style="color:white;"> Sound KBps '), self.combo2, QLabel('<b style="color:white;"> Sound Channels '), self.combo3, QLabel('<b style="color:white;"> Sound Sample Rate '), self.combo4, QLabel('<b style="color:white;"> Sound Volume'), self.chckbx0, QLabel('<b style="color:white;"> Sound Mix'), self.chckbx1, QLabel('<b style="color:white;"> Sound Meta'), self.chckbx2, QLabel('<b style="color:white;"> Sound Authorship'), self.chckbx3, QLabel('<b style="color:white;"> CPUs Priority'), self.combo5, QLabel('<b style="color:white;">Nepomuk Semantic User Experience'), self.nepochoose): vboxg4.addWidget(each_widget) self.dock4.setWidget(self.group4) # dock 5 QLabel('<h1 style="color:white;"> Voice Changer ! </h1>', self.dock5 ).resize(self.dock5.size().width() / 3, 25) self.group5 = QGroupBox() self.group5.setTitle(__doc__) self.dial = QDial() self.dial.setCursor(QCursor(Qt.OpenHandCursor)) self.di_l = QLabel(self.dial) self.di_l.resize(self.dial.size() / 8) self.dial.sliderPressed.connect(lambda: self.dial.setCursor(QCursor(Qt.ClosedHandCursor))) self.dial.sliderReleased.connect(lambda: self.dial.setCursor(QCursor(Qt.OpenHandCursor))) self.dial.valueChanged.connect(lambda: self.dial.setToolTip(str(self.dial.value()))) self.dial.valueChanged.connect(lambda: self.di_l.setText( '<h1 style="color:white;">{}'.format(self.dial.value()))) self.dial.setValue(0) self.dial.setMinimum(-999) self.dial.setMaximum(999) self.dial.setSingleStep(100) self.dial.setPageStep(100) self.dial.setWrapping(False) self.dial.setNotchesVisible(True) self.defo = QPushButton(QIcon.fromTheme("media-playback-start"), 'Run') self.defo.setMinimumSize(self.defo.size().width(), 50) self.defo.clicked.connect(lambda: self.process3.start( 'play -q -V0 "|rec -q -V0 -n -d -R riaa pitch {} "' .format(self.dial.value()) if int(self.dial.value()) != 0 else 'play -q -V0 "|rec -q -V0 --multi-threaded -n -d -R bend {} "' .format(' 3,2500,3 3,-2500,3 ' * 999))) self.qq = QPushButton(QIcon.fromTheme("media-playback-stop"), 'Stop') self.qq.clicked.connect(self.process3.kill) self.die = QPushButton(QIcon.fromTheme("process-stop"), 'Kill') self.die.clicked.connect(lambda: call('killall rec', shell=True)) vboxg5 = QVBoxLayout(self.group5) for each_widget in (self.dial, self.defo, self.qq, self.die): vboxg5.addWidget(each_widget) self.dock5.setWidget(self.group5) # configure some widget settings must_be_checked((self.nepochoose, self.chckbx1, self.chckbx2, self.chckbx3)) must_have_tooltip((self.label2, self.label4, self.label6, self.combo0, self.nepochoose, self.combo1, self.combo2, self.combo3, self.combo4, self.combo5, self.chckbx0, self.chckbx1, self.chckbx2, self.chckbx3, self.rec, self.stop, self.defo, self.qq, self.die, self.kill, self.button0, self.button1, self.button5)) must_autofillbackground((self.clock, self.label2, self.label4, self.label6, self.nepochoose, self.chckbx0, self.chckbx1, self.chckbx2, self.chckbx3)) must_glow((self.rec, self.dial, self.combo1)) self.nepomuk_get('testigo') if self.auto is True: self.go()
class PredictorGUI(QMainWindow): def __init__(self): super(PredictorGUI, self).__init__() self.default_location = os.getenv("HOME") self.current_load_location = self.default_location self.current_save_location = self.default_location self.initUI() def initUI(self): self.textEdit = QTextEdit() self.textEdit.setReadOnly(True) self.setCentralWidget(self.textEdit) self.statusBar() icon_open = QIcon.fromTheme("document-open", QIcon(":/open.png")) icon_save = QIcon.fromTheme("document-save-as") icon_copy = QIcon.fromTheme("edit-copy") icon_clear = QIcon.fromTheme("edit-clear") openFile = QAction(QIcon(icon_open), 'Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open new File') openFile.triggered.connect(self.showLoadDialog) self.saveFile = QAction(QIcon(icon_save), 'Save', self) self.saveFile.setShortcut('Ctrl+S') self.saveFile.setStatusTip('Save data to File') self.saveFile.triggered.connect(self.showSaveDialog) self.saveFile.setDisabled(True) self.clearData = QAction(QIcon(icon_clear), 'Clear', self) self.clearData.setShortcut('Ctrl+D') self.clearData.setStatusTip('Clear data') self.clearData.triggered.connect(self.clear_event) self.clearData.setDisabled(True) self.copyData = QAction(QIcon(icon_copy), 'Copy', self) self.copyData.setShortcut('Ctrl+C') self.copyData.setStatusTip('Copy data to clipboard') self.copyData.triggered.connect(self.copy_event) self.copyData.setDisabled(True) exitAction = QAction(QIcon(), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.triggered.connect(qApp.quit) menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(openFile) fileMenu.addAction(self.saveFile) fileMenu.addAction(self.copyData) fileMenu.addAction(self.clearData) fileMenu.addSeparator() fileMenu.addAction(exitAction) fileToolBar = self.addToolBar("Load and Save") fileToolBar.setIconSize(QSize(22, 22)) fileToolBar.addAction(openFile) fileToolBar.addAction(self.saveFile) fileToolBar.addAction(self.copyData) fileToolBar.addAction(self.clearData) self.setGeometry(300, 300, 400, 600) self.setWindowTitle('File dialog') self.show() def showLoadDialog(self): fname = QFileDialog.getOpenFileName(self, 'Open file', self.current_load_location) self.current_load_location = os.path.dirname(str(fname)) data = predictor.get_output_string(fname) self.textEdit.setText(data) self.saveFile.setDisabled(False) self.clearData.setDisabled(False) self.copyData.setDisabled(False) def showSaveDialog(self): if(self.current_save_location == self.default_location): self.current_save_location = self.current_load_location fname = QFileDialog.getSaveFileName(self, 'Save file', self.current_save_location) self.current_save_location = os.path.dirname(str(fname)) with open(str(fname), 'w') as fout: fout.write(self.textEdit.toPlainText()) def clear_event(self): self.textEdit.setText('') self.saveFile.setDisabled(True) self.clearData.setDisabled(True) self.copyData.setDisabled(True) def copy_event(self): self.textEdit.selectAll() self.textEdit.copy() self.textEdit.moveCursor(QTextCursor.Start)
class GeometryCopier: def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path( ) + "/python/plugins/geometry_copier" # initialize locale locale_path = "" if sip.getapi("QVariant") > 1: # new API style locale = QSettings().value("locale/userLocale")[0:2] else: # the old API style locale = QSettings().value("locale/userLocale").toString()[0:2] if QFileInfo(self.plugin_dir).exists(): locale_path = self.plugin_dir + "/i18n/geometry_copier_" + locale + ".qm" if QFileInfo(locale_path).exists(): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) self._geom_buffer = None def initGui(self): # Create action that will start plugin configuration self.copy_action = QAction( QIcon(':/plugins/geometrycopier/mActionEditCopyGeom.png'), self.tr(u"Copy geometry"), self.iface.mainWindow()) self.insert_action = QAction( QIcon(':/plugins/geometrycopier/mActionEditPasteGeom.png'), self.tr(u"Insert geometry"), self.iface.mainWindow()) # connect the action to the run method QObject.connect(self.copy_action, SIGNAL("triggered()"), self.copy_geometry) QObject.connect(self.insert_action, SIGNAL("triggered()"), self.insert_geometry) # Add hotkeys self.iface.registerMainWindowAction(self.copy_action, "F7") self.iface.registerMainWindowAction(self.insert_action, "F8") # Add toolbar button and menu item self.iface.digitizeToolBar().addAction(self.copy_action) self.iface.digitizeToolBar().addAction(self.insert_action) self.iface.addPluginToVectorMenu(u"&Geometry copier", self.copy_action) self.iface.addPluginToVectorMenu(u"&Geometry copier", self.insert_action) # Add global signals QObject.connect(self.iface, SIGNAL('currentLayerChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.connect(self.iface.mapCanvas(), SIGNAL('selectionChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.connect(self.iface.actionToggleEditing(), SIGNAL('triggered()'), self.check_buttons_state) #iface.actionToggleEditing().triggered # init state self.check_buttons_state(None) def unload(self): self.iface.unregisterMainWindowAction(self.copy_action) self.iface.unregisterMainWindowAction(self.insert_action) self.iface.removePluginVectorMenu(u"&Geometry copier", self.copy_action) self.iface.removePluginVectorMenu(u"&Geometry copier", self.insert_action) self.iface.digitizeToolBar().removeAction(self.copy_action) self.iface.digitizeToolBar().removeAction(self.insert_action) QObject.disconnect(self.iface, SIGNAL('currentLayerChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.disconnect(self.iface.mapCanvas(), SIGNAL('selectionChanged(QgsMapLayer *)'), self.check_buttons_state) QObject.disconnect(self.iface.actionToggleEditing(), SIGNAL('triggered()'), self.check_buttons_state) def check_buttons_state(self, layer=None): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer): self.copy_action.setDisabled(True) self.insert_action.setDisabled(True) return sel_feat_count = layer.selectedFeatureCount() if sel_feat_count != 1: self.copy_action.setDisabled(True) self.insert_action.setDisabled(True) return self.copy_action.setEnabled(True) # copy button can be pressed! if not layer.isEditable( ) or not self._geom_buffer or self._geom_buffer.type( ) != layer.geometryType(): self.insert_action.setDisabled(True) return self.insert_action.setEnabled( True) # insert button can be pressed! (type geom??) def copy_geometry(self): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer): QMessageBox.information( None, self.tr('Geometry was not copied'), self.tr('Select any vector layer and feature!')) return sel_feat_count = layer.selectedFeatureCount() if sel_feat_count != 1: QMessageBox.information(None, self.tr('Geometry was not copied'), self.tr('Select one feature!')) return feature = layer.selectedFeatures()[0] self._geom_buffer = QgsGeometry(feature.geometry()) self.check_buttons_state() def insert_geometry(self): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer): QMessageBox.information( None, self.tr('Geometry can\'t be inserted'), self.tr( 'Select any vector layer and feature for inserting geom!')) return if not self._geom_buffer: QMessageBox.information(None, self.tr('Geometry can\'t be inserted'), self.tr('Buffer is empty!')) return if not layer.isEditable(): QMessageBox.critical(None, self.tr('Geometry can\'t be inserted'), self.tr('Layer is not editable!')) return if self._geom_buffer.type() != layer.geometryType( ): # and layer.geometryType() != 2: QMessageBox.critical( None, self.tr('Geometry can\'t be inserted'), self.tr('Target layer has other geometry type!')) return sel_feat_count = layer.selectedFeatureCount() if sel_feat_count != 1: QMessageBox.critical( None, self.tr('Geometry can\'t be inserted'), self.tr('Select one feature for inserting geom!')) return feature = layer.selectedFeatures()[0] layer.changeGeometry(feature.id(), QgsGeometry(self._geom_buffer)) self.iface.mapCanvas().refresh() def tr(self, text): return QCoreApplication.translate('GeometryCopier', text)
class Tool(QToolBar): def __init__(self,parent): QToolBar.__init__(self,parent) self.parent = parent self.action_NewProject = QAction(Icons.newprj, 'Project', self) self.action_NewProject.triggered.connect(self.parent.treeWidget.newProject) self.action_NewProject.setToolTip("Create a New Project") self.action_Open = QAction(Icons.open, 'Open', self) self.action_Open.triggered.connect(self.parent.fileOpen) self.action_Open.setToolTip("Open File") self.action_Save = QAction(Icons.save, 'Save', self) self.action_Save.setShortcut('Ctrl+S') self.action_Save.triggered.connect(self.parent.fileSave) self.action_Save.setToolTip("Save Current File") self.action_SaveAll = QAction(Icons.saveall, 'SaveAll', self) self.action_SaveAll.setShortcut('Ctrl+A') self.action_SaveAll.triggered.connect(self.parent.fileSaveAll) self.action_SaveAll.setToolTip("Save All Files") self.action_Build = QAction(Icons.thread_view, 'Build', self) self.action_Build.setShortcut('Ctrl+B') self.action_Build.triggered.connect(self.parent.build_project) self.action_Debug = QAction(Icons.debug_exec, 'Debug', self) self.action_Refresh = QAction(Icons.refresh_tab, 'Refresh', self) self.action_Refresh.triggered.connect(self.parent.treeWidget.refreshCurrentProject) self.action_Run = QAction(Icons.run, 'Run', self) self.action_Run.setShortcut('Ctrl+R') self.action_Run.triggered.connect(self.parent.adb.run) self.action_RunFile = QAction(Icons.go, 'Cmd', self) self.action_RunFile.triggered.connect(self.parent.openCommand) self.parent.runButton.clicked.connect(self.parent.command.setCmdLine) self.action_Stop = QAction(Icons.stop, 'Stop', self) self.action_Stop.setShortcut('Ctrl+Q') self.action_Stop.triggered.connect(self.parent.adb.stop) self.action_Design = QAction(Icons.color_palette, 'Design', self) self.action_Design.triggered.connect(self.parent.design) self.action_Level = QAction(Icons.cmpC_pal, 'Level', self) self.action_Level.triggered.connect(self.parent.level) self.action_Todo = QAction(Icons.task_set, 'Todo', self) self.action_Todo.triggered.connect(self.parent.todo) self.action_Help = QAction(Icons.toc_open, 'Help', self) self.action_Help.triggered.connect(self.parent.help) men = QMenu() #Threshold Slider self.threshSlider = QSlider() self.threshSlider.setTickPosition(QSlider.TicksLeft) self.threshSlider.setOrientation(Qt.Horizontal) self.threshSlider.setValue(config.thresh()) self.threshSlider.setMinimum(0) self.threshSlider.setMaximum(5) self.threshSlider.valueChanged.connect(self.parent.setThreshold) self.threshSliderAction = QWidgetAction(men) self.threshSliderAction.setDefaultWidget(self.threshSlider) #TabsWidth Slider self.tabsSlider = QSlider() self.tabsSlider.setTickPosition(QSlider.TicksLeft) self.tabsSlider.setOrientation(Qt.Horizontal) self.tabsSlider.setValue(config.tabwidth()) self.tabsSlider.setMinimum(0) self.tabsSlider.setMaximum(8) self.tabsSlider.valueChanged.connect(self.parent.setTabWidth) self.tabsSliderAction = QWidgetAction(men) self.tabsSliderAction.setDefaultWidget(self.tabsSlider) #iconSize Slider self.iconSlider = QSlider() self.iconSlider.setTickPosition(QSlider.TicksLeft) self.iconSlider.setOrientation(Qt.Horizontal) self.iconSlider.setValue(config.iconSize()) self.iconSlider.setMinimum(16) self.iconSlider.setMaximum(32) self.iconSlider.setSingleStep(2) self.iconSlider.valueChanged.connect(self.setIcon) self.iconSliderAction = QWidgetAction(men) self.iconSliderAction.setDefaultWidget(self.iconSlider) '''Font Button''' self.fontCombo = QFontComboBox() self.fontCombo.currentFontChanged.connect(self.parent.setFont) self.fontCombo.setCurrentFont(QFont(config.fontName())) self.fontComboMenu = QWidgetAction(men) self.fontComboMenu.setDefaultWidget(self.fontCombo) '''Font Size''' self.fontSizeCombo = QComboBox() for size in range(1,40): self.fontSizeCombo.addItem(str(size)) self.fontSizeCombo.setCurrentIndex(config.fontSize()) self.fontSizeCombo.currentIndexChanged.connect(self.parent.setFontSize) self.fontSizeComboMenu = QWidgetAction(men) self.fontSizeComboMenu.setDefaultWidget(self.fontSizeCombo) action_explorer = QAction("Show Explorer",self) action_explorer.triggered.connect(self.parent.exp) action_console = QAction("Show Console",self) action_console.triggered.connect(self.parent.cmd) action_designer = QAction("Show Designer",self) action_designer.triggered.connect(self.parent.design) action_Indentation = QAction("Indentation Guides",self) action_Indentation.triggered.connect(self.parent.setIndent) action_WhiteSpace = QAction("Show WhiteSpace",self) action_WhiteSpace.triggered.connect(self.parent.setWhiteSpace) action_EndLine = QAction("Show End of Lines",self) action_EndLine.triggered.connect(self.parent.setEndLine) action_Margin = QAction("Line Numbers",self) action_Margin.triggered.connect(self.parent.setMargin) action_ToolLabel = QAction("Tool Labels",self) action_ToolLabel.triggered.connect(self.setToolLabel) action_Android = QAction(Icons.android,'Android', self) action_Android.triggered.connect(self.parent.android) action_Ant = QAction(Icons.ant_view,'Ant', self) action_Ant.triggered.connect(self.parent.antt) action_Squirrel = QAction(Icons.nut,'Squirrel', self) action_Squirrel.triggered.connect(self.parent.squirrel) action_Ios1 = QAction(Icons.ios,'iOS', self) action_Update = QAction("Update",self) action_Update.triggered.connect(self.parent.update) '''Encoding''' encodingGroup = QActionGroup(self) encodingGroup.setExclusive(True) action_Ascii = QAction("Ascii",encodingGroup) action_Ascii.setCheckable(True) action_Unicode = QAction("Unicode",encodingGroup) action_Unicode.setCheckable(True) encodingGroup.addAction(action_Ascii) encodingGroup.addAction(action_Unicode) encodingGroup.selected.connect(self.parent.setEncoding) if(config.encoding() == Encoding.ASCII): action_Ascii.setChecked(True) else: action_Unicode.setChecked(True) men.addAction(action_Android) men.addAction(action_Ant) men.addAction(action_Squirrel) men.addAction(action_Ios1) men.addAction(action_Update) men.addSeparator() men.addAction(action_explorer) men.addAction(action_console) men.addAction(action_designer) men.addAction(action_Indentation) men.addAction(action_WhiteSpace) men.addAction(action_EndLine) men.addAction(action_Margin) men.addAction(action_ToolLabel) men.addSeparator() men.addActions(encodingGroup.actions()) men.addSeparator() head_font = QLabel("Font---------------------") fnt = head_font.font() fnt.setBold(True) head_font.setFont(fnt) head_fontWidgetAction = QWidgetAction(men) head_fontWidgetAction.setDefaultWidget(head_font) men.addAction(head_fontWidgetAction) men.addAction(self.fontComboMenu) men.addAction(self.fontSizeComboMenu) men.addSeparator() men.addAction(QAction("TabWidth",self)) men.addAction(self.tabsSliderAction) men.addSeparator() men.addAction(QAction("Threshold",self)) men.addAction(self.threshSliderAction) #men.addAction(QAction("Icon Size",self)) #men.addAction(self.iconSliderAction) self.action_Options = QAction(Icons.emblem_system, 'Options', self) self.action_Options.setMenu(men) self.action_Full = QAction(Icons.fullscreen, 'Full', self) self.action_Full.setShortcut('Shift+Enter') self.action_Full.triggered.connect(self.parent.full) self.modeGroup = QActionGroup(self) self.modeGroup.setExclusive(True) self.modeGroup.selected.connect(self.parent.setMode) self.action_Squirrel = QAction(Icons.nut, 'Squ', self.modeGroup) self.action_Squirrel.setCheckable(True) self.action_Emo = QAction(Icons.emo, 'Emo', self.modeGroup) self.action_Emo.setCheckable(True) self.action_And = QAction(Icons.android, 'Android', self.modeGroup) self.action_And.setCheckable(True) self.action_Ios = QAction(Icons.ios, 'ios', self.modeGroup) self.action_Ios.setCheckable(True) self.modeGroup.addAction(self.action_Squirrel) self.modeGroup.addAction(self.action_Emo) self.modeGroup.addAction(self.action_And) self.modeGroup.addAction(self.action_Ios) self.action_Style = QAction(Icons.style, 'Style', self) men1 = QMenu() self.styleslist = [] self.style1 = QAction("All Hallow's Eve",self) self.style1.triggered.connect(lambda:self.parent.style_clicked(1)) self.style1.setCheckable(True) self.style2 = QAction("Amy",self) self.style2.triggered.connect(lambda:self.parent.style_clicked(2)) self.style2.setCheckable(True) self.style3 = QAction("Aptana Studio",self) self.style3.triggered.connect(lambda:self.parent.style_clicked(3)) self.style3.setCheckable(True) self.style4 = QAction("Bespin",self) self.style4.triggered.connect(lambda:self.parent.style_clicked(4)) self.style4.setCheckable(True) self.style5 = QAction("Blackboard",self) self.style5.triggered.connect(lambda:self.parent.style_clicked(5)) self.style5.setCheckable(True) self.style6 = QAction("Choco",self) self.style6.triggered.connect(lambda:self.parent.style_clicked(6)) self.style6.setCheckable(True) self.style7 = QAction("Cobalt",self) self.style7.triggered.connect(lambda:self.parent.style_clicked(7)) self.style7.setCheckable(True) self.style8 = QAction("Dawn",self) self.style8.triggered.connect(lambda:self.parent.style_clicked(8)) self.style8.setCheckable(True) self.style9 = QAction("Eclipse",self) self.style9.triggered.connect(lambda:self.parent.style_clicked(9)) self.style9.setCheckable(True) self.styleslist.append(self.style1) self.styleslist.append(self.style2) self.styleslist.append(self.style3) self.styleslist.append(self.style4) self.styleslist.append(self.style5) self.styleslist.append(self.style6) self.styleslist.append(self.style7) self.styleslist.append(self.style8) self.styleslist.append(self.style9) men1.addActions(self.styleslist) self.action_Style.setMenu(men1) self.styleslist[self.parent.styleIndex].setChecked(True) self.action_Stop.setDisabled(True) self.setToolLabel() self.setAllowedAreas(Qt.AllToolBarAreas) #self.setFixedHeight(40) #self.setIconSize(QSize(config.iconSize(),config.iconSize())) self.addAction(self.action_NewProject) self.addAction(self.action_Open) self.addAction(self.action_Save) self.addAction(self.action_SaveAll) #self.addAction(self.action_Refresh) self.addSeparator() self.addAction(self.action_Build) self.addAction(self.action_Run) self.addAction(self.action_RunFile) self.addAction(self.action_Stop) self.addAction(self.action_Debug) self.addSeparator() self.addAction(self.action_Design) self.addAction(self.action_Level) self.addAction(self.action_Todo) self.addAction(self.action_Options) self.addAction(self.action_Style) self.addSeparator() self.addAction(self.action_Help) self.addAction(self.action_Full) self.addSeparator() self.addActions(self.modeGroup.actions()) if(config.mode() == 0): self.action_Squirrel.setChecked(True) elif(config.mode() == 1): self.action_Emo.setChecked(True) elif(config.mode() == 2): self.action_And.setChecked(True) elif(config.mode() == 3): self.action_Ios.setChecked(True) def setIcon(self,val): config.setIconSize(val) self.setIconSize(QSize(val,val)) def setToolLabel(self): if (config.toolLabel()): self.setToolButtonStyle(Qt.ToolButtonIconOnly) self.setIconSize(QSize(24,24)) else: self.setIconSize(QSize(16,16)) self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) '''Important for multiple callbacks in for loop''' def make_callback(self, param): return lambda:self.parent.setFontName(param)
class LiveCapture_ui(QObject): def __init__(self, parent = None): super(LiveCapture_ui, self).__init__(parent) self.parent = parent self.initUi() self.liveCapture = None self.packetDataUi = None ''' Description: Initialise the buttons and actions to control the live captring of data graphically. Add corresponding actions/tool buttons to toolbars/menubars of the mainWindow ''' def initUi(self): startPixmap = QPixmap(os.path.dirname(os.path.realpath(__file__)) + '/Start.png') stopPixmap = QPixmap(os.path.dirname(os.path.realpath(__file__)) + '/Stop.png') startIcon = QIcon(startPixmap) stopIcon = QIcon(stopPixmap) self.startToolButton = QToolButton(self.parent) self.stopToolButton = QToolButton(self.parent) self.startToolButton.setIcon(startIcon) self.stopToolButton.setIcon(stopIcon) self.startToolButton.setIconSize(QSize(32, 32)) self.stopToolButton.setIconSize(QSize(32, 32)) self.startToolButton.clicked.connect(self.startToolButtonClicked) self.stopToolButton.clicked.connect(self.stopToolButtonClicked) self.startAction = QAction("Start Live Capturing", self.parent) self.startAction.triggered.connect(self.startToolButtonClicked) self.stopAction = QAction("Stop Live Capture", self.parent) self.stopAction.triggered.connect(self.stopToolButtonClicked) # Setup initial values for the buttons/actions self.startToolButton.setEnabled(True) self.stopToolButton.setDisabled(True) self.startAction.setEnabled(True) self.stopAction.setDisabled(True) # Add Actions to the Menu bar menuCapture = self.parent.GetMenu("Capture") if menuCapture != None: menuCapture.addAction(self.startAction) menuCapture.addAction(self.stopAction) menuCapture.addSeparator() # Add tool buttons to the appropriate tool bar toolBarCapture = self.parent.GetToolBar("Capture") if toolBarCapture != None: toolBarCapture.addWidget(self.startToolButton) toolBarCapture.addWidget(self.stopToolButton) ''' Description: Obtain the interface to capture the data from. Check if user has appropriate privilege levels to start capturing data. Toggle tools in the GUI and initialise the packet capturing/display process in separate threads. ''' @pyqtSlot() def startToolButtonClicked(self): self.liveCapture = LiveCapture() iface = InterfaceSelection(self.parent) ifaceName = iface.GetInterface() if ifaceName == None: return self.liveCapture.setInterface(ifaceName) retVal = self.liveCapture.startLiveCapture() if retVal != -1: self.startToolButton.setDisabled(True) self.stopToolButton.setEnabled(True) self.startAction.setDisabled(True) self.stopAction.setEnabled(True) self.packetDataUi = PacketData_ui(self.parent) getPacketThread = GetPacketThread(self.liveCapture, self.packetDataUi) ''' Description: Notify the capturing thread to stop and toggle the buttons in the GUI ''' @pyqtSlot() def stopToolButtonClicked(self): self.startToolButton.setEnabled(True) self.stopToolButton.setDisabled(True) self.startAction.setEnabled(True) self.stopAction.setDisabled(True) self.liveCapture.stopLiveCapture() ''' Description: Description: Wrapper to trigger the Start capturing ''' def triggerStart(self): self.startAction.trigger() ''' Description: Description: Wrapper to trigger the Stop capturing ''' def triggerStop(self): self.stopAction.trigger()
class MainWindow(QMainWindow): """ class MainWindow for the gui of dokueddy """ def __init__(self, config, parent=None): """ Constructor for class MainWindow @param config: dokueddy configuration """ QMainWindow.__init__(self) self.config = config self.setGeometry( self.config.settings['app_x'], self.config.settings['app_y'], self.config.settings['app_w'], self.config.settings['app_h'] ) self.setWindowTitle( self.config.settings['appname'] + ' - Version: ' + self.config.settings['appversion'] ) globalFont = QFont( self.config.settings['fontfamily'], self.config.settings['pointsize'] ) self.statusbar = self.statusBar() self.center() self.exit = QAction('Quit Dokueddy', self) self.menubar = QMenuBar(None) self.file = self.menubar.addMenu('&File') self.file.addAction(self.exit) self.setMenuBar(self.menubar) self.save = QAction(QIcon('../resources/icons/save_edit.gif'), 'Save current page', self) self.save.setShortcut('Ctrl+S') self.save.setDisabled(True) self.fontBold = QAction(QIcon('../resources/icons/tag_bold.png'), 'Bold text', self) self.fontItalic = QAction(QIcon('../resources/icons/tag_i.png'), 'Italic text', self) self.fontH1 = QAction(QIcon('../resources/icons/tag_h1.png'), 'Heading 1', self) self.fontH2 = QAction(QIcon('../resources/icons/tag_h2.png'), 'Heading 2', self) self.fontH3 = QAction(QIcon('../resources/icons/tag_h3.png'), 'Heading 3', self) self.fontH4 = QAction(QIcon('../resources/icons/tag_h4.png'), 'Heading 4', self) self.fontH5 = QAction(QIcon('../resources/icons/tag_h5.png'), 'Heading 5', self) self.search = QAction(QIcon('../resources/icons/magnify.png'), 'Search for', self) self.toolbar = self.addToolBar('Toolbar') self.toolbar.addAction(self.save) self.toolbar.addSeparator() self.toolbar.addAction(self.fontBold) self.toolbar.addAction(self.fontItalic) self.toolbar.addAction(self.fontH1) self.toolbar.addAction(self.fontH2) self.toolbar.addAction(self.fontH3) self.toolbar.addAction(self.fontH4) self.toolbar.addAction(self.fontH5) self.toolbar.addAction(self.search) self.toolbar.setMaximumHeight(24) self.serverLabel = QLabel() self.serverLabel.setText('Serveraddress:') self.userLabel = QLabel() self.userLabel.setText('Username:'******'Password:'******'serverAddress']) self.userLineEdit = QLineEdit() self.userLineEdit.setMaximumSize(150, 35) self.userLineEdit.setText(self.config.settings['user']) self.passwdLineEdit = QLineEdit() self.passwdLineEdit.setMaximumSize(150, 35) self.passwdLineEdit.setEchoMode(QLineEdit.Password) self.connectButton = QPushButton('Connect', self) self.connectButton.setMaximumSize(100, 35) self.quitButton = QPushButton('Quit', self) self.quitButton.setMaximumSize(100, 35) self.listView = QListView(self) self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers) self.listView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.listView.setMinimumWidth(200) self.listView.setMaximumWidth(400) self.listView.setFont(globalFont) self.textEdit = QTextEdit(self) self.textEdit.setMinimumWidth(400) self.textEdit.setFont(globalFont) self.textEdit.setLineWrapMode(QTextEdit.NoWrap) self.editLayout = QGridLayout() self.editLayout.addWidget(self.serverLabel, 0, 0, Qt.AlignLeft) self.editLayout.addWidget(self.serverLineEdit, 0, 1) self.editLayout.addWidget(self.userLabel, 0, 2, Qt.AlignLeft) self.editLayout.addWidget(self.userLineEdit, 0, 3) self.editLayout.addWidget(self.passwdLabel, 0, 4, Qt.AlignLeft) self.editLayout.addWidget(self.passwdLineEdit, 0, 5) self.gridLayout = QGridLayout() self.gridLayout.addLayout(self.editLayout, 0, 0, 1, 2) self.gridLayout.addWidget(self.listView, 1, 0, Qt.AlignLeft) self.gridLayout.addWidget(self.textEdit, 1, 1, Qt.AlignLeft) self.gridLayout.addWidget(self.connectButton, 2, 0, Qt.AlignLeft) self.gridLayout.addWidget(self.quitButton, 2, 1, Qt.AlignRight) self.mainWidget = QWidget(self) self.mainWidget.setLayout(self.gridLayout) self.setCentralWidget(self.mainWidget) def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
class Window(QMainWindow): def __init__(self,parent = None): QMainWindow.__init__(self,parent) self.setObjectName("self") self.resize(758, 673) self.setWindowTitle("Sabel") self.setWindowIcon(Icons.sabel) self.centralwidget = QWidget(self) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout = QHBoxLayout(self.centralwidget) self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setMargin(0) self.styleIndex = styleIndex #TabWidgets self.tab_1 = QWidget(self) self.tab_1.setObjectName("tab_1") self.tab_1.setMinimumWidth(800) self.tabWidget = Tab(self.tab_1) self.tabWidget.setObjectName("tabWidget") self.VericalLayout = QVBoxLayout(self.tab_1) self.VericalLayout.setMargin(0) self.VericalLayout.setObjectName("VericalLayout") self.VericalLayout.addWidget(self.tabWidget) self.tabWidget_2 = QTabWidget(self) #self.tabWidget_2.setMaximumWidth(200) self.tabWidget_2.setObjectName("tabWidget_2") self.tabWidget_3 = QTabWidget(self) self.tabWidget_3.setMaximumHeight(260) self.tabWidget_3.setObjectName("tabWidget_3") #Tree self.tab_5 = QWidget() self.tab_5.setObjectName("tab_5") #self.tab_5.setMaximumWidth(200) self.VerticalLayout_2 = QVBoxLayout(self.tab_5)#QHBoxLayout(self.tab_5) self.VerticalLayout_2.setMargin(0) self.VerticalLayout_2.setObjectName("horizontalLayout_3") self.treeWidget = Tree(self.tab_5) self.treeWidget.setObjectName("treeWidget") self.treeWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.treeWidget.horizontalScrollBar().show() self.treebar = QToolBar() action_Folder = QAction(Icons.newfolder,'New Folder', self) action_Folder.triggered.connect(self.about) action_Android = QAction(Icons.android,'Android', self) action_Android.triggered.connect(self.android) action_Ant = QAction(Icons.ant_view,'Ant', self) action_Ant.triggered.connect(self.ant) self.treebar.addAction(action_Folder) self.treebar.addAction(action_Android) self.treebar.addAction(action_Ant) self.treebar.setIconSize(QSize(16,16)) self.VerticalLayout_2.addWidget(self.treebar) self.VerticalLayout_2.addWidget(self.treeWidget) #Outline self.tab_2 = QWidget() self.tab_2.setObjectName("tab_2") #self.tab_2.setMaximumWidth(200) self.VerticalLayout_3 = QVBoxLayout(self.tab_2) self.VerticalLayout_3.setMargin(0) self.VerticalLayout_3.setObjectName("VerticalLayout_3") self.outlineWidget = Tree(self.tab_2) self.outlineWidget.setObjectName("outlineWidget") self.VerticalLayout_3.addWidget(self.outlineWidget) #Output self.tab_6 = QWidget() self.tab_6.setObjectName("tab_6") #GGGGGGGGGGGGGGGGGGGG AWESOME self.horizontalLayout_2 = QVBoxLayout(self.tab_6) self.horizontalLayout_2.setMargin(0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.textEdit = QTextEdit(self.tab_6) self.textEdit.setObjectName("textEdit") self.lineeEdit = QLineEdit(self.tab_6) self.lineeEdit.setObjectName("lineeEdit") self.label = QLabel(self.tab_6) self.label.setText("Input:") self.horizontalLayout_2.addWidget(self.textEdit) self.horizontalLayout_2.addWidget(self.label) self.horizontalLayout_2.addWidget(self.lineeEdit) #Error self.tab_7 = QWidget() self.tab_7.setObjectName("tab_7") self.horizontalLayout_4 = QHBoxLayout(self.tab_7) self.horizontalLayout_4.setMargin(0) self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.textEdit_2 = QTextEdit(self.tab_7) self.textEdit_2.setObjectName("textEdit_2") self.horizontalLayout_4.addWidget(self.textEdit_2) #Find self.tab_8 = QWidget() self.tab_8.setObjectName("tab_8") self.horizontalLayout_5 = QHBoxLayout(self.tab_8) self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.lineEdit = QLineEdit(self.tab_8) self.lineEdit.setObjectName("lineEdit") self.lineEdit_2 = QLineEdit(self.tab_8) self.lineEdit_2.setObjectName("lineEdit_2") self.findClose = QPushButton(self.tab_8) self.findClose.setIcon(Icons.close_view) self.findClose.setFlat(True) self.findClose.clicked.connect(self.findBarShow) self.find = QPushButton(self.tab_8) self.find.setText("Find") self.find.clicked.connect(self.findCurrentText) self.replacefind = QPushButton(self.tab_8) self.replacefind.setText("Replace/Find") self.replace = QPushButton(self.tab_8) self.replace.setText("Replace") self.replace.clicked.connect(self.replaceCurrentText) self.replaceAll = QPushButton(self.tab_8) self.replaceAll.setText("Replace All") self.replaceAll.clicked.connect(self.replaceAllText) self.caseSensitive = QToolButton(self.tab_8) self.caseSensitive.setText("cs") self.caseSensitive.setCheckable(True) self.wholeWord = QToolButton(self.tab_8) self.wholeWord.setText("ww") self.wholeWord.setCheckable(True) self.regex = QToolButton(self.tab_8) self.regex.setText("re") self.regex.setCheckable(True) self.backward = QToolButton(self.tab_8) self.backward.setText("bk") self.backward.setCheckable(True) self.backward.setDisabled(True) self.horizontalLayout_5.addWidget(self.findClose) self.horizontalLayout_5.addWidget(self.find) self.horizontalLayout_5.addWidget(self.lineEdit) self.horizontalLayout_5.addWidget(self.lineEdit_2) self.horizontalLayout_5.addWidget(self.caseSensitive) self.horizontalLayout_5.addWidget(self.wholeWord) self.horizontalLayout_5.addWidget(self.regex) self.horizontalLayout_5.addWidget(self.backward) self.horizontalLayout_5.addWidget(self.replacefind) self.horizontalLayout_5.addWidget(self.replace) self.horizontalLayout_5.addWidget(self.replaceAll) self.horizontalLayout_5.setMargin(0) self.tab_8.setMaximumHeight(25) self.VericalLayout.addWidget(self.tab_8) self.tab_8.hide() self.tabWidget_2.addTab(self.tab_5,"Projects") self.tabWidget_2.addTab(self.tab_2,"Outline") self.tabWidget_3.addTab(self.tab_7,"Error") self.tabWidget_3.addTab(self.tab_6,"Output") self.tabWidget_3.setTabIcon(0,Icons.error) self.tabWidget_3.setTabIcon(1,Icons.console_view) self.tabWidget.setTabsClosable(True) self.tabWidget.setTabShape(0) #Splitters self.split1 = QSplitter(Qt.Horizontal) self.split1.addWidget(self.tabWidget_2) self.split1.addWidget(self.tab_1) #self.split1.addWidget(self.tab_5) self.split2 = QSplitter(Qt.Vertical) self.split2.addWidget(self.split1) self.split2.addWidget(self.tabWidget_3) self.tabWidget_3.hide() self.horizontalLayout.addWidget(self.split2) #Status self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.aboutButton = QPushButton(self) self.aboutButton.setFlat(True) self.aboutButton.setIcon(Icons.anchor) self.aboutButton.clicked.connect(self.about) self.cmdButton = QPushButton(self) self.cmdButton.setFlat(True) self.cmdButton.setIcon(Icons.console_view) self.cmdButton.clicked.connect(self.cmd) self.cmdButton.setShortcut('Ctrl+O') self.findButton = QPushButton(self) self.findButton.setFlat(True) self.findButton.setIcon(Icons.find) self.findButton.setShortcut("Ctrl+F") self.findButton.clicked.connect(self.findBarShow) self.zoominButton = QPushButton(self) self.zoominButton.setFlat(True) self.zoominButton.setIcon(Icons.zoomplus) self.zoominButton.clicked.connect(self.zoomin) self.zoomoutButton = QPushButton(self) self.zoomoutButton.setFlat(True) self.zoomoutButton.setIcon(Icons.zoomminus) self.zoomoutButton.clicked.connect(self.zoomout) self.fontButton = QPushButton(self) self.fontButton.setFlat(True) self.fontButton.setIcon(Icons.font) self.fontButton.clicked.connect(self.setFont) self.statusbar.addWidget(self.aboutButton) self.statusbar.addWidget(self.cmdButton) self.statusbar.addWidget(self.findButton) self.statusbar.addWidget(self.zoominButton) self.statusbar.addWidget(self.zoomoutButton) self.statusbar.addWidget(self.fontButton) #self.statusbar.setFixedHeight(18) #Init colorstyling self.colorStyle = None self.initColorStyle() #Init self.setCentralWidget(self.centralwidget) self.setStatusBar(self.statusbar) self.textEdit.setReadOnly(True) self.fontName = fontName #QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks')) def findBarShow(self): if(self.tab_8.isHidden()): self.tab_8.show() else: self.tab_8.hide() def initToolBar(self): self.action_NewProject = QAction(Icons.newprj, 'Project', self) self.action_NewProject.setShortcut('Ctrl+P') self.action_NewProject.triggered.connect(self.newProject) self.action_NewProject.setToolTip("Create a New Project") self.action_NewProject.setStatusTip("Create a New Project") self.action_Open = QAction(Icons.open, 'Open', self) self.action_Open.setShortcut('Ctrl+O') self.action_Open.triggered.connect(self.fileOpen) self.action_Open.setToolTip("Open File") self.action_Open.setStatusTip("Open File") self.action_Save = QAction(Icons.save, 'Save', self) self.action_Save.setShortcut('Ctrl+S') self.action_Save.triggered.connect(self.fileSave) self.action_Save.setToolTip("Save Current File") self.action_SaveAll = QAction(Icons.saveall, 'SaveAll', self) self.action_SaveAll.setShortcut('Ctrl+A') self.action_SaveAll.triggered.connect(self.fileSaveAll) self.action_SaveAll.setToolTip("Save All Files") self.action_Help = QAction(Icons.toc_open, 'Help', self) self.action_Help.triggered.connect(self.help) self.action_Run = QAction(Icons.run, 'Run', self) self.action_Run.setShortcut('Ctrl+R') self.action_Run.triggered.connect(self.adb.run) self.action_RunFile = QAction(Icons.go, 'File', self) self.action_RunFile.triggered.connect(self.command.setCmd) self.lineeEdit.returnPressed.connect(self.command.setCmdLine) self.action_Stop = QAction(Icons.stop, 'Stop', self) self.action_Stop.setShortcut('Ctrl+Q') self.action_Stop.triggered.connect(self.adb.stop) self.action_Design = QAction(Icons.task_set, 'Design', self) self.action_Todo = QAction(Icons.task_set, 'Todo', self) #self.action_Todo.triggered.connect(self.stop) #Only variation CHeck Later men = QMenu() self.threshSlider = QSlider() self.threshSlider.setTickPosition(QSlider.TicksLeft) self.threshSlider.setOrientation(Qt.Horizontal) self.threshSlider.setValue(threshold) self.threshSlider.setMinimum(0) self.threshSlider.setMaximum(5) self.threshSlider.valueChanged.connect(self.setThreshold) #self.threshSlider.setInvertedAppearance(True) self.threshSliderAction = QWidgetAction(men) self.threshSliderAction.setDefaultWidget(self.threshSlider) men.addAction(QAction("Ident",self)) men.addAction(QAction("Edit",self)) men.addAction(QAction("Paste",self)) men.addAction(QAction("Tabs",self)) men.addSeparator() men.addAction(QAction("Threshold",self)) men.addAction(self.threshSliderAction) self.action_Options = QAction(Icons.thread_view, 'Options', self) self.action_Options.setMenu(men) self.action_Options.triggered.connect(self.options) self.action_Full = QAction(Icons.fullscreen, 'Full', self) self.action_Full.setShortcut('Shift+Enter') self.action_Full.triggered.connect(self.full) self.action_Style = QAction(Icons.style, 'Style', self) men1 = QMenu() self.styleslist = [] self.style1 = QAction("All Hallow's Eve",self) self.style1.triggered.connect(lambda:self.style_clicked(1)) self.style1.setCheckable(True) self.style2 = QAction("Amy",self) self.style2.triggered.connect(lambda:self.style_clicked(2)) self.style2.setCheckable(True) self.style3 = QAction("Aptana Studio",self) self.style3.triggered.connect(lambda:self.style_clicked(3)) self.style3.setCheckable(True) self.style4 = QAction("Bespin",self) self.style4.triggered.connect(lambda:self.style_clicked(4)) self.style4.setCheckable(True) self.style5 = QAction("Blackboard",self) self.style5.triggered.connect(lambda:self.style_clicked(5)) self.style5.setCheckable(True) self.style6 = QAction("Choco",self) self.style6.triggered.connect(lambda:self.style_clicked(6)) self.style6.setCheckable(True) self.style7 = QAction("Cobalt",self) self.style7.triggered.connect(lambda:self.style_clicked(7)) self.style7.setCheckable(True) self.style8 = QAction("Dawn",self) self.style8.triggered.connect(lambda:self.style_clicked(8)) self.style8.setCheckable(True) self.style9 = QAction("Eclipse",self) self.style9.triggered.connect(lambda:self.style_clicked(9)) self.style9.setCheckable(True) self.styleslist.append(self.style1) self.styleslist.append(self.style2) self.styleslist.append(self.style3) self.styleslist.append(self.style4) self.styleslist.append(self.style5) self.styleslist.append(self.style6) self.styleslist.append(self.style7) self.styleslist.append(self.style8) self.styleslist.append(self.style9) men1.addActions(self.styleslist) self.action_Style.setMenu(men1) self.styleslist[self.styleIndex].setChecked(True) self.action_Stop.setDisabled(True) self.toolbar = self.addToolBar('ToolBar') self.toolbar.setIconSize(QSize(16,16)) self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.toolbar.setAllowedAreas(Qt.AllToolBarAreas) #self.toolbar.setFixedHeight(40) self.toolbar.addAction(self.action_NewProject) self.toolbar.addAction(self.action_Open) self.toolbar.addAction(self.action_Save) self.toolbar.addAction(self.action_SaveAll) self.toolbar.addSeparator() self.toolbar.addAction(self.action_Run) self.toolbar.addAction(self.action_RunFile) self.toolbar.addAction(self.action_Stop) self.toolbar.addSeparator() self.toolbar.addAction(self.action_Design) self.toolbar.addAction(self.action_Todo) self.toolbar.addAction(self.action_Options) self.toolbar.addAction(self.action_Style) self.toolbar.addSeparator() self.toolbar.addAction(self.action_Help) self.toolbar.addAction(self.action_Full) def about(self): QMessageBox.about(self, "About Sabel IDE", """ <b>Sabel</b> v%s <p> All rights reserved in accordance with GPL v3 or later. <p>This application can be used for Squirrel and EmoFramework Projects. <p>Squirrel Shell Copyright (c) 2006-2011, Constantin Makshin <p>Squirrel Copyright (c) Alberto Demichelis <p>zlib Copyright (c) Jean-loup Gailly and Mark Adler <p>Icons Copyright (c) Eclipse EPL <p>Emo-Framework Copyright (c) 2011 Kota Iguchi <p>Python %s - Qt %s - PyQt %s on %s <p>Created By: pyros2097 <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ % ( __version__,PY_VERSION, QT_VERSION_STR, PYQT_VERSION_STR,OS_NAME)) def help(self): QMessageBox.about(self, "About Simple Editor","This is The Help") def full(self): if not self.isFull: self.setWindowState(Qt.WindowFullScreen) self.isFull = True else: self.setWindowState(Qt.WindowMaximized) self.isFull = False def android(self): form = DialogAndroid(self) form.show() def ant(self): pass def cmd(self): if(self.tabWidget_3.isHidden()): self.tabWidget_3.show() else: self.tabWidget_3.hide() def findCurrentText(self): edt = self.tabWidget.widget(self.tabWidget.currentIndex()) edt.findText(self.lineEdit.text(),self.regex.isChecked(),self.caseSensitive.isChecked(),self.wholeWord.isChecked(),self.backward.isChecked()) def replaceCurrentText(self): edt = self.tabWidget.widget(self.tabWidget.currentIndex()) done = edt.findText(self.lineEdit.text(),self.regex.isChecked(),self.caseSensitive.isChecked(),self.wholeWord.isChecked(),self.backward.isChecked()) if(done): edt.replaceText(self.lineEdit_2.text()) else: QMessageBox.about(self, "About Sabel IDE","Could Not Find Text") return done def replaceAllText(self): edt = self.tabWidget.widget(self.tabWidget.currentIndex()) while(edt.findText(self.lineEdit.text(),self.regex.isChecked(),self.caseSensitive.isChecked(),self.wholeWord.isChecked(),self.backward.isChecked())): edt.replaceText(self.lineEdit_2.text()) def zoomin(self): for i in range(len(self.files)): self.tabWidget.widget(i).zoomin() def zoomout(self): for i in range(len(self.files)): self.tabWidget.widget(i).zoomout() def setFont(self): font = QFont() font.setFamily(self.fontName) fdialog = QFontDialog(self) fdialog.show() fdialog.setCurrentFont(font) fdialog.accepted.connect(lambda:self.setFontName(fdialog.currentFont())) def setFontName(self,font): #print "accepted" #print font.family() self.fontName = str(font.family()) config.setFontName(self.fontName) for i in range(len(self.files)): self.tabWidget.widget(i).setFontName(self.fontName) def setThreshold(self,val): config.setThresh(val) for i in range(len(self.files)): self.tabWidget.widget(i).setThreshold(val) def initColorStyle(self): self.colorStyle = Styles[self.styleIndex] pal = QPalette(self.tabWidget_2.palette()) #print pal.color(QPalette.Base).name() #print pal.color(QPalette.Window).name() pal.setColor(QPalette.Base,self.colorStyle.paper) pal.setColor(QPalette.Text,self.colorStyle.color) self.tabWidget_2.setPalette(pal) self.tabWidget_3.setPalette(pal) def style_clicked(self,no): self.styleIndex = no -1 #print self.styleIndex for i in self.styleslist: if self.styleslist.index(i) == self.styleIndex: i.setChecked(True) else: i.setChecked(False) config.setstyleIndex(self.styleIndex) #self.initColorStyle() for i in range(len(self.files)): pass #self.tabWidget. #self.tabWidget.widget(i).setColorStyle(self.colorStyle)