add paste menu item for alternatives

This commit is contained in:
DYefremov
2025-08-01 22:17:19 +03:00
parent fb20e82572
commit 9c5cf8cebb
3 changed files with 35 additions and 6 deletions

View File

@@ -57,6 +57,16 @@ Author: Dmitriy Yefremov
<object class="GtkMenu" id="alt_popup_menu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkMenuItem" id="alt_paste_popup_item">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Paste</property>
<signal name="activate" handler="on_alt_paste" swapped="no"/>
<accelerator key="v" signal="activate" modifiers="Primary"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="alt_remove_popup_item">
<property name="visible">True</property>
@@ -3792,6 +3802,7 @@ Author: Dmitriy Yefremov
<signal name="drag-begin" handler="on_view_drag_begin" after="yes" swapped="no"/>
<signal name="drag-data-get" handler="on_view_drag_data_get" swapped="no"/>
<signal name="drag-data-received" handler="on_alt_view_drag_data_received" swapped="no"/>
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
<signal name="key-press-event" handler="on_alt_view_key_press" swapped="no"/>
<signal name="row-activated" handler="on_alt_selection" object="alt_list_store" swapped="no"/>
<child internal-child="selection">

View File

@@ -119,6 +119,7 @@ class Application(Gtk.Application):
_FAV_ENIGMA_ELEMENTS = ("fav_insert_marker_popup_item", "fav_epg_configuration_popup_item")
_FAV_IPTV_ELEMENTS = ("fav_iptv_popup_item", "iptv_menu_button")
_ALT_ELEMENTS = ("alt_paste_popup_item",)
DATA_SAVE_PAGES = {Page.SERVICES, Page.SATELLITE}
DATA_OPEN_PAGES = {Page.SERVICES, Page.SATELLITE, Page.PICONS, Page.EPG}
@@ -152,6 +153,7 @@ class Application(Gtk.Application):
"on_reference_assign": self.on_reference_assign,
"on_fav_paste": self.on_fav_paste,
"on_bouquets_paste": self.on_bouquets_paste,
"on_alt_paste": self.on_alt_paste,
"on_rename_for_bouquet": self.on_rename_for_bouquet,
"on_set_default_name_for_bouquet": self.on_set_default_name_for_bouquet,
"on_services_add_new": self.on_services_add_new,
@@ -501,7 +503,7 @@ class Application(Gtk.Application):
self._record_image = builder.get_object("record_button_image")
# Dynamically active elements depending on the selected view.
d_elements = (self._SERVICE_ELEMENTS, self._BOUQUET_ELEMENTS, self._COMMONS_ELEMENTS, self._FAV_ELEMENTS,
self._FAV_ENIGMA_ELEMENTS, self._FAV_IPTV_ELEMENTS)
self._FAV_ENIGMA_ELEMENTS, self._FAV_IPTV_ELEMENTS, self._ALT_ELEMENTS)
self._tool_elements = {k: builder.get_object(k) for k in set(chain.from_iterable(d_elements))}
# Lock, Hide.
self._bouquet_lock_hide_box = builder.get_object("bouquet_lock_hide_box")
@@ -1381,6 +1383,8 @@ class Application(Gtk.Application):
self.fav_paste(selection)
elif target is ViewTarget.BOUQUET:
self.bouquet_paste(selection)
elif target is ViewTarget.ALT:
self.alt_paste()
self.on_view_focus(view)
def fav_paste(self, selection):
@@ -2158,6 +2162,8 @@ class Application(Gtk.Application):
elif name == "bouquets_popup_menu":
self.delete_selection(self._services_view, self._fav_view)
self.on_view_focus(self._bouquets_view)
elif name == "alt_popup_menu":
self.on_view_focus(self._alt_view)
menu.popup(None, None, None, None, event.button, event.time)
return True
@@ -3051,6 +3057,10 @@ class Application(Gtk.Application):
self._tool_elements[elem].set_sensitive(not_empty)
if elem == "bouquets_paste_popup_item":
self._tool_elements[elem].set_sensitive(not_empty and self._bouquets_buffer)
elif model_name == self.ALT_MODEL:
for elem in self._ALT_ELEMENTS:
if elem == "alt_paste_popup_item":
self._tool_elements[elem].set_sensitive(not is_service and self._rows_buffer)
else:
for elem in self._FAV_ELEMENTS:
if elem in ("paste_tool_button", "fav_paste_popup_item"):
@@ -4410,6 +4420,9 @@ class Application(Gtk.Application):
model.set(model.get_iter(paths), data)
self._fav_view.row_activated(paths[0], self._fav_view.get_column(Column.FAV_NUM))
def on_alt_paste(self, item):
self.on_paste(self._alt_view, ViewTarget.ALT)
def delete_alts(self, itrs, model, rows):
""" Deleting alternatives. """
list(map(model.remove, itrs))
@@ -4512,11 +4525,15 @@ class Application(Gtk.Application):
ctrl = event.state & MOD_MASK
if ctrl and key == KeyboardKey.V:
srv = self._services.get(self._alt_model.get_value(self._alt_model.get_iter_first(), Column.ALT_ID), None)
if not srv:
return
self.alt_paste()
self.append_alt_services(srv, tuple(self._services.get(r[Column.FAV_ID]) for r in self._rows_buffer))
def alt_paste(self):
srv = self._services.get(self._alt_model.get_value(self._alt_model.get_iter_first(), Column.ALT_ID), None)
if not srv:
return
self.append_alt_services(srv, tuple(self._services.get(r[Column.FAV_ID]) for r in self._rows_buffer))
self._rows_buffer.clear()
def append_alt_services(self, srv, srvs):
dt, it = BqServiceType.DEFAULT, BqServiceType.IPTV

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2023 Dmitriy Yefremov
# Copyright (c) 2018-2025 Dmitriy Yefremov
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -194,6 +194,7 @@ class ViewTarget(Enum):
FAV = 1
SERVICES = 2
IPTV = 3
ALT = 4
class BqGenType(Enum):