예제 #1
0
    def _createGroupWidget(self,
                           title,
                           header,
                           widget_group,
                           wid_type='groupbox'):
        scr_area_wid = QWidget(self)
        scr_area_wid.setObjectName('scr_ar_wid')
        scr_area_wid.setStyleSheet(
            '#scr_ar_wid {background-color: transparent;}')
        w_lay = QVBoxLayout(scr_area_wid)
        w_lay.setSpacing(0)
        w_lay.setContentsMargins(0, 0, 0, 0)
        for widget in widget_group:
            w_lay.addWidget(widget, alignment=Qt.AlignLeft)
        w_lay.addStretch()

        scr_area = QScrollArea(self)
        scr_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scr_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scr_area.setWidgetResizable(True)
        scr_area.setFrameShape(QFrame.NoFrame)
        scr_area.setWidget(scr_area_wid)

        wid = QGroupBox(title, self) if wid_type == 'groupbox' \
            else QWidget(self)
        gb_lay = QVBoxLayout(wid)
        gb_lay.addWidget(header, alignment=Qt.AlignLeft)
        gb_lay.addWidget(scr_area)
        return wid
예제 #2
0
    def _create_deltadelay(self):
        gb = QGroupBox('Delta Delay')
        lay = QVBoxLayout(gb)
        sc_area = QScrollArea()
        sc_area.setWidgetResizable(True)
        sc_area.setFrameShape(QFrame.NoFrame)
        lay.addWidget(sc_area)

        wid = QWidget(sc_area)
        wid.setObjectName('wid')
        wid.setStyleSheet('#wid {background-color: transparent;}')
        sc_area.setWidget(wid)

        lay = QGridLayout(wid)
        lay.setAlignment(Qt.AlignTop)
        lay.addWidget(QLabel('<h4>Low Level</h4>'), 0, 0, Qt.AlignCenter)
        lay.addWidget(QLabel('<h4>SP [us]</h4>'), 0, 1, Qt.AlignCenter)
        lay.addWidget(QLabel('<h4>RB [us]</h4>'), 0, 2, Qt.AlignCenter)
        ll_obj_names = HLTimeSearch.get_ll_trigger_names(
            self.device.device_name)
        for idx, obj in enumerate(ll_obj_names, 1):
            nam = QLabel(obj, wid)
            spin = _SpinBox(wid,
                            init_channel=self.get_pvname('DeltaDelay-SP'),
                            index=idx - 1)
            spin.setStyleSheet('min-width:7em;')
            lbl = _Label(wid,
                         init_channel=self.get_pvname('DeltaDelay-SP'),
                         index=idx - 1)
            lbl.setStyleSheet('min-width:6em;')
            lay.addWidget(nam, idx, 0)
            lay.addWidget(spin, idx, 1)
            lay.addWidget(lbl, idx, 2)
        sc_area.setSizeAdjustPolicy(QScrollArea.AdjustToContentsOnFirstShow)
        sc_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        return gb
예제 #3
0
    def setupUi(self):
        self.my_layout = QVBoxLayout(self)
        self.my_layout.setContentsMargins(6, 10, 6, 0)

        if self.has_search:
            hbl = QHBoxLayout()
            hbl.setSpacing(0)
            self.my_layout.addLayout(hbl)
            # Create search bar
            self.search_lineedit = QLineEdit(parent=self)
            hbl.addWidget(self.search_lineedit)
            self.search_lineedit.setPlaceholderText("Search...")
            self.search_lineedit.textEdited.connect(self.filter_lines)
            # Create search menu
            pbt = QPushButton('  ', self)
            pbt.setToolTip('Choose which columns to show')
            pbt.setObjectName('but')
            pbt.setIcon(qta.icon('mdi.view-column'))
            pbt.setStyleSheet("""
                #but{
                    min-width:35px; max-width:35px;
                    min-height:25px; max-height:25px;
                    icon-size:25px;
                }""")
            hbl.addWidget(pbt)
            self.search_menu = QMenu(pbt)
            self.search_menu.triggered.connect(self.filter_lines)
            pbt.setMenu(self.search_menu)
            for prop in self._ALL_PROPS:
                act = self.search_menu.addAction(prop)
                act.setCheckable(True)
                act.setChecked(prop in self.props)
                act.toggled.connect(self.filter_columns)

        # Create header
        header = QWidget()
        headerlay = QHBoxLayout(header)
        headerlay.setContentsMargins(0, 0, 0, 0)
        self.my_layout.addWidget(header, alignment=Qt.AlignLeft)
        objs = self.getLine(header=True)
        for prop, obj in objs:
            name = obj.objectName()
            obj.setStyleSheet("""
                #{0:s}{{
                    min-width:{1:.1f}em; max-width: {1:.1f}em;
                    min-height:1.8em; max-height:1.8em;
                }}""".format(name, self._MIN_WIDs[prop]))
            headerlay.addWidget(obj)

        # Create scrollarea
        sc_area = QScrollArea()
        sc_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        sc_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        sc_area.setWidgetResizable(True)
        sc_area.setFrameShape(QFrame.NoFrame)
        self.my_layout.addWidget(sc_area)

        # ScrollArea Widget
        wid = QWidget()
        wid.setObjectName('wid')
        wid.setStyleSheet('#wid {background-color: transparent;}')
        lay = QVBoxLayout(wid)
        lay.setSpacing(0)
        lay.setContentsMargins(0, 0, 0, 0)
        lay.setAlignment(Qt.AlignTop)
        sc_area.setWidget(wid)

        self.lines = dict()
        self.filtered_lines = set()
        for obj_name in self.obj_names:
            pref = _PVName(obj_name).substitute(prefix=self.prefix)
            objs = self.getLine(pref)
            self.lines[pref] = objs
            self.filtered_lines.add(pref)
            lwid = QWidget()
            hlay = QHBoxLayout(lwid)
            hlay.setContentsMargins(0, 0, 0, 0)
            for prop, obj in objs:
                name = obj.objectName()
                obj.setStyleSheet("""
                    #{0:s}{{
                        min-width:{1:.1f}em; max-width: {1:.1f}em;
                    }}""".format(name, self._MIN_WIDs[prop]))
                hlay.addWidget(obj)
            lay.addWidget(lwid, alignment=Qt.AlignLeft)
예제 #4
0
파일: plugin.py 프로젝트: TTorpin/specviz
class Plugin(QDockWidget):
    """
    Base object for plugin infrastructure.
    """
    location = 'hidden'
    priority = 1

    def __init__(self, parent=None):
        super(Plugin, self).__init__(parent)
        # Initialize this plugin's actions list
        self._actions = []

        # Keep a reference to the active sub window
        self._active_window = None
        self._current_layer = None

        DispatchHandle.setup(self)

        # GUI Setup
        self.setAllowedAreas(Qt.AllDockWidgetAreas)

        self.scroll_area = QScrollArea()
        self.scroll_area.setFrameShape(QFrame.NoFrame)
        self.scroll_area.setFrameShadow(QFrame.Plain)
        self.scroll_area.setLineWidth(0)
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area.setGeometry(QRect(0, 0, 100, 100))
        # self.scroll_area.setSizePolicy(
        #     QSizePolicy.Fixed, QSizePolicy.Fixed)
        # self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        # self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

        # The main widget inside the scroll area
        self.contents = QWidget()

        self.scroll_area.setWidget(self.contents)

        self.setWidget(self.scroll_area)
        self.setWindowTitle(self.name)

        self.setup_ui()
        self.setup_connections()

    def _set_name(self, value):
        if isinstance(value, str):
            self.name = value
        else:
            raise TypeError("Inappropriate type for 'name' property.")

    def _get_name(self):
        return self.name

    name = abstractproperty(_set_name, _get_name)

    @abstractmethod
    def setup_ui(self):
        raise NotImplementedError()

    @abstractmethod
    def setup_connections(self):
        raise NotImplementedError()

    def _dict_to_menu(self, menu_dict, menu_widget=None):
        if menu_widget is None:
            menu_widget = QMenu()

        for k, v in menu_dict.items():
            if isinstance(v, dict):
                new_menu = menu_widget.addMenu(k)
                self._dict_to_menu(v, menu_widget=new_menu)
            else:
                act = QAction(k, menu_widget)

                if isinstance(v, list):
                    if v[0] == 'checkable':
                        v = v[1]
                        act.setCheckable(True)
                        act.setChecked(True)

                act.triggered.connect(v)
                menu_widget.addAction(act)

        return menu_widget

    def add_tool_bar_actions(self, icon_path, name="", category=None,
                             description="", priority=0, enabled=True,
                             callback=None, menu=None):
        icon = QIcon(icon_path)

        if menu is not None:
            tool_button = QToolButton()
            tool_button.setPopupMode(QToolButton.MenuButtonPopup)

            menu_widget = self._dict_to_menu(menu)

            tool_button.setMenu(menu_widget)
            tool_button.setIcon(icon)
            tool_button.setText(name)
            tool_button.setStatusTip(description)
            tool_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

            item = QWidgetAction(self)
            item.setDefaultWidget(tool_button)
            item.setEnabled(enabled)
        else:
            item = QAction(self)
            item.triggered.connect(callback if callback is not None else
                                     lambda: None)
            item.setIcon(icon)
            item.setStatusTip(description)
            item.setEnabled(enabled)
            item.setText(name)

        self._actions.append(dict(action=item,
                                  category=(category, 0) if not isinstance(
                                      category, tuple) else category,
                                  priority=priority))

        return item

    @property
    def active_window(self):
        return self._active_window

    @property
    def current_layer(self):
        return self._current_layer

    @DispatchHandle.register_listener("on_activated_window")
    def set_active_window(self, window):
        self._active_window = window

    @DispatchHandle.register_listener("on_selected_layer")
    def set_active_layer(self, layer_item):
        if layer_item is not None:
            self._current_layer = layer_item.data(0, Qt.UserRole)
        else:
            self._current_layer = None