You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
472 lines
13 KiB
472 lines
13 KiB
/* Copyright (C) 2008-2014 Davide Andreoli (see AUTHORS) |
|
* |
|
* This file is part of calculator. |
|
* calculator. is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU Lesser General Public License as published by |
|
* the Free Software Foundation, either version 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* calculator. is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU Lesser General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU Lesser General Public License |
|
* along with calculator. If not, see <http://www.gnu.org/licenses/>. |
|
*/ |
|
|
|
images { |
|
image: "0.png" COMP; |
|
image: "1.png" COMP; |
|
image: "2.png" COMP; |
|
image: "3.png" COMP; |
|
image: "4.png" COMP; |
|
image: "5.png" COMP; |
|
image: "6.png" COMP; |
|
image: "7.png" COMP; |
|
image: "8.png" COMP; |
|
image: "9.png" COMP; |
|
image: "bg.png" COMP; |
|
image: "canc.png" COMP; |
|
image: "divide.png" COMP; |
|
image: "multiply.png" COMP; |
|
image: "minus.png" COMP; |
|
image: "plus.png" COMP; |
|
image: "point.png" COMP; |
|
image: "result.png" COMP; |
|
image: "m-c.png" COMP; |
|
image: "m-minus.png" COMP; |
|
image: "m-plus.png" COMP; |
|
image: "m-r.png" COMP; |
|
} |
|
|
|
fonts { |
|
font: "Vera.ttf" "vera"; |
|
} |
|
|
|
|
|
collections { |
|
|
|
group { name: "e/gadgets/calculator/icon"; |
|
parts { |
|
part { name: "icon"; |
|
description { |
|
state: "default" 0.0; |
|
aspect: 1.0 1.0; |
|
aspect_preference: BOTH; |
|
image { |
|
normal: "canc.png"; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
group { name: "e/gadgets/calculator/main"; |
|
min: 231 256; |
|
max: 462 512; |
|
script { |
|
public current = 0; //Current float number |
|
public sum = 0; |
|
public sub = 0; |
|
public mul = 0; |
|
public div = 0; |
|
public restart = 0; |
|
public locale = 0; //The ascii value used for '.' by current locale |
|
|
|
public get_locale() |
|
{ |
|
new buf[5]; |
|
snprintf(buf, 4, "%f", 1.1); |
|
set_int(locale, buf[1]); |
|
} |
|
|
|
public calc_digit_add(val) |
|
{ |
|
new buf[32]; |
|
new text[32]; |
|
|
|
get_text(PART:"display", text, 31); |
|
|
|
//need a new number (+.-,*,/ pressed) |
|
if (get_int(restart)) |
|
snprintf(buf, 31, "%i", val); |
|
//point pressed |
|
else if (val == -1) |
|
snprintf(buf, 31, "%i%c", get_int(current), get_int(locale)); |
|
//only the 0 digit is on screen |
|
else if ((text[0] == '0') && (text[1] == 0)) |
|
snprintf(buf, 31, "%i", val); |
|
//Normal: append the number |
|
else |
|
snprintf(buf, 31, "%s%i", text, val); |
|
|
|
set_text(PART:"display", buf); |
|
set_float(current, atof(buf)); |
|
|
|
if (get_int(restart)) |
|
set_int(restart, 0); |
|
} |
|
|
|
public calc_reset() |
|
{ |
|
set_float(current, 0.0); |
|
set_float(sum, 0.0); |
|
set_float(sub, 0.0); |
|
set_float(mul, 0.0); |
|
set_float(div, 0.0); |
|
set_text(PART:"display", "0"); |
|
} |
|
|
|
public calc_result() |
|
{ |
|
new buf[32]; |
|
|
|
if (get_float(sum)) |
|
{ |
|
snprintf(buf, 31, "%f", get_float(sum) + get_float(current)); |
|
set_float(sum, 0.0); |
|
} |
|
else if (get_float(sub)) |
|
{ |
|
snprintf(buf, 31, "%f", get_float(sub) - get_float(current)); |
|
set_float(sub, 0.0); |
|
} |
|
else if (get_float(mul)) |
|
{ |
|
snprintf(buf, 31, "%f", get_float(mul) * get_float(current)); |
|
set_float(mul, 0.0); |
|
} |
|
else if (get_float(div)) |
|
{ |
|
snprintf(buf, 31, "%f", get_float(div) / get_float(current)); |
|
set_float(div, 0.0); |
|
} |
|
else |
|
{ |
|
return; |
|
} |
|
|
|
//remove leading zeroes |
|
new i = 0; |
|
while (buf[i] != 0) i++; |
|
i--; |
|
while (i && (buf[i] == '0')) |
|
{ |
|
buf[i] = 0; |
|
i--; |
|
} |
|
if (buf[i] == get_int(locale)) buf[i] = 0; |
|
|
|
//Set result |
|
set_text(PART:"display", buf); |
|
set_float(current, atof(buf)); |
|
} |
|
|
|
public calc_sum() |
|
{ |
|
if (get_float(sum)) |
|
calc_result(); |
|
set_float(sum, get_float(current)); |
|
set_float(current, 0.0); |
|
set_int(restart, 1); |
|
} |
|
|
|
public calc_sub() |
|
{ |
|
if (get_float(sub)) |
|
calc_result(); |
|
set_float(sub, get_float(current)); |
|
set_float(current, 0.0); |
|
set_int(restart, 1); |
|
} |
|
|
|
public calc_mul() |
|
{ |
|
if (get_float(mul)) |
|
calc_result(); |
|
set_float(mul, get_float(current)); |
|
set_float(current, 0.0); |
|
set_int(restart, 1); |
|
} |
|
|
|
public calc_div() |
|
{ |
|
if (get_float(div)) |
|
calc_result(); |
|
set_float(div, get_float(current)); |
|
set_float(current, 0.0); |
|
set_int(restart, 1); |
|
} |
|
} |
|
|
|
parts { |
|
part { name: "bg"; |
|
type: IMAGE; |
|
mouse_events: 1; |
|
description { state: "default" 0.0; |
|
aspect: 0.9 0.9; |
|
aspect_preference: BOTH; |
|
image { |
|
normal: "bg.png"; |
|
} |
|
} |
|
} |
|
|
|
part { name: "display"; |
|
type: TEXT; |
|
mouse_events: 0; |
|
description { state: "default" 0.0; |
|
color: 68 72 63 200; |
|
rel1 { |
|
relative: 0.07 0.09; |
|
to: "bg"; |
|
} |
|
rel2 { |
|
relative: 0.93 0.22; |
|
to: "bg"; |
|
} |
|
text{ |
|
font: "vera"; |
|
size: 20; |
|
fit: 0 1; |
|
align: 1 0.5; |
|
text: "012345"; |
|
} |
|
} |
|
} |
|
|
|
part { name: "num_bg"; |
|
type: RECT; |
|
mouse_events: 0; |
|
description { state: "default" 0.0; |
|
color: 255 0 255 0; |
|
rel1 { |
|
relative: 0.14 0.27; |
|
to: "bg"; |
|
} |
|
rel2 { |
|
relative: 0.73 0.95; |
|
to: "bg"; |
|
} |
|
} |
|
} |
|
|
|
#define BTN(pname, rel1x, rel1y, rel2x, rel2y) \ |
|
part { name: pname; \ |
|
type: IMAGE; \ |
|
description { state: "default" 0.0; \ |
|
align: 0.5 0.5; \ |
|
image { \ |
|
normal: pname".png"; \ |
|
} \ |
|
rel1 { \ |
|
relative: (rel1x+0.01) (rel1y+0.01); \ |
|
to: "num_bg"; \ |
|
} \ |
|
rel2 { \ |
|
relative: (rel2x-0.01) (rel2y-0.01); \ |
|
to: "num_bg"; \ |
|
} \ |
|
} \ |
|
description { state: "pressed" 0.0; \ |
|
align: 0.5 0.5; \ |
|
image { \ |
|
normal: pname".png"; \ |
|
} \ |
|
rel1 { \ |
|
relative: (rel1x+0.01) (rel1y+0.05); \ |
|
to: "num_bg"; \ |
|
} \ |
|
rel2 { \ |
|
relative: (rel2x-0.01) (rel2y-0.05); \ |
|
to: "num_bg"; \ |
|
} \ |
|
} \ |
|
} |
|
|
|
BTN("0", 0.0, 0.75, 0.33, 1.0) |
|
BTN("1", 0.0, 0.50, 0.33, 0.75) |
|
BTN("2", 0.33, 0.50, 0.66, 0.75) |
|
BTN("3", 0.66, 0.50, 0.99, 0.75) |
|
BTN("4", 0.0, 0.25, 0.33, 0.50) |
|
BTN("5", 0.33, 0.25, 0.66, 0.50) |
|
BTN("6", 0.66, 0.25, 0.99, 0.50) |
|
BTN("7", 0.0, 0.0, 0.33, 0.25) |
|
BTN("8", 0.33, 0.0, 0.66, 0.25) |
|
BTN("9", 0.66, 0.0, 0.99, 0.25) |
|
BTN("point", 0.33, 0.75, 0.66, 1.0) |
|
BTN("result", 0.66, 0.75, 0.99, 1.0) |
|
BTN("canc", 1.03, 0.0, 1.30, 0.20) |
|
BTN("divide", 1.03, 0.20, 1.30, 0.40) |
|
BTN("multiply", 1.03, 0.40, 1.30, 0.60) |
|
BTN("minus", 1.03, 0.60, 1.30, 0.80) |
|
BTN("plus", 1.03, 0.80, 1.30, 1.0) |
|
|
|
} |
|
#define BTN_PROG(__pname) \ |
|
program { name: "pressed_"__pname; \ |
|
signal: "mouse,down,*"; \ |
|
source: __pname; \ |
|
action: STATE_SET "pressed" 0.0; \ |
|
transition: SINUSOIDAL 0.2; \ |
|
target: __pname; \ |
|
after: "released_"__pname; \ |
|
} \ |
|
program { name: "released_"__pname; \ |
|
source: ""; \ |
|
action: STATE_SET "default" 0.0;\ |
|
transition: SINUSOIDAL 0.2; \ |
|
target: __pname; \ |
|
} |
|
|
|
programs { |
|
program { name: "init"; |
|
signal: "load"; |
|
source: ""; |
|
script { |
|
set_text(PART:"display", "0"); |
|
get_locale(); |
|
} |
|
} |
|
|
|
BTN_PROG("0") |
|
BTN_PROG("1") |
|
BTN_PROG("2") |
|
BTN_PROG("3") |
|
BTN_PROG("4") |
|
BTN_PROG("5") |
|
BTN_PROG("6") |
|
BTN_PROG("7") |
|
BTN_PROG("8") |
|
BTN_PROG("9") |
|
BTN_PROG("point") |
|
BTN_PROG("result") |
|
BTN_PROG("canc") |
|
BTN_PROG("divide") |
|
BTN_PROG("multiply") |
|
BTN_PROG("plus") |
|
BTN_PROG("minus") |
|
|
|
program { name: "clicked_0"; |
|
signal: "mouse,down,*"; |
|
source: "0"; |
|
script { |
|
calc_digit_add(0); |
|
} |
|
} |
|
program { name: "clicked_1"; |
|
signal: "mouse,down,*"; |
|
source: "1"; |
|
script { |
|
calc_digit_add(1); |
|
} |
|
} |
|
program { name: "clicked_2"; |
|
signal: "mouse,down,*"; |
|
source: "2"; |
|
script { |
|
calc_digit_add(2); |
|
} |
|
} |
|
program { name: "clicked_3"; |
|
signal: "mouse,down,*"; |
|
source: "3"; |
|
script { |
|
calc_digit_add(3); |
|
} |
|
} |
|
program { name: "clicked_4"; |
|
signal: "mouse,down,*"; |
|
source: "4"; |
|
script { |
|
calc_digit_add(4); |
|
} |
|
} |
|
program { name: "clicked_5"; |
|
signal: "mouse,down,*"; |
|
source: "5"; |
|
script { |
|
calc_digit_add(5); |
|
} |
|
} |
|
program { name: "clicked_6"; |
|
signal: "mouse,down,*"; |
|
source: "6"; |
|
script { |
|
calc_digit_add(6); |
|
} |
|
} |
|
program { name: "clicked_7"; |
|
signal: "mouse,down,*"; |
|
source: "7"; |
|
script { |
|
calc_digit_add(7); |
|
} |
|
} |
|
program { name: "clicked_8"; |
|
signal: "mouse,down,*"; |
|
source: "8"; |
|
script { |
|
calc_digit_add(8); |
|
} |
|
} |
|
program { name: "clicked_9"; |
|
signal: "mouse,down,*"; |
|
source: "9"; |
|
script { |
|
calc_digit_add(9); |
|
} |
|
} |
|
program { name: "clicked_point"; |
|
signal: "mouse,down,*"; |
|
source: "point"; |
|
script { |
|
calc_digit_add(-1); |
|
} |
|
} |
|
program { name: "clicked_canc"; |
|
signal: "mouse,down,*"; |
|
source: "canc"; |
|
script { |
|
calc_reset(); |
|
} |
|
} |
|
program { name: "clicked_plus"; |
|
signal: "mouse,down,*"; |
|
source: "plus"; |
|
script { |
|
calc_sum(); |
|
} |
|
} |
|
program { name: "clicked_minus"; |
|
signal: "mouse,down,*"; |
|
source: "minus"; |
|
script { |
|
calc_sub(); |
|
} |
|
} |
|
program { name: "clicked_multiply"; |
|
signal: "mouse,down,*"; |
|
source: "multiply"; |
|
script { |
|
calc_mul(); |
|
} |
|
} |
|
program { name: "clicked_divide"; |
|
signal: "mouse,down,*"; |
|
source: "divide"; |
|
script { |
|
calc_div(); |
|
} |
|
} |
|
program { name: "clicked_result"; |
|
signal: "mouse,down,*"; |
|
source: "result"; |
|
script { |
|
calc_result(); |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|