some ui changes

This commit is contained in:
Dmitriy Yefremov
2017-12-25 19:50:35 +03:00
parent 3077a1c536
commit de497d1adf
8 changed files with 68 additions and 37 deletions

View File

@@ -8,7 +8,7 @@ Ctrl + X, C, V, Up, Down, PageUp, PageDown, S, T, E, L, H, Space; Insert, Delete
Insert - copies the selected channels from the main list to the bouquet or inserts (creates) a new bouquet.
Ctrl + X - only in bouquet list.
Ctrl + C - only in services list. Clipboard is "rubber". There is an accumulation before the insertion!
F2 - rename the bouquet.
Ctrl + E, F2 - edit/rename.
Ctrl + S, T, E in Satellites edit tool for create and edit satellite or transponder.
Ctrl + L - parental lock.
Ctrl + H - hide/skip.

View File

@@ -3,6 +3,8 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
UI_RESOURCES_PATH = "app/ui/" # path to *.glade files
theme = Gtk.IconTheme.get_default()
_IMAGE_MISSING = theme.load_icon("image-missing", 16, 0) if theme.lookup_icon("image-missing", 16, 0) else None
CODED_ICON = theme.load_icon("emblem-readonly", 16, 0) if theme.lookup_icon(

View File

@@ -1,7 +1,7 @@
""" Common module for showing dialogs """
from enum import Enum
from . import Gtk
from . import Gtk, UI_RESOURCES_PATH
class DialogType(Enum):
@@ -16,7 +16,7 @@ class DialogType(Enum):
def show_dialog(dialog_type: DialogType, transient, text=None, options=None, action_type=None, file_filter=None):
""" Shows dialogs by name """
builder = Gtk.Builder()
builder.add_from_file("app/ui/dialogs.glade")
builder.add_from_file(UI_RESOURCES_PATH + "dialogs.glade")
dialog = builder.get_object(dialog_type.value)
dialog.set_transient_for(transient)

View File

@@ -1,6 +1,6 @@
from app.commons import run_idle, run_task
from app.ftp import download_data, DownloadDataType, upload_data
from . import Gtk
from . import Gtk, UI_RESOURCES_PATH
from .dialogs import show_dialog, DialogType
@@ -20,7 +20,7 @@ class DownloadDialog:
"on_info_bar_close": self.on_info_bar_close}
builder = Gtk.Builder()
builder.add_objects_from_file("app/ui/dialogs.glade", ("download_dialog",))
builder.add_objects_from_file(UI_RESOURCES_PATH + "dialogs.glade", ("download_dialog",))
builder.connect_signals(handlers)
self._dialog = builder.get_object("download_dialog")

View File

@@ -8,10 +8,11 @@ from app.eparser import get_channels, get_bouquets, write_bouquets, write_channe
from app.eparser.__constants import CAS, FLAG
from app.eparser.bouquets import BqServiceType
from app.properties import get_config, write_config
from . import Gtk, Gdk
from . import Gtk, Gdk, UI_RESOURCES_PATH
from .dialogs import show_dialog, DialogType
from .download_dialog import show_download_dialog
from .main_helper import edit_marker, insert_marker, move_items, edit, ViewTarget, set_flags, locate_in_services
from .main_helper import edit_marker, insert_marker, move_items, edit, ViewTarget, set_flags, locate_in_services, \
scroll_to
from .satellites_dialog import show_satellites_dialog
from .settings_dialog import show_settings_dialog
@@ -22,9 +23,10 @@ class MainAppWindow:
_BOUQUETS_LIST_NAME = "bouquets_tree_store"
# dynamically active elements depending on the selected view
_SERVICE_ELEMENTS = ("copy_tool_button", "to_fav_tool_button", "copy_menu_item", "services_to_fav_move_popup_item",
"services_edit_popup_item")
_BOUQUET_ELEMENTS = ("edit_tool_button", "new_tool_button", "bouquets_new_popup_item", "bouguets_edit_popup_item")
_REMOVE_ELEMENTS = ("remove_tool_button", "delete_menu_item", "services_remove_popup_item",
"services_edit_popup_item", "services_copy_popup_item")
_BOUQUET_ELEMENTS = ("up_tool_button", "down_tool_button", "edit_tool_button", "new_tool_button",
"bouquets_new_popup_item", "bouquets_edit_popup_item")
_COMMONS_ELEMENTS = ("edit_tool_button", "remove_tool_button", "delete_menu_item", "services_remove_popup_item",
"bouquets_remove_popup_item", "fav_remove_popup_item")
_FAV_ELEMENTS = ("up_tool_button", "down_tool_button", "cut_tool_button", "paste_tool_button", "cut_menu_item",
"paste_menu_item", "fav_cut_popup_item", "fav_paste_popup_item", "import_m3u_tool_button",
@@ -36,10 +38,11 @@ class MainAppWindow:
"cut_menu_item", "copy_menu_item", "paste_menu_item", "delete_menu_item", "edit_tool_button",
"services_to_fav_move_popup_item", "services_edit_popup_item", "locked_tool_button",
"services_remove_popup_item", "fav_cut_popup_item", "fav_paste_popup_item",
"bouquets_new_popup_item", "bouguets_edit_popup_item", "services_remove_popup_item",
"bouquets_new_popup_item", "bouquets_edit_popup_item", "services_remove_popup_item",
"bouquets_remove_popup_item", "fav_remove_popup_item", "hide_tool_button",
"import_m3u_tool_button", "fav_import_m3u_popup_item", "fav_insert_marker_popup_item",
"fav_edit_marker_popup_item", "fav_edit_popup_item", "fav_locate_popup_item")
"fav_edit_marker_popup_item", "fav_edit_popup_item", "fav_locate_popup_item",
"services_copy_popup_item")
def __init__(self):
handlers = {"on_close_main_window": self.on_quit,
@@ -63,6 +66,7 @@ class MainAppWindow:
"on_delete": self.on_delete,
"on_new_bouquet": self.on_new_bouquet,
"on_bouquets_edit": self.on_bouquets_edit,
"on_tool_edit": self.on_tool_edit,
"on_to_fav_move": self.on_to_fav_move,
"on_services_tree_view_drag_data_get": self.on_services_tree_view_drag_data_get,
"on_fav_tree_view_drag_data_get": self.on_fav_tree_view_drag_data_get,
@@ -88,7 +92,7 @@ class MainAppWindow:
self.__blacklist = set()
builder = Gtk.Builder()
builder.add_from_file("app/ui/main_window.glade")
builder.add_from_file(UI_RESOURCES_PATH + "main_window.glade")
self.__main_window = builder.get_object("main_window")
main_window_size = self.__options.get("window_size", None)
# Setting the last size of the window if it was saved
@@ -148,8 +152,13 @@ class MainAppWindow:
show_dialog(DialogType.ABOUT, self.__main_window)
def move_items(self, key):
""" Move items in fav tree view """
""" Move items in fav or bouquets tree view """
if self.__services_view.is_focus():
return
elif self.__fav_view.is_focus():
move_items(key, self.__fav_view)
elif self.__bouquets_view and key not in (Gdk.KEY_Page_Up, Gdk.KEY_Page_Down):
move_items(key, self.__bouquets_view)
def on_cut(self, view):
for row in tuple(self.on_delete(view)):
@@ -283,20 +292,21 @@ class MainAppWindow:
if model.iter_n_children(itr): # parent
ch_itr = model.insert(itr, 0, bq)
self.scroll_to(model.get_path(ch_itr), paths, view)
scroll_to(model.get_path(ch_itr), view, paths)
else:
p_itr = model.iter_parent(itr)
it = model.insert(p_itr, int(model.get_path(itr)[1]) + 1, bq) if p_itr else model.append(itr, bq)
self.scroll_to(model.get_path(it), paths, view)
scroll_to(model.get_path(it), view, paths)
self.__bouquets[key] = []
def scroll_to(self, path, paths, view):
""" Scrolling to and selecting given path """
view.expand_row(paths[0], 0)
selection = view.get_selection()
selection.unselect_all()
view.scroll_to_cell(path, None)
selection.select_path(path)
def on_tool_edit(self, item):
""" Edit tool bar button """
if self.__services_view.is_focus():
self.on_edit(self.__services_view)
elif self.__fav_view.is_focus():
self.on_edit(self.__fav_view)
elif self.__bouquets_view.is_focus():
self.on_edit(self.__bouquets_view)
def on_bouquets_edit(self, view):
""" Rename bouquets """
@@ -647,7 +657,7 @@ class MainAppWindow:
for elem in self._LOCK_HIDE_ELEMENTS:
self.__tool_elements[elem].set_sensitive(not_empty)
for elem in self._REMOVE_ELEMENTS:
for elem in self._COMMONS_ELEMENTS:
self.__tool_elements[elem].set_sensitive(not_empty)
def on_hide(self, item):

View File

@@ -255,8 +255,10 @@ def locate_in_services(fav_view, services_view, parent_window):
break
def scroll_to(index, view):
def scroll_to(index, view, paths=None):
""" Scrolling to and selecting given index(path) """
if paths is not None:
view.expand_row(paths[0], 0)
view.scroll_to_cell(index, None)
selection = view.get_selection()
selection.unselect_all()

View File

@@ -17,7 +17,7 @@
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="bouguets_edit_popup_item">
<object class="GtkImageMenuItem" id="bouquets_edit_popup_item">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
@@ -724,7 +724,7 @@
<property name="label" translatable="yes">Edit </property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-edit</property>
<signal name="clicked" handler="on_bouquets_edit" object="bouquets_tree_view" swapped="no"/>
<signal name="clicked" handler="on_tool_edit" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
@@ -1699,6 +1699,23 @@
<signal name="activate" handler="on_to_fav_move" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem4">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_copy_popup_item">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_copy" object="services_tree_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="services_edit_popup_item">
<property name="label">gtk-edit</property>

View File

@@ -3,9 +3,9 @@ from math import fabs
from app.commons import run_idle
from app.eparser import get_satellites, write_satellites, Satellite, Transponder
from .main_helper import move_items, scroll_to
from . import Gtk, Gdk
from . import Gtk, Gdk, UI_RESOURCES_PATH
from .dialogs import show_dialog, DialogType
from .main_helper import move_items, scroll_to
def show_satellites_dialog(transient, options):
@@ -38,7 +38,7 @@ class SatellitesDialog:
"on_quit": self.on_quit}
builder = Gtk.Builder()
builder.add_objects_from_file("app/ui/satellites_dialog.glade",
builder.add_objects_from_file(UI_RESOURCES_PATH + "satellites_dialog.glade",
("satellites_editor_dialog", "satellites_tree_store",
"popup_menu", "add_popup_menu", "add_menu_icon"))
builder.connect_signals(handlers)
@@ -186,7 +186,7 @@ class SatellitesDialog:
else:
index = self.get_sat_position_index(sat.position, model)
model.insert(None, index, [sat.name, *self._aggr, sat.flags, sat.position])
self.scroll_to(index, view)
scroll_to(index, view)
def on_transponder(self, transponder=None, edited_itr=None):
""" Create or edit transponder """
@@ -227,7 +227,7 @@ class SatellitesDialog:
path = model.get_path(tr_itr)
index = path.get_indices()[1]
model.insert(model.iter_parent(tr_itr), index, row)
self.scroll_to(path, view)
scroll_to(path, view)
break
else:
tr_itr = model.iter_next(tr_itr)
@@ -304,7 +304,7 @@ class TransponderDialog:
handlers = {"on_entry_changed": self.on_entry_changed}
builder = Gtk.Builder()
builder.add_objects_from_file("app/ui/satellites_dialog.glade",
builder.add_objects_from_file(UI_RESOURCES_PATH + "satellites_dialog.glade",
("transponder_dialog",
"pol_store", "fec_store",
"mod_store", "system_store",
@@ -326,7 +326,7 @@ class TransponderDialog:
self._pattern = re.compile("\D")
# style
self._style_provider = Gtk.CssProvider()
self._style_provider.load_from_path("app/ui/style.css")
self._style_provider.load_from_path(UI_RESOURCES_PATH + "style.css")
self._freq_entry.get_style_context().add_provider_for_screen(Gdk.Screen.get_default(), self._style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
self._rate_entry.get_style_context().add_provider_for_screen(Gdk.Screen.get_default(), self._style_provider,
@@ -387,7 +387,7 @@ class SatelliteDialog:
def __init__(self, transient, satellite: Satellite = None):
builder = Gtk.Builder()
builder.add_objects_from_file("app/ui/satellites_dialog.glade",
builder.add_objects_from_file(UI_RESOURCES_PATH + "satellites_dialog.glade",
("satellite_dialog", "side_store", "pos_adjustment"))
self._dialog = builder.get_object("satellite_dialog")