Beispiel #1
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.title = 'TacOS'
        self._mainUI = MainUI()
        self._mainUI.setParent(self)
        self.setStyleSheet(open(Config.css, 'rt').read())
        self.setCentralWidget(self._mainUI)
        self._dock = QDockWidget(self)
        self._dock.setTitleBarWidget(QWidget())
        self._dock.setFloating(True)
        self._dock.setGeometry(0, 0, 800, 480)
        self._osk = OSK(rWidget=None)
        self._osk.setParent(self._dock)
        self._dock.setWidget(self._osk)
        self.addDockWidget(Qt.BottomDockWidgetArea, self._dock)
        self._dock.hide()
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(Config.geometry[0], Config.geometry[1],
                         Config.geometry[2], Config.geometry[3])
        if pickle.load(open(Config.prefs, 'rb'))['startMaximized']:
            self.showFullScreen()
        else:
            self.show()

    @property
    def dock(self):
        return self._dock

    @property
    def osk(self):
        return self._osk
Beispiel #2
0
    def __init__(self, *args, **kwargs):
        QDockWidget.__init__(self, *args, **kwargs)

        self.__expandedWidget = None
        self.__collapsedWidget = None
        self.__expanded = True

        self.__trueMinimumWidth = -1

        self.setFeatures(QDockWidget.DockWidgetClosable | \
                         QDockWidget.DockWidgetMovable)
        self.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)

        self.featuresChanged.connect(self.__onFeaturesChanged)
        self.dockLocationChanged.connect(self.__onDockLocationChanged)

        # Use the toolbar horizontal extension button icon as the default
        # for the expand/collapse button
        icon = self.style().standardIcon(
            QStyle.SP_ToolBarHorizontalExtensionButton)

        # Mirror the icon
        transform = QTransform()
        transform = transform.scale(-1.0, 1.0)
        icon_rev = QIcon()
        for s in (8, 12, 14, 16, 18, 24, 32, 48, 64):
            pm = icon.pixmap(s, s)
            icon_rev.addPixmap(pm.transformed(transform))

        self.__iconRight = QIcon(icon)
        self.__iconLeft = QIcon(icon_rev)

        close = self.findChild(QAbstractButton,
                               name="qt_dockwidget_closebutton")

        close.installEventFilter(self)
        self.__closeButton = close

        self.__stack = AnimatedStackedWidget()

        self.__stack.setSizePolicy(QSizePolicy.Fixed,
                                   QSizePolicy.Expanding)

        self.__stack.transitionStarted.connect(self.__onTransitionStarted)
        self.__stack.transitionFinished.connect(self.__onTransitionFinished)

        QDockWidget.setWidget(self, self.__stack)

        self.__closeButton.setIcon(self.__iconLeft)
Beispiel #3
0
    def __init__(self, *args, **kwargs):
        QDockWidget.__init__(self, *args, **kwargs)

        self.__expandedWidget = None
        self.__collapsedWidget = None
        self.__expanded = True

        self.__trueMinimumWidth = -1

        self.setFeatures(QDockWidget.DockWidgetClosable | \
                         QDockWidget.DockWidgetMovable)
        self.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)

        self.featuresChanged.connect(self.__onFeaturesChanged)
        self.dockLocationChanged.connect(self.__onDockLocationChanged)

        # Use the toolbar horizontal extension button icon as the default
        # for the expand/collapse button
        icon = self.style().standardIcon(
            QStyle.SP_ToolBarHorizontalExtensionButton)

        # Mirror the icon
        transform = QTransform()
        transform = transform.scale(-1.0, 1.0)
        icon_rev = QIcon()
        for s in (8, 12, 14, 16, 18, 24, 32, 48, 64):
            pm = icon.pixmap(s, s)
            icon_rev.addPixmap(pm.transformed(transform))

        self.__iconRight = QIcon(icon)
        self.__iconLeft = QIcon(icon_rev)

        close = self.findChild(QAbstractButton,
                               name="qt_dockwidget_closebutton")

        close.installEventFilter(self)
        self.__closeButton = close

        self.__stack = AnimatedStackedWidget()

        self.__stack.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)

        self.__stack.transitionStarted.connect(self.__onTransitionStarted)
        self.__stack.transitionFinished.connect(self.__onTransitionFinished)

        QDockWidget.setWidget(self, self.__stack)

        self.__closeButton.setIcon(self.__iconLeft)
Beispiel #4
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.title = 'TacOS'
     self._mainUI = MainUI()
     self._mainUI.setParent(self)
     self.setStyleSheet(open(Config.css, 'rt').read())
     self.setCentralWidget(self._mainUI)
     self._dock = QDockWidget(self)
     self._dock.setTitleBarWidget(QWidget())
     self._dock.setFloating(True)
     self._dock.setGeometry(0, 0, 800, 480)
     self._osk = OSK(rWidget=None)
     self._osk.setParent(self._dock)
     self._dock.setWidget(self._osk)
     self.addDockWidget(Qt.BottomDockWidgetArea, self._dock)
     self._dock.hide()
     self.initUI()
Beispiel #5
0
    def eventFilter(self, obj, event):
        if obj is self.__closeButton:
            etype = event.type()
            if etype == QEvent.MouseButtonPress:
                self.setExpanded(not self.__expanded)
                return True
            elif etype == QEvent.MouseButtonDblClick or \
                    etype == QEvent.MouseButtonRelease:
                return True
            # TODO: which other events can trigger the button (is the button
            # focusable).

        return QDockWidget.eventFilter(self, obj, event)
Beispiel #6
0
    def eventFilter(self, obj, event):
        if obj is self.__closeButton:
            etype = event.type()
            if etype == QEvent.MouseButtonPress:
                self.setExpanded(not self.__expanded)
                return True
            elif etype == QEvent.MouseButtonDblClick or \
                    etype == QEvent.MouseButtonRelease:
                return True
            # TODO: which other events can trigger the button (is the button
            # focusable).

        return QDockWidget.eventFilter(self, obj, event)
Beispiel #7
0
    def event(self, event):
        if event.type() == QEvent.LayoutRequest:
            self.__fixMinimumWidth()

        return QDockWidget.event(self, event)
Beispiel #8
0
    def __init__(self, ClassObject):
        super(QMainWindow, self).__init__()

        w = ClassObject()
        w.app_main_window = self
        self._widget = w

        if len(w.mainmenu) > 0:
            w._mainmenu = self.__initMainMenu(w.mainmenu)

        w.init_form()

        if _api.USED_API == _api.QT_API_PYQT5:
            self.layout().setContentsMargins(conf.PYFORMS_MAINWINDOW_MARGIN,
                                             conf.PYFORMS_MAINWINDOW_MARGIN,
                                             conf.PYFORMS_MAINWINDOW_MARGIN,
                                             conf.PYFORMS_MAINWINDOW_MARGIN)
        elif _api.USED_API == _api.QT_API_PYQT4:
            self.layout().setMargin(conf.PYFORMS_MAINWINDOW_MARGIN)

        self.setCentralWidget(w)
        self.setWindowTitle(w.title)

        docks = {}
        for name, item in w.controls.items():
            if isinstance(item, ControlDockWidget):
                if item.side not in docks:
                    docks[item.side] = []
                docks[item.side].append((name, item))

        #Construct the toolbar
        if len(w.toolbar) > 0:
            tb = QToolBar(self)
            self.addToolBar(tb)
            for item in w.toolbar:
                if isinstance(item, str) and item in ['|', '-']:
                    tb.addSeparator()
                else:
                    tb.addWidget(item.form)

        for key, widgets in docks.items():
            side = QtCore.Qt.RightDockWidgetArea
            if key == 'left':
                side = QtCore.Qt.LeftDockWidgetArea
            elif key == 'right':
                side = QtCore.Qt.RightDockWidgetArea
            elif key == 'top':
                side = QtCore.Qt.TopDockWidgetArea
            elif key == 'bottom':
                side = QtCore.Qt.BottomDockWidgetArea
            else:
                side = QtCore.Qt.LeftDockWidgetArea

            if isinstance(widgets, list):
                widgets = sorted(widgets, key=lambda x: x[1].order)

                for name, widget in widgets:
                    dock = QDockWidget(self)
                    dock.setFeatures(QDockWidget.DockWidgetFloatable
                                     | QDockWidget.DockWidgetClosable
                                     | QDockWidget.DockWidgetMovable)
                    dock.setObjectName(name)

                    if _api.USED_API == _api.QT_API_PYQT5:
                        dock.setContentsMargins(0, 0, 0, 0)
                        widget.form.layout().setContentsMargins(
                            widget.margin, widget.margin, widget.margin,
                            widget.margin)
                    elif _api.USED_API == _api.QT_API_PYQT4:
                        dock.setMargin(0)
                        widget.form.layout().setMargin(widget.margin)

                    # print dock.objectName(),1
                    dock.setWidget(widget.form)
                    dock.setWindowTitle(widget.label)
                    widget.dock = dock
                    if not widget._show: dock.hide()

                    self.addDockWidget(side, dock)
            else:
                dock = QDockWidget(self)
                dock.setFeatures(QDockWidget.DockWidgetFloatable
                                 | QDockWidget.DockWidgetClosable
                                 | QDockWidget.DockWidgetMovable)
                # dock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)

                if _api.USED_API == _api.QT_API_PYQT5:
                    widget.form.layout().setContentsMargins(
                        widget.margin, widget.margin, widget.margin,
                        widget.margin)
                elif _api.USED_API == _api.QT_API_PYQT5:
                    widget.form.layout().setMargin(widget.margin)

                # print dock.objectName(), 2
                dock.setObjectName(name)
                dock.setWidget(widget.form)
                self.addDockWidget(side, dock)
                dock.setWindowTitle(widget.label)
                widget.dock = dock
                if not widget._show: dock.hide()

        if conf.PYFORMS_STYLESHEET:
            stylesheet_files = [conf.PYFORMS_STYLESHEET]

            p = platform.system()
            if p == 'Windows' and conf.PYFORMS_STYLESHEET_WINDOWS:
                stylesheet_files.append(conf.PYFORMS_STYLESHEET_WINDOWS)
            elif p == 'Darwin' and conf.PYFORMS_STYLESHEET_DARWIN:
                stylesheet_files.append(conf.PYFORMS_STYLESHEET_DARWIN)
            elif p == 'Linux' and conf.PYFORMS_STYLESHEET_LINUX:
                stylesheet_files.append(conf.PYFORMS_STYLESHEET_LINUX)

            logger.debug('Import stylesheets: {0}'.format(stylesheet_files))
            self.loadStyleSheetFile(stylesheet_files)
Beispiel #9
0
    def event(self, event):
        if event.type() == QEvent.LayoutRequest:
            self.__fixMinimumWidth()

        return QDockWidget.event(self, event)