add resource wdw folder expanders, fix plugin close deadlock detect
[goodguy/history.git] / cinelerra-5.1 / cinelerra / awindowgui.h
index 7ca0e6a68c6abe10c2ea9145b18ed72ed2e6f22d..6cab2a6d2c45bd3b432c44b86e436e7b0a6f0c9c 100644 (file)
 
 #include "arraylist.h"
 #include "bcdialog.h"
+#include "binfolder.inc"
 #include "assetpopup.inc"
 #include "asset.inc"
 #include "assets.inc"
+#include "audiodevice.inc"
 #include "awindow.inc"
-#include "awindowmenu.inc"
+#include "awindowgui.inc"
+#include "clippopup.inc"
 #include "edl.inc"
+#include "effectlist.inc"
+#include "folderlistmenu.inc"
 #include "guicast.h"
+#include "labeledit.inc"
+#include "labelpopup.inc"
 #include "labels.h"
 #include "indexable.inc"
 #include "mwindow.inc"
-#include "newfolder.inc"
+#include "mutex.inc"
 #include "pluginserver.inc"
+#include "proxypopup.inc"
+#include "renderengine.inc"
+#include "samples.inc"
 #include "vicon.h"
 
-class AWindowAssets;
-class AWindowFolders;
-class AWindowNewFolder;
-class AWindowDeleteFolder;
-class AWindowRenameFolder;
-class AWindowDeleteDisk;
-class AWindowDeleteProject;
-class AWindowDivider;
-class AWindowInfo;
-class AWindowRedrawIndex;
-class AWindowPaste;
-class AWindowAppend;
-class AWindowView;
-class AddTools;
-class AddPluginsMenu;
-class AddPluginItem;
-class AVIconDrawing;
-
-class AssetPicon;
-class AssetVIcon;
-class LabelPopup;
-class LabelPopupEdit;
-class AWindowGUI;
-
-class AssetPicon : public BC_ListBoxItem
+class AWindowFolderItem : public BC_ListBoxItem
+{
+public:
+       AWindowFolderItem();
+       AWindowFolderItem(const char *text, int color = -1);
+       AWindowFolderItem(const char *text, BC_Pixmap *icon, int color = -1);
+
+       AssetPicon *get_picon();
+       int matches(const char *text);
+
+       AWindowFolderItem *parent;
+};
+
+class AssetPicon : public AWindowFolderItem
 {
 public:
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, Indexable *indexable);
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, EDL *edl);
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, PluginServer *plugin);
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, Label *plugin);
-       AssetPicon(MWindow *mwindow, AWindowGUI *gui, const char *folder);
+       AssetPicon(MWindow *mwindow, AWindowGUI *gui, int folder, int persist);
+       AssetPicon(MWindow *mwindow, AWindowGUI *gui, int folder, const char *title);
        virtual ~AssetPicon();
 
        void create_objects();
        void reset();
+       static void draw_hue_bar(VFrame *frame, double t);
+       static void draw_wave(VFrame *frame, double *dp, int len,
+               int base_color, int line_color);
+       void open_render_engine(EDL *edl, int is_audio);
+       void close_render_engine();
+       void render_video(int64_t pos, VFrame *vfrm);
+       void render_audio(int64_t pos, Samples **samples, int len);
+       VFrame *get_vicon_frame();
 
        MWindow *mwindow;
        AWindowGUI *gui;
        BC_Pixmap *icon;
        VFrame *icon_vframe;
+       VFrame *vicon_frame;
+       int foldernum;
+// sublist items if set
+       AWindowFolderSubItems *sub_items;
+
 // ID of thing pointed to
        int id;
 
@@ -89,12 +102,32 @@ public:
        EDL *edl;
 
        int in_use;
-
-
        int persistent;
+       time_t comments_time;
+       double sort_key;
        PluginServer *plugin;
        Label *label;
        VIcon *vicon;
+       RenderEngine *render_engine;
+};
+
+typedef int16_t vicon_audio_t;
+
+class AssetVIconAudio : public Thread
+{
+public:
+       AssetVIconAudio(AWindowGUI *gui);
+       ~AssetVIconAudio();
+
+       void run();
+       void start(AssetVIcon *vicon);
+       void stop(int wait);
+
+       AWindowGUI *gui;
+       AudioDevice *audio;
+       AssetVIcon *vicon;
+       int interrupted;
+       int audio_pos;
 };
 
 class AssetVIcon : public VIcon {
@@ -107,6 +140,9 @@ public:
        int64_t set_seq_no(int64_t no);
        int get_vx();
        int get_vy();
+       void load_audio();
+       void start_audio();
+       void stop_audio();
 
        AssetVIcon(AssetPicon *picon, int w, int h, double framerate, int64_t length);
        ~AssetVIcon();
@@ -157,13 +193,14 @@ public:
        void async_update_assets();     // Sends update asset event
        void update_effects();
        void sort_assets();
+       void sort_folders();
        void reposition_objects();
-       int current_folder_number();
 // Call back for MWindow entry point
        int drag_motion();
        int drag_stop();
 // Collect items into the drag vectors of MainSession
-       void collect_assets();
+       void collect_assets(int proxy=0);
+       EDL *collect_proxy(Indexable *indexable);
        void create_persistent_folder(ArrayList<BC_ListBoxItem*> *output,
                int do_audio,
                int do_video,
@@ -171,10 +208,8 @@ public:
                int is_transition);
        void create_label_folder();
        void copy_picons(ArrayList<BC_ListBoxItem*> *dst,
-               ArrayList<BC_ListBoxItem*> *src,
-               char *folder);
-       void sort_picons(ArrayList<BC_ListBoxItem*> *src,
-               char *folder);
+               ArrayList<BC_ListBoxItem*> *src, int folder);
+       void sort_picons(ArrayList<BC_ListBoxItem*> *src);
 // Return the selected asset in asset_list
        Indexable* selected_asset();
        PluginServer* selected_plugin();
@@ -184,6 +219,14 @@ public:
        int load_defaults(BC_Hash *defaults);
        void start_vicon_drawing();
        void stop_vicon_drawing();
+       void update_picon(Indexable *indexable);
+       int cycle_assetlist_format();
+
+       VFrame *get_picon(const char *name, const char *plugin_icons);
+       VFrame *get_picon(const char *name);
+       void resource_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, int idx);
+       void theme_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn);
+       void plugin_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, unsigned char *png);
 
        MWindow *mwindow;
        AWindow *awindow;
@@ -191,6 +234,8 @@ public:
        AWindowAssets *asset_list;
        AWindowFolders *folder_list;
        AWindowDivider *divider;
+       AWindowSearchText *search_text;
+       Mutex *folder_lock;
 
 // Store data to speed up responses
 // Persistant data for listboxes
@@ -206,34 +251,51 @@ public:
 // Currently displayed data for listboxes
 // Currently displayed assets + comments
        ArrayList<BC_ListBoxItem*> displayed_assets[2];
-
        const char *asset_titles[ASSET_COLUMNS];
+       int displayed_folder;
 
        BC_Hash *defaults;
 // Persistent icons
-       BC_Pixmap *folder_icon;
-       BC_Pixmap *file_icon;
-       BC_Pixmap *audio_icon;
-       BC_Pixmap *video_icon;
+       BC_Pixmap *aeffect_folder_icon;      VFrame *aeffect_folder_vframe;
+       BC_Pixmap *atransition_folder_icon;  VFrame *atransition_folder_vframe;
+       BC_Pixmap *clip_folder_icon;         VFrame *clip_folder_vframe;
+       BC_Pixmap *label_folder_icon;        VFrame *label_folder_vframe;
+       BC_Pixmap *media_folder_icon;        VFrame *media_folder_vframe;
+       BC_Pixmap *proxy_folder_icon;        VFrame *proxy_folder_vframe;
+       BC_Pixmap *veffect_folder_icon;      VFrame *veffect_folder_vframe;
+       BC_Pixmap *vtransition_folder_icon;  VFrame *vtransition_folder_vframe;
+       BC_Pixmap *folder_icons[AWINDOW_FOLDERS];
+
+       BC_Pixmap *folder_icon;       VFrame *folder_vframe;
+       BC_Pixmap *file_icon;         VFrame *file_vframe;
+       BC_Pixmap *audio_icon;        VFrame *audio_vframe;
+       BC_Pixmap *video_icon;        VFrame *video_vframe;
+       BC_Pixmap *label_icon;        VFrame *label_vframe;
        BC_Pixmap *clip_icon;         VFrame *clip_vframe;
        BC_Pixmap *atransition_icon;  VFrame *atransition_vframe;
        BC_Pixmap *vtransition_icon;  VFrame *vtransition_vframe;
        BC_Pixmap *aeffect_icon;      VFrame *aeffect_vframe;
+       BC_Pixmap *veffect_icon;      VFrame *veffect_vframe;
        BC_Pixmap *ladspa_icon;       VFrame *ladspa_vframe;
        BC_Pixmap *ff_aud_icon;       VFrame *ff_aud_vframe;
        BC_Pixmap *ff_vid_icon;       VFrame *ff_vid_vframe;
-       BC_Pixmap *veffect_icon;      VFrame *veffect_vframe;
-       NewFolderThread *newfolder_thread;
 
 // Popup menus
        AssetPopup *asset_menu;
+       ClipPopup *clip_menu;
        LabelPopup *label_menu;
+       ProxyPopup *proxy_menu;
+       EffectListMenu *effectlist_menu;
        AssetListMenu *assetlist_menu;
+       ClipListMenu *cliplist_menu;
+       LabelListMenu *labellist_menu;
+       ProxyListMenu *proxylist_menu;
        FolderListMenu *folderlist_menu;
        AddTools *add_tools;
 // Temporary for reading picons from files
        VFrame *temp_picon;
        VIconThread *vicon_thread;
+       AssetVIconAudio *vicon_audio;
 
        int64_t plugin_visibility;
        AWindowRemovePlugin *remove_plugin;
@@ -244,8 +306,11 @@ public:
 
 // Create custom atoms to be used for async messages between windows
        int create_custom_xatoms();
-// Function to overload to recieve customly defined atoms
-       virtual int recieve_custom_xatoms(xatom_event *event);
+// Function to overload to receive customly defined atoms
+       virtual int receive_custom_xatoms(xatom_event *event);
+       static const char *folder_names[];
+       NewFolderThread *new_folder_thread;
+       ModifyFolderThread *modify_folder_thread;
 
 private:
        void update_folder_list();
@@ -270,8 +335,12 @@ public:
        int drag_stop_event();
        int button_press_event();
        int column_resize_event();
+       int focus_in_event();
+       int focus_out_event();
        int cursor_enter_event();
        int cursor_leave_event();
+       void update_vicon_area();
+       int mouse_over_event(int no);
 
        MWindow *mwindow;
        AWindowGUI *gui;
@@ -291,6 +360,22 @@ public:
        AWindowGUI *gui;
 };
 
+class AWindowSubFolderNames : public ArrayList<const char *>
+{
+public:
+       AWindowSubFolderNames() { set_array_delete(); }
+       ~AWindowSubFolderNames() { remove_all_objects(); }
+};
+
+class AWindowFolderSubItems : public AWindowFolderItem
+{
+public:
+       AWindowFolderSubItems(AWindowFolderItem *parent, const char *text);
+       int matches(const char *text);
+
+       AWindowSubFolderNames names;
+};
+
 class AWindowFolders : public BC_ListBox
 {
 public:
@@ -299,39 +384,42 @@ public:
 
        int selection_changed();
        int button_press_event();
+       int drag_stop();
+       int load_expanders();
 
        MWindow *mwindow;
        AWindowGUI *gui;
+// last selection
+       AWindowFolderItem *last_item0, *last_item1;
 };
 
-class AWindowNewFolder : public BC_Button
+class AWindowSearchTextBox : public BC_TextBox
 {
 public:
-       AWindowNewFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
+       AWindowSearchTextBox(AWindowSearchText *search_text, int x, int y, int w);
        int handle_event();
-       MWindow *mwindow;
-       AWindowGUI *gui;
-       int x, y;
-};
 
-class AWindowDeleteFolder : public BC_Button
-{
-public:
-       AWindowDeleteFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
-       int handle_event();
-       MWindow *mwindow;
-       AWindowGUI *gui;
-       int x, y;
+       AWindowSearchText *search_text;
 };
 
-class AWindowRenameFolder : public BC_Button
+class AWindowSearchText
 {
 public:
-       AWindowRenameFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
+       AWindowSearchText(MWindow *mwindow, AWindowGUI *gui, int x, int y);
+
        int handle_event();
+       void create_objects();
+       int get_w();
+       int get_h();
+       void reposition_window(int x, int y, int w);
+       const char *get_text();
+       void clear();
+
        MWindow *mwindow;
        AWindowGUI *gui;
        int x, y;
+       BC_Title *text_title;
+       BC_TextBox *text_box;
 };
 
 class AWindowDeleteDisk : public BC_Button
@@ -404,34 +492,6 @@ public:
        int x, y;
 };
 
-class LabelPopup : public BC_PopupMenu
-{
-public:
-       LabelPopup(MWindow *mwindow, AWindowGUI *gui);
-       ~LabelPopup();
-
-       void create_objects();
-// Set mainsession with the current selections
-       int update();
-
-       MWindow *mwindow;
-       AWindowGUI *gui;
-
-       LabelPopupEdit *editlabel;
-};
-
-class LabelPopupEdit : public BC_MenuItem
-{
-public:
-       LabelPopupEdit(MWindow *mwindow, LabelPopup *popup);
-       ~LabelPopupEdit();
-
-       int handle_event();
-
-       MWindow *mwindow;
-       LabelPopup *popup;
-};
-
 class AddTools : public BC_PopupMenu
 {
 public:
@@ -440,7 +500,6 @@ public:
 
        MWindow *mwindow;
        AWindowGUI *gui;
-       AddPluginsMenu *add_plugins;
 };
 
 class AddPluginItem : public BC_MenuItem
@@ -465,4 +524,28 @@ public:
        ~AVIconDrawing();
 };
 
+
+class AWindowListFormat : public BC_MenuItem
+{
+public:
+       AWindowListFormat(MWindow *mwindow, AWindowGUI *gui);
+
+       void update();
+       int handle_event();
+       MWindow *mwindow;
+       AWindowGUI *gui;
+};
+
+
+class AWindowListSort : public BC_MenuItem
+{
+public:
+       AWindowListSort(MWindow *mwindow, AWindowGUI *gui);
+
+       void update();
+       int handle_event();
+       MWindow *mwindow;
+       AWindowGUI *gui;
+};
+
 #endif