From af2f173a82d863d18460983f7fa8542b54faebe1 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Mon, 7 Mar 2011 20:36:25 +0000 Subject: [PATCH] changed: the way how buttons on display tab work suppose we have "123+34+56" in the first edit, then select (bo mouse or a keyboard) "123+34" similar as you would like to copy them to the clipboard, then press a button let we say "sin" - the result is: "sin(123+34)+56" git-svn-id: svn://ttmath.org/publicrep/ttcalc/trunk@343 e52654a7-88a9-db11-a3e9-0013d4bc506e --- CHANGELOG | 8 +- src/languages.cpp | 4 +- src/tabs.cpp | 352 +++++++++++++++++++++++----------------------- 3 files changed, 187 insertions(+), 177 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a7c11df..d6a7dbd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,8 +1,12 @@ -Version 0.9.3 prerelease (2011.02.08): +Version 0.9.3 prerelease (2011.03.07): * added: German translation made by Moritz Beleites * added: on display tab: an option how many digits should be grouped - + * changed: the way how buttons on display tab work + suppose we have "123+34+56" in the first edit, then select + (bo mouse or a keyboard) "123+34" similar as you would like + to copy them to the clipboard, then press a button let we say + "sin" - the result is: "sin(123+34)+56" Version 0.9.2 (2010.09.24): * added: Italian translation made by diff --git a/src/languages.cpp b/src/languages.cpp index 6024efb..cdbbcf8 100644 --- a/src/languages.cpp +++ b/src/languages.cpp @@ -797,8 +797,8 @@ void Languages::InitGuiMessagesTab() " lars.gafvert@gmail.com\r\n" "Włoski Damiano Monaco\r\n" " dmonax@gmail.com\r\n" - "Niemiecki Moritz Beleites\r\n" - " morbel@gmx.net\r\n" + "Niemiecki Moritz Beleites\r\n" + " morbel@gmx.net\r\n" ); InsertGuiPair(about_text_portable_version, " wersja portable"); InsertGuiPair(about_text_exe_packer, "Paker exe: UPX 3.04\r\n"); diff --git a/src/tabs.cpp b/src/tabs.cpp index 278439b..a8b489d 100644 --- a/src/tabs.cpp +++ b/src/tabs.cpp @@ -56,6 +56,153 @@ void PrintErrorCode() GetPrgRes()->GetLanguages()->ErrorMessage(last_code) ); } + + + +int CalcBracketsPrev(const char * buf, int start) +{ +int last; +int brackets; + + last = start; + --start; + + while( true ) + { + for( ; start>=0 && buf[start]!=';' ; --start ) + if( buf[start] != ' ' ) + last = start; + + if( start <= 0 ) + return last; + + --start; // skipping a semicolon + brackets = 0; + + for( ; start>=0 ; --start ) + { + if( buf[start] == '(' ) + ++brackets; + else + if( buf[start] == ')' ) + --brackets; + + if( brackets > 0 ) + { + last = start; + break; + } + } + } +} + + + + + +int CalcBracketsNext(const char * buf, int size, int start) +{ +int last; +int brackets; + + if( start >= size ) + return size; + + last = start; + + while( true ) + { + for( ; start= size ) + { + if( buf[last] == ';' || buf[last] == ' ' ) + return last; + else + return last+1; + } + + ++start; // skipping a semicolon + brackets = 0; + + for( ; startGetBufferTemp(); + start = 0; + end = SendMessage(input, WM_GETTEXT, GetPrgRes()->GetBufferSize(), (LPARAM)buf); + + if( end > 0 ) + { + start = CalcBracketsPrev(buf, sel_start); + end = CalcBracketsNext(buf, end, sel_start); + } +} + + + +void InsertText(const char * first, const char * last, int cursor_back = 0) +{ + HWND input = GetDlgItem(GetPrgRes()->GetMainWindow(), IDC_INPUT_EDIT); + + int start, end; + CalcBracketsPos(input, start, end); + + size_t len_first = strlen(first); + + SendMessage(input, EM_SETSEL, start, start); + SendMessage(input, EM_REPLACESEL, 1, LPARAM(first)); + + SendMessage(input, EM_SETSEL, end+len_first, end+len_first); + SendMessage(input, EM_REPLACESEL, 1, LPARAM(last)); + + if( start == end ) + { + // was empty string - we're setting the cursor inside the texts + SendMessage(input, EM_SETSEL, end+len_first, end+len_first); + } + else + { + size_t len_last = strlen(last); + SendMessage(input, EM_SETSEL, end+len_first+len_last-cursor_back, end+len_first+len_last-cursor_back); + } + + SetFocus(input); +} + + + + /* this functions inserts a given string into the first edit control and then moves the caret @@ -117,7 +264,7 @@ return true; BOOL WmTabCommand_Press_sin(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("sin()",-1); + InsertText("sin(", ")"); return true; } @@ -125,7 +272,7 @@ return true; BOOL WmTabCommand_Press_cos(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("cos()",-1); + InsertText("cos(", ")"); return true; } @@ -133,7 +280,7 @@ return true; BOOL WmTabCommand_Press_tan(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("tan()",-1); + InsertText("tan(", ")"); return true; } @@ -141,7 +288,7 @@ return true; BOOL WmTabCommand_Press_cot(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("cot()",-1); + InsertText("cot(", ")"); return true; } @@ -149,7 +296,7 @@ return true; BOOL WmTabCommand_Press_ln(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("ln()",-1); + InsertText("ln(", ")"); return true; } @@ -157,7 +304,7 @@ return true; BOOL WmTabCommand_Press_log(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("log( ; 2)",-5); + InsertText("log(", " ; )", 1); return true; } @@ -165,7 +312,7 @@ return true; BOOL WmTabCommand_Press_abs(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("abs()",-1); + InsertText("abs(", ")"); return true; } @@ -173,7 +320,7 @@ return true; BOOL WmTabCommand_Press_factorial(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("factorial()",-1); + InsertText("factorial(", ")"); return true; } @@ -251,38 +398,42 @@ return true; BOOL WmTabCommand_Press_asin(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("asin()",-1); + InsertText("asin(", ")"); return true; } BOOL WmTabCommand_Press_acos(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("acos()",-1); + InsertText("acos(", ")"); return true; } + BOOL WmTabCommand_Press_atan(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("atan()",-1); + InsertText("atan(", ")"); return true; } + BOOL WmTabCommand_Press_acot(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("acot()",-1); + InsertText("acot(", ")"); return true; } + BOOL WmTabCommand_Press_sgn(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("sgn()",-1); + InsertText("sgn(", ")"); return true; } + BOOL WmTabCommand_Press_mod(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("mod(;)",-2); + InsertText("mod(", " ; )", 1); return true; } @@ -298,7 +449,7 @@ return true; BOOL WmTabCommand_Press_int(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("int()",-1); + InsertText("int(", ")"); return true; } @@ -306,7 +457,7 @@ return true; BOOL WmTabCommand_Press_round(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("round()",-1); + InsertText("round(", ")"); return true; } @@ -314,7 +465,7 @@ return true; BOOL WmTabCommand_Press_exp(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("exp()",-1); + InsertText("exp(", ")"); return true; } @@ -1051,140 +1202,11 @@ return true; -int CalcBracketsPrev(const char * buf, int start) -{ -int last; -int brackets; - - last = start; - --start; - - while( true ) - { - for( ; start>=0 && buf[start]!=';' ; --start ) - if( buf[start] != ' ' ) - last = start; - - if( start <= 0 ) - return last; - - --start; // skipping a semicolon - brackets = 0; - - for( ; start>=0 ; --start ) - { - if( buf[start] == '(' ) - ++brackets; - else - if( buf[start] == ')' ) - --brackets; - - if( brackets > 0 ) - { - last = start; - break; - } - } - } -} - - - -int CalcBracketsNext(const char * buf, int size, int start) -{ -int last; -int brackets; - - if( start >= size ) - return size; - - last = start; - - while( true ) - { - for( ; start= size ) - { - if( buf[last] == ';' || buf[last] == ' ' ) - return last; - else - return last+1; - } - - ++start; // skipping a semicolon - brackets = 0; - - for( ; start 0 ) - { - const char * buf = new char[end+sizeof(WORD)]; - *(WORD*)(buf) = end; - SendMessage(input, EM_GETLINE, 0, (LPARAM)buf); - - start = CalcBracketsPrev(buf, sel_start); - end = CalcBracketsNext(buf, end, sel_start); - - delete [] buf; - } -} - BOOL WmTabCommand_Press_bracketsall(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - HWND main = GetPrgRes()->GetMainWindow(); - HWND input = GetDlgItem(main, IDC_INPUT_EDIT); - - int start, end; - CalcBracketsPos(input, start, end); - - SendMessage(input, EM_SETSEL, start, start); - SendMessage(input, EM_REPLACESEL, 1, LPARAM("(")); - - SendMessage(input, EM_SETSEL, end+1, end+1); - SendMessage(input, EM_REPLACESEL, 1, LPARAM(")")); - - if( start == end ) - // was empty string - we're setting the cursor inside the brackets - SendMessage(input, EM_SETSEL, end+1, end+1); - - SetFocus(input); + InsertText("(", ")"); return true; } @@ -1192,23 +1214,7 @@ return true; BOOL WmTabCommand_Press_1div_bracketsall(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - HWND main = GetPrgRes()->GetMainWindow(); - HWND input = GetDlgItem(main, IDC_INPUT_EDIT); - - int start, end; - CalcBracketsPos(input, start, end); - - SendMessage(input, EM_SETSEL, start, start); - SendMessage(input, EM_REPLACESEL, 1, LPARAM("1/(")); - - SendMessage(input, EM_SETSEL, end+3, end+3); - SendMessage(input, EM_REPLACESEL, 1, LPARAM(")")); - - if( start == end ) - // was empty string - we're setting the cursor inside the brackets - SendMessage(input, EM_SETSEL, end+3, end+3); - - SetFocus(input); + InsertText("1/(", ")"); return true; } @@ -1232,7 +1238,7 @@ return true; BOOL WmTabCommand_Press_floor(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("floor()", -1); + InsertText("floor(", ")"); return true; } @@ -1240,7 +1246,7 @@ return true; BOOL WmTabCommand_Press_ceil(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("ceil()", -1); + InsertText("ceil(", ")"); return true; } @@ -1248,7 +1254,7 @@ return true; BOOL WmTabCommand_Press_min(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("min()", -1); + InsertText("min(", ")"); return true; } @@ -1256,7 +1262,7 @@ return true; BOOL WmTabCommand_Press_max(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("max()", -1); + InsertText("max(", ")"); return true; } @@ -1264,7 +1270,7 @@ return true; BOOL WmTabCommand_Press_avg(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("avg()", -1); + InsertText("avg(", ")"); return true; } @@ -1272,7 +1278,7 @@ return true; BOOL WmTabCommand_Press_sum(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("sum()", -1); + InsertText("sum(", ")"); return true; } @@ -1280,7 +1286,7 @@ return true; BOOL WmTabCommand_Press_root(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("root( ; 2)", -5); + InsertText("root(", " ; )", 1); return true; } @@ -1288,14 +1294,14 @@ return true; BOOL WmTabCommand_Press_gamma(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("gamma()", -1); + InsertText("gamma(", ")"); return true; } BOOL WmTabCommand_Press_sqrt(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - InsertText("sqrt()", -1); + InsertText("sqrt(", ")"); return true; }