mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-01-28 02:10:08 +01:00
added sorting of bouquet services
This commit is contained in:
@@ -28,7 +28,7 @@ from .iptv import IptvDialog, SearchUnavailableDialog, IptvListConfigurationDial
|
||||
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_picons,
|
||||
remove_picon, is_only_one_item_selected, gen_bouquets, BqGenType, get_iptv_url, append_picons,
|
||||
get_selection, get_model_data, remove_all_unused_picons, get_picon_pixbuf)
|
||||
get_selection, get_model_data, remove_all_unused_picons, get_picon_pixbuf, get_base_itrs)
|
||||
from .picons_manager import PiconsDialog
|
||||
from .satellites_dialog import show_satellites_dialog
|
||||
from .search import SearchProvider
|
||||
@@ -104,6 +104,7 @@ class Application(Gtk.Application):
|
||||
"on_delete": self.on_delete,
|
||||
"on_to_fav_copy": self.on_to_fav_copy,
|
||||
"on_to_fav_end_copy": self.on_to_fav_end_copy,
|
||||
"on_fav_sort": self.on_fav_sort,
|
||||
"on_fav_view_query_tooltip": self.on_fav_view_query_tooltip,
|
||||
"on_services_view_query_tooltip": self.on_services_view_query_tooltip,
|
||||
"on_view_drag_begin": self.on_view_drag_begin,
|
||||
@@ -706,8 +707,7 @@ class Application(Gtk.Application):
|
||||
|
||||
def delete_services(self, itrs, model, rows):
|
||||
""" Deleting services """
|
||||
for index, s_itr in enumerate([self._services_model_filter.convert_iter_to_child_iter(
|
||||
model.convert_iter_to_child_iter(itr)) for itr in itrs]):
|
||||
for index, s_itr in enumerate(get_base_itrs(itrs, model)):
|
||||
self._services_model.remove(s_itr)
|
||||
if index % self.DEL_FACTOR == 0:
|
||||
yield True
|
||||
@@ -856,6 +856,72 @@ class Application(Gtk.Application):
|
||||
for row in self._fav_model:
|
||||
fav_bouquet.append(row[Column.FAV_ID])
|
||||
|
||||
# ** Bouquet details sort [sorting model not used!] ** #
|
||||
|
||||
def on_fav_sort(self, column):
|
||||
""" Bouquet details (FAV) list sorting by clicking on column header. """
|
||||
if not len(self._fav_model):
|
||||
return
|
||||
|
||||
bq = self._bouquets.get(self._bq_selected, None)
|
||||
if not bq:
|
||||
return
|
||||
|
||||
msg = "Are you sure you want to change the order\n of services in this bouquet?"
|
||||
if show_dialog(DialogType.QUESTION, self._main_window, msg) != Gtk.ResponseType.OK:
|
||||
return
|
||||
|
||||
c_num = Column.FAV_NUM
|
||||
c_name = column.get_name()
|
||||
|
||||
if c_name == "fav_service_column":
|
||||
c_num = Column.FAV_SERVICE
|
||||
elif c_name == "fav_type_column":
|
||||
c_num = Column.FAV_TYPE
|
||||
elif c_name == "fav_pos_column":
|
||||
c_num = Column.FAV_POS
|
||||
|
||||
order = column.get_sort_order()
|
||||
if not column.get_sort_indicator():
|
||||
self.reset_view_sort_indication(self._fav_view)
|
||||
column.set_sort_indicator(True)
|
||||
else:
|
||||
order = not order
|
||||
column.set_sort_order(not column.get_sort_order())
|
||||
|
||||
model, paths = self._fav_view.get_selection().get_selected_rows()
|
||||
|
||||
if len(paths) < 2 and len(bq) > self.FAV_FACTOR or len(paths) > self.FAV_FACTOR:
|
||||
self._wait_dialog.show(get_message("Sorting data..."))
|
||||
GLib.idle_add(self.sort_fav, c_num, bq, paths, order, 0 if c_num == Column.FAV_NUM else "")
|
||||
|
||||
@run_idle
|
||||
def sort_fav(self, c_num, bq, paths, rev=False, nv=""):
|
||||
""" Sorting function for the bouquet details list.
|
||||
|
||||
@param c_num: column number
|
||||
@param bq: current bouquet
|
||||
@param paths: selected paths
|
||||
@param rev: sort reverse.
|
||||
@param nv: default value for the None items.
|
||||
If the number of selected items is more than one, then only these items will be sorted!
|
||||
"""
|
||||
rows = self._fav_model if len(paths) < 2 else [self._fav_model[p] for p in paths]
|
||||
index = int(str(rows[0].path))
|
||||
|
||||
for s_row, row in zip(sorted(map(lambda r: r[:], rows), key=lambda r: r[c_num] or nv, reverse=rev), rows):
|
||||
self._fav_model.set_row(row.iter, s_row)
|
||||
bq[index] = s_row[Column.FAV_ID]
|
||||
index += 1
|
||||
|
||||
self._wait_dialog.hide()
|
||||
self._fav_view.grab_focus()
|
||||
|
||||
def reset_view_sort_indication(self, view):
|
||||
for column in view.get_columns():
|
||||
column.set_sort_indicator(False)
|
||||
column.set_sort_order(Gtk.SortType.ASCENDING)
|
||||
|
||||
# ********************* Hints *************************#
|
||||
|
||||
def on_fav_view_query_tooltip(self, view, x, y, keyboard_mode, tooltip):
|
||||
@@ -1027,7 +1093,7 @@ class Application(Gtk.Application):
|
||||
ext_model = self._services_view.get_model()
|
||||
ext_itrs = [ext_model.get_iter_from_string(itr) for itr in itrs]
|
||||
ext_rows = [ext_model[ext_itr][:] for ext_itr in ext_itrs]
|
||||
|
||||
|
||||
for ext_row in ext_rows:
|
||||
dest_index += 1
|
||||
fav_id = ext_row[Column.SRV_FAV_ID]
|
||||
@@ -1428,6 +1494,7 @@ class Application(Gtk.Application):
|
||||
self._cas_label.set_text(",".join(map(str, sorted(set(CAS.get(v[:4].upper(), def_val) for v in cvs)))))
|
||||
|
||||
def on_bouquets_selection(self, model, path, column):
|
||||
self.reset_view_sort_indication(self._fav_view)
|
||||
self._current_bq_name = model[path][0] if len(path) > 1 else None
|
||||
self._bq_name_label.set_text(self._current_bq_name if self._current_bq_name else "")
|
||||
|
||||
@@ -1458,7 +1525,7 @@ class Application(Gtk.Application):
|
||||
|
||||
factor = self.FAV_FACTOR * 20
|
||||
if len(services) > factor or len(self._fav_model) > factor:
|
||||
GLib.idle_add(self._bouquets_view.set_sensitive, False)
|
||||
self._bouquets_view.set_sensitive(False)
|
||||
|
||||
self._fav_model.clear()
|
||||
yield True
|
||||
|
||||
@@ -714,7 +714,7 @@ Author: Dmitriy Yefremov
|
||||
<object class="GtkTreeModelFilter" id="services_model_filter">
|
||||
<property name="child_model">services_list_store</property>
|
||||
</object>
|
||||
<object class="GtkTreeModelSort" id="services_model_tree_model_sort">
|
||||
<object class="GtkTreeModelSort" id="services_model_sort">
|
||||
<property name="model">services_model_filter</property>
|
||||
</object>
|
||||
<object class="GtkMenu" id="services_popup_menu">
|
||||
@@ -1776,7 +1776,7 @@ Author: Dmitriy Yefremov
|
||||
<object class="GtkTreeView" id="services_tree_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">services_model_tree_model_sort</property>
|
||||
<property name="model">services_model_sort</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="search_column">3</property>
|
||||
<property name="rubber_banding">True</property>
|
||||
@@ -2346,11 +2346,13 @@ Author: Dmitriy Yefremov
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="num_column">
|
||||
<object class="GtkTreeViewColumn" id="fav_num_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="min_width">25</property>
|
||||
<property name="title" translatable="yes">Num</property>
|
||||
<property name="clickable">True</property>
|
||||
<property name="alignment">0.5</property>
|
||||
<signal name="clicked" handler="on_fav_sort" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="num_cellrenderertext">
|
||||
<property name="xalign">0.20000000298023224</property>
|
||||
@@ -2371,7 +2373,9 @@ Author: Dmitriy Yefremov
|
||||
<property name="min_width">50</property>
|
||||
<property name="title" translatable="yes">Service</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="clickable">True</property>
|
||||
<property name="alignment">0.5</property>
|
||||
<signal name="clicked" handler="on_fav_sort" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererPixbuf" id="fav_picon_cellrendererpixbuf">
|
||||
<property name="xpad">2</property>
|
||||
@@ -2426,7 +2430,9 @@ Author: Dmitriy Yefremov
|
||||
<property name="min_width">25</property>
|
||||
<property name="title" translatable="yes">Type</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="clickable">True</property>
|
||||
<property name="alignment">0.5</property>
|
||||
<signal name="clicked" handler="on_fav_sort" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="type_cellrenderertext">
|
||||
<property name="xalign">0.50999999046325684</property>
|
||||
@@ -2443,7 +2449,9 @@ Author: Dmitriy Yefremov
|
||||
<property name="min_width">25</property>
|
||||
<property name="title" translatable="yes">Pos</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="clickable">True</property>
|
||||
<property name="alignment">0.5</property>
|
||||
<signal name="clicked" handler="on_fav_sort" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="pos_cellrenderertext">
|
||||
<property name="xalign">0.50999999046325684</property>
|
||||
|
||||
Reference in New Issue
Block a user