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)
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()