示例#1
0
    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))
示例#2
0
 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())
示例#3
0
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
            })