mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-03-09 22:21:06 +01:00
copy/paste impl
This commit is contained in:
@@ -10,6 +10,7 @@ from .settings_dialog import show_settings_dialog
|
||||
|
||||
SERVICE_LIST_NAME = "services_list_store"
|
||||
FAV_LIST_NAME = "fav_list_store"
|
||||
BOUQUETS_LIST_NAME = "bouquets_tree_store"
|
||||
|
||||
__main_window = None
|
||||
__status_bar = None
|
||||
@@ -20,6 +21,10 @@ __fav_model = None
|
||||
__services_view = None
|
||||
__fav_view = None
|
||||
__bouquets_view = None
|
||||
# Used for copy/paste
|
||||
# When adding the previous data will not be deleted.
|
||||
# Clearing only after the insertion!
|
||||
__rows_buffer = []
|
||||
__channels = {}
|
||||
|
||||
|
||||
@@ -78,27 +83,42 @@ def on_down(item):
|
||||
pass
|
||||
|
||||
|
||||
def on_cut(item):
|
||||
pass
|
||||
def on_cut(view):
|
||||
for row in on_delete(view):
|
||||
__rows_buffer.append(row)
|
||||
|
||||
|
||||
def on_copy(item):
|
||||
pass
|
||||
|
||||
|
||||
def on_paste(item):
|
||||
pass
|
||||
def on_paste(view):
|
||||
selection = view.get_selection()
|
||||
if not selection.count_selected_rows():
|
||||
return
|
||||
model, paths = selection.get_selected_rows()
|
||||
dest_index = int(paths[0][0]) + 1
|
||||
for row in reversed(__rows_buffer):
|
||||
model.insert(dest_index, row)
|
||||
__rows_buffer.clear()
|
||||
|
||||
|
||||
def on_delete(item):
|
||||
""" Delete selected items from views """
|
||||
""" Delete selected items from views
|
||||
|
||||
returns deleted rows list!
|
||||
"""
|
||||
for view in [__services_view, __fav_view, __bouquets_view]:
|
||||
if view.is_focus():
|
||||
selection = view.get_selection()
|
||||
model, paths = selection.get_selected_rows()
|
||||
itrs = [model.get_iter(path) for path in paths]
|
||||
rows = [model.get(in_itr, *[x for x in range(view.get_n_columns())]) for in_itr in itrs]
|
||||
for itr in itrs:
|
||||
model.remove(itr)
|
||||
if model.get_name() == FAV_LIST_NAME:
|
||||
update_fav_num_column(model)
|
||||
return rows
|
||||
|
||||
|
||||
def on_to_fav_move(view):
|
||||
@@ -145,12 +165,16 @@ def receive_selection(*, view, drop_info, data):
|
||||
model.insert(dest_index, row)
|
||||
for in_itr in in_itrs:
|
||||
model.remove(in_itr)
|
||||
# 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
|
||||
update_fav_num_column(model)
|
||||
except ValueError as e:
|
||||
__status_bar.push(1, getattr(e, "message", repr(e)))
|
||||
|
||||
|
||||
def update_fav_num_column(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 on_services_tree_view_drag_data_get(view, drag_context, data, info, time):
|
||||
""" DnD """
|
||||
data.set_text(get_selection(view), -1)
|
||||
@@ -181,14 +205,14 @@ def data_open(model):
|
||||
try:
|
||||
model.clear()
|
||||
__fav_model.clear()
|
||||
model_id = model.get_name()
|
||||
model_name = model.get_name()
|
||||
data_path = get_config()["data_dir_path"]
|
||||
if model_id == "services_list_store":
|
||||
if model_name == SERVICE_LIST_NAME:
|
||||
for ch in get_channels(data_path + "lamedb"):
|
||||
# adding channels to dict with fav_id as keys
|
||||
__channels[ch.fav_id] = ch
|
||||
model.append(ch)
|
||||
if model_id == "bouquets_tree_store":
|
||||
if model_name == BOUQUETS_LIST_NAME:
|
||||
data = get_bouquets(data_path)
|
||||
for name, bouquets in data:
|
||||
parent = model.append(None, [name])
|
||||
@@ -238,16 +262,20 @@ def on_preferences(item):
|
||||
def on_tree_view_key_release(view, event):
|
||||
""" Handling keystrokes """
|
||||
key = event.keyval
|
||||
# print(event.state)
|
||||
ctrl = event.state & Gdk.ModifierType.CONTROL_MASK
|
||||
if key == Gdk.KEY_Delete:
|
||||
on_delete(view)
|
||||
if key == Gdk.KEY_Up:
|
||||
elif key == Gdk.KEY_Up:
|
||||
print("Up")
|
||||
if key == Gdk.KEY_Down:
|
||||
elif key == Gdk.KEY_Down:
|
||||
print("Down")
|
||||
if key == Gdk.KEY_Insert and view.get_model().get_name() == SERVICE_LIST_NAME:
|
||||
elif key == Gdk.KEY_Insert and view.get_model().get_name() == SERVICE_LIST_NAME:
|
||||
# Move items from main to fav list
|
||||
on_to_fav_move(view)
|
||||
elif ctrl and key == Gdk.KEY_x or key == Gdk.KEY_X:
|
||||
on_cut(view)
|
||||
elif ctrl and key == Gdk.KEY_v or key == Gdk.KEY_V:
|
||||
on_paste(view)
|
||||
|
||||
|
||||
def on_upload(item):
|
||||
|
||||
@@ -47,21 +47,23 @@
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="fav_cut_popoup_menuitem">
|
||||
<object class="GtkImageMenuItem" id="fav_cut_popoup_menu_item">
|
||||
<property name="label">gtk-cut</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_cut" object="fav_tree_view" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="imagemenuitem4">
|
||||
<object class="GtkImageMenuItem" id="fav_paste_popup_menu_item">
|
||||
<property name="label">gtk-paste</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_paste" object="fav_tree_view" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -71,7 +73,7 @@
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImageMenuItem" id="imagemenuitem9">
|
||||
<object class="GtkImageMenuItem" id="fav_popoup_menu_item">
|
||||
<property name="label">gtk-remove</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -446,6 +448,16 @@
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparatorToolItem" id="separatortoolitem2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="up_tool_button">
|
||||
<property name="visible">True</property>
|
||||
@@ -481,7 +493,7 @@
|
||||
<property name="label" translatable="yes">Cut</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="stock_id">gtk-cut</property>
|
||||
<signal name="clicked" handler="on_cut" swapped="no"/>
|
||||
<signal name="clicked" handler="on_cut" object="fav_tree_view" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -509,6 +521,7 @@
|
||||
<property name="label" translatable="yes">Paste</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="stock_id">gtk-paste</property>
|
||||
<signal name="clicked" handler="on_paste" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
||||
Reference in New Issue
Block a user