From a22f9b7bef5aaf9d9b6a9ecb56ff513f0b69a411 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 15 Jun 2025 17:17:18 +0200 Subject: [PATCH 1/5] calculatorwidget: Respect cursor position for inserting and deleting instead of always at the end --- lib/python/gladevcp/calculatorwidget.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/python/gladevcp/calculatorwidget.py b/lib/python/gladevcp/calculatorwidget.py index a8a7a010ea7..dc963604820 100644 --- a/lib/python/gladevcp/calculatorwidget.py +++ b/lib/python/gladevcp/calculatorwidget.py @@ -217,9 +217,14 @@ def displayOperand( self, i ): if i not in "+-*/" and self.eval_string != "": if self.eval_string[-1] == " ": self.eval_string = "" - - self.eval_string = self.eval_string + i + cursor_pos = self.wTree.get_object( "displayText" ).get_position() + self.eval_string = self.eval_string[:cursor_pos] + i + self.eval_string[cursor_pos:] self.wTree.get_object( "displayText" ).set_text( str( self.eval_string ) ) + if i == 'Pi': + cursor_move = 2 + else: + cursor_move = 1 + self.wTree.get_object( "displayText" ).set_position(cursor_pos + cursor_move) def displayText_changed( self, widget ): self.eval_string = widget.get_text() @@ -236,10 +241,20 @@ def displayBackspace( self, widget ): if(text == "Error"): self.delete() else: - if text[-2:] == "Pi": - self.wTree.get_object( "displayText" ).set_text(text[:-2]) + cursor_pos = self.wTree.get_object( "displayText" ).get_position() + text_left = self.eval_string[:cursor_pos] + text_right = self.eval_string[cursor_pos:] + if text_left[-2:] == "Pi": + self.wTree.get_object( "displayText" ).set_text(text_left[:-2] + text_right) + cursor_move = -2 + elif text_left[-1:] == "P": + self.wTree.get_object( "displayText" ).set_text(text_left[:-1] + text_right[1:]) + cursor_move = -1 else: - self.wTree.get_object( "displayText" ).set_text(text[:-1]) + self.wTree.get_object( "displayText" ).set_text(text_left[:-1] + text_right) + cursor_move = -1 + if cursor_pos > 0: + self.wTree.get_object( "displayText" ).set_position(cursor_pos + cursor_move) def displayLeftBracket( self, widget ): self.displayOperand( "(" ) From 4f3251f7ddb957f614d2ddbf6029ced3af305ccd Mon Sep 17 00:00:00 2001 From: David Date: Sun, 15 Jun 2025 17:24:16 +0200 Subject: [PATCH 2/5] calculatorwidget: use already defined variable for object "displayText" --- lib/python/gladevcp/calculatorwidget.py | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/python/gladevcp/calculatorwidget.py b/lib/python/gladevcp/calculatorwidget.py index dc963604820..c639c2e8268 100644 --- a/lib/python/gladevcp/calculatorwidget.py +++ b/lib/python/gladevcp/calculatorwidget.py @@ -152,7 +152,7 @@ def set_value( self, value ): def get_value( self ): self.compute() try: - value = self.wTree.get_object( "displayText" ).get_text() + value = self.entry.get_text() return locale.atof( value ) except: return None @@ -200,15 +200,15 @@ def compute( self ): b = b.rstrip( locale.localeconv()["decimal_point"] ) except: b = "Error" - self.wTree.get_object( "displayText" ).set_text( b ) + self.entry.set_text( b ) self.eval_string = b + " " # add space to indicate that calculation was last def delete( self ): self.eval_string = '' - self.wTree.get_object( "displayText" ).set_text( "" ) + self.entry.set_text( "" ) def displayOperand( self, i ): - if self.wTree.get_object( "displayText" ).get_selection_bounds(): + if self.entry.get_selection_bounds(): self.delete() if "Error" in self.eval_string: self.eval_string = "" @@ -217,14 +217,14 @@ def displayOperand( self, i ): if i not in "+-*/" and self.eval_string != "": if self.eval_string[-1] == " ": self.eval_string = "" - cursor_pos = self.wTree.get_object( "displayText" ).get_position() + cursor_pos = self.entry.get_position() self.eval_string = self.eval_string[:cursor_pos] + i + self.eval_string[cursor_pos:] - self.wTree.get_object( "displayText" ).set_text( str( self.eval_string ) ) + self.entry.set_text( str( self.eval_string ) ) if i == 'Pi': cursor_move = 2 else: cursor_move = 1 - self.wTree.get_object( "displayText" ).set_position(cursor_pos + cursor_move) + self.entry.set_position(cursor_pos + cursor_move) def displayText_changed( self, widget ): self.eval_string = widget.get_text() @@ -237,24 +237,24 @@ def displayClr( self, widget ): self.delete() def displayBackspace( self, widget ): - text = self.wTree.get_object( "displayText" ).get_text() + text = self.entry.get_text() if(text == "Error"): self.delete() else: - cursor_pos = self.wTree.get_object( "displayText" ).get_position() + cursor_pos = self.entry.get_position() text_left = self.eval_string[:cursor_pos] text_right = self.eval_string[cursor_pos:] if text_left[-2:] == "Pi": - self.wTree.get_object( "displayText" ).set_text(text_left[:-2] + text_right) + self.entry.set_text(text_left[:-2] + text_right) cursor_move = -2 elif text_left[-1:] == "P": - self.wTree.get_object( "displayText" ).set_text(text_left[:-1] + text_right[1:]) + self.entry.set_text(text_left[:-1] + text_right[1:]) cursor_move = -1 else: - self.wTree.get_object( "displayText" ).set_text(text_left[:-1] + text_right) + self.entry.set_text(text_left[:-1] + text_right) cursor_move = -1 if cursor_pos > 0: - self.wTree.get_object( "displayText" ).set_position(cursor_pos + cursor_move) + self.entry.set_position(cursor_pos + cursor_move) def displayLeftBracket( self, widget ): self.displayOperand( "(" ) From b631796b79d02648207e8e66df5c48a5209c965e Mon Sep 17 00:00:00 2001 From: David Date: Sun, 15 Jun 2025 17:42:34 +0200 Subject: [PATCH 3/5] calculatorwidget: Allow using calculation result in new operations --- lib/python/gladevcp/calculatorwidget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/python/gladevcp/calculatorwidget.py b/lib/python/gladevcp/calculatorwidget.py index c639c2e8268..1cf5b9e5a5f 100644 --- a/lib/python/gladevcp/calculatorwidget.py +++ b/lib/python/gladevcp/calculatorwidget.py @@ -201,7 +201,7 @@ def compute( self ): except: b = "Error" self.entry.set_text( b ) - self.eval_string = b + " " # add space to indicate that calculation was last + self.entry.set_position(len(self.eval_string)) def delete( self ): self.eval_string = '' From fa25e3b2f17b510b9ee86d6d2c2e9604707cb25c Mon Sep 17 00:00:00 2001 From: David Date: Mon, 16 Jun 2025 10:51:31 +0200 Subject: [PATCH 4/5] calculatorwidget: Restrict css style to calculator widget, change font size --- lib/python/gladevcp/calculatorwidget.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/python/gladevcp/calculatorwidget.py b/lib/python/gladevcp/calculatorwidget.py index 1cf5b9e5a5f..462f7a1ee77 100644 --- a/lib/python/gladevcp/calculatorwidget.py +++ b/lib/python/gladevcp/calculatorwidget.py @@ -98,9 +98,10 @@ def __init__( self, *a, **kw ): # Use CSS style for buttons screen = Gdk.Screen.get_default() provider = Gtk.CssProvider() - style_context = Gtk.StyleContext() + self.calc_box.set_name("calc_widget") + style_context = self.calc_box.get_style_context() style_context.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) - css = b"button {padding: 0;}" + css = b"#calc_widget {font-size: 15px;}" provider.load_from_data(css) def num_pad_only( self, value ): From 78ae6b5a1d7545d637fe3d98bbe8bcdf7981e757 Mon Sep 17 00:00:00 2001 From: Hans Unzner Date: Tue, 24 Jun 2025 18:41:29 +0200 Subject: [PATCH 5/5] calculatorwidget: icon changes --- lib/python/gladevcp/calculator.glade | 26 ++++--------------------- lib/python/gladevcp/calculatorwidget.py | 7 ++++++- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/lib/python/gladevcp/calculator.glade b/lib/python/gladevcp/calculator.glade index b2ca6a3f55a..c7b46f6fa6a 100644 --- a/lib/python/gladevcp/calculator.glade +++ b/lib/python/gladevcp/calculator.glade @@ -1,32 +1,18 @@ - + - - True - False - go-previous - True False gtk-cancel - - - True - False - gtk-clear + 3 True False gtk-ok - - - 48 - True - False - pi.png + 3 False @@ -85,7 +71,6 @@ True True True - clr @@ -108,10 +93,10 @@ + Pi True True True - pi @@ -281,7 +266,6 @@ True True True - backspace @@ -317,7 +301,6 @@ - _Cancel_ True True True @@ -332,7 +315,6 @@ - _Ok True True True diff --git a/lib/python/gladevcp/calculatorwidget.py b/lib/python/gladevcp/calculatorwidget.py index 462f7a1ee77..60e4ef08123 100644 --- a/lib/python/gladevcp/calculatorwidget.py +++ b/lib/python/gladevcp/calculatorwidget.py @@ -87,6 +87,9 @@ def __init__( self, *a, **kw ): self.wTree.connect_signals( dic ) self.entry = self.wTree.get_object( "displayText" ) self.entry.modify_font( Pango.FontDescription( self.font ) ) + self.wTree.get_object( "Backspace" ).set_label("\u232B") + self.wTree.get_object( "Pi" ).set_label("\u03c0") + self.wTree.get_object( "Pi" ).set_name("pi-symbol") self.calc_box = self.wTree.get_object( "calc_box" ) self.calc_box.set_vexpand(True) self.calc_box.set_hexpand(True) @@ -101,7 +104,9 @@ def __init__( self, *a, **kw ): self.calc_box.set_name("calc_widget") style_context = self.calc_box.get_style_context() style_context.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) - css = b"#calc_widget {font-size: 15px;}" + css = b""" + #calc_widget {font-size: 15px;} + #pi-symbol {font-size: 18px; font-family: sans-serif;}""" provider.load_from_data(css) def num_pad_only( self, value ):