Merge lp:~f-riccardo87/ubuntu-calculator-app/plus-minus-improved into lp:~ubuntu-calculator-dev/ubuntu-calculator-app/old_trunk

Proposed by Riccardo Ferrazzo
Status: Merged
Approved by: Dalius
Approved revision: 32
Merged at revision: 32
Proposed branch: lp:~f-riccardo87/ubuntu-calculator-app/plus-minus-improved
Merge into: lp:~ubuntu-calculator-dev/ubuntu-calculator-app/old_trunk
Diff against target: 150 lines (+62/-31)
2 files modified
Simple/SimplePage.qml (+62/-30)
engine.js (+0/-1)
To merge this branch: bzr merge lp:~f-riccardo87/ubuntu-calculator-app/plus-minus-improved
Reviewer Review Type Date Requested Status
Dalius (community) Approve
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Review via email: mp+153844@code.launchpad.net

Commit message

Plus-minus logic improved

Description of the change

Plus minus logic improved

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Dalius (dalius-sandbox) wrote :

I would love to use unit-tested this.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Simple/SimplePage.qml'
--- Simple/SimplePage.qml 2013-03-18 08:18:19 +0000
+++ Simple/SimplePage.qml 2013-03-18 15:41:32 +0000
@@ -5,64 +5,96 @@
5Page {5Page {
66
7 property var context: new CALC.Context;7 property var context: new CALC.Context;
8 property var scanner;8 property var scanner: new CALC.Scanner(engineFormula.join(''), context);
9 property string answer: ''9 property string answer: ''
10 property var screenFormula: [{_text:'', _operation:'', _number:''}]10 property var screenFormula: [{_text:'', _operation: '', _number:''}]
11 property var engineFormula: ['']11 property var engineFormula: ['']
1212
13 function formulaPush(visual, engine) {13 function formulaPush(visual, engine) {
14 if(screenFormula.length === 0){
15 screenFormula.push({_text:'', _operation: '', _number:''});
16 }
17 if(engineFormula.length === 0){
18 engineFormula.push('');
19 }
14 try{20 try{
15 scanner = new CALC.Scanner(engineFormula.join('') + engine, context);21 var n_scanner = new CALC.Scanner(engineFormula.join('') + engine, context);
16 } catch(exception) {22 } catch(exception) {
17 console.log(exception)23 console.log("errore",exception)
18 return;24 return;
19 }25 }
20 if(scanner.tokens.length > 1){26 if(n_scanner.tokens.length > 1){
21 switch(scanner.tokens.last().type){27 switch(n_scanner.tokens.last().type){
22 case CALC.T_PLUS:28 case CALC.T_PLUS:
23 case CALC.T_MINUS:29 case CALC.T_MINUS:
24 case CALC.T_DIV:30 case CALC.T_DIV:
25 case CALC.T_TIMES:31 case CALC.T_TIMES:
26 if(scanner.tokens[scanner.tokens.length-2].type & CALC.T_OPERATOR) return;32 if(n_scanner.tokens[n_scanner.tokens.length-2].type & CALC.T_OPERATOR) return;
33 scanner = n_scanner;
27 screenFormula.push({_text:'', _operation: '', _number:''});34 screenFormula.push({_text:'', _operation: '', _number:''});
28 screenFormula[screenFormula.length-1]._operation = visual;35 screenFormula[screenFormula.length-1]._operation = visual;
36 engineFormula.push('');
29 engineFormula[engineFormula.length-1] += engine;37 engineFormula[engineFormula.length-1] += engine;
30 engineFormula.push('');
31 formulaView.currentOperatorsChanged();38 formulaView.currentOperatorsChanged();
32 return;39 return;
33 case CALC.T_UNARY_PLUS:40 case CALC.T_UNARY_PLUS:
34 case CALC.T_UNARY_MINUS:41 case CALC.T_UNARY_MINUS:
35 if(scanner.tokens[scanner.tokens.length-2].type === CALC.T_UNARY_MINUS ||42 if(n_scanner.tokens[n_scanner.tokens.length-2].type === CALC.T_UNARY_MINUS ||
36 scanner.tokens[scanner.tokens.length-2].type === CALC.T_UNARY_PLUS) return;43 n_scanner.tokens[n_scanner.tokens.length-2].type === CALC.T_UNARY_PLUS ) return;
37 break;44 break;
38 }45 }
39 }46 }
47 scanner = n_scanner;
40 screenFormula[screenFormula.length-1]._number += visual;48 screenFormula[screenFormula.length-1]._number += visual;
41 engineFormula[engineFormula.length-1] += engine;49 engineFormula[engineFormula.length-1] += engine;
42 formulaView.currentOperatorsChanged();50 formulaView.currentOperatorsChanged();
43 }51 }
4452
45 function changeSign(){53 function changeSign(){
46 if(scanner !== undefined && scanner.tokens.length > 0){54 var prev_tokens = [];
47 switch(scanner.tokens.last().type){55 var add_minus = true;
48 case CALC.T_NUMBER:56 screenFormula.pop();
49 if(scanner.tokens.length > 1 && scanner.tokens[scanner.tokens.length-2].type === CALC.T_UNARY_MINUS){57 engineFormula.pop();
50 scanner.tokens.splice(scanner.tokens.length-2,1);58 if(scanner.tokens.length === 0){
51 scanner.tokens.last().value = scanner.tokens.last().value * -159 prev_tokens.push(new CALC.Token('-', CALC.T_UNARY_MINUS));
60 }
61 while(scanner.tokens.length > 0 ){
62 var last = scanner.tokens.pop();
63 if(last.type & CALC.T_OPERATOR &&
64 last.type !== CALC.T_UNARY_MINUS &&
65 last.type !== CALC.T_UNARY_PLUS ){
66 if(add_minus){
67 prev_tokens.push(new CALC.Token('-', CALC.T_UNARY_MINUS));
52 }68 }
53 scanner.tokens.last().value = scanner.tokens.last().value * -169 prev_tokens.push(last);
54 screenFormula[screenFormula.length-1]._number = (scanner.tokens.last().value).toString();70 break;
55 engineFormula[engineFormula.length-1] = (scanner.tokens.last().value).toString();71 }
56 break;72 if(last.type === CALC.T_UNARY_MINUS){
57 case CALC.T_UNARY_MINUS:73 add_minus = false;
58 scanner.tokens.pop();74 continue;
59 screenFormula[screenFormula.length-1]._number = '';75 }
60 engineFormula.pop();76 prev_tokens.push(last);
61 break;77 if(scanner.tokens.length === 0 && add_minus){
62 default:78 prev_tokens.push(new CALC.Token('-', CALC.T_UNARY_MINUS));
63 formulaPush('-', '-');79 }
64 }80 }
65 } else { formulaPush('-','-'); }81 while(prev_tokens.length > 0){
82 var last = prev_tokens.pop();
83 var engine = last.value.toString();
84 var visual = engine;
85 switch(last.type){
86 case CALC.T_TIMES:
87 visual = '×';
88 break;
89 case CALC.T_DIV:
90 visual = '÷';
91 break;
92 case CALC.T_MINUS:
93 visual = "−";
94 break;
95 }
96 formulaPush(visual, engine);
97 }
66 formulaView.currentOperatorsChanged();98 formulaView.currentOperatorsChanged();
67 }99 }
68100
@@ -92,7 +124,7 @@
92124
93 function clear(){125 function clear(){
94 answer = '';126 answer = '';
95 screenFormula = [{_text:'', _operation:'', _number:''}];127 screenFormula = [{_text:'', _operation: '', _number:''}];
96 engineFormula = [''];128 engineFormula = [''];
97 scanner = new CALC.Scanner(engineFormula.join(''), context);129 scanner = new CALC.Scanner(engineFormula.join(''), context);
98 formulaView.currentOperatorsChanged();130 formulaView.currentOperatorsChanged();
99131
=== modified file 'engine.js'
--- engine.js 2013-03-14 15:38:48 +0000
+++ engine.js 2013-03-18 15:41:32 +0000
@@ -204,7 +204,6 @@
204 pop: Array.prototype.pop,204 pop: Array.prototype.pop,
205 shift: Array.prototype.shift,205 shift: Array.prototype.shift,
206 unshift: Array.prototype.unshift,206 unshift: Array.prototype.unshift,
207 splice: Array.prototype.splice,
208207
209 first: function first() {208 first: function first() {
210 // this is actualy faster than checking "this.length" everytime.209 // this is actualy faster than checking "this.length" everytime.

Subscribers

People subscribed via source and target branches