class GeoTagToolbar(gtk.Toolbar): """ Contains tools to categorize observations and add them to the map. """ def __init__(self, control): """ Creates the tagging toolbar with tag button and description combo. The textfield combo suggests a default description for the chosen category. For now the following categories are present: - agriculture - animal - building - infrastructure (- photo) - text - vegetation - water Get each description as gtk.Liststore: GeoTagToolbar.description_sets[category] """ gtk.Toolbar.__init__(self) self._logger = logging.getLogger('GeoTagToolbar') self._logger.setLevel(constants.LOG_LEVEL) self.control = control self.control.create_tagstar(self) # holds default descriptions for each category self.description_sets = dict() # get and parse each description set file_ = None try: desc_path = os.path.join(constants.BUNDLE_PATH, 'geotagplugin/tag_descriptions') for description_set in get_categories(): # parse default descriptions into liststore path = os.path.join(desc_path, description_set) file_ = open(path, 'r') liststore = gtk.ListStore(gobject.TYPE_STRING) for description in file_.readlines(): if not description.startswith('#'): liststore.append([description.strip()]) #self._logger.debug('key: %s', files[i]) self.description_sets[description_set] = liststore except IOError: self._logger.error("Failed reading categories.") raise finally: if file_: file_.close() self.store_player_btn = ToolButton('kmz-export') self.store_player_btn.set_tooltip(_('Export player data.')) self.store_player_btn.connect('clicked', self.control.export) self.insert(self.store_player_btn, -1) self.store_player_btn.show() self.export_csv = ToolButton('csv-export') self.export_csv.set_tooltip(_('Export to CSV.')) self.export_csv.connect('clicked', self.control.model.export_to_csv) self.export_csv.show() self.insert(self.export_csv, -1) separator = gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.insert(separator, -1) separator.show() # add tag-toggled-category button self.tag_star_btn = ToggleToolButton('activity-start') self.tag_star_btn.set_tooltip(_('Tag something!')) self.tag_star_btn.connect('clicked', self._toggle_tag_star) self.insert(self.tag_star_btn, -1) self.tag_star_btn.show() # create textfieldcombo for default descriptions self.combobox = gtk.combo_box_entry_new_text() toolitem = gtk.ToolItem() toolitem.add(self.combobox) toolitem.set_size_request(600, 20) self.combobox.set_property('sensitive', False) self.combobox.show() self.insert(toolitem, -1) toolitem.show() def _toggle_tag_star(self, button): """ Makes controller show/remove the tag star. """ self._logger.debug('_toggle_tag_star()') if self.tag_star_btn.get_active(): self.combobox.set_property('sensitive', True) self.control.show_tag_star() else: self.combobox.set_property('sensitive', False) text = self.combobox.get_active_text() self.control.remove_tag_star(text)
class CreateToolbar(gtk.Toolbar): __gtype_name__ = 'CreateToolbar' __gsignals__ = { 'create_new_game': (SIGNAL_RUN_FIRST, None, []), 'create_load_game': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), 'create_save_game': (SIGNAL_RUN_FIRST, None, 3 * [TYPE_PYOBJECT]), 'create_equal_pairs': (SIGNAL_RUN_FIRST, None, [TYPE_PYOBJECT]), } def __init__(self, activity): gtk.Toolbar.__init__(self) self.activity = activity self._lock = True # New Button new_icon = join(dirname(__file__), 'images', 'game-new.svg') new_image = gtk.Image() new_image.set_from_file(new_icon) self._new_button = ToolButton() self._new_button.set_icon_widget(new_image) self._new_button.set_tooltip(_('New game')) self._new_button.connect('clicked', self._new_game_bt) self._add_widget(self._new_button) # Load Button load_icon = join(dirname(__file__), 'images', 'game-load.svg') load_image = gtk.Image() load_image.set_from_file(load_icon) self._load_button = ToolButton() self._load_button.set_icon_widget(load_image) self._load_button.set_tooltip(_('Load game')) self._load_button.connect('clicked', self._load_game) self._add_widget(self._load_button) # Save Button save_icon = join(dirname(__file__), 'images', 'game-save.svg') save_image = gtk.Image() save_image.set_from_file(save_icon) self._save_button = ToolButton() self._save_button.set_icon_widget(save_image) self._save_button.set_tooltip(_('Save game')) self._save_button.connect('clicked', self._save_game_bt) self._save_button.set_sensitive(False) self._add_widget(self._save_button) # Separator separator2 = gtk.SeparatorToolItem() separator2.set_draw(True) self.insert(separator2, -1) self._add_widget(gtk.Label(_('Game name') + ': ')) self.game_name_entry = gtk.Entry() self._add_widget(self.game_name_entry) self._equal_pairs = gtk.CheckButton(_('Equal pairs')) self._add_widget(self._equal_pairs) self._equal_pairs.connect('toggled', self._emit_equal_pairs) self._grouped_icon1 = join(dirname(__file__), 'images', 'equal_pairs1.svg') self._grouped_icon2 = join(dirname(__file__), 'images', 'equal_pairs2.svg') self._grouped_image1 = gtk.Image() self._grouped_image2 = gtk.Image() self._grouped_image1.set_from_file(self._grouped_icon1) self._grouped_image2.set_from_file(self._grouped_icon2) self._grouped = ToggleToolButton() self._grouped.set_icon_widget(self._grouped_image1) self._grouped.set_tooltip(_('Click for grouped game')) self._grouped.connect('toggled', self._grouped_cb) self._add_widget(self._grouped) def _add_widget(self, widget, expand=False): tool_item = gtk.ToolItem() tool_item.set_expand(expand) tool_item.add(widget) widget.show() self.insert(tool_item, -1) tool_item.show() def _game_changed_cb(self, combobox, game_name): self.game_name_entry.set_text(game_name) self.emit('create_load_game', game_name) def _load_game(self, button): chooser = ObjectChooser(_('Choose memorize game'), parent=self.activity, flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) jobject = '' try: result = chooser.run() if result == gtk.RESPONSE_ACCEPT: logging.debug('ObjectChooser: %r' % chooser.get_selected_object()) jobject = chooser.get_selected_object() if not jobject or not jobject.file_path: return finally: chooser.destroy() del chooser if jobject and jobject.file_path: self.emit('create_load_game', jobject.file_path) self._save_button.set_sensitive(False) def _new_game_bt(self, button): self.game_name_entry.set_text('') self._equal_pairs.set_active(False) self._grouped.set_active(False) self.emit('create_new_game') self._new_button.set_sensitive(False) self._save_button.set_sensitive(False) def _save_game_bt(self, button): self.emit('create_save_game', self.game_name_entry.get_text(), self._equal_pairs.get_active(), self._grouped.get_active()) self._save_button.set_sensitive(False) def _emit_equal_pairs(self, checkbutton): self.emit('create_equal_pairs', checkbutton.get_active()) self._save_button.set_sensitive(True) def _grouped_cb(self, widget): self._save_button.set_sensitive(True) if self._grouped.get_active(): self._grouped.set_icon_widget(self._grouped_image2) self._grouped_image2.show() self._grouped.set_tooltip(_('Click for ungrouped game')) else: self._grouped.set_icon_widget(self._grouped_image1) self._grouped_image1.show() self._grouped.set_tooltip(_('Click for grouped game')) def update_create_toolbar(self, widget, game_name, equal_pairs, grouped): self.game_name_entry.set_text(game_name) self._equal_pairs.set_active(equal_pairs == 'True') self._grouped.set_active(grouped == '1') def update_buttons_status(self, widget, new, save): self._new_button.set_sensitive(new) self._save_button.set_sensitive(save)