search rework

This commit is contained in:
DYefremov
2021-09-19 00:23:23 +03:00
parent 8d61663d3e
commit 8aa9d0797f
5 changed files with 408 additions and 281 deletions

View File

@@ -1218,182 +1218,6 @@ Author: Dmitriy Yefremov
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="fs_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">5</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="filter_box">
<property name="can_focus">False</property>
<property name="valign">center</property>
<child>
<object class="GtkToggleButton" id="filter_only_free_button">
<property name="label" translatable="yes">Only free</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="toggled" handler="on_filter_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSearchEntry" id="filter_entry">
<property name="visible">True</property>
<property name="can_focus">True</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">1</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="filter_types_button">
<property name="width_request">75</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="popover">filter_type_popover</property>
<child>
<object class="GtkLabel" id="filter_type_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Type</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="filter_satellite_button">
<property name="width_request">75</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="popover">filter_satellite_popover</property>
<child>
<object class="GtkLabel" id="filter_pos_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Pos</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<style>
<class name="group"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="search_box">
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<child>
<object class="GtkSearchEntry" id="search_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="changed" handler="on_search" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="search_down_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_search_down" swapped="no"/>
<child>
<object class="GtkArrow" id="arrow1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">down</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="search_up_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_search_up" swapped="no"/>
<child>
<object class="GtkArrow" id="arrow2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">up</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<style>
<class name="group"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkPaned" id="main_paned">
<property name="visible">True</property>
@@ -1405,8 +1229,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkPaned" id="data_paned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_focus">False</property>
<property name="position_set">True</property>
<property name="wide_handle">True</property>
<signal name="realize" handler="on_data_paned_realize" swapped="no"/>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
@@ -1485,7 +1311,6 @@ Author: Dmitriy Yefremov
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property>
<child>
@@ -1502,6 +1327,7 @@ Author: Dmitriy Yefremov
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Filter</property>
<property name="action_name">win.filter</property>
@@ -1520,13 +1346,12 @@ Author: Dmitriy Yefremov
</packing>
</child>
<child>
<object class="GtkToggleButton" id="search_header_button">
<object class="GtkToggleButton" id="srv_search_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Search</property>
<property name="action_name">win.search</property>
<child>
<object class="GtkImage" id="search_header_button_image">
<property name="visible">True</property>
@@ -1606,6 +1431,184 @@ Author: Dmitriy Yefremov
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="services_fs_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_bottom">5</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="filter_box">
<property name="can_focus">False</property>
<property name="valign">center</property>
<child>
<object class="GtkToggleButton" id="filter_only_free_button">
<property name="width_request">50</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Only free</property>
<signal name="toggled" handler="on_filter_changed" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">emblem-readonly</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSearchEntry" id="filter_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-replace-symbolic</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">1</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="filter_types_button">
<property name="width_request">50</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="popover">filter_type_popover</property>
<child>
<object class="GtkLabel" id="filter_type_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Type</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="filter_satellite_button">
<property name="width_request">50</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="popover">filter_satellite_popover</property>
<child>
<object class="GtkLabel" id="filter_pos_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Pos</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<style>
<class name="group"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="srv_search_box">
<property name="can_focus">False</property>
<property name="valign">center</property>
<child>
<object class="GtkSearchEntry" id="services_search_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="srv_search_down_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<child>
<object class="GtkArrow" id="fav_dow_arrow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">down</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="srv_search_up_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<child>
<object class="GtkArrow" id="service_up_arrow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">up</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<style>
<class name="group"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="services_scrolled_window">
<property name="visible">True</property>
@@ -1980,7 +1983,7 @@ Author: Dmitriy Yefremov
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@@ -2298,10 +2301,11 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkPaned" id="fav_paned">
<property name="width_request">320</property>
<property name="width_request">350</property>
<property name="can_focus">False</property>
<property name="margin_right">5</property>
<property name="margin_bottom">5</property>
<property name="position_set">True</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkFrame" id="fav_frame">
@@ -2315,7 +2319,6 @@ Author: Dmitriy Yefremov
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property>
<child>
@@ -2328,19 +2331,17 @@ Author: Dmitriy Yefremov
<property name="margin_bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="import_m3u_header_button">
<object class="GtkToggleButton" id="fav_search_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Import m3u file</property>
<signal name="clicked" handler="on_import_m3u" swapped="no"/>
<property name="tooltip_text" translatable="yes">Search</property>
<child>
<object class="GtkImage" id="import_m3u_header_button_image">
<object class="GtkImage" id="search_header_button_image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">insert-link-symbolic</property>
<property name="icon_name">edit-find-symbolic</property>
</object>
</child>
</object>
@@ -2350,6 +2351,26 @@ Author: Dmitriy Yefremov
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="iptv_menu_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">IPTV</property>
<property name="direction">none</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="export_to_m3u_header_button">
<property name="visible">True</property>
@@ -2370,22 +2391,24 @@ Author: Dmitriy Yefremov
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="pack_type">end</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="iptv_menu_button">
<object class="GtkButton" id="import_m3u_header_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="focus_on_click">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">IPTV</property>
<property name="tooltip_text" translatable="yes">Import m3u file</property>
<signal name="clicked" handler="on_import_m3u" swapped="no"/>
<child>
<object class="GtkImage">
<object class="GtkImage" id="import_m3u_header_button_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">network-wired-symbolic</property>
<property name="icon_name">insert-link-symbolic</property>
</object>
</child>
</object>
@@ -2393,9 +2416,12 @@ Author: Dmitriy Yefremov
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
@@ -2403,6 +2429,89 @@ Author: Dmitriy Yefremov
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="fav_fs_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="fav_search_box">
<property name="can_focus">False</property>
<property name="valign">center</property>
<child>
<object class="GtkSearchEntry" id="fav_search_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="fav_search_down_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<child>
<object class="GtkArrow" id="fav_down_arrow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">down</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="fav_search_up_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<child>
<object class="GtkArrow" id="fav_up_arrow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">up</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<style>
<class name="group"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="fav_box">
<property name="visible">True</property>
@@ -2766,7 +2875,7 @@ Author: Dmitriy Yefremov
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@@ -2873,7 +2982,6 @@ Author: Dmitriy Yefremov
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property>
<child>
@@ -2973,6 +3081,23 @@ Author: Dmitriy Yefremov
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="bouquets_fs_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_bottom">5</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="bouquets_scrolled_window">
<property name="visible">True</property>
@@ -3014,7 +3139,9 @@ Author: Dmitriy Yefremov
<property name="expand">True</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="bouquets_cellrenderertext"/>
<object class="GtkCellRendererText" id="bouquets_cellrenderertext">
<property name="ellipsize">end</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
@@ -3055,7 +3182,7 @@ Author: Dmitriy Yefremov
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@@ -3100,7 +3227,7 @@ Author: Dmitriy Yefremov
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
</object>
@@ -3129,7 +3256,7 @@ Author: Dmitriy Yefremov
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
<property name="shrink">False</property>
</packing>
</child>
</object>

View File

@@ -169,9 +169,6 @@ class Application(Gtk.Application):
"on_remove_picon": self.on_remove_picon,
"on_reference_picon": self.on_reference_picon,
"on_remove_unused_picons": self.on_remove_unused_picons,
"on_search_down": self.on_search_down,
"on_search_up": self.on_search_up,
"on_search": self.on_search,
"on_iptv": self.on_iptv,
"on_epg_list_configuration": self.on_epg_list_configuration,
"on_iptv_list_configuration": self.on_iptv_list_configuration,
@@ -195,7 +192,8 @@ class Application(Gtk.Application):
"on_recordings_realize": self.on_recordings_realize,
"on_control_realize": self.on_control_realize,
"on_ftp_realize": self.on_ftp_realize,
"on_visible_page": self.on_visible_page}
"on_visible_page": self.on_visible_page,
"on_data_paned_realize": self.init_main_paned_position}
self._settings = Settings.get_instance()
self._s_type = self._settings.setting_type
@@ -331,29 +329,39 @@ class Application(Gtk.Application):
self._filter_only_free_button = builder.get_object("filter_only_free_button")
self._services_load_spinner.bind_property("active", self._filter_header_button, "sensitive", 4)
self._services_load_spinner.bind_property("active", self._filter_box, "sensitive", 4)
# Search.
services_search_provider = SearchProvider(self._services_view,
builder.get_object("services_search_entry"),
builder.get_object("srv_search_down_button"),
builder.get_object("srv_search_up_button"),
(Column.SRV_SERVICE, Column.SRV_PACKAGE))
self._srv_search_button = builder.get_object("srv_search_button")
self._srv_search_button.bind_property("active", builder.get_object("srv_search_box"), "visible")
self._srv_search_button.connect("toggled", services_search_provider.on_search_toggled)
fav_search_provider = SearchProvider(self._fav_view,
builder.get_object("fav_search_entry"),
builder.get_object("fav_search_down_button"),
builder.get_object("fav_search_up_button"),
(Column.FAV_SERVICE, Column.FAV_TYPE, Column.FAV_POS))
self._fav_search_button = builder.get_object("fav_search_button")
self._fav_search_button.bind_property("active", builder.get_object("fav_search_box"), "visible")
self._fav_search_button.connect("toggled", fav_search_provider.on_search_toggled)
# Playback.
self._player_box = PlayerBox(self)
paned = builder.get_object("main_paned")
data_paned = paned.get_child1()
paned.remove(data_paned)
self._player_box.bind_property("visible", self._profile_combo_box, "visible", 4)
paned.pack1(self._player_box, True, True)
paned.pack1(self._player_box, True, False)
paned.pack2(data_paned, True, False)
self._player_box.connect("show", self.on_playback_show)
self._player_box.connect("playback-close", self.on_playback_close)
self._player_box.connect("playback-full-screen", self.on_playback_full_screen)
self._data_paned = builder.get_object("data_paned")
self._data_paned.bind_property("visible", self._status_bar_box, "visible")
self._data_paned.bind_property("visible", builder.get_object("fs_box"), "visible")
# Record
# Record.
self._record_image = builder.get_object("record_button_image")
# Search
self._search_box = builder.get_object("search_box")
self._search_entry = builder.get_object("search_entry")
self._search_provider = SearchProvider((self._services_view, self._fav_view, self._bouquets_view),
builder.get_object("search_down_button"),
builder.get_object("search_up_button"))
# Dynamically active elements depending on the selected view
# 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._LOCK_HIDE_ELEMENTS)
self._tool_elements = {k: builder.get_object(k) for k in set(chain.from_iterable(d_elements))}
@@ -417,7 +425,6 @@ class Application(Gtk.Application):
view_button = Gtk.MenuButton(visible=True, menu_model=view_menu, direction=Gtk.ArrowType.NONE)
view_button.set_tooltip_text(get_message("View"))
self._main_window.get_titlebar().pack_end(view_button)
# IPTV menu.
self._iptv_menu_button.set_menu_model(builder.get_object("iptv_menu"))
iptv_elem = self._tool_elements.get("fav_iptv_popup_item")
@@ -451,13 +458,10 @@ class Application(Gtk.Application):
self.set_action("on_backup_tool_show", self.on_backup_tool_show)
self.set_action("on_about_app", self.on_about_app)
self.set_action("on_close_app", self.on_close_app)
# Search, Filter.
search_action = Gio.SimpleAction.new_stateful("search", None, GLib.Variant.new_boolean(False))
search_action.connect("change-state", self.on_search_toggled)
self._main_window.add_action(search_action) # For "win.*" actions!
# Filter.
filter_action = Gio.SimpleAction.new_stateful("filter", None, GLib.Variant.new_boolean(False))
filter_action.connect("change-state", self.on_filter_toggled)
self._main_window.add_action(filter_action)
self._main_window.add_action(filter_action) # For "win.*" actions!
# Lock, Hide.
self.set_action("on_hide", self.on_hide)
self.set_action("on_locked", self.on_locked)
@@ -532,7 +536,6 @@ class Application(Gtk.Application):
self.set_accels_for_action("app.on_locked", ["<primary>l"])
self.set_accels_for_action("app.on_close_app", ["<primary>q"])
self.set_accels_for_action("app.on_edit", ["<primary>e"])
self.set_accels_for_action("win.search", ["<primary>f"])
self.set_accels_for_action("win.filter", ["<shift><primary>f"])
def do_activate(self):
@@ -657,6 +660,12 @@ class Application(Gtk.Application):
self._NEW_COLOR = new_rgb
self._EXTRA_COLOR = extra_rgb
def init_main_paned_position(self, paned):
""" Initializes starting positions of main paned widgets. """
width = paned.get_allocated_width()
paned.set_position(width * 0.5)
self._fav_paned.set_position(width * 0.27)
@run_idle
def update_picons_size(self):
self._picons_size = self._settings.list_picon_size
@@ -2205,7 +2214,10 @@ class Application(Gtk.Application):
return
key = KeyboardKey(key_code)
ctrl = event.state & MOD_MASK
if key is KeyboardKey.F:
if ctrl:
self.activate_search_state(view)
return True
ctrl = event.state & MOD_MASK
@@ -2967,26 +2979,11 @@ class Application(Gtk.Application):
values_set.update({r[0] for r in model if r[1]})
self.on_filter_changed()
def on_search_toggled(self, action, value):
if self._app_info_box.get_visible():
return True
action.set_state(value)
self._search_box.set_visible(value)
if value:
self._search_entry.grab_focus()
else:
self._search_entry.set_text("")
def on_search_down(self, item):
self._search_provider.on_search_down()
def on_search_up(self, item):
self._search_provider.on_search_up()
@run_with_delay(1)
def on_search(self, entry):
self._search_provider.search(entry.get_text())
def activate_search_state(self, view):
if view is self._services_view:
self._srv_search_button.set_active(True)
elif view is self._fav_view:
self._fav_search_button.set_active(True)
# ***************** Editing *********************#

View File

@@ -1511,7 +1511,7 @@ Author: Dmitriy Yefremov
<property name="image">sat_update_search_image</property>
<property name="always_show_image">True</property>
<signal name="toggled" handler="on_find_toggled" swapped="no"/>
<accelerator key="f" signal="clicked"/>
<accelerator key="f" signal="clicked" modifiers="Primary"/>
</object>
<packing>
<property name="expand">False</property>
@@ -1607,7 +1607,6 @@ Author: Dmitriy Yefremov
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="on_search" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -1621,7 +1620,6 @@ Author: Dmitriy Yefremov
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_search_down" swapped="no"/>
<child>
<object class="GtkArrow" id="arrow1">
<property name="visible">True</property>
@@ -1642,7 +1640,6 @@ Author: Dmitriy Yefremov
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_search_up" swapped="no"/>
<child>
<object class="GtkArrow" id="arrow2">
<property name="visible">True</property>

View File

@@ -38,7 +38,7 @@ from app.eparser import get_satellites, write_satellites, Satellite, Transponder
from app.eparser.ecommons import PLS_MODE, get_key_by_value
from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser
from .dialogs import show_dialog, DialogType, get_chooser_dialog, get_message, get_builder
from .main_helper import move_items, scroll_to, append_text_to_tview, get_base_model, on_popup_menu
from .main_helper import move_items, append_text_to_tview, get_base_model, on_popup_menu
from .search import SearchProvider
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, MOVE_KEYS, KeyboardKey, MOD_MASK
@@ -412,9 +412,6 @@ class UpdateDialog:
"on_select_all": self.on_select_all,
"on_unselect_all": self.on_unselect_all,
"on_filter": self.on_filter,
"on_search": self.on_search,
"on_search_down": self.on_search_down,
"on_search_up": self.on_search_up,
"on_quit": self.on_quit}
self._settings = settings
@@ -457,9 +454,11 @@ class UpdateDialog:
self._filter_positions = (0, 0)
# Search
self._search_bar = builder.get_object("sat_update_search_bar")
self._search_provider = SearchProvider((self._sat_view,),
builder.get_object("sat_update_search_down_button"),
builder.get_object("sat_update_search_up_button"))
search_provider = SearchProvider(self._sat_view,
builder.get_object("sat_update_search_entry"),
builder.get_object("sat_update_search_down_button"),
builder.get_object("sat_update_search_up_button"))
builder.get_object("sat_update_find_button").connect("toggled", search_provider.on_search_toggled)
window_size = self._settings.get(self._size_name)
if window_size:
@@ -585,15 +584,6 @@ class UpdateDialog:
to_pos = round(self._to_pos_button.get_value(), 1) * (-1 if self._filter_to_combo_box.get_active() else 1)
return from_pos, to_pos
def on_search(self, entry):
self._search_provider.search(entry.get_text())
def on_search_down(self, item):
self._search_provider.on_search_down()
def on_search_up(self, item):
self._search_provider.on_search_up()
def on_select_all(self, view):
self.update_selection(view, True)

View File

@@ -1,31 +1,41 @@
""" This is helper module for search features """
from app.commons import run_with_delay
class SearchProvider:
def __init__(self, views, down_button, up_button):
def __init__(self, view, entry, down_button, up_button, columns=None):
self._paths = []
self._current_index = -1
self._max_indexes = 0
self._views = views
self._view = view
self._entry = entry
self._up_button = up_button
self._down_button = down_button
self._columns = columns
entry.connect("changed", self.on_search)
self._down_button.connect("clicked", self.on_search_down)
self._up_button.connect("clicked", self.on_search_up)
def search(self, text):
self._current_index = -1
self._paths.clear()
for view in self._views:
model = view.get_model()
selection = view.get_selection()
selection.unselect_all()
if not text:
continue
model = self._view.get_model()
selection = self._view.get_selection()
if not selection:
return
text = text.upper()
for r in model:
if text in str(r[:]).upper():
path = r.path
selection.select_path(r.path)
self._paths.append((view, path))
selection.unselect_all()
if not text:
return
text = text.upper()
for r in model:
data = [r[i] for i in self._columns] if self._columns else r[:]
if next((s for s in data if text in str(s).upper()), False):
path = r.path
selection.select_path(r.path)
self._paths.append(path)
self._max_indexes = len(self._paths) - 1
if self._max_indexes > 0:
@@ -34,16 +44,15 @@ class SearchProvider:
self.update_navigation_buttons()
def scroll_to(self, index):
view, path = self._paths[index]
view.scroll_to_cell(path, None)
self._view.scroll_to_cell(self._paths[index], None)
self.update_navigation_buttons()
def on_search_down(self):
def on_search_down(self, button=None):
if self._current_index < self._max_indexes:
self._current_index += 1
self.scroll_to(self._current_index)
def on_search_up(self):
def on_search_up(self, button=None):
if self._current_index > -1:
self._current_index -= 1
self.scroll_to(self._current_index)
@@ -52,6 +61,13 @@ class SearchProvider:
self._up_button.set_sensitive(self._current_index > 0)
self._down_button.set_sensitive(self._current_index < self._max_indexes)
@run_with_delay(1)
def on_search(self, entry):
self.search(entry.get_text())
def on_search_toggled(self, action, value=None):
self._entry.grab_focus() if action.get_active() else self._entry.set_text("")
if __name__ == "__main__":
pass