def __init__(self, activity): EditToolbar.__init__(self) self._activity = activity self.undo.set_tooltip(_('Undo')) self.redo.set_tooltip(_('Redo')) self.copy.set_tooltip(_('Copy')) self.paste.set_tooltip(_('Paste')) separator = Gtk.SeparatorToolItem() separator.set_draw(True) self.insert(separator, -1) self._clear_all = ToolButton('edit-clear') self.insert(self._clear_all, -1) self._clear_all.set_tooltip(_('Clear')) self._clear_all.show() self.undo.connect('clicked', self._undo_cb) self.redo.connect('clicked', self._redo_cb) self.copy.connect('clicked', self._copy_cb) self.paste.connect('clicked', self._paste_cb) self._clear_all.connect('clicked', self._clear_all_cb) self._activity.area.connect('undo', self._on_signal_undo_cb) self._activity.area.connect('redo', self._on_signal_redo_cb) self._activity.area.connect('select', self._on_signal_select_cb) self._activity.area.connect('action-saved', self._on_signal_action_saved_cb)
def __init__(self, _parent): SugarEditToolbar.__init__(self) self._parent = _parent self.undo.connect('clicked', self.__undo_cb) self.redo.connect('clicked', self.__redo_cb) self.copy.connect('clicked', self.__copy_cb) self.paste.connect('clicked', self.__paste_cb) menu_item = MenuItem(_('Cut')) menu_item.connect('activate', self.__cut_cb) menu_item.show() self.copy.get_palette().menu.append(menu_item) self.insert(Gtk.SeparatorToolItem(), -1) self.erase_button = ToolButton('edit-delete') self.erase_button.set_tooltip(_('Erase selected thought(s)')) self.erase_button.connect('clicked', self.__delete_cb) self.insert(self.erase_button, -1) self.show_all() self.clipboard = Gtk.Clipboard() self.copy.set_sensitive(False) self.paste.set_sensitive(False) self.erase_button.set_sensitive(False)
def setup_toolbar(self): '''Setup the top toolbar. Groupthink needs some work here.''' toolbox = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbox.toolbar.insert(activity_button, 0) activity_button.show() self.set_toolbar_box(toolbox) toolbox.show() toolbar = toolbox.toolbar self.edit_toolbar = EditToolbar() edit_toolbar_button = ToolbarButton(page=self.edit_toolbar, icon_name='toolbar-edit') self.edit_toolbar.show() toolbar.insert(edit_toolbar_button, -1) edit_toolbar_button.show() self.edit_toolbar.undo.connect('clicked', self.undobutton_cb) self.edit_toolbar.redo.connect('clicked', self.redobutton_cb) self.edit_toolbar.copy.connect('clicked', self.copybutton_cb) self.edit_toolbar.paste.connect('clicked', self.pastebutton_cb) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' toolbox.toolbar.insert(stop_button, -1) stop_button.show()
def __init__(self, act): BaseEditToolbar.__init__(self) self._activity = act self._browser = None self._source_id = None self.undo.connect('clicked', self.__undo_cb) self.redo.connect('clicked', self.__redo_cb) self.copy.connect('clicked', self.__copy_cb) self.paste.connect('clicked', self.__paste_cb) separator = Gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.insert(separator, -1) separator.show() search_item = Gtk.ToolItem() self.search_entry = iconentry.IconEntry() self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, 'entry-search') self.search_entry.add_clear_button() self.search_entry.connect('activate', self.__search_entry_activate_cb) self.search_entry.connect('changed', self.__search_entry_changed_cb) width = int(Gdk.Screen.width() / 3) self.search_entry.set_size_request(width, -1) search_item.add(self.search_entry) self.search_entry.show() self.insert(search_item, -1) search_item.show() self._prev = ToolButton('go-previous-paired') self._prev.set_tooltip(_('Previous')) self._prev.props.sensitive = False self._prev.connect('clicked', self.__find_previous_cb) self.insert(self._prev, -1) self._prev.show() self._next = ToolButton('go-next-paired') self._next.set_tooltip(_('Next')) self._next.props.sensitive = False self._next.connect('clicked', self.__find_next_cb) self.insert(self._next, -1) self._next.show() tabbed_view = self._activity.get_canvas() GObject.idle_add(lambda: self._connect_to_browser( tabbed_view.props.current_browser)) tabbed_view.connect_after('switch-page', self.__switch_page_cb)
def __init__(self, act): BaseEditToolbar.__init__(self) self._activity = act self._browser = None self._source_id = None self.undo.connect('clicked', self.__undo_cb) self.redo.connect('clicked', self.__redo_cb) self.copy.connect('clicked', self.__copy_cb) self.paste.connect('clicked', self.__paste_cb) separator = Gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.insert(separator, -1) separator.show() search_item = Gtk.ToolItem() self.search_entry = iconentry.IconEntry() self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, 'entry-search') self.search_entry.add_clear_button() self.search_entry.connect('activate', self.__search_entry_activate_cb) self.search_entry.connect('changed', self.__search_entry_changed_cb) width = int(Gdk.Screen.width() / 3) self.search_entry.set_size_request(width, -1) search_item.add(self.search_entry) self.search_entry.show() self.insert(search_item, -1) search_item.show() self._prev = ToolButton('go-previous-paired') self._prev.set_tooltip(_('Previous')) self._prev.props.sensitive = False self._prev.connect('clicked', self.__find_previous_cb) self.insert(self._prev, -1) self._prev.show() self._next = ToolButton('go-next-paired') self._next.set_tooltip(_('Next')) self._next.props.sensitive = False self._next.connect('clicked', self.__find_next_cb) self.insert(self._next, -1) self._next.show() tabbed_view = self._activity.get_canvas() GObject.idle_add(lambda: self._connect_to_browser(tabbed_view.props. current_browser)) tabbed_view.connect_after('switch-page', self.__switch_page_cb)
def __init__(self, _activity): EditToolbar.__init__(self) self._activity = _activity self._activity.editor.connect('changed', self._changed_cb) self._changed_cb(None) self.undo.connect('clicked', self._undo_cb) self.redo.connect('clicked', self._redo_cb) self.copy.connect('clicked', self._copy_cb) self.paste.connect('clicked', self._paste_cb)
def __init__(self): BaseEditToolbar.__init__(self) self._view = None self._find_job = None search_item = Gtk.ToolItem() self._search_entry = iconentry.IconEntry() self._search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY, 'entry-search') self._search_entry.add_clear_button() self._search_entry.connect('activate', self._search_entry_activate_cb) self._search_entry.connect('changed', self._search_entry_changed_cb) self._search_entry_changed = True width = int(Gdk.Screen.width() / 3) self._search_entry.set_size_request(width, -1) search_item.add(self._search_entry) self._search_entry.show() self.insert(search_item, -1) search_item.show() self._prev = ToolButton('go-previous-paired') self._prev.set_tooltip(_('Previous')) self._prev.props.sensitive = False self._prev.connect('clicked', self._find_prev_cb) self.insert(self._prev, -1) self._prev.show() self._next = ToolButton('go-next-paired') self._next.set_tooltip(_('Next')) self._next.props.sensitive = False self._next.connect('clicked', self._find_next_cb) self.insert(self._next, -1) self._next.show() separator = Gtk.SeparatorToolItem() separator.show() self.insert(separator, -1) self.highlight = ToggleToolButton('format-text-underline') self.highlight.set_tooltip(_('Highlight')) self.highlight.props.sensitive = False self.insert(self.highlight, -1)
def _create_edit_toolbar(self): edit_toolbar = EditToolbar() edit_toolbar.undo.props.visible = False edit_toolbar.redo.props.visible = False edit_toolbar.separator.props.visible = False edit_toolbar.copy.connect('clicked', self.__copy_cb) edit_toolbar.copy.props.accelerator = '<Ctrl><Shift>C' edit_toolbar.paste.connect('clicked', self.__paste_cb) edit_toolbar.paste.props.accelerator = '<Ctrl><Shift>V' clear = ToolButton('edit-clear') clear.set_tooltip(_('Clear scrollback')) clear.connect('clicked', self.__clear_cb) edit_toolbar.insert(clear, -1) clear.show() return edit_toolbar
def _create_edit_toolbar(self): edit_toolbar = EditToolbar() edit_toolbar.undo.props.visible = False edit_toolbar.redo.props.visible = False edit_toolbar.separator.props.visible = False edit_toolbar.copy.connect('clicked', self.__copy_cb) edit_toolbar.copy.props.accelerator = '<Ctrl><Shift>C' edit_toolbar.paste.connect('clicked', self.__paste_cb) edit_toolbar.paste.props.accelerator = '<Ctrl><Shift>V' return edit_toolbar
def __init__(self): SugarEditToolbar.__init__(self) self.button = ToolbarButton(page=self, icon_name="toolbar-edit") self.undo.props.accelerator = "<Ctrl>Z" self.undo.set_sensitive(False) self.undo.connect("clicked", lambda button: self.emit("undo")) self.redo.props.accelerator = "<Ctrl><Mayus>Z" self.redo.set_sensitive(False) self.redo.connect("clicked", lambda button: self.emit("redo")) item_entry = Gtk.ToolItem() self.insert(item_entry, -1) self.entry_search = IconEntry() self.entry_search.set_size_request(250, -1) self.entry_search.set_placeholder_text("Search...") self.entry_search.set_margin_right(10) self.entry_search.set_icon_from_name( Gtk.EntryIconPosition.SECONDARY, "search") self.entry_search.connect( "changed", lambda entry: self.emit("search-text", False)) self.entry_search.connect( "activate", lambda entry: self.emit("search-text", True)) item_entry.add(self.entry_search) item_entry = Gtk.ToolItem() self.insert(item_entry, -1) self.entry_replace = IconEntry() self.entry_replace.set_size_request(250, -1) self.entry_replace.set_placeholder_text("Replace...") self.entry_replace.connect( "activate", lambda entry: self.emit("replace-text")) item_entry.add(self.entry_replace) self.copy.destroy() self.paste.destroy() self.show_all()
def setup_toolbar(self): '''Setup the top toolbar. Groupthink needs some work here.''' toolbox = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbox.toolbar.insert(activity_button, 0) activity_button.show() self.set_toolbar_box(toolbox) toolbox.show() toolbar = toolbox.toolbar self.edit_toolbar = EditToolbar() edit_toolbar_button = ToolbarButton( page=self.edit_toolbar, icon_name='toolbar-edit') self.edit_toolbar.show() toolbar.insert(edit_toolbar_button, -1) edit_toolbar_button.show() self.edit_toolbar.undo.connect('clicked', self.undobutton_cb) self.edit_toolbar.redo.connect('clicked', self.redobutton_cb) self.edit_toolbar.copy.connect('clicked', self.copybutton_cb) self.edit_toolbar.paste.connect('clicked', self.pastebutton_cb) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' toolbox.toolbar.insert(stop_button, -1) stop_button.show()
class ConvertActivity(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle, True) self.max_participants = 1 self.dic = {} # Canvas self._canvas = Gtk.VBox() hbox = Gtk.HBox() self._liststore = Gtk.ListStore(str) self.combo1 = Gtk.ComboBox.new_with_model_and_entry(self._liststore) cell = Gtk.CellRendererText() self.combo1.pack_start(cell, True) self.combo1.set_entry_text_column(0) self.combo1.connect('changed', self._call) flip_btn = Gtk.Button() flip_btn.connect('clicked', self._flip) flip_btn.add(Gtk.Image.new_from_file('icons/flip.svg')) self.combo2 = Gtk.ComboBox.new_with_model_and_entry(self._liststore) cell = Gtk.CellRendererText() self.combo2.pack_start(cell, True) self.combo2.set_entry_text_column(0) self.combo2.connect('changed', self._call) self.label_box = Gtk.HBox() self.adjustment = Gtk.Adjustment(1.0, 0, 10.00**10.00, 1.0, 1.0, 0) self.spin = Gtk.SpinButton() self.spin.set_adjustment(self.adjustment) self.spin.set_numeric(True) self.label = Gtk.Label() self.label._size = 12 self.label.set_selectable(True) self.label.connect('draw', self.resize_label) self.convert_btn = Gtk.Button(_('Convert')) self.convert_btn.connect('clicked', self._call) self._canvas.pack_start(hbox, False, False, 20) hbox.pack_start(self.combo1, False, True, 20) hbox.pack_start(flip_btn, True, False, 20) hbox.pack_end(self.combo2, False, True, 20) spin_box = Gtk.HBox() convert_box = Gtk.HBox() convert_box.pack_start(spin_box, True, False, 0) spin_box.pack_start(self.spin, False, False, 0) self._canvas.pack_start(convert_box, False, False, 5) self._canvas.pack_start(self.label_box, True, False, 0) self.label_box.add(self.label) spin_box.pack_start(self.convert_btn, False, False, 20) self.set_canvas(self._canvas) # Toolbar toolbarbox = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbarbox.toolbar.insert(activity_button, 0) separator = Gtk.SeparatorToolItem() separator.set_expand(False) separator.set_draw(True) toolbarbox.toolbar.insert(separator, -1) self._edit_toolbar = EditToolbar() self._edit_toolbar.undo.props.visible = False self._edit_toolbar.redo.props.visible = False self._edit_toolbar.separator.props.visible = False self._edit_toolbar.copy.set_sensitive = False self._edit_toolbar.copy.connect('clicked', self._edit_copy_cb) edit_toolbar_button = ToolbarButton(page=self._edit_toolbar, icon_name='toolbar-edit') edit_toolbar_button.props.label = _('Edit') self._edit_toolbar.show() edit_toolbar_button.show() toolbarbox.toolbar.insert(edit_toolbar_button, -1) # RadioToolButton self._length_btn = RadioToolButton() self._length_btn.connect('clicked', lambda w: self._update_combo(convert.length)) # TRANS: https://en.wikipedia.org/wiki/Length self._length_btn.set_tooltip(_('Length')) self._length_btn.props.icon_name = 'length' self._volume_btn = RadioToolButton() self._volume_btn.connect('clicked', lambda w: self._update_combo(convert.volume)) # TRANS: https://en.wikipedia.org/wiki/Volume self._volume_btn.set_tooltip(_('Volume')) self._volume_btn.props.icon_name = 'volume' self._volume_btn.props.group = self._length_btn self._area_btn = RadioToolButton() self._area_btn.connect('clicked', lambda w: self._update_combo(convert.area)) # TRANS: https://en.wikipedia.org/wiki/Area self._area_btn.set_tooltip(_('Area')) self._area_btn.props.icon_name = 'area' self._area_btn.props.group = self._length_btn self._weight_btn = RadioToolButton() self._weight_btn.connect('clicked', lambda w: self._update_combo(convert.weight)) # TRANS: https://en.wikipedia.org/wiki/Weight self._weight_btn.set_tooltip(_('Weight')) self._weight_btn.props.icon_name = 'weight' self._weight_btn.props.group = self._length_btn self._speed_btn = RadioToolButton() self._speed_btn.connect('clicked', lambda w: self._update_combo(convert.speed)) # TRANS: https://en.wikipedia.org/wiki/Speed self._speed_btn.set_tooltip(_('Speed')) self._speed_btn.props.icon_name = 'speed' self._speed_btn.props.group = self._length_btn self._time_btn = RadioToolButton() self._time_btn.connect('clicked', lambda w: self._update_combo(convert.time)) # TRANS: https://en.wikipedia.org/wiki/Time self._time_btn.set_tooltip(_('Time')) self._time_btn.props.icon_name = 'time' self._time_btn.props.group = self._length_btn self._temp_btn = RadioToolButton() self._temp_btn.connect('clicked', lambda w: self._update_combo(convert.temp)) # TRANS: https://en.wikipedia.org/wiki/Temperature self._temp_btn.set_tooltip(_('Temperature')) self._temp_btn.props.icon_name = 'temp' self._temp_btn.props.group = self._length_btn toolbarbox.toolbar.insert(self._length_btn, -1) toolbarbox.toolbar.insert(self._volume_btn, -1) toolbarbox.toolbar.insert(self._area_btn, -1) toolbarbox.toolbar.insert(self._weight_btn, -1) toolbarbox.toolbar.insert(self._speed_btn, -1) toolbarbox.toolbar.insert(self._time_btn, -1) toolbarbox.toolbar.insert(self._temp_btn, -1) separator = Gtk.SeparatorToolItem() separator.set_expand(True) separator.set_draw(False) toolbarbox.toolbar.insert(separator, -1) stopbtn = StopButton(self) toolbarbox.toolbar.insert(stopbtn, -1) self.set_toolbar_box(toolbarbox) self._update_combo(convert.length) self.show_all() def _edit_copy_cb(self, button): self.label.get_text() def _update_label(self): try: spin_value = str(self.spin.get_value()) decimals = str(len(spin_value.split('.')[-1])) fmt = '%.' + decimals + 'f' new_value = locale.format(fmt, float(spin_value)) convert_value = str(self.convert()) decimals = str(len(convert_value.split('.')[-1])) fmt = '%.' + decimals + 'f' new_convert = locale.format(fmt, float(convert_value)) text = '%s ~ %s' % (new_value, new_convert) self.label.set_text(text) except KeyError: pass def _call(self, widget=None): self._update_label() self.show_all() def _update_combo(self, data): self._liststore.clear() self.dic = data keys = self.dic.keys() keys.sort() for x in keys: symbol = '' if len(self.dic[x]) == 3: symbol = self.dic[x][-1] symbol = '<sup><b>%s</b></sup>' % symbol self._liststore.append(['%s%s' % (x, symbol)]) self.combo1.set_active(-1) self.combo2.set_active(-1) self._call() self.show_all() def _get_active_text(self, combobox): active = combobox.get_active() keys = self.dic.keys() keys.sort() if active < 0: active = 0 text = keys[active] if '<sup>' in text: text = text.split('<b>')[1].split('</b>')[0] return text def _flip(self, widget): active_combo1 = self.combo1.get_active() active_combo2 = self.combo2.get_active() self.combo1.set_active(active_combo2) self.combo2.set_active(active_combo1) value = float(self.label.get_text().split(' ~ ')[1].replace(',', '.')) self.spin.set_value(value) self._call() def resize_label(self, widget, event): num_label = len(self.label.get_text()) try: size = str((60 * SCREEN_WIDTH / 100) / num_label) if not size == self.label._size: self.label.modify_font(Pango.FontDescription(size)) self.label._size = size except ZeroDivisionError: pass def convert(self): number = float(self.spin.get_text().replace(',', '.')) unit = self._get_active_text(self.combo1) to_unit = self._get_active_text(self.combo2) return convert.convert(number, unit, to_unit, self.dic)
def make_toolbar(self): def make_separator(toolbar, expand=True): separator = Gtk.SeparatorToolItem() separator.props.draw = not expand separator.set_expand(expand) toolbar.insert(separator, -1) toolbar_box = ToolbarBox() toolbar = toolbar_box.toolbar activity_button = ToolButton() activity_button.set_icon_widget(ActivityIcon(None)) toolbar.insert(activity_button, -1) toolbar.insert(Gtk.SeparatorToolItem(), -1) toolbar_file = Gtk.Toolbar() boton_toolbar_file = ToolbarButton(page=toolbar_file, icon_name='txt') toolbar.add(boton_toolbar_file) toolbar_edit = EditToolbar() button_toolbar_edit = ToolbarButton(page=toolbar_edit, icon_name='toolbar-edit') toolbar.insert(button_toolbar_edit, -1) toolbar_view = Gtk.Toolbar() boton_toolbar_view = ToolbarButton(page=toolbar_view, icon_name='toolbar-view') toolbar.insert(boton_toolbar_view, -1) self.button_undo = toolbar_edit.undo self.button_undo.props.accelerator = '<Ctrl>Z' self.button_undo.set_sensitive(False) toolbar_edit.undo.connect('clicked', self.undo) self.button_redo = toolbar_edit.redo self.button_redo.props.accelerator = '<Ctrl><Mayus>Z' self.button_redo.set_sensitive(False) self.button_redo.connect('clicked', self.redo) self.entry_search = IconEntry() item_entry = Gtk.ToolItem() self.entry_search.set_size_request(250, -1) self.entry_search.set_placeholder_text('Search...') self.entry_search.set_icon_from_name(Gtk.EntryIconPosition.SECONDARY, 'search') self.entry_search.connect('changed', self.search_text) self.entry_search.connect('activate', self.search_text, True) item_entry.add(self.entry_search) toolbar_edit.insert(item_entry, -1) self.entry_replace = IconEntry() item_entry = Gtk.ToolItem() self.entry_replace.set_size_request(250, -1) self.entry_replace.set_placeholder_text('Replace...') self.entry_replace.connect('activate', self.replace_text) item_entry.add(self.entry_replace) toolbar_edit.insert(item_entry, -1) button_new = ToolButton('new-file') button_new.props.accelerator = '<Ctrl>N' button_new.connect('clicked', lambda w: self.new_page()) button_new.set_tooltip(_('New file')) toolbar_file.insert(button_new, -1) button_open = ToolButton('fileopen') button_open.props.accelerator = '<Ctrl>O' button_open.set_tooltip(_('Open file from file system')) button_open.connect('clicked', self.file_chooser_open) toolbar_file.insert(button_open, -1) self.button_save = ToolButton('filesave') self.button_save.props.accelerator = '<Ctrl>S' self.button_save.set_tooltip(_('Save file to the file system')) self.button_save.connect('clicked', self.file_chooser_save) toolbar_file.insert(self.button_save, -1) button_save_as = ToolButton('save-as') button_save_as.props.accelerator = '<Ctrl><Mayus>S' button_save_as.set_tooltip(_('Save as file to the file system')) button_save_as.connect('clicked', self.file_chooser_save, True) toolbar_file.insert(button_save_as, -1) make_separator(toolbar_file, False) button_print = ToolButton('printer') button_print.props.accelerator = '<Ctrl>I' button_print.set_tooltip(_('Print file')) button_print.connect('clicked', self.print_file) toolbar_file.insert(button_print, -1) make_separator(toolbar_edit, False) button_clock = ToolButton('clock') button_clock.props.accelerator = '<Ctrl>T' button_clock.set_tooltip(_('Insert date and time')) button_clock.connect('clicked', self.insert_date_and_time) toolbar_edit.insert(button_clock, -1) button_wrap_none = Gtk.RadioToolButton() button_wrap_none.set_icon_name('wrap-none') button_wrap_none.connect("toggled", self.wrap_mode_changed, 'none') toolbar_view.insert(button_wrap_none, -1) button_wrap_char = Gtk.RadioToolButton.new_from_widget( button_wrap_none) button_wrap_char.set_icon_name('format-justify-fill') button_wrap_char.connect("toggled", self.wrap_mode_changed, 'char') toolbar_view.insert(button_wrap_char, -1) button_wrap_word = Gtk.RadioToolButton.new_from_widget( button_wrap_none) button_wrap_word.set_icon_name('format-justify-left') button_wrap_word.connect("toggled", self.wrap_mode_changed, 'word') toolbar_view.insert(button_wrap_word, -1) if self.conf['wrap-mode'] == 'none': button_wrap_none.set_active(True) elif self.conf['wrap-mode'] == 'char': button_wrap_none.set_active(True) elif self.conf['wrap-mode'] == 'word': button_wrap_none.set_active(True) make_separator(toolbar_view, False) item_font_size = FontSize() item_font_size.set_font_size(self.conf['font-size']) item_font_size.connect('changed', self.font_size_changed) toolbar_view.insert(item_font_size, -1) combo_font = FontComboBox(self.conf['font']) combo_font.connect('changed', self.font_changed) toolbar_view.insert(combo_font, -1) make_separator(toolbar_view, False) button_numbers = ToggleToolButton('show-numbers') button_numbers.props.accelerator = '<Ctrl><Mayus>N' button_numbers.set_tooltip(_('Show line numbers')) button_numbers.set_active(self.conf['show-line-numbers']) button_numbers.connect('toggled', self.show_numbers_changed) toolbar_view.insert(button_numbers, -1) button_right_line = ToggleToolButton('show-right-line') button_right_line.props.accelerator = '<Ctrl>L' button_right_line.set_tooltip(_('Show a line in a specific position')) button_right_line.set_active(self.conf['show-right-line']) button_right_line.connect('toggled', self.show_right_line_changed) toolbar_view.insert(button_right_line, -1) self.spinner_right_line = Spinner(self.conf['right-line-pos'], 1, 150) self.spinner_right_line.set_sensitive(self.conf['show-right-line']) self.spinner_right_line.connect('value-changed', self.right_line_pos_changed) toolbar_view.insert(self.spinner_right_line, -1) make_separator(toolbar_view, False) combo_styles = ComboStyles(self.conf['theme']) combo_styles.connect('theme-changed', self.theme_changed) toolbar_view.insert(combo_styles, -1) make_separator(toolbar, True) button_stop = ToolButton('activity-stop') button_stop.props.accelerator = '<Ctrl>Q' button_stop.connect('clicked', self._exit) toolbar.insert(button_stop, -1) toolbar_file.show_all() toolbar_edit.show_all() toolbar_view.show_all() toolbar_edit.copy.hide() toolbar_edit.paste.hide() self.set_toolbar_box(toolbar_box)
class EditActivity(activity.Activity): def checkts(self): '''Check the timestamp If someone's modified our file in an external editor, we should reload the contents ''' mtime = self.metadata[mdnames.sugartimestamp_md] etime = self.metadata[mdnames.cloudtimestamp_md] return mtime > etime def __init__(self, handle): '''We want to set up the buffer et al. early on sure there's early_setup, but that's not early enough ''' activity.Activity.__init__(self, handle) self._collab = CollabWrapper(self) self.buffer = GtkSource.Buffer() TextBufferCollaberizer(self.buffer, 'main', self._collab) self.refresh_buffer = False self.text_view = GtkSource.View.new_with_buffer(self.buffer) self.scrollwindow = Gtk.ScrolledWindow() self.scrollwindow.add(self.text_view) self.setup_toolbar() self.set_canvas(self.scrollwindow) self.scrollwindow.show_all() self._collab.setup() def fix_mimetype(self): '''We must have a mimetype. Sometimes, we don't (when we get launched newly.) This fixes that.''' if self.metadata[mdnames.mimetype_md] == '': self.metadata[mdnames.mimetype_md] = "text/plain" #we MUST have a mimetype def setup_toolbar(self): '''Setup the top toolbar. Groupthink needs some work here.''' toolbox = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbox.toolbar.insert(activity_button, 0) activity_button.show() self.set_toolbar_box(toolbox) toolbox.show() toolbar = toolbox.toolbar self.edit_toolbar = EditToolbar() edit_toolbar_button = ToolbarButton( page=self.edit_toolbar, icon_name='toolbar-edit') self.edit_toolbar.show() toolbar.insert(edit_toolbar_button, -1) edit_toolbar_button.show() self.edit_toolbar.undo.connect('clicked', self.undobutton_cb) self.edit_toolbar.redo.connect('clicked', self.redobutton_cb) self.edit_toolbar.copy.connect('clicked', self.copybutton_cb) self.edit_toolbar.paste.connect('clicked', self.pastebutton_cb) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' toolbox.toolbar.insert(stop_button, -1) stop_button.show() def initialize_display(self): '''Set up GTK and friends''' self.fix_mimetype() lang_manager = GtkSource.LanguageManager.get_default() if hasattr(lang_manager, 'list_languages'): langs = lang_manager.list_languages() else: lang_ids = lang_manager.get_language_ids() langs = [lang_manager.get_language(lang_id) \ for lang_id in lang_ids] for lang in langs: for mtype in lang.get_mime_types(): if mtype == self.metadata[mdnames.mimetype_md]: self.buffer.set_language(lang) break self.text_view.set_editable(True) self.text_view.set_cursor_visible(True) if self.metadata[mdnames.mimetype_md] == "text/plain": self.text_view.set_show_line_numbers(False) self.text_view.set_wrap_mode(Gtk.WrapMode.WORD) font = Pango.FontDescription("Bitstream Vera Sans " + str(style.FONT_SIZE)) else: if hasattr(self.buffer, 'set_highlight'): self.buffer.set_highlight(True) else: self.buffer.set_highlight_syntax(True) self.text_view.set_show_line_numbers(True) self.text_view.set_wrap_mode(Gtk.WrapMode.CHAR) self.text_view.set_insert_spaces_instead_of_tabs(True) self.text_view.set_tab_width(2) self.text_view.set_auto_indent(True) font = Pango.FontDescription("Monospace " + str(style.FONT_SIZE)) self.text_view.modify_font(font) if self.refresh_buffer: #see load_from_journal() self.buffer.begin_not_undoable_action() self.buffer.set_text(self.refresh_buffer) self.buffer.end_not_undoable_action() self.text_view.show() #Return the main widget. our parents take care of GTK stuff return self.scrollwindow def write_file(self, filename): #Also write to file: fhandle = open(filename, "w") bounds = self.buffer.get_bounds() text = self.buffer.get_text(bounds[0], bounds[1], True) fhandle.write(text) fhandle.close() self.fix_mimetype() #We can do full-text search on all Edit documents, yay self.metadata[mdnames.contents_md] = text def read_file(self, filename): '''Load the file. Duh.''' text = open(filename, "r").read() # yay hackish one-line read self.buffer.set_text(text) return None def undobutton_cb(self, button): if self.buffer.can_undo(): self.buffer.undo() def redobutton_cb(self, button): global text_buffer if self.buffer.can_redo(): self.buffer.redo() def copybutton_cb(self, button): self.buffer.copy_clipboard(Gtk.Clipboard()) def pastebutton_cb(self, button): self.buffer.paste_clipboard(Gtk.Clipboard(), None, True)
def __init__(self, handle): activity.Activity.__init__(self, handle) self._book_model = BookModel() self._actual_page = 1 # we do not have collaboration features # make the share option insensitive self.max_participants = 1 # get the language configured by the user # will be used to translate the names of the media files locale = os.environ.get('LANG', '') language_location = locale.split('.', 1)[0].lower() self._language = language_location.split('_')[0] if self._language == 'en': # we don't need translate the file names if langauage is 'en' self._language = None self._translations = None if self._language is not None: # read the translations file if available dict_path = os.path.join(activity.get_bundle_path(), 'data', "%s_dict.csv" % self._language) logging.debug('Looking for media translation dictionary %s', dict_path) if os.path.exists(dict_path): logging.debug('Loading translations') self._translations = {} with open(dict_path) as dict_file: for line in dict_file: words = line.split(',') self._translations[words[0]] = words[1].strip() toolbar_box = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, 0) self._edit_toolbar = EditToolbar() edit_toolbar_button = ToolbarButton(page=self._edit_toolbar, icon_name='toolbar-edit') toolbar_box.toolbar.insert(edit_toolbar_button, 1) set_background_button = ToolButton('set-background') set_background_button.set_tooltip(_('Set the background')) set_background_button.connect('clicked', self.__set_background_clicked_cb) toolbar_box.toolbar.insert(set_background_button, -1) insert_picture_button = ToolButton('insert-picture') insert_picture_button.set_tooltip(_('Add a picture')) insert_picture_button.connect('clicked', self.__add_image_clicked_cb) toolbar_box.toolbar.insert(insert_picture_button, -1) toolbar_box.toolbar.insert(Gtk.SeparatorToolItem(), -1) self._duplicate_page_button = ToolButton() icon = Icon(icon_name='edit-duplicate', xo_color=profile.get_color()) self._duplicate_page_button.set_icon_widget(icon) self._duplicate_page_button.set_tooltip(_('Duplicate page')) self._duplicate_page_button.connect('clicked', self.__duplicate_page_clicked_cb) toolbar_box.toolbar.insert(self._duplicate_page_button, -1) self._add_page_button = ToolButton('list-add') self._add_page_button.set_tooltip(_('Add a page')) self._add_page_button.connect('clicked', self.__add_page_clicked_cb) toolbar_box.toolbar.insert(self._add_page_button, -1) self._remove_button = ToolButton('edit-delete') self._remove_button.set_tooltip(_('Remove a image or page')) self._remove_button.connect('clicked', self.__remove_clicked_cb) toolbar_box.toolbar.insert(self._remove_button, -1) self._prev_page_button = ToolButton('go-previous-paired') self._prev_page_button.set_tooltip(_('Previous page')) self._prev_page_button.connect('clicked', self.__prev_page_clicked_cb) toolbar_box.toolbar.insert(self._prev_page_button, -1) self._next_page_button = ToolButton('go-next-paired') self._next_page_button.set_tooltip(_('Next page')) self._next_page_button.connect('clicked', self.__next_page_clicked_cb) toolbar_box.toolbar.insert(self._next_page_button, -1) self._view_list_button = ToggleToolButton('view-list') self._view_list_button.set_tooltip(_('View pages')) self._view_list_button.connect('toggled', self.__view_list_toggled_cb) toolbar_box.toolbar.insert(self._view_list_button, -1) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar_box.toolbar.insert(separator, -1) stop_button = StopButton(self) toolbar_box.toolbar.insert(stop_button, -1) # add export buttons activity_toolbar = activity_button.props.page epub_button = ToolButton('save-as-epub') epub_button.set_tooltip(_('Save as EPUB book')) epub_button.connect('clicked', self.__save_ebook_clicked_cb) activity_toolbar.insert(epub_button, -1) epub_button.show() self.set_toolbar_box(toolbar_box) toolbar_box.show_all() edition_canvas = self.create_edition_canvas() hbox = Gtk.HBox() self._preview_panel = PreviewPanel(self._book_model.get_pages()) self._preview_panel.connect('page-activated', self.__page_activated_cb) self._preview_panel.connect('page-moved', self.__page_moved_cb) hbox.pack_start(self._preview_panel, False, False, 0) hbox.pack_start(edition_canvas, True, True, 0) self.set_canvas(hbox) self.prepare_edit_toolbar() self._update_page_buttons() self.show_all() self._preview_panel.hide()
def make_toolbar(self): toolbar_box = ToolbarBox() toolbar = toolbar_box.toolbar activity_button = ToolButton() activity_button.set_icon_widget(ActivityIcon(None)) toolbar.insert(activity_button, -1) utils.make_separator(toolbar, False) edit_toolbar = EditToolbar() edit_toolbar.undo.props.visible = False edit_toolbar.redo.props.visible = False edit_toolbar.separator.props.visible = False edit_toolbar.copy.connect("clicked", self.copy_cb) edit_toolbar.copy.props.accelerator = "<Ctrl><Shift>C" edit_toolbar.paste.connect("clicked", self.paste_cb) edit_toolbar.paste.props.accelerator = "<Ctrl><Shift>V" self.copy_button = edit_toolbar.copy self.copy_button.set_sensitive(False) edit_toolbar_button = ToolbarButton(page=edit_toolbar, icon_name="toolbar-edit") toolbar_box.toolbar.insert(edit_toolbar_button, -1) view_toolbar = Gtk.Toolbar() boton_toolbar_view = ToolbarButton(page=view_toolbar, icon_name="toolbar-view") toolbar.insert(boton_toolbar_view, -1) background_color_button = ColorToolButton() background_color_button.set_color(self.background_color) background_color_button.set_title("Background color") background_color_button.connect("color-set", self.background_color_changed) view_toolbar.insert(background_color_button, -1) text_color_button = ColorToolButton() text_color_button.set_color(self.text_color) text_color_button.set_title("Text color") text_color_button.connect("color-set", self.text_color_changed) view_toolbar.insert(text_color_button, -1) item_font_size = FontSize() item_font_size.set_font_size(self.font_size, False) item_font_size.connect("changed", self.font_size_changed) view_toolbar.insert(item_font_size, -1) utils.make_separator(view_toolbar, False) button_left = Gtk.RadioToolButton() button_left.set_icon_name('go-left') button_left.set_tooltip_text("Move 'add' button to the left") view_toolbar.insert(button_left, -1) button_right = Gtk.RadioToolButton.new_from_widget(button_left) button_right.set_icon_name('go-right') button_right.set_tooltip_text("Move 'add' button to the right") view_toolbar.insert(button_right, -1) if self.button_position == Gtk.PackType.START: button_left.set_active(True) elif self.button_position == Gtk.PackType.END: button_right.set_active(True) button_left.connect("toggled", self.move_button, Gtk.PackType.START) button_right.connect("toggled", self.move_button, Gtk.PackType.END) view_toolbar.show_all() self.button_new = ToolButton("add") self.button_new.props.accelerator = "<Ctrl><Shift>T" self.button_new.connect("clicked", lambda button: self.notebook.new_terminal()) toolbar.insert(self.button_new, -1) utils.make_separator(toolbar, True) button_stop = ToolButton("activity-stop") button_stop.props.accelerator = "<Ctrl><Shift>C" button_stop.connect("clicked", self._close) toolbar.insert(button_stop, -1) toolbar.show_all() self.set_toolbar_box(toolbar_box)
class ReadEtextsActivity(activity.Activity): def __init__(self, handle): "The entry point to the Activity" global page activity.Activity.__init__(self, handle) toolbar_box = ToolbarBox() activity_button = CustomActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, 0) activity_button.show() self.edit_toolbar = EditToolbar() self.edit_toolbar.undo.props.visible = False self.edit_toolbar.redo.props.visible = False self.edit_toolbar.separator.props.visible = False self.edit_toolbar.copy.set_sensitive(False) self.edit_toolbar.copy.connect('clicked', self.edit_toolbar_copy_cb) self.edit_toolbar.paste.props.visible = False edit_toolbar_button = ToolbarButton( page=self.edit_toolbar, icon_name='toolbar-edit') self.edit_toolbar.show() toolbar_box.toolbar.insert(edit_toolbar_button, -1) edit_toolbar_button.show() view_toolbar = ViewToolbar() view_toolbar.connect('go-fullscreen', self.view_toolbar_go_fullscreen_cb) view_toolbar.zoom_in.connect('clicked', self.zoom_in_cb) view_toolbar.zoom_out.connect('clicked', self.zoom_out_cb) view_toolbar.show() view_toolbar_button = ToolbarButton( page=view_toolbar, icon_name='toolbar-view') toolbar_box.toolbar.insert(view_toolbar_button, -1) view_toolbar_button.show() self.back = ToolButton('go-previous') self.back.set_tooltip(_('Back')) self.back.props.sensitive = False self.back.connect('clicked', self.go_back_cb) toolbar_box.toolbar.insert(self.back, -1) self.back.show() self.forward = ToolButton('go-next') self.forward.set_tooltip(_('Forward')) self.forward.props.sensitive = False self.forward.connect('clicked', self.go_forward_cb) toolbar_box.toolbar.insert(self.forward, -1) self.forward.show() num_page_item = Gtk.ToolItem() self.num_page_entry = Gtk.Entry() self.num_page_entry.set_text('0') self.num_page_entry.set_alignment(1) self.num_page_entry.connect('insert-text', self.num_page_entry_insert_text_cb) self.num_page_entry.connect('activate', self.num_page_entry_activate_cb) self.num_page_entry.set_width_chars(4) num_page_item.add(self.num_page_entry) self.num_page_entry.show() toolbar_box.toolbar.insert(num_page_item, -1) num_page_item.show() total_page_item = Gtk.ToolItem() self.total_page_label = Gtk.Label() self.total_page_label.set_markup("<span foreground='#FFF'" \ " size='14000'></span>") self.total_page_label.set_text(' / 0') total_page_item.add(self.total_page_label) self.total_page_label.show() toolbar_box.toolbar.insert(total_page_item, -1) total_page_item.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar_box.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl><Shift>Q' toolbar_box.toolbar.insert(stop_button, -1) stop_button.show() self.set_toolbar_box(toolbar_box) toolbar_box.show() self.scrolled_window = Gtk.ScrolledWindow() self.scrolled_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.textview = Gtk.TextView() self.textview.set_editable(False) self.textview.set_cursor_visible(False) self.textview.set_left_margin(50) self.textview.connect("key_press_event", self.keypress_cb) self.scrolled_window.add(self.textview) self.set_canvas(self.scrolled_window) self.textview.show() self.scrolled_window.show() page = 0 self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.textview.grab_focus() self.font_desc = Pango.FontDescription("sans %d" % style.zoom(10)) self.textview.modify_font(self.font_desc) buffer = self.textview.get_buffer() self.markset_id = buffer.connect("mark-set", self.mark_set_cb) def num_page_entry_insert_text_cb(self, entry, text, length, position): if not re.match('[0-9]', text): entry.emit_stop_by_name('insert-text') return True return False def num_page_entry_activate_cb(self, entry): global page if entry.props.text: new_page = int(entry.props.text) - 1 else: new_page = 0 if new_page >= self.total_pages: new_page = self.total_pages - 1 elif new_page < 0: new_page = 0 self.current_page = new_page self.set_current_page(new_page) self.show_page(new_page) entry.props.text = str(new_page + 1) self.update_nav_buttons() page = new_page def update_nav_buttons(self): current_page = self.current_page self.back.props.sensitive = current_page > 0 self.forward.props.sensitive = \ current_page < self.total_pages - 1 self.num_page_entry.props.text = str(current_page + 1) self.total_page_label.props.label = \ ' / ' + str(self.total_pages) def set_total_pages(self, pages): self.total_pages = pages def set_current_page(self, page): self.current_page = page self.update_nav_buttons() def keypress_cb(self, widget, event): "Respond when the user presses one of the arrow keys" keyname = Gdk.keyval_name(event.keyval) print keyname if keyname == 'plus': self.font_increase() return True if keyname == 'minus': self.font_decrease() return True if keyname == 'Page_Up' : self.page_previous() return True if keyname == 'Page_Down': self.page_next() return True if keyname == 'Up' or keyname == 'KP_Up' \ or keyname == 'KP_Left': self.scroll_up() return True if keyname == 'Down' or keyname == 'KP_Down' \ or keyname == 'KP_Right': self.scroll_down() return True return False def go_back_cb(self, button): self.page_previous() def go_forward_cb(self, button): self.page_next() def page_previous(self): global page page=page - 1 if page < 0: page = 0 self.set_current_page(page) self.show_page(page) v_adjustment = self.scrolled_window.get_vadjustment() v_adjustment.set_value(v_adjustment.get_upper() - \ v_adjustment.get_page_size()) def page_next(self): global page page = page + 1 if page >= len(self.page_index): page = 0 self.set_current_page(page) self.show_page(page) v_adjustment = self.scrolled_window.get_vadjustment() v_adjustment.set_value(v_adjustment.get_lower()) def zoom_in_cb(self, button): self.font_increase() def zoom_out_cb(self, button): self.font_decrease() def font_decrease(self): font_size = self.font_desc.get_size() / 1024 font_size = font_size - 1 if font_size < 1: font_size = 1 self.font_desc.set_size(font_size * 1024) self.textview.modify_font(self.font_desc) def font_increase(self): font_size = self.font_desc.get_size() / 1024 font_size = font_size + 1 self.font_desc.set_size(font_size * 1024) self.textview.modify_font(self.font_desc) def mark_set_cb(self, textbuffer, iter, textmark): if textbuffer.get_has_selection(): self.edit_toolbar.copy.set_sensitive(True) else: self.edit_toolbar.copy.set_sensitive(False) def edit_toolbar_copy_cb(self, button): textbuffer = self.textview.get_buffer() textbuffer.copy_clipboard(self.clipboard) def view_toolbar_go_fullscreen_cb(self, view_toolbar): self.fullscreen() def scroll_down(self): v_adjustment = self.scrolled_window.get_vadjustment() if v_adjustment.get_value() == v_adjustment.get_upper() - \ v_adjustment.get_page_size(): self.page_next() return if v_adjustment.get_value() < v_adjustment.get_upper() - \ v_adjustment.get_page_size(): new_value = v_adjustment.get_value() + \ v_adjustment.step_increment if new_value > v_adjustment.get_upper() \ - v_adjustment.get_page_size(): new_value = v_adjustment.get_upper() \ - v_adjustment.get_page_size() v_adjustment.set_value(new_value) def scroll_up(self): v_adjustment = self.scrolled_window.get_vadjustment() if v_adjustment.get_value() == v_adjustment.get_lower(): self.page_previous() return if v_adjustment.get_value() > v_adjustment.get_lower(): new_value = v_adjustment.get_value() - \ v_adjustment.step_increment if new_value < v_adjustment.get_lower(): new_value = v_adjustment.get_lower() v_adjustment.set_value(new_value) def show_page(self, page_number): global PAGE_SIZE, current_word position = self.page_index[page_number] self.etext_file.seek(position) linecount = 0 label_text = '\n\n\n' textbuffer = self.textview.get_buffer() while linecount < PAGE_SIZE: line = self.etext_file.readline() label_text = label_text + unicode(line, 'iso-8859-1') linecount = linecount + 1 label_text = label_text + '\n\n\n' textbuffer.set_text(label_text) self.textview.set_buffer(textbuffer) def save_extracted_file(self, zipfile, filename): "Extract the file to a temp directory for viewing" filebytes = zipfile.read(filename) outfn = self.make_new_filename(filename) if (outfn == ''): return False f = open(os.path.join(self.get_activity_root(), 'tmp', outfn), 'w') try: f.write(filebytes) finally: f.close() def get_saved_page_number(self): global page title = self.metadata.get('title', '') if title == '' or not title[len(title)- 1].isdigit(): page = 0 else: i = len(title) - 1 newPage = '' while (title[i].isdigit() and i > 0): newPage = title[i] + newPage i = i - 1 if title[i] == 'P': page = int(newPage) - 1 else: # not a page number; maybe a volume number. page = 0 def save_page_number(self): global page title = self.metadata.get('title', '') if title == '' or not title[len(title)- 1].isdigit(): title = title + ' P' + str(page + 1) else: i = len(title) - 1 while (title[i].isdigit() and i > 0): i = i - 1 if title[i] == 'P': title = title[0:i] + 'P' + str(page + 1) else: title = title + ' P' + str(page + 1) self.metadata['title'] = title def read_file(self, filename): "Read the Etext file" global PAGE_SIZE, page if zipfile.is_zipfile(filename): self.zf = zipfile.ZipFile(filename, 'r') self.book_files = self.zf.namelist() self.save_extracted_file(self.zf, self.book_files[0]) currentFileName = os.path.join(self.get_activity_root(), \ 'tmp', self.book_files[0]) else: currentFileName = filename self.etext_file = open(currentFileName,"r") self.page_index = [ 0 ] pagecount = 0 linecount = 0 while self.etext_file: line = self.etext_file.readline() if not line: break linecount = linecount + 1 if linecount >= PAGE_SIZE: position = self.etext_file.tell() self.page_index.append(position) linecount = 0 pagecount = pagecount + 1 if filename.endswith(".zip"): os.remove(currentFileName) self.get_saved_page_number() self.show_page(page) self.set_total_pages(pagecount + 1) self.set_current_page(page) def make_new_filename(self, filename): partition_tuple = filename.rpartition('/') return partition_tuple[2] def write_file(self, filename): "Save meta data for the file." self.metadata['activity'] = self.get_bundle_id() self.save_page_number()
def __init__(self, handle): "The entry point to the Activity" global page activity.Activity.__init__(self, handle) toolbar_box = ToolbarBox() activity_button = CustomActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, 0) activity_button.show() self.edit_toolbar = EditToolbar() self.edit_toolbar.undo.props.visible = False self.edit_toolbar.redo.props.visible = False self.edit_toolbar.separator.props.visible = False self.edit_toolbar.copy.set_sensitive(False) self.edit_toolbar.copy.connect('clicked', self.edit_toolbar_copy_cb) self.edit_toolbar.paste.props.visible = False edit_toolbar_button = ToolbarButton( page=self.edit_toolbar, icon_name='toolbar-edit') self.edit_toolbar.show() toolbar_box.toolbar.insert(edit_toolbar_button, -1) edit_toolbar_button.show() view_toolbar = ViewToolbar() view_toolbar.connect('go-fullscreen', self.view_toolbar_go_fullscreen_cb) view_toolbar.zoom_in.connect('clicked', self.zoom_in_cb) view_toolbar.zoom_out.connect('clicked', self.zoom_out_cb) view_toolbar.show() view_toolbar_button = ToolbarButton( page=view_toolbar, icon_name='toolbar-view') toolbar_box.toolbar.insert(view_toolbar_button, -1) view_toolbar_button.show() self.back = ToolButton('go-previous') self.back.set_tooltip(_('Back')) self.back.props.sensitive = False self.back.connect('clicked', self.go_back_cb) toolbar_box.toolbar.insert(self.back, -1) self.back.show() self.forward = ToolButton('go-next') self.forward.set_tooltip(_('Forward')) self.forward.props.sensitive = False self.forward.connect('clicked', self.go_forward_cb) toolbar_box.toolbar.insert(self.forward, -1) self.forward.show() num_page_item = Gtk.ToolItem() self.num_page_entry = Gtk.Entry() self.num_page_entry.set_text('0') self.num_page_entry.set_alignment(1) self.num_page_entry.connect('insert-text', self.num_page_entry_insert_text_cb) self.num_page_entry.connect('activate', self.num_page_entry_activate_cb) self.num_page_entry.set_width_chars(4) num_page_item.add(self.num_page_entry) self.num_page_entry.show() toolbar_box.toolbar.insert(num_page_item, -1) num_page_item.show() total_page_item = Gtk.ToolItem() self.total_page_label = Gtk.Label() self.total_page_label.set_markup("<span foreground='#FFF'" \ " size='14000'></span>") self.total_page_label.set_text(' / 0') total_page_item.add(self.total_page_label) self.total_page_label.show() toolbar_box.toolbar.insert(total_page_item, -1) total_page_item.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar_box.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl><Shift>Q' toolbar_box.toolbar.insert(stop_button, -1) stop_button.show() self.set_toolbar_box(toolbar_box) toolbar_box.show() self.scrolled_window = Gtk.ScrolledWindow() self.scrolled_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.textview = Gtk.TextView() self.textview.set_editable(False) self.textview.set_cursor_visible(False) self.textview.set_left_margin(50) self.textview.connect("key_press_event", self.keypress_cb) self.scrolled_window.add(self.textview) self.set_canvas(self.scrolled_window) self.textview.show() self.scrolled_window.show() page = 0 self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.textview.grab_focus() self.font_desc = Pango.FontDescription("sans %d" % style.zoom(10)) self.textview.modify_font(self.font_desc) buffer = self.textview.get_buffer() self.markset_id = buffer.connect("mark-set", self.mark_set_cb)
class EditActivity(activity.Activity): def checkts(self): '''Check the timestamp If someone's modified our file in an external editor, we should reload the contents ''' mtime = self.metadata[mdnames.sugartimestamp_md] etime = self.metadata[mdnames.cloudtimestamp_md] return mtime > etime def __init__(self, handle): '''We want to set up the buffer et al. early on sure there's early_setup, but that's not early enough ''' activity.Activity.__init__(self, handle) self._collab = CollabWrapper(self) self.buffer = GtkSource.Buffer() TextBufferCollaberizer(self.buffer, 'main', self._collab) self.refresh_buffer = False self.text_view = GtkSource.View.new_with_buffer(self.buffer) self.scrollwindow = Gtk.ScrolledWindow() self.scrollwindow.add(self.text_view) self.setup_toolbar() self.set_canvas(self.scrollwindow) self.scrollwindow.show_all() self._collab.setup() def fix_mimetype(self): '''We must have a mimetype. Sometimes, we don't (when we get launched newly.) This fixes that.''' if self.metadata[mdnames.mimetype_md] == '': self.metadata[mdnames.mimetype_md] = "text/plain" #we MUST have a mimetype def setup_toolbar(self): '''Setup the top toolbar. Groupthink needs some work here.''' toolbox = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbox.toolbar.insert(activity_button, 0) activity_button.show() self.set_toolbar_box(toolbox) toolbox.show() toolbar = toolbox.toolbar self.edit_toolbar = EditToolbar() edit_toolbar_button = ToolbarButton(page=self.edit_toolbar, icon_name='toolbar-edit') self.edit_toolbar.show() toolbar.insert(edit_toolbar_button, -1) edit_toolbar_button.show() self.edit_toolbar.undo.connect('clicked', self.undobutton_cb) self.edit_toolbar.redo.connect('clicked', self.redobutton_cb) self.edit_toolbar.copy.connect('clicked', self.copybutton_cb) self.edit_toolbar.paste.connect('clicked', self.pastebutton_cb) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' toolbox.toolbar.insert(stop_button, -1) stop_button.show() def initialize_display(self): '''Set up GTK and friends''' self.fix_mimetype() lang_manager = GtkSource.LanguageManager.get_default() if hasattr(lang_manager, 'list_languages'): langs = lang_manager.list_languages() else: lang_ids = lang_manager.get_language_ids() langs = [lang_manager.get_language(lang_id) \ for lang_id in lang_ids] for lang in langs: for mtype in lang.get_mime_types(): if mtype == self.metadata[mdnames.mimetype_md]: self.buffer.set_language(lang) break self.text_view.set_editable(True) self.text_view.set_cursor_visible(True) if self.metadata[mdnames.mimetype_md] == "text/plain": self.text_view.set_show_line_numbers(False) self.text_view.set_wrap_mode(Gtk.WrapMode.WORD) font = Pango.FontDescription("Bitstream Vera Sans " + str(style.FONT_SIZE)) else: if hasattr(self.buffer, 'set_highlight'): self.buffer.set_highlight(True) else: self.buffer.set_highlight_syntax(True) self.text_view.set_show_line_numbers(True) self.text_view.set_wrap_mode(Gtk.WrapMode.CHAR) self.text_view.set_insert_spaces_instead_of_tabs(True) self.text_view.set_tab_width(2) self.text_view.set_auto_indent(True) font = Pango.FontDescription("Monospace " + str(style.FONT_SIZE)) self.text_view.modify_font(font) if self.refresh_buffer: #see load_from_journal() self.buffer.begin_not_undoable_action() self.buffer.set_text(self.refresh_buffer) self.buffer.end_not_undoable_action() self.text_view.show() #Return the main widget. our parents take care of GTK stuff return self.scrollwindow def write_file(self, filename): #Also write to file: fhandle = open(filename, "w") bounds = self.buffer.get_bounds() text = self.buffer.get_text(bounds[0], bounds[1], True) fhandle.write(text) fhandle.close() self.fix_mimetype() #We can do full-text search on all Edit documents, yay self.metadata[mdnames.contents_md] = text def read_file(self, filename): '''Load the file. Duh.''' text = open(filename, "r").read() # yay hackish one-line read self.buffer.set_text(text) return None def undobutton_cb(self, button): if self.buffer.can_undo(): self.buffer.undo() def redobutton_cb(self, button): global text_buffer if self.buffer.can_redo(): self.buffer.redo() def copybutton_cb(self, button): self.buffer.copy_clipboard(Gtk.Clipboard()) def pastebutton_cb(self, button): self.buffer.paste_clipboard(Gtk.Clipboard(), None, True)
def setup_toolbar(self): activity_button = ActivityToolbarButton(self) self.toolbar.insert(activity_button, -1) self.toolbar.insert(Gtk.SeparatorToolItem(), -1) edit_toolbar = EditToolbar() self.toolbar.insert( ToolbarButton( page=edit_toolbar, icon_name="toolbar-edit"), -1) edit_toolbar.insert(Gtk.SeparatorToolItem(), -1) self.button_bold = ToggleToolButton("format-text-bold") self.button_bold.set_tooltip(_("Bold")) self.button_bold.props.accelerator = "<Ctrl>B" self.button_bold.connect( "toggled", lambda button: self.edit.toggle_bold()) edit_toolbar.insert(self.button_bold, -1) self.button_italic = ToggleToolButton("format-text-italic") self.button_italic.set_tooltip(_("Italic")) self.button_italic.props.accelerator = "<Ctrl>I" self.button_italic.connect( "toggled", lambda button: self.edit.toggle_italic()) edit_toolbar.insert(self.button_italic, -1) self.button_underline = ToggleToolButton("format-text-underline") self.button_underline.set_tooltip(_("Underline")) self.button_underline.props.accelerator = "<Ctrl>U" self.button_underline.connect( "toggled", lambda button: self.edit.toggle_underline()) edit_toolbar.insert(self.button_underline, -1) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self.toolbar.insert(separator, -1) stop_button = StopButton(self) self.toolbar.insert(stop_button, -1) self.toolbarbox.show_all() edit_toolbar.show_all()
def __init__(self, handle): """Set up the HelloWorld activity.""" activity.Activity.__init__(self, handle) self.connect('realize', self.__realize_cb) self.max_participants = 1 # No sharing self._font_name = None self._layout = LAYOUT_RANDOM self._xo_colors = (_rgb(profile.get_color().to_string().split(',')[0]), _rgb(profile.get_color().to_string().split(',')[1])) self._color_scheme = self._xo_colors self._repeat_tags = False self._toolbox = ToolbarBox() self.activity_button = ActivityToolbarButton(self) self._toolbox.toolbar.insert(self.activity_button, 0) self.activity_button.show() self.set_toolbar_box(self._toolbox) self._toolbox.show() self.toolbar = self._toolbox.toolbar self._edit_toolbar = EditToolbar() button = ToolbarButton() button.set_page(self._edit_toolbar) button.props.icon_name = 'toolbar-edit' button.props.label = _('Edit') self._toolbox.toolbar.insert(button, -1) button.show() self._edit_toolbar.show() # self._edit_toolbar.undo.connect('clicked', self._undo_cb) # self._edit_toolbar.redo.connect('clicked', self._redo_cb) self._edit_toolbar.undo.hide() self._edit_toolbar.redo.hide() self._edit_toolbar.copy.connect('clicked', self._copy_cb) self._edit_toolbar.paste.connect('clicked', self._paste_cb) go_button = ToolButton('generate-cloud') self._toolbox.toolbar.insert(go_button, -1) go_button.set_tooltip(_('Create the cloud')) go_button.show() go_button.connect('clicked', self._go_cb) self._text_item = TextItem(self) self._toolbox.toolbar.insert(self._text_item, -1) self._text_item.show() text = self._read_metadata('text') if text is not None: self._text_item.set_text(text) self._repeat_button = ToggleToolButton('repeat-cloud') self._toolbox.toolbar.insert(self._repeat_button, -1) self._repeat_button.set_tooltip(_('Repeat words')) self._repeat_button.show() self._repeat_button.connect('clicked', self._repeat_cb) self.font_palette_content, self.font_palette_dict = \ set_palette_list( self._setup_font_palette(), 3, 7, style.SMALL_ICON_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._font_button = FontToolItem(self) self.font_palette_content.show() self._toolbox.toolbar.insert(self._font_button, -1) self._font_button.show() self.color_palette_content, self.color_palette_dict = \ set_palette_list( self._setup_color_palette(), 3, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._color_button = ColorToolItem(self) self.color_palette_content.show() self._toolbox.toolbar.insert(self._color_button, -1) self._color_button.show() self.layout_palette_content, self.layout_palette_dict = \ set_palette_list(self._setup_layout_palette(), 1, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._layout_button = LayoutToolItem(self) self.layout_palette_content.show() self._toolbox.toolbar.insert(self._layout_button, -1) self._layout_button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self._toolbox.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' self._toolbox.toolbar.insert(stop_button, -1) stop_button.show() self._show_image(os.path.join( activity.get_bundle_path(), 'WordCloud.png')) self._set_color('XO') self._set_font('Droid Sans') for layout in LAYOUT_SCHEMES.keys(): if LAYOUT_SCHEMES[layout] == self._layout: self._set_layout(layout) break
def __init__(self, handle): activity.Activity.__init__(self, handle, True) self.max_participants = 1 self.dic = {} # Canvas self._canvas = Gtk.VBox() hbox = Gtk.HBox() self._liststore = Gtk.ListStore(str) self.combo1 = Gtk.ComboBox.new_with_model_and_entry(self._liststore) cell = Gtk.CellRendererText() self.combo1.pack_start(cell, True) self.combo1.set_entry_text_column(0) self.combo1.connect('changed', self._call) flip_btn = Gtk.Button() flip_btn.connect('clicked', self._flip) flip_btn.add(Gtk.Image.new_from_file('icons/flip.svg')) self.combo2 = Gtk.ComboBox.new_with_model_and_entry(self._liststore) cell = Gtk.CellRendererText() self.combo2.pack_start(cell, True) self.combo2.set_entry_text_column(0) self.combo2.connect('changed', self._call) self.label_box = Gtk.HBox() self.adjustment = Gtk.Adjustment(1.0, 0, 10.00**10.00, 1.0, 1.0, 0) self.spin = Gtk.SpinButton() self.spin.set_adjustment(self.adjustment) self.spin.set_numeric(True) self.label = Gtk.Label() self.label._size = 12 self.label.set_selectable(True) self.label.connect('draw', self.resize_label) self.convert_btn = Gtk.Button(_('Convert')) self.convert_btn.connect('clicked', self._call) self._canvas.pack_start(hbox, False, False, 20) hbox.pack_start(self.combo1, False, True, 20) hbox.pack_start(flip_btn, True, False, 20) hbox.pack_end(self.combo2, False, True, 20) spin_box = Gtk.HBox() convert_box = Gtk.HBox() convert_box.pack_start(spin_box, True, False, 0) spin_box.pack_start(self.spin, False, False, 0) self._canvas.pack_start(convert_box, False, False, 5) self._canvas.pack_start(self.label_box, True, False, 0) self.label_box.add(self.label) spin_box.pack_start(self.convert_btn, False, False, 20) self.set_canvas(self._canvas) # Toolbar toolbarbox = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbarbox.toolbar.insert(activity_button, 0) separator = Gtk.SeparatorToolItem() separator.set_expand(False) separator.set_draw(True) toolbarbox.toolbar.insert(separator, -1) self._edit_toolbar = EditToolbar() self._edit_toolbar.undo.props.visible = False self._edit_toolbar.redo.props.visible = False self._edit_toolbar.separator.props.visible = False self._edit_toolbar.copy.set_sensitive = False self._edit_toolbar.copy.connect('clicked', self._edit_copy_cb) edit_toolbar_button = ToolbarButton(page=self._edit_toolbar, icon_name='toolbar-edit') edit_toolbar_button.props.label = _('Edit') self._edit_toolbar.show() edit_toolbar_button.show() toolbarbox.toolbar.insert(edit_toolbar_button, -1) # RadioToolButton self._length_btn = RadioToolButton() self._length_btn.connect('clicked', lambda w: self._update_combo(convert.length)) # TRANS: https://en.wikipedia.org/wiki/Length self._length_btn.set_tooltip(_('Length')) self._length_btn.props.icon_name = 'length' self._volume_btn = RadioToolButton() self._volume_btn.connect('clicked', lambda w: self._update_combo(convert.volume)) # TRANS: https://en.wikipedia.org/wiki/Volume self._volume_btn.set_tooltip(_('Volume')) self._volume_btn.props.icon_name = 'volume' self._volume_btn.props.group = self._length_btn self._area_btn = RadioToolButton() self._area_btn.connect('clicked', lambda w: self._update_combo(convert.area)) # TRANS: https://en.wikipedia.org/wiki/Area self._area_btn.set_tooltip(_('Area')) self._area_btn.props.icon_name = 'area' self._area_btn.props.group = self._length_btn self._weight_btn = RadioToolButton() self._weight_btn.connect('clicked', lambda w: self._update_combo(convert.weight)) # TRANS: https://en.wikipedia.org/wiki/Weight self._weight_btn.set_tooltip(_('Weight')) self._weight_btn.props.icon_name = 'weight' self._weight_btn.props.group = self._length_btn self._speed_btn = RadioToolButton() self._speed_btn.connect('clicked', lambda w: self._update_combo(convert.speed)) # TRANS: https://en.wikipedia.org/wiki/Speed self._speed_btn.set_tooltip(_('Speed')) self._speed_btn.props.icon_name = 'speed' self._speed_btn.props.group = self._length_btn self._time_btn = RadioToolButton() self._time_btn.connect('clicked', lambda w: self._update_combo(convert.time)) # TRANS: https://en.wikipedia.org/wiki/Time self._time_btn.set_tooltip(_('Time')) self._time_btn.props.icon_name = 'time' self._time_btn.props.group = self._length_btn self._temp_btn = RadioToolButton() self._temp_btn.connect('clicked', lambda w: self._update_combo(convert.temp)) # TRANS: https://en.wikipedia.org/wiki/Temperature self._temp_btn.set_tooltip(_('Temperature')) self._temp_btn.props.icon_name = 'temp' self._temp_btn.props.group = self._length_btn toolbarbox.toolbar.insert(self._length_btn, -1) toolbarbox.toolbar.insert(self._volume_btn, -1) toolbarbox.toolbar.insert(self._area_btn, -1) toolbarbox.toolbar.insert(self._weight_btn, -1) toolbarbox.toolbar.insert(self._speed_btn, -1) toolbarbox.toolbar.insert(self._time_btn, -1) toolbarbox.toolbar.insert(self._temp_btn, -1) separator = Gtk.SeparatorToolItem() separator.set_expand(True) separator.set_draw(False) toolbarbox.toolbar.insert(separator, -1) stopbtn = StopButton(self) toolbarbox.toolbar.insert(stopbtn, -1) self.set_toolbar_box(toolbarbox) self._update_combo(convert.length) self.show_all()
class WordCloudActivity(activity.Activity): def __init__(self, handle): """Set up the HelloWorld activity.""" activity.Activity.__init__(self, handle) self.connect('realize', self.__realize_cb) self.max_participants = 1 # No sharing self._font_name = None self._layout = LAYOUT_RANDOM self._xo_colors = (_rgb(profile.get_color().to_string().split(',')[0]), _rgb(profile.get_color().to_string().split(',')[1])) self._color_scheme = self._xo_colors self._repeat_tags = False self._toolbox = ToolbarBox() self.activity_button = ActivityToolbarButton(self) self._toolbox.toolbar.insert(self.activity_button, 0) self.activity_button.show() self.set_toolbar_box(self._toolbox) self._toolbox.show() self.toolbar = self._toolbox.toolbar self._edit_toolbar = EditToolbar() button = ToolbarButton() button.set_page(self._edit_toolbar) button.props.icon_name = 'toolbar-edit' button.props.label = _('Edit') self._toolbox.toolbar.insert(button, -1) button.show() self._edit_toolbar.show() # self._edit_toolbar.undo.connect('clicked', self._undo_cb) # self._edit_toolbar.redo.connect('clicked', self._redo_cb) self._edit_toolbar.undo.hide() self._edit_toolbar.redo.hide() self._edit_toolbar.copy.connect('clicked', self._copy_cb) self._edit_toolbar.paste.connect('clicked', self._paste_cb) go_button = ToolButton('generate-cloud') self._toolbox.toolbar.insert(go_button, -1) go_button.set_tooltip(_('Create the cloud')) go_button.show() go_button.connect('clicked', self._go_cb) self._text_item = TextItem(self) self._toolbox.toolbar.insert(self._text_item, -1) self._text_item.show() text = self._read_metadata('text') if text is not None: self._text_item.set_text(text) self._repeat_button = ToggleToolButton('repeat-cloud') self._toolbox.toolbar.insert(self._repeat_button, -1) self._repeat_button.set_tooltip(_('Repeat words')) self._repeat_button.show() self._repeat_button.connect('clicked', self._repeat_cb) self.font_palette_content, self.font_palette_dict = \ set_palette_list( self._setup_font_palette(), 3, 7, style.SMALL_ICON_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._font_button = FontToolItem(self) self.font_palette_content.show() self._toolbox.toolbar.insert(self._font_button, -1) self._font_button.show() self.color_palette_content, self.color_palette_dict = \ set_palette_list( self._setup_color_palette(), 3, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._color_button = ColorToolItem(self) self.color_palette_content.show() self._toolbox.toolbar.insert(self._color_button, -1) self._color_button.show() self.layout_palette_content, self.layout_palette_dict = \ set_palette_list(self._setup_layout_palette(), 1, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._layout_button = LayoutToolItem(self) self.layout_palette_content.show() self._toolbox.toolbar.insert(self._layout_button, -1) self._layout_button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self._toolbox.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' self._toolbox.toolbar.insert(stop_button, -1) stop_button.show() self._show_image(os.path.join( activity.get_bundle_path(), 'WordCloud.png')) self._set_color('XO') self._set_font('Droid Sans') for layout in LAYOUT_SCHEMES.keys(): if LAYOUT_SCHEMES[layout] == self._layout: self._set_layout(layout) break def _read_metadata(self, keyword, default_value=None): ''' If the keyword is found, return stored value ''' if keyword in self.metadata: return(self.metadata[keyword]) else: return(default_value) def write_file(self, file_path): self.metadata['text'] = self._text_item.get_text_from_buffer() def _show_image(self, path): if Gdk.Screen.height() < Gdk.Screen.width(): height = Gdk.Screen.height() - style.GRID_CELL_SIZE width = int(height * 4 / 3) else: width = Gdk.Screen.width() height = int(width * 3 / 4) pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( path, width, height) image = Gtk.Image() image.set_from_pixbuf(pixbuf) align = Gtk.Alignment.new(xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) align.add(image) image.show() evbox = Gtk.EventBox() evbox.set_size_request(Gdk.Screen.width(), Gdk.Screen.height() - style.GRID_CELL_SIZE) evbox.modify_bg( Gtk.StateType.NORMAL, style.COLOR_WHITE.get_gdk_color()) evbox.add(align) align.show() self.set_canvas(evbox) evbox.show() def __realize_cb(self, window): self.window_xid = window.get_window().get_xid() def _repeat_cb(self, widget): self._repeat_tags = not self._repeat_tags def _go_cb(self, widget): self._text_item.set_expanded(False) text = self._text_item.get_text_from_buffer() if len(text) > 0: self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) GObject.idle_add(self._create_image, text) def _create_image(self, text): fd = open('/tmp/cloud_data.txt', 'w') data = json_dump({'repeat': self._repeat_tags, 'layout': self._layout, 'font': self._font_name, 'colors': self._color_scheme}) fd.write(data) fd.close() fd = open('/tmp/cloud_text.txt', 'w') fd.write(text) fd.close() path = os.path.join('/tmp/cloud_large.png') try: subprocess.check_call( [os.path.join(activity.get_bundle_path(), 'wordcloud.py')]) except subprocess.CalledProcessError as e: self.get_window().set_cursor( Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)) alert = NotifyAlert(5) alert.props.title = _('WordCloud error') logging.error(e) logging.error(e.returncode) if e.returncode == 255: logging.error('STOP WORD ERROR') MESSAGE = _('All of your words are "stop words."' ' Please try adding more words.') else: logging.error('MEMORY ERROR') MESSAGE = _('Oops. There was a problem. Please try again.') alert.props.msg = MESSAGE alert.connect('response', self._remove_alert_cb) self.add_alert(alert) return self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)) self._show_image(path) dsobject = datastore.create() dsobject.metadata['title'] = _('Word Cloud') dsobject.metadata['icon-color'] = profile.get_color().to_string() dsobject.metadata['mime_type'] = 'image/png' dsobject.set_file_path(path) datastore.write(dsobject) dsobject.destroy() def _remove_alert_cb(self, alert, response_id): self.remove_alert(alert) def _undo_cb(self, butston): text_buffer = self._text_item.get_text_buffer() if text_buffer.can_undo(): text_buffer.undo() def _redo_cb(self, button): text_buffer = self._text_item.get_text_buffer() if text_buffer.can_redo(): text_buffer.redo() def _copy_cb(self, button): text_buffer = self._text_item.get_text_buffer() clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text_buffer.copy_clipboard(clipboard) def _paste_cb(self, button): text_buffer = self._text_item.get_text_buffer() clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text_buffer.paste_clipboard( clipboard, None, True) def _init_font_list(self): self._font_list = [] for f in FONT_CACHE: self._font_list.append(f['name'].encode('utf-8')) return def _setup_font_palette(self): self._init_font_list() palette_list = [] for font in sorted(self._font_list): palette_list.append({'icon': FontImage(font.replace(' ', '-')), 'selected': FontImage(font.replace(' ', '-'), selected=True), 'callback': self.__font_selected_cb, 'label': font}) return palette_list def __font_selected_cb(self, widget, event, font_name): self._font_name = font_name self._set_font(font_name) return def _set_font(self, font): for entry in self.font_palette_dict.keys(): if entry == font: self.font_palette_dict[entry]['icon'].hide() self.font_palette_dict[entry]['selected'].show() else: self.font_palette_dict[entry]['icon'].show() self.font_palette_dict[entry]['selected'].hide() def _setup_color_palette(self): palette_list = [] palette_list.append({'icon': ColorImage('xo'), 'selected': ColorImage('xo', selected=True), 'callback': self.__color_selected_cb, 'label': 'XO'}) for color in COLOR_SCHEMES.keys(): palette_list.append({'icon': ColorIcon(COLOR_SCHEMES[color]), 'selected': ColorIcon( COLOR_SCHEMES[color], selected=True), 'callback': self.__color_selected_cb, 'label': color}) palette_list.append({'icon': ColorImage('random'), 'selected': ColorImage('random', selected=True), 'callback': self.__color_selected_cb, 'label': _('random')}) return palette_list def __color_selected_cb(self, widget, event, color): self._set_color(color) if color == _('random'): self._color_scheme = None elif color == 'XO': self._color_scheme = self._xo_colors else: self._color_scheme = COLOR_SCHEMES[color] return def _set_color(self, color): for entry in self.color_palette_dict.keys(): if entry == color: self.color_palette_dict[entry]['icon'].hide() self.color_palette_dict[entry]['selected'].show() else: self.color_palette_dict[entry]['icon'].show() self.color_palette_dict[entry]['selected'].hide() def _setup_layout_palette(self): palette_list = [] for layout in LAYOUT_SCHEMES.keys(): palette_list.append({'icon': LayoutImage(layout), 'selected': LayoutImage(layout, selected=True), 'callback': self.__layout_selected_cb, 'label': layout}) return palette_list def __layout_selected_cb(self, widget, event, layout): self._set_layout(layout) self._layout = LAYOUT_SCHEMES[layout] def _set_layout(self, layout): for entry in self.layout_palette_dict.keys(): if entry == layout: self.layout_palette_dict[entry]['icon'].hide() self.layout_palette_dict[entry]['selected'].show() else: self.layout_palette_dict[entry]['icon'].show() self.layout_palette_dict[entry]['selected'].hide()
def setup_toolbar(self): activity_button = ActivityToolbarButton(self) self.toolbar.insert(activity_button, -1) self.toolbar.insert(Gtk.SeparatorToolItem(), -1) edit_toolbar = EditToolbar() self.toolbar.insert(ToolbarButton(page=edit_toolbar, icon_name="toolbar-edit"), -1) edit_toolbar.insert(Gtk.SeparatorToolItem(), -1) self.button_bold = ToggleToolButton("format-text-bold") self.button_bold.set_tooltip(_("Bold")) self.button_bold.props.accelerator = "<Ctrl>B" self.button_bold.connect("toggled", lambda button: self.edit.toggle_bold()) edit_toolbar.insert(self.button_bold, -1) self.button_italic = ToggleToolButton("format-text-italic") self.button_italic.set_tooltip(_("Italic")) self.button_italic.props.accelerator = "<Ctrl>I" self.button_italic.connect("toggled", lambda button: self.edit.toggle_italic()) edit_toolbar.insert(self.button_italic, -1) self.button_underline = ToggleToolButton("format-text-underline") self.button_underline.set_tooltip(_("Underline")) self.button_underline.props.accelerator = "<Ctrl>B" self.button_underline.connect("toggled", lambda button: self.edit.toggle_underline()) edit_toolbar.insert(self.button_underline, -1) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self.toolbar.insert(separator, -1) stop_button = StopButton(self) self.toolbar.insert(stop_button, -1) self.toolbarbox.show_all() edit_toolbar.show_all()
class WordCloudActivity(activity.Activity): def __init__(self, handle): """Set up the HelloWorld activity.""" activity.Activity.__init__(self, handle) self.connect('realize', self.__realize_cb) self.max_participants = 1 # No sharing self._font_name = None self._layout = LAYOUT_RANDOM self._xo_colors = (_rgb(profile.get_color().to_string().split(',')[0]), _rgb(profile.get_color().to_string().split(',')[1])) self._color_scheme = self._xo_colors self._repeat_tags = False self._toolbox = ToolbarBox() self.activity_button = ActivityToolbarButton(self) self._toolbox.toolbar.insert(self.activity_button, 0) self.activity_button.show() self.set_toolbar_box(self._toolbox) self._toolbox.show() self.toolbar = self._toolbox.toolbar self._edit_toolbar = EditToolbar() button = ToolbarButton() button.set_page(self._edit_toolbar) button.props.icon_name = 'toolbar-edit' button.props.label = _('Edit') self._toolbox.toolbar.insert(button, -1) button.show() self._edit_toolbar.show() self._undo_button = self._edit_toolbar.undo self._undo_button.set_sensitive(False) self._undo_button.connect('clicked', self._undo_cb) self._redo_button = self._edit_toolbar.redo self._redo_button.set_sensitive(False) self._redo_button.connect('clicked', self._redo_cb) # used to count number of times wordcloud is clicked self._count_wordcloud = 0 self._undo_clicked = False self._save_text = [] # used to save text for undo self._save_text_redo = [] # used to save text for redo self._copy_button = self._edit_toolbar.copy self._copy_button.set_sensitive(False) self._copy_button.connect('clicked', self._copy_cb) self._paste_button = self._edit_toolbar.paste self._paste_button.set_sensitive(False) self._paste_button.connect('clicked', self._paste_cb) go_button = ToolButton('generate-cloud') self._toolbox.toolbar.insert(go_button, -1) go_button.set_tooltip(_('Create the cloud')) go_button.show() go_button.connect('clicked', self._go_cb) self._text_item = TextItem(self) self._toolbox.toolbar.insert(self._text_item, -1) self._text_item.show() text = self._read_metadata('text') if text is not None: self._text_item.set_text(text) self._repeat_button = ToggleToolButton('repeat-cloud') self._toolbox.toolbar.insert(self._repeat_button, -1) self._repeat_button.set_tooltip(_('Repeat words')) self._repeat_button.show() self._repeat_button.connect('clicked', self._repeat_cb) self.font_palette_content, self.font_palette_dict = \ set_palette_list( self._setup_font_palette(), 3, 7, style.SMALL_ICON_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._font_button = FontToolItem(self) self.font_palette_content.show() self._toolbox.toolbar.insert(self._font_button, -1) self._font_button.show() self.color_palette_content, self.color_palette_dict = \ set_palette_list( self._setup_color_palette(), 3, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._color_button = ColorToolItem(self) self.color_palette_content.show() self._toolbox.toolbar.insert(self._color_button, -1) self._color_button.show() self.layout_palette_content, self.layout_palette_dict = \ set_palette_list(self._setup_layout_palette(), 1, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._layout_button = LayoutToolItem(self) self.layout_palette_content.show() self._toolbox.toolbar.insert(self._layout_button, -1) self._layout_button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self._toolbox.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' self._toolbox.toolbar.insert(stop_button, -1) stop_button.show() self._show_image( os.path.join(activity.get_bundle_path(), 'WordCloud.png')) self._set_color('XO') self._set_font('Droid Sans') for layout in list(LAYOUT_SCHEMES.keys()): if LAYOUT_SCHEMES[layout] == self._layout: self._set_layout(layout) break def _read_metadata(self, keyword, default_value=None): ''' If the keyword is found, return stored value ''' if keyword in self.metadata: return (self.metadata[keyword]) else: return (default_value) def write_file(self, file_path): self.metadata['text'] = self._text_item.get_text_from_buffer() def _show_image(self, path): if Gdk.Screen.height() < Gdk.Screen.width(): height = Gdk.Screen.height() - style.GRID_CELL_SIZE width = int(height * 4 / 3) else: width = Gdk.Screen.width() height = int(width * 3 / 4) pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(path, width, height) image = Gtk.Image() image.set_from_pixbuf(pixbuf) align = Gtk.Alignment.new(xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) align.add(image) image.show() evbox = Gtk.EventBox() evbox.set_size_request(Gdk.Screen.width(), Gdk.Screen.height() - style.GRID_CELL_SIZE) evbox.modify_bg(Gtk.StateType.NORMAL, style.COLOR_WHITE.get_gdk_color()) evbox.add(align) align.show() self.set_canvas(evbox) evbox.show() def __realize_cb(self, window): self.window_xid = window.get_window().get_xid() def _repeat_cb(self, widget): self._repeat_tags = not self._repeat_tags def _go_cb(self, widget): self._text_item.set_expanded(False) text = self._text_item.get_text_from_buffer() # count_wordcloud is used to set if undo and redo buttons are available self._count_wordcloud += 1 if self._undo_clicked: self._count_wordcloud = 1 self._save_text = [] self._undo_clicked = False self._save_text.append(text) if self._count_wordcloud > 0: self._copy_button.set_sensitive(True) if self._count_wordcloud > 1: self._undo_button.set_sensitive(True) if len(text) > 0: self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) GObject.idle_add(self._create_image, text) def _create_image(self, text): fd = open('/tmp/cloud_data.txt', 'w') data = json_dump({ 'repeat': self._repeat_tags, 'layout': self._layout, 'font': self._font_name, 'colors': self._color_scheme }) fd.write(data) fd.close() fd = open('/tmp/cloud_text.txt', 'w') fd.write(text) fd.close() path = os.path.join('/tmp/cloud_large.png') try: subprocess.check_call( [os.path.join(activity.get_bundle_path(), 'wordcloud.py')]) except subprocess.CalledProcessError as e: self.get_window().set_cursor( Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)) alert = NotifyAlert(5) alert.props.title = _('WordCloud error') logging.error(e) logging.error(e.returncode) if e.returncode == 255: logging.error('STOP WORD ERROR') MESSAGE = _('All of your words are "stop words."' ' Please try adding more words.') else: logging.error('MEMORY ERROR') MESSAGE = _('Oops. There was a problem. Please try again.') alert.props.msg = MESSAGE alert.connect('response', self._remove_alert_cb) self.add_alert(alert) return self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR)) self._show_image(path) dsobject = datastore.create() dsobject.metadata['title'] = _('Word Cloud') dsobject.metadata['icon-color'] = profile.get_color().to_string() dsobject.metadata['mime_type'] = 'image/png' dsobject.set_file_path(path) datastore.write(dsobject) dsobject.destroy() def _remove_alert_cb(self, alert, response_id): self.remove_alert(alert) def _undo_cb(self, button): ''' Undo button implementation. Can only go back one step''' text_buffer = self._save_text[self._count_wordcloud - 2] self._redo_button.set_sensitive(True) self._text_item.set_text(text_buffer) self._undo_button.set_sensitive(False) self._save_text_redo.append(self._save_text.pop()) self._undo_clicked = True def _redo_cb(self, button): ''' Redo button implementation. Disabled if there is nothing to be redone''' text_buffer = self._save_text_redo.pop() self._text_item.set_text(text_buffer) self._redo_button.set_sensitive(False) def _copy_cb(self, button): text_buffer = self._text_item.get_text_buffer() clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text_buffer.copy_clipboard(clipboard) self._paste_button.set_sensitive(True) def _paste_cb(self, button): text_buffer = self._text_item.get_text_buffer() clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text_buffer.paste_clipboard(clipboard, None, True) def _init_font_list(self): self._font_list = [] for f in FONT_CACHE: self._font_list.append(f['name']) return def _setup_font_palette(self): self._init_font_list() palette_list = [] for font in sorted(self._font_list): palette_list.append({ 'icon': FontImage(font.replace(' ', '-')), 'selected': FontImage(font.replace(' ', '-'), selected=True), 'callback': self.__font_selected_cb, 'label': font }) return palette_list def __font_selected_cb(self, widget, event, font_name): self._font_name = font_name self._set_font(font_name) return def _set_font(self, font): for entry in list(self.font_palette_dict.keys()): if entry == font: self.font_palette_dict[entry]['icon'].hide() self.font_palette_dict[entry]['selected'].show() else: self.font_palette_dict[entry]['icon'].show() self.font_palette_dict[entry]['selected'].hide() def _setup_color_palette(self): palette_list = [] palette_list.append({ 'icon': ColorImage('xo'), 'selected': ColorImage('xo', selected=True), 'callback': self.__color_selected_cb, 'label': 'XO' }) for color in list(COLOR_SCHEMES.keys()): palette_list.append({ 'icon': ColorIcon(COLOR_SCHEMES[color]), 'selected': ColorIcon(COLOR_SCHEMES[color], selected=True), 'callback': self.__color_selected_cb, 'label': color }) palette_list.append({ 'icon': ColorImage('random'), 'selected': ColorImage('random', selected=True), 'callback': self.__color_selected_cb, 'label': _('random') }) return palette_list def __color_selected_cb(self, widget, event, color): self._set_color(color) if color == _('random'): self._color_scheme = None elif color == 'XO': self._color_scheme = self._xo_colors else: self._color_scheme = COLOR_SCHEMES[color] return def _set_color(self, color): for entry in list(self.color_palette_dict.keys()): if entry == color: self.color_palette_dict[entry]['icon'].hide() self.color_palette_dict[entry]['selected'].show() else: self.color_palette_dict[entry]['icon'].show() self.color_palette_dict[entry]['selected'].hide() def _setup_layout_palette(self): palette_list = [] for layout in list(LAYOUT_SCHEMES.keys()): palette_list.append({ 'icon': LayoutImage(layout), 'selected': LayoutImage(layout, selected=True), 'callback': self.__layout_selected_cb, 'label': layout }) return palette_list def __layout_selected_cb(self, widget, event, layout): self._set_layout(layout) self._layout = LAYOUT_SCHEMES[layout] def _set_layout(self, layout): for entry in list(self.layout_palette_dict.keys()): if entry == layout: self.layout_palette_dict[entry]['icon'].hide() self.layout_palette_dict[entry]['selected'].show() else: self.layout_palette_dict[entry]['icon'].show() self.layout_palette_dict[entry]['selected'].hide()
def __init__(self, handle): super(VteActivity, self).__init__(handle) toolbarbox = ToolbarBox() self.set_toolbar_box(toolbarbox) toolbar = toolbarbox.toolbar activitybutton = ActivityToolbarButton(self) toolbar.insert(activitybutton, -1) toolbar.insert(Gtk.SeparatorToolItem(), -1) # add 'copy' icon from standard toolbar. edittoolbar = EditToolbar() edittoolbar.copy.set_tooltip(_('Copy selected text to clipboard')) edittoolbar.copy.connect('clicked', self._on_copy_clicked_cb) edittoolbar.paste.connect('clicked', self._on_paste_clicked_cb) # as long as nothing is selected, copy needs to be insensitive. edittoolbar.copy.set_sensitive(False) edittoolbar.show() self._copy_button = edittoolbar.copy editbutton = ToolbarButton(page=edittoolbar, icon_name='toolbar-edit') toolbar.insert(editbutton, -1) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(separator, -1) stopbutton = StopButton(self) toolbar.insert(stopbutton, -1) # creates vte widget self._vte = Vte.Terminal() self._vte.set_size(30,5) self._vte.set_size_request(200, 300) font = 'Monospace 10' self._vte.set_font(Pango.FontDescription(font)) self._vte.drag_dest_set(Gtk.DestDefaults.ALL, [Gtk.TargetEntry.new("text/plain", 0, TARGET_TYPE_TEXT)], Gdk.DragAction.COPY) foreground = Gdk.Color.parse('#000000')[1] background = Gdk.Color.parse('#E7E7E7')[1] try: self._vte.set_colors(foreground, background, []) except TypeError: self._vte.set_colors(Gdk.RGBA.from_color(foreground), Gdk.RGBA.from_color(background), []) self._vte.connect('selection-changed', self._on_selection_changed_cb) self._vte.connect('drag_data_received', self._on_drop_cb) # ...and its scrollbar vtebox = Gtk.HBox() vtebox.pack_start(self._vte, True, True, 0) self.set_canvas(vtebox) vtesb = Gtk.VScrollbar.new(self._vte.get_vadjustment()) vtebox.pack_start(vtesb, False, False, 0) self.show_all() # hide the buttons we don't use. edittoolbar.undo.hide() edittoolbar.redo.hide() # now start subprocess. self._vte.connect('child-exited', self.on_child_exit) self._vte.grab_focus() bundle_path = activity.get_bundle_path() # the 'sleep 1' works around a bug with the command dying before # the vte widget manages to snarf the last bits of its output argv = [ "/bin/sh", "-c", "python %s; sleep 1" % os.path.join(bundle_path, "app.py") ] args = ( Vte.PtyFlags.DEFAULT, bundle_path, argv, ["PYTHONPATH=%s/library" % bundle_path], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None ) if hasattr(self._vte, 'fork_command_full'): self._vte.fork_command_full(*args) else: self._vte.spawn_sync(*args)
def __init__(self, handle): super(VteActivity, self).__init__(handle) toolbarbox = ToolbarBox() self.set_toolbar_box(toolbarbox) toolbar = toolbarbox.toolbar activitybutton = ActivityToolbarButton(self) toolbar.insert(activitybutton, -1) toolbar.insert(Gtk.SeparatorToolItem(), -1) # add 'copy' icon from standard toolbar. edittoolbar = EditToolbar() edittoolbar.copy.set_tooltip(_('Copy selected text to clipboard')) edittoolbar.copy.connect('clicked', self._on_copy_clicked_cb) edittoolbar.paste.connect('clicked', self._on_paste_clicked_cb) # as long as nothing is selected, copy needs to be insensitive. edittoolbar.copy.set_sensitive(False) edittoolbar.show() self._copy_button = edittoolbar.copy editbutton = ToolbarButton(page=edittoolbar, icon_name='toolbar-edit') toolbar.insert(editbutton, -1) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(separator, -1) stopbutton = StopButton(self) toolbar.insert(stopbutton, -1) # creates vte widget self._vte = Vte.Terminal() self._vte.set_size(30, 5) self._vte.set_size_request(200, 300) font = 'Monospace 10' self._vte.set_font(Pango.FontDescription(font)) self._vte.drag_dest_set( Gtk.DestDefaults.ALL, [Gtk.TargetEntry.new("text/plain", 0, TARGET_TYPE_TEXT)], Gdk.DragAction.COPY) foreground = Gdk.Color.parse('#000000')[1] background = Gdk.Color.parse('#E7E7E7')[1] try: self._vte.set_colors(foreground, background, []) except TypeError: self._vte.set_colors(Gdk.RGBA.from_color(foreground), Gdk.RGBA.from_color(background), []) self._vte.connect('selection-changed', self._on_selection_changed_cb) self._vte.connect('drag_data_received', self._on_drop_cb) # ...and its scrollbar vtebox = Gtk.HBox() vtebox.pack_start(self._vte, True, True, 0) self.set_canvas(vtebox) vtesb = Gtk.VScrollbar.new(self._vte.get_vadjustment()) vtebox.pack_start(vtesb, False, False, 0) self.show_all() # hide the buttons we don't use. edittoolbar.undo.hide() edittoolbar.redo.hide() # now start subprocess. self._vte.connect('child-exited', self.on_child_exit) self._vte.grab_focus() bundle_path = activity.get_bundle_path() # the 'sleep 1' works around a bug with the command dying before # the vte widget manages to snarf the last bits of its output argv = [ "/bin/sh", "-c", "python %s; sleep 1" % os.path.join(bundle_path, "app.py") ] args = (Vte.PtyFlags.DEFAULT, bundle_path, argv, ["PYTHONPATH=%s/library" % bundle_path ], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None) if hasattr(self._vte, 'fork_command_full'): self._vte.fork_command_full(*args) else: self._vte.spawn_sync(*args)
def __init__(self, handle): """Set up the HelloWorld activity.""" activity.Activity.__init__(self, handle) self.connect('realize', self.__realize_cb) self.max_participants = 1 # No sharing self._font_name = None self._layout = LAYOUT_RANDOM self._xo_colors = (_rgb(profile.get_color().to_string().split(',')[0]), _rgb(profile.get_color().to_string().split(',')[1])) self._color_scheme = self._xo_colors self._repeat_tags = False self._toolbox = ToolbarBox() self.activity_button = ActivityToolbarButton(self) self._toolbox.toolbar.insert(self.activity_button, 0) self.activity_button.show() self.set_toolbar_box(self._toolbox) self._toolbox.show() self.toolbar = self._toolbox.toolbar self._edit_toolbar = EditToolbar() button = ToolbarButton() button.set_page(self._edit_toolbar) button.props.icon_name = 'toolbar-edit' button.props.label = _('Edit') self._toolbox.toolbar.insert(button, -1) button.show() self._edit_toolbar.show() self._undo_button = self._edit_toolbar.undo self._undo_button.set_sensitive(False) self._undo_button.connect('clicked', self._undo_cb) self._redo_button = self._edit_toolbar.redo self._redo_button.set_sensitive(False) self._redo_button.connect('clicked', self._redo_cb) # used to count number of times wordcloud is clicked self._count_wordcloud = 0 self._undo_clicked = False self._save_text = [] # used to save text for undo self._save_text_redo = [] # used to save text for redo self._copy_button = self._edit_toolbar.copy self._copy_button.set_sensitive(False) self._copy_button.connect('clicked', self._copy_cb) self._paste_button = self._edit_toolbar.paste self._paste_button.set_sensitive(False) self._paste_button.connect('clicked', self._paste_cb) go_button = ToolButton('generate-cloud') self._toolbox.toolbar.insert(go_button, -1) go_button.set_tooltip(_('Create the cloud')) go_button.show() go_button.connect('clicked', self._go_cb) self._text_item = TextItem(self) self._toolbox.toolbar.insert(self._text_item, -1) self._text_item.show() text = self._read_metadata('text') if text is not None: self._text_item.set_text(text) self._repeat_button = ToggleToolButton('repeat-cloud') self._toolbox.toolbar.insert(self._repeat_button, -1) self._repeat_button.set_tooltip(_('Repeat words')) self._repeat_button.show() self._repeat_button.connect('clicked', self._repeat_cb) self.font_palette_content, self.font_palette_dict = \ set_palette_list( self._setup_font_palette(), 3, 7, style.SMALL_ICON_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._font_button = FontToolItem(self) self.font_palette_content.show() self._toolbox.toolbar.insert(self._font_button, -1) self._font_button.show() self.color_palette_content, self.color_palette_dict = \ set_palette_list( self._setup_color_palette(), 3, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._color_button = ColorToolItem(self) self.color_palette_content.show() self._toolbox.toolbar.insert(self._color_button, -1) self._color_button.show() self.layout_palette_content, self.layout_palette_dict = \ set_palette_list(self._setup_layout_palette(), 1, 5, style.GRID_CELL_SIZE + style.DEFAULT_SPACING + style.DEFAULT_PADDING, return_dict=True) self._layout_button = LayoutToolItem(self) self.layout_palette_content.show() self._toolbox.toolbar.insert(self._layout_button, -1) self._layout_button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self._toolbox.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) stop_button.props.accelerator = '<Ctrl>q' self._toolbox.toolbar.insert(stop_button, -1) stop_button.show() self._show_image( os.path.join(activity.get_bundle_path(), 'WordCloud.png')) self._set_color('XO') self._set_font('Droid Sans') for layout in list(LAYOUT_SCHEMES.keys()): if LAYOUT_SCHEMES[layout] == self._layout: self._set_layout(layout) break