From aed28a026c82cfd6a57294c4bb537a5f216d884e Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sat, 18 Mar 2023 02:25:04 -0500 Subject: [PATCH] Template file watcher, them selection popover, added needed controls --- src/core/widgets/base/banner_controls.py | 5 +- src/core/widgets/base/editer_notebook.py | 102 +++++++++++++++--- src/core/widgets/base/source_view.py | 54 +++++++--- src/core/widgets/base/sourceview_container.py | 46 ++++++++ .../widgets/controls/scale_down_button.py | 2 +- src/core/widgets/controls/scale_up_button.py | 2 +- src/core/widgets/controls/theme_button.py | 78 ++++++++++++++ .../widgets/controls/toggle_line_highlight.py | 3 +- .../usr/share/newton_editor/icons/brain.png | Bin 0 -> 26603 bytes 9 files changed, 259 insertions(+), 33 deletions(-) create mode 100644 src/core/widgets/base/sourceview_container.py create mode 100644 src/core/widgets/controls/theme_button.py create mode 100644 user_config/usr/share/newton_editor/icons/brain.png diff --git a/src/core/widgets/base/banner_controls.py b/src/core/widgets/base/banner_controls.py index 3682ef4..bd2f0e1 100644 --- a/src/core/widgets/base/banner_controls.py +++ b/src/core/widgets/base/banner_controls.py @@ -6,6 +6,7 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports +from ..controls.theme_button import ThemeButton from ..controls.toggle_line_highlight import ToggleLineHighlight from ..controls.scale_up_button import ScaleUpButton from ..controls.scale_down_button import ScaleDownButton @@ -31,9 +32,7 @@ class BannerControls(Gtk.Box): ... def _load_widgets(self): - # styles_chooser_button = GtkSource.StyleSchemeChooserButton() - self.add(ToggleLineHighlight()) - # self.add(styles_chooser_button) self.add(ScaleUpButton()) self.add(ScaleDownButton()) + self.pack_end(ThemeButton(), False, False, 0) diff --git a/src/core/widgets/base/editer_notebook.py b/src/core/widgets/base/editer_notebook.py index 0af3c31..f283669 100644 --- a/src/core/widgets/base/editer_notebook.py +++ b/src/core/widgets/base/editer_notebook.py @@ -6,8 +6,7 @@ gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports -from ..tab_header_widget import TabHeaderWidget -from .source_view import SourceView +from .sourceview_container import SourceViewContainer @@ -15,37 +14,73 @@ class EditorNotebook(Gtk.Notebook): def __init__(self): super(EditorNotebook, self).__init__() + self.set_group_name("editor_widget") + + self._add_action_widgets() self._setup_styling() self._setup_signals() + self._subscribe_to_events() self._load_widgets() self.show_all() def _setup_styling(self): - ... + self.set_scrollable(True) def _setup_signals(self): ... + def _subscribe_to_events(self): + # event_system.subscribe("set_buffer_language", self.action_controller, *("set_buffer_language",)) + event_system.subscribe("set_buffer_style", self.action_controller) + event_system.subscribe("set_buffer_language", self.action_controller) + event_system.subscribe("set_buffer_style", self.action_controller) + event_system.subscribe("toggle_highlight_line", self.action_controller) + event_system.subscribe("scale_up_text", self.action_controller) + event_system.subscribe("scale_down_text", self.action_controller) + + + def _add_action_widgets(self): + start_box = Gtk.Box() + end_box = Gtk.Box() + + search = Gtk.SearchEntry() + search.set_placeholder_text("Search...") + search.connect("changed", self._text_search) + + add_btn = Gtk.Button() + add_btn.set_image( Gtk.Image.new_from_icon_name("add", 4) ) + add_btn.set_always_show_image(True) + add_btn.connect("released", self.create_view) + + end_box.add(add_btn) + end_box.add(search) + + start_box.show_all() + end_box.show_all() + + # PACKTYPE: 0 Start, 1 = End + self.set_action_widget(start_box, 0) + self.set_action_widget(end_box, 1) + def _load_widgets(self): self.create_view() - def create_view(self): - scroll_view = Gtk.ScrolledWindow() - source_view = SourceView() - tab_widget = TabHeaderWidget(scroll_view, source_view, self.close_tab) - scroll_view.add(source_view) + def create_view(self, widget = None, eve = None): + container = SourceViewContainer(self.close_tab) - index = self.append_page(scroll_view, tab_widget) - self.set_tab_detachable(scroll_view, True) - self.set_current_page(index) + index = self.append_page(container, container.get_tab_widget()) + self.set_tab_detachable(container, True) ctx = self.get_style_context() ctx.add_class("notebook-unselected-focus") - self.set_tab_reorderable(scroll_view, True) + self.set_tab_reorderable(container, True) + self.show_all() - def close_tab(self, button, scroll_view, source_view, eve=None): + self.set_current_page(index) + + def close_tab(self, button, scroll_view, source_view, eve = None): if self.get_n_pages() == 1: return @@ -55,3 +90,44 @@ class EditorNotebook(Gtk.Notebook): watcher.cancel() self.remove_page(page_num) + + + + def _text_search(self, widget = None, eve = None): + self.action_controller("do_text_search", widget.get_text()) + + def action_controller(self, action = "", query = ""): + page_num = self.get_current_page() + container = self.get_nth_page( page_num ) + source_view = container.get_source_view() + + if action == "do_text_search": + self.do_text_search(source_view, query) + if action == "set_buffer_language": + self.set_buffer_language(source_view, query) + if action == "set_buffer_style": + self.set_buffer_style(source_view, query) + if action == "toggle_highlight_line": + self.toggle_highlight_line(source_view) + if action == "scale_up_text": + self.scale_up_text(source_view) + if action == "scale_down_text": + self.scale_down_text(source_view) + + def do_text_search(self, query = ""): + source_view.scale_down_text() + + def set_buffer_language(self, source_view, language = "python3"): + source_view.set_buffer_language(language) + + def set_buffer_style(self, source_view, style = "tango"): + source_view.set_buffer_style(style) + + def scale_up_text(self, source_view): + source_view.scale_up_text() + + def scale_down_text(self, source_view): + source_view.scale_down_text() + + def toggle_highlight_line(self, source_view): + source_view.toggle_highlight_line() diff --git a/src/core/widgets/base/source_view.py b/src/core/widgets/base/source_view.py index f91966d..8e18147 100644 --- a/src/core/widgets/base/source_view.py +++ b/src/core/widgets/base/source_view.py @@ -4,6 +4,7 @@ import gi gi.require_version('GtkSource', '4') from gi.repository import GtkSource +from gi.repository import Gio # Application imports @@ -16,6 +17,7 @@ class SourceView(GtkSource.View): self._language_manager = GtkSource.LanguageManager() self._style_scheme_manager = GtkSource.StyleSchemeManager() self._general_style_tag = None + self._file_watcher = None self._buffer = self.get_buffer() @@ -34,13 +36,13 @@ class SourceView(GtkSource.View): self.set_auto_indent(True) self.set_monospace(True) self.set_tab_width(4) - # self.set_show_right_margin(True) - # self.set_right_margin_position(80) + self.set_show_right_margin(True) + self.set_right_margin_position(80) self.set_background_pattern(0) # 0 = None, 1 = Grid - self._set_buffer_language() - self._set_buffer_style() self._create_default_tag() + self.set_buffer_language() + self.set_buffer_style() self.set_vexpand(True) @@ -48,12 +50,7 @@ class SourceView(GtkSource.View): ... def _subscribe_to_events(self): - event_system.subscribe("set_buffer_language", self._set_buffer_language) - event_system.subscribe("set_buffer_style", self._set_buffer_style) - event_system.subscribe("toggle_highlight_line", self.toggle_highlight_line) - event_system.subscribe("scale_up_text", self.scale_up_text) - event_system.subscribe("scale_down_text", self.scale_down_text) - + ... def _load_widgets(self): ... @@ -63,17 +60,46 @@ class SourceView(GtkSource.View): self._general_style_tag.set_property('size', 100) self._general_style_tag.set_property('scale', 100) - def _set_buffer_language(self, language = "python3"): + def set_buffer_language(self, language = "python3"): self._buffer.set_language( self._language_manager.get_language(language) ) - def _set_buffer_style(self, style = "tango"): + def set_buffer_style(self, style = "tango"): self._buffer.set_style_scheme( self._style_scheme_manager.get_scheme(style) ) + def get_file_watcher(self): - return None + return self._file_watcher + + def create_file_watcher(self, file_path = None): + if not file_path: + return + + if self._file_watcher: + self._file_watcher.cancel() + self._file_watcher = None + + self._file_watcher = Gio.File.new_for_path(file_path) \ + .monitor_file([ + Gio.FileMonitorFlags.WATCH_MOVES, + Gio.FileMonitorFlags.WATCH_HARD_LINKS + ], Gio.Cancellable()) + + self._file_watcher.connect("changed", self.file_watch_updates) + + def file_watch_updates(self, file_monitor, file, other_file=None, eve_type=None, data=None): + if settings.is_debug(): + logger.debug(eve_type) + + if eve_type in [Gio.FileMonitorEvent.CREATED, + Gio.FileMonitorEvent.DELETED, + Gio.FileMonitorEvent.RENAMED]: + ... + + if eve_type in [ Gio.FileMonitorEvent.CHANGED ]: + ... - def toggle_highlight_line(self, widget=None, eve=None): + def toggle_highlight_line(self, widget = None, eve = None): self.set_highlight_current_line( not self.get_highlight_current_line() ) def scale_up_text(self, scale_step = 10): diff --git a/src/core/widgets/base/sourceview_container.py b/src/core/widgets/base/sourceview_container.py new file mode 100644 index 0000000..73a4031 --- /dev/null +++ b/src/core/widgets/base/sourceview_container.py @@ -0,0 +1,46 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +# Application imports +from ..tab_header_widget import TabHeaderWidget +from .source_view import SourceView + + + +class SourceViewContainer(Gtk.ScrolledWindow): + def __init__(self, close_tab): + super(SourceViewContainer, self).__init__() + + self._close_tab = close_tab + self._source_view = None + self._tab_widget = None + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + + def _setup_styling(self): + ... + + def _setup_signals(self): + ... + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + self._source_view = SourceView() + self._tab_widget = TabHeaderWidget(self, self._source_view, self._close_tab) + self.add(self._source_view) + + def get_tab_widget(self): + return self._tab_widget + + def get_source_view(self): + return self._source_view diff --git a/src/core/widgets/controls/scale_down_button.py b/src/core/widgets/controls/scale_down_button.py index 5319300..672d1a1 100644 --- a/src/core/widgets/controls/scale_down_button.py +++ b/src/core/widgets/controls/scale_down_button.py @@ -32,4 +32,4 @@ class ScaleDownButton(Gtk.Button): ... def _emit_scale_eve(self, widget, eve = None): - event_system.emit('scale_down_text') + event_system.emit('scale_down_text', ("scale_down_text",)) diff --git a/src/core/widgets/controls/scale_up_button.py b/src/core/widgets/controls/scale_up_button.py index f73409b..67e2b83 100644 --- a/src/core/widgets/controls/scale_up_button.py +++ b/src/core/widgets/controls/scale_up_button.py @@ -32,4 +32,4 @@ class ScaleUpButton(Gtk.Button): ... def _emit_scale_eve(self, widget, eve = None): - event_system.emit('scale_up_text') + event_system.emit('scale_up_text', ("scale_up_text",)) diff --git a/src/core/widgets/controls/theme_button.py b/src/core/widgets/controls/theme_button.py new file mode 100644 index 0000000..293c714 --- /dev/null +++ b/src/core/widgets/controls/theme_button.py @@ -0,0 +1,78 @@ +# Python imports + +# Lib imports +import gi +gi.require_version('Gtk', '3.0') +gi.require_version('GtkSource', '4') +from gi.repository import Gtk +from gi.repository import GtkSource + +# Application imports + + + +class ThemePopover(Gtk.Popover): + """docstring for ThemePopover.""" + + def __init__(self): + super(ThemePopover, self).__init__() + + self._style_choser = None + + self._setup_styling() + self._setup_signals() + self._load_widgets() + + + def _setup_styling(self): + self.set_modal(True) + self.set_position(Gtk.PositionType.BOTTOM) + self.set_size_request(320, 280) + + def _setup_signals(self): + event_system.subscribe("show_theme_popup", self._show_theme_popup) + + def _load_widgets(self): + self._style_choser = GtkSource.StyleSchemeChooserWidget() + self._style_choser.show_all() + self._style_choser.connect("button-release-event", self._set_theme) + + self.add(self._style_choser) + + + def _show_theme_popup(self, widget = None, eve = None): + self.popup() + + def _set_theme(self, widget = None, eve = None): + style_scheme = widget.get_style_scheme() + id = style_scheme.get_id() + event_system.emit('set_buffer_style', ("set_buffer_style", id.lower(),)) + + + +class ThemeButton(Gtk.Button): + def __init__(self): + super(ThemeButton, self).__init__() + + self._setup_styling() + self._setup_signals() + self._subscribe_to_events() + self._load_widgets() + + + def _setup_styling(self): + self.set_label("Themes") + + def _setup_signals(self): + self.connect("clicked", self._show_popover) + + def _subscribe_to_events(self): + ... + + def _load_widgets(self): + popover = ThemePopover() + popover.set_relative_to(self) + + + def _show_popover(self, widget, eve = None): + event_system.emit("show_theme_popup") diff --git a/src/core/widgets/controls/toggle_line_highlight.py b/src/core/widgets/controls/toggle_line_highlight.py index 44df66e..a6033cb 100644 --- a/src/core/widgets/controls/toggle_line_highlight.py +++ b/src/core/widgets/controls/toggle_line_highlight.py @@ -8,6 +8,7 @@ from gi.repository import Gtk # Application imports + class ToggleLineHighlight(Gtk.ToggleButton): def __init__(self): super(ToggleLineHighlight, self).__init__() @@ -31,4 +32,4 @@ class ToggleLineHighlight(Gtk.ToggleButton): ... def _emit_toggle_eve(self, widget, eve = None): - event_system.emit('toggle_highlight_line') + event_system.emit('toggle_highlight_line', ("toggle_highlight_line",)) diff --git a/user_config/usr/share/newton_editor/icons/brain.png b/user_config/usr/share/newton_editor/icons/brain.png new file mode 100644 index 0000000000000000000000000000000000000000..cef2ba194ff06876fac49a8bad72a3cc7a301efd GIT binary patch literal 26603 zcmXtAwLs_m4{GB(#%=Bnh0{QfDAC``W=oQvJ9CsPxJ*-ApL4YF};aXR*mb9>|N zePirI;>lX(0-ZvcD9eOF_kTt7QjihDXPgKr|9M2NZiNFLEf29uS4$rq`+Cp@Wdl6!y%wng-A@bFQ&-y^fRBDEg&!%P%crG zgGq1wlsT+>%LL+k2zD}-P!#_mTt}`PdT=8*~7r@Da&9!Q-rKUFxA(Lf^&oxFBi zQTmGwA07-X2`ZXWrvjthzsNsEi{k4=AAgjwq^J1%UFL8NSgKlFmmz)JS8MFeL*k!^ zTOu-!EW$_zxBuoo4tj$`o;#RGVTqm>V$Vh6>Rp>ph*D)kzxsGN3K+x|`~P6+ou>_y zSsjYOo&x*iC$ilfYJW%urG7>99NHUwiQ7PWj8g@hriALj7;sViCw7L%XmFh%aXd5y zn?FUCSyh$HR<~%gX4OGad^okweFdp#)CtNcLUvVC%H`NliK)k!7xD; zbF^U;Uek&Wi-HKOc&)LJ6n%^+e?hg*Vonk=I=*z}ON%oW?2m~3z~~SZth_YqFM#KN z6D9z6@XN}oNy7Tse(bdabwXcM%%x=!Ag1_n-pAG6%k9V0$&4ff8+<7I{OzCBg=0tg z!R!V3W0RSSE3b%#RO%B15j4c0A6mA1(VpJ0pacK9_JzzBrtt3<(TiEXpHEk01@AAi zow#EQO6z$lKDlOTVlAvHfBe&%SYW+`X{;nAsk^m zm1sZivzNt??@;DYqDSE&rcQZ@1b+{XSEnCHczE!$J$_5MeLt$sbcM%sg?G@1igPe` zQUkHYTR6(ul8AgsWkQsRAAQ`o)_HO@3?7VMe5fmzCWZ#QqOD=GLcigPBM!LyaDT{! zP+hTtl#%j0fr7?DAJB#POwH7J{^_|RadsI*sb%5w*=t8G96EntX*Y5&Wev=V=I`8n4+{WCa?OA`}-{Bz(%KtNSu`bWy#hnCzN&}cjdM0 zEtrEAB99hho%RMqwyFfVzGo7MqgeeNiS$Ek4&II<9KEPR(Ee$)H*QA8w((P8OCVio z9OfbqDBUq#_|JvFULQXbL%c-n(WndK`X^%;GL+8$+T}$o!csN3Fi>!lo1m@iaIFzy za-~Vg|27!$2aGvv1|q0xA2Wfq`atN3sC3J%D04*|+qKxZuP^z2^J+kgqRUkOK9$S_ z{w7~d|9i#BFe}G#W$qbe1?MzoRlaGJXZeXrJLT-mC7(v9;lyIXz<;VIAPW8lqT8I85?I~>ghMRw|nB1Xu|%D(-sz8KDF zJb0OVuP7hT;#ojmS(U72G#cX=pX;I3dc?sSOqg+k_0eQAqETvE{hZcO(PreQ+~_jd zvCUD`Wh|)*@LIY-P%g6a=hfx!FLv2Gmb0_V$l{T3j@U!(Z?#<^llm|OZnc3LF1lKr zvhvfF4XDIc5gjVmyD2`W99hBwYc>*hfpFa&=iM|}+C2#_+GL*dvurcKcO!^Bqk2g# zYG=GMhw8vS{qzcp*#9|O(Sf&aRUwiLv=Z0krPj&v?II9OB3_gCrMVhC079`zglCEG z<7k}TIoD5Gh&Vp9Z+ZCH#5Q5cIy&d;GSU4Mb+FEn)81>|{_~qc)VYgU6Wql|;inq4 z>;}713FV4xi&HJ!TD55DIZc!acigA{7FtPh?wcK-W_hT>9et0L_cZ@ijqMGM#pJAq z2UOPBzOJsYFPGI3XtRtIVV7kBZS*qS%Tt&O(*Mp?v7 zEz1doccxd1OeW}8v?j6dDy5+7KU0K&Y)?Y(-0z#F+e>WEC%vyiKFiuyGEfE|{jvP! ziS+!!cle0Kej-sY=C1J}fyQxDIm1_DZHjA;+Jylk)$Isc zg45H|`{ToUO7hJ9Lj9)?>$)Vx&eESL?tdz+U`*!(Gvp3E#9QS(>a);ZEeu>5jFy@H z6{->@S95`u0lVKPL8&#k3NrRD z0_V36>+f~U=AKkecZk^|8bfG)#!j%~=$@ZsnNt269@*l>^>RvWjIF{kF2vMv-EWbA zE9y8;RIFizLAOS)1`s+%~494ua0VU+wKhrCqeNyyOhGv5bc@ zp%5W)vqm1U-KVv4;r#e;79mx;HOP$KWNLCt(o<{K!?n?;SjRv1i6F}^uSIaq1jBYF z@td>VvrS5ZWz)lTghB$#2;o9--GZPuW1IEEzH@dcK<5}I6%33L_FAYuccB*tf4gSq(u1pceM76 zu0?Mgt~L_3nVImoxUh9QDOXoc1_p-dwKZ^h;sVrtu_%EsLW_>))6{=694ic)K1mP3 zSf$~%f*2W19$eG6Y`cv*Aiud4qL)H&JzmU(^@Jd5emRcY9G-gyTpBrW0@e2&1Jh1O)cBm|8F8AuZl{;D_C~P z6npsVyn(6xBHpEwjGwhneF!G1Ys;n8ugE269^=TWc4lcjD10KFo7%~coO%N>zZ*tO zvK;^4%4CC{`)I08OwWEG3mcpMTGKJe>(hBbd;2#nKMM;wQjaa)XaeUiCvL|buvJS@ z9o~1_WmTP$a&qW|ghy!YjdttsA8FPCqL^C|4Gr^>uT|hiM>GS}_0odU)2)!=%(gb+ z_<*HX!qCtngZkUZaYMLEu)6S7R<;XcG%y&3qe~8|F21RM@GW1I@DSE$Su>!xuyD6w zX+PinTyG6J(NA>4!mu=v+D0MR?LVx}G z50zl2|11!i_zO5VA);@)Kl2MqfqIo*^{Q>?C8aIr$y&?DP*g`sZf*=$*M?9{b!ORu za(VUJS05iiljB@$A1J4il7nGfF{ygcYXX@}w$;IHER=}k>E)?AWydb-?~L{wCi)%oAm!Ae6}&nyCRFy^0A zx9f91^kk+d-0$DNgRo`Ql$E2fs6r9Ml?OZ@_S6+rR7xuBKYaLbaa2~7t6Em#Kbp}% zAt;D`czCGM;)Ihh)TkMk;~VaO8FQ09lM9mO5uW-kFaK6jT|FH%=g(0SCzOGCy|ejg zmgDB|+w->=O$%3Z@7%c}9-s7qfRYlrPtRa1T;EPatnF=SyR2wA625%%scdO^`Jf52 ztK;Lc_e~#7$cZeQ{AuQ(O^5k27Z)WZW$#b)HoEm{Lzq9>iB-);sK5n6?}$|Nox1H# z=k@(*ai&El6O5jnRr>sy3o17}I$B&;mxM~WHxZ+#D)5JZ{1Oi++UGnW`hYY?mYx*h z!b2FEEnrRwT+HFkQ+UnH$xQf}1E#oWY|3N!vf(FGh$LA0iXN`Cv^2iWjS1A501B*| zOJn;tAyH5uJA*svOt|#z?*AmU^BgUR2&3ND9*by{?QAY_PYJo5 z;NyO}$40?p4({9T4n}g%l}(ux|zR|po20z_SnlR18JQ5(!cGr$2n3{ zvHkgzpyy8|h7Lvv8jWQe18nGp(J~Zbzs0Zg_HNdJ�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 J5^)3n{{fx9KCA!$ literal 0 HcmV?d00001