/** @file\r
Implements editor interface functions.\r
\r
- Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR>\r
+ Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved. <BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
#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
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandOpenFile (\r
VOID\r
);\r
@retval EFI_SUCCESS The switch was ok or a warning was presented.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSwitchFileType (\r
VOID\r
);\r
@retval EFI_SUCCESS The operation was successful.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandGotoLine (\r
VOID\r
);\r
@retval EFI_LOAD_ERROR A file access error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSaveFile (\r
VOID\r
);\r
\r
+/**\r
+ Show help information for the editor.\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
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandExit (\r
VOID\r
);\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSearch (\r
VOID\r
);\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSearchReplace (\r
VOID\r
);\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandCutLine (\r
VOID\r
);\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandPasteLine (\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
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandOpenFile (\r
VOID\r
)\r
@retval EFI_SUCCESS The switch was ok or a warning was presented.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSwitchFileType (\r
VOID\r
)\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandCutLine (\r
VOID\r
)\r
// IF cursor is not on valid line, an Status String will be prompted :\r
// "Nothing to Cut".\r
//\r
+ Line = NULL;\r
Status = FileBufferCutLine (&Line);\r
if (Status == EFI_NOT_FOUND) {\r
return EFI_SUCCESS;\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandPasteLine (\r
VOID\r
)\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSearch (\r
VOID\r
)\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSearchReplace (\r
VOID\r
)\r
@retval EFI_LOAD_ERROR A load error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandExit (\r
VOID\r
)\r
@retval EFI_SUCCESS The operation was successful.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandGotoLine (\r
VOID\r
)\r
@retval EFI_LOAD_ERROR A file access error occured.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
MainCommandSaveFile (\r
VOID\r
)\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 information for the editor.\r
\r
-BOOLEAN EditorMouseAction;\r
+ @retval EFI_SUCCESS The operation was successful.\r
+**/\r
+EFI_STATUS\r
+MainCommandDisplayHelp (\r
+ VOID\r
+ )\r
+{\r
+ INT32 CurrentLine;\r
+ CHAR16 *InfoString;\r
+ EFI_INPUT_KEY Key;\r
+ \r
+ //\r
+ // print helpInfo \r
+ //\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
+ //\r
+ // scan for ctrl+w\r
+ //\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
+ //\r
+ // update screen with file buffer's info\r
+ //\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
EFI_EDITOR_GLOBAL_EDITOR MainEditorConst = {\r
&FileBuffer,\r
{\r
- 0,\r
- 0\r
+ {0, 0}\r
},\r
{\r
0,\r
//\r
// below will call the five components' init function\r
//\r
- Status = MainTitleBarInit (L"UEFI EDIT 2.0");\r
+ Status = MainTitleBarInit (L"UEFI EDIT");\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_LIBEDITOR_TITLEBAR), gShellDebug1HiiHandle);\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
MainTitleBarRefresh (MainEditor.FileBuffer->FileName, MainEditor.FileBuffer->FileType, MainEditor.FileBuffer->ReadOnly, MainEditor.FileBuffer->FileModified, MainEditor.ScreenSize.Column, MainEditor.ScreenSize.Row, 0, 0);\r
FileBufferRestorePosition ();\r
- FileBufferRefresh ();\r
}\r
+\r
if (EditorFirst\r
|| FileBufferBackupVar.FilePosition.Row != FileBuffer.FilePosition.Row \r
|| FileBufferBackupVar.FilePosition.Column != FileBuffer.FilePosition.Column \r
\r
StatusBarRefresh (EditorFirst, MainEditor.ScreenSize.Row, MainEditor.ScreenSize.Column, MainEditor.FileBuffer->FilePosition.Row, MainEditor.FileBuffer->FilePosition.Column, MainEditor.FileBuffer->ModeInsert);\r
FileBufferRestorePosition ();\r
- FileBufferRefresh ();\r
}\r
\r
if (EditorFirst) {\r
- MenuBarRefresh (MainEditor.ScreenSize.Row, MainEditor.ScreenSize.Column);\r
FileBufferRestorePosition ();\r
}\r
\r
+ FileBufferRefresh ();\r
+\r
//\r
// EditorFirst is now set to FALSE\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