EFI_IFR_GUID_LABEL *mLibStartLabel = NULL;\r
EFI_IFR_GUID_LABEL *mLibEndLabel = NULL;\r
UINT16 mQuestionIdUpdate;\r
+CHAR16 mNewFileName[MAX_FILE_NAME_LEN];\r
+CHAR16 mNewFolderName[MAX_FOLDER_NAME_LEN];\r
+UINTN mNewFileQuestionId = NEW_FILE_QUESTION_ID_BASE;\r
+UINTN mNewFolderQuestionId = NEW_FOLDER_QUESTION_ID_BASE;\r
+\r
+/**\r
+ Create a new file or folder in current directory.\r
+\r
+ @param FileName Point to the fileNmae or folder.\r
+ @param CreateFile CreateFile== TRUE means create a new file.\r
+ CreateFile== FALSE means create a new Folder.\r
+\r
+**/\r
+EFI_STATUS\r
+LibCreateNewFile (\r
+ IN CHAR16 *FileName,\r
+ IN BOOLEAN CreateFile\r
+ );\r
\r
/**\r
This function allows a caller to extract the current configuration for one\r
{\r
EFI_STATUS Status;\r
BOOLEAN NeedExit;\r
+ CHAR16 *NewFileName;\r
+ CHAR16 *NewFolderName;\r
\r
NeedExit = TRUE;\r
- \r
+ NewFileName = NULL;\r
+ NewFolderName = NULL;\r
+\r
if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {\r
//\r
// Do nothing for other UEFI Action. Only do call back when data is changed.\r
if ((Value == NULL) || (ActionRequest == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- \r
+\r
+ if (QuestionId == KEY_VALUE_CREATE_FILE_AND_EXIT) {\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ if (!IsZeroBuffer (mNewFileName, sizeof (mNewFileName))) {\r
+ Status = LibCreateNewFile (mNewFileName,TRUE);\r
+ ZeroMem (mNewFileName,sizeof (mNewFileName));\r
+ }\r
+ }\r
+\r
+ if (QuestionId == KEY_VALUE_NO_CREATE_FILE_AND_EXIT) {\r
+ ZeroMem (mNewFileName,sizeof (mNewFileName));\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ }\r
+\r
+ if (QuestionId == KEY_VALUE_CREATE_FOLDER_AND_EXIT) {\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ if (!IsZeroBuffer (mNewFolderName, sizeof (mNewFolderName))) {\r
+ Status = LibCreateNewFile (mNewFolderName, FALSE);\r
+ ZeroMem (mNewFolderName,sizeof (mNewFolderName));\r
+ }\r
+ }\r
+\r
+ if (QuestionId == KEY_VALUE_NO_CREATE_FOLDER_AND_EXIT) {\r
+ ZeroMem (mNewFolderName,sizeof (mNewFolderName));\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
+ }\r
+\r
+ if (QuestionId == NEW_FILE_NAME_ID) {\r
+ NewFileName = HiiGetString (gFileExplorerPrivate.FeHiiHandle, Value->string, NULL);\r
+ if (NewFileName != NULL) {\r
+ StrCpyS (mNewFileName, MAX_FILE_NAME_LEN, NewFileName);\r
+ FreePool (NewFileName);\r
+ NewFileName = NULL;\r
+ } else {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+\r
+ if (QuestionId == NEW_FOLDER_NAME_ID) {\r
+ NewFolderName = HiiGetString (gFileExplorerPrivate.FeHiiHandle, Value->string, NULL);\r
+ if (NewFolderName != NULL) {\r
+ StrCpyS (mNewFolderName, MAX_FOLDER_NAME_LEN, NewFolderName);\r
+ FreePool (NewFolderName);\r
+ NewFolderName = NULL;\r
+ } else {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+\r
if (QuestionId >= FILE_OPTION_OFFSET) {\r
LibGetDevicePath(QuestionId);\r
\r
if (Value == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- \r
if (QuestionId >= FILE_OPTION_OFFSET) {\r
+ LibGetDevicePath(QuestionId);\r
Status = LibUpdateFileExplorer (QuestionId);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
return Status;\r
}\r
\r
+/**\r
+ Create a new file or folder in current directory.\r
+\r
+ @param FileName Point to the fileNmae or folder name.\r
+ @param CreateFile CreateFile== TRUE means create a new file.\r
+ CreateFile== FALSE means create a new Folder.\r
+\r
+**/\r
+EFI_STATUS\r
+LibCreateNewFile (\r
+ IN CHAR16 *FileName,\r
+ IN BOOLEAN CreateFile\r
+ )\r
+{\r
+ EFI_FILE_HANDLE FileHandle;\r
+ EFI_FILE_HANDLE NewHandle;\r
+ EFI_HANDLE DeviceHandle;\r
+ EFI_STATUS Status;\r
+ CHAR16 *ParentName;\r
+ CHAR16 *FullFileName;\r
+\r
+ NewHandle = NULL;\r
+ FullFileName = NULL;\r
+\r
+ LibGetFileHandleFromDevicePath(gFileExplorerPrivate.RetDevicePath, &FileHandle, &ParentName, &DeviceHandle);\r
+ FullFileName = LibAppendFileName (ParentName, FileName);\r
+ if (FullFileName == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ if (CreateFile) {\r
+ Status = FileHandle->Open(\r
+ FileHandle,\r
+ &NewHandle,\r
+ FullFileName,\r
+ EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE| EFI_FILE_MODE_CREATE,\r
+ 0\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ FileHandle->Close (FileHandle);\r
+ return Status;\r
+ }\r
+ } else {\r
+ Status = FileHandle->Open(\r
+ FileHandle,\r
+ &NewHandle,\r
+ FullFileName,\r
+ EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE| EFI_FILE_MODE_CREATE,\r
+ EFI_FILE_DIRECTORY\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ FileHandle->Close (FileHandle);\r
+ return Status;\r
+ }\r
+ }\r
+\r
+ FileHandle->Close (FileHandle);\r
+\r
+ //\r
+ // Return the DevicePath of the new created file or folder.\r
+ //\r
+ gFileExplorerPrivate.RetDevicePath = FileDevicePath (DeviceHandle, FullFileName);\r
+\r
+ return EFI_SUCCESS;\r
+\r
+}\r
+\r
/**\r
Find files under current directory.\r
\r
MENU_ENTRY *NewMenuEntry;\r
FILE_CONTEXT *NewFileContext;\r
MENU_OPTION *MenuOption;\r
+ BOOLEAN CreateNewFile;\r
\r
NewMenuEntry = NULL;\r
NewFileContext = NULL;\r
+ CreateNewFile = FALSE;\r
\r
LibRefreshUpdateData ();\r
MenuOption = gFileExplorerPrivate.FsOptionMenu;\r
NewMenuEntry = LibGetMenuEntry (MenuOption, Index);\r
NewFileContext = (FILE_CONTEXT *) NewMenuEntry->VariableContext;\r
\r
+ if (!NewFileContext->IsRoot && !CreateNewFile) {\r
+ HiiCreateGotoOpCode (\r
+ mLibStartOpCodeHandle,\r
+ FORM_ADD_NEW_FILE_ID,\r
+ STRING_TOKEN (STR_NEW_FILE),\r
+ STRING_TOKEN (STR_NEW_FILE_HELP),\r
+ EFI_IFR_FLAG_CALLBACK,\r
+ (UINT16) (mNewFileQuestionId++)\r
+ );\r
+ HiiCreateGotoOpCode (\r
+ mLibStartOpCodeHandle,\r
+ FORM_ADD_NEW_FOLDER_ID,\r
+ STRING_TOKEN (STR_NEW_FOLDER),\r
+ STRING_TOKEN (STR_NEW_FOLDER_HELP),\r
+ EFI_IFR_FLAG_CALLBACK,\r
+ (UINT16) (mNewFolderQuestionId++)\r
+ );\r
+ HiiCreateTextOpCode(\r
+ mLibStartOpCodeHandle,\r
+ STRING_TOKEN (STR_NULL_STRING),\r
+ STRING_TOKEN (STR_NULL_STRING),\r
+ 0\r
+ );\r
+ CreateNewFile = TRUE;\r
+ }\r
+\r
if (!NewFileContext->IsDir) {\r
//\r
// Create Text opcode for directory, also create Text opcode for file in FileExplorerStateBootFromFile.\r
///** @file\r
//\r
-// Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
+// Copyright (c) 2007 - 2017, 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
#language fr-FR " "\r
#string STR_FILE_EXPLORER_TITLE #language en-US "File Explorer"\r
#language fr-FR "File Explorer"\r
+#string STR_NEW_FILE #language en-US "***NEW FILE***"\r
+ #language fr-FR "***NEW FILE***"\r
+#string STR_NEW_FILE_HELP #language en-US "This menu used to create a new file in current directory, jump to next page to name the new file"\r
+ #language fr-FR "This menu used to create a new file in current directory, jump to next page to name the new file"\r
+#string STR_ADD_NEW_FILE_TITLE #language en-US "Create a new file"\r
+ #language fr-FR "Create a new file"\r
+#string STR_ADD_NEW_FOLDER_TITLE #language en-US "Create a new folder"\r
+ #language fr-FR "Create a new folder"\r
+#string STR_NEW_FILE_NAME_PROMPT #language en-US "File Name"\r
+ #language fr-FR "File Name"\r
+#string STR_NEW_FILE_NAME_HELP #language en-US "Please input a name for the new file"\r
+ #language fr-FR "Please input a name for the new file"\r
+#string STR_CREATE_FILE_AND_EXIT #language en-US "Create File and Exit"\r
+ #language fr-FR "Create File and Exit"\r
+#string STR_NO_CREATE_FILE_AND_EXIT #language en-US "Discard Create and Exit"\r
+ #language fr-FR "Discard Create and Exit"\r
+#string STR_NEW_FOLDER #language en-US "***NEW FOLDER***"\r
+ #language fr-FR "***NEW FOLDER***"\r
+#string STR_NEW_FOLDER_HELP #language en-US "This menu used to create a new folder in current directory, jump to next page to name the new folder"\r
+ #language fr-FR "This menu used to create a new folder in current directory, jump to next page to name the new folder"\r
+#string STR_ADD_NEW_FOLDER_TITLE #language en-US "Create a new folder"\r
+ #language fr-FR "Create a new folder"\r
+#string STR_NEW_FOLDER_NAME_PROMPT #language en-US "Folder Name"\r
+ #language fr-FR "Folder Name"\r
+#string STR_NEW_FOLDER_NAME_HELP #language en-US "Please input a name for the new folder"\r
+ #language fr-FR "Please input a name for the new folder"\r
+#string STR_CREATE_FOLDER_AND_EXIT #language en-US "Create Folder and Exit"\r
+ #language fr-FR "Create Folder and Exit"\r
+#string STR_NO_CREATE_FOLDER_AND_EXIT #language en-US "Discard Create and Exit"\r
+ #language fr-FR "Discard Create and Exit"\r
//\r
// File Explorer Formset\r
//\r
-// Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
+// Copyright (c) 2004 - 2017, 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
label LABEL_END;\r
endform;\r
\r
+ form formid = FORM_ADD_NEW_FILE_ID,\r
+ title = STRING_TOKEN(STR_ADD_NEW_FILE_TITLE);\r
+\r
+ string\r
+ prompt = STRING_TOKEN(STR_NEW_FILE_NAME_PROMPT),\r
+ help = STRING_TOKEN(STR_NEW_FILE_NAME_HELP),\r
+ flags = INTERACTIVE,\r
+ key = NEW_FILE_NAME_ID,\r
+ minsize = 2,\r
+ maxsize = 20,\r
+ endstring;\r
+\r
+ subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
+\r
+ text\r
+ help = STRING_TOKEN(STR_CREATE_FILE_AND_EXIT),\r
+ text = STRING_TOKEN(STR_CREATE_FILE_AND_EXIT),\r
+ flags = INTERACTIVE,\r
+ key = KEY_VALUE_CREATE_FILE_AND_EXIT;\r
+\r
+ text\r
+ help = STRING_TOKEN(STR_NO_CREATE_FILE_AND_EXIT),\r
+ text = STRING_TOKEN(STR_NO_CREATE_FILE_AND_EXIT),\r
+ flags = INTERACTIVE,\r
+ key = KEY_VALUE_NO_CREATE_FILE_AND_EXIT;\r
+ endform;\r
+\r
+ form formid = FORM_ADD_NEW_FOLDER_ID,\r
+ title = STRING_TOKEN(STR_ADD_NEW_FOLDER_TITLE);\r
+\r
+ string\r
+ prompt = STRING_TOKEN(STR_NEW_FOLDER_NAME_PROMPT),\r
+ help = STRING_TOKEN(STR_NEW_FOLDER_NAME_HELP),\r
+ flags = INTERACTIVE,\r
+ key = NEW_FOLDER_NAME_ID,\r
+ minsize = 2,\r
+ maxsize = 20,\r
+ endstring;\r
+\r
+ subtitle text = STRING_TOKEN(STR_NULL_STRING);\r
+\r
+ text\r
+ help = STRING_TOKEN(STR_CREATE_FOLDER_AND_EXIT),\r
+ text = STRING_TOKEN(STR_CREATE_FOLDER_AND_EXIT),\r
+ flags = INTERACTIVE,\r
+ key = KEY_VALUE_CREATE_FOLDER_AND_EXIT;\r
+\r
+ text\r
+ help = STRING_TOKEN(STR_NO_CREATE_FOLDER_AND_EXIT),\r
+ text = STRING_TOKEN(STR_NO_CREATE_FOLDER_AND_EXIT),\r
+ flags = INTERACTIVE,\r
+ key = KEY_VALUE_NO_CREATE_FOLDER_AND_EXIT;\r
+ endform;\r
+\r
endformset;
\ No newline at end of file