add binfolder path relative filters, fix gbrp color model, vwdw timebar tweaks, title...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / binfolder.C
index 593bfdab1fe041b27ba15a9caf15a0b30de40421..ffe5a12f9484548a3a2aabcfab901e3236f0dde9 100644 (file)
@@ -338,7 +338,7 @@ int BinFolder::load_xml(FileXML *file)
        return ret;
 }
 
-int BinFolder::add_patterns(ArrayList<Indexable*> *drag_idxbls)
+int BinFolder::add_patterns(ArrayList<Indexable*> *drag_idxbls, int use_basename)
 {
        int n = drag_idxbls->size();
        if( !n ) return 1;
@@ -349,7 +349,14 @@ int BinFolder::add_patterns(ArrayList<Indexable*> *drag_idxbls)
                if( !idxbl->is_asset &&
                    idxbl->awindow_folder == AW_PROXY_FOLDER )
                        continue;
-               len += strlen(idxbl->get_title()) + 1;
+
+               const char *tp = idxbl->get_title();
+               if( use_basename && idxbl->is_asset ) {
+                       const char *cp = strrchr(tp, '/');
+                       if( cp ) tp = cp + 1;
+                       len += 2;  // "*/" + fn
+               }
+               len += strlen(tp) + 1;
        }
        if( !len ) return 1;
        char *pats = new char[len+1], *bp = pats;
@@ -359,8 +366,13 @@ int BinFolder::add_patterns(ArrayList<Indexable*> *drag_idxbls)
                    idxbl->awindow_folder == AW_PROXY_FOLDER )
                        continue;
                if( i > 0 ) *bp++ = '\n';
-               const char *cp = idxbl->get_title();
-               while( *cp ) *bp++ = *cp++;
+               const char *tp = idxbl->get_title();
+               if( use_basename && idxbl->is_asset ) {
+                       const char *cp = strrchr(tp, '/');
+                       if( cp ) tp = cp + 1;
+                       *bp++ = '*';  *bp++ = '/';
+               }
+               while( *tp ) *bp++ = *tp++;
        }
        *bp = 0;
 // new pattern filter
@@ -1772,7 +1784,7 @@ void ModifyFolderGUI::create_objects()
        add_subwindow(text_box = new BC_TextBox(x, y, 300, 1, thread->folder->title));
        y += text_box->get_h() + 10;
        int lh = get_h() - y - BC_OKButton::calculate_h() - 30;
-       int lw = get_w() - x - 120;
+       int lw = get_w() - x - 160;
        add_subwindow(folder_list =
                new BinFolderList(thread->folder, thread->agui->mwindow, this, x, y, lw, lh));
        folder_list->create_objects();
@@ -1799,7 +1811,7 @@ int ModifyFolderGUI::resize_event(int w, int h)
        int lx = folder_list->get_x();
        int ly = folder_list->get_y();
        int lh = h - ly - BC_OKButton::calculate_h() - 30;
-       int lw = w - lx - 120;
+       int lw = w - lx - 160;
        folder_list->reposition_window(lx, ly, lw, lh);
        int x1 = lx + lw + 15;
        add_filter->reposition_window(x1, add_filter->get_y());
@@ -1826,6 +1838,7 @@ ModifyFolderThread::ModifyFolderThread(AWindowGUI *agui)
 {
        this->agui = agui;
        original = 0;
+       modify_edl = 0;
        folder = 0;
 }
 
@@ -1839,7 +1852,8 @@ void ModifyFolderThread::start(BinFolder *folder, int x, int y, int w, int h)
 {
        close_window();
        this->original = folder;
-       agui->mwindow->edl->add_user();
+       this->modify_edl = agui->mwindow->edl;
+       this->modify_edl->add_user();
        this->folder = new BinFolder(*folder);
        this->wx = x;  this->wy = y;
        this->ww = w;  this->wh = h;
@@ -1872,7 +1886,7 @@ void ModifyFolderThread::handle_done_event(int result)
        }
        delete folder;  folder = 0;
        original = 0;
-       agui->mwindow->edl->remove_user();
+       modify_edl->remove_user();
 }
 
 void ModifyFolderThread::handle_close_event(int result)