mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-05-07 11:56:04 +02:00
simple implementation of filtering support by type and position in main list
This commit is contained in:
@@ -9,7 +9,7 @@ from gi.repository import GLib
|
||||
from app.commons import run_idle, log, run_task, run_with_delay
|
||||
from app.eparser import get_blacklist, write_blacklist, parse_m3u
|
||||
from app.eparser import get_services, get_bouquets, write_bouquets, write_services, Bouquets, Bouquet, Service
|
||||
from app.eparser.ecommons import CAS, Flag, BouquetService
|
||||
from app.eparser.ecommons import CAS, Flag
|
||||
from app.eparser.enigma.bouquets import BqServiceType
|
||||
from app.eparser.neutrino.bouquets import BqType
|
||||
from app.properties import get_config, write_config, Profile
|
||||
@@ -200,6 +200,10 @@ class MainAppWindow:
|
||||
self._services_model_filter.set_visible_func(self.services_filter_function)
|
||||
self._filter_entry = builder.get_object("filter_entry")
|
||||
self._filter_bar = builder.get_object("filter_bar")
|
||||
self._filter_types_box = builder.get_object("filter_types_box")
|
||||
self._filter_sat_positions_box = builder.get_object("filter_sat_positions_box")
|
||||
self._filter_types_model = builder.get_object("filter_types_list_store")
|
||||
self._filter_sat_positions_model = builder.get_object("filter_sat_positions_list_store")
|
||||
# Search
|
||||
self._search_bar = builder.get_object("search_bar")
|
||||
self._search_provider = SearchProvider((self._services_view, self._fav_view, self._bouquets_view),
|
||||
@@ -640,7 +644,7 @@ class MainAppWindow:
|
||||
shutil.move(os.path.join(path, file), backup_path + file)
|
||||
|
||||
bouquets = []
|
||||
services_model = self._services_view.get_model()
|
||||
services_model = get_base_model(self._services_view.get_model())
|
||||
|
||||
def parse_bouquets(model, b_path, itr):
|
||||
bqs = None
|
||||
@@ -1090,18 +1094,40 @@ class MainAppWindow:
|
||||
@run_idle
|
||||
def on_filter_toggled(self, toggle_button: Gtk.ToggleToolButton):
|
||||
active = toggle_button.get_active()
|
||||
if active:
|
||||
self.update_filter_sat_positions()
|
||||
|
||||
self._filter_bar.set_search_mode(active)
|
||||
self._filter_bar.set_visible(active)
|
||||
|
||||
def update_filter_sat_positions(self):
|
||||
self._filter_sat_positions_model.clear()
|
||||
self._filter_sat_positions_model.append(("All positions",))
|
||||
self._filter_sat_positions_box.set_active(0)
|
||||
sats = {float(x[16]) for x in self._services_model}
|
||||
list(map(self._filter_sat_positions_model.append, map(lambda x: (str(x),), sorted(sats))))
|
||||
|
||||
@run_with_delay(1)
|
||||
def on_filter_changed(self, entry):
|
||||
def on_filter_changed(self, item):
|
||||
self._services_model_filter.refilter()
|
||||
|
||||
def services_filter_function(self, model, iter, data):
|
||||
if self._services_model_filter is None or self._services_model_filter == "None":
|
||||
return True
|
||||
else:
|
||||
return self._filter_entry.get_text() in str(model.get(iter, 3, 6, 7, 10, 11, 12, 13, 14, 15, 16))
|
||||
txt = self._filter_entry.get_text() in str(model.get(iter, 3, 6, 7, 10, 11, 12, 13, 14, 15, 16))
|
||||
type_active = self._filter_types_box.get_active() > 0
|
||||
pos_active = self._filter_sat_positions_box.get_active() > 0
|
||||
|
||||
if type_active and pos_active:
|
||||
return self._filter_types_box.get_active_id() == model.get(iter, 7)[
|
||||
0] and self._filter_sat_positions_box.get_active_id() == model.get(iter, 16)[0] and txt
|
||||
elif type_active:
|
||||
return self._filter_types_box.get_active_id() == model.get(iter, 7)[0] and txt
|
||||
elif pos_active:
|
||||
return self._filter_sat_positions_box.get_active_id() == model.get(iter, 16)[0] and txt
|
||||
|
||||
return txt
|
||||
|
||||
def on_search_toggled(self, toggle_button: Gtk.ToggleToolButton):
|
||||
self._search_bar.set_search_mode(toggle_button.get_active())
|
||||
|
||||
@@ -153,6 +153,41 @@ Author: Dmitriy Yefremov
|
||||
<signal name="row-deleted" handler="on_model_changed" swapped="no"/>
|
||||
<signal name="row-inserted" handler="on_model_changed" swapped="no"/>
|
||||
</object>
|
||||
<object class="GtkListStore" id="filter_sat_positions_list_store">
|
||||
<columns>
|
||||
<!-- column-name satellite -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="filter_types_list_store">
|
||||
<columns>
|
||||
<!-- column-name type -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
<data>
|
||||
<row>
|
||||
<col id="0">All types</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">TV</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0">TV (H264)</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">TV (HD)</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">TV (UHD)</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Radio</col>
|
||||
</row>
|
||||
<row>
|
||||
<col id="0" translatable="yes">Data</col>
|
||||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkImage" id="find_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -857,6 +892,7 @@ Author: Dmitriy Yefremov
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Filter</property>
|
||||
<signal name="toggled" handler="on_filter_toggled" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkImage" id="filter_header_button_image">
|
||||
@@ -877,6 +913,7 @@ Author: Dmitriy Yefremov
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Search</property>
|
||||
<signal name="toggled" handler="on_search_toggled" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkImage" id="search_header_button_image">
|
||||
@@ -1113,6 +1150,7 @@ Author: Dmitriy Yefremov
|
||||
<object class="GtkBox" id="search_bar_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">1</property>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="search_entry">
|
||||
<property name="height_request">32</property>
|
||||
@@ -1184,6 +1222,81 @@ Author: Dmitriy Yefremov
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSearchBar" id="filter_bar">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="filter_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="filter_types_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">filter_types_list_store</property>
|
||||
<property name="active">0</property>
|
||||
<property name="id_column">0</property>
|
||||
<signal name="changed" handler="on_filter_changed" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="filter_types_box_cellrenderertext"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="filter_sat_positions_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">filter_sat_positions_list_store</property>
|
||||
<property name="active">0</property>
|
||||
<property name="id_column">0</property>
|
||||
<signal name="changed" handler="on_filter_changed" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="filter_satellites_box_cellrenderertext"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="filter_entry">
|
||||
<property name="height_request">32</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_name">tools-check-spelling</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">False</property>
|
||||
<signal name="search-changed" handler="on_filter_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkPaned" id="main_paned">
|
||||
<property name="height_request">250</property>
|
||||
@@ -1531,27 +1644,6 @@ Author: Dmitriy Yefremov
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSearchBar" id="filter_bar">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkSearchEntry" id="filter_entry">
|
||||
<property name="height_request">32</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="primary_icon_name">tools-check-spelling</property>
|
||||
<property name="primary_icon_activatable">False</property>
|
||||
<property name="primary_icon_sensitive">False</property>
|
||||
<signal name="search-changed" handler="on_filter_changed" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="services_bar_box">
|
||||
<property name="height_request">22</property>
|
||||
|
||||
Reference in New Issue
Block a user