dnd skeleton

This commit is contained in:
Dmitriy Yefremov
2017-10-15 23:47:14 +03:00
parent f6b7e0f9c5
commit f9010fa15b
6 changed files with 80 additions and 25 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -543,7 +543,7 @@
<property name="margin_right">2</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<object class="GtkScrolledWindow" id="services_scrolled_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
@@ -554,6 +554,7 @@
<property name="model">services_list_store</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="drag-data-get" handler="on_services_tree_view_drag_data_get" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" object="services_list_store" swapped="no"/>
<signal name="row-activated" handler="on_services_selection" object="services_list_store" swapped="no"/>
<child internal-child="selection">
@@ -566,6 +567,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Service</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">0</property>
<child>
@@ -581,6 +583,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Package</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">1</property>
<child>
@@ -595,6 +598,7 @@
<object class="GtkTreeViewColumn" id="service_type_column">
<property name="resizable">True</property>
<property name="title" translatable="yes">Type</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">2</property>
<child>
@@ -610,6 +614,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Ssid</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">3</property>
<child>
@@ -625,6 +630,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Freq</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">4</property>
<child>
@@ -640,6 +646,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Rate</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">5</property>
<child>
@@ -655,6 +662,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Pol</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">6</property>
<child>
@@ -670,6 +678,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">FEC</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">7</property>
<child>
@@ -685,6 +694,7 @@
<property name="resizable">True</property>
<property name="sizing">autosize</property>
<property name="title" translatable="yes">System</property>
<property name="expand">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">8</property>
<child>
@@ -699,7 +709,7 @@
<object class="GtkTreeViewColumn" id="pos_column1">
<property name="resizable">True</property>
<property name="title" translatable="yes">Pos</property>
<property name="reorderable">True</property>
<property name="expand">True</property>
<property name="sort_column_id">9</property>
<child>
<object class="GtkCellRendererText" id="pos_cellrenderertext1"/>
@@ -760,6 +770,8 @@
<property name="model">fav_list_store</property>
<property name="enable_grid_lines">both</property>
<property name="activate_on_single_click">True</property>
<signal name="drag-data-get" handler="on_fav_tree_view_drag_data_get" swapped="no"/>
<signal name="drag-data-received" handler="on_fav_tree_view_drag_data_received" swapped="no"/>
<signal name="key-release-event" handler="on_tree_view_key_release" object="fav_list_store" swapped="no"/>
<signal name="row-activated" handler="on_fav_selection" object="fav_list_store" swapped="no"/>
<child internal-child="selection">

View File

@@ -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

View File

@@ -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):