refresh frame fix, dblclk proxy viewer fix, vicon refresh fix for awdw resize, fix...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / awindowgui.C
index 9be5b66ba743405552d4b4a4a384de0508395173..9f966f75f6a8116087033dd530b7abd62979aa85 100644 (file)
@@ -173,12 +173,12 @@ int64_t AssetVIcon::set_seq_no(int64_t no)
 int AssetVIcon::get_vx()
 {
        BC_ListBox *lbox = picon->gui->asset_list;
-       return lbox->get_item_x(picon);
+       return lbox->get_item_x(picon) + ICON_MARGIN;
 }
 int AssetVIcon::get_vy()
 {
        BC_ListBox *lbox = picon->gui->asset_list;
-       return lbox->get_item_y(picon);
+       return lbox->get_item_y(picon) + ICON_MARGIN;
 }
 
 void AssetVIcon::load_audio()
@@ -1136,6 +1136,10 @@ int AWindowGUI::resize_event(int w, int h)
 //     view->reposition_window(x, y);
 
        BC_WindowBase::resize_event(w, h);
+       int x0 = 0, x1 = asset_list->get_w();
+       int y0 = asset_list->get_title_h();
+       int y1 = asset_list->get_h();
+       vicon_thread->set_drawing_area(x0,y0, x1,y1);
        return 1;
 }
 
@@ -1672,12 +1676,12 @@ EDL *AWindowGUI::collect_proxy(Indexable *indexable)
        int proxy_scale = mwindow->edl->session->proxy_scale;
        ProxyRender::from_proxy_path(path, proxy_asset, proxy_scale);
        Asset *unproxy_asset = mwindow->edl->assets->get_asset(path);
-       if( !unproxy_asset || !unproxy_asset->channels ) return 0;
+       if( !unproxy_asset || !unproxy_asset->layers ) return 0;
 // 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 +1706,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 +1735,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 +2075,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 +2254,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 +2277,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 +2297,7 @@ int AWindowAssets::drag_start_event()
                }
 
                if( collect_assets ) {
-                       gui->collect_assets(proxy);
+                       gui->collect_assets();
                }
 
                return 1;
@@ -2382,7 +2389,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;
 }