data rendering optimization

This commit is contained in:
DYefremov
2022-01-03 00:08:31 +03:00
parent 4009f5c2a2
commit 727a3fa8a2
7 changed files with 151 additions and 99 deletions

View File

@@ -1778,6 +1778,7 @@ Author: Dmitriy Yefremov
<property name="model">services_model_sort</property>
<property name="enable_search">False</property>
<property name="search_column">3</property>
<property name="fixed_height_mode">True</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="tooltip_column">20</property>
@@ -1803,9 +1804,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="cas_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title">CAS</property>
<child>
<object class="GtkCellRendererText" id="cas_cellrenderertext1"/>
<object class="GtkCellRendererText" id="cas_renderer"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
@@ -1815,9 +1817,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="type_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title">Type</property>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext2"/>
<object class="GtkCellRendererText" id="srv_type_renderer"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
@@ -1827,14 +1830,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="service_column">
<property name="resizable">True</property>
<property name="min_width">50</property>
<property name="sizing">fixed</property>
<property name="min_width">170</property>
<property name="title" translatable="yes">Service</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="alignment">0.5</property>
<property name="sort_column_id">3</property>
<child>
<object class="GtkCellRendererPixbuf" id="coded_cellrendererpixbuf">
<object class="GtkCellRendererPixbuf" id="coded_renderer">
<property name="width">24</property>
<property name="xpad">2</property>
</object>
<attributes>
@@ -1843,7 +1848,8 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererText" id="service_cellrenderertext">
<object class="GtkCellRendererText" id="service_renderer">
<property name="xpad">5</property>
<property name="ellipsize">end</property>
<property name="width_chars">25</property>
</object>
@@ -1853,8 +1859,9 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="locked_cellrendererpixbuf">
<property name="xpad">2</property>
<object class="GtkCellRendererPixbuf" id="locked_renderer">
<property name="width">24</property>
<property name="xalign">0</property>
</object>
<attributes>
<attribute name="cell-background-rgba">21</attribute>
@@ -1862,8 +1869,10 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="hide_cellrendererpixbuf">
<property name="xpad">2</property>
<object class="GtkCellRendererPixbuf" id="hide_renderer">
<property name="width">24</property>
<property name="xpad">5</property>
<property name="xalign">2.2351741291171123e-10</property>
</object>
<attributes>
<attribute name="cell-background-rgba">21</attribute>
@@ -1875,14 +1884,15 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="package_column">
<property name="resizable">True</property>
<property name="min_width">50</property>
<property name="sizing">fixed</property>
<property name="min_width">120</property>
<property name="title" translatable="yes">Package</property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="alignment">0.5</property>
<property name="sort_column_id">6</property>
<child>
<object class="GtkCellRendererText" id="package_cellrenderertext">
<object class="GtkCellRendererText" id="package_renderer">
<property name="ellipsize">end</property>
<property name="width_chars">15</property>
</object>
@@ -1896,6 +1906,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="service_type_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
@@ -1903,7 +1914,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">7</property>
<child>
<object class="GtkCellRendererText" id="service_type_cellrenderertex">
<object class="GtkCellRendererText" id="service_type_renderer">
<property name="xalign">0.51999998092651367</property>
</object>
<attributes>
@@ -1915,13 +1926,14 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="picon_column">
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Picon</property>
<property name="clickable">True</property>
<property name="alignment">0.5</property>
<property name="sort_column_id">9</property>
<child>
<object class="GtkCellRendererPixbuf" id="picon_cellrendererpixbuf"/>
<object class="GtkCellRendererPixbuf" id="picon_renderer"/>
<attributes>
<attribute name="cell-background-rgba">21</attribute>
<attribute name="pixbuf">8</attribute>
@@ -1936,7 +1948,7 @@ Author: Dmitriy Yefremov
<property name="title">Picon ID</property>
<property name="alignment">0.5</property>
<child>
<object class="GtkCellRendererText" id="picon_id_cellrenderertext"/>
<object class="GtkCellRendererText" id="picon_id_renderer"/>
<attributes>
<attribute name="text">9</attribute>
</attributes>
@@ -1946,6 +1958,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="ssid_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title">SID</property>
<property name="expand">True</property>
@@ -1953,7 +1966,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">10</property>
<child>
<object class="GtkCellRendererText" id="ssid_cellrenderertext">
<object class="GtkCellRendererText" id="ssid_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -1966,6 +1979,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="freq_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Freq</property>
<property name="expand">True</property>
@@ -1973,7 +1987,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">11</property>
<child>
<object class="GtkCellRendererText" id="freq_cellrenderertext">
<object class="GtkCellRendererText" id="freq_render">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -1986,6 +2000,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="rate_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Rate</property>
<property name="expand">True</property>
@@ -1993,7 +2008,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">12</property>
<child>
<object class="GtkCellRendererText" id="rate_cellrenderertext">
<object class="GtkCellRendererText" id="rate_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2006,6 +2021,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="pol_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Pol</property>
<property name="expand">True</property>
@@ -2013,7 +2029,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">13</property>
<child>
<object class="GtkCellRendererText" id="pol_cellrenderertext">
<object class="GtkCellRendererText" id="pol_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2026,6 +2042,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fec_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title">FEC</property>
<property name="expand">True</property>
@@ -2033,7 +2050,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">14</property>
<child>
<object class="GtkCellRendererText" id="fec_cellrenderertext">
<object class="GtkCellRendererText" id="fec_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2046,6 +2063,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="system_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">System</property>
<property name="expand">True</property>
@@ -2053,7 +2071,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">15</property>
<child>
<object class="GtkCellRendererText" id="system_cellrenderertex">
<object class="GtkCellRendererText" id="system_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2066,6 +2084,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="pos_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Pos</property>
<property name="expand">True</property>
@@ -2073,7 +2092,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<property name="sort_column_id">16</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext1">
<object class="GtkCellRendererText" id="pos_render">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2086,9 +2105,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="data_id_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title">data_id</property>
<child>
<object class="GtkCellRendererText" id="data_id_cellrenderertext"/>
<object class="GtkCellRendererText" id="data_id_renderer"/>
<attributes>
<attribute name="text">17</attribute>
</attributes>
@@ -2098,9 +2118,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="service_fav_id_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title">fav_id</property>
<child>
<object class="GtkCellRendererText" id="fav_id_cellrenderertext"/>
<object class="GtkCellRendererText" id="srv_fav_id_renderer"/>
<attributes>
<attribute name="text">18</attribute>
</attributes>
@@ -2110,9 +2131,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="transponder_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title">transponder</property>
<child>
<object class="GtkCellRendererText" id="transponder_cellrenderertext"/>
<object class="GtkCellRendererText" id="transponder_renderer"/>
<attributes>
<attribute name="text">19</attribute>
</attributes>
@@ -2122,15 +2144,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="extra_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">extra</property>
<child>
<object class="GtkCellRendererText" id="tooltip_cellrenderertext"/>
<object class="GtkCellRendererText" id="tooltip_renderer"/>
<attributes>
<attribute name="text">20</attribute>
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="background_cellrenderertext"/>
<object class="GtkCellRendererPixbuf" id="background_renderer"/>
</child>
</object>
</child>
@@ -2676,6 +2699,7 @@ Author: Dmitriy Yefremov
<property name="model">fav_list_store</property>
<property name="enable_search">False</property>
<property name="search_column">2</property>
<property name="fixed_height_mode">True</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">both</property>
<property name="tooltip_column">9</property>
@@ -2700,13 +2724,14 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fav_num_column">
<property name="resizable">True</property>
<property name="sizing">fixed</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">
<object class="GtkCellRendererText" id="num_renderer">
<property name="xalign">0.49000000953674316</property>
<property name="width_chars">5</property>
<property name="max_width_chars">5</property>
@@ -2722,15 +2747,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fav_service_column">
<property name="resizable">True</property>
<property name="min_width">50</property>
<property name="sizing">fixed</property>
<property name="min_width">170</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>
<object class="GtkCellRendererPixbuf" id="fav_picon_renderer">
<property name="xpad">5</property>
</object>
<attributes>
<attribute name="cell-background-rgba">10</attribute>
@@ -2738,8 +2764,8 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="fav_coded_cellrendererpixbuf">
<property name="xpad">2</property>
<object class="GtkCellRendererPixbuf" id="fav_coded_renderer">
<property name="width">24</property>
</object>
<attributes>
<attribute name="cell-background-rgba">10</attribute>
@@ -2747,7 +2773,8 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererText" id="fav_service_cellrenderertext">
<object class="GtkCellRendererText" id="fav_service_renderer">
<property name="xpad">5</property>
<property name="ellipsize">end</property>
<property name="width_chars">25</property>
</object>
@@ -2757,8 +2784,9 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="fav_locked_cellrendererpixbuf">
<property name="xpad">2</property>
<object class="GtkCellRendererPixbuf" id="fav_locked_renderer">
<property name="width">24</property>
<property name="xalign">0</property>
</object>
<attributes>
<attribute name="cell-background-rgba">10</attribute>
@@ -2766,8 +2794,10 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="fav_hide_cellrendererpixbuf">
<property name="xpad">2</property>
<object class="GtkCellRendererPixbuf" id="fav_hide_renderer">
<property name="width">24</property>
<property name="xpad">5</property>
<property name="xalign">0</property>
</object>
<attributes>
<attribute name="cell-background-rgba">10</attribute>
@@ -2779,6 +2809,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fav_type_column">
<property name="resizable">True</property>
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
@@ -2786,7 +2817,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<signal name="clicked" handler="on_fav_sort" swapped="no"/>
<child>
<object class="GtkCellRendererText" id="type_cellrenderertext">
<object class="GtkCellRendererText" id="type_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2798,6 +2829,7 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="fav_pos_column">
<property name="sizing">fixed</property>
<property name="min_width">25</property>
<property name="title" translatable="yes">Pos</property>
<property name="expand">True</property>
@@ -2805,7 +2837,7 @@ Author: Dmitriy Yefremov
<property name="alignment">0.5</property>
<signal name="clicked" handler="on_fav_sort" swapped="no"/>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext">
<object class="GtkCellRendererText" id="fav_pos_renderer">
<property name="xalign">0.50999999046325684</property>
</object>
<attributes>
@@ -2818,9 +2850,10 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fav_id_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title">fav_id</property>
<child>
<object class="GtkCellRendererText" id="fav_id_cellrenderertext4"/>
<object class="GtkCellRendererText" id="fav_id_renderer"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
@@ -2830,15 +2863,16 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="fav_extra_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">extra</property>
<child>
<object class="GtkCellRendererText" id="fav_tooltip_cellrenderertext"/>
<object class="GtkCellRendererText" id="fav_tooltip_renderer"/>
<attributes>
<attribute name="text">9</attribute>
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="fav_background_cellrenderertext"/>
<object class="GtkCellRendererPixbuf" id="fav_background_renderer"/>
</child>
</object>
</child>
@@ -3285,7 +3319,7 @@ 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_renderer">
<property name="ellipsize">end</property>
</object>
<attributes>
@@ -3293,13 +3327,13 @@ Author: Dmitriy Yefremov
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="boiquets_cellrenderer_locked"/>
<object class="GtkCellRendererPixbuf" id="bouquets_renderer_locked"/>
<attributes>
<attribute name="pixbuf">1</attribute>
</attributes>
</child>
<child>
<object class="GtkCellRendererPixbuf" id="boiquets_cellrenderer_hidden">
<object class="GtkCellRendererPixbuf" id="bouquets_renderer_hidden">
<property name="xalign">0</property>
</object>
<attributes>
@@ -3315,7 +3349,7 @@ Author: Dmitriy Yefremov
<property name="sizing">autosize</property>
<property name="title">Type</property>
<child>
<object class="GtkCellRendererText" id="bouquet_type_cellrenderertext"/>
<object class="GtkCellRendererText" id="bouquet_type_renderer"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2021 Dmitriy Yefremov
# Copyright (c) 2018-2022 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
@@ -243,7 +243,7 @@ class Application(Gtk.Application):
self._ftp_client = None
# Record
self._recorder = None
# http api
# HTTP API
self._http_api = None
self._fav_click_mode = None
# Appearance
@@ -434,6 +434,11 @@ class Application(Gtk.Application):
self._data_paned.bind_property("visible", main_header_box, "visible")
self._player_box.bind_property("visible", profile_box, "visible", 4)
self._player_box.bind_property("visible", toolbar_box, "visible", 4)
# Picons.
column = builder.get_object("picon_column")
column.set_cell_data_func(builder.get_object("picon_renderer"), self.picon_data_func)
column = builder.get_object("fav_service_column")
column.set_cell_data_func(builder.get_object("fav_picon_renderer"), self.fav_picon_data_func)
# Setting the last size of the window if it was saved.
main_window_size = self._settings.get("window_size")
if main_window_size:
@@ -696,7 +701,7 @@ class Application(Gtk.Application):
self._current_font = self._settings.list_font
if self._picons_size != self._settings.list_picon_size:
self.update_picons_size()
self._picons.clear()
if self._s_type is SettingsType.ENIGMA_2:
self._use_colors = self._settings.use_colors
@@ -742,19 +747,6 @@ class Application(Gtk.Application):
paned.set_position(main_position)
self._fav_paned.set_position(fav_position)
@run_task
def update_picons_size(self):
self._picons_size = self._settings.list_picon_size
update_picons_data(self._settings.profile_picons_path, self._picons, self._picons_size)
self.update_picons_pixbufs()
@run_idle
def update_picons_pixbufs(self):
self._fav_model.foreach(lambda m, p, itr: m.set_value(itr, Column.FAV_PICON, self._picons.get(
self._services.get(m.get_value(itr, Column.FAV_ID)).picon_id, None)))
self._services_model.foreach(lambda m, p, itr: m.set_value(itr, Column.SRV_PICON, self._picons.get(
m.get_value(itr, Column.SRV_PICON_ID), None)))
def update_background_colors(self, new_color, extra_color):
if extra_color != self._EXTRA_COLOR:
for row in self._fav_model:
@@ -2003,11 +1995,11 @@ class Application(Gtk.Application):
self.update_services_counts(len(self._services.values()))
self._wait_dialog.hide()
self._services_load_spinner.start()
factor = self.DEL_FACTOR
factor = self.DEL_FACTOR / 4
for index, srv in enumerate(services):
background = self.get_new_background(srv.flags_cas)
s = srv._replace(picon=self._picons.get(srv.picon_id, None)) + (None, background)
s = srv + (None, background)
self._services_model.append(s)
if index % factor == 0:
yield True
@@ -2282,18 +2274,9 @@ class Application(Gtk.Application):
if not is_marker:
num += 1
picon = self._picons.get(srv.picon_id, None)
# Alternatives
if srv.service_type == BqServiceType.ALT.name:
alt_servs = srv.transponder
if alt_servs:
alt_srv = self._services.get(alt_servs[0].data, None)
if alt_srv:
picon = self._picons.get(alt_srv.picon_id, None) if srv else None
self._fav_model.append((0 if is_marker else num, srv.coded, ex_srv_name if ex_srv_name else srv.service,
srv.locked, srv.hide, srv_type, srv.pos, srv.fav_id,
picon, None, background))
None, None, background))
yield True
self._fav_view.set_model(self._fav_model)
@@ -3253,15 +3236,12 @@ class Application(Gtk.Application):
@run_with_delay(2)
def on_filter_changed(self, item=None):
self._services_load_spinner.start()
model = self._services_view.get_model()
self._services_view.set_model(None)
self.update_filter_cache()
self.update_filter_state(model)
self.update_filter_state()
@run_idle
def update_filter_state(self, model):
def update_filter_state(self):
self._services_model_filter.refilter()
self._services_view.set_model(model)
GLib.idle_add(self._services_load_spinner.stop)
def update_filter_cache(self):
@@ -3516,7 +3496,25 @@ class Application(Gtk.Application):
self._services_load_spinner.stop()
yield True
# ***************** Picons *********************#
# ***************** Picons ********************* #
def picon_data_func(self, column, renderer, model, itr, data):
renderer.set_property("pixbuf", self._picons.get(model.get_value(itr, Column.SRV_PICON_ID)))
def fav_picon_data_func(self, column, renderer, model, itr, data):
srv = self._services.get(model.get_value(itr, Column.FAV_ID), None)
if not srv:
return True
picon = self._picons.get(srv.picon_id, None)
# Alternatives.
if srv.service_type == BqServiceType.ALT.name:
alt_servs = srv.transponder
if alt_servs:
alt_srv = self._services.get(alt_servs[0].data, None)
if alt_srv:
picon = self._picons.get(alt_srv.picon_id, None) if srv else None
renderer.set_property("pixbuf", picon)
@run_task
def update_picons(self):
@@ -3524,7 +3522,7 @@ class Application(Gtk.Application):
append_picons(self._picons, self._services_model)
def get_picon(self, p_id):
return get_picon_pixbuf(f"{self._settings.profile_picons_path}{p_id}", self._settings.list_picon_size)
return get_picon_pixbuf(f"{self._settings.profile_picons_path}{p_id}", self._picons_size)
def on_assign_picon(self, view, src_path=None, dst_path=None):
self._stack.set_visible_child_name(Page.PICONS.value)

View File

@@ -281,7 +281,7 @@ def set_lock(blacklist, services, model, paths, target, services_model):
locked = has_locked_hide(model, paths, col_num)
ids = []
skip_type = {BqServiceType.MARKER.name, BqServiceType.SPACE.name}
skip_type = {BqServiceType.MARKER.name, BqServiceType.SPACE.name, BqServiceType.ALT.name}
for path in paths:
itr = model.get_iter(path)

View File

@@ -3,7 +3,7 @@
The MIT License (MIT)
Copyright (c) 2018-2021 Dmitriy Yefremov
Copyright (c) 2018-2022 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
@@ -708,6 +708,7 @@ Author: Dmitriy Yefremov
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Drag the services to the desired picon or picon to the list of selected services.</property>
<property name="model">picons_src_sort_model</property>
<property name="fixed_height_mode">True</property>
<property name="enable_grid_lines">horizontal</property>
<property name="tooltip_column">0</property>
<property name="activate_on_single_click">True</property>
@@ -723,11 +724,14 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="src_picon_column">
<property name="sizing">fixed</property>
<property name="min_width">150</property>
<property name="title" translatable="yes">Picon</property>
<property name="alignment">0.49000000953674316</property>
<child>
<object class="GtkCellRendererPixbuf" id="picons_src_renderer"/>
<object class="GtkCellRendererPixbuf" id="picons_src_renderer">
<property name="ypad">5</property>
</object>
<attributes>
<attribute name="pixbuf">0</attribute>
</attributes>
@@ -736,6 +740,7 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="src_title_column">
<property name="sizing">fixed</property>
<property name="title" translatable="yes">Name</property>
<property name="alignment">0.49000000953674316</property>
<child>
@@ -751,6 +756,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="src_path_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererText" id="path_src_renderer"/>
@@ -836,6 +842,7 @@ Author: Dmitriy Yefremov
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Drag the services to the desired picon or picon to the list of selected services. </property>
<property name="model">picons_dst_sort_model</property>
<property name="fixed_height_mode">True</property>
<property name="enable_grid_lines">horizontal</property>
<property name="tooltip_column">0</property>
<property name="activate_on_single_click">True</property>
@@ -852,11 +859,14 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="dest_picon_column">
<property name="sizing">fixed</property>
<property name="min_width">150</property>
<property name="title" translatable="yes">Picon</property>
<property name="alignment">0.49000000953674316</property>
<child>
<object class="GtkCellRendererPixbuf" id="picons_dest_renderer"/>
<object class="GtkCellRendererPixbuf" id="picons_dest_renderer">
<property name="ypad">5</property>
</object>
<attributes>
<attribute name="pixbuf">0</attribute>
</attributes>
@@ -865,6 +875,7 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkTreeViewColumn" id="dest_title_column">
<property name="sizing">fixed</property>
<property name="title" translatable="yes">Name</property>
<property name="expand">True</property>
<property name="alignment">0.49000000953674316</property>
@@ -881,6 +892,7 @@ Author: Dmitriy Yefremov
<child>
<object class="GtkTreeViewColumn" id="dest_path_column">
<property name="visible">False</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererText" id="path_dest_renderer"/>

View File

@@ -197,6 +197,11 @@ class PiconManager(Gtk.Box):
self._manager_button.bind_property("active", builder.get_object("add_menu_button"), "visible")
# Init drag-and-drop
self.init_drag_and_drop()
# Rendering.
column = builder.get_object("dest_picon_column")
column.set_cell_data_func(builder.get_object("picons_dest_renderer"), self.picon_data_func)
column = builder.get_object("src_picon_column")
column.set_cell_data_func(builder.get_object("picons_src_renderer"), self.picon_data_func)
# Settings
self._settings = settings
self._s_type = settings.setting_type
@@ -274,7 +279,7 @@ class PiconManager(Gtk.Box):
def update_picons(self, path, view):
p_model = view.get_model()
model = get_base_model(p_model)
factor = self._app.DEL_FACTOR
factor = self._app.DEL_FACTOR * 2
for index, itr in enumerate([row.iter for row in model]):
model.remove(itr)
@@ -282,18 +287,11 @@ class PiconManager(Gtk.Box):
yield True
self._dst_count_label.set_text("0")
if not os.path.isdir(path):
return
for index, file in enumerate(os.listdir(path)):
if self._terminate:
return
p_path = f"{path}{SEP}{file}"
p = self.get_pixbuf_at_scale(p_path, 72, 48, True)
if p:
model.append((p, file, p_path))
model.append((None, file, f"{path}{SEP}{file}"))
if index % factor == 0:
self._dst_count_label.set_text(str(len(model)))
yield True
@@ -301,6 +299,9 @@ class PiconManager(Gtk.Box):
self._dst_count_label.set_text(str(len(model)))
yield True
def picon_data_func(self, column, renderer, model, itr, data):
renderer.set_property("pixbuf", self.get_pixbuf_at_scale(model.get_value(itr, 2), 72, 48, True))
def update_picons_from_file(self, view, uri):
""" Adds picons in the view on dragging from file system. """
path = Path(urlparse(unquote(uri)).path.strip())

View File

@@ -3,7 +3,7 @@
The MIT License (MIT)
Copyright (c) 2018-2021 Dmitriy Yefremov
Copyright (c) 2018-2022 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
@@ -1885,6 +1885,7 @@ Author: Dmitriy Yefremov
<item id="72">72</item>
<item id="96">96</item>
</items>
<signal name="changed" handler="on_picons_size_changed" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>

View File

@@ -2,7 +2,7 @@
#
# The MIT License (MIT)
#
# Copyright (c) 2018-2021 Dmitriy Yefremov
# Copyright (c) 2018-2022 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
@@ -69,6 +69,7 @@ class SettingsDialog:
"on_add_picon_path": self.on_add_picon_path,
"on_remove_picon_path": self.on_remove_picon_path,
"on_lang_changed": self.on_lang_changed,
"on_picons_size_changed": self.on_picons_size_changed,
"on_main_settings_visible": self.on_main_settings_visible,
"on_http_use_ssl_toggled": self.on_http_use_ssl_toggled,
"on_click_mode_togged": self.on_click_mode_togged,
@@ -91,6 +92,7 @@ class SettingsDialog:
self._profiles = self._settings.profiles
self._s_type = self._settings.setting_type
self._updated = False
self._current_page = None
builder = get_builder(UI_RESOURCES_PATH + "settings_dialog.glade", handlers)
@@ -624,10 +626,14 @@ class SettingsDialog:
if box.get_active_id() != self._settings.language:
self.show_info_message("Save and restart the program to apply the settings.", Gtk.MessageType.WARNING)
def on_picons_size_changed(self, box):
if self._current_page == "appearance" and box.get_active_id() != self._settings.list_picon_size:
self.show_info_message("Save and restart the program to apply the settings.", Gtk.MessageType.WARNING)
def on_main_settings_visible(self, stack, param):
name = stack.get_visible_child_name()
self._apply_presets_button.set_visible(name == "streaming")
self._reset_button.set_visible(name == "profiles")
self._current_page = stack.get_visible_child_name()
self._apply_presets_button.set_visible(self._current_page == "streaming")
self._reset_button.set_visible(self._current_page == "profiles")
def on_http_use_ssl_toggled(self, button):
active = button.get_active()