diff --git a/main/__init__.py b/main/__init__.py index bb62fe32..372e023a 100644 --- a/main/__init__.py +++ b/main/__init__.py @@ -1,4 +1,4 @@ -from main.ui import start_app as start +from main.ui.main_app_window import start_app as start if __name__ == "__main__": start() diff --git a/main/ui/__init__.py b/main/ui/__init__.py index 3bba5d47..95d04306 100644 --- a/main/ui/__init__.py +++ b/main/ui/__init__.py @@ -1 +1,7 @@ -from main.ui.main import start_app +import gi + +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk + +if __name__ == "__main__": + pass diff --git a/main/ui/main.py b/main/ui/main_app_window.py similarity index 71% rename from main/ui/main.py rename to main/ui/main_app_window.py index bb9e8ba3..84faa284 100644 --- a/main/ui/main.py +++ b/main/ui/main_app_window.py @@ -1,15 +1,13 @@ -import gi from threading import Thread + from main.eparser import get_channels, get_bouquets, get_bouquet from main.eparser.__constants import SERVICE_TYPE -from main.properties import get_config, write_config from main.ftp import download_data, upload_data +from main.properties import get_config +from . import Gtk, Gdk from .satellites_dialog import show_satellites_dialog from .settings_dialog import show_settings_dialog -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk, Gdk - __main_window = None __status_bar = None __options = get_config() @@ -48,7 +46,10 @@ def get_handlers(): "on_cut": on_cut, "on_copy": on_copy, "on_paste": on_paste, - "on_delete": on_delete + "on_delete": on_delete, + "on_services_tree_view_drag_data_get": on_services_tree_view_drag_data_get, + "on_fav_tree_view_drag_data_get": on_fav_tree_view_drag_data_get, + "on_fav_tree_view_drag_data_received": on_fav_tree_view_drag_data_received } @@ -76,12 +77,45 @@ def on_delete(item): """ Delete selected items from views """ for view in [__services_view, __fav_view, __bouquets_view]: selection = view.get_selection() - store, paths = selection.get_selected_rows() - itrs = [] - for path in paths: - itrs.append(store.get_iter(path)) + model, paths = selection.get_selected_rows() + itrs = [model.get_iter(path) for path in paths] for itr in itrs: - store.remove(itr) + model.remove(itr) + + +def on_services_tree_view_drag_data_get(view, drag_context, data, info, time): + """ DnD """ + selection = view.get_selection() + model, paths = selection.get_selected_rows() + itrs = [model.get_iter(path) for path in paths] + rows = [model.get(itr, *[x for x in range(view.get_n_columns())]) for itr in itrs] + print(rows) + data.set_text(str(rows), -1) + + +def on_fav_tree_view_drag_data_get(view, drag_context, data, info, time): + selection = view.get_selection() + model, paths = selection.get_selected_rows() + itrs = [model.get_iter(path) for path in paths] + rows = [model.get(itr, *[x for x in range(view.get_n_columns())]) for itr in itrs] + print(rows) + data.set_text(str(rows), -1) + + +def on_fav_tree_view_drag_data_received(view, drag_context, x, y, data, info, time): + """ DnD """ + print(data.get_data()) + # Gtk.SelectionData().get_data + model = view.get_model() + dest_iter = None + dest_tid = None + drop_info = view.get_dest_row_at_pos(x, y) + if drop_info: + path, position = drop_info + dest_iter = model.get_iter(path) + if dest_iter: + dest_tid = model.get_value(dest_iter, 0) + print("Destination ", dest_tid) def on_satellite_editor_show(model): @@ -201,9 +235,20 @@ def init_ui(): global __status_bar __status_bar = builder.get_object("status_bar") builder.connect_signals(get_handlers()) + init_drag_and_drop() # drag and drop __main_window.show_all() +def init_drag_and_drop(): + """ Enable drag and drop """ + target_name = "" + dnd_targets = [(target_name, Gtk.TargetFlags.SAME_APP, 0)] + __services_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, dnd_targets, Gdk.DragAction.COPY) + __fav_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, dnd_targets, + Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE) + __fav_view.enable_model_drag_dest(dnd_targets, Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE) + + def start_app(): init_ui() Gtk.main() diff --git a/main/ui/main_window.glade b/main/ui/main_window.glade index 58f6718b..a4bed9fe 100644 --- a/main/ui/main_window.glade +++ b/main/ui/main_window.glade @@ -543,7 +543,7 @@ 2 True - + True True in @@ -554,6 +554,7 @@ services_list_store both True + @@ -566,6 +567,7 @@ True autosize Service + True True 0 @@ -581,6 +583,7 @@ True autosize Package + True True 1 @@ -595,6 +598,7 @@ True Type + True True 2 @@ -610,6 +614,7 @@ True autosize Ssid + True True 3 @@ -625,6 +630,7 @@ True autosize Freq + True True 4 @@ -640,6 +646,7 @@ True autosize Rate + True True 5 @@ -655,6 +662,7 @@ True autosize Pol + True True 6 @@ -670,6 +678,7 @@ True autosize FEC + True True 7 @@ -685,6 +694,7 @@ True autosize System + True True 8 @@ -699,7 +709,7 @@ True Pos - True + True 9 @@ -760,6 +770,8 @@ fav_list_store both True + + diff --git a/main/ui/satellites_dialog.py b/main/ui/satellites_dialog.py index 5bb54da9..2ba89944 100644 --- a/main/ui/satellites_dialog.py +++ b/main/ui/satellites_dialog.py @@ -1,9 +1,5 @@ -import gi - from main.eparser import get_satellites - -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk +from . import Gtk __data_path = None diff --git a/main/ui/settings_dialog.py b/main/ui/settings_dialog.py index 1041ec14..57017454 100644 --- a/main/ui/settings_dialog.py +++ b/main/ui/settings_dialog.py @@ -1,9 +1,5 @@ -import gi - from main.properties import write_config - -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk +from . import Gtk def show_settings_dialog(transient, options):