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 a8a7a010ea7..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) @@ -98,9 +101,12 @@ 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;} + #pi-symbol {font-size: 18px; font-family: sans-serif;}""" provider.load_from_data(css) def num_pad_only( self, value ): @@ -152,7 +158,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 +206,15 @@ def compute( self ): b = b.rstrip( locale.localeconv()["decimal_point"] ) except: b = "Error" - self.wTree.get_object( "displayText" ).set_text( b ) - self.eval_string = b + " " # add space to indicate that calculation was last + self.entry.set_text( b ) + self.entry.set_position(len(self.eval_string)) 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,9 +223,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 - self.wTree.get_object( "displayText" ).set_text( str( self.eval_string ) ) + cursor_pos = self.entry.get_position() + self.eval_string = self.eval_string[:cursor_pos] + i + self.eval_string[cursor_pos:] + self.entry.set_text( str( self.eval_string ) ) + if i == 'Pi': + cursor_move = 2 + else: + cursor_move = 1 + self.entry.set_position(cursor_pos + cursor_move) def displayText_changed( self, widget ): self.eval_string = widget.get_text() @@ -232,14 +243,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: - if text[-2:] == "Pi": - self.wTree.get_object( "displayText" ).set_text(text[:-2]) + 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.entry.set_text(text_left[:-2] + text_right) + cursor_move = -2 + elif text_left[-1:] == "P": + self.entry.set_text(text_left[:-1] + text_right[1:]) + cursor_move = -1 else: - self.wTree.get_object( "displayText" ).set_text(text[:-1]) + self.entry.set_text(text_left[:-1] + text_right) + cursor_move = -1 + if cursor_pos > 0: + self.entry.set_position(cursor_pos + cursor_move) def displayLeftBracket( self, widget ): self.displayOperand( "(" )