From 10f4a461bda6926539a957196f1d12e61401e780 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Sun, 25 Oct 2020 12:54:08 +0300 Subject: [PATCH] added prototype of simple control panel (#38) --- app/ui/main_app_window.py | 105 +- app/ui/main_window.glade | 3491 ++++++++++++++++++++++--------------- app/ui/style.css | 16 + 3 files changed, 2195 insertions(+), 1417 deletions(-) diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index 285c41bb..fc39abec 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -152,6 +152,8 @@ class Application(Gtk.Application): "on_player_close": self.on_player_close, "on_player_press": self.on_player_press, "on_full_screen": self.on_full_screen, + "on_volume_changed": self.on_volume_changed, + "on_http_status_visible": self.on_http_status_visible, "on_drawing_area_realize": self.on_drawing_area_realize, "on_player_drawing_area_draw": self.on_player_drawing_area_draw, "on_main_window_state": self.on_main_window_state, @@ -248,9 +250,18 @@ class Application(Gtk.Application): self._signal_level_bar.bind_property("visible", builder.get_object("record_button"), "visible") self._receiver_info_box.bind_property("visible", self._http_status_image, "visible", 4) self._receiver_info_box.bind_property("visible", self._signal_box, "visible") - # Screenshots + # Remote controller + self._controller_button = builder.get_object("remote controller_button") + self._receiver_info_box.bind_property("visible", self._controller_button, "visible") + self._remote_revealer = builder.get_object("remote_revealer") + self._screenshot_image = builder.get_object("screenshot_image") self._screenshots_button = builder.get_object("screenshots_button") - self._receiver_info_box.bind_property("visible", self._screenshots_button, "visible") + self._screenshot_check_button = builder.get_object("screenshot_check_button") + self._screenshot_check_button.bind_property("active", self._screenshot_image, "visible") + self._snr_value_label = builder.get_object("snr_value_label") + self._ber_value_label = builder.get_object("ber_value_label") + self._agc_value_label = builder.get_object("agc_value_label") + self._volume_button = builder.get_object("volume_button") # Force ctrl press event for view. Multiple selections in lists only with Space key(as in file managers)!!! self._services_view.connect("key-press-event", self.force_ctrl) self._fav_view.connect("key-press-event", self.force_ctrl) @@ -361,6 +372,28 @@ class Application(Gtk.Application): set_action("upload_bouquets", lambda a, v: self.on_upload_data(DownloadType.BOUQUETS)) # Edit set_action("on_edit", self.on_edit) + # Remote controller + # TODO: maybe we need a decoupling and lazy loading. + remote_action = Gio.SimpleAction.new_stateful("on_remote", None, GLib.Variant.new_boolean(False)) + remote_action.connect("change-state", self.on_remote) + self.add_action(remote_action) + set_action("on_up", lambda a, v: self.on_remote_action(HttpAPI.Remote.UP)) + set_action("on_down", lambda a, v: self.on_remote_action(HttpAPI.Remote.DOWN)) + set_action("on_left", lambda a, v: self.on_remote_action(HttpAPI.Remote.LEFT)) + set_action("on_right", lambda a, v: self.on_remote_action(HttpAPI.Remote.RIGHT)) + set_action("on_ok", lambda a, v: self.on_remote_action(HttpAPI.Remote.OK)) + set_action("on_menu", lambda a, v: self.on_remote_action(HttpAPI.Remote.MENU)) + set_action("on_exit", lambda a, v: self.on_remote_action(HttpAPI.Remote.EXIT)) + set_action("on_red", lambda a, v: self.on_remote_action(HttpAPI.Remote.RED)) + set_action("on_green", lambda a, v: self.on_remote_action(HttpAPI.Remote.GREEN)) + set_action("on_yellow", lambda a, v: self.on_remote_action(HttpAPI.Remote.YELLOW)) + set_action("on_blue", lambda a, v: self.on_remote_action(HttpAPI.Remote.BLUE)) + # Power + set_action("on_standby", lambda a, v: self.on_power_action(HttpAPI.Power.STANDBY)) + set_action("on_wake_up", lambda a, v: self.on_power_action(HttpAPI.Power.WAKEUP)) + set_action("on_reboot", lambda a, v: self.on_power_action(HttpAPI.Power.REBOOT)) + set_action("on_restart_gui", lambda a, v: self.on_power_action(HttpAPI.Power.RESTART_GUI)) + set_action("on_shutdown", lambda a, v: self.on_power_action(HttpAPI.Power.DEEP_STANDBY)) # Screenshots set_action("on_screenshot_all", self.on_screenshot_all) set_action("on_screenshot_video", self.on_screenshot_video) @@ -2535,6 +2568,9 @@ class Application(Gtk.Application): self._http_api.send(HttpRequestType.CURRENT, None, self.update_status) def update_signal(self, sig): + self._snr_value_label.set_text(sig.get("e2snrdb", "0 dB").strip()) + self._ber_value_label.set_text(str(sig.get("e2ber", None) or "0").strip()) + self._agc_value_label.set_text(sig.get("e2acg", "0 %").strip()) self.set_signal(sig.get("e2snr", "0 %") if sig else "0 %") @lru_cache(maxsize=2) @@ -2563,16 +2599,65 @@ class Application(Gtk.Application): self._service_epg_label.set_text(dsc) self._service_epg_label.set_tooltip_text(evn.get("e2eventdescription", "")) - # ******************** Screenshots ************************# + # ***************** Remote controller ********************* # + + def on_remote(self, action, state=False): + """ Shows/Hides [R key] remote controller. """ + action.set_state(state) + self._remote_revealer.set_visible(state) + self._remote_revealer.set_reveal_child(state) + + if state: + self._http_api.send(HttpRequestType.VOL, "state", self.update_volume) + + def on_remote_action(self, action): + self._http_api.send(HttpRequestType.REMOTE, action, self.on_response) + + @run_with_delay(0.5) + def on_volume_changed(self, button, value): + self._http_api.send(HttpRequestType.VOL, "{:.0f}".format(value), self.on_response) + + def update_volume(self, vol): + if "error_code" in vol: + return + + GLib.idle_add(self._volume_button.set_value, int(vol.get("e2current", "0"))) + + def on_response(self, resp): + if "error_code" in resp: + return + + if self._screenshot_check_button.get_active(): + ref = "mode=all" if self._http_api.is_owif else "d=" + self._http_api.send(HttpRequestType.GRUB, ref, self.update_screenshot) + + @run_task + def update_screenshot(self, data): + if "error_code" in data: + return + + data = data.get("img_data", None) + if data: + from gi.repository import GdkPixbuf + + loader = GdkPixbuf.PixbufLoader.new_with_type("jpeg") + loader.set_size(200, 120) + loader.write(data) + pix = loader.get_pixbuf() + loader.close() + GLib.idle_add(self._screenshot_image.set_from_pixbuf, pix) def on_screenshot_all(self, action, value=None): - self._http_api.send(HttpRequestType.GRUB, "mode=all" if self._http_api.is_owif else "d=", self.on_screenshot) + self._http_api.send(HttpRequestType.GRUB, "mode=all" if self._http_api.is_owif else "d=", + self.on_screenshot) def on_screenshot_video(self, action, value=None): - self._http_api.send(HttpRequestType.GRUB, "mode=video" if self._http_api.is_owif else "v=", self.on_screenshot) + self._http_api.send(HttpRequestType.GRUB, "mode=video" if self._http_api.is_owif else "v=", + self.on_screenshot) def on_screenshot_osd(self, action, value=None): - self._http_api.send(HttpRequestType.GRUB, "mode=osd" if self._http_api.is_owif else "o=", self.on_screenshot) + self._http_api.send(HttpRequestType.GRUB, "mode=osd" if self._http_api.is_owif else "o=", + self.on_screenshot) @run_task def on_screenshot(self, data): @@ -2596,7 +2681,13 @@ class Application(Gtk.Application): finally: GLib.idle_add(self._screenshots_button.set_sensitive, True) - # ***************** Filter and search *********************# + def on_power_action(self, action): + self._http_api.send(HttpRequestType.POWER, action, lambda resp: log("Power status changed...")) + + def on_http_status_visible(self, img): + self._controller_button.set_active(False) + + # ***************** Filter and search ********************* # def on_filter_toggled(self, action, value): if self._app_info_box.get_visible(): diff --git a/app/ui/main_window.glade b/app/ui/main_window.glade index 92572116..e64ce903 100644 --- a/app/ui/main_window.glade +++ b/app/ui/main_window.glade @@ -34,6 +34,11 @@ Author: Dmitriy Yefremov + + True + False + gtk-go-back + @@ -68,6 +73,11 @@ Author: Dmitriy Yefremov False gtk-copy + + True + False + gtk-go-down + True False @@ -176,6 +186,11 @@ Author: Dmitriy Yefremov False gtk-find + + True + False + gtk-go-forward + True False @@ -637,6 +652,114 @@ Author: Dmitriy Yefremov 1 10 + + False + + + True + False + 5 + 5 + vertical + 2 + + + True + True + True + app.on_standby + Standby + True + + + False + True + 0 + + + + + True + True + True + app.on_wake_up + Wake Up + True + + + False + True + 1 + + + + + True + True + True + app.on_reboot + Reboot + True + + + False + True + 2 + + + + + True + True + True + app.on_restart_gui + Restart GUI + True + + + False + True + 3 + + + + + True + False + + + False + True + 4 + + + + + True + True + True + app.on_shutdown + Shutdown + True + + + False + True + 5 + + + + + main + 1 + + + + + True + False + input-gaming + True False @@ -1041,6 +1164,16 @@ Author: Dmitriy Yefremov services_model_filter + + True + False + gtk-go-up + + + 100 + 1 + 10 + 640 480 @@ -1466,1160 +1599,112 @@ Author: Dmitriy Yefremov - + True False - vertical - + + True False + vertical - - 320 + False - vertical - - True + + 320 False - - - - - - True - True - 0 - - - - - True - False - 15 - 15 + vertical - + True False - Previous stream in the list - True - gtk-media-previous - - - - False - False - - - - - True - False - Play - gtk-media-play - - - - False - False - - - - - True - False - Stop playback - True - gtk-media-stop - - - - False - False - - - - - True - False - Next stream in the list - True - gtk-media-next - - - - False - False - - - - - True - False - - - False - 15 - 15 - 2 - - - True - False - 0 - - - False - True - 0 - - - - - True - False - 5 - 5 - player_scale_adjustment - False - 0 - 1 - False - False - - - - True - True - 1 - - - - - True - False - 0 - - - False - True - 2 - - - - + + + True - True + True + 0 - - True - False - Toggle in fullscreen - True - gtk-fullscreen - - - - False - False - - - - - True - False - Close playback - True - gtk-close - - - - False - False - - - - - False - True - end - 1 - - - - - True - False - - - - - True - False - vertical - - - False - - + True False + 15 + 15 - - 32 - True - True - gtk-find - False - False - - - - False - True - 0 - - - - - True - False - False - True - half - - - - True - False - center - down - - - - - False - False - 1 - - - - - True - False - False - True - half - - - - True - False - center - up - - - - - False - False - 2 - - - - - - - - False - True - 0 - - - - - False - - - True - False - 2 - - - Only free - True - True - True - - - - False - False - 0 - - - - - 32 - True - True - gtk-spell-check - False - False - - - - False - True - 1 - - - - + True False - filter_types_list_store - 0 - 0 - - - - - 0 - - + Previous stream in the list + True + gtk-media-previous + False - True - 2 + False - + True False - filter_sat_positions_list_store - 0 - 0 - - - - - 0 - - + Play + gtk-media-play + False - True - 3 + False - - - - - False - True - 1 - - - - - True - False - 1 - - - False - True - 2 - - - - - 320 - 250 - True - True - 1 - 1 - 2 - True - - - True - False - vertical - + True False - 2 - 2 - Services - - - + Stop playback + True + gtk-media-stop + False - True - 0 + False - + True False - in - - - True - True - services_model_sort - False - 3 - True - both - 20 - True - - - - - - - - - - - - - - - - multiple - - - - - False - CAS - - - - 0 - - - - - - - False - Type - - - - 1 - - - - - - - True - 50 - Service - True - 0.5 - 3 - - - 2 - - - 21 - 2 - - - - - end - 25 - - - 21 - 3 - - - - - 2 - - - 21 - 4 - - - - - 2 - - - 21 - 5 - - - - - - - True - 50 - Package - True - 0.5 - 6 - - - end - 15 - - - 21 - 6 - - - - - - - True - 25 - Type - True - 0.5 - 7 - - - 0.51999998092651367 - - - 21 - 7 - - - - - - - True - 25 - Picon - 0.5 - 9 - - - - 21 - 8 - - - - - - - False - fixed - Picon ID - 0.5 - - - - 9 - - - - - - - True - 25 - SID - True - 0.5 - 10 - - - 0.50999999046325684 - - - 21 - 10 - - - - - - - True - 25 - Freq - True - 0.5 - 11 - - - 0.50999999046325684 - - - 21 - 11 - - - - - - - True - 25 - Rate - True - 0.5 - 12 - - - 0.50999999046325684 - - - 21 - 12 - - - - - - - True - 25 - Pol - True - 0.5 - 13 - - - 0.50999999046325684 - - - 21 - 13 - - - - - - - True - 25 - FEC - True - 0.5 - 14 - - - 0.50999999046325684 - - - 21 - 14 - - - - - - - True - 25 - System - True - 0.5 - 15 - - - 0.50999999046325684 - - - 21 - 15 - - - - - - - True - 25 - Pos - True - 0.5 - 16 - - - 0.50999999046325684 - - - 21 - 16 - - - - - - - False - data_id - - - - 17 - - - - - - - False - fav_id - - - - 18 - - - - - - - False - transponder - - - - 19 - - - - - - - False - extra - - - - 20 - - - - - - - - - - - - True - True - 1 - - - - - 26 - True - False - queue - 2 - - - True - False - 5 - emblem-readonly - - - False - True - 0 - - - - - True - False - CAS - 20 - 20 - 0 - - - False - True - 2 - 1 - - - - - True - False - vertical - - - False - True - 5 - 2 - - - - - True - False - tv-symbolic - - - False - True - 3 - - - - - True - False - TV - 5 - 0 - - - False - True - 4 - - - - - True - False - network-wireless-symbolic - - - False - True - 5 - - - - - True - False - Radio - 5 - 0 - - - False - True - 6 - - - - - True - False - system-run - - - False - True - 7 - - - - - True - False - Data - 0 - - - False - True - 8 - - - - - True - False - vertical - - - False - True - 5 - 9 - - + Next stream in the list + True + gtk-media-next + False - True - 3 + False - - - True - False - - - - - True - True - True - + True False - vertical - - True - False - 2 - 2 - Bouquet details - - - - - - False - True - 0 - - - - - True - False - 2 - in - - - True - True - fav_list_store - False - 2 - True - both - 9 - True - - - - - - - - - - - - - - multiple - - - - - True - 25 - Num - True - 0.5 - - - - 0.20000000298023224 - 5 - 5 - - - 10 - 0 - 0 - - - - - - - True - 50 - Service - True - True - 0.5 - - - - 2 - - - 10 - 8 - - - - - 2 - - - 10 - 1 - - - - - end - 25 - - - 10 - 2 - - - - - 2 - - - 10 - 3 - - - - - 2 - - - 10 - 4 - - - - - - - True - 25 - Type - True - True - 0.5 - - - - 0.50999999046325684 - - - 10 - 5 - - - - - - - 25 - Pos - True - True - 0.5 - - - - 0.50999999046325684 - - - 10 - 6 - - - - - - - False - fav_id - - - - 7 - - - - - - - False - extra - - - - 9 - - - - - - - - - - - - True - True - 1 - - - - - 24 - True + False + 15 + 15 2 - + True False - document-properties + 0 False @@ -2628,24 +1713,30 @@ Author: Dmitriy Yefremov - + True False - 0 - 4 - 4 - 0 + 5 + 5 + player_scale_adjustment + False + 0 + 1 + False + False + - False + True True 1 - + True False + 0 False @@ -2653,53 +1744,265 @@ Author: Dmitriy Yefremov 2 + + + + + True + True + + + + + True + False + Toggle in fullscreen + True + gtk-fullscreen + + + + False + False + + + + + True + False + Close playback + True + gtk-close + + + + False + False + + + + + False + True + end + 1 + + + + + True + False + + + + + True + False + vertical + + + False + + + True + False + + + 32 + True + True + gtk-find + False + False + + + + False + True + 0 + + + + + True + False + False + True + half + - + True False center - - - True - False - True - end - 12 - 20 - - + down - - True - True - 3 - + + + + False + False + 1 + + + + + True + False + False + True + half + + + + True + False + center + up + + + + + False + False + 2 + + + + + + + + False + True + 0 + + + + + False + + + True + False + 2 + + + Only free + True + True + True + + + + False + False + 0 + + + + + 32 + True + True + gtk-spell-check + False + False + + + + False + True + 1 + + + + + True + False + filter_types_list_store + 0 + 0 + + + + + 0 + False True - 4 + 2 + + + + + True + False + filter_sat_positions_list_store + 0 + 0 + + + + + 0 + + + + + False + True + 3 - - True - False - + + + False + True + 1 + + + + + True + False + 1 + + + False + True + 2 + + + + + 320 + 250 + True + True + 1 + 1 + 2 + True - + True False vertical - + True False 2 2 - Bouquets + Services @@ -2711,79 +2014,361 @@ Author: Dmitriy Yefremov - + True False - 2 in - + True True - bouquets_tree_store - False - 0 + services_model_sort + False + 3 True - True + both + 20 True - - + + - + + - + + - + multiple - - True - 2 - autosize - Name - True - 0.5 + + False + CAS - + 0 - - - - 1 - - - - - 0 - - - 2 - - - + False - True - autosize Type - + + 1 + + + + + + + True + 50 + Service + True + 0.5 + 3 + + + 2 + + + 21 + 2 + + + + + end + 25 + + + 21 3 + + + 2 + + + 21 + 4 + + + + + 2 + + + 21 + 5 + + + + + + + True + 50 + Package + True + 0.5 + 6 + + + end + 15 + + + 21 + 6 + + + + + + + True + 25 + Type + True + 0.5 + 7 + + + 0.51999998092651367 + + + 21 + 7 + + + + + + + True + 25 + Picon + 0.5 + 9 + + + + 21 + 8 + + + + + + + False + fixed + Picon ID + 0.5 + + + + 9 + + + + + + + True + 25 + SID + True + 0.5 + 10 + + + 0.50999999046325684 + + + 21 + 10 + + + + + + + True + 25 + Freq + True + 0.5 + 11 + + + 0.50999999046325684 + + + 21 + 11 + + + + + + + True + 25 + Rate + True + 0.5 + 12 + + + 0.50999999046325684 + + + 21 + 12 + + + + + + + True + 25 + Pol + True + 0.5 + 13 + + + 0.50999999046325684 + + + 21 + 13 + + + + + + + True + 25 + FEC + True + 0.5 + 14 + + + 0.50999999046325684 + + + 21 + 14 + + + + + + + True + 25 + System + True + 0.5 + 15 + + + 0.50999999046325684 + + + 21 + 15 + + + + + + + True + 25 + Pos + True + 0.5 + 16 + + + 0.50999999046325684 + + + 21 + 16 + + + + + + + False + data_id + + + + 17 + + + + + + + False + fav_id + + + + 18 + + + + + + + False + transponder + + + + 19 + + + + + + + False + extra + + + + 20 + + + + + @@ -2796,16 +2381,18 @@ Author: Dmitriy Yefremov - - 24 + + 26 True False + queue 2 - + True False - document-properties + 5 + emblem-readonly False @@ -2814,28 +2401,584 @@ Author: Dmitriy Yefremov - + True False - 0 - 10 - 10 + CAS + 20 + 20 0 False True + 2 1 - + + True + False + vertical + + + False + True + 5 + 2 + + + + + True + False + tv-symbolic + + + False + True + 3 + + + + + True + False + TV + 5 + 0 + + + False + True + 4 + + + + + True + False + network-wireless-symbolic + + + False + True + 5 + + + + + True + False + Radio + 5 + 0 + + + False + True + 6 + + + + + True + False + system-run + + + False + True + 7 + + + + + True + False + Data + 0 + + + False + True + 8 + + + + + True + False + vertical + + + False + True + 5 + 9 + False True - 2 + 3 + + + + + True + False + + + + + True + True + True + + + True + False + vertical + + + True + False + 2 + 2 + Bouquet details + + + + + + False + True + 0 + + + + + True + False + 2 + in + + + True + True + fav_list_store + False + 2 + True + both + 9 + True + + + + + + + + + + + + + + multiple + + + + + True + 25 + Num + True + 0.5 + + + + 0.20000000298023224 + 5 + 5 + + + 10 + 0 + 0 + + + + + + + True + 50 + Service + True + True + 0.5 + + + + 2 + + + 10 + 8 + + + + + 2 + + + 10 + 1 + + + + + end + 25 + + + 10 + 2 + + + + + 2 + + + 10 + 3 + + + + + 2 + + + 10 + 4 + + + + + + + True + 25 + Type + True + True + 0.5 + + + + 0.50999999046325684 + + + 10 + 5 + + + + + + + 25 + Pos + True + True + 0.5 + + + + 0.50999999046325684 + + + 10 + 6 + + + + + + + False + fav_id + + + + 7 + + + + + + + False + extra + + + + 9 + + + + + + + + + + + + True + True + 1 + + + + + 24 + True + False + 2 + + + True + False + document-properties + + + False + True + 0 + + + + + True + False + 0 + 4 + 4 + 0 + + + False + True + 1 + + + + + True + False + + + False + True + 2 + + + + + True + False + center + + + True + False + True + end + 12 + 20 + + + + + True + True + 3 + + + + + False + True + 4 + + + + + True + False + + + + + True + False + vertical + + + True + False + 2 + 2 + Bouquets + + + + + + False + True + 0 + + + + + True + False + 2 + in + + + True + True + bouquets_tree_store + False + 0 + True + True + True + + + + + + + + + + + + + + multiple + + + + + True + 2 + autosize + Name + True + 0.5 + + + + 0 + + + + + + 1 + + + + + 0 + + + 2 + + + + + + + False + True + autosize + Type + + + + 3 + + + + + + + + + True + True + 1 + + + + + 24 + True + False + 2 + + + True + False + document-properties + + + False + True + 0 + + + + + True + False + 0 + 10 + 10 + 0 + + + False + True + 1 + + + + + + + + False + True + 2 + + + + + True + False @@ -2846,157 +2989,27 @@ Author: Dmitriy Yefremov - True - False + True + True + 1 + 4 + + + + + True + False + + + False + True + 5 - True - True - 1 - 4 - - - - - True - False - - - False - True - 5 - - - - - True - True - - - - - True - True - 0 - - - - - True - True - vertical - - - - - - True - False - demon-editor - 6 - - - False - True - 0 - - - - - True - False - DemonEditor - - - - - - - False - True - 1 - - - - - True - False - 1.0.2 Beta - - - - - - False - True - 2 - - - - - False - True - 2 - - - - - 28 - True - False - 1 - 1 - - - False - start - 10 - 5 - - - True - False - center - center - gtk-info - - - False - True - 0 - - - - - True - False - Receiver info - Receiver info - - - - - - False - True - 1 - - - - - True - False - Current IP: - - - - - - False - True - 2 + True + True @@ -3007,60 +3020,35 @@ Author: Dmitriy Yefremov - - status-bar-button - False - True - Screenshot - center - center - screenshots_menu + + True + True + vertical + + + - + True False - zoom-best-fit + demon-editor + 6 + + False + True + 0 + - - - False - True - 3 - - - - - False - No connection to the receiver! - center - center - 10 - 10 - network-offline-symbolic - - - False - True - end - 2 - - - - - False - end - center - 10 - 10 - 5 - + True False - center - end - 0 + DemonEditor + + + + False @@ -3069,21 +3057,502 @@ Author: Dmitriy Yefremov - - status-bar-button + + True False - True - Record - center - center - + 1.0.2 Beta + + + + + + False + True + 2 + + + + + False + True + 2 + + + + + 28 + True + False + 1 + 1 + + + False + start + 10 + 5 - + True False - gtk-media-record + center + center + gtk-info + + + False + True + 0 + + + + + True + False + Receiver info + Receiver info + + + + + + False + True + 1 + + + + + True + False + Current IP: + + + + + + False + True + 2 + + + + + True + True + 0 + + + + + status-bar-button + True + False + True + Remote controller + center + center + app.on_remote + remote_image + True + + + + False + False + 3 + + + + + False + No connection to the receiver! + center + center + 10 + 10 + network-offline-symbolic + + + + + False + True + end + 2 + + + + + False + end + center + 10 + 10 + 5 + + + True + False + center + end + 0 + + + False + True + 1 + + + + + status-bar-button + False + True + Record + center + center + + + + True + False + gtk-media-record + + + + + False + True + 2 + + + + + status-bar-button + False + False + True + Play + center + center + + + + True + False + center + center + gtk-media-play + + + + + False + True + 3 + + + + + True + False + Current service + fill + end + 35 + 1 + + + + + + True + True + 4 + + + + + 70 + False + Signal level + center + 100 + + + False + False + 5 + + + + + True + True + end + 2 + + + + + False + True + end + 1 + + + + + True + True + 0 + + + + + 230 + False + end + crossfade + 500 + + + True + False + vertical + 5 + + + True + False + center + 10 + True + expand + + + True + True + False + True + Power + power_menu + + + True + False + system-log-out + + + + + True + True + 1 + + + + + True + False + True + Screenshot + center + center + screenshots_menu + + + True + False + zoom-best-fit + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + center + center + 0 + in + + + True + False + vertical + + + True + False + center + center + 5 + 5 + 2 + 2 + + + OK + True + True + True + app.on_ok + + + 1 + 1 + + + + + True + True + True + app.on_up + up_image + + + 1 + 0 + + + + + True + True + True + app.on_down + down_image + + + 1 + 2 + + + + + True + True + True + app.on_right + forward_image + True + + + 2 + 1 + + + + + True + True + True + app.on_left + back_image + + + 0 + 1 + + + + + + + + + + + + + + + + + False + True + 0 + + + + + True + False + center + center + True + expand + + + Menu + True + True + True + app.on_menu + + + True + True + 0 + + + + + Exit + True + True + True + app.on_exit + + + True + True + 1 + + + + + False + True + 1 + + + + + + + + False + True + 1 + + + + + Grab screenshot + True + True + False + center + True False @@ -3092,22 +3561,34 @@ Author: Dmitriy Yefremov - - status-bar-button - False + + True + True False True - Play - center - center - - - - True - False + vertical + volume_adjustment + audio-volume-muted-symbolic +audio-volume-high-symbolic +audio-volume-low-symbolic +audio-volume-medium-symbolic + + + + True + True center center - gtk-media-play + none + + + + + True + True + center + center + none @@ -3118,51 +3599,241 @@ Author: Dmitriy Yefremov - + True False - Current service - fill - end - 35 - 1 - - - - True + False True 4 - - 70 + + True False - Signal level - center - 100 + 5 + True + + + status-bar-button + True + True + True + center + app.on_green + + + + 1 + 0 + + + + + status-bar-button + True + True + True + center + app.on_yellow + + + + 2 + 0 + + + + + status-bar-button + True + True + True + center + app.on_blue + + + + 3 + 0 + + + + + status-bar-button + True + True + True + center + app.on_red + + + + 0 + 0 + + False - False + True 5 + + + False + start + 10 + gtk-missing-image + 6 + + + True + True + 6 + + + + + True + False + vertical + 5 + + + True + False + Signal level + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + True + + + True + False + start + SNR: + + + 0 + 0 + + + + + True + False + start + BER: + + + 0 + 1 + + + + + True + False + start + AGC: + + + 0 + 2 + + + + + True + False + end + 0 dB + + + 1 + 0 + + + + + True + False + end + 0 + + + 1 + 1 + + + + + True + False + end + 0 % + + + 1 + 2 + + + + + False + True + 5 + + + + + False + True + end + 7 + + + - - True - True - end - 2 - False True - end 1 diff --git a/app/ui/style.css b/app/ui/style.css index 421541d1..4eb55416 100644 --- a/app/ui/style.css +++ b/app/ui/style.css @@ -7,6 +7,22 @@ margin: 1px; } +.red-button { + background-color: red; +} + +.green-button { + background-color: green; +} + +.yellow-button { + background-color: yellow; +} + +.blue-button { + background-color: blue; +} + .group {} .group :first-child {