Beispiel #1
0
def create_donate_widget(button):
    w = QWidget()
    w.setLayout(QVBoxLayout())
    w.layout().addWidget(button)
    if isosx:
        w.setStyleSheet('QWidget, QToolButton {background-color: none; border: none; }')
        w.layout().setContentsMargins(0,0,0,0)
        w.setContentsMargins(0,0,0,0)
        w.filler = QLabel(u'\u00a0')
        w.layout().addWidget(w.filler)
    return w
Beispiel #2
0
def create_donate_widget(button):
    w = QWidget()
    w.setLayout(QVBoxLayout())
    w.layout().addWidget(button)
    if isosx:
        w.setStyleSheet(
            'QWidget, QToolButton {background-color: none; border: none; }')
        w.layout().setContentsMargins(0, 0, 0, 0)
        w.setContentsMargins(0, 0, 0, 0)
        w.filler = QLabel(u'\u00a0')
        w.layout().addWidget(w.filler)
    return w
Beispiel #3
0
class TDockWidget(QDockWidget):

    def __init__(self, title="", parent=None, flags=Qt.WindowFlags(), bind_widget=None, close_slot=None, toggle_slot=None):
        QDockWidget.__init__(self, title, parent, flags)
        self.installEventFilter(self)
        self.main_win = parent
        # default stlyesheets for title bars
        self.title_stylesheet = "QWidget {background: rgb(68,68,68);}"
        self.button_style = "QPushButton:hover:!pressed {background: grey;}"
        from TigGUI.Images.ControlDialog import ImageControlDialog
        from TigGUI.Plot.SkyModelPlot import ToolDialog
        from TigGUI.Plot.SkyModelPlot import LiveImageZoom
        if bind_widget is not None:
            self.bind_widget = bind_widget
        if bind_widget is not None:
            if isinstance(bind_widget, ToolDialog):
                self.tdock_style = "ToolDialog {border: 1.5px solid rgb(68,68,68);}"
            elif isinstance(bind_widget, ImageControlDialog):
                self.tdock_style = "ImageControlDialog {border: 1.5px solid rgb(68,68,68);}"
        # set default sizes for QDockWidgets
        self.btn_w = 28
        self.btn_h = 28
        self.icon_size = QSize(20, 20)
        self.font_size = 8
        # setup custom title bar for profiles dockable
        self.dock_title_bar = QWidget()
        self.dock_title_bar.setContentsMargins(0, 0, 0, 0)
        self.dock_title_bar.setStyleSheet(self.title_stylesheet)
        self.dock_title_bar.setBaseSize(0, 0)
        self.dock_title_layout = QHBoxLayout()
        self.dock_title_layout.setContentsMargins(0, 0, 0, 0)
        self.dock_title_layout.setSpacing(0)
        self.dock_title_bar.setLayout(self.dock_title_layout)
        # custom close button
        self.close_button = QPushButton()
        self.close_button.setStyleSheet(self.button_style)
        self.close_button.setMaximumWidth(self.btn_w)
        self.close_button.setMaximumHeight(self.btn_h)
        self.close_button.setContentsMargins(0, 0, 0, 0)
        self.close_button.setBaseSize(0, 0)
        self.close_icon = self.dock_title_bar.style().standardIcon(QStyle.SP_TitleBarCloseButton)
        self.close_button.setIcon(self.close_icon)
        self.close_button.setToolTip("Close")
        # custom toggle button
        self.toggle_button = QPushButton()
        self.toggle_button.setStyleSheet(self.button_style)
        self.toggle_button.setMaximumWidth(self.btn_w)
        self.toggle_button.setMaximumHeight(self.btn_h)
        self.toggle_button.setContentsMargins(0, 0, 0, 0)
        self.toggle_button.setBaseSize(0, 0)
        self.toggle_icon = self.dock_title_bar.style().standardIcon(QStyle.SP_TitleBarShadeButton)
        self.toggle_button.setIcon(self.toggle_icon)
        self.toggle_button.setToolTip("Dock/float widget")
        # tigger logo
        self.image0 = pixmaps.tigger_logo.pm()
        self.title_icon = QLabel()
        self.title_icon.setContentsMargins(0, 0, 0, 0)
        self.title_icon.setBaseSize(0, 0)
        self.title_icon.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.title_icon.setScaledContents(True)
        self.title_icon.setPixmap(self.image0)
        self.title_icon.setAlignment(Qt.AlignCenter)
        self.title_icon.setMaximumSize(self.icon_size)
        # set dock widget title
        self.title_font = QFont()
        self.title_font.setBold(True)
        self.title_font.setPointSize(self.font_size)
        if bind_widget is not None:
            if isinstance(bind_widget, ImageControlDialog):
                self.dock_title = QLabel(f"{title}: Control Dialog")
            else:
                self.dock_title = QLabel(title)
        self.dock_title.setFont(self.title_font)
        self.dock_title.setAlignment(Qt.AlignCenter)
        self.dock_title.setContentsMargins(0, 0, 0, 0)
        self.dock_title.setBaseSize(0, 0)
        self.dock_title.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Minimum)
        # add dock widget title items to layout
        self.dock_title_layout.addWidget(self.title_icon)
        self.dock_title_layout.addWidget(self.dock_title)
        self.dock_title_layout.addWidget(self.toggle_button)
        self.dock_title_layout.addWidget(self.close_button)
        # set up profiles as dockable
        self.setStyleSheet(self.tdock_style)
        self.setWidget(bind_widget)
        self.setFeatures(QDockWidget.AllDockWidgetFeatures)
        if bind_widget is not None:
            if isinstance(bind_widget, ToolDialog):
                self.setAllowedAreas(Qt.AllDockWidgetAreas)
            elif isinstance(bind_widget, ImageControlDialog):
                self.setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea)
        self.setTitleBarWidget(self.dock_title_bar)
        self.setFloating(False)
        # get current sizeHints()
        if bind_widget is not None:
            self.setBaseSize(bind_widget.sizeHint())
            if isinstance(bind_widget, LiveImageZoom):
                bind_widget.livezoom_resize_signal.connect(self._resizeDockWidget)
        if close_slot is not None:
            self.close_button.clicked.connect(close_slot)
        if toggle_slot is not None:
            self.toggle_button.clicked.connect(toggle_slot)

    def _resizeDockWidget(self, qsize):
        # live zoom signal slot to resize dockwidget and dock areas
        self.setMinimumSize(qsize)
        self.main_win.resizeDocks([self], [qsize.width()], Qt.Horizontal)
        self.main_win.resizeDocks([self], [qsize.height()], Qt.Vertical)

    # hack to stop QDockWidget responding to drag events for undocking - work around for Qt bug
    def eventFilter(self, source, event):
        # event seq 2, 5, 3 - mouse press, mouse move, mouse release
        if event.type() == QEvent.MouseButtonPress:
            label = self.childAt(event.pos())
            if not label:
                return super(TDockWidget, self).eventFilter(source, event)
            if isinstance(label, QLabel):
                if not self.isFloating():
                    fake_mouse_event = QMouseEvent(QEvent.MouseButtonRelease, event.pos(), event.button(), event.buttons(), event.modifiers())
                    super(TDockWidget, self).event(fake_mouse_event)
                    return True
        return super(TDockWidget, self).eventFilter(source, event)