def __init__(self, file_name, document_path, activity_name, title, bundle=False): RadioToolButton.__init__(self) self._document_path = document_path self._title = title self._jobject = None self._activity_name = activity_name self.props.tooltip = _('Instance Source') settings = Gio.Settings('org.sugarlabs.user') self._color = settings.get_string('color') icon = Icon(file=file_name, pixel_size=style.STANDARD_ICON_SIZE, xo_color=XoColor(self._color)) self.set_icon_widget(icon) icon.show() box = PaletteMenuBox() self.props.palette.set_content(box) box.show() if bundle: menu_item = PaletteMenuItem(_('Duplicate'), 'edit-duplicate', xo_color=XoColor(self._color)) menu_item.connect('activate', self.__show_duplicate_alert) else: menu_item = PaletteMenuItem(_('Keep'), 'document-save', xo_color=XoColor(self._color)) menu_item.connect('activate', self.__keep_in_journal_cb) box.append_item(menu_item) menu_item.show()
def __init__(self): ToolButton.__init__(self) self._property = 'timestamp' self._order = Gtk.SortType.ASCENDING self.props.tooltip = _('Sort view') self.props.icon_name = 'view-lastedit' self.props.hide_tooltip_on_click = False self.palette_invoker.props.toggle_palette = True menu_box = PaletteMenuBox() self.props.palette.set_content(menu_box) menu_box.show() for property_, icon, label in self._SORT_OPTIONS: button = PaletteMenuItem(label) button_icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name=icon) button.set_image(button_icon) button_icon.show() button.connect('activate', self.__sort_type_changed_cb, property_, icon) button.show() menu_box.append_item(button)
def __init__(self, activity, **kwargs): ToolButton.__init__(self, 'edit-cloud', **kwargs) self.set_tooltip(_('Cloud Text')) self.palette_invoker.props.toggle_palette = True self.palette_invoker.props.lock_palette = True self.props.hide_tooltip_on_click = False self._palette = self.get_palette() description_box = PaletteMenuBox() sw = Gtk.ScrolledWindow() sw.set_size_request(int(Gdk.Screen.width() / 3), 5 * style.GRID_CELL_SIZE) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self._text_view = Gtk.TextView() self._text_view.set_left_margin(style.DEFAULT_PADDING) self._text_view.set_right_margin(style.DEFAULT_PADDING) self._text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self._text_buffer = Gtk.TextBuffer() self._text_buffer.set_text(_TEXT) self._text_view.set_buffer(self._text_buffer) self._text_view.connect('focus-in-event', self._text_focus_in_cb) sw.add(self._text_view) description_box.append_item(sw, vertical_padding=0) self._palette.set_content(description_box) description_box.show_all() self.set_expanded(True)
def __init__(self): ToolButton.__init__(self) self._property = 'timestamp' self._order = Gtk.SortType.ASCENDING self.props.tooltip = _('Sort view') self.props.icon_name = 'view-lastedit' self.props.hide_tooltip_on_click = False self.palette_invoker.props.toggle_palette = True menu_box = PaletteMenuBox() self.props.palette.set_content(menu_box) menu_box.show() sort_options = [ ('timestamp', 'view-lastedit', _('Sort by date modified')), ('creation_time', 'view-created', _('Sort by date created')), ('filesize', 'view-size', _('Sort by size')), ] for property_, icon, label in sort_options: button = PaletteMenuItem(label) button_icon = Icon(pixel_size=style.SMALL_ICON_SIZE, icon_name=icon) button.set_image(button_icon) button_icon.show() button.connect('activate', self.__sort_type_changed_cb, property_, icon) button.show() menu_box.append_item(button)
def create_palette(self): primary_text = GLib.markup_escape_text(self._model.bundle.get_name()) secondary_text = GLib.markup_escape_text(self._model.get_name()) palette_icon = Icon(file=self._model.bundle.get_icon(), xo_color=self._model.get_color()) palette_icon.props.icon_size = Gtk.IconSize.LARGE_TOOLBAR palette = Palette(None, primary_text=primary_text, secondary_text=secondary_text, icon=palette_icon) private = self._model.props.private joined = get_owner_instance() in self._model.props.buddies menu_box = PaletteMenuBox() if joined: item = PaletteMenuItem(_('Resume')) icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='activity-start') item.set_image(icon) item.connect('activate', self.__palette_item_clicked_cb) menu_box.append_item(item) elif not private: item = PaletteMenuItem(_('Join')) icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='activity-start') item.set_image(icon) item.connect('activate', self.__palette_item_clicked_cb) menu_box.append_item(item) palette.set_content(menu_box) menu_box.show_all() self.connect_to_palette_pop_events(palette) return palette
def __init__(self, activity, **kwargs): Gtk.ToolItem.__init__(self) description_button = ToolButton('edit-description') description_button.show() description_button.set_tooltip(_('Description')) description_button.palette_invoker.props.toggle_palette = True description_button.props.hide_tooltip_on_click = False self._palette = description_button.get_palette() description_box = PaletteMenuBox() sw = Gtk.ScrolledWindow() sw.set_size_request(int(Gdk.Screen.width() / 2), 2 * style.GRID_CELL_SIZE) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self._text_view = Gtk.TextView() self._text_view.set_left_margin(style.DEFAULT_PADDING) self._text_view.set_right_margin(style.DEFAULT_PADDING) self._text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) text_buffer = Gtk.TextBuffer() if 'description' in activity.metadata: text_buffer.set_text(activity.metadata['description']) self._text_view.set_buffer(text_buffer) self._text_view.connect('focus-out-event', self.__description_changed_cb, activity) sw.add(self._text_view) description_box.append_item(sw, vertical_padding=0) self._palette.set_content(description_box) description_box.show_all() self.add(description_button) activity.metadata.connect('updated', self.__jobject_updated_cb)
def __init__(self, activity, **kwargs): ToolButton.__init__(self, 'edit-description', **kwargs) self.set_tooltip(_('Description')) self.palette_invoker.props.toggle_palette = True self.palette_invoker.props.lock_palette = True self.props.hide_tooltip_on_click = False self._palette = self.get_palette() description_box = PaletteMenuBox() sw = Gtk.ScrolledWindow() sw.set_size_request(int(Gdk.Screen.width() / 2), 2 * style.GRID_CELL_SIZE) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self._text_view = Gtk.TextView() self._text_view.set_left_margin(style.DEFAULT_PADDING) self._text_view.set_right_margin(style.DEFAULT_PADDING) self._text_view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) text_buffer = Gtk.TextBuffer() if 'description' in activity.metadata: text_buffer.set_text(activity.metadata['description']) self._text_view.set_buffer(text_buffer) self._text_view.connect('focus-out-event', self.__description_changed_cb, activity) sw.add(self._text_view) description_box.append_item(sw, vertical_padding=0) self._palette.set_content(description_box) description_box.show_all() activity.metadata.connect('updated', self.__jobject_updated_cb)
def _setup_quality_palette(self): self._quality_palette = self._quality_button.get_palette() box = PaletteMenuBox() self._quality_palette.set_content(box) box.show() for quality in QUALITY_VALUES: text = _('%s quality') % (quality) menu_item = PaletteMenuItem(text, icon_name=quality + '-quality') menu_item.connect('activate', self._quality_selected_cb, quality) box.append_item(menu_item) menu_item.show()
def _create_export_button(self): # Add expoprt button export_data = ToolButton('save-as-data') export_data.props.tooltip = _('Export data') export_data.props.hide_tooltip_on_click = False export_data.palette_invoker.props.toggle_palette = True export_data.show() menu_box = PaletteMenuBox() export_data.props.palette.set_content(menu_box) menu_item = PaletteMenuItem(text_label=_('Export credits by day')) menu_item.connect('activate', self.__export_data_to_chart_cb, 'credit', DAY) menu_box.append_item(menu_item) menu_item = PaletteMenuItem(text_label=_('Export debits by day')) menu_item.connect('activate', self.__export_data_to_chart_cb, 'debit', DAY) menu_box.append_item(menu_item) menu_item = PaletteMenuItem(text_label=_('Export credits by month')) menu_item.connect('activate', self.__export_data_to_chart_cb, 'credit', MONTH) menu_box.append_item(menu_item) menu_item = PaletteMenuItem(text_label=_('Export debits by month')) menu_item.connect('activate', self.__export_data_to_chart_cb, 'debit', MONTH) menu_box.append_item(menu_item) menu_box.show_all() return export_data
class CurrentActivityPalette(BasePalette): __gsignals__ = { 'done': (GObject.SignalFlags.RUN_FIRST, None, ([])), } def __init__(self, home_activity): self._home_activity = home_activity BasePalette.__init__(self, home_activity) def setup_palette(self): activity_name = self._home_activity.get_activity_name() if activity_name: self.props.primary_text = glib.markup_escape_text(activity_name) title = self._home_activity.get_title() if title and title != activity_name: self.props.secondary_text = glib.markup_escape_text(title) self.menu_box = PaletteMenuBox() menu_item = PaletteMenuItem(_('Resume'), 'activity-start') menu_item.connect('activate', self.__resume_activate_cb) self.menu_box.append_item(menu_item) # TODO: share-with, keep menu_item = PaletteMenuItem(_('View Source'), 'view-source') menu_item.connect('activate', self.__view_source__cb) self.menu_box.append_item(menu_item) separator = PaletteMenuItemSeparator() self.menu_box.append_item(separator) separator.show() menu_item = PaletteMenuItem(_('Stop'), 'activity-stop') menu_item.connect('activate', self.__stop_activate_cb) self.menu_box.append_item(menu_item) self.set_content(self.menu_box) self.menu_box.show_all() def __resume_activate_cb(self, menu_item): self._home_activity.get_window().activate(Gtk.get_current_event_time()) self.emit('done') def __view_source__cb(self, menu_item): setup_view_source(self._home_activity) shell_model = shell.get_model() if self._home_activity is not shell_model.get_active_activity(): self._home_activity.get_window().activate( \ Gtk.get_current_event_time()) self.emit('done') def __stop_activate_cb(self, menu_item): self._home_activity.get_window().close(1) self.emit('done')
def _setup_timer_palette(self): self._timer_palette = self._timer_button.get_palette() box = PaletteMenuBox() self._timer_palette.set_content(box) box.show() for seconds in TIMER_VALUES: if seconds == 0: text = _('Immediate') else: text = ngettext('%s second', '%s seconds', seconds) % seconds menu_item = PaletteMenuItem(text, icon_name='timer-%d' % (seconds)) menu_item.connect('activate', self._timer_selected_cb, seconds) box.append_item(menu_item) menu_item.show()
def __init__(self, activity, **kwargs): ToolButton.__init__(self, 'font-text', **kwargs) self.set_tooltip(_('Select font')) self.palette_invoker.props.toggle_palette = True self.palette_invoker.props.lock_palette = True self.props.hide_tooltip_on_click = False self._palette = self.get_palette() font_box = PaletteMenuBox() font_box.append_item(activity.font_palette_content, vertical_padding=0) self._palette.set_content(font_box) font_box.show_all() self.set_expanded(True)
def _setup_duration_palette(self): self._duration_palette = self._duration_button.get_palette() box = PaletteMenuBox() self._duration_palette.set_content(box) box.show() for minutes in DURATION_VALUES: if minutes == 0: text = Gtk.Label(_('Immediate')) else: text = ngettext('%s minute', '%s minutes', minutes) % minutes menu_item = PaletteMenuItem(text, icon_name='duration-%d' % (minutes)) menu_item.connect('activate', self._duration_selected_cb, minutes) box.append_item(menu_item) menu_item.show()
def _show_menu(self): logging.error('Show menu ') if self._palette_invoker is not None: self._palette = Palette(_('Select tag')) menu_box = PaletteMenuBox() self._palette.set_content(menu_box) menu_box.show() for tag in TAG_LIST: menu_item = PaletteMenuItem() menu_item.set_label(tag) menu_item.connect('activate', self._add_tag, tag) menu_box.append_item(menu_item) menu_item.show() self._palette_invoker.set_palette(self._palette) self._palette.popup(immediate=True)
class InvitePalette(Palette): """Palette for frame or notification icon for invites.""" __gsignals__ = { 'remove-invite': (GObject.SignalFlags.RUN_FIRST, None, ([])), } def __init__(self, invite): Palette.__init__(self, '') self._invite = invite self.menu_box = PaletteMenuBox() self.set_content(self.menu_box) self.menu_box.show() menu_item = PaletteMenuItem(_('Join'), icon_name='dialog-ok') menu_item.connect('activate', self.__join_activate_cb) self.menu_box.append_item(menu_item) menu_item.show() menu_item = PaletteMenuItem(_('Decline'), icon_name='dialog-cancel') menu_item.connect('activate', self.__decline_activate_cb) self.menu_box.append_item(menu_item) menu_item.show() bundle_id = invite.get_bundle_id() registry = bundleregistry.get_registry() self._bundle = registry.get_bundle(bundle_id) if self._bundle: activity_name = self._bundle.get_name() else: activity_name = bundle_id self.set_primary_text(activity_name) title = self._invite.get_activity_title() if title is not None: self.set_secondary_text(title) def __join_activate_cb(self, menu_item): self._invite.join() self.emit('remove-invite') def __decline_activate_cb(self, menu_item): self.emit('remove-invite')
class ExtensionPalette(Palette): def __init__(self): label = GLib.markup_escape_text(ACCOUNT_NAME) account_icon = Icon(icon_name=ACCOUNT_ICON, xo_color=profile.get_color(), icon_size=Gtk.IconSize.MENU) Palette.__init__(self, primary_text=label, icon=account_icon) self.menu_box = PaletteMenuBox() self.menu_item = PaletteMenuItem(_('Update'), 'view-refresh') self.menu_box.append_item(self.menu_item) self.set_content(self.menu_box) self.menu_box.show_all() def set_item_cb(self, callback): self.menu_item.connect('activate', callback)
def __init__(self, row, tree_view, collab): Palette.__init__(self, primary_text=_(row[MainList.COLUMN_TYPE])) self._collab = collab self._row = row self._tree_view = tree_view box = PaletteMenuBox() self.set_content(box) box.show() menu_item = PaletteMenuItem(_('Edit'), icon_name='toolbar-edit') menu_item.connect('activate', lambda *args: tree_view.edit(row)) box.append_item(menu_item) menu_item.show() menu_item = PaletteMenuItem(_('Delete'), icon_name='edit-delete') menu_item.connect('activate', self.__delete_cb) box.append_item(menu_item) menu_item.show()
class AudioPalette(Palette): def __init__(self, primary_text, output_text, input_text, output_model, input_model): Palette.__init__(self, label=primary_text) self._capture_manager = AudioManagerWidget(input_text, 'media-audio-input', input_model) self._capture_manager.show() separator = PaletteMenuItemSeparator() separator.show() self._speaker_manager = AudioManagerWidget(output_text, 'speaker-100', output_model) self._speaker_manager.show() self._box = PaletteMenuBox() self._box.append_item(self._capture_manager, 0, 0) self._box.append_item(separator, 0, 0) self._box.append_item(self._speaker_manager, 0, 0) self._box.show() self.set_content(self._box) self.connect('popup', self.__popup_cb) def __popup_cb(self, palette): self._speaker_manager.update_level() self._speaker_manager.update_muted() self._capture_manager.update_level() self._capture_manager.update_muted()
def setup_rollover_options(self, info): palette = Palette(info, text_maxlen=50) self.set_palette(palette) box = PaletteMenuBox() palette.set_content(box) box.show() menu_item = PaletteMenuItem(_('Remove'), 'list-remove') menu_item.connect('activate', self.item_remove_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() textview = Gtk.TextView() textview.props.height_request = style.GRID_CELL_SIZE * 2 textview.props.width_request = style.GRID_CELL_SIZE * 3 textview.props.hexpand = True textview.props.vexpand = True box.append_item(textview) textview.show() buffer = textview.get_buffer() if self.notes is None: buffer.set_text(_('Take notes on this page')) else: buffer.set_text(self.notes) buffer.connect('changed', self.__buffer_changed_cb)
def create_palette(self): primary_text = self._model.bundle.get_name() secondary_text = self._model.get_name() palette_icon = Icon(file=self._model.bundle.get_icon(), pixel_size=style.STANDARD_ICON_SIZE, xo_color=self._model.get_color()) palette = Palette(None, primary_text=primary_text, secondary_text=secondary_text, icon=palette_icon) private = self._model.props.private joined = get_owner_instance() in self._model.props.buddies is_joinable = self._is_joinable is None or self._is_joinable() menu_box = PaletteMenuBox() if joined: item = PaletteMenuItem(_('Resume')) icon = Icon( pixel_size=style.SMALL_ICON_SIZE, icon_name='activity-start') item.set_image(icon) item.connect('activate', self.__palette_item_clicked_cb) menu_box.append_item(item) elif not private and is_joinable: item = PaletteMenuItem(_('Join')) icon = Icon( pixel_size=style.SMALL_ICON_SIZE, icon_name='activity-start') item.set_image(icon) item.connect('activate', self.__palette_item_clicked_cb) menu_box.append_item(item) palette.set_content(menu_box) menu_box.show_all() self.connect_to_palette_pop_events(palette) return palette
class DisplayPalette(Palette): def __init__(self): Palette.__init__(self, label=_('My Display')) self._screenshot = PaletteMenuItem(_('Take a screenshot')) icon = Icon(icon_name='camera-external', pixel_size=style.SMALL_ICON_SIZE) self._screenshot.set_image(icon) icon.show() self._screenshot.connect('activate', self.__screenshot_cb) self._screenshot.show() self._box = PaletteMenuBox() self._brightness_manager = None # only add this widget if device available if brightness.get_instance().get_path(): self._add_brightness_manager() self._box.append_item(self._screenshot, 0, 0) self._box.show() self.set_content(self._box) self.connect('popup', self.__popup_cb) def _add_brightness_manager(self): self._brightness_manager = BrightnessManagerWidget(_('Brightness'), 'brightness-100') self._brightness_manager.show() separator = PaletteMenuItemSeparator() separator.show() self._box.append_item(self._brightness_manager, 0, 0) self._box.append_item(separator, 0, 0) def __popup_cb(self, palette): if self._brightness_manager is not None: self._brightness_manager.update() def __screenshot_cb(self, palette): frame_ = frame.get_view() frame_.hide() GLib.idle_add(self.__take_screenshot_cb, frame_) @staticmethod def __take_screenshot_cb(frame_): if frame_.is_visible(): return True take_screenshot() frame_.show() return False
class DisplayPalette(Palette): def __init__(self): Palette.__init__(self, label=_('My Display')) self._screenshot = PaletteMenuItem(_('Take a screenshot')) icon = Icon(icon_name='camera-external', pixel_size=style.SMALL_ICON_SIZE) self._screenshot.set_image(icon) icon.show() self._screenshot.connect('activate', self.__screenshot_cb) self._screenshot.show() self._box = PaletteMenuBox() self._brightness_manager = None # only add this widget if device available if brightness.get_instance().get_path(): self._add_brightness_manager() self._box.append_item(self._screenshot, 0, 0) self._box.show() self.set_content(self._box) self.connect('popup', self.__popup_cb) def _add_brightness_manager(self): self._brightness_manager = BrightnessManagerWidget(_('Brightness'), 'brightness-100') self._brightness_manager.show() separator = PaletteMenuItemSeparator() separator.show() self._box.append_item(self._brightness_manager, 0, 0) self._box.append_item(separator, 0, 0) def __popup_cb(self, palette): if self._brightness_manager is not None: self._brightness_manager.update() def __screenshot_cb(self, palette): frame_ = frame.get_view() frame_.hide() GObject.idle_add(self.__take_screenshot_cb, frame_) def __take_screenshot_cb(self, frame_): if frame_.is_visible(): return True take_screenshot() frame_.show() return False
def __init__(self, primary_text, model): Palette.__init__(self, label=primary_text) self._model = model box = PaletteMenuBox() self.set_content(box) box.show() self._mute_item = PaletteMenuItem('') self._mute_icon = Icon(icon_size=Gtk.IconSize.MENU) self._mute_item.set_image(self._mute_icon) box.append_item(self._mute_item) self._mute_item.show() self._mute_item.connect('activate', self.__mute_activate_cb) separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() vol_step = sound.VOLUME_STEP self._adjustment = Gtk.Adjustment(value=self._model.props.level, lower=0, upper=100 + vol_step, step_incr=vol_step, page_incr=vol_step, page_size=vol_step) hscale = Gtk.HScale() hscale.props.draw_value = False hscale.set_adjustment(self._adjustment) hscale.set_digits(0) box.append_item(hscale, vertical_padding=0) hscale.show() self._adjustment_handler_id = \ self._adjustment.connect('value_changed', self.__adjustment_changed_cb) self._model_notify_level_handler_id = \ self._model.connect('notify::level', self.__level_changed_cb) self._model.connect('notify::muted', self.__muted_changed_cb) self.connect('popup', self.__popup_cb)
def __init__(self, primary_text, model): Palette.__init__(self, label=primary_text) self._model = model box = PaletteMenuBox() self.set_content(box) box.show() self._mute_item = PaletteMenuItem('') self._mute_icon = Icon(pixel_size=style.SMALL_ICON_SIZE) self._mute_item.set_image(self._mute_icon) box.append_item(self._mute_item) self._mute_item.show() self._mute_item.connect('activate', self.__mute_activate_cb) separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() vol_step = sound.VOLUME_STEP self._adjustment = Gtk.Adjustment(value=self._model.props.level, lower=0, upper=100 + vol_step, step_incr=vol_step, page_incr=vol_step, page_size=vol_step) hscale = Gtk.HScale() hscale.props.draw_value = False hscale.set_adjustment(self._adjustment) hscale.set_digits(0) box.append_item(hscale, vertical_padding=0) hscale.show() self._adjustment_handler_id = \ self._adjustment.connect('value_changed', self.__adjustment_changed_cb) self._model_notify_level_handler_id = \ self._model.connect('notify::level', self.__level_changed_cb) self._model.connect('notify::muted', self.__muted_changed_cb) self.connect('popup', self.__popup_cb)
def setup_palette(self): title = self._home_activity.get_title() self.set_primary_text(GLib.markup_escape_text(title)) box = PaletteMenuBox() self.set_content(box) box.show() menu_item = PaletteMenuItem(_("Show contents")) icon = Icon( file=self._home_activity.get_icon_path(), pixel_size=style.SMALL_ICON_SIZE, xo_color=self._home_activity.get_icon_color(), ) menu_item.set_image(icon) icon.show() menu_item.connect("activate", self.__open_activate_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() self._progress_bar = Gtk.ProgressBar() inner_box.add(self._progress_bar) self._progress_bar.show() self._free_space_label = Gtk.Label() self._free_space_label.set_alignment(0.5, 0.5) inner_box.add(self._free_space_label) self._free_space_label.show() self.connect("popup", self.__popup_cb)
def setup_palette(self): title = self._home_activity.get_title() self.set_primary_text(GLib.markup_escape_text(title)) box = PaletteMenuBox() self.set_content(box) box.show() menu_item = PaletteMenuItem(_('Show contents')) icon = Icon(file=self._home_activity.get_icon_path(), pixel_size=style.SMALL_ICON_SIZE, xo_color=self._home_activity.get_icon_color()) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__open_activate_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() self._progress_bar = Gtk.ProgressBar() inner_box.add(self._progress_bar) self._progress_bar.show() self._free_space_label = Gtk.Label() self._free_space_label.set_alignment(0.5, 0.5) inner_box.add(self._free_space_label) self._free_space_label.show() self.connect('popup', self.__popup_cb)
def _update(self): new_state = self.file_transfer.props.state logging.debug('_update state: %r', new_state) box = PaletteMenuBox() self.set_content(box) box.show() if new_state == filetransfer.FT_STATE_PENDING: menu_item = PaletteMenuItem(_('Cancel')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__cancel_activate_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() if self.file_transfer.description: label = Gtk.Label(label=self.file_transfer.description) inner_box.add(label) label.show() mime_type = self.file_transfer.mime_type type_description = mime.get_mime_description(mime_type) size = self._format_size(self.file_transfer.file_size) label = Gtk.Label(label='%s (%s)' % (size, type_description)) inner_box.add(label) label.show() elif new_state in [filetransfer.FT_STATE_ACCEPTED, filetransfer.FT_STATE_OPEN]: menu_item = PaletteMenuItem(_('Cancel')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__cancel_activate_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() self.progress_bar = Gtk.ProgressBar() inner_box.add(self.progress_bar) self.progress_bar.show() self.progress_label = Gtk.Label(label='') inner_box.add(self.progress_label) self.progress_label.show() self.update_progress() elif new_state in [filetransfer.FT_STATE_COMPLETED, filetransfer.FT_STATE_CANCELLED]: menu_item = PaletteMenuItem(_('Dismiss')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__dismiss_activate_cb) box.append_item(menu_item) menu_item.show() self.update_progress()
def _update(self): box = PaletteMenuBox() self.set_content(box) box.show() logging.debug('_update state: %r', self.file_transfer.props.state) if self.file_transfer.props.state == filetransfer.FT_STATE_PENDING: menu_item = PaletteMenuItem(_('Accept')) icon = Icon(icon_name='dialog-ok', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__accept_activate_cb) box.append_item(menu_item) menu_item.show() menu_item = PaletteMenuItem(_('Decline')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__decline_activate_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() if self.file_transfer.description: text = self.file_transfer.description.replace('\n', ' ') label = Gtk.Label(label=text) label.set_max_width_chars(style.MENU_WIDTH_CHARS) label.set_ellipsize(style.ELLIPSIZE_MODE_DEFAULT) inner_box.add(label) label.show() mime_type = self.file_transfer.mime_type type_description = mime.get_mime_description(mime_type) size = self._format_size(self.file_transfer.file_size) label = Gtk.Label(label='%s (%s)' % (size, type_description)) inner_box.add(label) label.show() elif self.file_transfer.props.state in \ [filetransfer.FT_STATE_ACCEPTED, filetransfer.FT_STATE_OPEN]: menu_item = PaletteMenuItem(_('Cancel')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__cancel_activate_cb) box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() self.progress_bar = Gtk.ProgressBar() inner_box.add(self.progress_bar) self.progress_bar.show() self.progress_label = Gtk.Label(label='') inner_box.add(self.progress_label) self.progress_label.show() self.update_progress() elif self.file_transfer.props.state == filetransfer.FT_STATE_COMPLETED: menu_item = PaletteMenuItem(_('Dismiss')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__dismiss_activate_cb) box.append_item(menu_item) menu_item.show() self.update_progress() elif self.file_transfer.props.state == filetransfer.FT_STATE_CANCELLED: if self.file_transfer.reason_last_change == \ filetransfer.FT_REASON_REMOTE_STOPPED: menu_item = PaletteMenuItem(_('Dismiss')) icon = Icon(icon_name='dialog-cancel', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__dismiss_activate_cb) box.append_item(menu_item) menu_item.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) box.append_item(inner_box, vertical_padding=0) inner_box.show() text = _('The other participant canceled the file transfer') label = Gtk.Label(label=text) inner_box.add(label) label.show()
class BatteryPalette(Palette): def __init__(self, primary_text): Palette.__init__(self, primary_text) self._level = 0 self._time = 0 self._status = _STATUS_NOT_PRESENT self._warning_capacity = _settings_get('warning-capacity') self._progress_widget = PaletteMenuBox() self.set_content(self._progress_widget) self._progress_widget.show() inner_box = Gtk.VBox() inner_box.set_spacing(style.DEFAULT_PADDING) self._progress_widget.append_item(inner_box, vertical_padding=0) inner_box.show() self._progress_bar = Gtk.ProgressBar() self._progress_bar.set_size_request( style.zoom(style.GRID_CELL_SIZE * 4), -1) inner_box.pack_start(self._progress_bar, True, True, 0) self._progress_bar.show() self._status_label = Gtk.Label() inner_box.pack_start(self._status_label, True, True, 0) self._status_label.show() def set_info(self, percentage, seconds, status): self._level = percentage self._time = seconds self._status = status self._progress_bar.set_fraction(percentage / 100.0) self._update_secondary() def _update_secondary(self): secondary_text = '' status_text = '%s%%' % (self._level, ) progress_widget = self._progress_widget if self._status == _STATUS_NOT_PRESENT: secondary_text = _('Removed') progress_widget = None elif self._status == _STATUS_CHARGING: secondary_text = _('Charging') elif self._status == _STATUS_DISCHARGING: if self._level <= self._warning_capacity: secondary_text = _('Very little power remaining') else: minutes_remaining = self._time // 60 remaining_hourpart = minutes_remaining // 60 remaining_minpart = minutes_remaining % 60 # TRANS: do not translate %(hour)d:%(min).2d it is a variable, # only translate the word "remaining" secondary_text = _('%(hour)d:%(min).2d remaining') % \ {'hour': remaining_hourpart, 'min': remaining_minpart} else: secondary_text = _('Charged') self.set_content(progress_widget) self.props.secondary_text = secondary_text self._status_label.set_text(status_text)
def __init__(self, primary_text, manager): Palette.__init__(self, label=primary_text) self._manager = manager self._manager.connect('play', self._set_menu_state, 'play') self._manager.connect('stop', self._set_menu_state, 'stop') self._manager.connect('pause', self._set_menu_state, 'pause') box = PaletteMenuBox() self.set_content(box) box.show() self._play_icon = Icon(icon_name='player_play') self._pause_icon = Icon(icon_name='player_pause') self._play_pause_menu = PaletteMenuItem( icon_name='player_play', text_label=_('Say selected text')) self._play_pause_menu.set_image(self._play_icon) self._play_pause_menu.connect('activate', self.__play_activated_cb) box.append_item(self._play_pause_menu) self._play_pause_menu.show() self._stop_menu = PaletteMenuItem(icon_name='player_stop', text_label=_('Stop playback')) self._stop_menu.connect('activate', self.__stop_activated_cb) self._stop_menu.set_sensitive(False) box.append_item(self._stop_menu) separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() pitch_label = Gtk.Label(_('Pitch')) box.append_item(pitch_label, vertical_padding=0) pitch_label.show() self._adj_pitch = Gtk.Adjustment(value=self._manager.get_pitch(), lower=self._manager.MIN_PITCH, upper=self._manager.MAX_PITCH) hscale_pitch = Gtk.HScale() hscale_pitch.set_adjustment(self._adj_pitch) hscale_pitch.set_draw_value(False) box.append_item(hscale_pitch, vertical_padding=0) hscale_pitch.show() rate_label = Gtk.Label(_('Rate')) box.append_item(rate_label, vertical_padding=0) rate_label.show() self._adj_rate = Gtk.Adjustment(value=self._manager.get_rate(), lower=self._manager.MIN_RATE, upper=self._manager.MAX_RATE) hscale_rate = Gtk.HScale() hscale_rate.set_adjustment(self._adj_rate) hscale_rate.set_draw_value(False) box.append_item(hscale_rate, vertical_padding=0) hscale_rate.show() self._adj_pitch.connect('value_changed', self.__adj_pitch_changed_cb) self._adj_rate.connect('value_changed', self.__adj_rate_changed_cb)
class CurrentActivityPalette(BasePalette): __gsignals__ = { 'done': (GObject.SignalFlags.RUN_FIRST, None, ([])), } def __init__(self, home_activity): self._home_activity = home_activity BasePalette.__init__(self, home_activity) def setup_palette(self): activity_name = self._home_activity.get_activity_name() if activity_name: self.props.primary_text = activity_name title = self._home_activity.get_title() if title and title != activity_name: self.props.secondary_text = title self.menu_box = PaletteMenuBox() menu_item = PaletteMenuItem(_('Resume'), 'activity-start') menu_item.connect('activate', self.__resume_activate_cb) self.menu_box.append_item(menu_item) menu_item.show() # TODO: share-with, keep menu_item = PaletteMenuItem(_('View Source'), 'view-source') menu_item.connect('activate', self.__view_source__cb) menu_item.set_accelerator('Shift+Alt+V') self.menu_box.append_item(menu_item) menu_item.show() if should_show_view_help(self._home_activity): menu_item = PaletteMenuItem(_('View Help'), 'toolbar-help') menu_item.connect('activate', self.__view_help__cb) menu_item.set_accelerator('Shift+Alt+H') self.menu_box.append_item(menu_item) menu_item.show() # avoid circular importing reference from jarabe.frame.notification import NotificationBox menu_item = NotificationBox(self._home_activity.get_activity_id()) self.menu_box.append_item(menu_item, 0, 0) separator = PaletteMenuItemSeparator() menu_item.add(separator) menu_item.reorder_child(separator, 0) separator.show() separator = PaletteMenuItemSeparator() self.menu_box.append_item(separator) separator.show() menu_item = PaletteMenuItem(_('Stop'), 'activity-stop') menu_item.connect('activate', self.__stop_activate_cb) self.menu_box.append_item(menu_item) menu_item.show() self.set_content(self.menu_box) self.menu_box.show() def __resume_activate_cb(self, menu_item): self._home_activity.get_window().activate(Gtk.get_current_event_time()) self.emit('done') def __view_source__cb(self, menu_item): setup_view_source(self._home_activity) shell_model = shell.get_model() if self._home_activity is not shell_model.get_active_activity(): self._home_activity.get_window().activate( Gtk.get_current_event_time()) self.emit('done') def __view_help__cb(self, menu_item): setup_view_help(self._home_activity) self.emit('done') def __stop_activate_cb(self, menu_item): self._home_activity.stop() pid = self._home_activity.get_pid() GObject.timeout_add(3000, self.__kill_cb, pid, signal.SIGTERM) GObject.timeout_add(4500, self.__kill_cb, pid, signal.SIGKILL) self.emit('done') def __kill_cb(self, pid, sig): try: os.kill(pid, sig) finally: return False
def __init__(self, toolbar, edit_toolbar, activity): self._page = activity.page self._activity = activity # agregar cuadro self.add_photo = ToolButton() self.add_photo.props.icon_name = 'insert-picture' self.add_photo.connect('clicked', self.__add_photo_clicked_cb) self.add_photo.set_tooltip(_('Add Photo')) toolbar.insert(self.add_photo, -1) self._globes = { 'globe': _('Globe'), 'think': _('Think'), 'whisper': _('Whisper'), 'exclamation': _('Exclamation'), 'box': _('Box')} self._globes_menu = ToolButton(icon_name='globe') self._globes_menu.props.tooltip = _('Add a globe') self._globes_menu.props.hide_tooltip_on_click = False self._globes_menu.palette_invoker.props.toggle_palette = True menu_box = PaletteMenuBox() self._globes_menu.props.palette.set_content(menu_box) menu_box.show() for globe in self._globes.keys(): menu_item = PaletteMenuItem(icon_name=globe, text_label=self._globes[globe]) menu_item.connect('activate', self.__activate_add_globe_cb, globe) menu_box.append_item(menu_item) menu_item.show() toolbar.insert(self._globes_menu, -1) # lineas de movimiento # Agregar aqui el nombre de archivo de una linea de moviemiento self._lines = { 'curves': _('Curves'), 'straight': _('Straight'), 'highlight': _('Highlight'), 'idea': _('Idea')} self._lines_menu = ToolButton(icon_name='curves') self._lines_menu.props.tooltip = _('Choose a movement line') self._lines_menu.props.hide_tooltip_on_click = False self._lines_menu.palette_invoker.props.toggle_palette = True menu_box = PaletteMenuBox() self._lines_menu.props.palette.set_content(menu_box) menu_box.show() for line in self._lines.keys(): menu_item = PaletteMenuItem(icon_name=line, text_label=self._lines[line]) menu_item.connect('activate', self.__activate_add_line_cb, line) menu_box.append_item(menu_item) menu_item.show() toolbar.insert(self._lines_menu, -1) separator = Gtk.SeparatorToolItem() separator.set_draw(True) toolbar.insert(separator, -1) # girar self.b_girar = ToolButton('object-rotate-right') self.b_girar.connect('clicked', self.girar) self.b_girar.set_tooltip(_('Turn')) self.b_girar.show() edit_toolbar.insert(self.b_girar, -1) # borrar self.b_borrar = ToolButton('gtk-delete') self.b_borrar.connect('clicked', self.borrar) self.b_borrar.set_tooltip(_('Delete')) self.b_borrar.show() edit_toolbar.insert(self.b_borrar, -1)
class RecdButton(TrayButton): __gsignals__ = { 'remove-requested': (GObject.SignalFlags.RUN_LAST, None, ()), 'copy-clipboard-requested': (GObject.SignalFlags.RUN_LAST, None, ()), } def __init__(self, recd): TrayButton.__init__(self) self._recd = recd self.set_icon_widget(self.get_image()) self._copy_menu_item_handler = None palette = Palette(recd.title) self.set_palette(palette) self._box = PaletteMenuBox() palette.set_content(self._box) self._box.show() self._rem_menu_item = PaletteMenuItem( _('Erase'), icon_name='edit-delete') self._rem_menu_item_handler = self._rem_menu_item.connect( 'activate', self._remove_clicked) self._box.append_item(self._rem_menu_item) self._rem_menu_item.show() self._add_copy_menu_item() def _add_copy_menu_item(self): if self._recd.buddy and not self._recd.downloadedFromBuddy: return self._copy_menu_item = PaletteMenuItem( _('Copy to clipboard'), icon_name='edit-copy') self._copy_menu_item_handler = self._copy_menu_item.connect( 'activate', self._copy_clipboard_clicked) self._box.append_item(self._copy_menu_item) self._copy_menu_item.show() def get_recd(self): return self._recd def get_image(self): ipb = self._recd.getThumbPixbuf() if ipb: w = ipb.get_width() h = ipb.get_height() a = float(w) / float(h) else: a = 16. / 9 if a < 1.4: paths = {constants.TYPE_PHOTO: 'object-photo.svg', constants.TYPE_VIDEO: 'object-video.svg', constants.TYPE_AUDIO: 'object-audio.svg'} x = 8 y = 8 else: paths = {constants.TYPE_PHOTO: 'object-photo-16to9.svg', constants.TYPE_VIDEO: 'object-video-16to9.svg', constants.TYPE_AUDIO: 'object-audio-16to9.svg'} x = 9 y = 18 path = paths[self._recd.type] pixbuf = utils.load_colored_svg(path, self._recd.colorStroke, self._recd.colorFill) if ipb: ipb.composite(pixbuf, x, y, w, h, x, y, 1, 1, GdkPixbuf.InterpType.BILINEAR, 255) img = Gtk.Image() img.set_from_pixbuf(pixbuf) img.show() return img def cleanup(self): self._rem_menu_item.disconnect(self._rem_menu_item_handler) if self._copy_menu_item_handler is not None: self._copy_menu_item.disconnect(self._copy_menu_item_handler) def _remove_clicked(self, widget): self.emit('remove-requested') def _copy_clipboard_clicked(self, widget): self.emit('copy-clipboard-requested')
class FontComboBox(Gtk.ToolItem): __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, ([])), } def __init__(self): self._palette_invoker = ToolInvoker() Gtk.ToolItem.__init__(self) self._font_label = FontLabel() bt = Gtk.Button('') bt.set_can_focus(False) bt.remove(bt.get_children()[0]) box = Gtk.HBox() bt.add(box) icon = Icon(icon_name='font-text') box.pack_start(icon, False, False, 10) box.pack_start(self._font_label, False, False, 10) self.add(bt) self.show_all() self._font_name = 'Sans' # theme the button, can be removed if add the style to the sugar css if style.zoom(100) == 100: subcell_size = 15 else: subcell_size = 11 radius = 2 * subcell_size theme = "GtkButton {border-radius: %dpx;}" % radius css_provider = Gtk.CssProvider() css_provider.load_from_data(theme) style_context = bt.get_style_context() style_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) # init palette self._hide_tooltip_on_click = True self._palette_invoker.attach_tool(self) self._palette_invoker.props.toggle_palette = True self.palette = Palette(_('Select font')) self.palette.set_invoker(self._palette_invoker) # load the fonts in the palette menu self._menu_box = PaletteMenuBox() self.props.palette.set_content(self._menu_box) self._menu_box.show() context = self.get_pango_context() self._init_font_list() tmp_list = [] for family in context.list_families(): name = family.get_name() if name in self._font_white_list: tmp_list.append(name) for name in sorted(tmp_list): self._add_menu(name, self.__font_selected_cb) self._font_label.set_font(self._font_name) def _init_font_list(self): self._font_white_list = [] self._font_white_list.extend(DEFAULT_FONTS) # check if there are a user configuration file if not os.path.exists(USER_FONTS_FILE_PATH): # verify if exists a file in /etc if os.path.exists(GLOBAL_FONTS_FILE_PATH): shutil.copy(GLOBAL_FONTS_FILE_PATH, USER_FONTS_FILE_PATH) if os.path.exists(USER_FONTS_FILE_PATH): # get the font names in the file to the white list fonts_file = open(USER_FONTS_FILE_PATH) # get the font names in the file to the white list for line in fonts_file: self._font_white_list.append(line.strip()) # monitor changes in the file gio_fonts_file = Gio.File.new_for_path(USER_FONTS_FILE_PATH) self.monitor = gio_fonts_file.monitor_file( Gio.FileMonitorFlags.NONE, None) self.monitor.set_rate_limit(5000) self.monitor.connect('changed', self._reload_fonts) def _reload_fonts(self, monitor, gio_file, other_file, event): if event != Gio.FileMonitorEvent.CHANGES_DONE_HINT: return self._font_white_list = [] self._font_white_list.extend(DEFAULT_FONTS) fonts_file = open(USER_FONTS_FILE_PATH) for line in fonts_file: self._font_white_list.append(line.strip()) # update the menu for child in self._menu_box.get_children(): self._menu_box.remove(child) child = None context = self.get_pango_context() tmp_list = [] for family in context.list_families(): name = family.get_name() if name in self._font_white_list: tmp_list.append(name) for name in sorted(tmp_list): self._add_menu(name, self.__font_selected_cb) return False def __font_selected_cb(self, menu, font_name): self._font_name = font_name self._font_label.set_font(font_name) self.emit('changed') def _add_menu(self, font_name, activate_cb): label = '<span font="%s">%s</span>' % (font_name, font_name) menu_item = PaletteMenuItem() menu_item.set_label(label) menu_item.connect('activate', activate_cb, font_name) self._menu_box.append_item(menu_item) menu_item.show() def __destroy_cb(self, icon): if self._palette_invoker is not None: self._palette_invoker.detach() def create_palette(self): return None def get_palette(self): return self._palette_invoker.palette def set_palette(self, palette): self._palette_invoker.palette = palette palette = GObject.property( type=object, setter=set_palette, getter=get_palette) def get_palette_invoker(self): return self._palette_invoker def set_palette_invoker(self, palette_invoker): self._palette_invoker.detach() self._palette_invoker = palette_invoker palette_invoker = GObject.property( type=object, setter=set_palette_invoker, getter=get_palette_invoker) def set_font_name(self, font_name): self._font_label.set_font(font_name) def get_font_name(self): return self._font_name
def __init__(self, primary_text, manager): Palette.__init__(self, label=primary_text) self._manager = manager self._manager.connect('play', self._set_menu_state, 'play') self._manager.connect('stop', self._set_menu_state, 'stop') self._manager.connect('pause', self._set_menu_state, 'pause') box = PaletteMenuBox() self.set_content(box) box.show() self._play_icon = Icon(icon_name='player_play') self._pause_icon = Icon(icon_name='player_pause') self._play_pause_menu = PaletteMenuItem( icon_name='player_play', text_label=_('Say selected text'), accelerator='Shift+Alt+S') self._play_pause_menu.set_image(self._play_icon) self._play_pause_menu.connect('activate', self.__play_activated_cb) box.append_item(self._play_pause_menu) self._play_pause_menu.show() self._stop_menu = PaletteMenuItem(icon_name='player_stop', text_label=_('Stop playback')) self._stop_menu.connect('activate', self.__stop_activated_cb) self._stop_menu.set_sensitive(False) box.append_item(self._stop_menu) separator = PaletteMenuItemSeparator() box.append_item(separator) separator.show() pitch_label = Gtk.Label(_('Pitch')) box.append_item(pitch_label, vertical_padding=0) pitch_label.show() self._adj_pitch = Gtk.Adjustment(value=self._manager.get_pitch(), lower=self._manager.MIN_PITCH, upper=self._manager.MAX_PITCH) hscale_pitch = Gtk.HScale() hscale_pitch.set_adjustment(self._adj_pitch) hscale_pitch.set_draw_value(False) box.append_item(hscale_pitch, vertical_padding=0) hscale_pitch.show() rate_label = Gtk.Label(_('Rate')) box.append_item(rate_label, vertical_padding=0) rate_label.show() self._adj_rate = Gtk.Adjustment(value=self._manager.get_rate(), lower=self._manager.MIN_RATE, upper=self._manager.MAX_RATE) hscale_rate = Gtk.HScale() hscale_rate.set_adjustment(self._adj_rate) hscale_rate.set_draw_value(False) box.append_item(hscale_rate, vertical_padding=0) hscale_rate.show() self._adj_pitch.connect('value_changed', self.__adj_pitch_changed_cb) self._adj_rate.connect('value_changed', self.__adj_rate_changed_cb)
def __init__(self, tabbed_view, act): ToolbarBase.__init__(self) self._url_toolbar = UrlToolbar() self._activity = act self._tabbed_view = self._canvas = tabbed_view self._loading = False toolbar = self.toolbar activity_button = ActivityToolbarButton(self._activity) toolbar.insert(activity_button, 0) separator = Gtk.SeparatorToolItem() save_as_pdf = ToolButton("save-as-pdf") save_as_pdf.set_tooltip(_("Save page as pdf")) save_as_pdf.connect("clicked", self.save_as_pdf) activity_button.props.page.insert(separator, -1) activity_button.props.page.insert(save_as_pdf, -1) separator.show() save_as_pdf.show() self._go_home = ToolButton("go-home") self._go_home.set_tooltip(_("Home page")) self._go_home.connect("clicked", self._go_home_cb) # add a menu to save the home page menu_box = PaletteMenuBox() self._go_home.props.palette.set_content(menu_box) menu_item = PaletteMenuItem() menu_item.set_label(_("Select as initial page")) menu_item.connect("activate", self._set_home_cb) menu_box.append_item(menu_item) self._reset_home_menu = PaletteMenuItem() self._reset_home_menu.set_label(_("Reset initial page")) self._reset_home_menu.connect("activate", self._reset_home_cb) menu_box.append_item(self._reset_home_menu) if os.path.isfile(LIBRARY_PATH): library_menu = PaletteMenuItem() library_menu.set_label(_("Library")) library_menu.connect("activate", self._go_library_cb) menu_box.append_item(library_menu) menu_box.show_all() # verify if the home page is configured client = GConf.Client.get_default() self._reset_home_menu.set_visible(client.get_string(HOME_PAGE_GCONF_KEY) is not None) toolbar.insert(self._go_home, -1) self._go_home.show() self.entry = WebEntry() self.entry.set_icon_from_name(iconentry.ICON_ENTRY_SECONDARY, "entry-stop") self.entry.connect("icon-press", self._stop_and_reload_cb) self.entry.connect("activate", self._entry_activate_cb) self.entry.connect("focus-in-event", self.__focus_in_event_cb) self.entry.connect("focus-out-event", self.__focus_out_event_cb) self.entry.connect("key-press-event", self.__key_press_event_cb) self.entry.connect("changed", self.__changed_cb) self._entry_item = Gtk.ToolItem() self._entry_item.set_expand(True) self._entry_item.add(self.entry) self.entry.show() toolbar.insert(self._entry_item, -1) self._entry_item.show() self._back = ToolButton("go-previous-paired") self._back.set_tooltip(_("Back")) self._back.props.sensitive = False self._back.connect("clicked", self._go_back_cb) toolbar.insert(self._back, -1) self._back.show() palette = self._back.get_palette() self._back_box_menu = Gtk.VBox() self._back_box_menu.show() palette.set_content(self._back_box_menu) # FIXME, this is a hack, should be done in the theme: palette._content.set_border_width(1) self._forward = ToolButton("go-next-paired") self._forward.set_tooltip(_("Forward")) self._forward.props.sensitive = False self._forward.connect("clicked", self._go_forward_cb) toolbar.insert(self._forward, -1) self._forward.show() palette = self._forward.get_palette() self._forward_box_menu = Gtk.VBox() self._forward_box_menu.show() palette.set_content(self._forward_box_menu) # FIXME, this is a hack, should be done in the theme: palette._content.set_border_width(1) self._link_add = ToolButton("emblem-favorite") self._link_add.set_tooltip(_("Bookmark")) self._link_add.connect("clicked", self._link_add_clicked_cb) toolbar.insert(self._link_add, -1) self._link_add.show() self._toolbar_separator = Gtk.SeparatorToolItem() self._toolbar_separator.props.draw = False self._toolbar_separator.set_expand(True) self._go_to_JSshell = ToolButton("go-to-JSshell") self._go_to_JSshell.set_tooltip(_("Go to Interactive Javascript Shell")) self._go_to_JSshell.connect("clicked", self._go_to_JSshell_cb) # adding a button for the Interactive Javascript shell toolbar.insert(self._go_to_JSshell, -1) self._go_to_JSshell.show() self._get_shell_input = ToolButton("get-shell-input") self._get_shell_input.set_tooltip(_("Get Interactive Javascript Shell Input")) self._get_shell_input.connect("clicked", self._get_shell_input_cb) # adding a button for the Interactive Javascript shell toolbar.insert(self._get_shell_input, -1) self._get_shell_input.show() stop_button = StopButton(self._activity) toolbar.insert(stop_button, -1) self._progress_listener = None self._browser = None self._loading_changed_hid = None self._progress_changed_hid = None self._session_history_changed_hid = None self._uri_changed_hid = None self._security_status_changed_hid = None if tabbed_view.get_n_pages(): self._connect_to_browser(tabbed_view.props.current_browser) tabbed_view.connect_after("switch-page", self.__switch_page_cb) tabbed_view.connect_after("page-added", self.__page_added_cb) Gdk.Screen.get_default().connect("size-changed", self.__screen_size_changed_cb) self._configure_toolbar()
class FontComboBox(Gtk.ToolItem): __gsignals__ = { "changed": (GObject.SignalFlags.RUN_LAST, None, [str]), } def __init__(self, font_name): Gtk.ToolItem.__init__(self) self._palette_invoker = ToolInvoker() self._font_label = FontLabel(font_name) self._font_name = font_name bt = Gtk.Button("") bt.set_can_focus(False) bt.set_valign(Gtk.Align.CENTER) bt.remove(bt.get_children()[0]) box = Gtk.HBox() icon = Icon(icon_name="font-text") box.pack_start(icon, False, False, 10) box.pack_start(self._font_label, False, False, 10) bt.add(box) self.add(bt) self.show_all() if style.zoom(100) == 100: subcell_size = 15 else: subcell_size = 11 radius = 2 * subcell_size theme = "GtkButton { border-radius: %dpx; }" % radius css_provider = Gtk.CssProvider() css_provider.load_from_data(theme) style_context = bt.get_style_context() style_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self._hide_tooltip_on_click = True self._palette_invoker.attach_tool(self) self._palette_invoker.props.toggle_palette = True self.palette = Palette(_("Select font")) self.palette.set_invoker(self._palette_invoker) self._menu_box = PaletteMenuBox() self.props.palette.set_content(self._menu_box) self._menu_box.show() context = self.get_pango_context() self._init_font_list() tmp_list = [] for family in context.list_families(): name = family.get_name() if name in self._font_white_list: tmp_list.append(name) for name in sorted(tmp_list): self._add_menu(name, self.__font_selected_cb) self._font_label.set_font(self._font_name) def _init_font_list(self): self._font_white_list = [] self._font_white_list.extend(G.DEFAULT_FONTS) if not os.path.exists(G.USER_FONTS_FILE_PATH): if os.path.exists(G.GLOBAL_FONTS_FILE_PATH): shutil.copy(G.GLOBAL_FONTS_FILE_PATH, G.USER_FONTS_FILE_PATH) if os.path.exists(G.USER_FONTS_FILE_PATH): fonts_file = open(G.USER_FONTS_FILE_PATH) for line in fonts_file: self._font_white_list.append(line.strip()) gio_fonts_file = Gio.File.new_for_path(G.USER_FONTS_FILE_PATH) self.monitor = gio_fonts_file.monitor_file( Gio.FileMonitorFlags.NONE, None) self.monitor.set_rate_limit(5000) self.monitor.connect("changed", self._reload_fonts) def _reload_fonts(self, monitor, gio_file, other_file, event): if event != Gio.FileMonitorEvent.CHANGES_DONE_HINT: return self._font_white_list = [] self._font_white_list.extend(G.DEFAULT_FONTS) fonts_file = open(G.USER_FONTS_FILE_PATH) for line in fonts_file: self._font_white_list.append(line.strip()) for child in self._menu_box.get_children(): self._menu_box.remove(child) child = None context = self.get_pango_context() tmp_list = [] for family in context.list_families(): name = family.get_name() if name in self._font_white_list: tmp_list.append(name) for name in sorted(tmp_list): self._add_menu(name, self.__font_selected_cb) return False def __font_selected_cb(self, menu, font_name): self._font_name = font_name self._font_label.set_font(font_name) self.emit("changed", self._font_name) def _add_menu(self, font_name, activate_cb): label = '<span font="%s">%s</span>' % (font_name, font_name) menu_item = PaletteMenuItem() menu_item.set_label(label) menu_item.connect("activate", activate_cb, font_name) self._menu_box.append_item(menu_item) menu_item.show() def __destroy_cb(self, icon): if self._palette_invoker is not None: self._palette_invoker.detach() def create_palette(self): return None def get_palette(self): return self._palette_invoker.palette def set_palette(self, palette): self._palette_invoker.palette = palette palette = GObject.property(type=object, setter=set_palette, getter=get_palette) def get_palette_invoker(self): return self._palette_invoker def set_palette_invoker(self, palette_invoker): self._palette_invoker.detach() self._palette_invoker = palette_invoker palette_invoker = GObject.property(type=object, setter=set_palette_invoker, getter=get_palette_invoker) def set_font_name(self, font_name): self._font_label.set_font(font_name) def get_font_name(self): return self._font_name
class VolumePalette(Palette): def __init__(self, mount): Palette.__init__(self, label=mount.get_name()) self._mount = mount self.props.secondary_text = mount.get_root().get_path() self.content_box = PaletteMenuBox() self.set_content(self.content_box) self.content_box.show() menu_item = PaletteMenuItem(pgettext('Volume', 'Remove')) icon = Icon(icon_name='media-eject', pixel_size=style.SMALL_ICON_SIZE) menu_item.set_image(icon) icon.show() menu_item.connect('activate', self.__unmount_activate_cb) self.content_box.append_item(menu_item) menu_item.show() separator = PaletteMenuItemSeparator() self.content_box.append_item(separator) separator.show() free_space_box = Gtk.VBox() free_space_box.set_spacing(style.DEFAULT_PADDING) self.content_box.append_item(free_space_box, vertical_padding=0) free_space_box.show() self._progress_bar = Gtk.ProgressBar() free_space_box.pack_start(self._progress_bar, True, True, 0) self._progress_bar.show() self._free_space_label = Gtk.Label() self._free_space_label.set_alignment(0.5, 0.5) free_space_box.pack_start(self._free_space_label, True, True, 0) self._free_space_label.show() self.connect('popup', self.__popup_cb) def __unmount_activate_cb(self, menu_item): flags = 0 mount_operation = Gtk.MountOperation( parent=self.content_box.get_toplevel()) cancellable = None user_data = None self._mount.unmount_with_operation(flags, mount_operation, cancellable, self.__unmount_cb, user_data) def __unmount_cb(self, mount, result, user_data): logging.debug('__unmount_cb %r %r', mount, result) mount.unmount_with_operation_finish(result) def __popup_cb(self, palette): mount_point = self._mount.get_root().get_path() stat = os.statvfs(mount_point) free_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL] total_space = stat[statvfs.F_BSIZE] * stat[statvfs.F_BLOCKS] fraction = (total_space - free_space) / float(total_space) self._progress_bar.props.fraction = fraction self._free_space_label.props.label = _('%(free_space)d MiB Free') % \ {'free_space': free_space / (1024 * 1024)}
def __init__(self, pc, toolbar_box): GObject.GObject.__init__(self) self._abiword_canvas = pc.abiword_canvas copy = CopyButton() copy.props.accelerator = '<Ctrl>C' copy.connect('clicked', lambda button: pc.abiword_canvas.copy()) self.insert(copy, -1) copy.show() paste = PasteButton() paste.props.accelerator = '<Ctrl>V' paste.connect('clicked', self.__paste_button_cb) self.insert(paste, -1) paste.show() menu_box = PaletteMenuBox() paste.props.palette.set_content(menu_box) menu_box.show() menu_item = PaletteMenuItem() menu_item.set_label(_('Paste unformatted')) menu_item.connect('activate', self.__paste_special_button_cb) menu_box.append_item(menu_item) separator = Gtk.SeparatorToolItem() self.insert(separator, -1) separator.show() undo = UndoButton(sensitive=True) undo.connect('clicked', lambda button: pc.abiword_canvas.undo()) pc.abiword_canvas.connect("can-undo", lambda abi, can_undo: undo.set_sensitive(can_undo)) self.insert(undo, -1) undo.show() redo = RedoButton(sensitive=True) redo.connect('clicked', lambda button: pc.abiword_canvas.redo()) pc.abiword_canvas.connect("can-redo", lambda abi, can_redo: redo.set_sensitive(can_redo)) self.insert(redo, -1) redo.show() pc.abiword_canvas.connect('text-selected', lambda abi, b: copy.set_sensitive(True)) pc.abiword_canvas.connect('image-selected', lambda abi, b: copy.set_sensitive(True)) pc.abiword_canvas.connect('selection-cleared', lambda abi, b: copy.set_sensitive(False)) separator = Gtk.SeparatorToolItem() self.insert(separator, -1) separator.show() search_label = Gtk.Label(label=_("Search") + ": ") search_label.show() search_item_page_label = Gtk.ToolItem() search_item_page_label.add(search_label) self.insert(search_item_page_label, -1) search_item_page_label.show() # setup the search options self._search_entry = iconentry.IconEntry() self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, 'system-search') self._search_entry.connect('activate', self._search_entry_activated_cb) self._search_entry.connect('changed', self._search_entry_changed_cb) self._search_entry.add_clear_button() self._add_widget(self._search_entry, expand=True) self._findprev = ToolButton('go-previous-paired') self._findprev.set_tooltip(_('Find previous')) self.insert(self._findprev, -1) self._findprev.show() self._findprev.connect('clicked', self._findprev_cb) self._findnext = ToolButton('go-next-paired') self._findnext.set_tooltip(_('Find next')) self.insert(self._findnext, -1) self._findnext.show() self._findnext.connect('clicked', self._findnext_cb) # set the initial state of the search controls # note: we won't simple call self._search_entry_changed_cb # here, as that will call into the abiword_canvas, which # is not mapped on screen here, causing the set_find_string # call to fail self._findprev.set_sensitive(False) self._findnext.set_sensitive(False)
def __init__(self, tabbed_view, act): ToolbarBase.__init__(self) self._url_toolbar = UrlToolbar() self._activity = act self._tabbed_view = self._canvas = tabbed_view self._loading = False toolbar = self.toolbar activity_button = ActivityToolbarButton(self._activity) toolbar.insert(activity_button, 0) separator = Gtk.SeparatorToolItem() save_as_pdf = ToolButton('save-as-pdf') save_as_pdf.set_tooltip(_('Save page as pdf')) save_as_pdf.connect('clicked', self.save_as_pdf) activity_button.props.page.insert(separator, -1) activity_button.props.page.insert(save_as_pdf, -1) separator.show() save_as_pdf.show() self._go_home = ToolButton('go-home') self._go_home.set_tooltip(_('Home page')) self._go_home.connect('clicked', self._go_home_cb) # add a menu to save the home page menu_box = PaletteMenuBox() self._go_home.props.palette.set_content(menu_box) menu_item = PaletteMenuItem() menu_item.set_label(_('Select as initial page')) menu_item.connect('activate', self._set_home_cb) menu_box.append_item(menu_item) self._reset_home_menu = PaletteMenuItem() self._reset_home_menu.set_label(_('Reset initial page')) self._reset_home_menu.connect('activate', self._reset_home_cb) menu_box.append_item(self._reset_home_menu) if os.path.isfile(LIBRARY_PATH): library_menu = PaletteMenuItem() library_menu.set_label(_('Library')) library_menu.connect('activate', self._go_library_cb) menu_box.append_item(library_menu) menu_box.show_all() # verify if the home page is configured client = GConf.Client.get_default() self._reset_home_menu.set_visible( client.get_string(HOME_PAGE_GCONF_KEY) is not None) toolbar.insert(self._go_home, -1) self._go_home.show() self.entry = WebEntry() self.entry.set_icon_from_name(iconentry.ICON_ENTRY_SECONDARY, 'entry-stop') self.entry.connect('icon-press', self._stop_and_reload_cb) self.entry.connect('activate', self._entry_activate_cb) self.entry.connect('focus-in-event', self.__focus_in_event_cb) self.entry.connect('focus-out-event', self.__focus_out_event_cb) self.entry.connect('key-press-event', self.__key_press_event_cb) self.entry.connect('changed', self.__changed_cb) self._entry_item = Gtk.ToolItem() self._entry_item.set_expand(True) self._entry_item.add(self.entry) self.entry.show() toolbar.insert(self._entry_item, -1) self._entry_item.show() self._back = ToolButton('go-previous-paired') self._back.set_tooltip(_('Back')) self._back.props.sensitive = False self._back.connect('clicked', self._go_back_cb) toolbar.insert(self._back, -1) self._back.show() palette = self._back.get_palette() self._back_box_menu = Gtk.VBox() self._back_box_menu.show() palette.set_content(self._back_box_menu) # FIXME, this is a hack, should be done in the theme: palette._content.set_border_width(1) self._forward = ToolButton('go-next-paired') self._forward.set_tooltip(_('Forward')) self._forward.props.sensitive = False self._forward.connect('clicked', self._go_forward_cb) toolbar.insert(self._forward, -1) self._forward.show() palette = self._forward.get_palette() self._forward_box_menu = Gtk.VBox() self._forward_box_menu.show() palette.set_content(self._forward_box_menu) # FIXME, this is a hack, should be done in the theme: palette._content.set_border_width(1) # Downloads ProgressIcon self._download_icon = ProgressToolButton('emblem-downloads', style.STANDARD_ICON_SIZE, 'vertical') self._download_icon.set_tooltip(_('Downloads')) self._download_icon.props.sensitive = False down_id = GObject.timeout_add(500, self.__download_running_cb) toolbar.insert(self._download_icon, -1) self._download_icon.show() self._link_add = ToolButton('emblem-favorite') self._link_add.set_tooltip(_('Bookmark')) self._link_add.connect('clicked', self._link_add_clicked_cb) toolbar.insert(self._link_add, -1) self._link_add.show() self._toolbar_separator = Gtk.SeparatorToolItem() self._toolbar_separator.props.draw = False self._toolbar_separator.set_expand(True) # Adds an options-toolbar button to the main-toolbar self._options_toolbar = OptionsToolbar(self._activity) self._options_toolbar_button = ToolbarButton( page=self._options_toolbar, icon_name='options') toolbar.insert(self._options_toolbar_button, -1) stop_button = StopButton(self._activity) toolbar.insert(stop_button, -1) self._progress_listener = None self._browser = None self._loading_changed_hid = None self._progress_changed_hid = None self._session_history_changed_hid = None self._uri_changed_hid = None self._security_status_changed_hid = None if tabbed_view.get_n_pages(): self._connect_to_browser(tabbed_view.props.current_browser) tabbed_view.connect_after('switch-page', self.__switch_page_cb) tabbed_view.connect_after('page-added', self.__page_added_cb) Gdk.Screen.get_default().connect('size-changed', self.__screen_size_changed_cb) self._configure_toolbar()
def __init__(self, pc, toolbar_box): GObject.GObject.__init__(self) self._abiword_canvas = pc.abiword_canvas copy = CopyButton() copy.props.accelerator = '<Ctrl>C' copy.connect('clicked', lambda button: pc.abiword_canvas.copy()) self.insert(copy, -1) copy.show() paste = PasteButton() paste.props.accelerator = '<Ctrl>V' paste.connect('clicked', self.__paste_button_cb) self.insert(paste, -1) paste.show() menu_box = PaletteMenuBox() paste.props.palette.set_content(menu_box) menu_box.show() menu_item = PaletteMenuItem() menu_item.set_label(_('Paste unformatted')) menu_item.connect('activate', self.__paste_special_button_cb) menu_box.append_item(menu_item) separator = Gtk.SeparatorToolItem() self.insert(separator, -1) separator.show() undo = UndoButton(sensitive=True) undo.connect('clicked', lambda button: pc.abiword_canvas.undo()) pc.abiword_canvas.connect( "can-undo", lambda abi, can_undo: undo.set_sensitive(can_undo)) self.insert(undo, -1) undo.show() redo = RedoButton(sensitive=True) redo.connect('clicked', lambda button: pc.abiword_canvas.redo()) pc.abiword_canvas.connect( "can-redo", lambda abi, can_redo: redo.set_sensitive(can_redo)) self.insert(redo, -1) redo.show() pc.abiword_canvas.connect('text-selected', lambda abi, b: copy.set_sensitive(True)) pc.abiword_canvas.connect('image-selected', lambda abi, b: copy.set_sensitive(True)) pc.abiword_canvas.connect('selection-cleared', lambda abi, b: copy.set_sensitive(False)) separator = Gtk.SeparatorToolItem() self.insert(separator, -1) separator.show() search_label = Gtk.Label(label=_("Search") + ": ") search_label.show() search_item_page_label = Gtk.ToolItem() search_item_page_label.add(search_label) self.insert(search_item_page_label, -1) search_item_page_label.show() # setup the search options self._search_entry = iconentry.IconEntry() self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, 'system-search') self._search_entry.connect('activate', self._search_entry_activated_cb) self._search_entry.connect('changed', self._search_entry_changed_cb) self._search_entry.add_clear_button() self._add_widget(self._search_entry, expand=True) self._findprev = ToolButton('go-previous-paired') self._findprev.set_tooltip(_('Find previous')) self.insert(self._findprev, -1) self._findprev.show() self._findprev.connect('clicked', self._findprev_cb) self._findnext = ToolButton('go-next-paired') self._findnext.set_tooltip(_('Find next')) self.insert(self._findnext, -1) self._findnext.show() self._findnext.connect('clicked', self._findnext_cb) # set the initial state of the search controls # note: we won't simple call self._search_entry_changed_cb # here, as that will call into the abiword_canvas, which # is not mapped on screen here, causing the set_find_string # call to fail self._findprev.set_sensitive(False) self._findnext.set_sensitive(False)