add window layout feature, resource wdw select used, blue_dot/blond_cv theme fix...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / awindowgui.C
index f4a2474b3c2d1c3b6581d2fd6417e15983ca2802..56347110c29358c2b756cf66510da519ab90f47b 100644 (file)
 #include "asset.h"
 #include "assetedit.h"
 #include "assetpopup.h"
+#include "assetremove.h"
 #include "assets.h"
 #include "audiodevice.h"
-#include "awindowgui.h"
 #include "awindow.h"
+#include "awindowgui.h"
 #include "bccmodels.h"
 #include "bcsignals.h"
 #include "bchash.h"
@@ -1467,14 +1468,26 @@ int AWindowGUI::keypress_event()
        case 'v':
                return cycle_assetlist_format();
        case DELETE:
-               if( shift_down() ) {
+               if( shift_down() && ctrl_down() ) {
                        PluginServer* plugin = selected_plugin();
                        if( !plugin ) break;
                        remove_plugin = new AWindowRemovePlugin(awindow, plugin);
                        unlock_window();
                        remove_plugin->start();
-                       lock_window();
+                       lock_window("AWindowGUI::keypress_event 1");
+                       return 1;
                }
+               collect_assets();
+               if( shift_down() ) {
+                       mwindow->awindow->asset_remove->start();
+                       return 1;
+               }
+               unlock_window();
+               mwindow->remove_assets_from_project(1, 1,
+                       mwindow->session->drag_assets,
+                       mwindow->session->drag_clips);
+               lock_window("AWindowGUI::keypress_event 2");
+               return 1;
        }
        return 0;
 }
@@ -2924,3 +2937,47 @@ int AWindowListSort::handle_event()
        return 1;
 }
 
+AssetSelectUsedItem::AssetSelectUsedItem(AssetSelectUsed *select_used, const char *text, int action)
+ : BC_MenuItem(text)
+{
+       this->select_used = select_used;
+       this->action = action;
+}
+
+int AssetSelectUsedItem::handle_event()
+{
+       MWindow *mwindow = select_used->mwindow;
+       AWindowGUI *gui = select_used->gui;
+       AWindowAssets *asset_list = gui->asset_list;
+       ArrayList<BC_ListBoxItem*> *data = gui->displayed_assets;
+       asset_list->set_all_selected(data, 0);
+
+       for( int i = 0; i < data->total; i++ ) {
+               AssetPicon *picon = (AssetPicon*)data->values[i];
+               Indexable *idxbl = picon->indexable ? picon->indexable :
+                   picon->edl ? picon->edl->get_proxy_asset() : 0;
+               int used = idxbl && mwindow->edl->in_use(idxbl) ? 1 : 0;
+               int selected = 0;
+               switch( action ) {
+               case SELECT_USED:    selected = used;   break;
+               case SELECT_UNUSED:  selected = !used;  break;
+               }
+               asset_list->set_selected(data, i, selected);
+       }
+
+       int asset_xposition = asset_list->get_xposition();
+       int asset_yposition = asset_list->get_yposition();
+       asset_list->update(gui->displayed_assets, gui->asset_titles,
+               mwindow->edl->session->asset_columns, ASSET_COLUMNS,
+               asset_xposition, asset_yposition, -1, 0);
+       asset_list->center_selection();
+       return 1;
+}
+
+AssetSelectUsed::AssetSelectUsed(MWindow *mwindow, AWindowGUI *gui)
+ : BC_MenuItem(_("Select used"))
+{
+       this->mwindow = mwindow;
+       this->gui = gui;
+}
+