1#!/usr/bin/env python3 2# coding: utf-8 3 4# Copyright (C) 2017, 2018 Robert Griesel 5# This program is free software: you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation, either version 3 of the License, or 8# (at your option) any later version. 9# 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program. If not, see <http://www.gnu.org/licenses/> 17 18import gi 19gi.require_version('Gtk', '3.0') 20from gi.repository import Gtk 21 22 23class ContextMenuPresenter(object): 24 25 def __init__(self, context_menu, scbar_view): 26 self.context_menu = context_menu 27 self.context_menu.document_view.source_view.connect('populate-popup', self.on_populate_popup) 28 self.scbar_view = scbar_view 29 30 self.context_menu.document.source_buffer.connect('mark-set', self.on_mark_set) 31 32 undo_manager = self.context_menu.document.source_buffer.get_undo_manager() 33 undo_manager.connect('can-undo-changed', self.on_can_undo_changed) 34 undo_manager.connect('can-redo-changed', self.on_can_redo_changed) 35 36 self.on_can_undo_changed(undo_manager) 37 self.on_can_redo_changed(undo_manager) 38 39 def set_zoom_level(self, zoom_level): 40 self.scbar_view.model_button_reset_zoom.set_label("{:.0%}".format(zoom_level)) 41 42 def on_can_sync_changed(self, can_sync): 43 self.scbar_view.model_button_show_in_preview.set_sensitive(can_sync) 44 45 def on_mark_set(self, buffer, location, mark): 46 has_selection = self.context_menu.document.source_buffer.get_has_selection() 47 self.scbar_view.model_button_cut.set_sensitive(has_selection) 48 self.scbar_view.model_button_copy.set_sensitive(has_selection) 49 self.scbar_view.model_button_delete.set_sensitive(has_selection) 50 51 def on_can_undo_changed(self, undo_manager): 52 if undo_manager.can_undo(): 53 self.scbar_view.model_button_undo.set_sensitive(True) 54 else: 55 self.scbar_view.model_button_undo.set_sensitive(False) 56 57 def on_can_redo_changed(self, undo_manager): 58 if undo_manager.can_redo(): 59 self.scbar_view.model_button_redo.set_sensitive(True) 60 else: 61 self.scbar_view.model_button_redo.set_sensitive(False) 62 63 def on_populate_popup(self, view, menu): 64 for item in menu.get_children(): 65 menu.remove(item) 66 67 menu_item_cut = Gtk.MenuItem.new_with_label(_('Cut')) 68 menu_item_copy = Gtk.MenuItem.new_with_label(_('Copy')) 69 menu_item_paste = Gtk.MenuItem.new_with_label(_('Paste')) 70 menu_item_delete = Gtk.MenuItem.new_with_label(_('Delete')) 71 menu_item_select_all = Gtk.MenuItem.new_with_label(_('Select All')) 72 73 menu.append(menu_item_cut) 74 menu.append(menu_item_copy) 75 menu.append(menu_item_paste) 76 menu.append(menu_item_delete) 77 menu.append(Gtk.SeparatorMenuItem()) 78 menu.append(menu_item_select_all) 79 80 menu_item_cut.connect('activate', self.context_menu.on_cut) 81 menu_item_copy.connect('activate', self.context_menu.on_copy) 82 menu_item_paste.connect('activate', self.context_menu.on_paste) 83 menu_item_delete.connect('activate', self.context_menu.on_delete) 84 menu_item_select_all.connect('activate', self.context_menu.on_select_all) 85 86 has_selection = self.context_menu.document.source_buffer.get_has_selection() 87 menu_item_cut.set_sensitive(has_selection) 88 menu_item_copy.set_sensitive(has_selection) 89 menu_item_delete.set_sensitive(has_selection) 90 91 if self.context_menu.document.is_latex_document(): 92 menu_item_comment = Gtk.MenuItem.new_with_label(_('Toggle Comment')) 93 menu_item_comment.connect('activate', self.context_menu.on_toggle_comment) 94 menu_item_show_in_preview = Gtk.MenuItem.new_with_label(_('Show in Preview')) 95 menu_item_show_in_preview.set_sensitive(self.context_menu.can_sync) 96 menu_item_show_in_preview.connect('activate', self.context_menu.on_show_in_preview) 97 menu.append(Gtk.SeparatorMenuItem()) 98 menu.append(menu_item_comment) 99 menu.append(menu_item_show_in_preview) 100 menu.show_all() 101 102 103