LCL: added ssMeta, scMeta to Shortcuts, carbon: Cmd now sets ssMeta, Ctrl now sets ssCtrl, Alt now sets ssAlt, IDE: changed Mac OS X key mapping scheme

git-svn-id: trunk@15911 -
This commit is contained in:
mattias 2008-07-29 21:21:33 +00:00
parent 81a704ba22
commit 8759733936
10 changed files with 359 additions and 67 deletions

View File

@ -3195,25 +3195,22 @@ begin
with ListBox do
begin
Name := 'ListBox';
Align:=alTop;
Parent := Self;
Left := 0;
Top := 0;
Width := Self.ClientWidth - 4;
Height := Self.ClientHeight - 50;
end;
BackButton := TButton.Create(Self);
with BackButton do
begin
Name := 'BackButton';
AutoSize:=true;
Anchors:=[akBottom];
Parent := Self;
Width := 60;
Height := 25;
AnchorParallel(akBottom,6,Self);
Caption := dlgEdBack;
Left := ((Self.ClientWidth - 4) - Width) div 2;
Top := Self.ClientHeight - 38;
OnClick := @BackButtonClick;
end;
ListBox.AnchorToNeighbour(akBottom,6,BackButton);
end;
end;

View File

@ -167,7 +167,7 @@ implementation
const
KeyMappingFormatVersion = 4;
KeyMappingFormatVersion = 5;
VirtualKeyStrings: TStringHashList = nil;
@ -1048,16 +1048,127 @@ procedure GetDefaultKeyForMacOSXScheme(Command: word; var TheKeyA, TheKeyB: TIDE
TheKeyB:=IDEShortCut(NewKeyB, NewShiftB, VK_UNKNOWN, []);
end;
procedure SetResult2(
NewKey1A: word; NewShift1A: TShiftState;
NewKey1B: word; NewShift1B: TShiftState;
NewKey2A: word; NewShift2A: TShiftState;
NewKey2B: word; NewShift2B: TShiftState);
begin
TheKeyA:=IDEShortCut(NewKey1A,NewShift1A,NewKey1B,NewShift1B);
TheKeyB:=IDEShortCut(NewKey2A,NewShift2A,NewKey2B,NewShift2B);
end;
begin
GetDefaultKeyForCommand(Command,TheKeyA,TheKeyB);
// override only problematic key commands
case Command of
// moving
ecWordLeft: SetResult(VK_LEFT, [ssAlt],VK_UNKNOWN,[]);
ecWordRight: SetResult(VK_RIGHT, [ssAlt],VK_UNKNOWN,[]);
ecLineStart: SetResult(VK_LEFT, [ssMeta],VK_UNKNOWN,[]);
ecLineEnd: SetResult(VK_RIGHT, [ssMeta],VK_UNKNOWN,[]);
ecPageUp: SetResult(VK_PRIOR, [],VK_UNKNOWN,[]);
ecPageDown: SetResult(VK_NEXT, [],VK_UNKNOWN,[]);
ecPageLeft: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPageRight: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPageTop: SetResult(VK_PRIOR, [ssAlt],VK_UNKNOWN,[]);
ecPageBottom: SetResult(VK_END, [ssAlt],VK_UNKNOWN,[]);
ecEditorTop: SetResult(VK_HOME,[],VK_UNKNOWN,[]);
ecEditorBottom: SetResult(VK_END,[],VK_UNKNOWN,[]);
ecScrollUp: SetResult(VK_UP, [ssCtrl],VK_UNKNOWN,[]);
ecScrollDown: SetResult(VK_DOWN, [ssCtrl],VK_UNKNOWN,[]);
ecScrollLeft: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecScrollRight: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
// selection
ecCopy: SetResult(VK_C,[ssMeta],VK_Insert,[ssCtrl]);
ecCut: SetResult(VK_X,[ssMeta],VK_Delete,[ssShift]);
ecPaste: SetResult(VK_V,[ssMeta],VK_Insert,[ssShift]);
ecNormalSelect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecColumnSelect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecLineSelect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelWordLeft: SetResult(VK_LEFT,[ssAlt,ssShift],VK_UNKNOWN,[]);
ecSelWordRight: SetResult(VK_RIGHT,[ssAlt,ssShift],VK_UNKNOWN,[]);
ecSelLineStart: SetResult(VK_LEFT,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecSelLineEnd: SetResult(VK_RIGHT,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecSelPageTop: SetResult(VK_PRIOR, [ssShift,ssAlt],VK_UNKNOWN,[]);
ecSelPageBottom: SetResult(VK_NEXT, [ssShift,ssAlt],VK_UNKNOWN,[]);
ecSelEditorTop: SetResult(VK_HOME, [ssShift],VK_UNKNOWN,[]);
ecSelEditorBottom: SetResult(VK_END, [ssShift],VK_UNKNOWN,[]);
ecSelectAll: SetResult(VK_A,[ssMeta],VK_UNKNOWN,[]);
ecSelectToBrace: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectCodeBlock: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectWord: SetResult2(VK_K,[SSCtrl],VK_T,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectLine: SetResult2(VK_K,[SSCtrl],VK_L,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectParagraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionUpperCase: SetResult2(VK_K,[SSCtrl],VK_N,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionLowerCase: SetResult2(VK_K,[SSCtrl],VK_O,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionTabs2Spaces: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionEnclose: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionComment: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionUncomment: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionConditional: SetResult(VK_D, [ssShift,ssCtrl],VK_UNKNOWN,[]);
ecSelectionSort: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionBreakLines: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
// editing
ecInsertLine: SetResult(VK_N,[ssCtrl, ssShift],VK_UNKNOWN,[]);
ecDeleteEOL: SetResult(VK_Y,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecBlockIndent: SetResult2(VK_I,[ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_I,[]);
ecBlockUnindent: SetResult2(VK_U,[ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_U,[]);
ecDeleteLastChar: SetResult(VK_BACK, [],VK_BACK, [ssShift]); // ctrl H used for scroll window.
ecDeleteChar: SetResult(VK_DELETE,[],VK_UNKNOWN,[]); // ctrl G conflicts with GO
ecDeleteWord: SetResult(VK_DELETE,[ssAlt],VK_UNKNOWN,[]);
ecDeleteLastWord: SetResult(VK_BACK,[ssCtrl],VK_UNKNOWN,[]);
ecDeleteBOL: SetResult(VK_BACK,[ssMeta],VK_UNKNOWN,[]);
ecDeleteEOL: SetResult(VK_DELETE,[ssMeta],VK_UNKNOWN,[]);
ecDeleteLine: SetResult(VK_Y,[ssCtrl],VK_UNKNOWN,[]);
ecClearAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecLineBreak: SetResult(VK_RETURN,[],VK_UNKNOWN,[]);
ecInsertLine: SetResult(VK_N,[ssShift,ssMeta],VK_UNKNOWN,[]);
ecInsertCharacter: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertLGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertModifiedLGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertUserName: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertDateTime: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertChangeLogEntry: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSAuthor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSDate: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSHeader: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSID: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSLog: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSName: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSRevision: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertGUID: SetResult(VK_G, [ssCtrl,ssShift],VK_UNKNOWN,[]);
ecInsertToDo: SetResult(VK_T, [ssCtrl,ssShift],VK_UNKNOWN,[]);
// command commands
ecUndo: SetResult(VK_Z,[ssMeta],VK_UNKNOWN,[]);
ecRedo: SetResult(VK_Z,[ssMeta,ssShift],VK_UNKNOWN,[]);
// search & replace
ecMatchBracket: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFind: SetResult(VK_F,[ssMeta],VK_UNKNOWN,[]);
ecFindNext: SetResult(VK_G,[ssMeta],VK_UNKNOWN,[]);
ecFindPrevious: SetResult(VK_G,[ssShift,ssMeta],VK_UNKNOWN,[]);
ecFindInFiles: SetResult(VK_F,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecReplace: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecIncrementalFind: SetResult(VK_E,[ssMeta],VK_UNKNOWN,[]);
ecGotoLineNumber: SetResult(VK_L,[ssMeta],VK_UNKNOWN,[]);
ecFindNextWordOccurrence: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindPrevWordOccurrence: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpBack: SetResult(VK_H,[ssCtrl],VK_UNKNOWN,[]);
ecJumpForward: SetResult(VK_H,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecAddJumpPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewJumpHistory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpToPrevError: SetResult(VK_ADD,[ssMeta],VK_UNKNOWN,[]);
ecJumpToNextError: SetResult(VK_ADD,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecOpenFileAtCursor: SetResult(VK_RETURN,[ssCtrl],VK_UNKNOWN,[]);
ecProcedureList: SetResult(VK_G, [ssAlt],VK_UNKNOWN,[]);
// marker
ecSetFreeBookmark: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPrevBookmark: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNextBookmark: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker0: SetResult(VK_0,[ssCtrl],VK_UNKNOWN,[]);
ecGotoMarker1: SetResult(VK_1,[ssCtrl],VK_UNKNOWN,[]);
ecGotoMarker2: SetResult(VK_2,[ssCtrl],VK_UNKNOWN,[]);
@ -1068,49 +1179,194 @@ begin
ecGotoMarker7: SetResult(VK_7,[ssCtrl],VK_UNKNOWN,[]);
ecGotoMarker8: SetResult(VK_8,[ssCtrl],VK_UNKNOWN,[]);
ecGotoMarker9: SetResult(VK_9,[ssCtrl],VK_UNKNOWN,[]);
ecSetMarker0: SetResult2(VK_0,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_0,[]);
ecSetMarker1: SetResult2(VK_1,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_1,[]);
ecSetMarker2: SetResult2(VK_2,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_2,[]);
ecSetMarker3: SetResult2(VK_3,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_3,[]);
ecSetMarker4: SetResult2(VK_4,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_4,[]);
ecSetMarker5: SetResult2(VK_5,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_5,[]);
ecSetMarker6: SetResult2(VK_6,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_6,[]);
ecSetMarker7: SetResult2(VK_7,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_7,[]);
ecSetMarker8: SetResult2(VK_8,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_8,[]);
ecSetMarker9: SetResult2(VK_9,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_K,[SSCtrl],VK_9,[]);
// codetools
ecAutoCompletion: SetResult(VK_J,[ssMeta],VK_UNKNOWN,[]);
ecWordCompletion: SetResult(VK_SPACE,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecCompleteCode: SetResult(VK_C,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecIdentCompletion: SetResult(VK_SPACE,[ssCtrl],VK_UNKNOWN,[]);
ecShowCodeContext: SetResult(VK_SPACE,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecExtractProc: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindIdentifierRefs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRenameIdentifier: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInvertAssignment: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSyntaxCheck: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGuessUnclosedBlock: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGuessMisplacedIFDEF: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDFM2LFM: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCheckLFM: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDelphiUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDelphiProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDelphiPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindProcedureDefinition: SetResult(VK_UP,[ssShift,SSCtrl],VK_UNKNOWN,[]);
ecFindProcedureMethod: SetResult(VK_DOWN,[ssShift,SSCtrl],VK_UNKNOWN,[]);
ecFindDeclaration: SetResult(VK_UP,[ssAlt],VK_UNKNOWN,[]);
ecFindBlockOtherEnd: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindBlockStart: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoIncludeDirective: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowAbstractMethods: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRemoveEmptyMethods: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// source notebook
ecNextEditor: SetResult(VK_RIGHT, [ssMeta,ssAlt], VK_UNKNOWN, []);
ecPrevEditor: SetResult(VK_LEFT, [ssMeta,ssAlt], VK_UNKNOWN, []);
ecResetDebugger: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddBreakPoint: SetResult(VK_P,[ssCtrl],VK_UNKNOWN,[]);
ecMoveEditorLeft: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecMoveEditorRight: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecMoveEditorLeftmost: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecMoveEditorRightmost: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecGotoEditor1: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor2: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor3: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor4: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor5: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor6: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor7: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor8: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor9: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor0: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// file menu
ecNew: SetResult(VK_N,[ssCtrl],VK_UNKNOWN,[]);
ecSaveAs: SetResult(VK_S,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecSaveAll: SetResult(VK_S,[ssShift,ssAlt],VK_UNKNOWN,[]);
ecQuit: SetResult(VK_Q,[ssCtrl],VK_UNKNOWN,[]);
// search & replace
ecFind: SetResult(VK_F,[ssCtrl],VK_UNKNOWN,[]);
ecFindNext: SetResult(VK_G,[ssCtrl],VK_UNKNOWN,[]);
ecFindPrevious: SetResult(VK_G,[ssCtrl, ssShift],VK_UNKNOWN,[]);
ecReplace: SetResult(VK_R,[SSCtrl],VK_UNKNOWN,[]);
ecGotoLineNumber: SetResult(VK_L,[ssCtrl],VK_UNKNOWN,[]);
ecNew: SetResult(VK_N,[ssMeta],VK_UNKNOWN,[]);
ecNewUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewForm: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpen: SetResult(VK_O,[ssMeta],VK_UNKNOWN,[]);
ecRevert: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSave: SetResult(VK_S,[ssMeta],VK_UNKNOWN,[]);
ecSaveAs: SetResult(VK_S,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecSaveAll: SetResult(VK_S,[ssMeta,ssAlt],VK_UNKNOWN,[]);
ecClose: SetResult(VK_W,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecCloseAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanDirectory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRestart: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecQuit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// view menu
ecToggleObjectInsp: SetResult(VK_F11,[ssCtrl],VK_UNKNOWN,[]);
ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[]);
ecToggleObjectInsp: SetResult(VK_I,[ssAlt,ssMeta],VK_UNKNOWN,[]);
ecToggleSourceEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCodeExpl: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleFPDocEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMessages: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleSearchResults: SetResult(VK_F,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecToggleWatches: SetResult(VK_W,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecToggleBreakPoints: SetResult(VK_B,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecToggleLocals: SetResult(VK_L,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecToggleCallStack: SetResult(VK_S,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecToggleDebuggerOut: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewUnits: SetResult(VK_U,[ssCtrl,ssAlt],VK_UNKNOWN,[]);
ecViewForms: SetResult(VK_U,[ssShift,ssCtrl],VK_UNKNOWN,[]);
ecViewUnitDependencies: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewUnitInfo: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpToEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleFormUnit: SetResult(VK_F,[ssMeta,ssAlt],VK_UNKNOWN,[]);
ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleRestrictionBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewTodoList: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// project menu
ecOpenProject: SetResult(VK_F11,[ssAlt],VK_UNKNOWN,[]);
ecAddCurUnitToProj: SetResult(VK_F11,[ssShift],VK_UNKNOWN,[]);
ecProjectOptions: SetResult(VK_F11,[ssShift,ssCtrl],VK_UNKNOWN,[]);
ecNewProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewProjectFromFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCloseProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveProjectAs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPublishProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecProjectInspector: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddCurUnitToProj: SetResult(VK_A,[ssAlt,ssMeta],VK_UNKNOWN,[]);
ecRemoveFromProj: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewProjectSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecProjectOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// run menu
ecBuild: SetResult(VK_F9,[ssCtrl],VK_UNKNOWN,[]);
ecRun: SetResult(VK_F9,[],VK_UNKNOWN,[]);
ecStepInto: SetResult(VK_F7,[],VK_UNKNOWN,[]);
ecStepOver: SetResult(VK_F8,[],VK_UNKNOWN,[]);
ecRunToCursor: SetResult(VK_F4,[],VK_UNKNOWN,[]);
//codetools
ecFindBlockOtherEnd: SetResult(VK_END,[ssAlt],VK_UNKNOWN,[]);
ecFindBlockStart: SetResult(VK_HOME,[ssAlt],VK_UNKNOWN,[]);
ecBuild: SetResult(VK_B,[ssMeta],VK_UNKNOWN,[]);
ecBuildAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecQuickCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAbortBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRun: SetResult(VK_R,[ssMeta],VK_UNKNOWN,[]);
ecPause: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepInto: SetResult(VK_R,[ssMeta,ssAlt],VK_UNKNOWN,[]);
ecStepOver: SetResult(VK_R,[ssMeta,ssShift],VK_UNKNOWN,[]);
ecRunToCursor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStopProgram: SetResult(VK_RETURN,[ssShift,ssMeta],VK_UNKNOWN,[]);
ecRemoveBreakPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCompilerOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunParameters: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuildFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigBuildFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInspect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEvaluate: SetResult(VK_E,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecAddWatch: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// components menu
ecNewPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackageFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackageOfCurUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddCurUnitToPkg: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPackageGraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditInstallPkgs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigCustomComps: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// tools menu
ecExtToolSettings: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuildLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigBuildLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMakeResourceString: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDiff: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// environment menu
ecEnvironmentOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditorOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditCodeTemplates: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCodeToolsOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCodeToolsDefinesEd: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRescanFPCSrcDir: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// help menu
ecAboutLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOnlineHelp: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigureHelp: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecContextHelp: SetResult(VK_HELP,[],VK_UNKNOWN,[]);
ecEditContextHelp: SetResult(VK_HELP,[ssShift,ssCtrl],VK_HELP,[ssCtrl]);
ecReportingBug: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// designer
ecDesignerCopy : SetResult(VK_C,[ssMeta],VK_UNKNOWN,[]);
ecDesignerCut : SetResult(VK_X,[ssMeta],VK_UNKNOWN,[]);
ecDesignerPaste : SetResult(VK_V,[ssMeta],VK_UNKNOWN,[]);
ecDesignerSelectParent: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[]);
ecDesignerMoveToFront : SetResult(VK_PRIOR,[ssShift],VK_UNKNOWN,[]);
ecDesignerMoveToBack : SetResult(VK_NEXT,[ssShift],VK_UNKNOWN,[]);
ecDesignerForwardOne : SetResult(VK_PRIOR,[ssMeta],VK_UNKNOWN,[]);
ecDesignerBackOne : SetResult(VK_NEXT,[ssMeta],VK_UNKNOWN,[]);
else
SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
end;
end;
function KeySchemeNameToSchemeType(const SchemeName: string): TKeyMapScheme;
begin
if (SchemeName='') or (AnsiCompareText(SchemeName,'Default')=0) then
if (SchemeName='') or (CompareText(SchemeName,'Default')=0) then
Result:=kmsLazarus
else if (AnsiCompareText(SchemeName,'Classic')=0) then
else if (CompareText(SchemeName,'Classic')=0) then
Result:=kmsClassic
else if (AnsiCompareText(SchemeName,'Mac OS X')=0) then
else if (CompareText(SchemeName,'Mac OS X')=0) then
Result:=kmsMacOSX
else
Result:=kmsCustom;
@ -1123,6 +1379,8 @@ begin
if ssCtrl in Shift then inc(i,1);
if ssShift in Shift then inc(i,2);
if ssAlt in Shift then inc(i,4);
if ssMeta in Shift then inc(i,8);
if ssSuper in Shift then inc(i,16);
Result:=IntToStr(i);
end;
@ -1535,6 +1793,13 @@ var
if ssCtrl in ShiftState then AddAttribute(srkm_Ctrl);
if ssAlt in ShiftState then AddAttribute(srkm_Alt);
if ssShift in ShiftState then AddAttribute(srVK_SHIFT);
if ssMeta in ShiftState then
{$IFDEF LCLcarbon}
AddAttribute(srVK_CMD);
{$ELSE}
AddAttribute(srVK_SHIFT);
{$ENDIF}
if ssSuper in ShiftState then AddAttribute(srVK_SUPER);
end;
// Tricky routine. This only works for western languages
@ -2193,7 +2458,9 @@ end;
function TKeyCommandRelationList.LoadFromXMLConfig(
XMLConfig:TXMLConfig; const Prefix: String):boolean;
var a,b,p:integer;
var
a,b,p:integer;
FileVersion: integer;
Name:ShortString;
NewValue: String;
@ -2215,6 +2482,8 @@ var a,b,p:integer;
if (i and 1)>0 then Include(Result,ssCtrl);
if (i and 2)>0 then Include(Result,ssShift);
if (i and 4)>0 then Include(Result,ssAlt);
if (i and 8)>0 then Include(Result,ssMeta);
if (i and 16)>0 then Include(Result,ssSuper);
end;
function OldKeyValuesToStr(const ShortcutA, ShortcutB: TIDEShortCut): string;
@ -2222,10 +2491,18 @@ var a,b,p:integer;
Result:=IntToStr(ShortcutA.Key1) + ',' + ShiftStateToStr(ShortcutA.Shift1) + ',' +
IntToStr(ShortcutB.Key1) + ',' + ShiftStateToStr(ShortcutB.Shift1);
end;
function FixShift(Shift: TShiftState): TShiftState;
begin
Result:=Shift;
{$IFDEF LCLcarbon}
if (FileVersion<5) and (Result*[ssCtrl,ssMeta]=[ssCtrl]) then
Result:=Result-[ssCtrl]+[ssMeta];
{$ENDIF}
end;
// LoadFromXMLConfig
var
FileVersion: integer;
Key1, Key2: word;
Shift1, Shift2: TShiftState;
begin
@ -2248,10 +2525,10 @@ begin
end else begin
p:=1;
Key1:=word(ReadNextInt);
Shift1:=IntToShiftState(ReadNextInt);
Shift1:=FixShift(IntToShiftState(ReadNextInt));
if FileVersion>2 then begin
Key2:=word(ReadNextInt);
Shift2:=IntToShiftState(ReadNextInt);
Shift2:=FixShift(IntToShiftState(ReadNextInt));
end else begin
Key2:=VK_UNKNOWN;
Shift2:=[];
@ -2259,10 +2536,10 @@ begin
Relations[a].ShortcutA:=IDEShortCut(Key1, Shift1, Key2, Shift2);
Key1:=word(ReadNextInt);
Shift1:=IntToShiftState(ReadNextInt);
Shift1:=FixShift(IntToShiftState(ReadNextInt));
if FileVersion>2 then begin
Key2:=word(ReadNextInt);
Shift2:=IntToShiftState(ReadNextInt);
Shift2:=FixShift(IntToShiftState(ReadNextInt));
end else begin
Key2:=VK_UNKNOWN;
Shift2:=[];

View File

@ -461,7 +461,7 @@ end;
function TCustomShortCutGrabBox.GetDefaultShiftButtons: TShiftState;
begin
{$IFDEF Darwin}
Result:=[ssCtrl,ssShift,ssAlt,ssHyper];
Result:=[ssCtrl,ssShift,ssAlt,ssMeta];
{$ELSE}
Result:=[ssCtrl,ssShift,ssAlt];
{$ENDIF}

View File

@ -1960,6 +1960,9 @@ resourcestring
srVK_RETURN = 'Return';
srVK_SHIFT = 'Shift';
srVK_CONTROL = 'Control';
srVK_SUPER = 'Super';
srVK_META = 'Meta';
srVK_CMD = 'Cmd';
srVK_MENU = 'Menu';
srVK_PAUSE = 'Pause key';
srVK_CAPITAL = 'Capital';

View File

@ -376,11 +376,11 @@ const
case diff of
0 : exit; //nothing (that we cared of) changed
cmdKey : VKKeyCode := VK_CONTROL; //command mapped to control
controlKey : VKKeyCode := VK_CONTROL; //command mapped to control
shiftKey : VKKeyCode := VK_SHIFT;
alphaLock : VKKeyCode := VK_CAPITAL; //caps lock
optionKey : VKKeyCode := VK_MENU; //option is alt
controlKey : VKKeyCode := VK_LWIN; //meta... map to left Windows Key?
cmdKey : VKKeyCode := VK_LWIN; //meta... map to left Windows Key?
else exit; //Error! More that one bit changed in the modifiers?
end;
Result:=true;

View File

@ -389,13 +389,14 @@ begin
Modifiers := GetCurrentEventKeyModifiers; // shift, control, option, command
ButtonState := GetCurrentEventButtonState; // Bit 0 first button (left),
// bit 1 second (right), bit2 third (middle) ...
// bit 1 second (right), bit2 third (middle) ...
if (ButtonState and 1) > 0 then Inc(Result, MK_LButton);
if (ButtonState and 2) > 0 then Inc(Result, MK_RButton);
if (ButtonState and 4) > 0 then Inc(Result, MK_MButton);
if (shiftKey and Modifiers) > 0 then Inc(Result, MK_Shift);
if (cmdKey and Modifiers) > 0 then Inc(Result, MK_Control);
if (controlKey and Modifiers) > 0 then Inc(Result, MK_Control);
if (optionKey and Modifiers) > 0 then Inc(Result, $20000000);
//DebugLn('GetCarbonMsgKeyState Result=',dbgs(KeysToShiftState(Result)),' Modifiers=',hexstr(Modifiers,8),' ButtonState=',hexstr(ButtonState,8));
end;
@ -418,8 +419,8 @@ begin
if (ButtonState and 2) > 0 then Include(Result, ssRight);
if (ButtonState and 4) > 0 then Include(Result, ssMiddle);
if (shiftKey and Modifiers) > 0 then Include(Result, ssShift);
if (cmdKey and Modifiers) > 0 then Include(Result, ssCtrl);
if (controlKey and Modifiers) > 0 then Include(Result, ssMeta);
if (cmdKey and Modifiers) > 0 then Include(Result, ssMeta);
if (controlKey and Modifiers) > 0 then Include(Result, ssCtrl);
if (optionKey and Modifiers) > 0 then Include(Result, ssAlt);
if (alphaLock and Modifiers) > 0 then Include(Result, ssCaps);
@ -433,17 +434,19 @@ end;
------------------------------------------------------------------------------}
function ShiftStateToModifiers(const Shift: TShiftState): Byte;
begin
if Shift = [ssCtrl] then
Result := kMenuNoModifiers
else
begin
if ssCtrl in Shift then Result := kMenuNoModifiers
else Result := kMenuNoCommandModifier;
//if Shift = [ssAlt] then
// Result := kMenuNoModifiers
//else
//begin
if ssMeta in Shift then
Result := kMenuNoModifiers
else
Result := kMenuNoCommandModifier;
if ssShift in Shift then Inc(Result, kMenuShiftModifier);
if ssMeta in Shift then Inc(Result, kMenuControlModifier);
if ssCtrl in Shift then Inc(Result, kMenuControlModifier);
if ssAlt in Shift then Inc(Result, kMenuOptionModifier);
end;
//end;
end;
{------------------------------------------------------------------------------

View File

@ -1344,8 +1344,13 @@ begin
if (GetCurrentEventKeyModifiers and shiftKey) > 0 then
Result := StateDown;
VK_CONTROL:
if (GetCurrentEventKeyModifiers and controlKey) > 0 then
// the ssCtrl/VK_CONTROL is mapped to controlKey under MacOS
Result := StateDown;
VK_LWIN, VK_RWIN:
// distinguish left and right
if (GetCurrentEventKeyModifiers and cmdKey) > 0 then
// the ssCtrl/VK_CONTROL is mapped to cmdKey under MacOS
// the ssMeta/VK_LWIN is mapped to cmdKey under MacOS
Result := StateDown;
VK_LBUTTON:
if (GetCurrentEventButtonState and $01) > 0 then Result := StateDown;

View File

@ -160,6 +160,7 @@ begin
if GetKeyState(VK_SHIFT) < 0 then Include(Result, ssShift);
if GetKeyState(VK_CONTROL) < 0 then Include(Result, ssCtrl);
if GetKeyState(VK_LWIN) < 0 then Include(Result, ssMeta);
if KeyData and $20000000 <> 0 then Include(Result, ssAlt);
end;

View File

@ -330,6 +330,9 @@ const
KF_REPEAT = $4000;
KF_UP = $8000;
// TShortCut additions:
scMeta = $1000;
//-------------
// Virtual keys
//-------------
@ -2579,6 +2582,7 @@ type
NM_LISTVIEW = TNMListView;
tagNMLISTVIEW = TNMListView;
function CS_To_String(CompStyle: Integer): String;
// key mapping
@ -2643,6 +2647,7 @@ begin
if ssShift in Shift then Inc(Result,scShift);
if ssCtrl in Shift then Inc(Result,scCtrl);
if ssAlt in Shift then Inc(Result,scAlt);
if ssMeta in Shift then Inc(Result,scMeta);
end;
{------------------------------------------------------------------------------

View File

@ -531,6 +531,7 @@ begin
if ShortCut and scShift <> 0 then Include(Shift,ssShift);
if ShortCut and scAlt <> 0 then Include(Shift,ssAlt);
if ShortCut and scCtrl <> 0 then Include(Shift,ssCtrl);
if ShortCut and scMeta <> 0 then Include(Shift,ssMeta);
end;