add clip folders, icon margins, fix safe regions, update neophyte, fix folder edl...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / awindowgui.C
index 9be5b66ba743405552d4b4a4a384de0508395173..409ba26ff35884b54f1014c172628ac44d7be3ba 100644 (file)
@@ -1676,8 +1676,8 @@ EDL *AWindowGUI::collect_proxy(Indexable *indexable)
 // make a clip from proxy video tracks and unproxy audio tracks
        EDL *proxy_edl = new EDL(mwindow->edl);
        proxy_edl->create_objects();
+       proxy_edl->set_path(proxy_asset->path);
        FileSystem fs;  fs.extract_name(path, proxy_asset->path);
-       proxy_edl->set_path(path);
        strcpy(proxy_edl->local_session->clip_title, path);
        strcpy(proxy_edl->local_session->clip_notes, _("Proxy clip"));
        proxy_edl->session->video_tracks = proxy_asset->layers;
@@ -1702,18 +1702,17 @@ EDL *AWindowGUI::collect_proxy(Indexable *indexable)
 }
 
 
-void AWindowGUI::collect_assets(int proxy)
+void AWindowGUI::collect_assets()
 {
        mwindow->session->drag_assets->remove_all();
        mwindow->session->drag_clips->remove_all();
-       mwindow->session->clear_drag_proxy();
        int i = 0;  AssetPicon *result;
        while( (result = (AssetPicon*)asset_list->get_selection(0, i++)) != 0 ) {
-               Indexable *indexable = result->indexable;  EDL *drag_edl;
-               if( proxy && (drag_edl=collect_proxy(indexable)) ) {
-                       mwindow->session->drag_clips->append(drag_edl);
-                       mwindow->session->drag_proxy->append(drag_edl);
-                       continue;
+               Indexable *indexable = result->indexable;
+               if( indexable && indexable->is_asset &&
+                   indexable->awindow_folder == AW_PROXY_FOLDER ) {
+                       EDL *drag_edl = collect_proxy(indexable);
+                       if( drag_edl ) mwindow->session->drag_clips->append(drag_edl);
                }
                if( indexable ) {
                        mwindow->session->drag_assets->append(indexable);
@@ -1732,19 +1731,24 @@ void AWindowGUI::copy_picons(ArrayList<BC_ListBoxItem*> *dst,
 // Remove current pointers
        dst[0].remove_all();
        dst[1].remove_all_objects();
+       BinFolder *bin_folder = folder < AWINDOW_USER_FOLDERS ? 0 :
+               mwindow->edl->get_folder(folder);
 
 // Create new pointers
        for( int i = 0; i < src->total; i++ ) {
                int visible = folder < 0 ? 1 : 0;
                AssetPicon *picon = (AssetPicon*)src->values[i];
                picon->sort_key = -1;
-               if( !visible && folder >= AWINDOW_USER_FOLDERS && picon->indexable ) {
-                       picon->sort_key = mwindow->edl->folders.matches_indexable(folder, picon->indexable);
-                       if( picon->sort_key >= 0 ) visible = 1;
+               if( !visible && bin_folder ) {
+                       Indexable *idxbl = bin_folder->is_clips ? picon->edl : picon->indexable;
+                       if( idxbl ) {
+                               picon->sort_key = mwindow->edl->folders.matches_indexable(folder, idxbl);
+                               if( picon->sort_key >= 0 ) visible = 1;
+                       }
                }
                if( !visible && picon->indexable && picon->indexable->awindow_folder == folder )
                        visible = 1;
-               if( !visible && picon->edl && picon->edl->awindow_folder == folder )
+               if( !visible && picon->edl && picon->edl->local_session->folder == folder )
                        visible = 1;
                if( visible ) {
                        const char *text = search_text->get_text();
@@ -2067,10 +2071,12 @@ int AWindowFolders::drag_stop()
                AssetPicon *picon = (AssetPicon *)(item_no < 0 ? 0 : gui->folders[item_no]);
                if( picon && picon->foldernum >= AWINDOW_USER_FOLDERS ) {
                        BinFolder *folder = mwindow->edl->get_folder(picon->foldernum);
-                       ArrayList<Indexable *> *drags = mwindow->session->drag_assets;
-                       if( folder && drags ) folder->add_patterns(drags);
+                       ArrayList<Indexable *> *drags = folder->is_clips ?
+                               ((ArrayList<Indexable *> *)mwindow->session->drag_clips) :
+                               ((ArrayList<Indexable *> *)mwindow->session->drag_assets);
+                       if( folder && drags && !folder->add_patterns(drags) )
+                               flicker(1,30);
                        mwindow->session->current_operation = ::NO_OPERATION;
-                       flicker(1,30);
                        result = 1;
                }
        }
@@ -2244,7 +2250,7 @@ void AWindowAssets::draw_background()
 int AWindowAssets::drag_start_event()
 {
        int collect_pluginservers = 0;
-       int collect_assets = 0, proxy = 0;
+       int collect_assets = 0;
 
        if( BC_ListBox::drag_start_event() ) {
                switch( mwindow->edl->session->awindow_folder ) {
@@ -2267,9 +2273,6 @@ int AWindowAssets::drag_start_event()
                case AW_LABEL_FOLDER:
                        // do nothing!
                        break;
-               case AW_PROXY_FOLDER:
-                       proxy = 1;
-                       // fall thru
                case AW_MEDIA_FOLDER:
                default:
                        mwindow->session->current_operation = DRAG_ASSET;
@@ -2290,7 +2293,7 @@ int AWindowAssets::drag_start_event()
                }
 
                if( collect_assets ) {
-                       gui->collect_assets(proxy);
+                       gui->collect_assets();
                }
 
                return 1;
@@ -2382,7 +2385,6 @@ int AWindowAssets::drag_stop_event()
        BC_ListBox::drag_stop_event();
 // since NO_OPERATION is also defined in listbox, we have to reach for global scope...
        mwindow->session->current_operation = ::NO_OPERATION;
-       mwindow->session->clear_drag_proxy();
 
        return 1;
 }