added remove all unused picons

This commit is contained in:
DYefremov
2019-03-03 12:50:40 +03:00
parent 5181b732ed
commit 75cd78277e
3 changed files with 299 additions and 240 deletions

View File

@@ -25,7 +25,8 @@ from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, LOCKED_ICON, HIDE_ICON, IPTV
from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, get_message from .dialogs import show_dialog, DialogType, get_chooser_dialog, WaitDialog, get_message
from .main_helper import insert_marker, move_items, rename, ViewTarget, set_flags, locate_in_services, \ from .main_helper import insert_marker, move_items, rename, ViewTarget, set_flags, locate_in_services, \
scroll_to, get_base_model, update_picons_data, copy_picon_reference, assign_picon, remove_picon, \ scroll_to, get_base_model, update_picons_data, copy_picon_reference, assign_picon, remove_picon, \
is_only_one_item_selected, gen_bouquets, BqGenType, get_iptv_url, append_picons, get_selection, get_model_data is_only_one_item_selected, gen_bouquets, BqGenType, get_iptv_url, append_picons, get_selection, get_model_data, \
remove_all_unused_picons
from .picons_downloader import PiconsDialog from .picons_downloader import PiconsDialog
from .satellites_dialog import show_satellites_dialog from .satellites_dialog import show_satellites_dialog
from .settings_dialog import show_settings_dialog from .settings_dialog import show_settings_dialog
@@ -122,6 +123,7 @@ class Application(Gtk.Application):
"on_assign_picon": self.on_assign_picon, "on_assign_picon": self.on_assign_picon,
"on_remove_picon": self.on_remove_picon, "on_remove_picon": self.on_remove_picon,
"on_reference_picon": self.on_reference_picon, "on_reference_picon": self.on_reference_picon,
"on_remove_unused_picons": self.on_remove_unused_picons,
"on_filter_toggled": self.on_filter_toggled, "on_filter_toggled": self.on_filter_toggled,
"on_search_toggled": self.on_search_toggled, "on_search_toggled": self.on_search_toggled,
"on_search_down": self.on_search_down, "on_search_down": self.on_search_down,
@@ -1821,6 +1823,12 @@ class Application(Gtk.Application):
""" Copying picon id to clipboard """ """ Copying picon id to clipboard """
copy_picon_reference(self.get_target_view(view), view, self._services, self._clipboard, self._main_window) copy_picon_reference(self.get_target_view(view), view, self._services, self._clipboard, self._main_window)
def on_remove_unused_picons(self, item):
if show_dialog(DialogType.QUESTION, self._main_window) == Gtk.ResponseType.CANCEL:
return
remove_all_unused_picons(self._options.get(self._profile), self._picons, self._services.values())
def get_target_view(self, view): def get_target_view(self, view):
return ViewTarget.SERVICES if Gtk.Buildable.get_name(view) == "services_tree_view" else ViewTarget.FAV return ViewTarget.SERVICES if Gtk.Buildable.get_name(view) == "services_tree_view" else ViewTarget.FAV

View File

@@ -435,15 +435,7 @@ def remove_picon(target, srv_view, fav_view, picons, options):
fav_view.get_model().foreach(remove) if target is ViewTarget.SERVICES else get_base_model( fav_view.get_model().foreach(remove) if target is ViewTarget.SERVICES else get_base_model(
srv_view.get_model()).foreach(remove) srv_view.get_model()).foreach(remove)
pions_path = options.get("picons_dir_path") remove_picons(options, picon_ids, picons)
backup_path = options.get("data_dir_path") + "backup/picons/"
os.makedirs(os.path.dirname(backup_path), exist_ok=True)
for p_id in picon_ids:
picons[p_id] = None
src = pions_path + p_id
if os.path.isfile(src):
shutil.move(src, backup_path + p_id)
def copy_picon_reference(target, view, services, clipboard, transient): def copy_picon_reference(target, view, services, clipboard, transient):
@@ -467,6 +459,23 @@ def copy_picon_reference(target, view, services, clipboard, transient):
show_dialog(DialogType.ERROR, transient, "No reference is present!") show_dialog(DialogType.ERROR, transient, "No reference is present!")
def remove_all_unused_picons(options, picons, services):
ids = {s.picon_id for s in services}
pcs = list(filter(lambda x: x not in ids, picons))
remove_picons(options, pcs, picons)
def remove_picons(options, picon_ids, picons):
pions_path = options.get("picons_dir_path")
backup_path = options.get("backup_dir_path") + "picons/"
os.makedirs(os.path.dirname(backup_path), exist_ok=True)
for p_id in picon_ids:
picons[p_id] = None
src = pions_path + p_id
if os.path.isfile(src):
shutil.move(src, backup_path + p_id)
def is_only_one_item_selected(paths, transient): def is_only_one_item_selected(paths, transient):
if len(paths) > 1: if len(paths) > 1:
show_dialog(DialogType.ERROR, transient, "Please, select only one item!") show_dialog(DialogType.ERROR, transient, "Please, select only one item!")

View File

@@ -528,6 +528,11 @@ Author: Dmitriy Yefremov
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="stock">gtk-remove</property> <property name="stock">gtk-remove</property>
</object> </object>
<object class="GtkImage" id="remove_all_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-remove</property>
</object>
<object class="GtkMenu" id="fav_popup_menu"> <object class="GtkMenu" id="fav_popup_menu">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
@@ -800,6 +805,22 @@ Author: Dmitriy Yefremov
<signal name="activate" handler="on_reference_picon" object="fav_tree_view" swapped="no"/> <signal name="activate" handler="on_reference_picon" object="fav_tree_view" swapped="no"/>
</object> </object>
</child> </child>
<child>
<object class="GtkSeparatorMenuItem" id="fav_pupup_separator_1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="fav_remove_unused_picons_popup_item">
<property name="label" translatable="yes">Remove all unused</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">remove_all_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_remove_unused_picons" swapped="no"/>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
@@ -823,6 +844,11 @@ Author: Dmitriy Yefremov
</object> </object>
</child> </child>
</object> </object>
<object class="GtkImage" id="remove_all_image_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-remove</property>
</object>
<object class="GtkPopoverMenu" id="right_header_popover_menu"> <object class="GtkPopoverMenu" id="right_header_popover_menu">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
@@ -1023,11 +1049,257 @@ Author: Dmitriy Yefremov
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="stock">gtk-select-all</property> <property name="stock">gtk-select-all</property>
</object> </object>
<object class="GtkImage" id="select_all_image_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-select-all</property>
</object>
<object class="GtkImage" id="select_all_image_3"> <object class="GtkImage" id="select_all_image_3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="stock">gtk-select-all</property> <property name="stock">gtk-select-all</property>
</object> </object>
<object class="GtkMenu" id="services_popup_menu">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="services_to_fav_end_move_popup_item">
<property name="label">gtk-goto-last</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_to_fav_end_copy" object="services_tree_view" swapped="no"/>
<accelerator key="BackSpace" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_to_fav_move_popup_item">
<property name="label">gtk-goto-first</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_to_fav_copy" object="services_tree_view" swapped="no"/>
<accelerator key="Insert" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_popup_item">
<property name="label" translatable="yes">Create bouquet</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">new_image</property>
<property name="use_stock">False</property>
<child type="submenu">
<object class="GtkMenu" id="services_bouquet_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_current_sat_popup_item">
<property name="label" translatable="yes">For current satellite</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">save_as_image_2</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_current_satellite" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_current_package_popup_item">
<property name="label" translatable="yes">For current package</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">save_as_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_current_package" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_current_type_popup_item">
<property name="label" translatable="yes">For current type</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">save_as_image_3</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_current_type" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_bouquet_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_each_sat_popup_item">
<property name="label" translatable="yes">For each satellite</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">select_all_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_each_satellite" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_each_package_popup_item">
<property name="label" translatable="yes">For each package</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">select_all_image_2</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_each_package" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_each_type_popup_item">
<property name="label" translatable="yes">For each type</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">select_all_image_3</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_each_type" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_copy_popup_item">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_services_copy" object="services_tree_view" swapped="no"/>
<accelerator key="c" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_edit_popup_item">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_service_edit" object="services_tree_view" swapped="no"/>
<accelerator key="e" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_add_new_popup_item">
<property name="label">gtk-new</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_services_add_new" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_3">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_picon_popup_item">
<property name="label" translatable="yes">Picon</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">insert_image_2</property>
<property name="use_stock">False</property>
<child type="submenu">
<object class="GtkMenu" id="services_picon_popoup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="services_assign_picon_popup_item">
<property name="label" translatable="yes">Assign</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">insert_link_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_assign_picon" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_remove_picon_popup_item">
<property name="label" translatable="yes">Remove</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">clear_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_remove_picon" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_4">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_reference_picon_popup_item">
<property name="label" translatable="yes">Copy reference</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">copy_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_reference_picon" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_5">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_remove_unused_picons_popup_item">
<property name="label" translatable="yes">Remove all unused</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">remove_all_image_2</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_remove_unused_picons" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_6">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_remove_popup_item">
<property name="label">gtk-remove</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_delete" object="services_tree_view" swapped="no"/>
<accelerator key="Delete" signal="activate"/>
</object>
</child>
</object>
<object class="GtkListStore" id="services_list_store"> <object class="GtkListStore" id="services_list_store">
<columns> <columns>
<!-- column-name cas --> <!-- column-name cas -->
@@ -2943,234 +3215,4 @@ Author: Dmitriy Yefremov
</object> </object>
</child> </child>
</object> </object>
<object class="GtkImage" id="slect_all_image_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-select-all</property>
</object>
<object class="GtkMenu" id="services_popup_menu">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="services_to_fav_end_move_popup_item">
<property name="label">gtk-goto-last</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_to_fav_end_copy" object="services_tree_view" swapped="no"/>
<accelerator key="BackSpace" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_to_fav_move_popup_item">
<property name="label">gtk-goto-first</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_to_fav_copy" object="services_tree_view" swapped="no"/>
<accelerator key="Insert" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_popup_item">
<property name="label" translatable="yes">Create bouquet</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">new_image</property>
<property name="use_stock">False</property>
<child type="submenu">
<object class="GtkMenu" id="services_bouquet_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_current_sat_popup_item">
<property name="label" translatable="yes">For current satellite</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">save_as_image_2</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_current_satellite" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_current_package_popup_item">
<property name="label" translatable="yes">For current package</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">save_as_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_current_package" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_current_type_popup_item">
<property name="label" translatable="yes">For current type</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">save_as_image_3</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_current_type" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_bouquet_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_each_sat_popup_item">
<property name="label" translatable="yes">For each satellite</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">select_all_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_each_satellite" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_each_package_popup_item">
<property name="label" translatable="yes">For each package</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">slect_all_image_2</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_each_package" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_create_bouquet_for_each_type_popup_item">
<property name="label" translatable="yes">For each type</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">select_all_image_3</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_create_bouquet_for_each_type" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_2">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_copy_popup_item">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_services_copy" object="services_tree_view" swapped="no"/>
<accelerator key="c" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_edit_popup_item">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_service_edit" object="services_tree_view" swapped="no"/>
<accelerator key="e" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_add_new_popup_item">
<property name="label">gtk-new</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_services_add_new" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_3">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_picon_popup_item">
<property name="label" translatable="yes">Picon</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">insert_image_2</property>
<property name="use_stock">False</property>
<child type="submenu">
<object class="GtkMenu" id="services_picon_popoup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="services_assign_picon_popup_item">
<property name="label" translatable="yes">Assign</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">insert_link_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_assign_picon" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_remove_picon_popup_item">
<property name="label" translatable="yes">Remove</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">clear_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_remove_picon" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_4">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_reference_picon_popup_item">
<property name="label" translatable="yes">Copy reference</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">copy_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_reference_picon" object="services_tree_view" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="services_separatormenuitem_5">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_remove_popup_item">
<property name="label">gtk-remove</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_delete" object="services_tree_view" swapped="no"/>
<accelerator key="Delete" signal="activate"/>
</object>
</child>
</object>
</interface> </interface>