f85b05c08c2983bdfb737ab865e8e942121fb07e
[goodguy/history.git] / cinelerra-5.1 / cinelerra / assetpopup.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 1997-2012 Adam Williams <broadcast at earthling dot net>
5  *
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.
10  *
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.
15  *
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
19  *
20  */
21
22 #include "assetedit.h"
23 #include "assetpopup.h"
24 #include "assetremove.h"
25 #include "awindow.h"
26 #include "awindowgui.h"
27 #include "awindowmenu.h"
28 #include "bcsignals.h"
29 #include "clipedit.h"
30 #include "cwindow.h"
31 #include "cwindowgui.h"
32 #include "edl.h"
33 #include "language.h"
34 #include "localsession.h"
35 #include "mainindexes.h"
36 #include "mainsession.h"
37 #include "mwindow.h"
38 #include "mwindowgui.h"
39 #include "tracks.h"
40 #include "vwindow.h"
41 #include "vwindowgui.h"
42
43
44
45 AssetPopup::AssetPopup(MWindow *mwindow, AWindowGUI *gui)
46  : BC_PopupMenu(0,
47                 0,
48                 0,
49                 "",
50                 0)
51 {
52         this->mwindow = mwindow;
53         this->gui = gui;
54 }
55
56 AssetPopup::~AssetPopup()
57 {
58 }
59
60 void AssetPopup::create_objects()
61 {
62 //      add_item(format = new AssetListFormat(mwindow));
63         add_item(info = new AssetPopupInfo(mwindow, this));
64         add_item(new AssetPopupSort(mwindow, this));
65         add_item(index = new AssetPopupBuildIndex(mwindow, this));
66         add_item(view = new AssetPopupView(mwindow, this));
67         add_item(view_window = new AssetPopupViewWindow(mwindow, this));
68         add_item(new AssetPopupPaste(mwindow, this));
69         add_item(new AssetMatchSize(mwindow, this));
70         add_item(new AssetMatchRate(mwindow, this));
71         add_item(new AssetMatchAll(mwindow, this));
72         add_item(new AssetPopupProjectRemove(mwindow, this));
73         add_item(new AssetPopupDiskRemove(mwindow, this));
74 }
75
76 void AssetPopup::paste_assets()
77 {
78 // Collect items into the drag vectors for temporary storage
79         gui->lock_window("AssetPopup::paste_assets");
80         mwindow->gui->lock_window("AssetPopup::paste_assets");
81         mwindow->cwindow->gui->lock_window("AssetPopup::paste_assets");
82
83         gui->collect_assets();
84         mwindow->paste_assets(mwindow->edl->local_session->get_selectionstart(1),
85                 mwindow->edl->tracks->first,
86                 0);   // do not overwrite
87
88         gui->unlock_window();
89         mwindow->gui->unlock_window();
90         mwindow->cwindow->gui->unlock_window();
91 }
92
93 void AssetPopup::match_size()
94 {
95 // Collect items into the drag vectors for temporary storage
96         gui->collect_assets();
97         mwindow->gui->lock_window("AssetPopup::match_size");
98         mwindow->asset_to_size();
99         mwindow->gui->unlock_window();
100 }
101
102 void AssetPopup::match_rate()
103 {
104 // Collect items into the drag vectors for temporary storage
105         gui->collect_assets();
106         mwindow->gui->lock_window("AssetPopup::match_rate");
107         mwindow->asset_to_rate();
108         mwindow->gui->unlock_window();
109 }
110
111 void AssetPopup::match_all()
112 {
113 // Collect items into the drag vectors for temporary storage
114         gui->collect_assets();
115         mwindow->gui->lock_window("AssetPopup::match_rate");
116         mwindow->asset_to_all();
117         mwindow->gui->unlock_window();
118 }
119
120 int AssetPopup::update()
121 {
122 //      format->update();
123         gui->collect_assets();
124         return 0;
125 }
126
127
128
129
130
131
132
133
134
135 AssetPopupInfo::AssetPopupInfo(MWindow *mwindow, AssetPopup *popup)
136  : BC_MenuItem(_("Info..."))
137 {
138         this->mwindow = mwindow;
139         this->popup = popup;
140 }
141
142 AssetPopupInfo::~AssetPopupInfo()
143 {
144 }
145
146 int AssetPopupInfo::handle_event()
147 {
148         if(mwindow->session->drag_assets->total)
149         {
150                 mwindow->awindow->asset_edit->edit_asset(
151                         mwindow->session->drag_assets->values[0]);
152         }
153         else
154         if(mwindow->session->drag_clips->total)
155         {
156                 popup->gui->awindow->clip_edit->edit_clip(
157                         mwindow->session->drag_clips->values[0]);
158         }
159         return 1;
160 }
161
162
163
164
165
166
167 AssetPopupBuildIndex::AssetPopupBuildIndex(MWindow *mwindow, AssetPopup *popup)
168  : BC_MenuItem(_("Rebuild index"))
169 {
170         this->mwindow = mwindow;
171         this->popup = popup;
172 }
173
174 AssetPopupBuildIndex::~AssetPopupBuildIndex()
175 {
176 }
177
178 int AssetPopupBuildIndex::handle_event()
179 {
180 //printf("AssetPopupBuildIndex::handle_event 1\n");
181         mwindow->rebuild_indices();
182         return 1;
183 }
184
185
186
187
188
189
190
191 AssetPopupSort::AssetPopupSort(MWindow *mwindow, AssetPopup *popup)
192  : BC_MenuItem(_("Sort items"))
193 {
194         this->mwindow = mwindow;
195         this->popup = popup;
196 }
197
198 AssetPopupSort::~AssetPopupSort()
199 {
200 }
201
202 int AssetPopupSort::handle_event()
203 {
204         mwindow->awindow->gui->sort_assets();
205         return 1;
206 }
207
208
209
210
211
212
213
214 AssetPopupView::AssetPopupView(MWindow *mwindow, AssetPopup *popup)
215  : BC_MenuItem(_("View"))
216 {
217         this->mwindow = mwindow;
218         this->popup = popup;
219 }
220
221 AssetPopupView::~AssetPopupView()
222 {
223 }
224
225 int AssetPopupView::handle_event()
226 {
227         VWindow *vwindow = mwindow->get_viewer(1, DEFAULT_VWINDOW);
228         vwindow->gui->lock_window("AssetPopupView::handle_event");
229
230         if(mwindow->session->drag_assets->total)
231                 vwindow->change_source(
232                         mwindow->session->drag_assets->values[0]);
233         else
234         if(mwindow->session->drag_clips->total)
235                 vwindow->change_source(
236                         mwindow->session->drag_clips->values[0]);
237
238         vwindow->gui->unlock_window();
239         return 1;
240 }
241
242
243
244
245
246
247
248 AssetPopupViewWindow::AssetPopupViewWindow(MWindow *mwindow, AssetPopup *popup)
249  : BC_MenuItem(_("View in new window"))
250 {
251         this->mwindow = mwindow;
252         this->popup = popup;
253 }
254
255 AssetPopupViewWindow::~AssetPopupViewWindow()
256 {
257 }
258
259 int AssetPopupViewWindow::handle_event()
260 {
261 // Find window with nothing
262         VWindow *vwindow = mwindow->get_viewer(1);
263
264 // TODO: create new vwindow or change current vwindow
265         vwindow->gui->lock_window("AssetPopupView::handle_event");
266
267         if(mwindow->session->drag_assets->total)
268                 vwindow->change_source(
269                         mwindow->session->drag_assets->values[0]);
270         else
271         if(mwindow->session->drag_clips->total)
272                 vwindow->change_source(
273                         mwindow->session->drag_clips->values[0]);
274
275         vwindow->gui->unlock_window();
276         return 1;
277 }
278
279
280
281
282
283
284
285 AssetPopupPaste::AssetPopupPaste(MWindow *mwindow, AssetPopup *popup)
286  : BC_MenuItem(_("Paste"))
287 {
288         this->mwindow = mwindow;
289         this->popup = popup;
290 }
291
292 AssetPopupPaste::~AssetPopupPaste()
293 {
294 }
295
296 int AssetPopupPaste::handle_event()
297 {
298         popup->paste_assets();
299         return 1;
300 }
301
302
303
304
305
306
307
308
309 AssetMatchSize::AssetMatchSize(MWindow *mwindow, AssetPopup *popup)
310  : BC_MenuItem(_("Match project size"))
311 {
312         this->mwindow = mwindow;
313         this->popup = popup;
314 }
315
316 int AssetMatchSize::handle_event()
317 {
318         popup->match_size();
319         return 1;
320 }
321
322
323
324
325
326
327
328
329 AssetMatchRate::AssetMatchRate(MWindow *mwindow, AssetPopup *popup)
330  : BC_MenuItem(_("Match frame rate"))
331 {
332         this->mwindow = mwindow;
333         this->popup = popup;
334 }
335
336 int AssetMatchRate::handle_event()
337 {
338         popup->match_rate();
339         return 1;
340 }
341
342
343
344
345
346
347
348
349 AssetMatchAll::AssetMatchAll(MWindow *mwindow, AssetPopup *popup)
350  : BC_MenuItem(_("Match all"))
351 {
352         this->mwindow = mwindow;
353         this->popup = popup;
354 }
355
356 int AssetMatchAll::handle_event()
357 {
358         popup->match_all();
359         return 1;
360 }
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375 AssetPopupProjectRemove::AssetPopupProjectRemove(MWindow *mwindow, AssetPopup *popup)
376  : BC_MenuItem(_("Remove from project"))
377 {
378         this->mwindow = mwindow;
379         this->popup = popup;
380 }
381
382
383
384 AssetPopupProjectRemove::~AssetPopupProjectRemove()
385 {
386 }
387
388 int AssetPopupProjectRemove::handle_event()
389 {
390         mwindow->remove_assets_from_project(1,
391                 1,
392                 mwindow->session->drag_assets,
393                 mwindow->session->drag_clips);
394         return 1;
395 }
396
397
398
399
400 AssetPopupDiskRemove::AssetPopupDiskRemove(MWindow *mwindow, AssetPopup *popup)
401  : BC_MenuItem(_("Remove from disk"))
402 {
403         this->mwindow = mwindow;
404         this->popup = popup;
405 }
406
407
408 AssetPopupDiskRemove::~AssetPopupDiskRemove()
409 {
410 }
411
412
413 int AssetPopupDiskRemove::handle_event()
414 {
415         mwindow->awindow->asset_remove->start();
416         return 1;
417 }
418
419
420
421