def __init__(self, parent=None): """ Initialize a QDockWindowButtons instance. Parameters ---------- parent : QWidget, optional The parent of the window buttons. """ super(QDockWindowButtons, self).__init__(parent) self._buttons = ( self.CloseButton | self.MaximizeButton | self.LinkButton ) max_button = self._max_button = QBitmapButton(self) max_button.setObjectName('dockwindow-maximize-button') max_button.setBitmap(MAXIMIZE_BUTTON.toBitmap()) max_button.setIconSize(QSize(20, 15)) max_button.setVisible(self._buttons & self.MaximizeButton) max_button.setToolTip('Maximize') restore_button = self._restore_button = QBitmapButton(self) restore_button.setObjectName('dockwindow-restore-button') restore_button.setBitmap(RESTORE_BUTTON.toBitmap()) restore_button.setIconSize(QSize(20, 15)) restore_button.setVisible(self._buttons & self.RestoreButton) restore_button.setToolTip('Restore Down') close_button = self._close_button = QBitmapButton(self) close_button.setObjectName('dockwindow-close-button') close_button.setBitmap(CLOSE_BUTTON.toBitmap()) close_button.setIconSize(QSize(34, 15)) close_button.setVisible(self._buttons & self.CloseButton) close_button.setToolTip('Close') link_button = self._link_button = QCheckedBitmapButton(self) link_button.setObjectName('dockwindow-link-button') link_button.setBitmap(UNLINKED_BUTTON.toBitmap()) link_button.setCheckedBitmap(LINKED_BUTTON.toBitmap()) link_button.setIconSize(QSize(20, 15)) link_button.setVisible(self._buttons & self.LinkButton) link_button.setToolTip('Link Window') link_button.setCheckedToolTip('Unlink Window') layout = QHBoxLayout() layout.setContentsMargins(QMargins(0, 0, 0, 0)) layout.setSpacing(1) layout.addWidget(link_button) layout.addWidget(max_button) layout.addWidget(restore_button) layout.addWidget(close_button) self.setLayout(layout) max_button.clicked.connect(self.maximizeButtonClicked) restore_button.clicked.connect(self.restoreButtonClicked) close_button.clicked.connect(self.closeButtonClicked) link_button.toggled.connect(self.linkButtonToggled)
def invalidate(self): """ Invalidate the layout. """ super(QDockItemLayout, self).invalidate() self._size_hint = QSize() self._min_size = QSize() self._max_size = QSize()
def invalidate(self): """ Invalidate the cached layout data. """ super(QDockFrameLayout, self).invalidate() self._size_hint = QSize() self._min_size = QSize() self._max_size = QSize()
def minimumSizeHint(self): """ Get the minimum size hint for the widget. """ size = self._icon_size if not size.isValid(): size = QSize(16, 16) left, top, right, bottom = self.getContentsMargins() return size + QSize(left + right, top + bottom)
def event(self, event): """ The generic event handler for the text label. This handler ensures the size hint caches are invalidated when the widget style changes. """ if event.type() == QEvent.StyleChange: self._min_text_size = QSize() self._text_size = QSize() return super(QTextLabel, self).event(event)
def sizeHint(self): """ Get the size hint for the text label. """ base = self._text_size if not base.isValid(): metrics = self.fontMetrics() base = QSize(metrics.width(self._text), metrics.height()) self._text_size = base left, top, right, bottom = self.getContentsMargins() return base + QSize(left + right, top + bottom)
def __init__(self, parent=None): """ Initialize a QDockTitleBar. Parameters ---------- parent : QWidget or None The parent of the title bar. """ super(QTextLabel, self).__init__(parent) self._min_text_size = QSize() self._text_size = QSize() self._text = ''
def __init__(self, parent=None): """ Initialize a QDockFrameLayout. Parameters ---------- parent : QWidget or None The parent widget owner of the layout. """ super(QDockFrameLayout, self).__init__(parent) self._size_hint = QSize() self._min_size = QSize() self._max_size = QSize()
def _onHandleMoved(self, delta): """ Handle the 'handleMoved' signal on the item handle. This handler resizes the item by the delta and then updates the internal user size. The resize is bounded by the limits of the widget and the parent dock area size. Resizing is disabled if an animation is running. """ animation = self._animation if animation and animation.state() == animation.Running: return p = self.position() if p == QDockBar.North: delta = QSize(0, delta.y()) elif p == QDockBar.East: delta = QSize(-delta.x(), 0) elif p == QDockBar.South: delta = QSize(0, -delta.y()) else: delta = QSize(delta.x(), 0) user_size = self.size() + delta user_size = user_size.expandedTo(self.minimumSize()) parent = self.parent() if parent is not None: user_size = user_size.boundedTo(parent.size()) self._user_size = user_size if p == QDockBar.East or p == QDockBar.South: d = user_size - self.size() p = self.pos() - QPoint(d.width(), d.height()) self.setGeometry(QRect(p, user_size)) else: self.resize(user_size)
def setText(self, text): """ Set the text string of the text label. Parameters ---------- text : str The string to use for the text label. """ self._min_text_size = QSize() self._text_size = QSize() self._text = text self.updateGeometry() self.update()
def __init__(self, parent=None, position=QDockBar.North): """ Initialize a QDockBarItem. Parameters ---------- parent : QWidget, optional The parent of the dock bar item. position : QDockBar.Position, optional The position of the dock bar for the item. """ super(QDockBarItem, self).__init__(parent) assert isinstance(position, QDockBar.Position) self.setProperty('position', int(position)) self._user_size = QSize() self._animation = None self._widget = None handle = QDockBarItemHandle() handle.handleMoved.connect(self._onHandleMoved) if position == QDockBar.North or position == QDockBar.South: layout = QVBoxLayout() handle.setCursor(Qt.SizeVerCursor) else: layout = QHBoxLayout() handle.setCursor(Qt.SizeHorCursor) layout.addWidget(handle, 0) layout.setSpacing(0) layout.setContentsMargins(QMargins(0, 0, 0, 0)) layout.setSizeConstraint(QLayout.SetMinimumSize) self.setLayout(layout)
def minimumSize(self): """ Get the minimum size for the layout. """ widget = self.currentWidget() if widget is not None: return widget.minimumSizeHint() return QSize(256, 192)
def sizeHint(self): """ Get the size hint for the layout. """ widget = self.currentWidget() if widget is not None: return widget.sizeHint() return QSize(256, 192)
def minimumSize(self): """ Get the minimum size for the layout. """ size = self._min_size if size.isValid(): return size size = super(QDockFrameLayout, self).minimumSize() if not size.isValid(): size = QSize(256, 192) self._min_size = size return size
def minimumSizeHint(self): """ Get the minimum size hint for the text label. """ base = self._min_text_size if not base.isValid(): metrics = self.fontMetrics() text = self._computeElidedText(self._text) base = metrics.boundingRect(text).size() self._min_text_size = base left, top, right, bottom = self.getContentsMargins() return base + QSize(left + right, top + bottom)
def __init__(self, parent=None): """ Initialize a QIconWidget. Parameters ---------- parent : QWidget, optional The parent of the icon widget. """ super(QIconWidget, self).__init__(parent) self._icon_size = QSize() self._icon = QIcon()
def sizeHint(self): """ Get the size hint for the layout. """ hint = self._size_hint if hint.isValid(): return hint hint = super(QDockFrameLayout, self).sizeHint() if not hint.isValid(): hint = QSize(256, 192) self._size_hint = hint return hint
def __init__(self, parent=None): """ Initialize a QDockBarItemHandle. Parameters ---------- parent : QWidget, optional The parent widget of the handle. """ super(QDockBarItemHandle, self).__init__(parent) policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.setSizePolicy(policy) self._press_pos = QPoint() self._size_hint = QSize(5, 5)
def _animationGeo(self, item): """ Get the animation geometry for the given item. Parameters ---------- item : QDockBarItem The dock bar item to be animated. Returns ------- result : tuple A 2-tuple of QRect objects representing the start and end geometries for the animation assuming a slide out effect. """ pane = self.parent().centralPane() hint = item.sizeHint().boundedTo(pane.size()) position = item.position() if position == QDockBar.North: start_pos = QPoint(0, -hint.height()) end_pos = QPoint(0, 0) size = QSize(pane.width(), hint.height()) elif position == QDockBar.East: start_pos = QPoint(pane.width(), 0) end_pos = QPoint(pane.width() - hint.width(), 0) size = QSize(hint.width(), pane.height()) elif position == QDockBar.South: start_pos = QPoint(0, pane.height()) end_pos = QPoint(0, pane.height() - hint.height()) size = QSize(pane.width(), hint.height()) else: start_pos = QPoint(-hint.width(), 0) end_pos = QPoint(0, 0) size = QSize(hint.width(), pane.height()) start_geo = QRect(start_pos, size) end_geo = QRect(end_pos, size) return start_geo, end_geo
def maximumSize(self): """ Get the maximum size for the layout. """ ms = self._max_size if not ms.isValid(): widget = self._dock_widget if widget is not None: ms = widget.maximumSize() title = self._title_bar if title is not None and not title.isHidden(): height = ms.height() + title.minimumSizeHint().height() ms.setHeight(min(16777215, height)) else: ms = QSize(16777215, 16777215) self._max_size = ms return ms
def tabInserted(self, index): """ Handle a tab insertion in the tab bar. This handler will create the close button for the tab and then update its visibilty depending on whether or not the dock item is closable. This method assumes that this tab bar is parented by a QDockTabWidget. """ button = QDockTabCloseButton(self) button.setObjectName('docktab-close-button') button.setBitmap(CLOSE_BUTTON.toBitmap()) button.setIconSize(QSize(14, 13)) button.clicked.connect(self._onCloseButtonClicked) self.setTabButton(index, QTabBar.LeftSide, None) self.setTabButton(index, QTabBar.RightSide, button) visible = self.parent().widget(index).closable() self.setCloseButtonVisible(index, visible)
def minimumSize(self): """ Get the minimum size for the layout. """ ms = self._min_size if not ms.isValid(): width = height = 0 title = self._title_bar widget = self._dock_widget if title is not None and not title.isHidden(): hint = title.minimumSizeHint() width += hint.width() height += hint.height() if widget is not None and not widget.isHidden(): hint = widget.minimumSizeHint() width = max(width, hint.width()) height += hint.height() ms = self._min_size = QSize(width, height) return ms
def sizeHint(self): """ Get the size hint for the layout. """ sh = self._size_hint if not sh.isValid(): width = height = 0 title = self._title_bar widget = self._dock_widget if title is not None and not title.isHidden(): hint = title.sizeHint() width += hint.width() height += hint.height() if widget is not None and not widget.isHidden(): hint = widget.sizeHint() width = max(width, hint.width()) height += hint.height() sh = self._size_hint = QSize(width, height) return sh
def tabInserted(self, index): """ Handle a tab insertion in the tab bar. This handler will create the close button for the tab and then update its visibility depending on whether or not the dock item is closable. It will also build the internal tab data structure for the new tab. This method assumes that this tab bar is parented by a QDockTabWidget. """ button = QDockTabCloseButton(self) button.setObjectName('docktab-close-button') button.setBitmap(CLOSE_BUTTON.toBitmap()) button.setIconSize(QSize(14, 13)) button.clicked.connect(self._onCloseButtonClicked) self.setTabButton(index, QTabBar.LeftSide, None) self.setTabButton(index, QTabBar.RightSide, button) container = self.parent().widget(index) container.alerted.connect(self._onAlerted) self.setCloseButtonVisible(index, container.closable()) self._tab_data.insert(index, _TabData(container))
def __init__(self, parent=None): """ Initialize a QDockTitleBar. Parameters ---------- parent : QWidget or None The parent of the title bar. """ super(QDockTitleBar, self).__init__(parent) self._buttons = self.CloseButton | self.MaximizeButton | self.PinButton self._is_editable = False self._force_hidden = False self._last_visible = True self._line_edit = None title_icon = self._title_icon = QIconWidget(self) title_icon.setVisible(False) title_label = self._title_label = QTextLabel(self) spacer = self._spacer = QWidget(self) policy = spacer.sizePolicy() policy.setHorizontalPolicy(QSizePolicy.Expanding) spacer.setSizePolicy(policy) btn_size = QSize(14, 13) max_button = self._max_button = QBitmapButton(self) max_button.setObjectName('docktitlebar-maximize-button') max_button.setBitmap(MAXIMIZE_BUTTON.toBitmap()) max_button.setIconSize(btn_size) max_button.setVisible(self._buttons & self.MaximizeButton) max_button.setToolTip('Maximize') restore_button = self._restore_button = QBitmapButton(self) restore_button.setObjectName('docktitlebar-restore-button') restore_button.setBitmap(RESTORE_BUTTON.toBitmap()) restore_button.setIconSize(btn_size) restore_button.setVisible(self._buttons & self.RestoreButton) restore_button.setToolTip('Restore Down') close_button = self._close_button = QBitmapButton(self) close_button.setObjectName('docktitlebar-close-button') close_button.setBitmap(CLOSE_BUTTON.toBitmap()) close_button.setIconSize(btn_size) close_button.setVisible(self._buttons & self.CloseButton) close_button.setToolTip('Close') link_button = self._link_button = QCheckedBitmapButton(self) link_button.setObjectName('docktitlebar-link-button') link_button.setBitmap(UNLINKED_BUTTON.toBitmap()) link_button.setCheckedBitmap(LINKED_BUTTON.toBitmap()) link_button.setIconSize(btn_size) link_button.setVisible(self._buttons & self.LinkButton) link_button.setToolTip('Link Window') link_button.setCheckedToolTip('Unlink Window') pin_button = self._pin_button = QCheckedBitmapButton(self) pin_button.setObjectName('docktitlebar-pin-button') pin_button.setBitmap(PIN_BUTTON.toBitmap()) pin_button.setCheckedBitmap(UNPIN_BUTTON.toBitmap()) pin_button.setIconSize(QSize(13, 13)) pin_button.setVisible(self._buttons & self.PinButton) pin_button.setToolTip('Pin Window') pin_button.setCheckedToolTip('Unpin Window') layout = QHBoxLayout() layout.setContentsMargins(QMargins(5, 2, 5, 2)) layout.setSpacing(1) layout.addWidget(title_icon) layout.addSpacing(0) layout.addWidget(title_label) layout.addWidget(spacer) layout.addSpacing(4) layout.addWidget(pin_button) layout.addWidget(link_button) layout.addWidget(max_button) layout.addWidget(restore_button) layout.addWidget(close_button) self.setLayout(layout) max_button.clicked.connect(self.maximizeButtonClicked) restore_button.clicked.connect(self.restoreButtonClicked) close_button.clicked.connect(self.closeButtonClicked) link_button.toggled.connect(self.linkButtonToggled) pin_button.toggled.connect(self.pinButtonToggled)
def minimumSizeHint(self): return QSize(0, 0)
def sizeHint(self): return QSize(300, 300)
def toBitmap(self): size = QSize(self.width, self.height) return QBitmap.fromData(size, self.data, QImage.Format_Mono)