|
@@ -242,9 +242,8 @@ laFileBrowser *la_FileBrowserInit(laOperator *a){
|
|
|
|
|
|
strcpy(fb->Path, MAIN.WorkingDirectory->Ptr);
|
|
|
|
|
|
- if (strArgumentMatch(a->ExtraInstructionsP, "select", "folder")){
|
|
|
- fb->SelectFolder = LA_FILE_SELECT_FOLDER;
|
|
|
- }
|
|
|
+ if (strArgumentMatch(a->ExtraInstructionsP, "select", "folder")){ fb->SelectFolder = LA_FILE_SELECT_FOLDER; }
|
|
|
+ if (strArgumentMatch(a->ExtraInstructionsP, "warn_file_exists", "true")){ fb->WarnFileExists = 1; }
|
|
|
|
|
|
la_FileBrowserRebuildList(fb);
|
|
|
|
|
@@ -267,14 +266,18 @@ void laset_FileBrowserSelectFile(laFileBrowser *fb, laFileItem *fi, int State){
|
|
|
fb->Active = fi;
|
|
|
}
|
|
|
}
|
|
|
-int la_FileBrowserConfirm(laOperator *a, laFileBrowser *fb){
|
|
|
- char buf[2048] = {0};
|
|
|
+void* la_FileBrowserGetFullPath(laFileBrowser *fb,char* buf){
|
|
|
+ buf[0]=0;
|
|
|
int plen;
|
|
|
- if (!fb->SelectFolder && fb->FileName[0] == L'\0') return 0;
|
|
|
+ if (!fb->SelectFolder && fb->FileName[0] == L'\0') return;
|
|
|
plen = strlen(fb->Path);
|
|
|
if (fb->Path[plen - 1] != L'/') strcat(fb->Path, "/");
|
|
|
strCopyFull(buf, fb->Path);
|
|
|
strcat(buf, fb->FileName);
|
|
|
+}
|
|
|
+int la_FileBrowserConfirm(laOperator *a, laFileBrowser *fb){
|
|
|
+ char buf[2048];
|
|
|
+ la_FileBrowserGetFullPath(fb,buf);
|
|
|
laConfirmString(a, buf, LA_CONFIRM_OK);
|
|
|
return 1;
|
|
|
}
|
|
@@ -329,14 +332,11 @@ int OPMOD_FileBrowser(laOperator *a, laEvent *e){
|
|
|
|
|
|
if (a->ConfirmData){
|
|
|
if (a->ConfirmData->Mode == LA_CONFIRM_CANCEL){
|
|
|
- laConfirmSameDataIfAny(a);
|
|
|
- return LA_FINISHED_PASS;
|
|
|
+ if(fb->StatusWaitingWarning){ fb->StatusWaitingWarning=0; return LA_RUNNING; }
|
|
|
+ laConfirmSameDataIfAny(a); return LA_FINISHED_PASS;
|
|
|
}
|
|
|
if (a->ConfirmData->Mode == LA_CONFIRM_OK){
|
|
|
- if (la_FileBrowserConfirm(a, fb)){
|
|
|
- //MessageBox(0, a->NextConfirmData->StrData, "!", 0);
|
|
|
- }
|
|
|
- return LA_FINISHED_PASS;
|
|
|
+ la_FileBrowserConfirm(a, fb); return LA_FINISHED_PASS;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -359,6 +359,40 @@ int OPINV_FileBrowserUpLevel(laOperator *a, laEvent *e){
|
|
|
}
|
|
|
return LA_FINISHED_PASS;
|
|
|
}
|
|
|
+int OPCHK_FileBrowserCanConfirm(laPropPack *This, laStringSplitor *ss){
|
|
|
+ if(!OPCHK_IsFileBrowser(This,ss)) return 0;
|
|
|
+ laFileBrowser* fb=This->EndInstance;
|
|
|
+ if(fb->SelectFolder) return 1;
|
|
|
+ if(fb->FileName[0]) return 1;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+int OPINV_FileBrowserConfirm(laOperator *a, laEvent *e){
|
|
|
+ if (a->This){
|
|
|
+ laFileBrowser* fb=a->This->LastPs->UseInstance;
|
|
|
+ if(fb->WarnFileExists){
|
|
|
+ char path[2048]; la_FileBrowserGetFullPath(fb, path);
|
|
|
+ if(access(path, F_OK)==0){
|
|
|
+ laEnableYesNoPanel(a,0,"File exists","Selected file already exists. Overwrite the file?",e->x-LA_RH,e->y-LA_RH,200,e);
|
|
|
+ fb->StatusWaitingWarning=1; return LA_RUNNING;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ laConfirmInt(a, 0, LA_CONFIRM_OK); return LA_FINISHED_PASS;
|
|
|
+ }
|
|
|
+ return LA_FINISHED_PASS;
|
|
|
+}
|
|
|
+int OPMOD_FileBrowserConfirm(laOperator *a, laEvent *e){
|
|
|
+ laFileBrowser* fb=a->This->LastPs->UseInstance;
|
|
|
+ if (a->ConfirmData){
|
|
|
+ if (a->ConfirmData->Mode == LA_CONFIRM_CANCEL){
|
|
|
+ if(fb->StatusWaitingWarning){ fb->StatusWaitingWarning=0; return LA_FINISHED; }
|
|
|
+ }
|
|
|
+ if (a->ConfirmData->Mode == LA_CONFIRM_OK){
|
|
|
+ laConfirmInt(a, 0, LA_CONFIRM_OK); return LA_FINISHED_PASS;
|
|
|
+ }
|
|
|
+ return LA_FINISHED;
|
|
|
+ }
|
|
|
+ return LA_RUNNING;
|
|
|
+}
|
|
|
|
|
|
int OPEXT_UDFOperation(laOperator *a, laEvent *e){
|
|
|
laUDFPreviewExtra *upe = a->CustomData;
|
|
@@ -1925,6 +1959,7 @@ void la_RegisterBuiltinOperators(){
|
|
|
laCreateOperatorType("LA_view_hyper_data", "View Hyper Data", "Show Properties Of Specific Data Block", OPCHK_IsHyper, 0, 0, OPINV_ViewHyperData, 0, L'🛈', LA_ACTUATOR_SYSTEM);
|
|
|
|
|
|
laCreateOperatorType("LA_file_dialog_up", "Up", "Select Upper Folder Level", OPCHK_IsFileBrowser, 0, 0, OPINV_FileBrowserUpLevel, 0, L'🢰', LA_ACTUATOR_SYSTEM | LA_ACTUATOR_HIDDEN);
|
|
|
+ laCreateOperatorType("LA_file_dialog_confirm", "Confirm", "Confirm selection", OPCHK_FileBrowserCanConfirm, 0, 0, OPINV_FileBrowserConfirm, OPMOD_FileBrowserConfirm, L'✔', LA_ACTUATOR_SYSTEM | LA_ACTUATOR_HIDDEN);
|
|
|
at = laCreateOperatorType("LA_file_dialog", "File Dialog", "Do File Operations", 0, 0, OPEXT_FileBrowser, OPINV_FileBrowser, OPMOD_FileBrowser, L'🗐', LA_ACTUATOR_SYSTEM);
|
|
|
pc = laDefineOperatorProps(at, 2);
|
|
|
at->UiDefine = laui_FileBrowserFileList;
|
|
@@ -1939,6 +1974,7 @@ void la_RegisterBuiltinOperators(){
|
|
|
laAddEnumItemAs(ep, "folder", "Folder", "Folder", LA_FILE_SELECT_FOLDER, L'🖹');
|
|
|
}
|
|
|
laAddOperatorProperty(pc, "folder_up", "Up", "Select Upper Folder Level In File Browsers", "LA_file_dialog_up", L'🢰', 0);
|
|
|
+ laAddOperatorProperty(pc, "confirm", "Confirm", "Confirm selection", "LA_file_dialog_confirm", L'✔', 0);
|
|
|
p = laAddPropertyContainer("disk_item", "Disk Item", "A Logical Drive (In Windows)", 0, laui_FileBrowserDiskItem, 0, 0, 0, 0);{
|
|
|
laAddStringProperty(p, "id", "ID", "Disk Identifier", 0, 0, 0, 0, 0, 0, 0, laget_FileBrowserDiskID, 0, 0, 0);
|
|
|
laAddFloatProperty(p, "total_gb", "Total", "Disk Total Compacity In Gigabytes", 0, 0, "GB", 0, 0, 0, 0, 0, offsetof(laDiskItem, Total_GB), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,LA_READ_ONLY);
|