mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-01-21 15:03:37 +01:00
DnD skeleton for bouquets list
This commit is contained in:
@@ -94,9 +94,9 @@ class MainAppWindow:
|
||||
"on_delete": self.on_delete,
|
||||
"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,
|
||||
"on_fav_tree_view_drag_data_received": self.on_fav_tree_view_drag_data_received,
|
||||
"on_view_drag_data_get": self.on_view_drag_data_get,
|
||||
"on_view_drag_data_received": self.on_view_drag_data_received,
|
||||
"on_bq_view_drag_data_received": self.on_bq_view_drag_data_received,
|
||||
"on_view_popup_menu": self.on_view_popup_menu,
|
||||
"on_popover_release": self.on_popover_release,
|
||||
"on_view_focus": self.on_view_focus,
|
||||
@@ -171,7 +171,6 @@ class MainAppWindow:
|
||||
self._fav_model = builder.get_object("fav_list_store")
|
||||
self._services_model = builder.get_object("services_list_store")
|
||||
self._bouquets_model = builder.get_object("bouquets_tree_store")
|
||||
self._status_bar = builder.get_object("status_bar")
|
||||
self._main_window_box = builder.get_object("main_window_box")
|
||||
self._player_drawing_area = builder.get_object("player_drawing_area")
|
||||
self._player_box = builder.get_object("player_box")
|
||||
@@ -217,18 +216,26 @@ class MainAppWindow:
|
||||
self._main_window.show()
|
||||
|
||||
def init_drag_and_drop(self):
|
||||
""" Enable drag and drop """
|
||||
""" Enable drag-and-drop """
|
||||
target = []
|
||||
bq_target = []
|
||||
self._services_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, target, Gdk.DragAction.COPY)
|
||||
self._fav_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, target,
|
||||
Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE)
|
||||
self._fav_view.enable_model_drag_dest(target, Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE)
|
||||
self._bouquets_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, bq_target,
|
||||
Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE)
|
||||
self._bouquets_view.enable_model_drag_dest(bq_target, Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE)
|
||||
self._fav_view.drag_dest_set_target_list(None)
|
||||
self._fav_view.drag_source_set_target_list(None)
|
||||
self._fav_view.drag_dest_add_text_targets()
|
||||
self._fav_view.drag_source_add_text_targets()
|
||||
self._services_view.drag_source_set_target_list(None)
|
||||
self._services_view.drag_source_add_text_targets()
|
||||
self._bouquets_view.drag_dest_set_target_list(None)
|
||||
self._bouquets_view.drag_source_set_target_list(None)
|
||||
self._bouquets_view.drag_dest_add_text_targets()
|
||||
self._bouquets_view.drag_source_add_text_targets()
|
||||
|
||||
def force_ctrl(self, view, event):
|
||||
""" Function for force ctrl press event for view """
|
||||
@@ -437,6 +444,49 @@ class MainAppWindow:
|
||||
if selection:
|
||||
self.receive_selection(view=self._fav_view, drop_info=None, data=selection)
|
||||
|
||||
def update_fav_num_column(self, model):
|
||||
""" Iterate through model and updates values for Num column """
|
||||
model.foreach(lambda store, pth, itr: store.set_value(itr, 0, int(pth[0]) + 1)) # iter , column, value
|
||||
|
||||
def update_bouquet_list(self):
|
||||
""" Update bouquet after move items """
|
||||
bq_selected = self.get_selected_bouquet()
|
||||
if bq_selected:
|
||||
fav_bouquet = self._bouquets[bq_selected]
|
||||
fav_bouquet.clear()
|
||||
for row in self._fav_model:
|
||||
fav_bouquet.append(row[7])
|
||||
|
||||
# ***************** Drag-and-drop *********************#
|
||||
|
||||
def on_view_drag_data_get(self, view, drag_context, data, info, time):
|
||||
data.set_text(self.get_selection(view), -1)
|
||||
|
||||
def on_view_drag_data_received(self, view, drag_context, x, y, data, info, time):
|
||||
self.receive_selection(view=view, drop_info=view.get_dest_row_at_pos(x, y), data=data.get_text())
|
||||
|
||||
def on_bq_view_drag_data_received(self, view, drag_context, x, y, data, info, time):
|
||||
model = get_base_model(view.get_model())
|
||||
drop_info = view.get_dest_row_at_pos(x, y)
|
||||
data = data.get_text()
|
||||
itr_str, sep, source = data.partition("::::")
|
||||
if source != self._BOUQUETS_LIST_NAME:
|
||||
return
|
||||
|
||||
if drop_info:
|
||||
path, position = drop_info
|
||||
itrs = [model.get_iter_from_string(itr) for itr in itr_str.split(",")]
|
||||
top_iter = model.get_iter(path)
|
||||
if model.iter_n_children(top_iter): # parent
|
||||
pass
|
||||
# for index, itr in enumerate(itrs):
|
||||
# ch_itr = model.insert(top_iter, index, rows[index])
|
||||
# print("PARENT")
|
||||
# ch_itr = model.insert(itr, 0, bq)
|
||||
# scroll_to(model.get_path(ch_itr), view, paths)
|
||||
else:
|
||||
list(map(lambda itr: model.move_before(itr, top_iter), itrs))
|
||||
|
||||
def get_selection(self, view):
|
||||
""" Creates a string from the iterators of the selected rows """
|
||||
model, paths = view.get_selection().get_selected_rows()
|
||||
@@ -444,28 +494,29 @@ class MainAppWindow:
|
||||
|
||||
if len(paths) > 0:
|
||||
itrs = [model.get_iter(path) for path in paths]
|
||||
return "{}:{}".format(",".join([model.get_string_from_iter(itr) for itr in itrs]), model.get_name())
|
||||
return "{}::::{}".format(",".join([model.get_string_from_iter(itr) for itr in itrs]), model.get_name())
|
||||
|
||||
def receive_selection(self, *, view, drop_info, data):
|
||||
""" Update fav view after data received """
|
||||
bq_selected = self.check_bouquet_selection()
|
||||
if not bq_selected:
|
||||
return
|
||||
|
||||
model = get_base_model(view.get_model())
|
||||
dest_index = 0
|
||||
|
||||
if drop_info:
|
||||
path, position = drop_info
|
||||
dest_iter = model.get_iter(path)
|
||||
if dest_iter:
|
||||
dest_index = model.get_value(dest_iter, 0)
|
||||
|
||||
itr_str, sep, source = data.partition(":")
|
||||
itrs = itr_str.split(",")
|
||||
itr_str, sep, source = data.partition("::::")
|
||||
if source == self._BOUQUETS_LIST_NAME:
|
||||
return
|
||||
|
||||
try:
|
||||
bq_selected = self.check_bouquet_selection()
|
||||
if not bq_selected:
|
||||
return
|
||||
|
||||
fav_bouquet = self._bouquets[bq_selected]
|
||||
itrs = itr_str.split(",")
|
||||
|
||||
if source == self._SERVICE_LIST_NAME:
|
||||
ext_model = self._services_view.get_model()
|
||||
@@ -490,32 +541,7 @@ class MainAppWindow:
|
||||
model.remove(in_itr)
|
||||
self.update_fav_num_column(model)
|
||||
except ValueError as e:
|
||||
self._status_bar.push(1, getattr(e, "message", repr(e)))
|
||||
|
||||
def update_fav_num_column(self, model):
|
||||
""" Iterate through model and updates values for Num column """
|
||||
model.foreach(lambda store, pth, itr: store.set_value(itr, 0, int(pth[0]) + 1)) # iter , column, value
|
||||
|
||||
def update_bouquet_list(self):
|
||||
""" Update bouquet after move items """
|
||||
bq_selected = self.get_selected_bouquet()
|
||||
if bq_selected:
|
||||
fav_bouquet = self._bouquets[bq_selected]
|
||||
fav_bouquet.clear()
|
||||
for row in self._fav_model:
|
||||
fav_bouquet.append(row[7])
|
||||
|
||||
def on_services_tree_view_drag_data_get(self, view, drag_context, data, info, time):
|
||||
""" DnD """
|
||||
data.set_text(self.get_selection(view), -1)
|
||||
|
||||
def on_fav_tree_view_drag_data_get(self, view, drag_context, data, info, time):
|
||||
""" DnD """
|
||||
data.set_text(self.get_selection(view), -1)
|
||||
|
||||
def on_fav_tree_view_drag_data_received(self, view, drag_context, x, y, data, info, time):
|
||||
""" DnD """
|
||||
self.receive_selection(view=view, drop_info=view.get_dest_row_at_pos(x, y), data=data.get_text())
|
||||
show_dialog(DialogType.ERROR, self._main_window, str(e))
|
||||
|
||||
def on_view_popup_menu(self, menu, event):
|
||||
""" Shows popup menu for any view """
|
||||
@@ -824,7 +850,6 @@ class MainAppWindow:
|
||||
model = get_base_model(view.get_model())
|
||||
model_name = model.get_name()
|
||||
|
||||
|
||||
if ctrl and key in MOVE_KEYS:
|
||||
self.move_items(key)
|
||||
elif model_name == self._FAV_LIST_NAME and key == Gdk.KEY_Control_L or key == Gdk.KEY_Control_R:
|
||||
|
||||
@@ -1365,7 +1365,7 @@ Author: Dmitriy Yefremov
|
||||
<property name="enable_grid_lines">both</property>
|
||||
<property name="activate_on_single_click">True</property>
|
||||
<signal name="button-press-event" handler="on_view_popup_menu" object="services_popup_menu" swapped="no"/>
|
||||
<signal name="drag-data-get" handler="on_services_tree_view_drag_data_get" swapped="no"/>
|
||||
<signal name="drag-data-get" handler="on_view_drag_data_get" swapped="no"/>
|
||||
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
|
||||
<signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
|
||||
@@ -1994,8 +1994,8 @@ Author: Dmitriy Yefremov
|
||||
<property name="enable_grid_lines">both</property>
|
||||
<property name="activate_on_single_click">True</property>
|
||||
<signal name="button-press-event" handler="on_fav_press" object="fav_popup_menu" swapped="no"/>
|
||||
<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="drag-data-get" handler="on_view_drag_data_get" swapped="no"/>
|
||||
<signal name="drag-data-received" handler="on_view_drag_data_received" swapped="no"/>
|
||||
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
|
||||
<signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
|
||||
@@ -2238,6 +2238,8 @@ Author: Dmitriy Yefremov
|
||||
<property name="enable_tree_lines">True</property>
|
||||
<property name="activate_on_single_click">True</property>
|
||||
<signal name="button-press-event" handler="on_view_popup_menu" object="bouquets_popup_menu" swapped="no"/>
|
||||
<signal name="drag-data-get" handler="on_view_drag_data_get" swapped="no"/>
|
||||
<signal name="drag-data-received" handler="on_bq_view_drag_data_received" swapped="no"/>
|
||||
<signal name="focus-in-event" handler="on_view_focus" swapped="no"/>
|
||||
<signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" swapped="no"/>
|
||||
|
||||
@@ -208,10 +208,13 @@ class PiconsDialog:
|
||||
self.show_dialog("The task is already running!", DialogType.ERROR)
|
||||
return
|
||||
|
||||
upload_data(properties=self._properties,
|
||||
download_type=DownloadType.PICONS,
|
||||
profile=self._profile,
|
||||
callback=lambda: self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO))
|
||||
try:
|
||||
upload_data(properties=self._properties,
|
||||
download_type=DownloadType.PICONS,
|
||||
profile=self._profile,
|
||||
callback=lambda: self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO))
|
||||
except OSError as e:
|
||||
self.show_info_message(str(e), Gtk.MessageType.ERROR)
|
||||
|
||||
def on_info_bar_close(self, bar=None, resp=None):
|
||||
self._info_bar.set_visible(False)
|
||||
|
||||
Reference in New Issue
Block a user