def add_list_box(self, choicesL, name='isBell', init_val=3, advance_n=True, fulldesc='Nozzle Geometry', connect_function=None, text_font=ARIAL_10, col=0): NRow = self.get_next_row_number(advance_n) # Need to change next row number by length of choicesL if advance_n: for i in range(1, len(choicesL)): self.get_next_row_number(advance_n) self.selection_textD[name] = '' listWidget = QListWidget() for i, choice in enumerate(choicesL): item = QListWidgetItem(choice) listWidget.addItem(item) if i == init_val: #item.setChecked(True) listWidget.setItemSelected(item, True) self.selection_textD[name] = choice #listWidget.setCurrentRow( init_val ) self.grid.addWidget(listWidget, NRow, col, len(choicesL), 1) self.objectD['%s_list_box' % name] = listWidget self.input_widget_by_nameD[name] = (listWidget, 'list_box_list') listWidget.itemClicked.connect( lambda: self.list_box_changed('%s_list_box' % name))
def add_list_box(self, choicesL, name='isBell', init_val=3, layout=None, advance_n=True, fulldesc='Nozzle Geometry', connect_function=None, text_font=ARIAL_10, col=0, parent=None, fit_size_to_contents=True, width=1, height=1): # if parent is input, add widget to parent if parent is None: parent = self if layout is None: NRow = parent.get_next_row_number(advance_n) # Need to change next row number by length of choicesL #if advance_n: # for i in range(1, len(choicesL)): # parent.get_next_row_number(advance_n) self.selection_textD[name] = '' listWidget = QListWidget() for i,choice in enumerate( choicesL ): item = QListWidgetItem(choice) listWidget.addItem(item) if i == init_val: #item.setChecked(True) listWidget.setItemSelected( item, True ) self.selection_textD[name] = choice if fulldesc: vbox = QtGui.QVBoxLayout() lbl = QLabel(fulldesc, parent) lbl.setFont( text_font ) vbox.addWidget( lbl ) self.objectD['%s_listbox_label'%name] = lbl self.input_widget_by_nameD['%s_listbox_label'%name] = (lbl , 'label') vbox.addWidget( listWidget ) grid_child = QtGui.QWidget() grid_child.setLayout(vbox) vbox.addStretch(1) else: grid_child = listWidget if layout is None: if width==1 and height==1: parent.grid.addWidget(grid_child, NRow, col) else: parent.grid.addWidget(grid_child, NRow, col, height, width) #parent.grid.addWidget(grid_child, NRow, col, len(choicesL), 1) else: layout.addWidget( grid_child ) self.objectD['%s_list_box'%name] = listWidget self.input_widget_by_nameD[name] = (listWidget , 'list_box_list') listWidget.itemClicked.connect( lambda: self.list_box_changed( '%s_list_box'%name ) ) if fit_size_to_contents: listWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) listWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) listWidget.setFixedSize(listWidget.sizeHintForColumn(0) + 2 * listWidget.frameWidth(), listWidget.sizeHintForRow(0) * listWidget.count() + \ 2 * listWidget.frameWidth())
class settingsDlg(QDialog): def __init__(self, settings, parent=None): super(settingsDlg, self).__init__(parent) self.setAttribute( Qt.WA_DeleteOnClose) #dialog will be deleted rather than hidden self.settingsDialog = self self.settings = settings self.create_widgets() self.layout_widgets() self.dump_dirSettingFrame.hide() self.barSettingFrame.hide() self.create_connections() self.readSettingsData() self.setWindowTitle("yavol settings") def create_widgets(self): self.TableLabel1 = QLabel("Settings") self.ListOfSettings = QListWidget() self.buttonBox = QDialogButtonBox(QDialogButtonBox.Apply | QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.layout().setDirection(QBoxLayout.RightToLeft) #yara scan settings frame self.yaraSettingFrame = QFrame() self.dump_dirSettingFrame = QFrame() self.barSettingFrame = QFrame() self.labelRulesPath = QLabel('Path to YARA rules:') self.inputRulesPath = QLineEdit() self.labelFoo = QLabel('Path to dumps:') self.inputDumpDirPath = QLineEdit() self.labelBar = QLabel('Just BAR as usual') def layout_widgets(self): hLayoutButton = QHBoxLayout() hLayoutButton.addWidget(self.buttonBox) hLayoutButton.addStretch() vLayoutSettingsLeft = QVBoxLayout() vLayoutSettingsLeft.addWidget(self.TableLabel1) vLayoutSettingsLeft.addWidget(self.ListOfSettings) #yara setting frame layout frameLayout = QGridLayout() frameLayout.addWidget(self.labelRulesPath, 0, 0) frameLayout.addWidget(self.inputRulesPath, 0, 1) self.yaraSettingFrame.setLayout(frameLayout) #foo settings frame frameLayoutFoo = QGridLayout() frameLayoutFoo.addWidget(self.labelFoo, 0, 0) frameLayoutFoo.addWidget(self.inputDumpDirPath, 0, 1) self.dump_dirSettingFrame.setLayout(frameLayoutFoo) #bar settings frame frameLayoutBar = QVBoxLayout() frameLayoutBar.addWidget(self.labelBar) self.barSettingFrame.setLayout(frameLayoutBar) settingWindowsLayout = QGridLayout() settingWindowsLayout.addLayout(vLayoutSettingsLeft, 0, 0) settingWindowsLayout.addWidget(self.yaraSettingFrame, 0, 1) settingWindowsLayout.addWidget(self.dump_dirSettingFrame, 0, 1) settingWindowsLayout.addWidget(self.barSettingFrame, 0, 1) settingWindowsLayout.addLayout(hLayoutButton, 1, 0) ''' ################################################# <-| # vbox # vbox # | # listOption# yaraframe # | grid # # # | # # # | ################################################# | # vbox button # | ################################################# <-| ''' self.setLayout(settingWindowsLayout) def create_connections(self): self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.buttonBox.button(QDialogButtonBox.Apply).clicked.connect( self.apply) self.ListOfSettings.selectionModel().currentChanged.connect( self.setFrameVisibility) def accept(self): self.saveSettingsData() QDialog.accept(self) def apply(self): self.saveSettingsData() def setFrameVisibility(self, current, previous): if not previous.row() == -1: #hide previous frame and set current visible previous = str(self.ListOfSettings.item( previous.row()).text()) + "SettingFrame" previous = getattr(self, previous) previous.hide() #set the current visible current = str(self.ListOfSettings.item( current.row()).text()) + "SettingFrame" current = getattr(self, current) current.show() #print "Current: ", str(current.row()), self.ListOfSettings.item(current.row()).text() #print "Previous: ", str(previous.row()), self.ListOfSettings.item(previous.row()).text() #self.yaraSettingFrame.setVisible(False) def readSettingsData(self): settings = QSettings() settings_dict = settings.value('dictionary').toPyObject() # DEBUG #pp = pprint.PrettyPrinter(indent=4) #pp.pprint(settings_dict) for key in settings_dict: item = QListWidgetItem((QString("%1").arg(key))) self.ListOfSettings.addItem(item) if key == "yara": #set yara option to be 'pre-selected' self.ListOfSettings.setItemSelected(item, True) path_to_rules = settings_dict[QString('yara')][QString( 'rules_dir')][QString('path')] self.inputRulesPath.setText(path_to_rules) if key == "dump_dir": path_to_dump = settings_dict[QString('dump_dir')] self.inputDumpDirPath.setText(path_to_dump) def saveSettingsData(self): settings = QSettings() #get values of yara setting path_to_rules = self.inputRulesPath.text() #get value of the dump_dir input path_to_dump_dir = self.inputDumpDirPath.text() settings.setValue( 'dictionary', { 'yara': { 'rules_dir': { 'path': path_to_rules } }, 'dump_dir': path_to_dump_dir, 'bar': 2 })