]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/MainHexEditor.c
ShellPkg: Added the Ctrl based hot key and changed text editor's UI.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / HexEdit / MainHexEditor.c
index 83b31992d2dab7ec06e3a96d8e2adb53f2cca2eb..357f8fa9774480da5ef9c24250b8a410ccbbee3e 100644 (file)
@@ -65,6 +65,71 @@ HEFI_EDITOR_GLOBAL_EDITOR       HMainEditorConst = {
   1\r
 };\r
 \r
+/**\r
+  Help info that will be displayed.\r
+**/\r
+EFI_STRING_ID  HexMainMenuHelpInfo[] = {\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_TITLE),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_LIST_TITLE),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_DIV),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_GO_TO_OFFSET),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_SAVE_BUFFER),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_EXIT),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_SELECT_START),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_SELECT_END),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_CUT),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_PASTE),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_OPEN_FILE),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_OPEN_DISK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_OPEN_MEMORY),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_EXIT_HELP),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_BLANK),\r
+  STRING_TOKEN(STR_HEXEDIT_HELP_DIV),\r
+  0\r
+};\r
+\r
+\r
+/**\r
+  show help menu.\r
+\r
+  @retval EFI_SUCCESS             The operation was successful.\r
+**/\r
+EFI_STATUS\r
+HMainCommandDisplayHelp (\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 != HexMainMenuHelpInfo[CurrentLine]; CurrentLine++) {\r
+    InfoString = HiiGetString(gShellDebug1HiiHandle, HexMainMenuHelpInfo[CurrentLine]\r
+, 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
+  // update screen with buffer's info\r
+  HBufferImageNeedRefresh = TRUE;\r
+  HBufferImageOnlyLineNeedRefresh = FALSE;\r
+  HBufferImageRefresh ();\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
 /**\r
   Move cursor to specified lines.\r
 \r
@@ -1439,6 +1504,36 @@ HMainCommandOpenMemory (
 \r
 }\r
 \r
+MENU_ITEM_FUNCTION HexMainControlBasedMenuFunctions[] = {\r
+  NULL,\r
+  NULL,                      /* Ctrl - A */\r
+  NULL,                      /* Ctrl - B */\r
+  NULL,                      /* Ctrl - C */\r
+  NULL,                      /* Ctrl - D */\r
+  HMainCommandDisplayHelp,   /* Ctrl - E */\r
+  NULL,                      /* Ctrl - F */\r
+  NULL,                      /* Ctrl - G */\r
+  NULL,                      /* Ctrl - H */\r
+  NULL,                      /* Ctrl - I */\r
+  NULL,                      /* Ctrl - J */\r
+  NULL,                      /* Ctrl - K */\r
+  NULL,                      /* Ctrl - L */\r
+  NULL,                      /* Ctrl - M */\r
+  NULL,                      /* Ctrl - N */\r
+  NULL,                      /* Ctrl - O */\r
+  NULL,                      /* Ctrl - P */\r
+  NULL,                      /* Ctrl - Q */\r
+  NULL,                      /* Ctrl - R */\r
+  NULL,                      /* Ctrl - S */\r
+  NULL,                      /* Ctrl - T */\r
+  NULL,                      /* 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
 CONST EDITOR_MENU_ITEM HexEditorMenuItems[] = {\r
   {\r
     STRING_TOKEN(STR_HEXEDIT_LIBMENUBAR_GO_TO_OFFSET),\r
@@ -1598,6 +1693,11 @@ HMainEditorInit (
     return EFI_LOAD_ERROR;\r
   }\r
 \r
+  Status = ControlHotKeyInit (HexMainControlBasedMenuFunctions);\r
+  if (EFI_ERROR (Status)) {\r
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_MAINMENU), gShellDebug1HiiHandle);\r
+    return EFI_LOAD_ERROR;\r
+  }\r
   Status = MenuBarInit (HexEditorMenuItems);\r
   if (EFI_ERROR (Status)) {\r
     ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HEXEDIT_LIBEDITOR_MAINEDITOR_MAINMENU), gShellDebug1HiiHandle);\r
@@ -1777,9 +1877,6 @@ HMainEditorRefresh (
   }\r
 \r
   if (HEditorFirst) {\r
-    MenuBarRefresh (    \r
-      HMainEditor.ScreenSize.Row,\r
-      HMainEditor.ScreenSize.Column);\r
     HBufferImageRefresh ();\r
   }\r
 \r
@@ -2138,8 +2235,9 @@ HMainEditorKeyInput (
       // clear previous status string\r
       //\r
       StatusBarSetRefresh();\r
-\r
-      if (Key.ScanCode == SCAN_NULL) {\r
+      if (EFI_SUCCESS == MenuBarDispatchControlHotKey(&Key)) {\r
+        Status = EFI_SUCCESS;\r
+      } else if (Key.ScanCode == SCAN_NULL) {\r
         Status = HBufferImageHandleInput (&Key);\r
       } else if (((Key.ScanCode >= SCAN_UP) && (Key.ScanCode <= SCAN_PAGE_DOWN))) {\r
         Status = HBufferImageHandleInput (&Key);\r