added popup menus for epg dialog

This commit is contained in:
DYefremov
2019-04-24 21:53:01 +03:00
parent 878520b7f9
commit 6de0bc4201
2 changed files with 123 additions and 6 deletions

View File

@@ -59,6 +59,78 @@ Author: Dmitriy Yefremov
<column type="GdkRGBA"/>
</columns>
</object>
<object class="GtkImage" id="copy_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-copy</property>
</object>
<object class="GtkMenu" id="source_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="source_copy_ref_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_copy_ref" swapped="no"/>
<accelerator key="c" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
</object>
<object class="GtkImage" id="insert_link_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">insert-link</property>
</object>
<object class="GtkImage" id="list_config_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property>
</object>
<object class="GtkMenu" id="bouquet_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem" id="bouquet_assign_ref_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_ref" swapped="no"/>
<accelerator key="v" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="bouquet_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_edit" swapped="no"/>
<accelerator key="e" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="bouquet_pupup_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="bouquet_list_config_popup_item">
<property name="label" translatable="yes">List configuration</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="image">list_config_image</property>
<property name="use_stock">False</property>
<signal name="activate" handler="on_list_configuration" swapped="no"/>
</object>
</child>
</object>
<object class="GtkListStore" id="services_list_store">
<columns>
<!-- column-name service -->
@@ -296,6 +368,7 @@ Author: Dmitriy Yefremov
<property name="model">service_sort_model</property>
<property name="search_column">0</property>
<property name="enable_grid_lines">both</property>
<signal name="button-press-event" handler="on_popup_menu" object="source_popup_menu" swapped="no"/>
<signal name="drag-begin" handler="on_drag_begin" swapped="no"/>
<signal name="drag-data-get" handler="on_drag_data_get" swapped="no"/>
<child internal-child="selection">
@@ -388,6 +461,7 @@ Author: Dmitriy Yefremov
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_bouquet_popup_menu" object="bouquet_popup_menu" swapped="no"/>
<signal name="drag-data-received" handler="on_drag_data_received" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection">

View File

@@ -2,8 +2,10 @@ from enum import Enum
from app.commons import run_idle
from app.eparser.ecommons import BouquetService, BqServiceType
from app.properties import Profile
from app.tools.epg import EPG, ChannelsParser
from app.ui.dialogs import get_message
from app.ui.dialogs import get_message, Action
from app.ui.iptv import IptvListConfigurationDialog, IptvDialog
from .main_helper import on_popup_menu
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN, Column, EPG_ICON
@@ -25,6 +27,11 @@ class EpgDialog:
"on_filter_changed": self.on_filter_changed,
"on_info_bar_close": self.on_info_bar_close,
"on_popup_menu": on_popup_menu,
"on_bouquet_popup_menu": self.on_bouquet_popup_menu,
"on_copy_ref": self.on_copy_ref,
"on_assign_ref": self.on_assign_ref,
"on_edit": self.on_edit,
"on_list_configuration": self.on_list_configuration,
"on_drag_begin": self.on_drag_begin,
"on_drag_data_get": self.on_drag_data_get,
"on_drag_data_received": self.on_drag_data_received,
@@ -34,6 +41,7 @@ class EpgDialog:
self._ex_fav_model = fav_model
self._options = options
self._bouquet = bouquet
self._current_ref = []
self._refs_source = RefsSource.XML
builder = Gtk.Builder()
@@ -49,6 +57,7 @@ class EpgDialog:
self._services_model = builder.get_object("services_list_store")
self._info_bar = builder.get_object("info_bar")
self._message_label = builder.get_object("info_bar_message_label")
self._assign_ref_popup_item = builder.get_object("bouquet_assign_ref_popup_item")
# Filter
self._filter_bar = builder.get_object("filter_bar")
self._filter_entry = builder.get_object("filter_entry")
@@ -169,13 +178,37 @@ class EpgDialog:
def on_info_bar_close(self, bar=None, resp=None):
self._info_bar.set_visible(False)
@run_idle
def show_info_message(self, text, message_type):
self._info_bar.set_visible(True)
self._info_bar.set_message_type(message_type)
self._message_label.set_text(text)
def on_copy_ref(self, item):
model, paths = self._source_view.get_selection().get_selected_rows()
self._current_ref.clear()
self._current_ref.append(model[paths][1])
def on_assign_ref(self, item):
if self._current_ref:
model, paths = self._bouquet_view.get_selection().get_selected_rows()
self.assign_data(model[paths], self._current_ref.pop())
def on_edit(self, item):
response = IptvDialog(self._dialog,
self._bouquet_view,
self._services,
self._bouquet,
Profile.ENIGMA_2,
Action.EDIT).show()
if response != Gtk.ResponseType.CANCEL:
pass
def on_list_configuration(self, item):
iptv_rows = list(filter(lambda r: r[Column.FAV_TYPE] == BqServiceType.IPTV.value, self._bouquet_model))
IptvListConfigurationDialog(self._dialog,
self._services,
iptv_rows,
self._bouquet,
self._bouquet_model,
Profile.ENIGMA_2).show()
# ***************** Drag-and-drop *********************#
def init_drag_and_drop(self):
""" Enable drag-and-drop """
target = []
@@ -206,6 +239,16 @@ class EpgDialog:
if self._options:
self._options["epg_tool_window_size"] = window.get_size()
@run_idle
def show_info_message(self, text, message_type):
self._info_bar.set_visible(True)
self._info_bar.set_message_type(message_type)
self._message_label.set_text(text)
def on_bouquet_popup_menu(self, menu, event):
self._assign_ref_popup_item.set_sensitive(self._current_ref)
on_popup_menu(menu, event)
if __name__ == "__main__":
pass