@@ -1103,16 +1103,50 @@ void ProjectManager::_install_project(const String& p_zip_path,const String& p_t
1103
1103
}
1104
1104
1105
1105
void ProjectManager::_files_dropped (StringArray p_files, int p_screen) {
1106
- bool import_project_file = false ;
1106
+ Set<String> folders_set;
1107
+ DirAccess *da = DirAccess::create (DirAccess::ACCESS_FILESYSTEM);
1107
1108
for (int i = 0 ; i < p_files.size (); i++) {
1108
- if (p_files[i].ends_with (" engine.cfg" )) {
1109
- npdialog->import_from_file (p_files[i]);
1110
- import_project_file = true ;
1109
+ String file = p_files[i];
1110
+ folders_set.insert (da->dir_exists (file) ? file : file.get_base_dir ());
1111
+ }
1112
+ memdelete (da);
1113
+ if (folders_set.size ()>0 ) {
1114
+ StringArray folders;
1115
+ for (Set<String>::Element *E=folders_set.front ();E;E=E->next ()) {
1116
+ folders.append (E->get ());
1117
+ }
1118
+
1119
+ bool confirm = true ;
1120
+ if (folders.size ()==1 ) {
1121
+ DirAccess *dir = DirAccess::create (DirAccess::ACCESS_FILESYSTEM);
1122
+ if (dir->change_dir (folders[0 ])==OK) {
1123
+ dir->list_dir_begin ();
1124
+ String file = dir->get_next ();
1125
+ while (confirm && file!=String ()) {
1126
+ if (!da->current_is_dir () && file.ends_with (" engine.cfg" )) {
1127
+ confirm = false ;
1128
+ }
1129
+ file = dir->get_next ();
1130
+ }
1131
+ dir->list_dir_end ();
1132
+ }
1133
+ memdelete (dir);
1134
+ }
1135
+ if (confirm) {
1136
+ multi_scan_ask->get_ok ()->disconnect (" pressed" , this , " _scan_multiple_folders" );
1137
+ multi_scan_ask->get_ok ()->connect (" pressed" , this , " _scan_multiple_folders" , varray (folders));
1138
+ multi_scan_ask->set_text (vformat (TTR (" You are about the scan %s folders for existing Godot projects. Do you confirm?" ), folders.size ()));
1139
+ multi_scan_ask->popup_centered_minsize ();
1140
+ } else {
1141
+ _scan_multiple_folders (folders);
1111
1142
}
1112
1143
}
1113
- if (!import_project_file && p_files.size () > 0 ) {
1114
- scan_dir->set_current_dir (p_files[0 ]);
1115
- scan_dir->popup_centered_ratio ();
1144
+ }
1145
+
1146
+ void ProjectManager::_scan_multiple_folders (StringArray p_files)
1147
+ {
1148
+ for (int i = 0 ; i < p_files.size (); i++) {
1149
+ _scan_begin (p_files.get (i));
1116
1150
}
1117
1151
}
1118
1152
@@ -1136,6 +1170,7 @@ void ProjectManager::_bind_methods() {
1136
1170
ObjectTypeDB::bind_method (" _favorite_pressed" ,&ProjectManager::_favorite_pressed);
1137
1171
ObjectTypeDB::bind_method (" _install_project" ,&ProjectManager::_install_project);
1138
1172
ObjectTypeDB::bind_method (" _files_dropped" ,&ProjectManager::_files_dropped);
1173
+ ObjectTypeDB::bind_method (_MD (" _scan_multiple_folders" , " files" ),&ProjectManager::_scan_multiple_folders);
1139
1174
1140
1175
1141
1176
}
@@ -1332,8 +1367,13 @@ ProjectManager::ProjectManager() {
1332
1367
multi_run_ask = memnew ( ConfirmationDialog );
1333
1368
multi_run_ask->get_ok ()->set_text (TTR (" Run" ));
1334
1369
multi_run_ask->get_ok ()->connect (" pressed" , this , " _run_project_confirm" );
1335
-
1370
+
1336
1371
gui_base->add_child (multi_run_ask);
1372
+
1373
+ multi_scan_ask = memnew ( ConfirmationDialog );
1374
+ multi_scan_ask->get_ok ()->set_text (TTR (" Scan" ));
1375
+
1376
+ gui_base->add_child (multi_scan_ask);
1337
1377
1338
1378
OS::get_singleton ()->set_low_processor_usage_mode (true );
1339
1379
0 commit comments