+AWindowFolderSubItems::AWindowFolderSubItems(AWindowFolderItem *parent, const char *text)
+ : AWindowFolderItem(text)
+{
+ this->parent = parent;
+}
+
+int AWindowFolders::load_expanders()
+{
+ char expanders_path[BCTEXTLEN];
+ mwindow->create_defaults_path(expanders_path, EXPANDERS_FILE);
+ FILE *fp = fopen(expanders_path, "r");
+ if( !fp ) {
+ snprintf(expanders_path, sizeof(expanders_path), "%s/%s",
+ File::get_cindat_path(), EXPANDERS_FILE);
+ fp = fopen(expanders_path, "r");
+ }
+
+ if( !fp ) return 1;
+ const char tab = '\t';
+ char line[BCTEXTLEN]; line[0] = 0;
+ AWindowFolderItem *item = 0, *parent;
+ AWindowFolderSubItems *sub_items = 0;
+ int k = 0;
+ while( fgets(line,sizeof(line),fp) ) {
+ if( line[0] == '#' ) continue;
+ int i = strlen(line);
+ if( i > 0 && line[i-1] == '\n' ) line[--i] = 0;
+ if( i == 0 ) continue;
+ i = 0;
+ for( char *cp=line; *cp==tab; ++cp ) ++i;
+ if( i == 0 ) {
+ int i = gui->folders.size();
+ while( --i >= 0 ) {
+ AssetPicon *folder = (AssetPicon *)gui->folders[i];
+ if( !strcmp(folder->get_text(),_(line)) ) break;
+ }
+ item = (AWindowFolderItem*)(i >= 0 ? gui->folders[i] : 0);
+ sub_items = 0;
+ k = 0;
+ continue;
+ }
+ if( i > k+1 ) continue;
+ if( i == k+1 ) {
+ if( line[i] != '-' && sub_items ) {
+ sub_items->names.append(cstrdup(_(&line[i])));
+ continue;
+ }
+ parent = item;
+ k = i;
+ }
+ else {
+ while( i < k ) {
+ item = item->parent;
+ --k;
+ }
+ parent = item->parent;
+ }
+ ArrayList<BC_ListBoxItem*> *sublist = parent->get_sublist();
+ if( !sublist ) sublist = parent->new_sublist(1);
+ sub_items = new AWindowFolderSubItems(parent, &line[i]);
+ sublist->append(item = sub_items);
+ }
+ fclose(fp);
+ return 0;
+}