1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2013-2014 Alexis Laferrière <alexis.laf@xymus.net>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
20 import calculator_logic
28 private var win
: GtkWindow is noinit
29 private var container
: GtkGrid is noinit
31 private var lbl_disp
: GtkLabel is noinit
32 private var but_eq
: GtkButton is noinit
33 private var but_dot
: GtkButton is noinit
35 private var context
= new CalculatorContext
37 redef fun signal
(sender
, op
)
39 if op
isa Char then # is an operation
41 but_dot
.sensitive
= false
42 context
.switch_to_decimals
44 but_dot
.sensitive
= true
47 else if op
isa Int then # is a number
51 lbl_disp
.text
= context
.display_text
58 win
= new GtkWindow(0)
60 container
= new GtkGrid(5, 5, true)
63 lbl_disp
= new GtkLabel("_")
64 container
.attach
(lbl_disp
, 0, 0, 5, 1)
68 var but
= new GtkButton.with_label
(n
.to_s
)
69 but
.request_size
(64, 64)
70 but
.signal_connect
("clicked", self, n
)
72 container
.attach
(but
, 0, 4, 1, 1)
73 else container
.attach
(but
, (n-1
)%3, 3-(n-1
)/3, 1, 1)
78 for op
in ['+', '-', '*', '/'] do
79 var but
= new GtkButton.with_label
(op
.to_s
)
80 but
.request_size
(64, 64)
81 but
.signal_connect
("clicked", self, op
)
82 container
.attach
(but
, 3, r
, 1, 1)
87 but_eq
= new GtkButton.with_label
("=")
88 but_eq
.request_size
(64, 64)
89 but_eq
.signal_connect
("clicked", self, '=')
90 container
.attach
(but_eq
, 4, 3, 1, 2)
93 but_dot
= new GtkButton.with_label
(".")
94 but_dot
.request_size
(64, 64)
95 but_dot
.signal_connect
("clicked", self, '.')
96 container
.attach
(but_dot
, 1, 4, 1, 1)
99 var but_c
= new GtkButton.with_label
("C")
100 but_c
.request_size
(64, 64)
101 but_c
.signal_connect
("clicked", self, 'C')
102 container
.attach
(but_c
, 2, 4, 1, 1)
108 # Do not show GUI in when testing
109 if "NIT_TESTING".environ
== "true" then exit
0
111 var app
= new CalculatorGui