#include "atrack.h"
#include "autoconf.h"
#include "automation.h"
-#include "awindowgui.inc"
+#include "awindowgui.h"
#include "bccmodels.h"
#include "bchash.h"
#include "bcsignals.h"
tracks = 0;
labels = 0;
local_session = 0;
- folders.set_array_delete();
id = next_id();
path[0] = 0;
}
delete assets;
delete session;
}
- folders.remove_all_objects();
}
int EDL::load_xml(FileXML *file, uint32_t load_flags)
{
int result = 0;
-
-// Clear objects
- folders.remove_all_objects();
+ folders.clear();
if( (load_flags & LOAD_ALL) == LOAD_ALL ) {
remove_vwindow_edls();
result = file->skip_tag();
}
else
- if( file->tag.title_is("FOLDER") ) {
- char folder[BCTEXTLEN];
- strcpy(folder, file->read_text());
- new_folder(folder);
+ if( file->tag.title_is("FOLDERS") ) {
+ result = folders.load_xml(file);
}
else
if( file->tag.title_is("MIXERS") ) {
if( !session_only ) {
strcpy(this->path, edl->path);
-//printf("EDL::copy_session %p %s\n", this, this->path);
-
- folders.remove_all_objects();
- for( int i=0; i<edl->folders.size(); ++i )
- folders.append(cstrdup(edl->folders[i]));
+ awindow_folder = edl->awindow_folder;
+ folders.copy_from(&edl->folders);
}
if( !parent_edl ) {
session->save_xml(file);
session->save_video_config(file);
session->save_audio_config(file);
-
-// Folders
- for( int i=0; i<folders.size(); ++i ) {
- file->tag.set_title("FOLDER");
- file->append_tag();
- file->append_text(folders[i]);
- file->tag.set_title("/FOLDER");
- file->append_tag();
- file->append_newline();
- }
+ folders.save_xml(file);
if( !parent_edl )
copy_assets(start, end, file, all, output_path);
}
-void EDL::new_folder(const char *folder)
+BinFolder *EDL::get_folder(int no)
+{
+ for( int i=0; i<folders.size(); ++i ) {
+ BinFolder *fp = folders[i];
+ if( no == fp->awindow_folder ) return fp;
+ }
+ return 0;
+}
+
+int EDL::get_folder_number(const char *title)
{
- for( int i=0; i<folders.size(); ++i )
- if( !strcasecmp(folders[i], folder) ) return;
- folders.append(cstrdup(folder));
+ for( int i=0; i<AWINDOW_FOLDERS; ++i ) {
+ if( !strcmp(title, AWindowGUI::folder_names[i]) )
+ return i;
+ }
+ for( int i=0; i<folders.size(); ++i ) {
+ if( !strcmp(title, folders[i]->title) )
+ return folders[i]->awindow_folder;
+ }
+ return AW_NO_FOLDER;
+}
+
+const char *EDL::get_folder_name(int no)
+{
+ if( no >= 0 && no<AWINDOW_FOLDERS )
+ return AWindowGUI::folder_names[no];
+ BinFolder *fp = get_folder(no);
+ return !fp ? "" : fp->title;
+}
+
+int EDL::new_folder(const char *title)
+{
+ if( !title[0] ) return 1;
+ int ret = get_folder_number(title);
+ if( ret >= 0 ) return 1;
+ int idx = AWINDOW_FOLDERS;
+ for( int i=0; i<folders.size(); ++i ) {
+ BinFolder *fp = folders[i];
+ int no = fp->awindow_folder;
+ if( no >= idx ) idx = no+1;
+ }
+ folders.append(new BinFolder(idx, title));
+ return 0;
}
-void EDL::delete_folder(const char *folder)
+int EDL::delete_folder(const char *title)
{
- int i = folders.size();
- while( --i >= 0 && strcasecmp(folders[i], folder) );
- if( i >= 0 ) folders.remove_number(i);
+ int k = folders.size();
+ while( --k >= 0 && strcmp(title, folders[k]->title) );
+ if( k >= 0 )
+ folders.remove_object_number(k);
+ return k;
}
int EDL::get_use_vconsole(VEdit* *playable_edit,