Beispiel #1
0
class ImageButton(Widget):

    activated = QSignal()

    def __init__(self, parent, image):
        super().__init__(parent)
        self.set_widget(QPushButton(QParent(parent)))
        fsui.qt.QPushButton.__init__(self, parent.get_container())
        icon = image.qicon
        self._widget.setIcon(icon)
        self._widget.setIconSize(fsui.qt.QSize(image.size[0], image.size[1]))
        self._widget.clicked.connect(self.__clicked)

    def set_image(self, image):
        self._widget.setIcon(image.qicon)

    def __clicked(self):
        self.on_activated()

    def on_activated(self):
        self.activated.emit()
        # FIXME: Remove
        self.on_activate()

    def on_activate(self):
        pass

    @property
    def clicked(self):
        warnings.warn("use activated instead", DeprecationWarning)
        return self.activated
Beispiel #2
0
class Button(Widget):

    activated = QSignal()

    def __init__(self, parent, label=""):
        super().__init__(parent)
        label = "  " + label + "  "
        self.set_widget(QPushButton(label, QParent(parent)))
        self._widget.clicked.connect(self.__clicked)

    def __clicked(self):
        self.on_activated()

    def on_activated(self):
        self.activated.emit()
        # FIXME: Remove
        self.on_activate()

    def on_activate(self):
        pass

    @property
    def clicked(self):
        warnings.warn("use activated instead", DeprecationWarning)
        return self.activated
Beispiel #3
0
class Button(QPushButton, WidgetMixin):

    activated = QSignal()

    def __init__(self, parent, label=""):
        label = "  " + label + "  "
        # self._widget = QPushButton(label, parent.get_container())
        QPushButton.__init__(self, label, parent.get_container())
        # Widget.__init__(self, parent)
        self.init_widget(parent)
        # self._widget.clicked.connect(self.__clicked)
        # if not System.macosx:
        #     self.set_min_height(28)
        self.clicked.connect(self.__clicked)

    def __clicked(self):
        self.on_activated()

    def on_activated(self):
        self.activated.emit()
        # FIXME: Remove
        self.on_activate()

    def on_activate(self):
        pass
Beispiel #4
0
class Window(QObject):

    shown = QSignal()
    closed = QSignal()

    def __init__(self,
                 parent,
                 title="",
                 border=True,
                 minimizable=True,
                 maximizable=True,
                 separator=True,
                 menu=False,
                 native=None,
                 header=True,
                 below=False,
                 closable=True,
                 color=None,
                 **_):
        init_qt()
        super().__init__()

        # if parent is None and len(default_window_parent) > 0:
        #     parent = default_window_parent[-1]
        #     print("using default parent", parent)

        # FIXME
        self._window = weakref.ref(self)

        if native is None:
            if fsboot.get("fws") == "1":
                native = False
            else:
                native = not _use_fws
        if native:
            self._real_window = RealWindow(QParent(parent, True),
                                           self,
                                           minimizable=minimizable,
                                           maximizable=maximizable,
                                           below=below,
                                           border=border)
        else:
            self._real_window = FwsWindow(QParent(parent, True),
                                          self,
                                          below=below)

        self._real_widget = RealWidget(self._real_window, self)

        # Widget.__init__(self, parent)
        # self.init_widget(parent)

        # MixinBase.__init__(self)

        self.set_title(title)

        self.layout = None
        self._size_specified = False
        self.close_listeners = []
        # _windows.add(self)
        self.destroyed.connect(self.__destroyed)

        self._real_window.setAttribute(Qt.WA_DeleteOnClose, True)

        # if not border:
        #     self.setWindowFlags(Qt.FramelessWindowHint |
        #                         Qt.NoDropShadowWindowHint)
        #     # self.setWindowFlags(Qt.FramelessWindowHint)

        self.center_on_show = True
        self._centered_on_initial_show = False
        if hasattr(self, "accepted"):
            self.accepted.connect(self.__accepted)
        if hasattr(self, "rejected"):
            self.rejected.connect(self.__rejected)

        # Add a keep-alive reference
        print("Adding window reference", self)
        windows.add(self)
        self.closed.connect(self.__closed)

        self.title_panel = None
        self.title_panel_visible = False
        if not native:
            self.real_window()._window = weakref.ref(self)
            from workspace.ui.theme import WorkspaceTheme
            from workspace.ui.window import WindowHeader
            if header:
                self.title_panel = WindowHeader(self.real_window(),
                                                menu=menu,
                                                minimizable=minimizable,
                                                maximizable=maximizable,
                                                separator=separator,
                                                closable=closable,
                                                background=color)
            self.title_panel_visible = True
            self.set_background_color(
                WorkspaceTheme.instance().window_background)

    def __closed(self):
        print("Removing window reference", self)
        windows.remove(self)

    @property
    def window(self):
        return self

    @property
    def visible(self):
        return self._real_window.isVisible()

    @visible.setter
    def visible(self, visible):
        self._real_window.setVisible(visible)

    def alert(self, msecs=0):
        init_qt().alert(self._real_window, msecs)

    def close(self):
        self._real_window.close()

    def real_window(self):
        return self._real_window

    def real_widget(self):
        return self._real_widget

    # DEPRECATED
    def get_container(self):
        return self.real_widget()

    # FIXME: Is this used?
    def center_on_initial_show(self):
        if self._centered_on_initial_show:
            return
        if self.layout and not self._size_specified:
            self.set_size(self.layout.get_min_size())
        self.on_resize()
        self.center_on_parent()
        self._centered_on_initial_show = True

    def __destroyed(self):
        print(str(self) + ".__destroyed")

    def add_close_listener(self, function):
        # self.close_listeners.append(function)
        self.closed.connect(function)

    def top_level(self):
        return self

    def set_icon(self, icon):
        self.real_window().setWindowIcon(icon.qicon())

    def position(self):
        # position = self._real_window.position()
        # return position.x(), position.y()
        return self._real_window.position()

    def set_position(self, position):
        self._real_window.set_position(position)


#    def set_position_and_size(self, position, size):
#        self.widget().setGeometry(position[0], position[1], size[0], size[1])

    def size(self):
        return self.width(), self.height()

    def width(self):
        return self._real_window.width()

    def height(self):
        return self._real_window.height()

    def set_size(self, size):
        self._size_specified = True
        # self.SetClientSize(size)
        # print("FIXME:\n\nDialog.set_size")
        # self.resize(size[0], size[1])
        # import traceback
        # traceback.print_stack()
        if size[0] == 0 or size[1] == 0:
            print("Window.set_size ignoring size", size)
            return
        print("Window.set_size", size)
        self._real_window.set_size(size)
        self._real_widget.resize(size[0], size[1])

    def set_initial_size_from_layout(self):
        if self.layout and not self._size_specified:
            self.set_size_from_layout()

    def set_size_from_layout(self):
        size = self.layout.get_min_size()
        print("set_size_from_layout, size =", size)
        self.set_size(size)

    def title(self):
        return self._real_window.windowTitle()

    def set_title(self, title):
        self._real_window.setWindowTitle(title)

    def show(self, maximized=False, center=False, offset=False):
        if center:
            print("CENTER")
            self.center_on_parent()
            # self._centered_on_initial_show = True
        elif offset:
            self.offset_from_parent((20, 20))
            # self._centered_on_initial_show = True
            self.center_on_show = False
        if maximized:
            self._real_window.showMaximized()
        else:
            self._real_window.show()

    def is_maximized(self):
        # return self._real_window.windowState() == Qt.WindowMaximized
        return self._real_window.is_maximized()

    def is_fullscreen(self):
        return self._real_window.is_fullscreen()

    def set_fullscreen(self, fullscreen=True, geometry=None):
        # We must set the size before maximizing, so this isn't done within
        # showMaximized -> ... -> set_initial_size_from_layout -> set_size.
        self.set_initial_size_from_layout()
        if self.title_panel is not None:
            self.title_panel.set_visible(not fullscreen)
            self.title_panel_visible = not fullscreen
        self._real_window.set_fullscreen(fullscreen, geometry)

    def set_maximized(self, maximize=True, geometry=None):
        # We must set the size before maximizing, so this isn't done within
        # showMaximized -> ... -> set_initial_size_from_layout -> set_size.
        self.set_initial_size_from_layout()
        self._real_window.set_maximized(maximize, geometry)

    def minimize(self):
        # self.setWindowState(Qt.WindowMinimized)
        return self._real_window.minimize()

    def get_window_center(self):
        position = self.position()
        size = self.size()
        return position[0] + size[0] // 2, position[1] + size[1] // 2

    def center_on_parent(self):
        # import traceback
        # traceback.print_stack()
        self.set_initial_size_from_layout()
        real_parent = self.real_window().parent()
        # print("center_on_parent real_parent = ",
        #       real_parent, default_window_center)
        if real_parent:
            pp = real_parent.x(), real_parent.y()
            ps = real_parent.width(), real_parent.height()
            ss = self.size()
            print(pp, ps, ss)
            self.set_position(
                (pp[0] + (ps[0] - ss[0]) // 2, pp[1] + (ps[1] - ss[1]) // 2))
        # elif len(default_window_center) > 0:
        #     x, y = default_window_center[-1]
        #     ss = self.size()
        #     self.set_position((x - ss[0] // 2, y - ss[1] // 2))

    def offset_from_parent(self, offset):
        self.set_initial_size_from_layout()
        real_parent = self.real_window().parent()
        # print("offset_from_parent real_parent = ",
        #       real_parent, default_window_center)
        if real_parent:
            pp = real_parent.x(), real_parent.y()
            self.set_position((pp[0] + offset[0], pp[1] + offset[1]))

    def center_on_screen(self):
        frame_rect = self._real_window.frameGeometry()
        frame_rect.moveCenter(QDesktopWidget().availableGeometry().center())
        self._real_window.move(frame_rect.topLeft())

    def set_background_color(self, color):
        p = self.real_widget().palette()
        p.setColor(self.real_widget().backgroundRole(), color)
        self.real_widget().setPalette(p)

    def is_shown(self):
        return self._real_window.isVisible()

    def raise_and_activate(self):
        self._real_window.raise_()
        self._real_window.activateWindow()

    def on_close(self):
        pass

    def __rejected(self):
        print(str(self) + ".__rejected")
        self.__on_closed()

    def __accepted(self):
        print(str(self) + ".__accepted")
        self.__on_closed()

    def on_resize(self):
        if self.layout:
            self.layout.set_size(self.get_size())
            self.layout.update()

    # DEPRECATED
    def resize(self, width, height):
        self.set_size((width, height))

    # DEPRECATED
    def get_size(self):
        return self.size()

    # DEPRECATED
    def get_window(self):
        return self.top_level()

    # DEPRECATED
    def get_position(self):
        return self.position()

    # DEPRECATED
    def maximized(self):
        return self.is_maximized()

    # DEPRECATED
    def get_parent(self):
        return None

    # DEPRECATED
    def set_icon_from_path(self, _):
        print("FIXME: Window.set_icon_from_path")

    # DEPRECATED
    def get_title(self):
        return self.title()

    # DEPRECATED
    def maximize(self, maximize=True):
        return self.set_maximized(maximize)
Beispiel #5
0
def Signal():
    return QSignal()