Example #1
0
    def add(self, w):
        """
        Adds a widget to this window. If you don't override L{render_this}, all
        widgets occupy the whole window area.
        """

        Widget.add(self, w)
        if (not w in self.__contents):
            self.__contents.append(w)
Example #2
0
    def __init__(self, wtype):

        self.__wtype = wtype
        self.__flags = 0

        # widget of the windows contents
        self.__contents = []

        # window menu
        if (platforms.MAEMO5):
            self.__menu = hildon.AppMenu()
        elif (platforms.MAEMO4):
            self.__menu = gtk.Menu()
        else:
            self.__menu = gtk.Menu()

        # table: name -> menu_item
        self.__menu_items = {}

        self.__size = (0, 0)
        self.__has_size_set = False
        self.__is_button_pressed = False
        self.__screen = None

        # whether this window should be stackable
        self.__is_stackable = False

        # timeout handler for handling the window configure events
        self.__configure_event_handler = None

        Widget.__init__(self)

        if (wtype == self.TYPE_TOPLEVEL):
            self.__is_stackable = True
            if (platforms.MAEMO5):
                self.__window = hildon.StackableWindow()
                self.__window.set_app_menu(self.__menu)
                # stacking is handled by Maemo5
                self.__is_stackable = False
            elif (platforms.MAEMO4):
                self.__window = hildon.Window()
                #self.__window.set_menu(self.__menu)
                self.__window.fullscreen()
            elif (platforms.MEEGO_WETAB):
                self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)
                self.__window.set_decorated(False)
                self.__window.maximize()
            elif (platforms.MEEGO_NETBOOK):
                self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)
                self.__window.set_decorated(False)
                self.__window.maximize()
                #self.__window.fullscreen()
                #self.__window.set_size_request(gtk.gdk.screen_width(),
                #                               gtk.gdk.screen_height())
            else:
                self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        elif (wtype == self.TYPE_SUBWINDOW):
            self.__is_stackable = True
            if (platforms.MAEMO5):
                self.__window = hildon.StackableWindow()
                self.__window.set_app_menu(self.__menu)
                # stacking is handled by Maemo5
                self.__is_stackable = False
            elif (platforms.MAEMO4):
                self.__window = gtk.Window()
                #self.__window.set_decorated(False)
                self.__window.fullscreen()
                # hide some ugly separator :)
                #self.__window.vbox.get_children()[0].hide()
            elif (platforms.MEEGO_WETAB):
                self.__window = gtk.Window()
                self.__window.maximize()
                self.__window.set_decorated(False)
            elif (platforms.MEEGO_NETBOOK):
                self.__window = gtk.Dialog()
                self.__window.set_decorated(False)
                self.__window.maximize()
                #self.__window.set_size_request(gtk.gdk.screen_width(),
                #                               gtk.gdk.screen_height())
                # hide some ugly separator :)
                self.__window.vbox.get_children()[0].hide()
            else:
                self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL)
                # hide some ugly separator :)
                #self.__window.vbox.get_children()[0].hide()

        elif (wtype == self.TYPE_DIALOG):
            if (platforms.MAEMO5):
                self.__window = gtk.Dialog()
            elif (platforms.MAEMO4 or platforms.MEEGO_NETBOOK):
                self.__window = gtk.Dialog()
                # hide some ugly separator :)
                self.__window.vbox.get_children()[0].hide()
            else:
                self.__window = gtk.Dialog()
                # hide some ugly separator :)
                self.__window.vbox.get_children()[0].hide()

        # title bar on some platforms
        if (not platforms.MAEMO5 and wtype != self.TYPE_DIALOG):
            self.__title_bar = TitleBar()
            self.__title_bar.connect_switch(lambda: self.__window.iconify())
            self.__title_bar.connect_menu(lambda: self.show_menu())
            self.__title_bar.connect_close(
                lambda: self.emit_event(self.EVENT_CLOSED))
            if (wtype == self.TYPE_SUBWINDOW):
                self.__title_bar.set_mode(TitleBar.MODE_SUBWINDOW)

            Widget.add(self, self.__title_bar)

        else:
            self.__title_bar = None

        self.__window.set_title(" ")
        self.__window.set_default_size(480, 800)  #800, 480)
        self.__window.set_app_paintable(True)
        self.__window.set_double_buffered(False)

        self.__window.connect("configure-event", self.__on_configure)
        self.__window.connect("expose-event", self.__on_expose)
        self.__window.connect("button-press-event", self.__on_button_pressed)
        self.__window.connect("button-release-event",
                              self.__on_button_released)
        self.__window.connect("motion-notify-event", self.__on_pointer_moved)
        self.__window.connect("key-press-event", self.__on_key_pressed)
        self.__window.connect("key-release-event", self.__on_key_released)
        self.__window.connect("delete-event", self.__on_close_window)

        self.__window.set_events(gtk.gdk.BUTTON_PRESS_MASK
                                 | gtk.gdk.BUTTON_RELEASE_MASK
                                 | gtk.gdk.POINTER_MOTION_MASK
                                 | gtk.gdk.POINTER_MOTION_HINT_MASK
                                 | gtk.gdk.KEY_PRESS_MASK
                                 | gtk.gdk.KEY_RELEASE_MASK)

        self.__window.realize()

        if (platforms.MAEMO5):
            if (wtype in [self.TYPE_TOPLEVEL, self.TYPE_SUBWINDOW]):
                pass  #self.__set_portrait_property("_HILDON_PORTRAIT_MODE_SUPPORT", 1)
            else:
                self.__set_portrait_property("_HILDON_PORTRAIT_MODE_SUPPORT",
                                             1)

        self.__layout = gtk.Fixed()
        self.__layout.show()
        try:
            self.__window.vbox.add(self.__layout)
        except:
            self.__window.add(self.__layout)

        # video screen
        self.__vidscreen = gtk.DrawingArea()
        self.__vidscreen.set_double_buffered(False)

        self.__vidscreen.modify_bg(gtk.STATE_NORMAL,
                                   gtk.gdk.color_parse("#000000"))
        self.__vidscreen.set_events(gtk.gdk.BUTTON_PRESS_MASK
                                    | gtk.gdk.BUTTON_RELEASE_MASK
                                    | gtk.gdk.POINTER_MOTION_MASK
                                    | gtk.gdk.KEY_PRESS_MASK
                                    | gtk.gdk.KEY_RELEASE_MASK)
        self.__layout.put(self.__vidscreen, 0, 0)

        self.__update_window_background()