@@ -87,6 +87,9 @@ def __init__( self, *a, **kw ):
8787 self .wTree .connect_signals ( dic )
8888 self .entry = self .wTree .get_object ( "displayText" )
8989 self .entry .modify_font ( Pango .FontDescription ( self .font ) )
90+ self .wTree .get_object ( "Backspace" ).set_label ("\u232B " )
91+ self .wTree .get_object ( "Pi" ).set_label ("\u03c0 " )
92+ self .wTree .get_object ( "Pi" ).set_name ("pi-symbol" )
9093 self .calc_box = self .wTree .get_object ( "calc_box" )
9194 self .calc_box .set_vexpand (True )
9295 self .calc_box .set_hexpand (True )
@@ -98,9 +101,12 @@ def __init__( self, *a, **kw ):
98101 # Use CSS style for buttons
99102 screen = Gdk .Screen .get_default ()
100103 provider = Gtk .CssProvider ()
101- style_context = Gtk .StyleContext ()
104+ self .calc_box .set_name ("calc_widget" )
105+ style_context = self .calc_box .get_style_context ()
102106 style_context .add_provider_for_screen (screen , provider , Gtk .STYLE_PROVIDER_PRIORITY_APPLICATION )
103- css = b"button {padding: 0;}"
107+ css = b"""
108+ #calc_widget {font-size: 15px;}
109+ #pi-symbol {font-size: 18px; font-family: sans-serif;}"""
104110 provider .load_from_data (css )
105111
106112 def num_pad_only ( self , value ):
@@ -152,7 +158,7 @@ def set_value( self, value ):
152158 def get_value ( self ):
153159 self .compute ()
154160 try :
155- value = self .wTree . get_object ( "displayText" ) .get_text ()
161+ value = self .entry .get_text ()
156162 return locale .atof ( value )
157163 except :
158164 return None
@@ -200,15 +206,15 @@ def compute( self ):
200206 b = b .rstrip ( locale .localeconv ()["decimal_point" ] )
201207 except :
202208 b = "Error"
203- self .wTree . get_object ( "displayText" ) .set_text ( b )
204- self .eval_string = b + " " # add space to indicate that calculation was last
209+ self .entry .set_text ( b )
210+ self .entry . set_position ( len ( self . eval_string ))
205211
206212 def delete ( self ):
207213 self .eval_string = ''
208- self .wTree . get_object ( "displayText" ) .set_text ( "" )
214+ self .entry .set_text ( "" )
209215
210216 def displayOperand ( self , i ):
211- if self .wTree . get_object ( "displayText" ) .get_selection_bounds ():
217+ if self .entry .get_selection_bounds ():
212218 self .delete ()
213219 if "Error" in self .eval_string :
214220 self .eval_string = ""
@@ -217,9 +223,14 @@ def displayOperand( self, i ):
217223 if i not in "+-*/" and self .eval_string != "" :
218224 if self .eval_string [- 1 ] == " " :
219225 self .eval_string = ""
220-
221- self .eval_string = self .eval_string + i
222- self .wTree .get_object ( "displayText" ).set_text ( str ( self .eval_string ) )
226+ cursor_pos = self .entry .get_position ()
227+ self .eval_string = self .eval_string [:cursor_pos ] + i + self .eval_string [cursor_pos :]
228+ self .entry .set_text ( str ( self .eval_string ) )
229+ if i == 'Pi' :
230+ cursor_move = 2
231+ else :
232+ cursor_move = 1
233+ self .entry .set_position (cursor_pos + cursor_move )
223234
224235 def displayText_changed ( self , widget ):
225236 self .eval_string = widget .get_text ()
@@ -232,14 +243,24 @@ def displayClr( self, widget ):
232243 self .delete ()
233244
234245 def displayBackspace ( self , widget ):
235- text = self .wTree . get_object ( "displayText" ) .get_text ()
246+ text = self .entry .get_text ()
236247 if (text == "Error" ):
237248 self .delete ()
238249 else :
239- if text [- 2 :] == "Pi" :
240- self .wTree .get_object ( "displayText" ).set_text (text [:- 2 ])
250+ cursor_pos = self .entry .get_position ()
251+ text_left = self .eval_string [:cursor_pos ]
252+ text_right = self .eval_string [cursor_pos :]
253+ if text_left [- 2 :] == "Pi" :
254+ self .entry .set_text (text_left [:- 2 ] + text_right )
255+ cursor_move = - 2
256+ elif text_left [- 1 :] == "P" :
257+ self .entry .set_text (text_left [:- 1 ] + text_right [1 :])
258+ cursor_move = - 1
241259 else :
242- self .wTree .get_object ( "displayText" ).set_text (text [:- 1 ])
260+ self .entry .set_text (text_left [:- 1 ] + text_right )
261+ cursor_move = - 1
262+ if cursor_pos > 0 :
263+ self .entry .set_position (cursor_pos + cursor_move )
243264
244265 def displayLeftBracket ( self , widget ):
245266 self .displayOperand ( "(" )
0 commit comments