1# Copyright (c) 2017-2021 Cedric Bellegarde <cedric.bellegarde@adishatz.org> 2# This program is free software: you can redistribute it and/or modify 3# it under the terms of the GNU General Public License as published by 4# the Free Software Foundation, either version 3 of the License, or 5# (at your option) any later version. 6# This program is distributed in the hope that it will be useful, 7# but WITHOUT ANY WARRANTY; without even the implied warranty of 8# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9# GNU General Public License for more details. 10# You should have received a copy of the GNU General Public License 11# along with this program. If not, see <http://www.gnu.org/licenses/>. 12 13from gi.repository import Gtk, Pango 14 15from eolie.define import App 16 17 18class ModifyUADialog: 19 """ 20 Modify user agent for uri 21 """ 22 23 def __init__(self, uri, window): 24 """ 25 Init widget 26 @param uri as str 27 @param window as Gtk.Window 28 """ 29 self.__uri = uri 30 self.__window = window 31 builder = Gtk.Builder() 32 builder.add_from_resource("/org/gnome/Eolie/DialogModifyUA.ui") 33 builder.connect_signals(self) 34 self.__dialog = builder.get_object("dialog") 35 self.__dialog.set_transient_for(window) 36 headerbar = builder.get_object("headerbar") 37 view = builder.get_object("view") 38 self.__model = builder.get_object("model") 39 self.__selection = builder.get_object("selection") 40 self.__entry = builder.get_object("entry") 41 self.__entry.connect("changed", self.__on_entry_changed) 42 self.__dialog.set_titlebar(headerbar) 43 renderer0 = Gtk.CellRendererText() 44 renderer0.set_property("ellipsize-set", True) 45 renderer0.set_property("ellipsize", Pango.EllipsizeMode.END) 46 column = Gtk.TreeViewColumn("") 47 column.set_expand(True) 48 column.pack_start(renderer0, True) 49 column.add_attribute(renderer0, "text", 0) 50 view.append_column(column) 51 user_agent = App().websettings.get("user_agent", self.__uri) 52 if user_agent is not None: 53 self.__select_matching(user_agent) 54 self.__entry.set_text(user_agent) 55 56 def run(self): 57 """ 58 Run dialog 59 """ 60 self.__dialog.run() 61 self.__dialog.destroy() 62 63####################### 64# PROTECTED # 65####################### 66 def _on_selection_changed(self, selection): 67 """ 68 Update entry 69 @param selection as Gtk.TreeSelection 70 """ 71 (model, items) = selection.get_selected_rows() 72 if items: 73 value = model[items[0]][1] 74 # Can't set a null value in glade :-/ 75 if value == "None": 76 value = "" 77 self.__entry.disconnect_by_func(self.__on_entry_changed) 78 self.__entry.set_text(value) 79 self.__entry.connect("changed", self.__on_entry_changed) 80 81 def _on_dialog_response(self, dialog, response_id): 82 """ 83 Save user agent 84 @param dialog as Gtk.Dialog 85 @param response_id as int 86 """ 87 if response_id != Gtk.ResponseType.DELETE_EVENT: 88 user_agent = self.__entry.get_text() 89 App().websettings.set("user_agent", self.__uri, user_agent) 90 91####################### 92# PRIVATE # 93####################### 94 def __select_matching(self, user_agent): 95 """ 96 Select matching element 97 @param user_agent as str 98 """ 99 for item in self.__model: 100 value = "" if item[1] == "None" else item[1] 101 if value == user_agent: 102 self.__selection.select_iter(item.iter) 103 return 104 self.__selection.unselect_all() 105 106 def __on_entry_changed(self, entry): 107 """ 108 Update matching 109 @param entry as Gtk.Entry 110 """ 111 self.__select_matching(entry.get_text()) 112