def __init__(self): ImageButton.__init__( self, app_theme.get_pixbuf("mode/quell_normal.png"), app_theme.get_pixbuf("mode/quell_hover.png"), app_theme.get_pixbuf("mode/quell_press.png"), )
def __create_button(self, name, tip_msg=None): button = ImageButton( app_theme.get_pixbuf("lyric/%s_normal.png" % name), app_theme.get_pixbuf("lyric/%s_hover.png" % name), app_theme.get_pixbuf("lyric/%s_press.png" % name)) button.connect("clicked", self.player_control, name) return button
def __create_button(self, name, tip_msg=None): button = ImageButton( app_theme.get_pixbuf("lyric/%s_normal.png" % name), app_theme.get_pixbuf("lyric/%s_hover.png" % name), app_theme.get_pixbuf("lyric/%s_press.png" % name) ) button.connect("clicked", self.player_control, name) return button
def __create_simple_button(self, name, callback): button = ImageButton( app_theme.get_pixbuf("jobs/%s_normal.png" % name), app_theme.get_pixbuf("jobs/%s_hover.png" % name), app_theme.get_pixbuf("jobs/%s_hover.png" % name), ) if callback: button.connect("clicked", callback) return button
def __create_button(self, name, tip_msg=None): button = ImageButton( app_theme.get_pixbuf("action/%s_normal.png" % name), app_theme.get_pixbuf("action/%s_hover.png" % name), app_theme.get_pixbuf("action/%s_press.png" % name), ) button.connect("clicked", self.player_control, name) if tip_msg: Tooltip.text(button, tip_msg) return button
def create_simple_button(self, name, callback, *args): button = ImageButton( app_theme.get_pixbuf("filter/%s_normal.png" % name), app_theme.get_pixbuf("filter/%s_hover.png" % name), app_theme.get_pixbuf("filter/%s_press.png" % name)) if callback: button.connect("clicked", callback, *args) align = gtk.Alignment() align.set(0.5, 0.5, 0, 0) align.add(button) return align
def __create_zoom_button(self, name, msg=None): button = ImageButton( app_theme.get_pixbuf("lyric/%s_normal.png" % name), app_theme.get_pixbuf("lyric/%s_hover.png" % name), app_theme.get_pixbuf("lyric/%s_press.png" % name)) button.connect("clicked", self.change_font_size, name) if msg: Tooltip.text(button, msg) align = gtk.Alignment() align.set(0.5, 0.5, 0, 0) align.add(button) return align
def __create_simple_button(self, name, callback, tip_msg=""): button = ImageButton( app_theme.get_pixbuf("toolbar/%s_normal.png" % name), app_theme.get_pixbuf("toolbar/%s_hover.png" % name), app_theme.get_pixbuf("toolbar/%s_press.png" % name), ) button.connect("button-press-event", callback) if tip_msg: Tooltip.text(button, tip_msg) self.toolbar_box.pack_start(button, False, False) return button
def create_color_button(self, box, name): ''' create color button @param box: a gtk.HBox @param name: the button's name ''' button = ImageButton( app_theme.get_pixbuf("color/" + name + ".png"), app_theme.get_pixbuf("color/" + name + "_hover.png"), app_theme.get_pixbuf("color/" + name + "_hover.png")) button.connect('pressed', lambda w: self._color_button_pressed(name)) box.pack_start(button)
def create_color_button(self, box, name): ''' create color button @param box: a gtk.HBox @param name: the button's name ''' button = ImageButton( app_theme.get_pixbuf("color/" + name + ".png"), app_theme.get_pixbuf("color/" + name + "_hover.png"), app_theme.get_pixbuf("color/" + name + "_hover.png")) button.connect('pressed', lambda w:self._color_button_pressed(name)) box.pack_start(button)
def create_simple_button(self, name, callback, *args): button = ImageButton( app_theme.get_pixbuf("filter/%s_normal.png" % name), app_theme.get_pixbuf("filter/%s_hover.png" % name), app_theme.get_pixbuf("filter/%s_press.png" % name) ) if callback: button.connect("clicked", callback, *args) align = gtk.Alignment() align.set(0.5, 0.5, 0, 0) align.add(button) return align
def __create_zoom_button(self, name, msg=None): button = ImageButton( app_theme.get_pixbuf("lyric/%s_normal.png" % name), app_theme.get_pixbuf("lyric/%s_hover.png" % name), app_theme.get_pixbuf("lyric/%s_press.png" % name) ) button.connect("clicked", self.change_font_size, name) if msg: Tooltip.text(button, msg) align = gtk.Alignment() align.set(0.5, 0.5, 0, 0) align.add(button) return align
def create_button(name, callback=None, tip_msg=None, parent=None, no_hover=False): hover = "press" if no_hover else "hover" button = ImageButton( app_theme.get_pixbuf("%s_normal.png" % name), app_theme.get_pixbuf("%s_%s.png" % (name, hover)), app_theme.get_pixbuf("%s_press.png" % name), ) if callback: button.connect("button-press-event", callback) if tip_msg: Tooltip.text(button, tip_msg) if parent: parent.pack_start(button, False, False) return button
def __init__( self, padding_left=0, ): CycleStrip.__init__(self, app_theme.get_pixbuf("strip/background.png")) self.label = Label() self.label_align = gtk.Alignment() self.label_align.set(0.0, 0.5, 0, 0) self.label_align.set_padding(0, 0, padding_left, 0) self.label_align.add(self.label) self.search_button = ImageButton( app_theme.get_pixbuf("entry/search_normal.png"), app_theme.get_pixbuf("entry/search_hover.png"), app_theme.get_pixbuf("entry/search_press.png"), ) self.search_entry = InputEntry(action_button=self.search_button) self.search_entry.set_size(220, 24) entry_align = gtk.Alignment(0.5, 0.5, 0, 0) entry_align.set_padding(0, 0, 5, 5) entry_align.add(self.search_entry) self.pack_start(self.label_align, True, True) self.pack_start(entry_align, False, False)
def __init__(self, appid): ''' init docs ''' gtk.VBox.__init__(self) self.appid = appid self.socket = None self.socket_box = gtk.EventBox() self.socket_box.connect("realize", self._add_socket) self.screenshot_box = gtk.EventBox() self.screenshot_box.connect('expose-event', self.screenshot_box_expose) self.center_play_box = gtk.EventBox() self.center_play_box.connect('expose-event', self.center_play_box_expose) self.center_play_box.set_size_request(72, 72) center_align = gtk.Alignment(0.5, 0.5, 0, 0) #center_align.add(self.center_play_box) self.play_button = ImageButton( DynamicPixbuf(utils.get_common_image('pause/play_normal.png')), DynamicPixbuf(utils.get_common_image('pause/play_hover.png')), DynamicPixbuf(utils.get_common_image('pause/play_press.png')), ) center_align.add(self.play_button) self.screenshot_box.add(center_align) self.screenshot_pixbuf = None
def __create_simple_button(self, name, callback, tip_msg=None, has_event=False): button = ImageButton( app_theme.get_pixbuf("lyric/%s_normal.png" % name), app_theme.get_pixbuf("lyric/%s_hover.png" % name), app_theme.get_pixbuf("lyric/%s_press.png" % name) ) if has_event: button.connect("button-press-event", callback) else: button.connect("clicked", callback) if tip_msg: Tooltip.text(button, tip_msg) button_align = gtk.Alignment() button_align.set(0.5, 0.5, 0, 0) button_align.add(button) return button_align
def add_new_box(self): table = gtk.Table() #hbox.set_size_request(-1, 30) name_label = Label(_("Name:"), enable_select=False) name_label.set_can_focus(False) exec_label = Label(_("Exec:"), enable_select=False) exec_label.set_can_focus(False) desc_label = Label(_("Comment:"), enable_select=False) desc_label.set_can_focus(False) self.name_entry = InputEntry() self.exec_entry = InputEntry() self.desc_entry = InputEntry() self.name_entry.set_size(200, 22) self.exec_entry.set_size(200, 22) self.desc_entry.set_size(200, 22) name_label_align = self.wrap_with_align(name_label) exec_label_align = self.wrap_with_align(exec_label) desc_label_align = self.wrap_with_align(desc_label) name_align = style.wrap_with_align(self.name_entry) exec_align = style.wrap_with_align(self.exec_entry) desc_align = style.wrap_with_align(self.desc_entry) table = gtk.Table(3, 4) self.table_add(table, [name_label_align, exec_label_align, desc_label_align], 0) self.table_add(table, [name_align, exec_align, desc_align], 1) open_folder = ImageButton(self.icon_pixbuf, self.icon_pixbuf, self.icon_pixbuf) open_folder.connect( "clicked", lambda w: OpenFileDialog( "Choose file", self, ok_callback=self.ok_callback)) table.attach(style.wrap_with_align(open_folder), 2, 3, 1, 2) align = gtk.Alignment(0.5, 0, 0, 0) style.set_table(table) align.add(table) return align
def __init__(self, *args, **kwargs): entry_button = ImageButton( app_theme.get_pixbuf("toolbar/search_normal.png"), app_theme.get_pixbuf("toolbar/search_hover.png"), app_theme.get_pixbuf("toolbar/search_press.png") ) super(SearchEntry, self).__init__(action_button=entry_button, *args, **kwargs) self.action_button = entry_button self.set_size(250, 24)
def handle_pkg_status(self, reply, success): container_remove_all(self.left_action_box) if success: install_status = str(reply) print install_status if install_status == "installed": if not self.data_manager.get_pkg_desktop_info(self.pkg_name): status_label = Label(_("Successfully installed")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/start_normal.png"), app_theme.get_pixbuf("button/start_hover.png"), app_theme.get_pixbuf("button/start_press.png"), ) action_button.connect("button-press-event", self.button_press_start_button) self.left_action_box.pack_start(action_button) elif install_status == "unknown": status_label = Label(_("Not found")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/install_normal.png"), app_theme.get_pixbuf("button/install_hover.png"), app_theme.get_pixbuf("button/install_press.png"), ) action_button.connect("clicked", lambda w: global_event.emit("install-pkg", [self.pkg_name])) self.left_action_box.pack_start(action_button) self.left_action_box.show_all() global_event.emit('update-current-status-pkg-page', self) else: global_logger.logerror("get_pkg_installed handle_dbus_error") global_logger.logerror(reply)
def handle_pkg_status(self, *reply): container_remove_all(self.left_action_box) install_status = reply if install_status[0][0]: if not self.data_manager.get_pkg_desktop_info(self.pkg_name): status_label = Label(_("Successfully installed")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/start_normal.png"), app_theme.get_pixbuf("button/start_hover.png"), app_theme.get_pixbuf("button/start_press.png"), ) action_button.connect("button-press-event", self.button_press_start_button) self.left_action_box.pack_start(action_button) else: action_button = ImageButton( app_theme.get_pixbuf("button/install_normal.png"), app_theme.get_pixbuf("button/install_hover.png"), app_theme.get_pixbuf("button/install_press.png"), ) action_button.connect("clicked", lambda w: global_event.emit("install-pkg", [self.pkg_name])) self.left_action_box.pack_start(action_button) self.left_action_box.show_all() global_event.emit('update-current-status-pkg-page', self)
def create_button(self, name, text=''): ''' make a button @param name: the button's name, a string @param text: the button's tooltip text, a string ''' button = ImageButton( app_theme.get_pixbuf("action/" + name + "_normal.png"), app_theme.get_pixbuf("action/" + name + "_hover.png"), app_theme.get_pixbuf("action/" + name + "_press.png")) button.connect("enter-notify-event", self._show_tooltip, text) button.connect("clicked", self._button_clicked, name) button.set_name(name) #button.set_size_request(28, 28) self.toolbox.pack_start(button) return button
def add_new_box(self): table = gtk.Table() #hbox.set_size_request(-1, 30) name_label = Label(_("Name:"), enable_select=False) name_label.set_can_focus(False) exec_label = Label(_("Exec:"), enable_select=False) exec_label.set_can_focus(False) desc_label = Label(_("Comment:"), enable_select=False) desc_label.set_can_focus(False) self.name_entry = InputEntry() self.exec_entry = InputEntry() self.desc_entry = InputEntry() self.name_entry.set_size(200, 22) self.exec_entry.set_size(200, 22) self.desc_entry.set_size(200, 22) name_label_align = self.wrap_with_align(name_label) exec_label_align = self.wrap_with_align(exec_label) desc_label_align = self.wrap_with_align(desc_label) name_align = style.wrap_with_align(self.name_entry) exec_align = style.wrap_with_align(self.exec_entry) desc_align = style.wrap_with_align(self.desc_entry) table = gtk.Table(3, 4) self.table_add(table, [name_label_align, exec_label_align, desc_label_align], 0) self.table_add(table, [name_align, exec_align, desc_align], 1) open_folder = ImageButton(self.icon_pixbuf, self.icon_pixbuf, self.icon_pixbuf) open_folder.connect("clicked", lambda w: OpenFileDialog("Choose file", self, ok_callback=self.ok_callback)) table.attach(style.wrap_with_align(open_folder), 2, 3, 1, 2) align = gtk.Alignment(0.5, 0, 0, 0) style.set_table(table) align.add(table) return align
def __init__(self): super(ScrollLyrics, self).__init__(_("Lyrics window"), 300, 200, DIALOG_MASK_GLASS_PAGE, self.hide_all, False, gtk.gdk.WINDOW_TYPE_HINT_NORMAL, gtk.WIN_POS_CENTER, False, True ) self.revert_button = ImageButton( app_theme.get_pixbuf("scroll_lyrics/revert_normal.png"), app_theme.get_pixbuf("scroll_lyrics/revert_hover.png"), app_theme.get_pixbuf("scroll_lyrics/revert_press.png"), ) self.titlebar.button_box.pack_start(self.revert_button, False, False) self.titlebar.button_box.reorder_child(self.revert_button, 0) self.percentage = 0.0 self.whole_lyrics = [] self.message_text = "%s for %s" % (_("DMusic"), "Linux Deepin") self.current_lyric_id = -1 self.line_count = 20 self.active_color = self.get_render_color(True) self.inactive_color = self.get_render_color() self.bg_color = (1, 1, 1) self.font_name = "文泉驿微米黑 10" self.line_margin = 1 self.padding_x = 20 self.padding_y = 10 self.bg_opacity= 0.9 self.frame_width = 7 self.text = "" self.can_seek = True self.seeking = False self.current_pointer_y = 0 self.saved_lyric_id = -1 self.saved_seek_offset = 0 self.saved_pointer_y = 0 self.drawing = gtk.EventBox() self.drawing.set_visible_window(False) self.drawing.set_app_paintable(True) self.drawing.connect_after("expose-event", self.expose_cb) self.drawing.connect("button-press-event", self.button_press_cb) self.drawing.connect("button-release-event", self.button_release_cb) self.drawing.connect("motion-notify-event", self.motion_notify_cb) self.titlebar.close_button.connect("clicked", lambda w: self.hide_and_emit()) self.body_box.add(self.drawing) self.update_line_height() config.connect("config-changed", self.changed_scroll_status)
def __init_ui(self): #self.check_bar = Imag\cceBox(app_theme.get_pixbuf("network/check_box-2.png")) self.ssid_label = Label(_("SSID:")) self.ssid_entry = InputEntry("Deepin.org") self.ssid_entry.entry.set_size_request(200 ,22) self.password_label = Label(_("Password:"******"") self.password_entry.entry.set_size_request(200 ,22) self.active_btn = Button(_("Active")) self.jump_bar = ImageButton(app_theme.get_pixbuf("network/jump_to.png"), app_theme.get_pixbuf("network/jump_to.png"), app_theme.get_pixbuf("network/jump_to.png")) self.check_bar_align = gtk.Alignment(0, 0, 0, 0) self.check_bar_align.set_size_request(36, 30) self.check_bar_align.connect("expose-event", self.expose_state) #check_bar_align = self.__wrap_align(self.check_bar, (0, 0, 10, 10)) ssid_label_align = self.__wrap_align(self.ssid_label, (0, 0, 0, 10)) self.ssid_entry_align = self.__wrap_align(self.ssid_entry) password_label_align = self.__wrap_align(self.password_label, (0, 0, 20, 10)) self.password_entry_align = self.__wrap_align(self.password_entry) self.active_align = gtk.Alignment(1, 0.5, 0, 0) self.active_align.set_padding(0, 0, 0, 10) self.active_align.add(self.active_btn) self.__pack_begin(self, [self.check_bar_align, ssid_label_align, self.ssid_entry_align, password_label_align, self.password_entry_align ]) self.ssid_entry_align.set_size_request(200, 30) self.password_entry_align.set_size_request(200, 30) self.pack_end(self.active_align, False, True) self.show_all() self.active_btn.connect("clicked", self.active_btn_callback) #self.password_entry.expose_input_entry = self.expose_input_entry self.check_out_pixbuf = app_theme.get_pixbuf('network/check_box_out.png') self.loading_pixbuf = app_theme.get_pixbuf('network/loading.png') self.check_pixbuf = app_theme.get_pixbuf('network/check_box-2.png') #self.check_bar = ImageBox(app_theme.get_pixbuf("network/"+pixbufs[state])) self.position = 1 self.net_state = 0
def handle_pkg_status(self, reply, success): container_remove_all(self.left_action_box) if success: install_status = str(reply) if install_status == "uninstalled": action_button = ImageButton( app_theme.get_pixbuf("button/install_normal.png"), app_theme.get_pixbuf("button/install_hover.png"), app_theme.get_pixbuf("button/install_press.png"), ) action_button.connect( "clicked", lambda w: global_event.emit( "install-pkg", [self.pkg_name])) self.left_action_box.pack_start(action_button) elif install_status == "unknown": status_label = Label(_("Not found")) self.left_action_box.pack_start(status_label) else: try: desktops = json.loads(install_status) if not desktops: status_label = Label(_("Successfully installed")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/start_normal.png"), app_theme.get_pixbuf("button/start_hover.png"), app_theme.get_pixbuf("button/start_press.png"), ) action_button.connect( "button-press-event", lambda w, e: self.button_press_start_button( w, e, desktops)) self.left_action_box.pack_start(action_button) except: logging.error("detail install status: %s = %s" % (self.pkg_name, install_status)) self.left_action_box.show_all() global_event.emit('update-current-status-pkg-page', self) else: global_logger.error("get_pkg_installed handle_dbus_error") global_logger.error(reply)
def __create_simple_button(self, name, callback, tip_msg=None, has_event=False): button = ImageButton( app_theme.get_pixbuf("lyric/%s_normal.png" % name), app_theme.get_pixbuf("lyric/%s_hover.png" % name), app_theme.get_pixbuf("lyric/%s_press.png" % name)) if has_event: button.connect("button-press-event", callback) else: button.connect("clicked", callback) if tip_msg: Tooltip.text(button, tip_msg) button_align = gtk.Alignment() button_align.set(0.5, 0.5, 0, 0) button_align.add(button) return button_align
def handle_pkg_status(self, reply, success): container_remove_all(self.left_action_box) if success: install_status = str(reply) if install_status == "uninstalled": action_button = ImageButton( app_theme.get_pixbuf("button/install_normal.png"), app_theme.get_pixbuf("button/install_hover.png"), app_theme.get_pixbuf("button/install_press.png"), ) action_button.connect("clicked", lambda w: global_event.emit("install-pkg", [self.pkg_name])) self.left_action_box.pack_start(action_button) elif install_status == "unknown": status_label = Label(_("Not found")) self.left_action_box.pack_start(status_label) else: try: desktops = json.loads(install_status) if not desktops: status_label = Label(_("Successfully installed")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/start_normal.png"), app_theme.get_pixbuf("button/start_hover.png"), app_theme.get_pixbuf("button/start_press.png"), ) action_button.connect("button-press-event", lambda w, e:self.button_press_start_button(w, e, desktops)) self.left_action_box.pack_start(action_button) except: logging.error("detail install status: %s = %s" % (self.pkg_name, install_status)) self.left_action_box.show_all() global_event.emit('update-current-status-pkg-page', self) else: global_logger.logerror("get_pkg_installed handle_dbus_error") global_logger.logerror(reply)
def __init__(self, data_manager): ''' init docs ''' gtk.HBox.__init__(self) self.data_manager = data_manager self.pkg_name = None self.alias_name = "" self.pkg_pixbuf = None self.pkg_star_view = None self.left_view_box = gtk.VBox() self.left_view_box.set_size_request(self.LEFT_INFO_WIDTH, - 1) self.left_logo_box = gtk.VBox() self.left_logo_box.set_size_request(-1, 90) self.star_box = gtk.HBox() self.star_align = gtk.Alignment(0.4, 0.5, 0, 0) self.star_align.set_padding(0, 5, 0, 0) self.star_align.add(self.star_box) self.left_action_box = gtk.HBox() self.left_action_align = gtk.Alignment() self.left_action_align.set(0.5, 0.5, 0, 0) self.left_action_align.set_padding(0, 30, 0, 0) self.left_action_align.add(self.left_action_box) self.left_label_table = gtk.Table(4, 1) self.left_label_table.set_row_spacings(4) self.left_label_align = gtk.Alignment() self.left_label_align.set(0.0, 0.5, 0, 0) self.left_label_align.set_padding(0, 0, 14, 0) self.left_category_name_label = Label() self.left_category_label = Label(hover_color=app_theme.get_color("homepage_hover")) self.left_category_label.set_clickable() self.left_category_label_align = gtk.Alignment() self.left_category_label_align.set(0.0, 0.5, 0, 0) self.left_category_label_align.add(self.left_category_label) self.left_category_label_box = gtk.HBox() self.left_category_label_box.pack_start(self.left_category_name_label, False, False) self.left_category_label_box.pack_start(self.left_category_label_align, True, True) self.left_category_box = gtk.VBox() self.left_version_label = Label(label_width=136) show_label_tooltip(self.left_version_label) self.left_version_label.set_ellipsize(pango.ELLIPSIZE_END) self.left_download_label = Label() self.left_size_label = Label() self.left_homepage_box = gtk.HBox() self.left_homepage_box_align = gtk.Alignment() self.left_homepage_box_align.set(0.0, 0.5, 0, 0) self.left_homepage_box_align.add(self.left_homepage_box) self.left_recommend_box = gtk.VBox() self.left_recommend_box_align = gtk.Alignment() self.left_recommend_box_align.set(0.0, 0.0, 0, 0) self.left_recommend_box_align.set_padding(30, 0, 14, 0) self.left_recommend_box_align.add(self.left_recommend_box) self.left_recommend_label = Label(_("Popular recommendations")) self.right_info_box = gtk.VBox() self.scrolled_window = ScrolledWindow(0, 0) self.right_view_box = gtk.VBox() self.right_top_box = gtk.HBox() self.right_top_box.set_size_request(-1, self.RIGHT_TITLE_BOX_HEIGHT) self.right_desc_box = gtk.VBox() self.right_slide_box = gtk.VBox() self.right_comment_box = gtk.VBox() self.right_title_box = gtk.VBox() self.return_button = ImageButton( app_theme.get_pixbuf("detail/normal.png"), app_theme.get_pixbuf("detail/hover.png"), app_theme.get_pixbuf("detail/press.png"), ) self.return_align = gtk.Alignment() self.return_align.set(0.5, 0.5, 1, 1) self.return_align.set_padding(self.ALIAS_NAME_PADDING_Y, 0, 0, self.RIGHT_INFO_PADDING_X) self.return_align.add(self.return_button) self.return_button.connect("clicked", lambda w: global_event.emit("switch-from-detail-page")) self.right_top_box.pack_start(self.right_title_box, True, True) self.right_top_box.pack_start(self.return_align, False, False) self.right_view_box.pack_start(self.right_top_box, False, False) self.right_view_box.pack_start(self.right_desc_box, False, False) self.right_view_box.pack_start(self.right_slide_box, False, False) self.right_view_box.pack_start(self.right_comment_box, False, False) self.scrolled_window.add_child(self.right_view_box) self.left_view_box.pack_start(self.left_logo_box, False, False) self.left_view_box.pack_start(self.star_align, False, False) self.left_view_box.pack_start(self.left_action_align, False, False) self.left_label_table.attach(self.left_category_box, 0, 1, 0, 1) self.left_label_table.attach(self.left_version_label, 0, 1, 1, 2) self.left_label_table.attach(self.left_size_label, 0, 1, 2, 3) self.left_label_table.attach(self.left_download_label, 0, 1, 3, 4) self.left_label_table.attach(self.left_homepage_box_align, 0, 1, 4, 5) self.left_label_align.add(self.left_label_table) self.left_view_box.pack_start(self.left_label_align, False, False) self.left_view_box.pack_start(self.left_recommend_box_align, False, False) self.right_info_box.pack_start(self.scrolled_window, True, True) self.pack_start(self.left_view_box, False, False) self.pack_start(self.right_info_box, True, True) self.left_view_box.connect("expose-event", self.expose_left_view) self.right_view_box.connect("expose-event", self.expose_right_view) self.left_logo_box.connect("expose-event", self.expose_left_logo_box) self.right_top_box.connect("expose-event", self.expose_right_top_box) self.right_title_box.connect("expose-event", self.expose_right_title_box) self.connect("hierarchy-changed", self.hierarchy_change) self.left_category_label.connect("button-press-event", lambda w, e: self.jump_to_category()) global_event.register_event("download-screenshot-finish", self.download_screenshot_finish) self.loading_label = Label(_("Loading comments...")) self.loading_label_align = gtk.Alignment(0.5, 0, 0, 0) self.loading_label_align.add(self.loading_label) self.loading_label_align.set_padding(10, 0, 0, 0) self.update_pkg_time = 0 self.update_pkg_interval = 0.2 # in seconds
class DetailPage(gtk.HBox): ''' class docs ''' PADDING_Y = 20 ICON_SIZE = 64 ICON_PADDING_X = 50 STAR_PADDING_X = 36 STAR_PADDING_Y = 12 STAR_SIZE = 13 MARK_NUMBER_SIZE = 11 MARK_NUMBER_PADDING_X = 4 MARK_NUMBER_PADDING_Y = 10 INFO_RENDER_X = 10 INFO_RENDER_Y = 140 INFO_RENDER_HEIGHT = 18 INFO_CATEGORY_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT INFO_VERSION_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 2 INFO_SIZE_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 3 INFO_DOWNLOAD_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 4 INFO_HOMEPAGE_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 5 LEFT_INFO_PADDING_X = 18 LEFT_INFO_PADDING_Y = 50 LEFT_BUTTON_PADDING_Y = 50 LEFT_INFO_WIDTH = 164 RIGHT_INFO_PADDING_X = 30 RIGHT_TITLE_BOX_HEIGHT = 70 ALIAS_NAME_SIZE = 16 ALIAS_NAME_PADDING_Y = 20 LONG_DESC_PADDING_Y = 10 LONG_DESC_WRAP_WIDTH = 630 LONG_DESC_INIT_HEIGHT = 45 MARK_SIZE = 11 MARK_PADDING_X = 5 MARK_PADDING_Y = -3 def __init__(self, data_manager): ''' init docs ''' gtk.HBox.__init__(self) self.data_manager = data_manager self.pkg_name = None self.alias_name = "" self.pkg_pixbuf = None self.pkg_star_view = None self.left_view_box = gtk.VBox() self.left_view_box.set_size_request(self.LEFT_INFO_WIDTH, -1) self.left_logo_box = gtk.VBox() self.left_logo_box.set_size_request(-1, 90) self.star_box = gtk.HBox() self.star_align = gtk.Alignment(0.4, 0.5, 0, 0) self.star_align.set_padding(0, 5, 0, 0) self.star_align.add(self.star_box) self.left_action_box = gtk.HBox() self.left_action_align = gtk.Alignment() self.left_action_align.set(0.5, 0.5, 0, 0) self.left_action_align.set_padding(0, 30, 0, 0) self.left_action_align.add(self.left_action_box) self.left_label_table = gtk.Table(4, 1) self.left_label_table.set_row_spacings(4) self.left_label_align = gtk.Alignment() self.left_label_align.set(0.0, 0.5, 0, 0) self.left_label_align.set_padding(0, 0, 14, 0) self.left_category_name_label = Label() self.left_category_label = Label( hover_color=app_theme.get_color("homepage_hover")) self.left_category_label.set_clickable() self.left_category_label_align = gtk.Alignment() self.left_category_label_align.set(0.0, 0.5, 0, 0) self.left_category_label_align.add(self.left_category_label) self.left_category_label_box = gtk.HBox() self.left_category_label_box.pack_start(self.left_category_name_label, False, False) self.left_category_label_box.pack_start(self.left_category_label_align, True, True) self.left_category_box = gtk.VBox() self.left_version_label = Label(label_width=136) show_label_tooltip(self.left_version_label) self.left_version_label.set_ellipsize(pango.ELLIPSIZE_END) self.left_download_label = Label() self.left_size_label = Label() self.left_homepage_box = gtk.HBox() self.left_homepage_box_align = gtk.Alignment() self.left_homepage_box_align.set(0.0, 0.5, 0, 0) self.left_homepage_box_align.add(self.left_homepage_box) self.left_recommend_box = gtk.VBox() self.left_recommend_box_align = gtk.Alignment() self.left_recommend_box_align.set(0.0, 0.0, 0, 0) self.left_recommend_box_align.set_padding(30, 0, 14, 0) self.left_recommend_box_align.add(self.left_recommend_box) self.left_recommend_label = Label(_("Popular recommendations")) self.right_info_box = gtk.VBox() self.scrolled_window = ScrolledWindow(0, 0) self.right_view_box = gtk.VBox() self.right_top_box = gtk.HBox() self.right_top_box.set_size_request(-1, self.RIGHT_TITLE_BOX_HEIGHT) self.right_desc_box = gtk.VBox() self.right_slide_box = gtk.VBox() self.right_comment_box = gtk.VBox() self.right_title_box = gtk.VBox() self.return_button = ImageButton( app_theme.get_pixbuf("detail/normal.png"), app_theme.get_pixbuf("detail/hover.png"), app_theme.get_pixbuf("detail/press.png"), ) self.return_align = gtk.Alignment() self.return_align.set(0.5, 0.5, 1, 1) self.return_align.set_padding(self.ALIAS_NAME_PADDING_Y, 0, 0, self.RIGHT_INFO_PADDING_X) self.return_align.add(self.return_button) self.return_button.connect( "clicked", lambda w: global_event.emit("switch-from-detail-page")) self.right_top_box.pack_start(self.right_title_box, True, True) self.right_top_box.pack_start(self.return_align, False, False) self.right_view_box.pack_start(self.right_top_box, False, False) self.right_view_box.pack_start(self.right_desc_box, False, False) self.right_view_box.pack_start(self.right_slide_box, False, False) self.right_view_box.pack_start(self.right_comment_box, False, False) self.scrolled_window.add_child(self.right_view_box) self.left_view_box.pack_start(self.left_logo_box, False, False) self.left_view_box.pack_start(self.star_align, False, False) self.left_view_box.pack_start(self.left_action_align, False, False) self.left_label_table.attach(self.left_category_box, 0, 1, 0, 1) self.left_label_table.attach(self.left_version_label, 0, 1, 1, 2) self.left_label_table.attach(self.left_size_label, 0, 1, 2, 3) self.left_label_table.attach(self.left_download_label, 0, 1, 3, 4) self.left_label_table.attach(self.left_homepage_box_align, 0, 1, 4, 5) self.left_label_align.add(self.left_label_table) self.left_view_box.pack_start(self.left_label_align, False, False) self.left_view_box.pack_start(self.left_recommend_box_align, False, False) self.right_info_box.pack_start(self.scrolled_window, True, True) self.pack_start(self.left_view_box, False, False) self.pack_start(self.right_info_box, True, True) self.left_view_box.connect("expose-event", self.expose_left_view) self.right_view_box.connect("expose-event", self.expose_right_view) self.left_logo_box.connect("expose-event", self.expose_left_logo_box) self.right_top_box.connect("expose-event", self.expose_right_top_box) self.right_title_box.connect("expose-event", self.expose_right_title_box) self.connect("hierarchy-changed", self.hierarchy_change) self.left_category_label.connect("button-press-event", lambda w, e: self.jump_to_category()) global_event.register_event("download-screenshot-finish", self.download_screenshot_finish) self.loading_label = Label(_("Loading comments...")) self.loading_label_align = gtk.Alignment(0.5, 0, 0, 0) self.loading_label_align.add(self.loading_label) self.loading_label_align.set_padding(10, 0, 0, 0) self.update_pkg_time = 0 self.update_pkg_interval = 0.2 # in seconds def hierarchy_change(self, widget, previous_toplevel): # When detail page remove from it's container, previous_toplevel is not None. if previous_toplevel != None: container_remove_all( self.right_slide_box ) # remove slide box first, to avoid screenshot area flash container_remove_all( self.right_comment_box ) # remove comment box first, to avoid comment area flash def grade_pkg(self): if self.pkg_star_view: global_event.emit("grade-pkg", (self.pkg_name, self.pkg_star_view), self.pkg_star_view.star_buffer.star_level) self.pkg_star_view.set_star_level(int(self.star)) self.pkg_star_view.queue_draw() def jump_to_category(self): global_event.emit("jump-to-category", self.category[0], self.category[1]) def expose_left_view(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() # Draw split line. cr.set_source_rgb(*color_hex_to_cairo("#AAAAAA")) cr.rectangle(rect.x + rect.width - 1, rect.y, 1, rect.height) cr.fill() def expose_right_view(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def expose_left_logo_box(self, widget, event): if self.pkg_name != None: # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw pkg icon. self.pkg_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( get_icon_pixbuf_path(utils.get_origin_name(self.pkg_name)), self.ICON_SIZE, self.ICON_SIZE) draw_pixbuf( cr, self.pkg_pixbuf, rect.x + self.ICON_PADDING_X + (self.ICON_SIZE - self.pkg_pixbuf.get_width()) / 2, rect.y + self.PADDING_Y) def expose_right_top_box(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def expose_right_title_box(self, widget, event): if self.pkg_name != None: # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw alias name. draw_text(cr, "<b>%s</b>" % self.alias_name, rect.x + self.RIGHT_INFO_PADDING_X, rect.y + self.ALIAS_NAME_PADDING_Y, rect.width - self.RIGHT_INFO_PADDING_X, self.ALIAS_NAME_SIZE, text_size=self.ALIAS_NAME_SIZE) def expose_resizable_label_background(self, widget, event): if self.pkg_name != None: # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def button_press_start_button(self, widget, event, desktops): pixbuf = app_theme.get_pixbuf("button/start_normal.png").get_pixbuf() desktop_infos = self.data_manager.get_pkg_desktop_info(desktops) global_event.emit( "start-pkg", self.alias_name, desktop_infos, (int(event.x), int(event.y), pixbuf.get_width() / 2, 0)) @post_gui def update_some_info(self, info): self.star = float(info[0]['mark'].encode('utf-8').strip()) if self.pkg_star_view: self.pkg_star_view.star_buffer.star_level = int(self.star) self.pkg_star_view.queue_draw() self.pkg_star_mark.update_star(self.star) self.pkg_star_mark.queue_draw() self.downlad_number = info[0]['down_nums'].encode('utf-8').strip() self.left_download_label.set_text( _('Download: %s') % self.downlad_number) def update_pkg_info(self, pkg_name): current_time = time.time() if current_time - self.update_pkg_time < self.update_pkg_interval: return False else: self.update_pkg_time = current_time FetchPackageInfo(pkg_name, self.update_some_info).start() self.pkg_name = pkg_name detail_info = self.data_manager.get_pkg_detail_info(self.pkg_name) self.category = detail_info['category'] self.long_desc = detail_info['long_desc'] self.version = detail_info['version'] self.homepage = detail_info['homepage'] self.alias_name = detail_info['alias_name'] self.recommend_pkgs = detail_info['recommend_pkgs'] self.pkg_star_view = StarView() self.pkg_star_view.connect("clicked", lambda w: self.grade_pkg()) self.pkg_star_mark = StarMark(5.0, self.MARK_SIZE, self.MARK_PADDING_X, self.MARK_PADDING_Y) container_remove_all(self.star_box) self.star_box.pack_start(self.pkg_star_view, False, False) self.star_box.pack_start(self.pkg_star_mark, False, False) self.fetch_pkg_status() container_remove_all(self.left_category_box) if self.category != None: self.left_category_name_label.set_text(_("Category: ")) self.left_category_label.set_text( get_category_name(self.category[1])) self.left_category_box.add(self.left_category_label_box) self.left_version_label.set_text(_("Version: %s") % self.version) self.left_download_label.set_text(_("Download: 0")) self.left_size_label.set_text(_("Size: calculating...")) container_remove_all(self.left_homepage_box) if self.homepage != "": homepage_label = Label( _("Visit Homepage"), text_color=app_theme.get_color("homepage"), hover_color=app_theme.get_color("homepage_hover")) homepage_label.set_clickable() homepage_label.connect( "button-press-event", lambda w, e: run_command("xdg-open %s" % self.homepage)) self.left_homepage_box.pack_start(homepage_label) container_remove_all(self.left_recommend_box) if len(self.recommend_pkgs) > 0: self.left_recommend_box.pack_start(self.left_recommend_label, False, False, 8) for (recommend_pkg_name, alias_name, star) in self.recommend_pkgs: self.left_recommend_box.pack_start( RecommendPkgItem(self, recommend_pkg_name, alias_name, star), False, False, 4) container_remove_all(self.right_desc_box) resizable_label = ResizableLabel( self.long_desc.replace("&", "&").replace("<", "<").replace( ">", ">"), self.LONG_DESC_WRAP_WIDTH, self.LONG_DESC_INIT_HEIGHT, 3) resizable_align = gtk.Alignment() resizable_align.set(0.5, 0.5, 1, 1) resizable_align.set_padding(0, 0, self.RIGHT_INFO_PADDING_X, self.RIGHT_INFO_PADDING_X) resizable_align.add(resizable_label) resizable_align.connect("expose-event", self.expose_resizable_label_background) self.right_desc_box.pack_start(resizable_align, False, False) self.show_screenshot() self.fetch_comment() self.show_all() def handle_pkg_status(self, reply, success): container_remove_all(self.left_action_box) if success: install_status = str(reply) if install_status == "uninstalled": action_button = ImageButton( app_theme.get_pixbuf("button/install_normal.png"), app_theme.get_pixbuf("button/install_hover.png"), app_theme.get_pixbuf("button/install_press.png"), ) action_button.connect( "clicked", lambda w: global_event.emit( "install-pkg", [self.pkg_name])) self.left_action_box.pack_start(action_button) elif install_status == "unknown": status_label = Label(_("Not found")) self.left_action_box.pack_start(status_label) else: try: desktops = json.loads(install_status) if not desktops: status_label = Label(_("Successfully installed")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/start_normal.png"), app_theme.get_pixbuf("button/start_hover.png"), app_theme.get_pixbuf("button/start_press.png"), ) action_button.connect( "button-press-event", lambda w, e: self.button_press_start_button( w, e, desktops)) self.left_action_box.pack_start(action_button) except: logging.error("detail install status: %s = %s" % (self.pkg_name, install_status)) self.left_action_box.show_all() global_event.emit('update-current-status-pkg-page', self) else: global_logger.error("get_pkg_installed handle_dbus_error") global_logger.error(reply) def handle_pkg_download_size(self, reply, success): # FIXME: download information display if success: if reply[0] == PKG_SIZE_OWN or reply[0] == PKG_SIZE_DOWNLOAD: self.left_size_label.set_text( _("Size: %s") % bit_to_human_str(reply[1])) elif reply[0] == PKG_SIZE_ERROR: self.left_size_label.set_text("") global_logger.error("Error for calculate pkg size!") else: global_logger.error( "request_pkgs_install_status handle_dbus_error") global_logger.error(reply) def fetch_pkg_status(self): self.data_manager.get_pkg_installed(self.pkg_name, self.handle_pkg_status) self.data_manager.get_pkg_download_size(self.pkg_name, self.handle_pkg_download_size) def open_url(self, webview, frame, network_request, nav_action, policy_dec): webbrowser.open(network_request.get_uri()) def webview_console_message_handler(self, webview, message, line, source_id): return True def fetch_comment(self): if is_network_connected(): container_remove_all(self.right_comment_box) loading_label = Label(_("Loading comments...")) loading_label_align = gtk.Alignment(0.5, 0, 0, 0) loading_label_align.add(loading_label) loading_label_align.set_padding(10, 0, 0, 0) self.right_comment_box.pack_start(loading_label_align, False, False) web_view = WebView(os.path.join(CONFIG_DIR, "cookie.txt")) web_view.connect("new-window-policy-decision-requested", self.open_url) web_view.connect('console-message', self.webview_console_message_handler) web_view_align = gtk.Alignment() web_view_align.set(0.5, 0, 0, 0) web_view_align.set_padding(33, 33, 33, 33) web_view_align.add(web_view) web_settings = web_view.get_settings() web_settings.set_property("enable-plugins", False) web_settings.set_property("enable-scripts", True) web_view.open("%s/softcenter/v1/comment?n=%s&hl=%s" % ( SERVER_ADDRESS, self.pkg_name, LANGUAGE, )) web_view.connect("load-finished", self.comment_load_finished_cb, web_view_align) create_thread(self.fetch_screenshot).start() def comment_load_finished_cb(self, webview, frame, web_view_align): self.scrolled_window.connect( "vscrollbar-state-changed", lambda w, p: self.load_more_comment(p, webview)) container_remove_all(self.right_comment_box) self.right_comment_box.pack_start(web_view_align, True, True) self.right_comment_box.show_all() def load_more_comment(self, postion, webview): if postion == "bottom": webview.execute_script('$("#nav_next").click();') def fetch_screenshot(self): screenshot_dir = os.path.join(SCREENSHOT_DOWNLOAD_DIR, self.pkg_name) screenshot_md5_path = os.path.join(screenshot_dir, "screenshot_md5.txt") remote_screenshot_md5_url = "%s/zh_CN/%s/screenshot_md5.txt" % ( SCREENSHOT_HOST, self.pkg_name) remote_screenshot_zip_url = "%s/zh_CN/%s/screenshot.zip" % ( SCREENSHOT_HOST, self.pkg_name) try: remote_md5 = urllib2.urlopen(remote_screenshot_md5_url).read() need_download = False if os.path.exists(screenshot_dir): if os.path.exists(screenshot_md5_path): local_md5 = read_file(screenshot_md5_path) if remote_md5 != local_md5: need_download = True else: need_download = True else: need_download = True if need_download: write_file(screenshot_md5_path, remote_md5, True) try: urllib.urlretrieve( remote_screenshot_zip_url, os.path.join(SCREENSHOT_DOWNLOAD_DIR, self.pkg_name, "screenshot.zip")) global_event.emit("download-screenshot-finish", self.pkg_name) except Exception, e: global_logger.error("Download screenshot error: %s" % e) except Exception, e: global_logger.error("fetch_screenshot got error: %s" % e)
def __init__(self, filename=""): ''' init share @param filename: the file to share ''' self.upload_image = filename self.thumb_width = 188 self.thumb_height = 168 self.MAX_CHAR = 140 #self.__text_frame_color = (0.76, 0.76, 0.76) self.__win_width = 602 open(COOKIE_FILE,'wb').close() self.window = DialogBox(_("Share to social networks"), close_callback=gtk.main_quit) self.window.set_keep_above(True) self.window.set_size_request(self.__win_width+20, 288) self.window.set_resizable(False) #self.window.titlebar.connect("expose-event", self.__expose_top_and_bottome) #self.window.button_box.connect("expose-event", self.__expose_top_and_bottome) # create slider self.slider = HSlider() self.slider_list = [] self.share_box = gtk.VBox(False) # first page, input context self.web_box = gtk.VBox(False, 10) # second page, login self.result_box = gtk.VBox(False, 10) # third page, share result share_align = gtk.Alignment() share_align.set(0.5, 0.5, 0, 0) share_align.add(self.share_box) share_align.connect("expose-event", self.__slider_expose) # go back button web_left_button = ImageButton( app_theme.get_pixbuf("share/back_normal.png"), app_theme.get_pixbuf("share/back_hover.png"), app_theme.get_pixbuf("share/back_press.png")) web_left_button.connect("clicked", lambda w: self.set_slide_index(0)) web_left_button.set_can_focus(False) utils.set_clickable_cursor(web_left_button) # show url entry self.web_url_entry = InputEntry() self.web_url_entry.set_editable(False) self.web_url_entry.set_size(555, 20) self.web_url_entry.entry.right_menu_visible_flag = False # alig url entry web_navigate_vbox = gtk.VBox(False) web_navigate_vbox.pack_start(self.web_url_entry) web_navigate_t_align = gtk.Alignment() web_navigate_t_align.set(0.0, 0.5, 0, 0) web_navigate_t_align.add(web_navigate_vbox) # pack back button and url entry web_navigate_box = gtk.HBox(False, 7) web_navigate_box.pack_start(web_left_button, False, False) web_navigate_box.pack_start(web_navigate_t_align) web_navigate_align = gtk.Alignment() web_navigate_align.set(0.5, 0.5, 0, 0) web_navigate_align.set_padding(4, 0, 11, 13) web_navigate_align.add(web_navigate_box) # create a webkit self.web_view = WebView(COOKIE_FILE) self.web_view.connect("notify::load-status", self.web_view_load_status) self.web_view.connect("load-error", self.web_view_load_error) self.web_scrolled_window = ScrolledWindow() self.web_scrolled_window.add(self.web_view) self.web_scrolled_window.set_size_request(590, 228) self.web_box.pack_start(web_navigate_align, False, False) self.web_box.pack_start(self.web_scrolled_window) #self.web_box.set_size_request(-1, 258) web_align = gtk.Alignment() web_align.set(0.5, 0.0, 0, 1) web_align.add(self.web_box) web_align.connect("expose-event", self.__slider_expose) res_align = gtk.Alignment() res_align.set(0.5, 0.5, 0, 0) res_align.add(self.result_box) res_align.connect("expose-event", self.__slider_expose) self.slider.set_to_page(share_align) self.slider_list.append(share_align) self.slider_list.append(web_align) self.slider_list.append(res_align) self.__weibo_list = [] self.sina = weibo.Sina(self.web_view) self.qq = weibo.Tencent(self.web_view) self.__weibo_list.append(self.sina) self.__weibo_list.append(self.qq) if default_locale != 'zh_CN': self.twitter = weibo.Twitter(self.web_view) #self.__weibo_list.append(self.twitter) self.__current_weibo = None self.weibo_name_l18n = { 'Sina': _("Sina"), 'Tencent': _("Tencent"), 'Twitter': _("Twitter"), } self.window.body_box.pack_start(self.slider, True, True) self.init_share_box()
os.path.join(get_current_dir(__file__), "app_theme"), ) from dtk.ui.application import Application from dtk.ui.button import ImageButton from dtk.ui.dialog import ConfirmDialog import gtk if __name__ == "__main__": application = Application() application.set_default_size(600, 450) application.add_titlebar(title="ImageButton example!") image_button = ImageButton( normal_dpixbuf=app_theme.get_pixbuf("action/play_normal.png"), hover_dpixbuf=app_theme.get_pixbuf("action/play_hover.png"), press_dpixbuf=app_theme.get_pixbuf("action/play_press.png"), insensitive_dpixbuf=None, scale_x=False, content=None, ) image_button.connect( "clicked", lambda w: ConfirmDialog( title="反馈对忽框", message="点击播放按钮", ).show_all()) image_button_align = gtk.Alignment() image_button_align.set(0.5, 0.5, 0, 0) image_button_align.add(image_button) application.main_box.add(image_button_align)
def __init__(self): ImageButton.__init__(self, app_theme.get_pixbuf("entry/close_normal.png"), app_theme.get_pixbuf("entry/close_hover.png"), app_theme.get_pixbuf("entry/close_press.png") )
def __init__(self): ImageButton.__init__(self, app_theme.get_pixbuf("filter/back_normal.png"), app_theme.get_pixbuf("filter/back_hover.png"), app_theme.get_pixbuf("filter/back_press.png") )
def share_to_weibo_result(self): '''result of share to weibo''' font_color = app_theme.get_color("share_result_text") res_hbox = gtk.HBox(False) res_hbox.set_size_request(-1, 240) res_left_box = DialogLeftButtonBox() res_right_box = DialogRightButtonBox() res_left_box.button_align.set(0.5, 0.0, 0, 1) res_right_box.button_align.set(0.5, 0.0, 0, 1) res_left_box.button_align.set_padding(5, 9, 19, 0) res_right_box.button_align.set_padding(30, 0, 0, 0) res_left_box.set_size_request(405, -1) res_right_box.set_size_request(195, -1) res_hbox.pack_start(res_left_box) res_hbox.pack_start( VSeparator(app_theme.get_shadow_color("VSeparator").get_color_info(), 0, 0)) res_hbox.pack_start(res_right_box) res_vbox = gtk.VBox(False) follow_vbox = gtk.VBox(False) tmp_img = gtk.Image() # only use as a placeholder tmp_img.set_size_request(-1, 50) res_vbox.pack_start(tmp_img, False, False) follow_tip_hbox = gtk.HBox(False) img = gtk.image_new_from_file(app_theme.get_theme_file_path("image/share/deepin_logo.png")) follow_tip_hbox.pack_start(img, False, False, 5) follow_tip_hbox.pack_start( Label("%s %s" % (_("Follow"), "Linux Deepin"), text_color=app_theme_get_dynamic_color("#5f5f5f"), text_size=12, enable_select=False), False, False) follow_vbox.pack_start(follow_tip_hbox, False, False, 13) for weibo in self.to_share_weibo_res: vbox = gtk.VBox(False, 1) tip_box = gtk.HBox() error_box = gtk.HBox() vbox.pack_start(tip_box, False, False) vbox.pack_start(error_box, False, False) if self.to_share_weibo_res[weibo][0]: # upload succeed img = gtk.image_new_from_file(app_theme.get_theme_file_path("image/share/share_succeed.png")) #link = LinkButton(_(weibo.t_type), text_size=13, self.to_share_weibo_res[weibo][1]) link = Label(_(weibo.t_type), text_size=12, text_color=app_theme.get_color("link_text")) #, enable_gaussian=True, gaussian_radious=1, border_radious=0) link.add_events(gtk.gdk.BUTTON_PRESS_MASK) link.connect("enter-notify-event", lambda w, e: self.__draw_under_line(w)) link.connect("leave-notify-event", lambda w, e: w.queue_draw()) link.connect("button-press-event", self.goto_weibo_button_clicked, weibo) link_box = gtk.HBox(False) link_box.pack_start(link, False, False) utils.set_clickable_cursor(link) text = _("Share to") label = Label(text, text_size=12, text_color=font_color, enable_select=False) text = _("Successful") label1 = Label(text, text_size=12, text_color=font_color, enable_select=False) tip_box.pack_start(img, False, False, 15) tip_box.pack_start(label, False, False, 3) tip_box.pack_start(link_box, False, False, 3) tip_box.pack_start(label1, False, False) # only use as a placeholder img = gtk.Image() img.set_size_request(20, 1) error_box.pack_start(img, False, False, 16) tmp = Label(" ", text_size=9, label_width=200) tmp.set_size_request(200, 1) error_box.pack_start(tmp, False, False) #print text else: # upload failed img = gtk.image_new_from_file(app_theme.get_theme_file_path("image/share/share_failed.png")) #text = "% %s %s." % (_(weibo.t_type), _("upload failed")) text = _("Share to") label1 = Label(text, text_size=12, text_color=font_color, enable_select=False) label2 = Label(_(weibo.t_type), text_size=12, text_color=font_color, enable_select=False) text = _("Failed") label3 = Label(text, text_size=12, text_color=font_color, enable_select=False) if weibo.curl.error: error = "(%s)" % _(weibo.curl.error) elif weibo.get_error_msg(): error = "(%s)" % _(weibo.get_error_msg()) else: error = "(%s)" % _("Unknown reason") #print "%s: %s" % (weibo.t_type, error) #print "%s: %s" % (weibo.t_type, weibo.get_error_msg()) label = Label(text, text_size=12, text_color=font_color, enable_select=False) tip_box.pack_start(img, False, False, 15) tip_box.pack_start(label1, False, False, 3) tip_box.pack_start(label2, False, False, 3) tip_box.pack_start(label3, False, False) img = gtk.Image() # only use as a placeholder img.set_size_request(20, 20) error_box.pack_start(img, False, False, 16) error_box.pack_start(Label(error, text_size=9, label_width=200, text_color=font_color, enable_select=False), False, False) #print text res_vbox.pack_start(vbox, False, False, 10) for weibo in self.deepin_info: box = gtk.HBox(False, 15) # followed img = gtk.image_new_from_pixbuf(app_theme.get_pixbuf("share/"+weibo.t_type+".png").get_pixbuf()) box.pack_start(img, False, False) if self.deepin_info[weibo] is not None and self.deepin_info[weibo][3]: if not default_locale.startswith("zh_"): button = gtk.image_new_from_pixbuf( app_theme.get_pixbuf("share/followed_en.png").get_pixbuf()) else: button = gtk.image_new_from_pixbuf( app_theme.get_pixbuf("share/followed.png").get_pixbuf()) else: # to follow if not default_locale.startswith("zh_"): button = ImageButton( app_theme.get_pixbuf("share/follow_normal_en.png"), app_theme.get_pixbuf("share/follow_hover_en.png"), app_theme.get_pixbuf("share/follow_press_en.png")) else: button = ImageButton( app_theme.get_pixbuf("share/follow_normal.png"), app_theme.get_pixbuf("share/follow_hover.png"), app_theme.get_pixbuf("share/follow_press.png")) button.connect("clicked", self.friendships_add_button_clicked, weibo, box) box.pack_start(button, False, False) align = gtk.Alignment() align.set(0.0, 0.5, 0, 0) align.set_padding(0, 0, 30, 0) align.add(box) follow_vbox.pack_start(align, False, False, 8) res_left_box.set_buttons([res_vbox]) res_right_box.set_buttons([follow_vbox]) self.result_box.pack_start(res_hbox, False, False) self.result_box.show_all() self.set_slide_index(2)
class DetailPage(gtk.HBox): ''' class docs ''' PADDING_Y = 20 ICON_SIZE = 64 ICON_PADDING_X = 50 STAR_PADDING_X = 36 STAR_PADDING_Y = 12 STAR_SIZE = 13 MARK_NUMBER_SIZE = 11 MARK_NUMBER_PADDING_X = 4 MARK_NUMBER_PADDING_Y = 10 INFO_RENDER_X = 10 INFO_RENDER_Y = 140 INFO_RENDER_HEIGHT = 18 INFO_CATEGORY_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT INFO_VERSION_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 2 INFO_SIZE_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 3 INFO_DOWNLOAD_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 4 INFO_HOMEPAGE_RENDER_Y = INFO_RENDER_Y + INFO_RENDER_HEIGHT * 5 LEFT_INFO_PADDING_X = 18 LEFT_INFO_PADDING_Y = 50 LEFT_BUTTON_PADDING_Y = 50 LEFT_INFO_WIDTH = 164 RIGHT_INFO_PADDING_X = 30 RIGHT_TITLE_BOX_HEIGHT = 70 ALIAS_NAME_SIZE = 16 ALIAS_NAME_PADDING_Y = 20 LONG_DESC_PADDING_Y = 10 LONG_DESC_WRAP_WIDTH = 630 LONG_DESC_INIT_HEIGHT = 45 MARK_SIZE = 11 MARK_PADDING_X = 5 MARK_PADDING_Y = -3 def __init__(self, data_manager): ''' init docs ''' gtk.HBox.__init__(self) self.data_manager = data_manager self.pkg_name = None self.alias_name = "" self.pkg_pixbuf = None self.pkg_star_view = None self.left_view_box = gtk.VBox() self.left_view_box.set_size_request(self.LEFT_INFO_WIDTH, - 1) self.left_logo_box = gtk.VBox() self.left_logo_box.set_size_request(-1, 90) self.star_box = gtk.HBox() self.star_align = gtk.Alignment(0.4, 0.5, 0, 0) self.star_align.set_padding(0, 5, 0, 0) self.star_align.add(self.star_box) self.left_action_box = gtk.HBox() self.left_action_align = gtk.Alignment() self.left_action_align.set(0.5, 0.5, 0, 0) self.left_action_align.set_padding(0, 30, 0, 0) self.left_action_align.add(self.left_action_box) self.left_label_table = gtk.Table(4, 1) self.left_label_table.set_row_spacings(4) self.left_label_align = gtk.Alignment() self.left_label_align.set(0.0, 0.5, 0, 0) self.left_label_align.set_padding(0, 0, 14, 0) self.left_category_name_label = Label() self.left_category_label = Label(hover_color=app_theme.get_color("homepage_hover")) self.left_category_label.set_clickable() self.left_category_label_align = gtk.Alignment() self.left_category_label_align.set(0.0, 0.5, 0, 0) self.left_category_label_align.add(self.left_category_label) self.left_category_label_box = gtk.HBox() self.left_category_label_box.pack_start(self.left_category_name_label, False, False) self.left_category_label_box.pack_start(self.left_category_label_align, True, True) self.left_category_box = gtk.VBox() self.left_version_label = Label(label_width=136) show_label_tooltip(self.left_version_label) self.left_version_label.set_ellipsize(pango.ELLIPSIZE_END) self.left_download_label = Label() self.left_size_label = Label() self.left_homepage_box = gtk.HBox() self.left_homepage_box_align = gtk.Alignment() self.left_homepage_box_align.set(0.0, 0.5, 0, 0) self.left_homepage_box_align.add(self.left_homepage_box) self.left_recommend_box = gtk.VBox() self.left_recommend_box_align = gtk.Alignment() self.left_recommend_box_align.set(0.0, 0.0, 0, 0) self.left_recommend_box_align.set_padding(30, 0, 14, 0) self.left_recommend_box_align.add(self.left_recommend_box) self.left_recommend_label = Label(_("Popular recommendations")) self.right_info_box = gtk.VBox() self.scrolled_window = ScrolledWindow(0, 0) self.right_view_box = gtk.VBox() self.right_top_box = gtk.HBox() self.right_top_box.set_size_request(-1, self.RIGHT_TITLE_BOX_HEIGHT) self.right_desc_box = gtk.VBox() self.right_slide_box = gtk.VBox() self.right_comment_box = gtk.VBox() self.right_title_box = gtk.VBox() self.return_button = ImageButton( app_theme.get_pixbuf("detail/normal.png"), app_theme.get_pixbuf("detail/hover.png"), app_theme.get_pixbuf("detail/press.png"), ) self.return_align = gtk.Alignment() self.return_align.set(0.5, 0.5, 1, 1) self.return_align.set_padding(self.ALIAS_NAME_PADDING_Y, 0, 0, self.RIGHT_INFO_PADDING_X) self.return_align.add(self.return_button) self.return_button.connect("clicked", lambda w: global_event.emit("switch-from-detail-page")) self.right_top_box.pack_start(self.right_title_box, True, True) self.right_top_box.pack_start(self.return_align, False, False) self.right_view_box.pack_start(self.right_top_box, False, False) self.right_view_box.pack_start(self.right_desc_box, False, False) self.right_view_box.pack_start(self.right_slide_box, False, False) self.right_view_box.pack_start(self.right_comment_box, False, False) self.scrolled_window.add_child(self.right_view_box) self.left_view_box.pack_start(self.left_logo_box, False, False) self.left_view_box.pack_start(self.star_align, False, False) self.left_view_box.pack_start(self.left_action_align, False, False) self.left_label_table.attach(self.left_category_box, 0, 1, 0, 1) self.left_label_table.attach(self.left_version_label, 0, 1, 1, 2) self.left_label_table.attach(self.left_size_label, 0, 1, 2, 3) self.left_label_table.attach(self.left_download_label, 0, 1, 3, 4) self.left_label_table.attach(self.left_homepage_box_align, 0, 1, 4, 5) self.left_label_align.add(self.left_label_table) self.left_view_box.pack_start(self.left_label_align, False, False) self.left_view_box.pack_start(self.left_recommend_box_align, False, False) self.right_info_box.pack_start(self.scrolled_window, True, True) self.pack_start(self.left_view_box, False, False) self.pack_start(self.right_info_box, True, True) self.left_view_box.connect("expose-event", self.expose_left_view) self.right_view_box.connect("expose-event", self.expose_right_view) self.left_logo_box.connect("expose-event", self.expose_left_logo_box) self.right_top_box.connect("expose-event", self.expose_right_top_box) self.right_title_box.connect("expose-event", self.expose_right_title_box) self.connect("hierarchy-changed", self.hierarchy_change) self.left_category_label.connect("button-press-event", lambda w, e: self.jump_to_category()) global_event.register_event("download-screenshot-finish", self.download_screenshot_finish) self.loading_label = Label(_("Loading comments...")) self.loading_label_align = gtk.Alignment(0.5, 0, 0, 0) self.loading_label_align.add(self.loading_label) self.loading_label_align.set_padding(10, 0, 0, 0) self.update_pkg_time = 0 self.update_pkg_interval = 0.2 # in seconds def hierarchy_change(self, widget, previous_toplevel): # When detail page remove from it's container, previous_toplevel is not None. if previous_toplevel != None: container_remove_all(self.right_slide_box) # remove slide box first, to avoid screenshot area flash container_remove_all(self.right_comment_box) # remove comment box first, to avoid comment area flash def grade_pkg(self): if self.pkg_star_view: global_event.emit("grade-pkg", (self.pkg_name, self.pkg_star_view), self.pkg_star_view.star_buffer.star_level) self.pkg_star_view.set_star_level(int(self.star)) self.pkg_star_view.queue_draw() def jump_to_category(self): global_event.emit("jump-to-category", self.category[0], self.category[1]) def expose_left_view(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() # Draw split line. cr.set_source_rgb(*color_hex_to_cairo("#AAAAAA")) cr.rectangle(rect.x + rect.width - 1, rect.y, 1, rect.height) cr.fill() def expose_right_view(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def expose_left_logo_box(self, widget, event): if self.pkg_name != None: # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw pkg icon. self.pkg_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size( get_icon_pixbuf_path( utils.get_origin_name(self.pkg_name)), self.ICON_SIZE, self.ICON_SIZE) draw_pixbuf(cr, self.pkg_pixbuf, rect.x + self.ICON_PADDING_X + (self.ICON_SIZE - self.pkg_pixbuf.get_width()) / 2, rect.y + self.PADDING_Y) def expose_right_top_box(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def expose_right_title_box(self, widget, event): if self.pkg_name != None: # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw alias name. draw_text( cr, "<b>%s</b>" % self.alias_name, rect.x + self.RIGHT_INFO_PADDING_X, rect.y + self.ALIAS_NAME_PADDING_Y, rect.width - self.RIGHT_INFO_PADDING_X, self.ALIAS_NAME_SIZE, text_size=self.ALIAS_NAME_SIZE) def expose_resizable_label_background(self, widget, event): if self.pkg_name != None: # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw background. cr.set_source_rgb(*color_hex_to_cairo("#FFFFFF")) cr.rectangle(rect.x, rect.y, rect.width, rect.height) cr.fill() def button_press_start_button(self, widget, event, desktops): pixbuf = app_theme.get_pixbuf("button/start_normal.png").get_pixbuf() desktop_infos = self.data_manager.get_pkg_desktop_info(desktops) global_event.emit("start-pkg", self.alias_name, desktop_infos, (int(event.x), int(event.y), pixbuf.get_width() / 2, 0)) @post_gui def update_some_info(self, info): self.star = float(info[0]['mark'].encode('utf-8').strip()) if self.pkg_star_view: self.pkg_star_view.star_buffer.star_level = int(self.star) self.pkg_star_view.queue_draw() self.pkg_star_mark.update_star(self.star) self.pkg_star_mark.queue_draw() self.downlad_number = info[0]['down_nums'].encode('utf-8').strip() self.left_download_label.set_text(_('Download: %s') % self.downlad_number) def update_pkg_info(self, pkg_name): current_time = time.time() if current_time - self.update_pkg_time < self.update_pkg_interval: return False else: self.update_pkg_time = current_time FetchPackageInfo(pkg_name, self.update_some_info).start() self.pkg_name = pkg_name detail_info = self.data_manager.get_pkg_detail_info(self.pkg_name) self.category = detail_info['category'] self.long_desc = detail_info['long_desc'] self.version = detail_info['version'] self.homepage = detail_info['homepage'] self.alias_name = detail_info['alias_name'] self.recommend_pkgs = detail_info['recommend_pkgs'] self.pkg_star_view = StarView() self.pkg_star_view.connect("clicked", lambda w: self.grade_pkg()) self.pkg_star_mark = StarMark(5.0, self.MARK_SIZE, self.MARK_PADDING_X, self.MARK_PADDING_Y) container_remove_all(self.star_box) self.star_box.pack_start(self.pkg_star_view, False, False) self.star_box.pack_start(self.pkg_star_mark, False, False) self.fetch_pkg_status() container_remove_all(self.left_category_box) if self.category != None: self.left_category_name_label.set_text(_("Category: ")) self.left_category_label.set_text(get_category_name(self.category[1])) self.left_category_box.add(self.left_category_label_box) self.left_version_label.set_text(_("Version: %s") % self.version) self.left_download_label.set_text(_("Download: 0")) self.left_size_label.set_text(_("Size: calculating...")) container_remove_all(self.left_homepage_box) if self.homepage != "": homepage_label = Label(_("Visit Homepage"), text_color=app_theme.get_color("homepage"), hover_color=app_theme.get_color("homepage_hover")) homepage_label.set_clickable() homepage_label.connect("button-press-event", lambda w, e: run_command("xdg-open %s" % self.homepage)) self.left_homepage_box.pack_start(homepage_label) container_remove_all(self.left_recommend_box) if len(self.recommend_pkgs) > 0: self.left_recommend_box.pack_start(self.left_recommend_label, False, False, 8) for (recommend_pkg_name, alias_name, star) in self.recommend_pkgs: self.left_recommend_box.pack_start(RecommendPkgItem(self, recommend_pkg_name, alias_name, star), False, False, 4) container_remove_all(self.right_desc_box) resizable_label = ResizableLabel(self.long_desc.replace("&", "&").replace("<", "<").replace(">", ">"), self.LONG_DESC_WRAP_WIDTH, self.LONG_DESC_INIT_HEIGHT, 3) resizable_align = gtk.Alignment() resizable_align.set(0.5, 0.5, 1, 1) resizable_align.set_padding(0, 0, self.RIGHT_INFO_PADDING_X, self.RIGHT_INFO_PADDING_X) resizable_align.add(resizable_label) resizable_align.connect("expose-event", self.expose_resizable_label_background) self.right_desc_box.pack_start(resizable_align, False, False) self.show_screenshot() self.fetch_comment() self.show_all() def handle_pkg_status(self, reply, success): container_remove_all(self.left_action_box) if success: install_status = str(reply) if install_status == "uninstalled": action_button = ImageButton( app_theme.get_pixbuf("button/install_normal.png"), app_theme.get_pixbuf("button/install_hover.png"), app_theme.get_pixbuf("button/install_press.png"), ) action_button.connect("clicked", lambda w: global_event.emit("install-pkg", [self.pkg_name])) self.left_action_box.pack_start(action_button) elif install_status == "unknown": status_label = Label(_("Not found")) self.left_action_box.pack_start(status_label) else: try: desktops = json.loads(install_status) if not desktops: status_label = Label(_("Successfully installed")) self.left_action_box.pack_start(status_label) else: action_button = ImageButton( app_theme.get_pixbuf("button/start_normal.png"), app_theme.get_pixbuf("button/start_hover.png"), app_theme.get_pixbuf("button/start_press.png"), ) action_button.connect("button-press-event", lambda w, e:self.button_press_start_button(w, e, desktops)) self.left_action_box.pack_start(action_button) except: logging.error("detail install status: %s = %s" % (self.pkg_name, install_status)) self.left_action_box.show_all() global_event.emit('update-current-status-pkg-page', self) else: global_logger.logerror("get_pkg_installed handle_dbus_error") global_logger.logerror(reply) def handle_pkg_download_size(self, reply, success): # FIXME: download information display if success: if reply[0] == PKG_SIZE_OWN or reply[0] == PKG_SIZE_DOWNLOAD: self.left_size_label.set_text(_("Size: %s") % bit_to_human_str(reply[1])) elif reply[0] == PKG_SIZE_ERROR: self.left_size_label.set_text("") global_logger.logerror("Error for calculate pkg size!") else: global_logger.logerror("request_pkgs_install_status handle_dbus_error") global_logger.logerror(reply) def fetch_pkg_status(self): self.data_manager.get_pkg_installed(self.pkg_name, self.handle_pkg_status) self.data_manager.get_pkg_download_size(self.pkg_name, self.handle_pkg_download_size) def open_url(self, webview, frame, network_request, nav_action, policy_dec): webbrowser.open(network_request.get_uri()) def webview_console_message_handler(self, webview, message, line, source_id): return True def fetch_comment(self): if is_network_connected(): container_remove_all(self.right_comment_box) loading_label = Label(_("Loading comments...")) loading_label_align = gtk.Alignment(0.5, 0, 0, 0) loading_label_align.add(loading_label) loading_label_align.set_padding(10, 0, 0, 0) self.right_comment_box.pack_start(loading_label_align, False, False) web_view = WebView(os.path.join(CONFIG_DIR, "cookie.txt")) web_view.connect("new-window-policy-decision-requested", self.open_url) web_view.connect('console-message', self.webview_console_message_handler) web_view_align = gtk.Alignment() web_view_align.set(0.5, 0, 0, 0) web_view_align.set_padding(33, 33, 33, 33) web_view_align.add(web_view) web_settings = web_view.get_settings() web_settings.set_property("enable-plugins", False) web_settings.set_property("enable-scripts", True) web_view.open("%s/softcenter/v1/comment?n=%s&hl=%s" % ( SERVER_ADDRESS, self.pkg_name, LANGUAGE, )) web_view.connect("load-finished", self.comment_load_finished_cb, web_view_align) create_thread(self.fetch_screenshot).start() def comment_load_finished_cb(self, webview, frame, web_view_align): self.scrolled_window.connect("vscrollbar-state-changed", lambda w, p: self.load_more_comment(p, webview)) container_remove_all(self.right_comment_box) self.right_comment_box.pack_start(web_view_align, True, True) self.right_comment_box.show_all() def load_more_comment(self, postion, webview): if postion == "bottom": webview.execute_script('$("#nav_next").click();') def fetch_screenshot(self): screenshot_dir = os.path.join(SCREENSHOT_DOWNLOAD_DIR, self.pkg_name) screenshot_md5_path = os.path.join(screenshot_dir, "screenshot_md5.txt") remote_screenshot_md5_url = "%s/zh_CN/%s/screenshot_md5.txt" % (SCREENSHOT_HOST, self.pkg_name) remote_screenshot_zip_url = "%s/zh_CN/%s/screenshot.zip" % (SCREENSHOT_HOST, self.pkg_name) try: remote_md5 = urllib2.urlopen(remote_screenshot_md5_url).read() need_download = False if os.path.exists(screenshot_dir): if os.path.exists(screenshot_md5_path): local_md5 = read_file(screenshot_md5_path) if remote_md5 != local_md5: need_download = True else: need_download = True else: need_download = True if need_download: write_file(screenshot_md5_path, remote_md5, True) try: urllib.urlretrieve(remote_screenshot_zip_url, os.path.join(SCREENSHOT_DOWNLOAD_DIR, self.pkg_name, "screenshot.zip") ) global_event.emit("download-screenshot-finish", self.pkg_name) except Exception, e: global_logger.logerror("Download screenshot error: %s" % e) except Exception, e: global_logger.logerror("fetch_screenshot got error: %s" % e)
def get_user_info(self, weibo): '''get weibo user info''' info = weibo.get_user_name() gtk.gdk.threads_enter() #self.get_user_error_text = "" weibo_hbox = weibo.get_box() hbox = gtk.HBox(False) vbox = gtk.VBox(False) weibo_hbox.pack_start(vbox, False, False) vbox.pack_start(hbox) #print weibo.t_type, info if info: self.is_get_user_info[weibo] = 1 label = Label(text=info, label_width=70, enable_select=False) check = CheckButton() #check = gtk.CheckButton() check.connect("toggled", self.weibo_check_toggle, weibo) check.set_active(True) check_vbox = gtk.VBox(False) check_align = gtk.Alignment(0.5, 0.5, 0, 0) check_align.add(check_vbox) check_vbox.pack_start(check, False, False) button = ImageButton( app_theme.get_pixbuf("share/" + weibo.t_type + ".png"), app_theme.get_pixbuf("share/" + weibo.t_type + ".png"), app_theme.get_pixbuf("share/" + weibo.t_type + ".png")) utils.set_clickable_cursor(button) button.connect("enter-notify-event", self.show_tooltip, _("Click to switch user")) hbox.pack_start(check_align, False, False) hbox.pack_start(button, False, False, 5) hbox.pack_start(label, False, False) else: self.is_get_user_info[weibo] = 0 check = CheckButton() #check = gtk.CheckButton() check.set_sensitive(False) check_vbox = gtk.VBox(False) check_align = gtk.Alignment(0.5, 0.5, 0, 0) check_align.add(check_vbox) check_vbox.pack_start(check, False, False) button = ImageButton( app_theme.get_pixbuf("share/" + weibo.t_type + "_no.png"), app_theme.get_pixbuf("share/" + weibo.t_type + "_no.png"), app_theme.get_pixbuf("share/" + weibo.t_type + "_no.png")) utils.set_clickable_cursor(button) button.connect("enter-notify-event", self.show_tooltip, _("Click to login")) hbox.pack_start(check_align, False, False) hbox.pack_start(button, False, False, 5) # curl time out info_error = weibo.get_curl_error() if info_error: #self.get_user_error_text += "%s:%s." % (weibo.t_type, _(info_error)) hbox.pack_start( Label(text="(%s)" % _(info_error), label_width=70,enable_select=False, text_color = ui_theme.get_color("category_item")), False, False) button.connect("clicked", self.weibo_login, weibo) self.__weibo_check_button_list.append(check) self.__weibo_image_button_list.append(button) gtk.gdk.threads_leave() return weibo_hbox
def __init__(self, module_infos, switch_page, click_module_item, backward_cb=None, forward_cb=None, search_cb=None): ''' init docs ''' # Init. gtk.Alignment.__init__(self) self.module_infos = module_infos self.set(0.5, 0.5, 1, 1) self.set_padding(0, 0, 0, 0) self.set_size_request(-1, 32) # Init action box. self.main_box = gtk.HBox() # Init action button. self.backward_align = gtk.Alignment() self.backward_align.set(0, 0, 0, 0) self.backward_align.set_padding(8, 5, 10, 0) self.backward_button = ImageButton( app_theme.get_pixbuf("action_button/backward_normal.png"), app_theme.get_pixbuf("action_button/backward_hover.png"), app_theme.get_pixbuf("action_button/backward_press.png"), insensitive_dpixbuf = app_theme.get_pixbuf("action_button/backward_normal.png") ) self.backward_cb = backward_cb self.backward_button.connect("clicked", self.__backward_clicked) self.backward_align.add(self.backward_button) self.forward_align = gtk.Alignment() self.forward_align.set(0, 0, 0, 0) self.forward_align.set_padding(8, 5, 10, 0) self.forward_button = ImageButton( app_theme.get_pixbuf("action_button/forward_normal.png"), app_theme.get_pixbuf("action_button/forward_hover.png"), app_theme.get_pixbuf("action_button/forward_press.png"), insensitive_dpixbuf = app_theme.get_pixbuf("action_button/forward_normal.png") ) self.forward_cb = forward_cb self.forward_button.connect("clicked", self.__forward_clicked) self.forward_align.add(self.forward_button) self.action_box = gtk.HBox() self.action_align = gtk.Alignment() self.action_align.set(0.5, 0, 0, 0) self.action_align.set_padding(0, 0, 5, 5) self.bread_align = gtk.Alignment() self.bread_align.set(0, 0.5, 1, 0) self.bread_align.set_padding(0, 0, 4, 4) # Init navigate bar. self.navigate_bar = gtk.HBox() self.bread = Bread(crumb = [(_("System Settings"), map(lambda module_info: ModuleMenuItem(module_info, click_module_item), list(itertools.chain(*module_infos)))), ], show_left_right_box = False) #self.bread.set_size(-1, 24) self.bread.connect("item_clicked", switch_page) # Init search entry. self.search_button = ImageButton( app_theme.get_pixbuf("entry/search_normal.png"), app_theme.get_pixbuf("entry/search_hover.png"), app_theme.get_pixbuf("entry/search_press.png"), ) self.search_cb = search_cb self.search_entry = InputEntry(action_button=self.search_button) self.search_entry.set_size(150, 24) self.search_entry.entry.connect("changed", self.__search_changed) self.search_entry.entry.connect("press-return", self.__search_press_enter) self.search_align = gtk.Alignment() self.search_align.set(0.5, 0.5, 0, 0) self.search_align.set_padding(5, 0, 5, 10) # Connect widgets. self.action_align.add(self.action_box) self.bread_align.add(self.bread) self.search_align.add(self.search_entry) self.action_box.pack_start(self.backward_align) self.action_box.pack_start(self.forward_align) self.navigate_bar.pack_start(self.bread_align, True, True) self.main_box.pack_start(self.action_align, False, False) self.main_box.pack_start(self.navigate_bar, True, True) self.main_box.pack_start(self.search_align, False, False) self.add(self.main_box)
def share_to_weibo_result(self): '''result of share to weibo''' font_color = ui_theme.get_color("category_item") res_hbox = gtk.HBox(False) res_hbox.set_size_request(-1, 240) res_left_box = DialogLeftButtonBox() res_right_box = DialogRightButtonBox() res_left_box.button_align.set(0.5, 0.0, 0, 1) res_right_box.button_align.set(0.5, 0.0, 0, 1) res_left_box.button_align.set_padding(5, 9, 19, 0) res_right_box.button_align.set_padding(30, 0, 0, 0) res_left_box.set_size_request(405, -1) res_right_box.set_size_request(195, -1) res_hbox.pack_start(res_left_box) res_hbox.pack_start( VSeparator(app_theme.get_shadow_color("VSeparator").get_color_info(), 0, 0)) res_hbox.pack_start(res_right_box) res_vbox = gtk.VBox(False) follow_vbox = gtk.VBox(False) tmp_img = gtk.Image() # only use as a placeholder tmp_img.set_size_request(-1, 50) res_vbox.pack_start(tmp_img, False, False) follow_tip_hbox = gtk.HBox(False) img = gtk.image_new_from_icon_name("deepin-logo", 16) if img.get_pixel_size() == -1: img = gtk.image_new_from_file(app_theme.get_theme_file_path("image/share/deepin_logo.png")) follow_tip_hbox.pack_start(img, False, False, 5) follow_tip_hbox.pack_start( Label("%s %s" % (_("Follow"), "Linux Deepin"), text_color=app_theme_get_dynamic_color("#5f5f5f"), text_size=12, enable_select=False), False, False) follow_vbox.pack_start(follow_tip_hbox, False, False, 13) for weibo in self.to_share_weibo_res: vbox = gtk.VBox(False, 1) tip_box = gtk.HBox() error_box = gtk.HBox() vbox.pack_start(tip_box, False, False) vbox.pack_start(error_box, False, False) if self.to_share_weibo_res[weibo][0]: # upload succeed img = gtk.image_new_from_file(app_theme.get_theme_file_path("image/share/share_succeed.png")) #link = LinkButton(_(weibo.t_type), text_size=13, self.to_share_weibo_res[weibo][1]) link = Label(self.weibo_name_l18n[weibo.t_type], text_size=12, text_color=ui_theme.get_color("link_text")) #, enable_gaussian=True, gaussian_radious=1, border_radious=0) link.add_events(gtk.gdk.BUTTON_PRESS_MASK) link.connect("enter-notify-event", lambda w, e: self.__draw_under_line(w)) link.connect("leave-notify-event", lambda w, e: w.queue_draw()) link.connect("button-press-event", self.goto_weibo_button_clicked, weibo) link_box = gtk.HBox(False) link_box.pack_start(link, False, False) utils.set_clickable_cursor(link) text = _("Share to") label = Label(text, text_size=12, text_color=font_color, enable_select=False) text = _("Successful") label1 = Label(text, text_size=12, text_color=font_color, enable_select=False) tip_box.pack_start(img, False, False, 15) tip_box.pack_start(label, False, False, 3) tip_box.pack_start(link_box, False, False, 3) tip_box.pack_start(label1, False, False) # only use as a placeholder img = gtk.Image() img.set_size_request(20, 1) error_box.pack_start(img, False, False, 16) tmp = Label(" ", text_size=9, label_width=200) tmp.set_size_request(200, 1) error_box.pack_start(tmp, False, False) #print text else: # upload failed img = gtk.image_new_from_file(app_theme.get_theme_file_path("image/share/share_failed.png")) #text = "% %s %s." % (_(weibo.t_type), _("upload failed")) text = _("Share to") label1 = Label(text, text_size=12, text_color=font_color, enable_select=False) label2 = Label(_(weibo.t_type), text_size=12, text_color=font_color, enable_select=False) text = _("Failed") label3 = Label(text, text_size=12, text_color=font_color, enable_select=False) if weibo.curl.error: error = "(%s)" % _(weibo.curl.error) elif weibo.get_error_msg(): error = "(%s)" % _(weibo.get_error_msg()) else: error = "(%s)" % _("Unknown reason") #print "%s: %s" % (weibo.t_type, error) #print "%s: %s" % (weibo.t_type, weibo.get_error_msg()) label = Label(text, text_size=12, text_color=font_color, enable_select=False) tip_box.pack_start(img, False, False, 15) tip_box.pack_start(label1, False, False, 3) tip_box.pack_start(label2, False, False, 3) tip_box.pack_start(label3, False, False) img = gtk.Image() # only use as a placeholder img.set_size_request(20, 20) error_box.pack_start(img, False, False, 16) error_box.pack_start(Label(error, text_size=9, label_width=200, text_color=font_color, enable_select=False), False, False) #print text res_vbox.pack_start(vbox, False, False, 10) for weibo in self.deepin_info: box = gtk.HBox(False, 15) # followed img = gtk.image_new_from_pixbuf(app_theme.get_pixbuf("share/"+weibo.t_type+".png").get_pixbuf()) box.pack_start(img, False, False) if self.deepin_info[weibo] is not None and self.deepin_info[weibo][3]: if not default_locale.startswith("zh_"): button = gtk.image_new_from_pixbuf( app_theme.get_pixbuf("share/followed_en.png").get_pixbuf()) else: button = gtk.image_new_from_pixbuf( app_theme.get_pixbuf("share/followed.png").get_pixbuf()) else: # to follow if not default_locale.startswith("zh_"): button = ImageButton( app_theme.get_pixbuf("share/follow_normal_en.png"), app_theme.get_pixbuf("share/follow_hover_en.png"), app_theme.get_pixbuf("share/follow_press_en.png")) else: button = ImageButton( app_theme.get_pixbuf("share/follow_normal.png"), app_theme.get_pixbuf("share/follow_hover.png"), app_theme.get_pixbuf("share/follow_press.png")) button.connect("clicked", self.friendships_add_button_clicked, weibo, box) box.pack_start(button, False, False) align = gtk.Alignment() align.set(0.0, 0.5, 0, 0) align.set_padding(0, 0, 30, 0) align.add(box) follow_vbox.pack_start(align, False, False, 8) res_left_box.set_buttons([res_vbox]) res_right_box.set_buttons([follow_vbox]) self.result_box.pack_start(res_hbox, False, False) self.result_box.show_all() self.set_slide_index(2)
def get_user_info(self, weibo): '''get weibo user info''' info = weibo.get_user_name() gtk.gdk.threads_enter() #self.get_user_error_text = "" weibo_hbox = weibo.get_box() hbox = gtk.HBox(False) vbox = gtk.VBox(False) weibo_hbox.pack_start(vbox, False, False) vbox.pack_start(hbox) #print weibo.t_type, info if info: self.is_get_user_info[weibo] = 1 label = Label(text=info, label_width=70, enable_select=False) check = CheckButton() #check = gtk.CheckButton() check.connect("toggled", self.weibo_check_toggle, weibo) check.set_active(True) check_vbox = gtk.VBox(False) check_align = gtk.Alignment(0.5, 0.5, 0, 0) check_align.add(check_vbox) check_vbox.pack_start(check, False, False) button = ImageButton( app_theme.get_pixbuf("share/" + weibo.t_type + ".png"), app_theme.get_pixbuf("share/" + weibo.t_type + ".png"), app_theme.get_pixbuf("share/" + weibo.t_type + ".png")) utils.set_clickable_cursor(button) button.connect("enter-notify-event", self.show_tooltip, _("Click to switch user")) hbox.pack_start(check_align, False, False) hbox.pack_start(button, False, False, 5) hbox.pack_start(label, False, False) else: self.is_get_user_info[weibo] = 0 check = CheckButton() #check = gtk.CheckButton() check.set_sensitive(False) check_vbox = gtk.VBox(False) check_align = gtk.Alignment(0.5, 0.5, 0, 0) check_align.add(check_vbox) check_vbox.pack_start(check, False, False) button = ImageButton( app_theme.get_pixbuf("share/" + weibo.t_type + "_no.png"), app_theme.get_pixbuf("share/" + weibo.t_type + "_no.png"), app_theme.get_pixbuf("share/" + weibo.t_type + "_no.png")) utils.set_clickable_cursor(button) button.connect("enter-notify-event", self.show_tooltip, _("Click to login")) hbox.pack_start(check_align, False, False) hbox.pack_start(button, False, False, 5) # curl time out info_error = weibo.get_curl_error() if info_error: #self.get_user_error_text += "%s:%s." % (weibo.t_type, _(info_error)) hbox.pack_start( Label(text="(%s)" % _(info_error), label_width=70,enable_select=False, text_color = app_theme.get_color("left_char_num1")), False, False) button.connect("clicked", self.weibo_login, weibo) self.__weibo_check_button_list.append(check) self.__weibo_image_button_list.append(button) gtk.gdk.threads_leave() return weibo_hbox
def __init__(self): ImageButton.__init__(self, app_theme.get_pixbuf("mode/quell_normal.png"), app_theme.get_pixbuf("mode/quell_hover.png"), app_theme.get_pixbuf("mode/quell_press.png"), )
def __init__(self, filename=""): ''' init share @param filename: the file to share ''' self.upload_image = filename self.thumb_width = 188 self.thumb_height = 168 self.MAX_CHAR = 140 #self.__text_frame_color = (0.76, 0.76, 0.76) self.__win_width = 602 open(COOKIE_FILE,'wb').close() self.window = DialogBox(_("Share to social networks"), close_callback=gtk.main_quit) self.window.set_keep_above(True) self.window.set_size_request(self.__win_width+20, 288) self.window.set_resizable(False) self.window.titlebar.connect("expose-event", self.__expose_top_and_bottome) self.window.button_box.connect("expose-event", self.__expose_top_and_bottome) # create slider self.slider = HSlider() self.slider_list = [] self.share_box = gtk.VBox(False, 2) # first page, input context self.web_box = gtk.VBox(False, 10) # second page, login self.result_box = gtk.VBox(False, 10) # third page, share result share_align = gtk.Alignment() share_align.set(0.5, 0.5, 0, 0) share_align.add(self.share_box) share_align.connect("expose-event", self.__slider_expose) # go back button web_left_button = ImageButton( app_theme.get_pixbuf("share/back_normal.png"), app_theme.get_pixbuf("share/back_hover.png"), app_theme.get_pixbuf("share/back_press.png")) web_left_button.connect("clicked", lambda w: self.set_slide_index(0)) web_left_button.set_can_focus(False) utils.set_clickable_cursor(web_left_button) # show url entry self.web_url_entry = InputEntry() self.web_url_entry.set_editable(False) self.web_url_entry.set_size(555, 20) self.web_url_entry.entry.right_menu_visible_flag = False # alig url entry web_navigate_vbox = gtk.VBox(False) web_navigate_vbox.pack_start(self.web_url_entry) web_navigate_t_align = gtk.Alignment() web_navigate_t_align.set(0.0, 0.5, 0, 0) web_navigate_t_align.add(web_navigate_vbox) # pack back button and url entry web_navigate_box = gtk.HBox(False, 7) web_navigate_box.pack_start(web_left_button, False, False) web_navigate_box.pack_start(web_navigate_t_align) web_navigate_align = gtk.Alignment() web_navigate_align.set(0.5, 0.5, 0, 0) web_navigate_align.set_padding(4, 0, 11, 13) web_navigate_align.add(web_navigate_box) # create a webkit self.web_view = WebView(COOKIE_FILE) self.web_view.connect("notify::load-status", self.web_view_load_status) self.web_view.connect("load-error", self.web_view_load_error) self.web_scrolled_window = ScrolledWindow() self.web_scrolled_window.add(self.web_view) self.web_scrolled_window.set_size_request(590, 228) self.web_box.pack_start(web_navigate_align, False, False) self.web_box.pack_start(self.web_scrolled_window) #self.web_box.set_size_request(-1, 258) web_align = gtk.Alignment() web_align.set(0.5, 0.0, 0, 1) web_align.add(self.web_box) web_align.connect("expose-event", self.__slider_expose) res_align = gtk.Alignment() res_align.set(0.5, 0.5, 0, 0) res_align.add(self.result_box) res_align.connect("expose-event", self.__slider_expose) self.slider.set_to_page(share_align) self.slider_list.append(share_align) self.slider_list.append(web_align) self.slider_list.append(res_align) self.__weibo_list = [] self.sina = weibo.Sina(self.web_view) self.qq = weibo.Tencent(self.web_view) self.twitter = weibo.Twitter(self.web_view) self.__weibo_list.append(self.sina) self.__weibo_list.append(self.qq) self.__weibo_list.append(self.twitter) self.__current_weibo = None self.window.body_box.pack_start(self.slider, True, True) self.init_share_box()
def __init__(self, data_manager): ''' init docs ''' gtk.HBox.__init__(self) self.data_manager = data_manager self.pkg_name = None self.alias_name = "" self.pkg_pixbuf = None self.pkg_star_view = None self.left_view_box = gtk.VBox() self.left_view_box.set_size_request(self.LEFT_INFO_WIDTH, -1) self.left_logo_box = gtk.VBox() self.left_logo_box.set_size_request(-1, 90) self.star_box = gtk.HBox() self.star_align = gtk.Alignment(0.4, 0.5, 0, 0) self.star_align.set_padding(0, 5, 0, 0) self.star_align.add(self.star_box) self.left_action_box = gtk.HBox() self.left_action_align = gtk.Alignment() self.left_action_align.set(0.5, 0.5, 0, 0) self.left_action_align.set_padding(0, 30, 0, 0) self.left_action_align.add(self.left_action_box) self.left_label_table = gtk.Table(4, 1) self.left_label_table.set_row_spacings(4) self.left_label_align = gtk.Alignment() self.left_label_align.set(0.0, 0.5, 0, 0) self.left_label_align.set_padding(0, 0, 14, 0) self.left_category_name_label = Label() self.left_category_label = Label( hover_color=app_theme.get_color("homepage_hover")) self.left_category_label.set_clickable() self.left_category_label_align = gtk.Alignment() self.left_category_label_align.set(0.0, 0.5, 0, 0) self.left_category_label_align.add(self.left_category_label) self.left_category_label_box = gtk.HBox() self.left_category_label_box.pack_start(self.left_category_name_label, False, False) self.left_category_label_box.pack_start(self.left_category_label_align, True, True) self.left_category_box = gtk.VBox() self.left_version_label = Label(label_width=136) show_label_tooltip(self.left_version_label) self.left_version_label.set_ellipsize(pango.ELLIPSIZE_END) self.left_download_label = Label() self.left_size_label = Label() self.left_homepage_box = gtk.HBox() self.left_homepage_box_align = gtk.Alignment() self.left_homepage_box_align.set(0.0, 0.5, 0, 0) self.left_homepage_box_align.add(self.left_homepage_box) self.left_recommend_box = gtk.VBox() self.left_recommend_box_align = gtk.Alignment() self.left_recommend_box_align.set(0.0, 0.0, 0, 0) self.left_recommend_box_align.set_padding(30, 0, 14, 0) self.left_recommend_box_align.add(self.left_recommend_box) self.left_recommend_label = Label(_("Popular recommendations")) self.right_info_box = gtk.VBox() self.scrolled_window = ScrolledWindow(0, 0) self.right_view_box = gtk.VBox() self.right_top_box = gtk.HBox() self.right_top_box.set_size_request(-1, self.RIGHT_TITLE_BOX_HEIGHT) self.right_desc_box = gtk.VBox() self.right_slide_box = gtk.VBox() self.right_comment_box = gtk.VBox() self.right_title_box = gtk.VBox() self.return_button = ImageButton( app_theme.get_pixbuf("detail/normal.png"), app_theme.get_pixbuf("detail/hover.png"), app_theme.get_pixbuf("detail/press.png"), ) self.return_align = gtk.Alignment() self.return_align.set(0.5, 0.5, 1, 1) self.return_align.set_padding(self.ALIAS_NAME_PADDING_Y, 0, 0, self.RIGHT_INFO_PADDING_X) self.return_align.add(self.return_button) self.return_button.connect( "clicked", lambda w: global_event.emit("switch-from-detail-page")) self.right_top_box.pack_start(self.right_title_box, True, True) self.right_top_box.pack_start(self.return_align, False, False) self.right_view_box.pack_start(self.right_top_box, False, False) self.right_view_box.pack_start(self.right_desc_box, False, False) self.right_view_box.pack_start(self.right_slide_box, False, False) self.right_view_box.pack_start(self.right_comment_box, False, False) self.scrolled_window.add_child(self.right_view_box) self.left_view_box.pack_start(self.left_logo_box, False, False) self.left_view_box.pack_start(self.star_align, False, False) self.left_view_box.pack_start(self.left_action_align, False, False) self.left_label_table.attach(self.left_category_box, 0, 1, 0, 1) self.left_label_table.attach(self.left_version_label, 0, 1, 1, 2) self.left_label_table.attach(self.left_size_label, 0, 1, 2, 3) self.left_label_table.attach(self.left_download_label, 0, 1, 3, 4) self.left_label_table.attach(self.left_homepage_box_align, 0, 1, 4, 5) self.left_label_align.add(self.left_label_table) self.left_view_box.pack_start(self.left_label_align, False, False) self.left_view_box.pack_start(self.left_recommend_box_align, False, False) self.right_info_box.pack_start(self.scrolled_window, True, True) self.pack_start(self.left_view_box, False, False) self.pack_start(self.right_info_box, True, True) self.left_view_box.connect("expose-event", self.expose_left_view) self.right_view_box.connect("expose-event", self.expose_right_view) self.left_logo_box.connect("expose-event", self.expose_left_logo_box) self.right_top_box.connect("expose-event", self.expose_right_top_box) self.right_title_box.connect("expose-event", self.expose_right_title_box) self.connect("hierarchy-changed", self.hierarchy_change) self.left_category_label.connect("button-press-event", lambda w, e: self.jump_to_category()) global_event.register_event("download-screenshot-finish", self.download_screenshot_finish) self.loading_label = Label(_("Loading comments...")) self.loading_label_align = gtk.Alignment(0.5, 0, 0, 0) self.loading_label_align.add(self.loading_label) self.loading_label_align.set_padding(10, 0, 0, 0) self.update_pkg_time = 0 self.update_pkg_interval = 0.2 # in seconds
def __init__(self, module_infos, switch_page, click_module_item, backward_cb=None, forward_cb=None, search_cb=None): ''' init docs ''' # Init. gtk.Alignment.__init__(self) self.module_infos = module_infos self.set(0.5, 0.5, 1, 1) self.set_padding(0, 0, 0, 0) self.set_size_request(-1, 32) # Init action box. self.main_box = gtk.HBox() # Init action button. self.backward_align = gtk.Alignment() self.backward_align.set(0, 0, 0, 0) self.backward_align.set_padding(8, 5, 10, 0) self.backward_button = ImageButton( app_theme.get_pixbuf("action_button/backward_normal.png"), app_theme.get_pixbuf("action_button/backward_hover.png"), app_theme.get_pixbuf("action_button/backward_press.png"), insensitive_dpixbuf=app_theme.get_pixbuf( "action_button/backward_normal.png")) self.backward_cb = backward_cb self.backward_button.connect("clicked", self.__backward_clicked) self.backward_align.add(self.backward_button) self.forward_align = gtk.Alignment() self.forward_align.set(0, 0, 0, 0) self.forward_align.set_padding(8, 5, 10, 0) self.forward_button = ImageButton( app_theme.get_pixbuf("action_button/forward_normal.png"), app_theme.get_pixbuf("action_button/forward_hover.png"), app_theme.get_pixbuf("action_button/forward_press.png"), insensitive_dpixbuf=app_theme.get_pixbuf( "action_button/forward_normal.png")) self.forward_cb = forward_cb self.forward_button.connect("clicked", self.__forward_clicked) self.forward_align.add(self.forward_button) self.action_box = gtk.HBox() self.action_align = gtk.Alignment() self.action_align.set(0.5, 0, 0, 0) self.action_align.set_padding(0, 0, 5, 5) self.bread_align = gtk.Alignment() self.bread_align.set(0, 0.5, 1, 0) self.bread_align.set_padding(0, 0, 4, 4) # Init navigate bar. self.navigate_bar = gtk.HBox() self.bread = Bread(crumb=[ (_("System Settings"), map( lambda module_info: ModuleMenuItem(module_info, click_module_item), list(itertools.chain(*module_infos)))), ], show_left_right_box=False) #self.bread.set_size(-1, 24) self.bread.connect("item_clicked", switch_page) # Init search entry. self.search_button = ImageButton( app_theme.get_pixbuf("entry/search_normal.png"), app_theme.get_pixbuf("entry/search_hover.png"), app_theme.get_pixbuf("entry/search_press.png"), ) self.search_cb = search_cb self.search_entry = InputEntry(action_button=self.search_button) self.search_entry.set_size(150, 24) self.search_entry.entry.connect("changed", self.__search_changed) self.search_entry.entry.connect("press-return", self.__search_press_enter) self.search_align = gtk.Alignment() self.search_align.set(0.5, 0.5, 0, 0) self.search_align.set_padding(5, 0, 5, 10) # Connect widgets. self.action_align.add(self.action_box) self.bread_align.add(self.bread) self.search_align.add(self.search_entry) self.action_box.pack_start(self.backward_align) self.action_box.pack_start(self.forward_align) self.navigate_bar.pack_start(self.bread_align, True, True) self.main_box.pack_start(self.action_align, False, False) self.main_box.pack_start(self.navigate_bar, True, True) self.main_box.pack_start(self.search_align, False, False) self.add(self.main_box)
if self.redraw_request_callback: self.redraw_request_callback(self) def unselect(self): self.is_select = False if self.redraw_request_callback: self.redraw_request_callback(self) def select(self): self.is_select = True if self.redraw_request_callback: self.redraw_request_callback(self) def button_press(self, column, offset_x, offset_y): global_event.emit("switch-to-detail-page", self.text) gobject.type_register(TextItem) search_entry = InputEntry(action_button=ImageButton( app_theme.get_pixbuf("entry/search_normal.png"), app_theme.get_pixbuf("entry/search_hover.png"), app_theme.get_pixbuf("entry/search_press.png"), )) search_entry.set_size(140, 24) completion_grab_window = CompletionGrabWindow() completion_window = CompletionWindow(300, 200)