X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fawindowgui.h;h=6cab2a6d2c45bd3b432c44b86e436e7b0a6f0c9c;hp=d77efbbffad4b53382b6f7a35d3e21a18962737a;hb=ae44cc4a24c9e04ee5e3b38baf6ce529832cfb39;hpb=4b6c39e6cf4a3fd9c1b347db6de686ab55d6cac8 diff --git a/cinelerra-5.1/cinelerra/awindowgui.h b/cinelerra-5.1/cinelerra/awindowgui.h index d77efbbf..6cab2a6d 100644 --- a/cinelerra-5.1/cinelerra/awindowgui.h +++ b/cinelerra-5.1/cinelerra/awindowgui.h @@ -24,13 +24,16 @@ #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 "awindowgui.inc" #include "clippopup.inc" #include "edl.inc" +#include "effectlist.inc" #include "folderlistmenu.inc" #include "guicast.h" #include "labeledit.inc" @@ -38,29 +41,57 @@ #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 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, int folder); - AssetPicon(MWindow *mwindow, AWindowGUI *gui, const char *folder_name, int folder_num); + 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; @@ -71,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 { @@ -89,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(); @@ -139,13 +193,14 @@ public: void async_update_assets(); // Sends update asset event void update_effects(); void sort_assets(); + void sort_folders(); void reposition_objects(); - static int folder_number(const char *name); // 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 *output, int do_audio, int do_video, @@ -165,6 +220,13 @@ public: 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; @@ -172,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 @@ -187,38 +251,51 @@ public: // Currently displayed data for listboxes // Currently displayed assets + comments ArrayList 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 *label_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; @@ -229,9 +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(); @@ -258,6 +337,10 @@ public: 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; @@ -277,6 +360,22 @@ public: AWindowGUI *gui; }; +class AWindowSubFolderNames : public ArrayList +{ +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: @@ -285,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 @@ -426,22 +528,24 @@ public: class AWindowListFormat : public BC_MenuItem { public: - AWindowListFormat(MWindow *mwindow); + AWindowListFormat(MWindow *mwindow, AWindowGUI *gui); void update(); int handle_event(); MWindow *mwindow; + AWindowGUI *gui; }; class AWindowListSort : public BC_MenuItem { public: - AWindowListSort(MWindow *mwindow); + AWindowListSort(MWindow *mwindow, AWindowGUI *gui); void update(); int handle_event(); MWindow *mwindow; + AWindowGUI *gui; }; #endif