def add_widgets(self):
        # Main window with dock area
        self.dock_area = DockArea()
        self.setCentralWidget(self.dock_area)
        dock_run_config = Dock("Run configuration", size=(400, 400))
        # Docks
        dock_occcupancy = Dock("Occupancy", size=(400, 400))
        #dock_tti = Dock("tti",size=(400, 400))
        self.dock_area.addDock(dock_occcupancy)
        # Status widget
        cw = QtGui.QWidget()
        cw.setStyleSheet("QWidget {background-color:white}")
        layout = QtGui.QGridLayout()
        cw.setLayout(layout)

        # Run config dock
        self.run_conf_list_widget = Qt.QListWidget()
        dock_run_config.addWidget(self.run_conf_list_widget)

        # Global config dock
        self.global_conf_list_widget = Qt.QListWidget()

        # Different plot docks
        occupancy_graphics = pg.GraphicsLayoutWidget()
        occupancy_graphics.show()
        view = occupancy_graphics.addViewBox()
        self.occupancy_img = pg.ImageItem(border='w')

        view.addItem(self.occupancy_img)
        view.setRange(QtCore.QRectF(0, 0, 80, 336))
        dock_occcupancy.addWidget(occupancy_graphics)
Exemple #2
0
    def __init__(self):
        super().__init__()

        self.setWindowTitle('Sniff with scapy')

        self.lw_packet = Qt.QListWidget()

        self.cb_log = Qt.QCheckBox('Write log')
        self.cb_log.setChecked(True)

        self.pb_clear = Qt.QPushButton('Clear')
        self.pb_clear.clicked.connect(self.lw_packet.clear)

        self.cb_autoscroll = Qt.QCheckBox('Autoscroll')

        layout = Qt.QHBoxLayout()
        layout.addWidget(self.cb_log)
        layout.addWidget(self.cb_autoscroll)
        layout.addStretch()
        layout.addWidget(self.pb_clear)

        main_layout = Qt.QVBoxLayout()
        main_layout.addLayout(layout)
        main_layout.addWidget(self.lw_packet)

        central_widget = Qt.QWidget()
        central_widget.setLayout(main_layout)
        self.setCentralWidget(central_widget)

        self.thread = SniffThread()
        self.thread.about_new_data.connect(self._append_new_item)
        self.thread.start()
Exemple #3
0
    def __init__(self, title, **kwargs):
        """
        Create widget.

        Arguments:
            title (str): Category title.
            **kwargs: Arbitrary keyword arguments.
        """
        super(CategoryView, self).__init__(**kwargs)
        self._title = title
        self._expanded = True
        self._button = Q.QToolButton(self)
        self._button.setToolButtonStyle(Q.Qt.ToolButtonTextBesideIcon)
        self._button.setSizePolicy(Q.QSizePolicy.MinimumExpanding,
                                   Q.QSizePolicy.Fixed)
        self._list = Q.QListWidget(self)
        self._list.setTextElideMode(Q.Qt.ElideMiddle)
        self._list.setHorizontalScrollBarPolicy(Q.Qt.ScrollBarAlwaysOff)
        self._list.setVerticalScrollBarPolicy(Q.Qt.ScrollBarAlwaysOff)
        v_layout = Q.QVBoxLayout(self)
        v_layout.setContentsMargins(0, 0, 0, 0)
        v_layout.setSpacing(0)
        v_layout.addWidget(self._button)
        v_layout.addWidget(self._list)
        self._button.clicked.connect(self._toggled)
        self._list.itemSelectionChanged.connect(self._selectionChanged)
        self._list.itemDoubleClicked.connect(self._doubleClicked)
        self._adjustSize()
        self._updateState()
    def __init__(self):
        SettingsTabBase.__init__(self, "Presets")

        self.lw_directory = Qt.QListWidget()
        self.lw_directory.setMaximumHeight(100)

        self.pb_add = Qt.QPushButton(Qt.QIcon(":/add.png"), "")
        self.pb_remove = Qt.QPushButton(Qt.QIcon(":/remove.png"), "")
        self.pb_browse = Qt.QPushButton(Qt.QIcon(":/folder.png"), "")
        self.pb_reset = Qt.QPushButton(Qt.QIcon(":/reset.png"), "")

        self.pb_add.clicked.connect(self.add)
        self.pb_remove.clicked.connect(self.remove)
        self.pb_reset.clicked.connect(self.reset)
        self.pb_browse.clicked.connect(self.browse)

        bottom_layout = Qt.QHBoxLayout()
        bottom_layout.addWidget(self.pb_add)
        bottom_layout.addWidget(self.pb_remove)
        bottom_layout.addWidget(self.pb_browse)
        bottom_layout.addStretch()
        bottom_layout.addWidget(self.pb_reset)

        layout = Qt.QVBoxLayout()
        layout.addWidget(Qt.QLabel("Additionnal presets directory:"))
        layout.addWidget(self.lw_directory)
        layout.addLayout(bottom_layout)

        self.set_layout(layout)
Exemple #5
0
    def initUI(self):
        self.pathList = Qt.QListWidget()

        # Create Main Widgets
        self.createActions()
        self.createMenuBar()
        self.createToolBar()
        self.createStatusBar()

        # Create all connections after initializing
        self.createConnections()

        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('Dupliate File Finder')
        self.setCentralWidget(self.pathList)

        # Set delete option to false since no paths are set initially
        self.deletePathAct.setEnabled(False)

        self.show()
    def loadUI(self):

        self.win = Qt.QMainWindow()

        self.win.setWindowFlags(self.win.windowFlags() | Qt.Qt.Tool
                                | Qt.Qt.FramelessWindowHint | Qt.Qt.Popup)
        #self.win.keyPressEvent = self.keyEventCatcher

        self.mainWidget = Qt.QWidget()
        self.layout = Qt.QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)
        self.mainWidget.setContentsMargins(0, 0, 0, 0)
        self.win.setContentsMargins(0, 0, 0, 0)

        self.timer = Qt.QTimer()
        self.timer.setSingleShot(True)
        self.timer.timeout.connect(self.filterSuggestions)

        # The timer provides a delay of 200ms between user typing and list filtering

        self.entry = QEventCatcherEntry(catcher_fn=self.keyEventCatcher)
        self.entry.textEdited.connect(self.textEdited)
        self.layout.addWidget(self.entry)

        self.suggestion_list = Qt.QListWidget()
        self.suggestion_list.setSortingEnabled(False)
        self.layout.addWidget(self.suggestion_list)

        self.currentlySelectedIndex = Index(0, maxval=0)

        self.layout.setSizeConstraint(Qt.QLayout.SetFixedSize)
        self.mainWidget.setLayout(self.layout)
        self.win.setCentralWidget(self.mainWidget)

        self.adjustSizes()
    def add_widgets(self):
        # Main window with dock area
        self.dock_area = DockArea()
        self.setCentralWidget(self.dock_area)

        # Docks
        dock_occcupancy = Dock("Occupancy", size=(400, 400))
        dock_run_config = Dock("Run configuration", size=(400, 400))
        dock_global_config = Dock("Global configuration", size=(400, 400))
        dock_tot = Dock("ToT", size=(400, 400))
        dock_tdc = Dock("TDC", size=(400, 400))
        dock_tdc_distance = Dock("TDC distance", size=(400, 400))
        dock_event_status = Dock("Event status", size=(400, 400))
        dock_trigger_status = Dock("Trigger status", size=(400, 400))
        dock_service_records = Dock("Service records", size=(400, 400))
        dock_hit_timing = Dock("Hit timing (rel. BCID)", size=(400, 400))
        dock_status = Dock("Status", size=(800, 40))
        self.dock_area.addDock(dock_global_config, 'left')
        self.dock_area.addDock(dock_run_config, 'above', dock_global_config)
        self.dock_area.addDock(dock_occcupancy, 'above', dock_run_config)
        self.dock_area.addDock(dock_tdc_distance, 'right', dock_occcupancy)
        self.dock_area.addDock(dock_tdc, 'above', dock_tdc_distance)
        self.dock_area.addDock(dock_tot, 'above', dock_tdc)
        self.dock_area.addDock(dock_service_records, 'bottom', dock_occcupancy)
        self.dock_area.addDock(dock_trigger_status, 'above',
                               dock_service_records)
        self.dock_area.addDock(dock_event_status, 'above', dock_trigger_status)
        self.dock_area.addDock(dock_hit_timing, 'bottom', dock_tot)
        self.dock_area.addDock(dock_status, 'top')

        # Status widget
        cw = QtGui.QWidget()
        cw.setStyleSheet("QWidget {background-color:white}")
        layout = QtGui.QGridLayout()
        cw.setLayout(layout)
        self.rate_label = QtGui.QLabel("Readout Rate\n0 Hz")
        self.hit_rate_label = QtGui.QLabel("Hit Rate\n0 Hz")
        self.event_rate_label = QtGui.QLabel("Event Rate\n0 Hz")
        self.timestamp_label = QtGui.QLabel("Data Timestamp\n")
        self.plot_delay_label = QtGui.QLabel("Plot Delay\n")
        self.scan_parameter_label = QtGui.QLabel("Scan Parameters\n")
        self.spin_box = Qt.QSpinBox(value=1)
        self.spin_box.setMaximum(1000000)
        self.spin_box.setSuffix(" Readouts")
        self.reset_button = QtGui.QPushButton('Reset')
        layout.addWidget(self.timestamp_label, 0, 0, 0, 1)
        layout.addWidget(self.plot_delay_label, 0, 1, 0, 1)
        layout.addWidget(self.rate_label, 0, 2, 0, 1)
        layout.addWidget(self.hit_rate_label, 0, 3, 0, 1)
        layout.addWidget(self.event_rate_label, 0, 4, 0, 1)
        layout.addWidget(self.scan_parameter_label, 0, 5, 0, 1)
        layout.addWidget(self.spin_box, 0, 6, 0, 1)
        layout.addWidget(self.reset_button, 0, 7, 0, 1)
        dock_status.addWidget(cw)

        # Run config dock
        self.run_conf_list_widget = Qt.QListWidget()
        dock_run_config.addWidget(self.run_conf_list_widget)

        # Global config dock
        self.global_conf_list_widget = Qt.QListWidget()
        dock_global_config.addWidget(self.global_conf_list_widget)

        # Different plot docks
        occupancy_graphics = pg.GraphicsLayoutWidget()
        occupancy_graphics.show()
        view = occupancy_graphics.addViewBox()
        self.occupancy_img = pg.ImageItem(border='w')
        view.addItem(self.occupancy_img)
        view.setRange(QtCore.QRectF(0, 0, 80, 336))
        dock_occcupancy.addWidget(occupancy_graphics)

        tot_plot_widget = pg.PlotWidget(background="w")
        self.tot_plot = tot_plot_widget.plot(np.linspace(-0.5,
                                                         15.5,
                                                         17,
                                                         endpoint=True),
                                             np.zeros((16)),
                                             stepMode=True)
        tot_plot_widget.showGrid(y=True)
        dock_tot.addWidget(tot_plot_widget)

        tdc_plot_widget = pg.PlotWidget(background="w")
        self.tdc_plot = tdc_plot_widget.plot(np.linspace(-0.5,
                                                         4095.5,
                                                         4097,
                                                         endpoint=True),
                                             np.zeros((4096)),
                                             stepMode=True)
        tdc_plot_widget.showGrid(y=True)
        tdc_plot_widget.setXRange(0, 800, update=True)
        dock_tdc.addWidget(tdc_plot_widget)

        tdc_distance_plot_widget = pg.PlotWidget(background="w")
        self.tdc_distance_plot = tdc_distance_plot_widget.plot(np.linspace(
            -0.5, 255.5, 257, endpoint=True),
                                                               np.zeros((256)),
                                                               stepMode=True)
        tdc_distance_plot_widget.showGrid(y=True)
        tdc_distance_plot_widget.setXRange(0, 800, update=True)
        dock_tdc_distance.addWidget(tdc_distance_plot_widget)

        event_status_widget = pg.PlotWidget()
        self.event_status_plot = event_status_widget.plot(np.linspace(
            -0.5, 15.5, 17, endpoint=True),
                                                          np.zeros((16)),
                                                          stepMode=True)
        event_status_widget.showGrid(y=True)
        dock_event_status.addWidget(event_status_widget)

        trigger_status_widget = pg.PlotWidget()
        self.trigger_status_plot = trigger_status_widget.plot(np.linspace(
            -0.5, 7.5, 9, endpoint=True),
                                                              np.zeros((8)),
                                                              stepMode=True)
        trigger_status_widget.showGrid(y=True)
        dock_trigger_status.addWidget(trigger_status_widget)

        service_record_widget = pg.PlotWidget()
        self.service_record_plot = service_record_widget.plot(np.linspace(
            -0.5, 31.5, 33, endpoint=True),
                                                              np.zeros((32)),
                                                              stepMode=True)
        service_record_widget.showGrid(y=True)
        dock_service_records.addWidget(service_record_widget)

        hit_timing_widget = pg.PlotWidget()
        self.hit_timing_plot = hit_timing_widget.plot(np.linspace(
            -0.5, 15.5, 17, endpoint=True),
                                                      np.zeros((16)),
                                                      stepMode=True)
        hit_timing_widget.showGrid(y=True)
        dock_hit_timing.addWidget(hit_timing_widget)
Exemple #8
0
    def __init__(self, plugin, gui, icon):

        Qt.QDialog.__init__(self, gui)
        self.plugin = plugin
        self.gui = gui
        self.full_db = gui.current_db
        self.db = gui.current_db.new_api

        self.setWindowTitle(TITLE)
        self.setWindowIcon(icon)
        self.setWindowFlags(QtCore.Window | QtCore.WindowTitleHint
                            | QtCore.CustomizeWindowHint)

        self.layout = Qt.QVBoxLayout()
        self.setLayout(self.layout)

        self.search_label = Qt.QLabel('Enter text to search in content')
        self.layout.addWidget(self.search_label)

        self.search_text_layout = Qt.QHBoxLayout()

        self.search_textbox = Qt.QComboBox(self)
        self.search_textbox.setMinimumWidth(400)
        self.search_textbox.setEditable(True)
        self.search_textbox.setInsertPolicy(Qt.QComboBox.NoInsert)
        for _, value in sorted(prefs.get('search_lru', {}).items()):
            self.search_textbox.addItem(value)
        self.search_textbox.setEditText('')
        self.search_textbox.editTextChanged.connect(
            self.on_search_text_changed)
        self.search_label.setBuddy(self.search_textbox)
        self.search_text_layout.addWidget(self.search_textbox)

        self.search_help_button = Qt.QPushButton('?', self)
        fixed_size_policy = self.search_help_button.sizePolicy()
        fixed_size_policy.setHorizontalPolicy(QtWidgets.QSizePolicy.Fixed)
        self.search_help_button.setSizePolicy(fixed_size_policy)
        self.search_help_button.clicked.connect(self.on_search_help)
        self.search_text_layout.addWidget(self.search_help_button)

        self.layout.addLayout(self.search_text_layout)

        self.search_button = Qt.QPushButton('&Search', self)
        self.search_button.setEnabled(False)
        self.search_button.setDefault(True)
        self.search_button.clicked.connect(self.on_search)
        self.layout.addWidget(self.search_button)

        self.cancel_button = Qt.QPushButton('&Cancel', self)
        self.cancel_button.clicked.connect(self.on_cancel)
        self.cancel_button.setVisible(False)
        self.layout.addWidget(self.cancel_button)

        self.status_label = Qt.QLabel()
        self.status_label.setAlignment(QtCore.AlignCenter)
        self.layout.addWidget(self.status_label)

        self.progress_bar = Qt.QProgressBar(self)
        self.progress_bar.setVisible(False)
        retain_size_policy = self.progress_bar.sizePolicy()
        retain_size_policy.setRetainSizeWhenHidden(True)
        self.progress_bar.setSizePolicy(retain_size_policy)
        self.layout.addWidget(self.progress_bar)

        self.details_button = Qt.QPushButton('&Details', self)
        self.details_button.setVisible(False)
        retain_size_policy = self.details_button.sizePolicy()
        retain_size_policy.setRetainSizeWhenHidden(True)
        self.details_button.setSizePolicy(retain_size_policy)
        self.details_button.setFlat(True)
        self.details_button.setStyleSheet('text-align: left')
        icon = get_icons('images/right-arrow.png')
        self.details_button.setIcon(icon)
        self.details_button.clicked.connect(self.on_details)
        self.layout.addWidget(self.details_button)

        self.details = Qt.QListWidget(self)
        self.details.setVisible(False)
        self.layout.addWidget(self.details)

        self.layout.addStretch()

        self.reindex_layout = Qt.QHBoxLayout()

        self.reindex_button = Qt.QPushButton('&Reindex new books', self)
        self.reindex_button.clicked.connect(self.on_reindex)
        self.reindex_layout.addWidget(self.reindex_button)

        self.reindex_all_button = Qt.QPushButton('&Reindex all books', self)
        self.reindex_all_button.clicked.connect(self.on_reindex_all)
        self.reindex_layout.addWidget(self.reindex_all_button)

        self.layout.addLayout(self.reindex_layout)

        self.conf_button = Qt.QPushButton('&Options...', self)
        self.conf_button.clicked.connect(self.on_config)
        self.layout.addWidget(self.conf_button)

        self.readme_button = Qt.QPushButton('&Readme...', self)
        self.readme_button.clicked.connect(self.on_readme)
        self.layout.addWidget(self.readme_button)

        self.close_button = Qt.QPushButton('&Close', self)
        self.close_button.clicked.connect(self.close)
        self.layout.addWidget(self.close_button)

        self.thread_pool = Qt.QThreadPool()

        self.add_workers_submitted = 0
        self.add_workers_complete = 0

        self.delete_workers_submitted = 0
        self.delete_workers_complete = 0

        self.first_paint = True

        self.pdftotext_full_path = None

        if 'version' not in prefs:
            file_formats = set(prefs['file_formats'].split(',') +
                               ARCHIVE_FORMATS)
            prefs['file_formats'] = ','.join(file_formats)
            prefs['version'] = CapsPlugin.version
Exemple #9
0
    def __init__(self, *args):
        Qt.QMainWindow.__init__(self, *args)

        self.calibrator=None
        self.calibration=Calibration()
        d=AnalysisData()
        d.Tgamma=0.0
        """
        calibration values:
        Only the NE213 spectra are calibrated.
        Calibration is stored in a dict()
        The following keys are known:
        'EADC':      adc used for calibrating energy
        'TADC':      adc used for calibrating TOF
        'slope':     gamma calibration slope in MeVee/ch
        'intercept': gamma calibration intercept in MeVee
        'TAC':       TDC slope in ns/ch
        'Tgamma':    Time of gamma burst in raw TOF, used to calc T0 
        """
        self.mainwin=Qt.QSplitter(self)
        self.logwin=Qt.QListWidget(self)
        vlayout=Qt.QVBoxLayout()
        vlayout.addWidget(self.mainwin)
        label=self.makeLabel("Analysis log")
        vlayout.addWidget(label)
        vlayout.addWidget(self.logwin)
        self.setGeometry(10,10,1024,768)
        #self.setCentralWidget(self.mainwin)
        w=Qt.QWidget()
        w.setLayout(vlayout)
        self.setCentralWidget(w)
        logstream=ListLogger(self.logwin)
        loghandler=logging.StreamHandler(logstream)
        loghandler.setFormatter(logging.Formatter(fmt='%(asctime)s : %(levelname)s : %(message)s'))
        logger.addHandler(loghandler)
                
        self.filewidget=Qt.QWidget()
        vlayout=Qt.QVBoxLayout()
        from .fileentry import FilePicker
        self.filepick=FilePicker()
        label=self.makeLabel("Analysis Files")
        vlayout.addWidget(label)
        vlayout.addWidget(self.filepick)
        vlayout.setContentsMargins(1,1,1,1) # cut down margins from 11px
        self.filewidget.setLayout(vlayout)
        self.mainwin.addWidget(self.filewidget)

        self.taskwidget=Qt.QWidget()
        vlayout=Qt.QVBoxLayout()
        self.tasklist=Qt.QListWidget(self)
        self.tasklistitems={}  # keep a dict of these, may expand in future
        for task in analysis_tasks:
            item=Qt.QListWidgetItem(task,self.tasklist)
            item.setFlags(item.flags()&~QtCore.Qt.ItemIsEnabled)
            self.tasklistitems[task]=item
        self.tasklist.setDragDropMode(Qt.QAbstractItemView.InternalMove)
        label=self.makeLabel("Task list")
        vlayout.addWidget(label)
        vlayout.addWidget(self.tasklist)
        vlayout.setContentsMargins(1,1,1,1) # cut down margins from 11px
        self.taskwidget.setLayout(vlayout)
        self.mainwin.addWidget(self.taskwidget)

        # set up user interface
        self.setupMenuBar()
        # toolbar example code taken from dualscopeN.py
        toolBar = Qt.QToolBar(self)
        self.addToolBar(toolBar)
        sb=self.statusBar()
        sbfont=Qt.QFont("Helvetica",12)
        sb.setFont(sbfont)
        sb.showMessage("Status=1")

        # !! use addAction instead ?
        self.btnOpenExpt = Qt.QToolButton(toolBar)
        self.btnOpenExpt.setText("Open expt")
        self.btnOpenExpt.setIcon(Qt.QIcon(Qt.QPixmap(icons.stopicon)))
        #self.btnOpenExpt.setCheckable(True)
        self.btnOpenExpt.setToolButtonStyle(Qt.Qt.ToolButtonTextUnderIcon)
        self.btnOpenExpt.setToolTip("Open list of experiment file names")
        toolBar.addWidget(self.btnOpenExpt)
        
        self.btnSaveExpt = Qt.QToolButton(toolBar)
        self.btnSaveExpt.setText("Save expt")
        self.btnSaveExpt.setIcon(self.style().standardIcon(Qt.QStyle.SP_DriveFDIcon))
        self.btnSaveExpt.setToolButtonStyle(Qt.Qt.ToolButtonTextUnderIcon)
        self.btnSaveExpt.setToolTip("Save list of experiment file names")
        toolBar.addWidget(self.btnSaveExpt)

        """
        self.btnPrint = Qt.QToolButton(toolBar)
        self.btnPrint.setText("Print")
        self.btnPrint.setIcon(Qt.QIcon(Qt.QPixmap(icons.print_xpm)))
        self.btnPrint.setToolButtonStyle(Qt.Qt.ToolButtonTextUnderIcon)
        self.btnPrint.setToolTip("One day, may print something")
        toolBar.addWidget(self.btnPrint)
        """
        
        self.btnSaveData = Qt.QToolButton(toolBar)
        self.btnSaveData.setText("data")
        self.btnSaveData.setIcon(Qt.QIcon(packagepath[0]+"/images/drive.png"))
        self.btnSaveData.setToolButtonStyle(Qt.Qt.ToolButtonTextUnderIcon)
        self.btnSaveData.setToolTip("Save all histogram data to hdf file")
        toolBar.addWidget(self.btnSaveData)

        toolBar.addSeparator()

        self.maxeventcount=None

        self.lblMaxevent = Qt.QLabel("Max event count:",toolBar)
        self.lblMaxevent.setToolTip("Set maximum number of events sorted, or None")
        toolBar.addWidget(self.lblMaxevent)
        self.editMaxevent = Qt.QLineEdit(toolBar)
        self.editMaxevent.setFixedWidth(100)
        self.editMaxevent.editingFinished.connect(self.setMaxEvent)
        self.editMaxevent.setText("None")
        toolBar.addWidget(self.editMaxevent)
        
       # set up a model for spectra plots
        self.plotwidget=Qt.QWidget()
        vlayout=Qt.QVBoxLayout()
        self.plotview=PlotTreeView(self)
        self.plotmodel=PlotTreeModel(self)
        self.plotview.setModel(self.plotmodel)
        self.plotview.setDragDropMode(Qt.QAbstractItemView.InternalMove)
        label=self.makeLabel("Plot list")
        vlayout.addWidget(label)
        vlayout.addWidget(self.plotview)
        vlayout.setContentsMargins(1,1,1,1) # cut down margins from 11px
        self.plotwidget.setLayout(vlayout)
        self.mainwin.addWidget(self.plotwidget)

        # connect signals
        self.tasklist.doubleClicked.connect(self.runTask)
        self.filepick.fileChanged.connect(self.setFilePaths)
        self.filepick.dataChanged.connect(self.setAnalysisData)
        self.filepick.valueChanged.connect(self.setFilePaths)
        self.btnOpenExpt.clicked.connect(self.openFile)
        self.btnSaveExpt.clicked.connect(self.saveFile)
        self.btnSaveData.clicked.connect(self.saveDataAsHDF)
        self.bthread = None
    def _update_form(self):
        payload = self.session.first_payload
        if not isinstance(payload, aioxmpp.forms.Data):
            self.ui.form_widget.hide()
            return

        self.ui.form_widget.show()
        if payload.title:
            self.ui.title.show()
            self.ui.title.setText(payload.title)
        else:
            self.ui.title.hide()

        if payload.instructions:
            self.ui.instructions.show()
            self.ui.instructions.setText("<p>{}</p>".format("</p><p>".join(
                map(html.escape, payload.instructions))))
        else:
            self.ui.instructions.hide()

        if self.form_area is not None:
            self.ui.form_widget.layout().removeWidget(self.form_area)
            self.ui.form_widget.children().remove(self.form_area)
            self.form_area.deleteLater()

        self.form_area = Qt.QScrollArea()
        layout = Qt.QFormLayout()
        self.form_area.setLayout(layout)
        self.ui.form_widget.layout().addWidget(self.form_area)

        self.fieldmap = {}
        for field in payload.fields:
            if field.var == "FORM_TYPE":
                continue
            label, widget = None, None
            if field.type_ == aioxmpp.forms.FieldType.FIXED:
                label = Qt.QLabel(field.values[0])
                layout.addRow(label)
            elif field.type_ in {
                    aioxmpp.forms.FieldType.LIST_SINGLE,
                    aioxmpp.forms.FieldType.LIST_MULTI
            }:
                label = Qt.QLabel(field.label)
                widget = Qt.QListWidget()
                for opt_value, opt_label in sorted(field.options.items()):
                    item = Qt.QListWidgetItem(opt_label, widget)
                    item.setData(Qt.Qt.UserRole, opt_value)
                    widget.addItem(item)

                if field.type_.is_multivalued:
                    widget.setSelectionMode(
                        Qt.QAbstractItemView.MultiSelection)
                else:
                    widget.setSelectionMode(
                        Qt.QAbstractItemView.SingleSelection)
                layout.addRow(label, widget)

            elif field.type_ in {
                    aioxmpp.forms.FieldType.TEXT_SINGLE,
                    aioxmpp.forms.FieldType.JID_SINGLE
            }:
                label = Qt.QLabel(field.label)
                widget = Qt.QLineEdit()
                if field.values:
                    widget.setText(field.values[0])
                layout.addRow(label, widget)

            elif field.type_ in {aioxmpp.forms.FieldType.TEXT_PRIVATE}:
                label = Qt.QLabel(field.label)
                widget = Qt.QLineEdit()
                widget.setEchoMode(Qt.QLineEdit.Password)
                widget.setInputMethodHints(Qt.Qt.ImhHiddenText
                                           | Qt.Qt.ImhNoPredictiveText
                                           | Qt.Qt.ImhNoAutoUppercase)
                if field.values:
                    widget.setText(field.values[0])
                layout.addRow(label, widget)

            elif field.type_ in {
                    aioxmpp.forms.FieldType.TEXT_MULTI,
                    aioxmpp.forms.FieldType.JID_MULTI
            }:
                label = Qt.QLabel(field.label)
                widget = Qt.QTextEdit()
                widget.setText("\n".join(field.values))
                widget.setAcceptRichText(False)
                layout.addRow(label, widget)

            else:
                self.fail("unhandled field type: {}".format(field.type_))

            self.fieldmap[field.var] = label, widget
Exemple #11
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'ipetrash'

from PyQt5 import Qt

app = Qt.QApplication([])

w = Qt.QListWidget()
w.addItems(['item #{}'.format(_) for _ in range(100)])
w.setStyleSheet("""
QScrollBar:vertical {
    border: 2px solid grey;
    background: #32CC99;
}
""")

w.show()

app.exec()