#include "TextEditor.h"\r
#include "EditStatusBar.h"\r
#include "EditInputBar.h"\r
+#include "EditMenuBar.h"\r
+\r
+//\r
+// the first time editor launch\r
+//\r
+BOOLEAN EditorFirst;\r
+\r
+//\r
+// it's time editor should exit\r
+//\r
+BOOLEAN EditorExit;\r
+\r
+BOOLEAN EditorMouseAction;\r
+\r
+extern EFI_EDITOR_FILE_BUFFER FileBuffer;\r
+\r
+extern BOOLEAN FileBufferNeedRefresh;\r
+\r
+extern BOOLEAN FileBufferOnlyLineNeedRefresh;\r
+\r
+extern BOOLEAN FileBufferMouseNeedRefresh;\r
+\r
+extern EFI_EDITOR_FILE_BUFFER FileBufferBackupVar;\r
+\r
+EFI_EDITOR_GLOBAL_EDITOR MainEditor;\r
+\r
\r
/**\r
Load a file from disk to editor\r
VOID\r
);\r
\r
+/**\r
+ show help menu.\r
+\r
+ @retval EFI_SUCCESS The operation was successful.\r
+**/\r
+EFI_STATUS\r
+MainCommandDisplayHelp (\r
+ VOID\r
+ );\r
+\r
/**\r
exit editor\r
\r
VOID\r
);\r
\r
+/**\r
+ Help info that will be displayed.\r
+**/\r
+EFI_STRING_ID MainMenuHelpInfo[] = {\r
+ STRING_TOKEN(STR_EDIT_HELP_TITLE),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_LIST_TITLE),\r
+ STRING_TOKEN(STR_EDIT_HELP_DIV),\r
+ STRING_TOKEN(STR_EDIT_HELP_GO_TO_LINE),\r
+ STRING_TOKEN(STR_EDIT_HELP_SAVE_FILE),\r
+ STRING_TOKEN(STR_EDIT_HELP_EXIT),\r
+ STRING_TOKEN(STR_EDIT_HELP_SEARCH),\r
+ STRING_TOKEN(STR_EDIT_HELP_SEARCH_REPLACE),\r
+ STRING_TOKEN(STR_EDIT_HELP_CUT_LINE),\r
+ STRING_TOKEN(STR_EDIT_HELP_PASTE_LINE),\r
+ STRING_TOKEN(STR_EDIT_HELP_OPEN_FILE),\r
+ STRING_TOKEN(STR_EDIT_HELP_FILE_TYPE),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_EXIT_HELP),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_BLANK),\r
+ STRING_TOKEN(STR_EDIT_HELP_DIV),\r
+0\r
+};\r
+\r
+MENU_ITEM_FUNCTION MainControlBasedMenuFunctions[] = {\r
+ NULL,\r
+ NULL, /* Ctrl - A */\r
+ NULL, /* Ctrl - B */\r
+ NULL, /* Ctrl - C */\r
+ NULL, /* Ctrl - D */\r
+ MainCommandDisplayHelp, /* Ctrl - E */\r
+ MainCommandSearch, /* Ctrl - F */\r
+ MainCommandGotoLine, /* Ctrl - G */\r
+ NULL, /* Ctrl - H */\r
+ NULL, /* Ctrl - I */\r
+ NULL, /* Ctrl - J */\r
+ MainCommandCutLine, /* Ctrl - K */\r
+ NULL, /* Ctrl - L */\r
+ NULL, /* Ctrl - M */\r
+ NULL, /* Ctrl - N */\r
+ MainCommandOpenFile, /* Ctrl - O */\r
+ NULL, /* Ctrl - P */\r
+ MainCommandExit, /* Ctrl - Q */\r
+ MainCommandSearchReplace, /* Ctrl - R */\r
+ MainCommandSaveFile, /* Ctrl - S */\r
+ MainCommandSwitchFileType, /* Ctrl - T */\r
+ MainCommandPasteLine, /* Ctrl - U */\r
+ NULL, /* Ctrl - V */\r
+ NULL, /* Ctrl - W */\r
+ NULL, /* Ctrl - X */\r
+ NULL, /* Ctrl - Y */\r
+ NULL, /* Ctrl - Z */\r
+};\r
+\r
EDITOR_MENU_ITEM MainMenuItems[] = {\r
{\r
STRING_TOKEN(STR_EDIT_LIBMENUBAR_GO_TO_LINE),\r
STRING_TOKEN(STR_EDIT_LIBMENUBAR_F9),\r
MainCommandSwitchFileType\r
},\r
+ {\r
+ STRING_TOKEN(STR_EDIT_LIBMENUBAR_FILE_TYPE),\r
+ STRING_TOKEN(STR_EDIT_LIBMENUBAR_F11),\r
+ MainCommandSwitchFileType\r
+ },\r
\r
{\r
0,\r
return Status;\r
}\r
\r
-EFI_EDITOR_COLOR_ATTRIBUTES OriginalColors;\r
-INTN OriginalMode;\r
-\r
-//\r
-// the first time editor launch\r
-//\r
-BOOLEAN EditorFirst;\r
-\r
-//\r
-// it's time editor should exit\r
-//\r
-BOOLEAN EditorExit;\r
+/**\r
+ show help menu.\r
\r
-BOOLEAN EditorMouseAction;\r
+ @retval EFI_SUCCESS The operation was successful.\r
+**/\r
+EFI_STATUS\r
+MainCommandDisplayHelp (\r
+ VOID\r
+ )\r
+{\r
+ INTN CurrentLine=0;\r
+ CHAR16 * InfoString;\r
+ EFI_INPUT_KEY Key;\r
+ \r
+ // print helpInfo \r
+ for (CurrentLine = 0; 0 != MainMenuHelpInfo[CurrentLine]; CurrentLine++) {\r
+ InfoString = HiiGetString(gShellDebug1HiiHandle, MainMenuHelpInfo[CurrentLine], NULL);\r
+ ShellPrintEx (0,CurrentLine+1,L"%E%s%N",InfoString); \r
+ }\r
+ \r
+ // scan for ctrl+w\r
+ do {\r
+ gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+ } while(SCAN_CONTROL_W != Key.UnicodeChar); \r
\r
-extern EFI_EDITOR_FILE_BUFFER FileBuffer;\r
+ // update screen with file buffer's info\r
+ FileBufferRestorePosition ();\r
+ FileBufferNeedRefresh = TRUE;\r
+ FileBufferOnlyLineNeedRefresh = FALSE;\r
+ FileBufferRefresh (); \r
\r
-extern BOOLEAN FileBufferMouseNeedRefresh;\r
+ return EFI_SUCCESS;\r
+}\r
\r
-extern EFI_EDITOR_FILE_BUFFER FileBufferBackupVar;\r
+EFI_EDITOR_COLOR_ATTRIBUTES OriginalColors;\r
+INTN OriginalMode;\r
\r
-EFI_EDITOR_GLOBAL_EDITOR MainEditor;\r
\r
//\r
// basic initialization for MainEditor\r
return EFI_LOAD_ERROR;\r
}\r
\r
+ Status = ControlHotKeyInit (MainControlBasedMenuFunctions);\r
Status = MenuBarInit (MainMenuItems);\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_LIBEDITOR_MAINMENU), gShellDebug1HiiHandle);\r
}\r
\r
if (EditorFirst) {\r
- MenuBarRefresh (MainEditor.ScreenSize.Row, MainEditor.ScreenSize.Column);\r
FileBufferRestorePosition ();\r
}\r
\r
//\r
// dispatch to different components' key handling function\r
//\r
- if ((Key.ScanCode == SCAN_NULL) || ((Key.ScanCode >= SCAN_UP) && (Key.ScanCode <= SCAN_PAGE_DOWN))) {\r
+ if (EFI_NOT_FOUND != MenuBarDispatchControlHotKey(&Key)) {\r
+ Status = EFI_SUCCESS;\r
+ } else if ((Key.ScanCode == SCAN_NULL) || ((Key.ScanCode >= SCAN_UP) && (Key.ScanCode <= SCAN_PAGE_DOWN))) {\r
Status = FileBufferHandleInput (&Key);\r
} else if ((Key.ScanCode >= SCAN_F1) && (Key.ScanCode <= SCAN_F12)) {\r
Status = MenuBarDispatchFunctionKey (&Key);\r
} else {\r
StatusBarSetStatusString (L"Unknown Command");\r
- FileBufferMouseNeedRefresh = FALSE;\r
+ FileBufferMouseNeedRefresh = FALSE; \r
}\r
-\r
+ \r
if (Status != EFI_SUCCESS && Status != EFI_OUT_OF_RESOURCES) {\r
//\r
// not already has some error status\r