fixed: the clipboard didn't work well
CopyBoth should not use GlobalFree() if SetClipboardData() succeeded added: menu edit: select all, bracket changed: ctrl+c is equivalent to CopySpecial() now if there is a selection on an edit (and the edit has focus) it works as a normal copy but if there isn't any selections then it copies the result git-svn-id: svn://ttmath.org/publicrep/ttcalc/trunk@234 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
d3b0262244
commit
ce272dcb1a
|
@ -3,7 +3,7 @@ Version 0.9.0 prerelease (2009.11.03):
|
||||||
* added: Pad window - a multiline edit window
|
* added: Pad window - a multiline edit window
|
||||||
* added: Checking for update dialog box
|
* added: Checking for update dialog box
|
||||||
* added: there are some new buttons on the standard tab
|
* added: there are some new buttons on the standard tab
|
||||||
- (...) - the whole expression is surrounded by brackets
|
- (...) - the whole expression is surrounded by brackets (ctrl+0 short cut)
|
||||||
- 1/(...)
|
- 1/(...)
|
||||||
- ;
|
- ;
|
||||||
- % - a new percentage operator
|
- % - a new percentage operator
|
||||||
|
|
|
@ -451,7 +451,7 @@ void Languages::InitGuiMessagesTab()
|
||||||
InsertGuiPair(menu_view_close_program, "&Close");
|
InsertGuiPair(menu_view_close_program, "&Close");
|
||||||
InsertGuiPair(menu_edit_undo, "&Undo \tCtrl+Z");
|
InsertGuiPair(menu_edit_undo, "&Undo \tCtrl+Z");
|
||||||
InsertGuiPair(menu_edit_paste_formula, "&Paste formula\tCtrl+V");
|
InsertGuiPair(menu_edit_paste_formula, "&Paste formula\tCtrl+V");
|
||||||
InsertGuiPair(menu_edit_copy_result, "&Copy result \tCtrl+C");
|
InsertGuiPair(menu_edit_copy_result, "&Copy result \tCtrl+R");
|
||||||
InsertGuiPair(menu_help_help, "&Help");
|
InsertGuiPair(menu_help_help, "&Help");
|
||||||
InsertGuiPair(menu_help_project_page, "&Project page");
|
InsertGuiPair(menu_help_project_page, "&Project page");
|
||||||
InsertGuiPair(menu_help_about, "&About");
|
InsertGuiPair(menu_help_about, "&About");
|
||||||
|
|
|
@ -279,7 +279,6 @@ return false;
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
this function is called when CTRL+C has been pressed
|
|
||||||
*/
|
*/
|
||||||
bool CopyResult()
|
bool CopyResult()
|
||||||
{
|
{
|
||||||
|
@ -304,6 +303,36 @@ return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
if the focus is not on an edit window
|
||||||
|
or it is on an edit but the edit has no selection
|
||||||
|
then we're copying the result
|
||||||
|
|
||||||
|
this is used when Ctrl+C is pressed
|
||||||
|
*/
|
||||||
|
bool CopySpecial()
|
||||||
|
{
|
||||||
|
HWND focus = GetFocus();
|
||||||
|
|
||||||
|
if( IsEditControl(focus) )
|
||||||
|
{
|
||||||
|
DWORD sel_start, sel_end;
|
||||||
|
SendMessage(focus, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
|
||||||
|
|
||||||
|
if( sel_start != sel_end ) // something is selected
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyResult();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
this function is called when CTRL+V has been pressed
|
this function is called when CTRL+V has been pressed
|
||||||
this is not Paste but PasteFormula (everything is copied to the input edit, even
|
this is not Paste but PasteFormula (everything is copied to the input edit, even
|
||||||
|
@ -862,6 +891,17 @@ bool can_undo = false;
|
||||||
else
|
else
|
||||||
EnableMenuItem(menu,IDM_EDIT_PASTE_FORMULA,MF_BYCOMMAND | MF_GRAYED);
|
EnableMenuItem(menu,IDM_EDIT_PASTE_FORMULA,MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
|
||||||
|
// select all, bracket
|
||||||
|
if( input_size > 0 )
|
||||||
|
{
|
||||||
|
EnableMenuItem(menu,IDM_EDIT_SELECT_ALL,MF_BYCOMMAND | MF_ENABLED);
|
||||||
|
EnableMenuItem(menu,IDM_EDIT_BRACKET,MF_BYCOMMAND | MF_ENABLED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EnableMenuItem(menu,IDM_EDIT_SELECT_ALL,MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
EnableMenuItem(menu,IDM_EDIT_BRACKET,MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1055,6 +1095,13 @@ BOOL WmCommand_EditDel(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL WmCommand_EditBracket(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDC_BUTTON_BRACKETS_ALL, 0);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOL WmCommand_EditCopyResult(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
BOOL WmCommand_EditCopyResult(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
@ -1070,6 +1117,7 @@ BOOL WmCommand_EditCopyBoth(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
||||||
|
|
||||||
unsigned int in_len = SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_LINELENGTH, 0, 0);
|
unsigned int in_len = SendDlgItemMessage(hWnd, IDC_INPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||||
unsigned int out_len = SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_LINELENGTH, 0, 0);
|
unsigned int out_len = SendDlgItemMessage(hWnd, IDC_OUTPUT_EDIT, EM_LINELENGTH, 0, 0);
|
||||||
|
bool set_correct = false;
|
||||||
|
|
||||||
HGLOBAL global = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, in_len+out_len + 20);
|
HGLOBAL global = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, in_len+out_len + 20);
|
||||||
|
|
||||||
|
@ -1088,15 +1136,24 @@ BOOL WmCommand_EditCopyBoth(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
||||||
std::strcat(text, buf);
|
std::strcat(text, buf);
|
||||||
|
|
||||||
GlobalUnlock(global);
|
GlobalUnlock(global);
|
||||||
SetClipboardData(CF_TEXT, global);
|
set_correct = SetClipboardData(CF_TEXT, global);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseClipboard();
|
CloseClipboard();
|
||||||
|
|
||||||
if( global )
|
/*
|
||||||
|
don't call GlobalFree(global) if SetClipboardData() returned true
|
||||||
|
|
||||||
|
http://msdn.microsoft.com/en-us/library/ms649051%28VS.85%29.aspx
|
||||||
|
If SetClipboardData succeeds, the system owns the object identified by the hMem parameter.
|
||||||
|
The application may not write to or free the data once ownership has been transferred to
|
||||||
|
the system, but it can lock and read from the data until the CloseClipboard function is called
|
||||||
|
*/
|
||||||
|
|
||||||
|
if( global && !set_correct )
|
||||||
GlobalFree(global);
|
GlobalFree(global);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1306,7 +1363,9 @@ void CreateCommandMessagesTable(Messages<BOOL> & cmessages)
|
||||||
cmessages.Associate(IDM_EDIT_CUT, WmCommand_EditCut);
|
cmessages.Associate(IDM_EDIT_CUT, WmCommand_EditCut);
|
||||||
cmessages.Associate(IDM_EDIT_PASTE, WmCommand_EditPaste);
|
cmessages.Associate(IDM_EDIT_PASTE, WmCommand_EditPaste);
|
||||||
cmessages.Associate(IDM_EDIT_DEL, WmCommand_EditDel);
|
cmessages.Associate(IDM_EDIT_DEL, WmCommand_EditDel);
|
||||||
|
cmessages.Associate(IDM_EDIT_BRACKET, WmCommand_EditBracket);
|
||||||
cmessages.Associate(IDCANCEL, WmCommand_IDCANCEL);
|
cmessages.Associate(IDCANCEL, WmCommand_IDCANCEL);
|
||||||
|
cmessages.Associate(IDM_EDIT_SELECT_ALL, WmCommand_IDCANCEL);
|
||||||
cmessages.Associate(IDM_LANGUAGE_ENGLISH, WmCommand_LanguageEnglish);
|
cmessages.Associate(IDM_LANGUAGE_ENGLISH, WmCommand_LanguageEnglish);
|
||||||
cmessages.Associate(IDM_LANGUAGE_POLISH, WmCommand_LanguagePolish);
|
cmessages.Associate(IDM_LANGUAGE_POLISH, WmCommand_LanguagePolish);
|
||||||
cmessages.Associate(IDM_LANGUAGE_SPANISH, WmCommand_LanguageSpanish);
|
cmessages.Associate(IDM_LANGUAGE_SPANISH, WmCommand_LanguageSpanish);
|
||||||
|
|
|
@ -207,11 +207,12 @@
|
||||||
#define IDM_EDIT_INDEX 1
|
#define IDM_EDIT_INDEX 1
|
||||||
#define IDM_HELP_INDEX 2
|
#define IDM_HELP_INDEX 2
|
||||||
#define IDM_LANGUAGE_INDEX 8
|
#define IDM_LANGUAGE_INDEX 8
|
||||||
|
|
||||||
#define IDM_NEW_WINDOW 40001
|
#define IDM_NEW_WINDOW 40001
|
||||||
#define IDM_NORMAL_VIEW 40002
|
#define IDM_NORMAL_VIEW 40002
|
||||||
#define IDM_COMPACT_VIEW 40003
|
#define IDM_COMPACT_VIEW 40003
|
||||||
#define IDM_ALWAYS_ON_TOP 40004
|
#define IDM_PAD 40004
|
||||||
#define IDM_PAD 40005
|
#define IDM_ALWAYS_ON_TOP 40005
|
||||||
#define IDM_LANGUAGE_ENGLISH 40010
|
#define IDM_LANGUAGE_ENGLISH 40010
|
||||||
#define IDM_LANGUAGE_POLISH 40011
|
#define IDM_LANGUAGE_POLISH 40011
|
||||||
#define IDM_LANGUAGE_SPANISH 40012
|
#define IDM_LANGUAGE_SPANISH 40012
|
||||||
|
@ -220,18 +221,23 @@
|
||||||
#define IDM_LANGUAGE_RUSSIAN 40015
|
#define IDM_LANGUAGE_RUSSIAN 40015
|
||||||
#define IDM_LANGUAGE_SWEDISH 40016
|
#define IDM_LANGUAGE_SWEDISH 40016
|
||||||
#define IDM_CLOSE_PROGRAM 40020
|
#define IDM_CLOSE_PROGRAM 40020
|
||||||
|
|
||||||
#define IDM_EDIT_UNDO 40030
|
#define IDM_EDIT_UNDO 40030
|
||||||
#define IDM_EDIT_PASTE_FORMULA 40031
|
#define IDM_EDIT_CUT 40031
|
||||||
#define IDM_EDIT_COPY_RESULT 40032
|
#define IDM_EDIT_COPY 40032
|
||||||
#define IDM_EDIT_COPY_BOTH 40033
|
#define IDM_EDIT_PASTE 40033
|
||||||
#define IDM_EDIT_COPY 40034
|
#define IDM_EDIT_DEL 40034
|
||||||
#define IDM_EDIT_CUT 40035
|
#define IDM_EDIT_COPY_RESULT 40035
|
||||||
#define IDM_HELP_HELP 40040
|
#define IDM_EDIT_COPY_BOTH 40036
|
||||||
#define IDM_EDIT_PASTE 40036
|
#define IDM_EDIT_PASTE_FORMULA 40037
|
||||||
#define IDM_EDIT_DEL 40037
|
#define IDM_EDIT_SELECT_ALL 40038
|
||||||
#define IDM_HELP_PROJECT_PAGE 40041
|
#define IDM_EDIT_BRACKET 40039
|
||||||
#define IDM_HELP_CHECK_UPDATE 40042
|
|
||||||
#define IDM_HELP_ABOUT 40049
|
#define IDM_HELP_HELP 40050
|
||||||
|
#define IDM_HELP_PROJECT_PAGE 40051
|
||||||
|
#define IDM_HELP_CHECK_UPDATE 40052
|
||||||
|
#define IDM_HELP_ABOUT 40053
|
||||||
|
|
||||||
|
|
||||||
// pad menu
|
// pad menu
|
||||||
#define MENUPAD_EDIT_INDEX 1
|
#define MENUPAD_EDIT_INDEX 1
|
||||||
|
|
|
@ -17,47 +17,50 @@ FIXED IMPURE LOADONCALL DISCARDABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "&View"
|
POPUP "&View"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&New window", 40001
|
MENUITEM "&New window", IDM_NEW_WINDOW
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "No&rmal", 40002
|
MENUITEM "No&rmal", IDM_NORMAL_VIEW
|
||||||
MENUITEM "&Compact", 40003
|
MENUITEM "&Compact", IDM_COMPACT_VIEW
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Pad", 40005
|
MENUITEM "&Pad", IDM_PAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Always on top", 40004
|
MENUITEM "&Always on top", IDM_ALWAYS_ON_TOP
|
||||||
POPUP "&Language"
|
POPUP "&Language"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&English", 40010
|
MENUITEM "&English", IDM_LANGUAGE_ENGLISH
|
||||||
MENUITEM "&Polish", 40011
|
MENUITEM "&Polish", IDM_LANGUAGE_POLISH
|
||||||
MENUITEM "&Spanish", 40012
|
MENUITEM "&Spanish", IDM_LANGUAGE_SPANISH
|
||||||
MENUITEM "&Danish", 40013
|
MENUITEM "&Danish", IDM_LANGUAGE_DANISH
|
||||||
MENUITEM "&Chinese", 40014
|
MENUITEM "&Chinese", IDM_LANGUAGE_CHINESE
|
||||||
MENUITEM "&Russian", 40015
|
MENUITEM "&Russian", IDM_LANGUAGE_RUSSIAN
|
||||||
MENUITEM "&Swedish", 40016
|
MENUITEM "&Swedish", IDM_LANGUAGE_SWEDISH
|
||||||
END
|
END
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Close", 40020
|
MENUITEM "&Close", IDM_CLOSE_PROGRAM
|
||||||
END
|
END
|
||||||
POPUP "&Edit"
|
POPUP "&Edit"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Undo \tCtrl+Z", 40030
|
MENUITEM "&Undo \tCtrl+Z", IDM_EDIT_UNDO
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Cut \tCtrl+X", 40035
|
MENUITEM "&Cut \tCtrl+X", IDM_EDIT_CUT
|
||||||
MENUITEM "&Copy", 40034
|
MENUITEM "&Copy \TCtrl+C", IDM_EDIT_COPY
|
||||||
MENUITEM "&Paste", 40036
|
MENUITEM "&Paste", IDM_EDIT_PASTE
|
||||||
MENUITEM "&Delete \tDel", 40037
|
MENUITEM "&Delete \tDel", IDM_EDIT_DEL
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Copy the result\tCtrl+C", 40032
|
MENUITEM "&Copy result \tCtrl+R", IDM_EDIT_COPY_RESULT
|
||||||
MENUITEM "&Copy both\tCtrl+R", 40033
|
MENUITEM "&Copy both\tCtrl+B", IDM_EDIT_COPY_BOTH
|
||||||
MENUITEM "&Paste formula\tCtrl+V", 40031
|
MENUITEM "&Paste formula\tCtrl+V", IDM_EDIT_PASTE_FORMULA
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "&Select all \tEsc", IDM_EDIT_SELECT_ALL
|
||||||
|
MENUITEM "&Bracket \tCtrl+0", IDM_EDIT_BRACKET
|
||||||
END
|
END
|
||||||
POPUP "&Help"
|
POPUP "&Help"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Help", 40040
|
MENUITEM "&Help", IDM_HELP_HELP
|
||||||
MENUITEM "&Project page", 40041
|
MENUITEM "&Project page", IDM_HELP_PROJECT_PAGE
|
||||||
MENUITEM "&Check update...", 40042
|
MENUITEM "&Check update...", IDM_HELP_CHECK_UPDATE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&About", 40049
|
MENUITEM "&About", IDM_HELP_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -133,6 +133,10 @@ bool sent = true;
|
||||||
switch( msg.wParam )
|
switch( msg.wParam )
|
||||||
{
|
{
|
||||||
case 'C':
|
case 'C':
|
||||||
|
sent = MainWindowFunctions::CopySpecial();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'R':
|
||||||
sent = MainWindowFunctions::CopyResult();
|
sent = MainWindowFunctions::CopyResult();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -140,7 +144,7 @@ bool sent = true;
|
||||||
sent = MainWindowFunctions::PasteFormula();
|
sent = MainWindowFunctions::PasteFormula();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'R':
|
case 'B':
|
||||||
sent = SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDM_EDIT_COPY_BOTH, 0);
|
sent = SendMessage(GetPrgRes()->GetMainWindow(), WM_COMMAND, IDM_EDIT_COPY_BOTH, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ namespace MainWindowFunctions
|
||||||
{
|
{
|
||||||
bool SetNextFocus(WPARAM wParam);
|
bool SetNextFocus(WPARAM wParam);
|
||||||
bool CopyResult();
|
bool CopyResult();
|
||||||
|
bool CopySpecial();
|
||||||
bool PasteFormula();
|
bool PasteFormula();
|
||||||
BOOL WmCommand_EditCopyBoth(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
BOOL WmCommand_EditCopyBoth(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
void CreateMainMessagesTable(Messages<BOOL> & messages);
|
void CreateMainMessagesTable(Messages<BOOL> & messages);
|
||||||
|
|
Loading…
Reference in New Issue