From d34b7fabd4b63a453bb0a0b756ebc64eedd8c3ab Mon Sep 17 00:00:00 2001 From: PaladinDev Date: Mon, 7 Aug 2023 18:59:41 +0300 Subject: [PATCH 1/3] library: Add vala demo for Text View --- src/Library/demos/Text View/main.vala | 76 +++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/Library/demos/Text View/main.vala diff --git a/src/Library/demos/Text View/main.vala b/src/Library/demos/Text View/main.vala new file mode 100644 index 000000000..8ae576e52 --- /dev/null +++ b/src/Library/demos/Text View/main.vala @@ -0,0 +1,76 @@ +#!/usr/bin/env -S vala workbench.vala --pkg gtk4 --pkg libadwaita-1 + +Gtk.TextBuffer buffer; +Gdk.Display display; +Gdk.Clipboard clipboard; + +void main () { + var textview = (Gtk.TextView) workbench.builder.get_object("textview"); + var select = (Gtk.Button) workbench.builder.get_object("select"); + var copy = (Gtk.Button) workbench.builder.get_object("copy"); + var cut = (Gtk.Button) workbench.builder.get_object("cut"); + var clear = (Gtk.Button) workbench.builder.get_object("clear"); + var paste = (Gtk.Button) workbench.builder.get_object("paste"); + + display = Gdk.Display.get_default(); + clipboard = display.get_clipboard(); + buffer = textview.buffer; + + buffer.set_text( + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vel elit scelerisque mauris pellentesque pulvinar. Molestie nunc non blandit massa enim nec dui nunc. Turpis in eu mi bibendum neque egestas congue quisque. Sed velit dignissim sodales ut. Massa tempor nec feugiat nisl pretium fusce id velit. Vitae congue eu consequat ac felis donec et. Ultrices sagittis orci a scelerisque purus semper eget duis at. Habitant morbi tristique senectus et netus et malesuada fames ac. Vitae aliquet nec ullamcorper sit amet risus nullam. Tortor at auctor urna nunc. Eget velit aliquet sagittis id consectetur purus. Libero id faucibus nisl tincidunt eget. Nunc consequat interdum varius sit amet mattis. Enim facilisis gravida neque convallis. Dolor sit amet consectetur adipiscing elit ut aliquam purus. Venenatis tellus in metus vulputate eu scelerisque.Sit amet luctus venenatis lectus magna fringilla urna. Eget nunc lobortis mattis aliquam. Urna duis convallis convallis tellus id interdum velit. Fames ac turpis egestas maecenas. Venenatis lectus magna fringilla urna porttitor rhoncus dolor. Egestas erat imperdiet sed euismod nisi porta lorem mollis aliquam. Eget est lorem ipsum dolor sit amet consectetur. Eget nunc lobortis mattis aliquam faucibus purus in. Iaculis nunc sed augue lacus viverra vitae. Euismod elementum nisi quis eleifend. Et pharetra pharetra massa massa ultricies mi quis. Volutpat odio facilisis mauris sit. Enim ut tellus elementum sagittis vitae et. Volutpat sed cras ornare arcu dui vivamus arcu felis. Arcu vitae elementum curabitur vitae nunc sed. Porttitor rhoncus dolor purus non enim. Scelerisque fermentum dui faucibus in ornare quam viverra. Amet purus gravida quis blandit turpis cursus. Faucibus pulvinar elementum integer enim. Aenean et tortor at risus viverra adipiscing at in.Vitae ultricies leo integer malesuada nunc vel. Quis lectus nulla at volutpat diam ut. Donec ac odio tempor orci dapibus ultrices. Justo eget magna fermentum iaculis eu non diam. Mauris cursus mattis molestie a iaculis at erat pellentesque. Phasellus faucibus scelerisque eleifend donec pretium. Blandit volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque. Habitant morbi tristique senectus et netus. Nunc faucibus a pellentesque sit amet porttitor eget dolor. Nulla malesuada pellentesque elit eget. Tortor vitae purus faucibus ornare suspendisse sed nisi lacus sed. Sollicitudin ac orci phasellus egestas tellus. In hendrerit gravida rutrum quisque non tellus orci ac. Suspendisse ultrices gravida dictum fusce ut placerat. Varius morbi enim nunc faucibus. Tellus elementum sagittis vitae et leo duis ut diam. Velit dignissim sodales ut eu sem integer. Sapien eget mi proin sed libero enim. Odio euismod lacinia at quis risus. Tellus at urna condimentum mattis pellentesque id.", + -1 + ); + + copy.clicked.connect(handleCopy); + paste.clicked.connect(handlePaste); + cut.clicked.connect(handleCut); + select.clicked.connect(() => { + Gtk.TextIter start, end; + + buffer.get_start_iter(out start); + buffer.get_end_iter(out end); + + buffer.select_range(start, end); + }); + clear.clicked.connect(() => { + Gtk.TextIter start, end; + + buffer.get_start_iter(out start); + buffer.get_end_iter(out end); + + buffer.@delete(ref start, ref end); + }); + + textview.copy_clipboard.connect(() => { + message("Text copied to clipboard"); + }); + textview.cut_clipboard.connect(() => { + message("Text cut to clipboard"); + }); + textview.paste_clipboard.connect(() => { + message("Text pasted"); + }); +} + +void handleCopy() { + if (buffer.get_has_selection()) { + buffer.copy_clipboard(clipboard); + message("Text copied to clipboard"); + } else { + message("No text selected to copy"); + } +} + +void handlePaste() { + buffer.paste_clipboard(clipboard, null, true); + message("Text pasted"); +} + +void handleCut() { + if (buffer.get_has_selection()) { + buffer.cut_clipboard(clipboard, true); + message("Text cut to clipboard"); + } else { + message("No text selected to cut"); + } +} From a7b4a1f80ecf9a930853e05ea3be4e29c5ae0129 Mon Sep 17 00:00:00 2001 From: PaladinDev Date: Tue, 8 Aug 2023 18:09:20 +0300 Subject: [PATCH 2/3] Fix for code review --- src/Library/demos/Text View/main.vala | 61 +++++++++++---------------- 1 file changed, 24 insertions(+), 37 deletions(-) diff --git a/src/Library/demos/Text View/main.vala b/src/Library/demos/Text View/main.vala index 8ae576e52..4c388f607 100644 --- a/src/Library/demos/Text View/main.vala +++ b/src/Library/demos/Text View/main.vala @@ -1,9 +1,5 @@ #!/usr/bin/env -S vala workbench.vala --pkg gtk4 --pkg libadwaita-1 -Gtk.TextBuffer buffer; -Gdk.Display display; -Gdk.Clipboard clipboard; - void main () { var textview = (Gtk.TextView) workbench.builder.get_object("textview"); var select = (Gtk.Button) workbench.builder.get_object("select"); @@ -12,18 +8,32 @@ void main () { var clear = (Gtk.Button) workbench.builder.get_object("clear"); var paste = (Gtk.Button) workbench.builder.get_object("paste"); - display = Gdk.Display.get_default(); - clipboard = display.get_clipboard(); - buffer = textview.buffer; + Gdk.Display display = Gdk.Display.get_default(); + Gdk.Clipboard clipboard = display.get_clipboard(); + Gtk.TextBuffer buffer = textview.buffer; - buffer.set_text( - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vel elit scelerisque mauris pellentesque pulvinar. Molestie nunc non blandit massa enim nec dui nunc. Turpis in eu mi bibendum neque egestas congue quisque. Sed velit dignissim sodales ut. Massa tempor nec feugiat nisl pretium fusce id velit. Vitae congue eu consequat ac felis donec et. Ultrices sagittis orci a scelerisque purus semper eget duis at. Habitant morbi tristique senectus et netus et malesuada fames ac. Vitae aliquet nec ullamcorper sit amet risus nullam. Tortor at auctor urna nunc. Eget velit aliquet sagittis id consectetur purus. Libero id faucibus nisl tincidunt eget. Nunc consequat interdum varius sit amet mattis. Enim facilisis gravida neque convallis. Dolor sit amet consectetur adipiscing elit ut aliquam purus. Venenatis tellus in metus vulputate eu scelerisque.Sit amet luctus venenatis lectus magna fringilla urna. Eget nunc lobortis mattis aliquam. Urna duis convallis convallis tellus id interdum velit. Fames ac turpis egestas maecenas. Venenatis lectus magna fringilla urna porttitor rhoncus dolor. Egestas erat imperdiet sed euismod nisi porta lorem mollis aliquam. Eget est lorem ipsum dolor sit amet consectetur. Eget nunc lobortis mattis aliquam faucibus purus in. Iaculis nunc sed augue lacus viverra vitae. Euismod elementum nisi quis eleifend. Et pharetra pharetra massa massa ultricies mi quis. Volutpat odio facilisis mauris sit. Enim ut tellus elementum sagittis vitae et. Volutpat sed cras ornare arcu dui vivamus arcu felis. Arcu vitae elementum curabitur vitae nunc sed. Porttitor rhoncus dolor purus non enim. Scelerisque fermentum dui faucibus in ornare quam viverra. Amet purus gravida quis blandit turpis cursus. Faucibus pulvinar elementum integer enim. Aenean et tortor at risus viverra adipiscing at in.Vitae ultricies leo integer malesuada nunc vel. Quis lectus nulla at volutpat diam ut. Donec ac odio tempor orci dapibus ultrices. Justo eget magna fermentum iaculis eu non diam. Mauris cursus mattis molestie a iaculis at erat pellentesque. Phasellus faucibus scelerisque eleifend donec pretium. Blandit volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque. Habitant morbi tristique senectus et netus. Nunc faucibus a pellentesque sit amet porttitor eget dolor. Nulla malesuada pellentesque elit eget. Tortor vitae purus faucibus ornare suspendisse sed nisi lacus sed. Sollicitudin ac orci phasellus egestas tellus. In hendrerit gravida rutrum quisque non tellus orci ac. Suspendisse ultrices gravida dictum fusce ut placerat. Varius morbi enim nunc faucibus. Tellus elementum sagittis vitae et leo duis ut diam. Velit dignissim sodales ut eu sem integer. Sapien eget mi proin sed libero enim. Odio euismod lacinia at quis risus. Tellus at urna condimentum mattis pellentesque id.", - -1 - ); + buffer.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vel elit scelerisque mauris pellentesque pulvinar. Molestie nunc non blandit massa enim nec dui nunc. Turpis in eu mi bibendum neque egestas congue quisque. Sed velit dignissim sodales ut. Massa tempor nec feugiat nisl pretium fusce id velit. Vitae congue eu consequat ac felis donec et. Ultrices sagittis orci a scelerisque purus semper eget duis at. Habitant morbi tristique senectus et netus et malesuada fames ac. Vitae aliquet nec ullamcorper sit amet risus nullam. Tortor at auctor urna nunc. Eget velit aliquet sagittis id consectetur purus. Libero id faucibus nisl tincidunt eget. Nunc consequat interdum varius sit amet mattis. Enim facilisis gravida neque convallis. Dolor sit amet consectetur adipiscing elit ut aliquam purus. Venenatis tellus in metus vulputate eu scelerisque.Sit amet luctus venenatis lectus magna fringilla urna. Eget nunc lobortis mattis aliquam. Urna duis convallis convallis tellus id interdum velit. Fames ac turpis egestas maecenas. Venenatis lectus magna fringilla urna porttitor rhoncus dolor. Egestas erat imperdiet sed euismod nisi porta lorem mollis aliquam. Eget est lorem ipsum dolor sit amet consectetur. Eget nunc lobortis mattis aliquam faucibus purus in. Iaculis nunc sed augue lacus viverra vitae. Euismod elementum nisi quis eleifend. Et pharetra pharetra massa massa ultricies mi quis. Volutpat odio facilisis mauris sit. Enim ut tellus elementum sagittis vitae et. Volutpat sed cras ornare arcu dui vivamus arcu felis. Arcu vitae elementum curabitur vitae nunc sed. Porttitor rhoncus dolor purus non enim. Scelerisque fermentum dui faucibus in ornare quam viverra. Amet purus gravida quis blandit turpis cursus. Faucibus pulvinar elementum integer enim. Aenean et tortor at risus viverra adipiscing at in.Vitae ultricies leo integer malesuada nunc vel. Quis lectus nulla at volutpat diam ut. Donec ac odio tempor orci dapibus ultrices. Justo eget magna fermentum iaculis eu non diam. Mauris cursus mattis molestie a iaculis at erat pellentesque. Phasellus faucibus scelerisque eleifend donec pretium. Blandit volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque. Habitant morbi tristique senectus et netus. Nunc faucibus a pellentesque sit amet porttitor eget dolor. Nulla malesuada pellentesque elit eget. Tortor vitae purus faucibus ornare suspendisse sed nisi lacus sed. Sollicitudin ac orci phasellus egestas tellus. In hendrerit gravida rutrum quisque non tellus orci ac. Suspendisse ultrices gravida dictum fusce ut placerat. Varius morbi enim nunc faucibus. Tellus elementum sagittis vitae et leo duis ut diam. Velit dignissim sodales ut eu sem integer. Sapien eget mi proin sed libero enim. Odio euismod lacinia at quis risus. Tellus at urna condimentum mattis pellentesque id."; - copy.clicked.connect(handleCopy); - paste.clicked.connect(handlePaste); - cut.clicked.connect(handleCut); + copy.clicked.connect(() => { + if (buffer.get_has_selection()) { + buffer.copy_clipboard(clipboard); + message("Text copied to clipboard"); + } else { + message("No text selected to copy"); + } + }); + paste.clicked.connect(() => { + buffer.paste_clipboard(clipboard, null, true); + message("Text pasted"); + }); + cut.clicked.connect(() => { + if (buffer.get_has_selection()) { + buffer.cut_clipboard(clipboard, true); + message("Text cut to clipboard"); + } else { + message("No text selected to cut"); + } + }); select.clicked.connect(() => { Gtk.TextIter start, end; @@ -51,26 +61,3 @@ void main () { message("Text pasted"); }); } - -void handleCopy() { - if (buffer.get_has_selection()) { - buffer.copy_clipboard(clipboard); - message("Text copied to clipboard"); - } else { - message("No text selected to copy"); - } -} - -void handlePaste() { - buffer.paste_clipboard(clipboard, null, true); - message("Text pasted"); -} - -void handleCut() { - if (buffer.get_has_selection()) { - buffer.cut_clipboard(clipboard, true); - message("Text cut to clipboard"); - } else { - message("No text selected to cut"); - } -} From 2220c2a8dc1dbca4c8044a54c05cb8c06019249c Mon Sep 17 00:00:00 2001 From: PaladinDev Date: Wed, 9 Aug 2023 20:28:22 +0300 Subject: [PATCH 3/3] Fix for code review #2 --- src/Library/demos/Text View/main.vala | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/Library/demos/Text View/main.vala b/src/Library/demos/Text View/main.vala index 4c388f607..0929c7f09 100644 --- a/src/Library/demos/Text View/main.vala +++ b/src/Library/demos/Text View/main.vala @@ -51,13 +51,7 @@ void main () { buffer.@delete(ref start, ref end); }); - textview.copy_clipboard.connect(() => { - message("Text copied to clipboard"); - }); - textview.cut_clipboard.connect(() => { - message("Text cut to clipboard"); - }); - textview.paste_clipboard.connect(() => { - message("Text pasted"); - }); + textview.copy_clipboard.connect(() => message("Text copied to clipboard")); + textview.cut_clipboard.connect(() => message("Text cut to clipboard")); + textview.paste_clipboard.connect(() => message("Text pasted")); }