4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include "arraylist.h"
27 #include "assetpopup.inc"
30 #include "audiodevice.inc"
31 #include "awindow.inc"
32 #include "awindowgui.inc"
33 #include "clippopup.inc"
35 #include "effectlist.inc"
36 #include "folderlistmenu.inc"
38 #include "labeledit.inc"
39 #include "labelpopup.inc"
41 #include "indexable.inc"
42 #include "mwindow.inc"
44 #include "newfolder.inc"
45 #include "pluginserver.inc"
46 #include "proxypopup.inc"
47 #include "renderengine.inc"
48 #include "samples.inc"
51 class AssetPicon : public BC_ListBoxItem
54 AssetPicon(MWindow *mwindow, AWindowGUI *gui, Indexable *indexable);
55 AssetPicon(MWindow *mwindow, AWindowGUI *gui, EDL *edl);
56 AssetPicon(MWindow *mwindow, AWindowGUI *gui, PluginServer *plugin);
57 AssetPicon(MWindow *mwindow, AWindowGUI *gui, Label *plugin);
58 AssetPicon(MWindow *mwindow, AWindowGUI *gui, int folder, int persist);
59 virtual ~AssetPicon();
61 void create_objects();
63 static void draw_hue_bar(VFrame *frame, double t);
64 static void draw_wave(VFrame *frame, double *dp, int len,
65 int base_color, int line_color);
66 void open_render_engine(EDL *edl, int is_audio);
67 void close_render_engine();
68 void render_video(int64_t pos, VFrame *vfrm);
69 void render_audio(int64_t pos, Samples **samples, int len);
76 // ID of thing pointed to
79 // Check ID first. Update these next before dereferencing
92 RenderEngine *render_engine;
95 typedef int16_t vicon_audio_t;
97 class AssetVIconAudio : public Thread
100 AssetVIconAudio(AWindowGUI *gui);
104 void start(AssetVIcon *vicon);
114 class AssetVIcon : public VIcon {
121 int64_t set_seq_no(int64_t no);
128 AssetVIcon(AssetPicon *picon, int w, int h, double framerate, int64_t length);
132 class AWindowRemovePlugin;
134 class AWindowRemovePluginGUI : public BC_Window {
137 AWindowRemovePlugin *thread;
138 PluginServer *plugin;
139 ArrayList<BC_ListBoxItem*> plugin_list;
144 void create_objects();
146 AWindowRemovePluginGUI(AWindow *awindow, AWindowRemovePlugin *thread,
147 int x, int y, PluginServer *plugin);
148 ~AWindowRemovePluginGUI();
151 class AWindowRemovePlugin : public BC_DialogThread {
154 PluginServer *plugin;
155 BC_Window* new_gui();
156 void handle_close_event(int result);
157 int remove_plugin(PluginServer *plugin, ArrayList<BC_ListBoxItem*> &folder);
159 AWindowRemovePlugin(AWindow *awindow, PluginServer *plugin);
160 ~AWindowRemovePlugin();
163 class AWindowGUI : public BC_Window
166 AWindowGUI(MWindow *mwindow, AWindow *awindow);
169 void create_objects();
170 int resize_event(int w, int h);
171 int translation_event();
173 int keypress_event();
174 void async_update_assets(); // Sends update asset event
175 void update_effects();
176 void sort_assets(int use_mtime);
178 void reposition_objects();
179 static int folder_number(const char *name);
180 // Call back for MWindow entry point
183 // Collect items into the drag vectors of MainSession
184 void collect_assets(int proxy=0);
185 EDL *collect_proxy(Indexable *indexable);
186 void create_persistent_folder(ArrayList<BC_ListBoxItem*> *output,
191 void create_label_folder();
192 void copy_picons(ArrayList<BC_ListBoxItem*> *dst,
193 ArrayList<BC_ListBoxItem*> *src, int folder);
194 void sort_picons(ArrayList<BC_ListBoxItem*> *src, int use_mtime=0);
195 // Return the selected asset in asset_list
196 Indexable* selected_asset();
197 PluginServer* selected_plugin();
198 AssetPicon* selected_folder();
199 bool protected_pixmap(BC_Pixmap *pixmap);
200 int save_defaults(BC_Hash *defaults);
201 int load_defaults(BC_Hash *defaults);
202 void start_vicon_drawing();
203 void stop_vicon_drawing();
204 void update_picon(Indexable *indexable);
205 int cycle_assetlist_format();
207 VFrame *get_picon(const char *name, const char *plugin_icons);
208 VFrame *get_picon(const char *name);
209 void resource_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, int idx);
210 void theme_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn);
211 void plugin_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, unsigned char *png);
216 AWindowAssets *asset_list;
217 AWindowFolders *folder_list;
218 AWindowDivider *divider;
219 AWindowSearchText *search_text;
222 // Store data to speed up responses
223 // Persistant data for listboxes
224 // All assets in current EDL
225 ArrayList<BC_ListBoxItem*> assets;
226 ArrayList<BC_ListBoxItem*> folders;
227 ArrayList<BC_ListBoxItem*> aeffects;
228 ArrayList<BC_ListBoxItem*> veffects;
229 ArrayList<BC_ListBoxItem*> atransitions;
230 ArrayList<BC_ListBoxItem*> vtransitions;
231 ArrayList<BC_ListBoxItem*> labellist;
233 // Currently displayed data for listboxes
234 // Currently displayed assets + comments
235 ArrayList<BC_ListBoxItem*> displayed_assets[2];
236 const char *asset_titles[ASSET_COLUMNS];
237 int displayed_folder;
241 BC_Pixmap *aeffect_folder_icon; VFrame *aeffect_folder_vframe;
242 BC_Pixmap *atransition_folder_icon; VFrame *atransition_folder_vframe;
243 BC_Pixmap *clip_folder_icon; VFrame *clip_folder_vframe;
244 BC_Pixmap *label_folder_icon; VFrame *label_folder_vframe;
245 BC_Pixmap *media_folder_icon; VFrame *media_folder_vframe;
246 BC_Pixmap *proxy_folder_icon; VFrame *proxy_folder_vframe;
247 BC_Pixmap *veffect_folder_icon; VFrame *veffect_folder_vframe;
248 BC_Pixmap *vtransition_folder_icon; VFrame *vtransition_folder_vframe;
249 BC_Pixmap *folder_icons[AWINDOW_FOLDERS];
251 BC_Pixmap *folder_icon; VFrame *folder_vframe;
252 BC_Pixmap *file_icon; VFrame *file_vframe;
253 BC_Pixmap *audio_icon; VFrame *audio_vframe;
254 BC_Pixmap *video_icon; VFrame *video_vframe;
255 BC_Pixmap *label_icon; VFrame *label_vframe;
256 BC_Pixmap *clip_icon; VFrame *clip_vframe;
257 BC_Pixmap *atransition_icon; VFrame *atransition_vframe;
258 BC_Pixmap *vtransition_icon; VFrame *vtransition_vframe;
259 BC_Pixmap *aeffect_icon; VFrame *aeffect_vframe;
260 BC_Pixmap *veffect_icon; VFrame *veffect_vframe;
261 BC_Pixmap *ladspa_icon; VFrame *ladspa_vframe;
262 BC_Pixmap *ff_aud_icon; VFrame *ff_aud_vframe;
263 BC_Pixmap *ff_vid_icon; VFrame *ff_vid_vframe;
265 NewFolderThread *newfolder_thread;
268 AssetPopup *asset_menu;
269 ClipPopup *clip_menu;
270 LabelPopup *label_menu;
271 ProxyPopup *proxy_menu;
272 EffectListMenu *effectlist_menu;
273 AssetListMenu *assetlist_menu;
274 ClipListMenu *cliplist_menu;
275 LabelListMenu *labellist_menu;
276 ProxyListMenu *proxylist_menu;
277 FolderListMenu *folderlist_menu;
279 // Temporary for reading picons from files
281 VIconThread *vicon_thread;
282 AssetVIconAudio *vicon_audio;
284 int64_t plugin_visibility;
285 AWindowRemovePlugin *remove_plugin;
287 AVIconDrawing *avicon_drawing;
288 int avicon_w, avicon_h, vicon_drawing;
289 int allow_iconlisting;
291 // Create custom atoms to be used for async messages between windows
292 int create_custom_xatoms();
293 // Function to overload to recieve customly defined atoms
294 virtual int recieve_custom_xatoms(xatom_event *event);
295 static const char *folder_names[];
298 void update_folder_list();
299 void update_asset_list();
300 void filter_displayed_assets();
301 Atom UpdateAssetsXAtom;
302 void update_assets();
306 class AWindowAssets : public BC_ListBox
309 AWindowAssets(MWindow *mwindow, AWindowGUI *gui, int x, int y, int w, int h);
313 int selection_changed();
314 void draw_background();
315 int drag_start_event();
316 int drag_motion_event();
317 int drag_stop_event();
318 int button_press_event();
319 int column_resize_event();
320 int focus_in_event();
321 int focus_out_event();
327 class AWindowDivider : public BC_SubWindow
330 AWindowDivider(MWindow *mwindow, AWindowGUI *gui, int x, int y, int w, int h);
333 int button_press_event();
334 int cursor_motion_event();
335 int button_release_event();
341 class AWindowFolders : public BC_ListBox
344 AWindowFolders(MWindow *mwindow, AWindowGUI *gui, int x, int y, int w, int h);
347 int selection_changed();
348 int button_press_event();
354 class AWindowSearchTextBox : public BC_TextBox
357 AWindowSearchTextBox(AWindowSearchText *search_text, int x, int y, int w);
360 AWindowSearchText *search_text;
363 class AWindowSearchText
366 AWindowSearchText(MWindow *mwindow, AWindowGUI *gui, int x, int y);
369 void create_objects();
372 void reposition_window(int x, int y, int w);
373 const char *get_text();
379 BC_Title *text_title;
380 BC_TextBox *text_box;
383 class AWindowNewFolder : public BC_Button
386 AWindowNewFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
393 class AWindowDeleteFolder : public BC_Button
396 AWindowDeleteFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
403 class AWindowRenameFolder : public BC_Button
406 AWindowRenameFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
413 class AWindowDeleteDisk : public BC_Button
416 AWindowDeleteDisk(MWindow *mwindow, AWindowGUI *gui, int x, int y);
423 class AWindowDeleteProject : public BC_Button
426 AWindowDeleteProject(MWindow *mwindow, AWindowGUI *gui, int x, int y);
433 class AWindowInfo : public BC_Button
436 AWindowInfo(MWindow *mwindow, AWindowGUI *gui, int x, int y);
443 class AWindowRedrawIndex : public BC_Button
446 AWindowRedrawIndex(MWindow *mwindow, AWindowGUI *gui, int x, int y);
453 class AWindowPaste : public BC_Button
456 AWindowPaste(MWindow *mwindow, AWindowGUI *gui, int x, int y);
463 class AWindowAppend : public BC_Button
466 AWindowAppend(MWindow *mwindow, AWindowGUI *gui, int x, int y);
473 class AWindowView : public BC_Button
476 AWindowView(MWindow *mwindow, AWindowGUI *gui, int x, int y);
483 class AddTools : public BC_PopupMenu
486 AddTools(MWindow *mwindow, AWindowGUI *gui, int x, int y, const char *title);
487 void create_objects();
493 class AddPluginItem : public BC_MenuItem
496 AddPluginItem(AddTools *menu, const char *text, int idx);
503 class AVIconDrawing : public BC_Toggle
509 static void calculate_geometry(AWindowGUI *agui, VFrame **images, int *ww, int *hh);
511 AVIconDrawing(AWindowGUI *agui, int x, int y, VFrame **images);
516 class AWindowListFormat : public BC_MenuItem
519 AWindowListFormat(MWindow *mwindow, AWindowGUI *gui);
528 class AWindowListSort : public BC_MenuItem
531 AWindowListSort(MWindow *mwindow, AWindowGUI *gui);