Rewritten edit system (cancel and save buttons)
This commit is contained in:
		
							parent
							
								
									b44d457bc5
								
							
						
					
					
						commit
						70c183c71d
					
				@ -32,6 +32,7 @@
 | 
				
			|||||||
    <file alias="icons/scalable/status/down-symbolic.svg">icons/down-symbolic.svg</file>
 | 
					    <file alias="icons/scalable/status/down-symbolic.svg">icons/down-symbolic.svg</file>
 | 
				
			||||||
    <file alias="icons/scalable/status/chat-bubble-text-symbolic.svg">icons/chat-bubble-text-symbolic.svg</file>
 | 
					    <file alias="icons/scalable/status/chat-bubble-text-symbolic.svg">icons/chat-bubble-text-symbolic.svg</file>
 | 
				
			||||||
    <file alias="icons/scalable/status/execute-from-symbolic.svg">icons/execute-from-symbolic.svg</file>
 | 
					    <file alias="icons/scalable/status/execute-from-symbolic.svg">icons/execute-from-symbolic.svg</file>
 | 
				
			||||||
 | 
					    <file alias="icons/scalable/status/cross-large-symbolic.svg">icons/cross-large-symbolic.svg</file>
 | 
				
			||||||
    <file preprocess="xml-stripblanks">window.ui</file>
 | 
					    <file preprocess="xml-stripblanks">window.ui</file>
 | 
				
			||||||
    <file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
 | 
					    <file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
 | 
				
			||||||
  </gresource>
 | 
					  </gresource>
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
window = None
 | 
					window = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class edit_text_block(Gtk.TextView):
 | 
					class edit_text_block(Gtk.Box):
 | 
				
			||||||
    __gtype_name__ = 'AlpacaEditTextBlock'
 | 
					    __gtype_name__ = 'AlpacaEditTextBlock'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, text:str):
 | 
					    def __init__(self, text:str):
 | 
				
			||||||
@ -27,21 +27,71 @@ class edit_text_block(Gtk.TextView):
 | 
				
			|||||||
            margin_bottom=5,
 | 
					            margin_bottom=5,
 | 
				
			||||||
            margin_start=5,
 | 
					            margin_start=5,
 | 
				
			||||||
            margin_end=5,
 | 
					            margin_end=5,
 | 
				
			||||||
            css_classes=["view", "editing_message_textview"]
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        self.get_buffer().insert(self.get_buffer().get_start_iter(), text, len(text.encode('utf-8')))
 | 
					 | 
				
			||||||
        enter_key_controller = Gtk.EventControllerKey.new()
 | 
					 | 
				
			||||||
        enter_key_controller.connect("key-pressed", lambda controller, keyval, keycode, state: self.edit_message() if keyval==Gdk.KEY_Return and not (state & Gdk.ModifierType.SHIFT_MASK) else None)
 | 
					 | 
				
			||||||
        self.add_controller(enter_key_controller)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def edit_message(self):
 | 
					            spacing=5,
 | 
				
			||||||
        self.get_parent().get_parent().action_buttons.set_visible(True)
 | 
					            orientation=1
 | 
				
			||||||
        self.get_parent().get_parent().set_text(self.get_buffer().get_text(self.get_buffer().get_start_iter(), self.get_buffer().get_end_iter(), False))
 | 
					        )
 | 
				
			||||||
        self.get_parent().get_parent().add_footer(self.get_parent().get_parent().dt)
 | 
					        self.text_view = Gtk.TextView(
 | 
				
			||||||
        window.save_history(self.get_parent().get_parent().get_parent().get_parent().get_parent().get_parent())
 | 
					            halign=0,
 | 
				
			||||||
 | 
					            hexpand=True,
 | 
				
			||||||
 | 
					            css_classes=["view", "editing_message_textview"],
 | 
				
			||||||
 | 
					            wrap_mode=3
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        cancel_button = Gtk.Button(
 | 
				
			||||||
 | 
					            vexpand=False,
 | 
				
			||||||
 | 
					            valign=2,
 | 
				
			||||||
 | 
					            halign=2,
 | 
				
			||||||
 | 
					            tooltip_text=_("Cancel"),
 | 
				
			||||||
 | 
					            css_classes=['flat', 'circular'],
 | 
				
			||||||
 | 
					            icon_name='cross-large-symbolic'
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        cancel_button.connect('clicked', lambda *_: self.cancel_edit())
 | 
				
			||||||
 | 
					        save_button = Gtk.Button(
 | 
				
			||||||
 | 
					            vexpand=False,
 | 
				
			||||||
 | 
					            valign=2,
 | 
				
			||||||
 | 
					            halign=2,
 | 
				
			||||||
 | 
					            tooltip_text=_("Save Message"),
 | 
				
			||||||
 | 
					            css_classes=['flat', 'circular'],
 | 
				
			||||||
 | 
					            icon_name='paper-plane-symbolic'
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        save_button.connect('clicked', lambda *_: self.edit_message())
 | 
				
			||||||
 | 
					        self.append(self.text_view)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        button_container = Gtk.Box(
 | 
				
			||||||
 | 
					            halign=2,
 | 
				
			||||||
 | 
					            spacing=5
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        button_container.append(cancel_button)
 | 
				
			||||||
 | 
					        button_container.append(save_button)
 | 
				
			||||||
 | 
					        self.append(button_container)
 | 
				
			||||||
 | 
					        self.text_view.get_buffer().insert(self.text_view.get_buffer().get_start_iter(), text, len(text.encode('utf-8')))
 | 
				
			||||||
 | 
					        key_controller = Gtk.EventControllerKey.new()
 | 
				
			||||||
 | 
					        key_controller.connect("key-pressed", self.handle_key)
 | 
				
			||||||
 | 
					        self.text_view.add_controller(key_controller)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def handle_key(self, controller, keyval, keycode, state):
 | 
				
			||||||
 | 
					        if keyval==Gdk.KEY_Return and not (state & Gdk.ModifierType.SHIFT_MASK):
 | 
				
			||||||
 | 
					            self.save_edit()
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					        elif keyval==Gdk.KEY_Escape:
 | 
				
			||||||
 | 
					            self.cancel_edit()
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def save_edit(self):
 | 
				
			||||||
 | 
					        message_element = self.get_parent().get_parent()
 | 
				
			||||||
 | 
					        message_element.action_buttons.set_visible(True)
 | 
				
			||||||
 | 
					        message_element.set_text(self.text_view.get_buffer().get_text(self.text_view.get_buffer().get_start_iter(), self.text_view.get_buffer().get_end_iter(), False))
 | 
				
			||||||
 | 
					        message_element.add_footer(message_element.dt)
 | 
				
			||||||
 | 
					        window.save_history(message_element.get_parent().get_parent().get_parent().get_parent())
 | 
				
			||||||
        self.get_parent().remove(self)
 | 
					        self.get_parent().remove(self)
 | 
				
			||||||
        window.show_toast(_("Message edited successfully"), window.main_overlay)
 | 
					        window.show_toast(_("Message edited successfully"), window.main_overlay)
 | 
				
			||||||
        return True
 | 
					
 | 
				
			||||||
 | 
					    def cancel_edit(self):
 | 
				
			||||||
 | 
					        message_element = self.get_parent().get_parent()
 | 
				
			||||||
 | 
					        message_element.action_buttons.set_visible(True)
 | 
				
			||||||
 | 
					        message_element.set_text(message_element.text)
 | 
				
			||||||
 | 
					        message_element.add_footer(message_element.dt)
 | 
				
			||||||
 | 
					        self.get_parent().remove(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class text_block(Gtk.Label):
 | 
					class text_block(Gtk.Label):
 | 
				
			||||||
    __gtype_name__ = 'AlpacaTextBlock'
 | 
					    __gtype_name__ = 'AlpacaTextBlock'
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user