mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-05-06 16:35:50 +02:00
PageUp/PageDown impl
This commit is contained in:
@@ -166,6 +166,70 @@ dmitry.v.yefremov@gmail.com
|
||||
<action-widget response="-5">button4</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkFileChooserDialog" id="path_chooser_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes"> </property>
|
||||
<property name="modal">True</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="icon_name">document-open</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="action">save</property>
|
||||
<property name="do_overwrite_confirmation">True</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="filechooser_dialog_vbox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">2</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="filechooser_dialog_action_area">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button2">
|
||||
<property name="label">gtk-undo</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button1">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="yalign">0.55000001192092896</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-6">button2</action-widget>
|
||||
<action-widget response="-12">button1</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkMessageDialog" id="question_dialog">
|
||||
<property name="width_request">320</property>
|
||||
<property name="can_focus">False</property>
|
||||
@@ -520,66 +584,4 @@ dmitry.v.yefremov@gmail.com
|
||||
<action-widget response="-5">ok_button</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
<object class="GtkFileChooserDialog" id="path_chooser_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes"> </property>
|
||||
<property name="icon_name">document-open</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="transient_for">settings_dialog</property>
|
||||
<property name="action">save</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="filechooserdialog-vbox3">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">2</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="filechooserdialog-action_area3">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button2">
|
||||
<property name="label">gtk-undo</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button1">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="yalign">0.55000001192092896</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-6">button2</action-widget>
|
||||
<action-widget response="-12">button1</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
|
||||
@@ -107,6 +107,14 @@ def move_items(key):
|
||||
prev_itr = model.iter_previous(itr)
|
||||
if prev_itr:
|
||||
model.move_before(itr, prev_itr)
|
||||
elif key == Gdk.KEY_Page_Up:
|
||||
up_itr = model.get_iter(__fav_view.get_cursor()[0])
|
||||
if up_itr:
|
||||
model.move_before(itr, up_itr)
|
||||
elif key == Gdk.KEY_Page_Down:
|
||||
down_itr = model.get_iter(__fav_view.get_cursor()[0])
|
||||
if down_itr:
|
||||
model.move_after(itr, down_itr)
|
||||
|
||||
|
||||
def on_cut(view):
|
||||
@@ -424,6 +432,11 @@ def on_fav_selection(model, path, column):
|
||||
def on_bouquets_selection(model, path, column):
|
||||
__fav_model.clear()
|
||||
|
||||
if __bouquets_view.row_expanded(path):
|
||||
__bouquets_view.collapse_row(path)
|
||||
else:
|
||||
__bouquets_view.expand_row(path, column)
|
||||
|
||||
if len(path) > 1:
|
||||
delete_selection(__services_view)
|
||||
update_bouquet_channels(model, path)
|
||||
@@ -496,18 +509,21 @@ def on_preferences(item):
|
||||
show_settings_dialog(__main_window, __options)
|
||||
|
||||
|
||||
def on_tree_view_key_release(view, event):
|
||||
def on_tree_view_key_release(view: Gtk.TreeView, event):
|
||||
""" Handling keystrokes """
|
||||
key = event.keyval
|
||||
ctrl = event.state & Gdk.ModifierType.CONTROL_MASK
|
||||
alt = event.state & Gdk.ModifierType.MOD1_MASK
|
||||
model_name = view.get_model().get_name()
|
||||
|
||||
if key == Gdk.KEY_Delete:
|
||||
on_delete(view)
|
||||
elif ctrl and key == Gdk.KEY_Up:
|
||||
move_items(Gdk.KEY_Up)
|
||||
elif ctrl and key == Gdk.KEY_Down:
|
||||
move_items(Gdk.KEY_Down)
|
||||
elif ctrl and key == Gdk.KEY_Up or key == Gdk.KEY_Page_Up:
|
||||
move_items(key)
|
||||
elif ctrl and key == Gdk.KEY_Down or key == Gdk.KEY_Page_Down:
|
||||
move_items(key)
|
||||
elif model_name == FAV_LIST_NAME and key == Gdk.KEY_Control_L or key == Gdk.KEY_Control_R:
|
||||
update_fav_num_column(view.get_model())
|
||||
elif key == Gdk.KEY_Insert:
|
||||
# Move items from main to fav list
|
||||
if model_name == SERVICE_LIST_NAME:
|
||||
@@ -523,6 +539,10 @@ def on_tree_view_key_release(view, event):
|
||||
on_cut(view)
|
||||
elif ctrl and key == Gdk.KEY_v or key == Gdk.KEY_V:
|
||||
on_paste(view)
|
||||
elif ctrl and key == Gdk.KEY_s or key == Gdk.KEY_S:
|
||||
on_data_save()
|
||||
elif key == Gdk.KEY_space and model_name == FAV_LIST_NAME:
|
||||
pass
|
||||
|
||||
|
||||
@run_task
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
<object class="GtkDialog" id="satellites_editor_dialog">
|
||||
<property name="width_request">640</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Satellites</property>
|
||||
<property name="title" translatable="yes">Satellites edit tool</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="icon_name">applications-utilities</property>
|
||||
@@ -300,6 +300,7 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_add" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -319,7 +320,7 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_remove" object="tree_view_selection" swapped="no"/>
|
||||
<signal name="activate" handler="on_remove" object="satellites_editor_tree_view" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
@@ -343,8 +344,8 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Load</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="stock_id">gtk-goto-bottom</property>
|
||||
<signal name="clicked" handler="on_satellites_list_load" object="satellites_tree_store" swapped="no"/>
|
||||
<property name="stock_id">gtk-open</property>
|
||||
<signal name="clicked" handler="on_open" object="satellites_tree_store" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -452,6 +453,7 @@
|
||||
<property name="enable_tree_lines">True</property>
|
||||
<signal name="button-press-event" handler="on_popup_menu" object="popup_menu" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_key_release" swapped="no"/>
|
||||
<signal name="row-activated" handler="on_row_activated" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="tree_view_selection">
|
||||
<property name="mode">multiple</property>
|
||||
|
||||
@@ -13,19 +13,21 @@ def show_satellites_dialog(transient, options):
|
||||
|
||||
class SatellitesDialog:
|
||||
_aggr = [None for x in range(9)] # aggregate
|
||||
__slots__ = ["_dialog", "_data_path", "_stores", "_options"]
|
||||
|
||||
__slots__ = ["_dialog", "_data_path", "_stores", "_options", "_sat_view"]
|
||||
|
||||
def __init__(self, transient, options):
|
||||
self._data_path = options["data_dir_path"]
|
||||
self._options = options
|
||||
|
||||
handlers = {"on_satellites_list_load": self.on_satellites_list_load,
|
||||
handlers = {"on_open": self.on_open,
|
||||
"on_remove": self.on_remove,
|
||||
"on_save": self.on_save,
|
||||
"on_popup_menu": self.on_popup_menu,
|
||||
"on_add": self.on_add,
|
||||
"on_edit": self.on_edit,
|
||||
"on_key_release": self.on_key_release,
|
||||
"on_row_activated": self.on_row_activated,
|
||||
"on_resize": self.on_resize}
|
||||
|
||||
builder = Gtk.Builder()
|
||||
@@ -36,6 +38,7 @@ class SatellitesDialog:
|
||||
self._dialog = builder.get_object("satellites_editor_dialog")
|
||||
self._dialog.set_transient_for(transient)
|
||||
self._dialog.get_content_area().set_border_width(0) # The width of the border around the main dialog area!
|
||||
self._sat_view = builder.get_object("satellites_editor_tree_view")
|
||||
# Setting the last size of the dialog window if it was saved
|
||||
window_size = self._options.get("sat_editor_window_size", None)
|
||||
if window_size:
|
||||
@@ -45,6 +48,7 @@ class SatellitesDialog:
|
||||
4: builder.get_object("fec_store"),
|
||||
5: builder.get_object("system_store"),
|
||||
6: builder.get_object("mod_store")}
|
||||
self.on_satellites_list_load(self._sat_view.get_model())
|
||||
|
||||
def run(self):
|
||||
self._dialog.run()
|
||||
@@ -57,6 +61,27 @@ class SatellitesDialog:
|
||||
if self._options:
|
||||
self._options["sat_editor_window_size"] = window.get_size()
|
||||
|
||||
def on_open(self, model):
|
||||
builder = Gtk.Builder()
|
||||
builder.add_objects_from_file("./ui/dialogs.glade", ("path_chooser_dialog",))
|
||||
ch_dialog = builder.get_object("path_chooser_dialog")
|
||||
ch_dialog.set_transient_for(self._dialog)
|
||||
|
||||
if ch_dialog.run() == 12:
|
||||
path = ch_dialog.get_filename()
|
||||
if path:
|
||||
print(path)
|
||||
self._data_path = path
|
||||
self.on_satellites_list_load(model)
|
||||
ch_dialog.destroy()
|
||||
|
||||
@staticmethod
|
||||
def on_row_activated(view, path, column):
|
||||
if view.row_expanded(path):
|
||||
view.collapse_row(path)
|
||||
else:
|
||||
view.expand_row(path, column)
|
||||
|
||||
def on_key_release(self, view, event):
|
||||
""" Handling keystrokes """
|
||||
key = event.keyval
|
||||
@@ -68,6 +93,12 @@ class SatellitesDialog:
|
||||
self.on_add(view)
|
||||
elif key == Gdk.KEY_F2:
|
||||
self.on_edit(view)
|
||||
elif ctrl and Gdk.KEY_s or Gdk.KEY_S:
|
||||
self.on_satellite()
|
||||
elif ctrl and Gdk.KEY_t or Gdk.KEY_T:
|
||||
self.on_transponder()
|
||||
elif key == Gdk.KEY_space:
|
||||
pass
|
||||
|
||||
@run_task
|
||||
def on_satellites_list_load(self, model):
|
||||
|
||||
@@ -1,59 +1,61 @@
|
||||
from main.properties import write_config
|
||||
from . import Gtk
|
||||
|
||||
__current_data_path = ""
|
||||
|
||||
|
||||
def show_settings_dialog(transient, options):
|
||||
handlers = {"on_data_dir_field_icon_press": on_data_dir_field_icon_press}
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_file("ui/dialogs.glade")
|
||||
builder.connect_signals(handlers)
|
||||
dialog = builder.get_object("settings_dialog")
|
||||
dialog.set_transient_for(transient)
|
||||
host_field = builder.get_object("host_field")
|
||||
host_field.set_text(options["host"])
|
||||
port_field = builder.get_object("port_field")
|
||||
port_field.set_text(options["port"])
|
||||
login_field = builder.get_object("login_field")
|
||||
login_field.set_text(options["user"])
|
||||
password_field = builder.get_object("password_field")
|
||||
password_field.set_text(options["password"])
|
||||
services_field = builder.get_object("services_field")
|
||||
services_field.set_text(options["services_path"])
|
||||
user_bouquet_field = builder.get_object("user_bouquet_field")
|
||||
user_bouquet_field.set_text(options["user_bouquet_path"])
|
||||
satellites_xml_field = builder.get_object("satellites_xml_field")
|
||||
satellites_xml_field.set_text(options["satellites_xml_path"])
|
||||
data_dir_field = builder.get_object("data_dir_field")
|
||||
data_dir_field.set_text(options["data_dir_path"])
|
||||
global __current_data_path
|
||||
__current_data_path = options["data_dir_path"]
|
||||
|
||||
if dialog.run() == Gtk.ResponseType.OK:
|
||||
options["host"] = host_field.get_text()
|
||||
options["port"] = port_field.get_text()
|
||||
options["user"] = login_field.get_text()
|
||||
options["password"] = password_field.get_text()
|
||||
options["services_path"] = services_field.get_text()
|
||||
options["user_bouquet_path"] = user_bouquet_field.get_text()
|
||||
options["satellites_xml_path"] = satellites_xml_field.get_text()
|
||||
options["data_dir_path"] = data_dir_field.get_text()
|
||||
write_config(options)
|
||||
dialog.destroy()
|
||||
SettingsDialog(transient, options)
|
||||
|
||||
|
||||
def on_data_dir_field_icon_press(entry, icon, event_button):
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_file("ui/dialogs.glade")
|
||||
dialog = builder.get_object("path_chooser_dialog")
|
||||
dialog.set_current_folder(__current_data_path)
|
||||
response = dialog.run()
|
||||
if response == -12: # -12 for fix assertion 'gtk_widget_get_can_default (widget)' failed
|
||||
entry.set_text(dialog.get_filename() if dialog.get_filename() else __current_data_path)
|
||||
dialog.destroy()
|
||||
class SettingsDialog:
|
||||
def __init__(self, transient, options):
|
||||
handlers = {"on_data_dir_field_icon_press": self.on_data_dir_field_icon_press}
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_file("ui/dialogs.glade")
|
||||
builder.connect_signals(handlers)
|
||||
self._dialog = builder.get_object("settings_dialog")
|
||||
self._dialog.set_transient_for(transient)
|
||||
self._host_field = builder.get_object("host_field")
|
||||
self._host_field.set_text(options["host"])
|
||||
self._port_field = builder.get_object("port_field")
|
||||
self._port_field.set_text(options["port"])
|
||||
self._login_field = builder.get_object("login_field")
|
||||
self._login_field.set_text(options["user"])
|
||||
self._password_field = builder.get_object("password_field")
|
||||
self._password_field.set_text(options["password"])
|
||||
self._services_field = builder.get_object("services_field")
|
||||
self._services_field.set_text(options["services_path"])
|
||||
self._user_bouquet_field = builder.get_object("user_bouquet_field")
|
||||
self._user_bouquet_field.set_text(options["user_bouquet_path"])
|
||||
self._satellites_xml_field = builder.get_object("satellites_xml_field")
|
||||
self._satellites_xml_field.set_text(options["satellites_xml_path"])
|
||||
self._data_dir_field = builder.get_object("data_dir_field")
|
||||
self._data_dir_field.set_text(options["data_dir_path"])
|
||||
self._current_data_path = options["data_dir_path"]
|
||||
|
||||
return response
|
||||
if self._dialog.run() == Gtk.ResponseType.OK:
|
||||
options["host"] = self._host_field.get_text()
|
||||
options["port"] = self._port_field.get_text()
|
||||
options["user"] = self._login_field.get_text()
|
||||
options["password"] = self._password_field.get_text()
|
||||
options["services_path"] = self._services_field.get_text()
|
||||
options["user_bouquet_path"] = self._user_bouquet_field.get_text()
|
||||
options["satellites_xml_path"] = self._satellites_xml_field.get_text()
|
||||
options["data_dir_path"] = self._data_dir_field.get_text()
|
||||
write_config(options)
|
||||
self._dialog.destroy()
|
||||
|
||||
def on_data_dir_field_icon_press(self, entry, icon, event_button):
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_file("ui/dialogs.glade")
|
||||
dialog = builder.get_object("path_chooser_dialog")
|
||||
dialog.set_transient_for(self._dialog)
|
||||
dialog.set_current_folder(self._current_data_path)
|
||||
response = dialog.run()
|
||||
if response == -12: # -12 for fix assertion 'gtk_widget_get_can_default (widget)' failed
|
||||
entry.set_text(dialog.get_filename() if dialog.get_filename() else self._current_data_path)
|
||||
dialog.destroy()
|
||||
|
||||
return response
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user