Blame plugins/multiedit/multiedit/windowactivatable.py

Packit 6978fb
# -*- coding: utf-8 -*-
Packit 6978fb
#
Packit 6978fb
#  windowactivatable.py - Multi Edit
Packit 6978fb
#
Packit 6978fb
#  Copyright (C) 2014 - Jesse van den Kieboom
Packit 6978fb
#
Packit 6978fb
#  This program is free software; you can redistribute it and/or modify
Packit 6978fb
#  it under the terms of the GNU General Public License as published by
Packit 6978fb
#  the Free Software Foundation; either version 2 of the License, or
Packit 6978fb
#  (at your option) any later version.
Packit 6978fb
#
Packit 6978fb
#  This program is distributed in the hope that it will be useful,
Packit 6978fb
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6978fb
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 6978fb
#  GNU General Public License for more details.
Packit 6978fb
#
Packit 6978fb
#  You should have received a copy of the GNU General Public License
Packit 6978fb
#  along with this program; if not, write to the Free Software
Packit 6978fb
#  Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit 6978fb
#  Boston, MA 02110-1301, USA.
Packit 6978fb
Packit 6978fb
from gi.repository import GLib, GObject, Gio, Gedit
Packit 6978fb
Packit 6978fb
from .viewactivatable import MultiEditViewActivatable
Packit 6978fb
Packit 6978fb
from gpdefs import *
Packit 6978fb
Packit 6978fb
Packit 6978fb
class MultiEditWindowActivatable(GObject.Object, Gedit.WindowActivatable):
Packit 6978fb
Packit 6978fb
    window = GObject.Property(type=Gedit.Window)
Packit 6978fb
Packit 6978fb
    def do_activate(self):
Packit 6978fb
        action = Gio.SimpleAction.new_stateful("multiedit", None, GLib.Variant.new_boolean(False))
Packit 6978fb
        action.connect('activate', self.activate_toggle)
Packit 6978fb
        action.connect('change-state', self.multi_edit_mode)
Packit 6978fb
        self.window.add_action(action)
Packit 6978fb
Packit 6978fb
        self.window.multiedit_window_activatable = self
Packit 6978fb
Packit 6978fb
    def do_deactivate(self):
Packit 6978fb
        self.window.remove_action("multiedit")
Packit 6978fb
        delattr(self.window, 'multiedit_window_activatable')
Packit 6978fb
Packit 6978fb
    def do_update_state(self):
Packit 6978fb
        view = self.get_view_activatable(self.window.get_active_view())
Packit 6978fb
        self.get_action().set_state(GLib.Variant.new_boolean(view != None and view.enabled()))
Packit 6978fb
Packit 6978fb
    def get_view_activatable(self, view):
Packit 6978fb
        if not hasattr(view, "multiedit_view_activatable"):
Packit 6978fb
            return None
Packit 6978fb
        return view.multiedit_view_activatable
Packit 6978fb
Packit 6978fb
    def get_action(self):
Packit 6978fb
        return self.window.lookup_action("multiedit")
Packit 6978fb
Packit 6978fb
    def on_multi_edit_toggled(self, viewactivatable):
Packit 6978fb
        if viewactivatable.view == self.window.get_active_view():
Packit 6978fb
            self.get_action().set_state(GLib.Variant.new_boolean(viewactivatable.enabled()))
Packit 6978fb
Packit 6978fb
    def activate_toggle(self, action, parameter):
Packit 6978fb
        state = action.get_state()
Packit 6978fb
        action.change_state(GLib.Variant.new_boolean(not state.get_boolean()))
Packit 6978fb
Packit 6978fb
    def multi_edit_mode(self, action, state):
Packit 6978fb
        view = self.window.get_active_view()
Packit 6978fb
        helper = self.get_view_activatable(view)
Packit 6978fb
Packit 6978fb
        active = state.get_boolean()
Packit 6978fb
Packit 6978fb
        if helper != None:
Packit 6978fb
            helper.toggle_multi_edit(active)
Packit 6978fb
Packit 6978fb
        action.set_state(GLib.Variant.new_boolean(active))
Packit 6978fb
Packit 6978fb
# ex:ts=4:et: