4 * Copyright (C) 1997-2012 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
22 #include "assetedit.h"
23 #include "assetpopup.h"
24 #include "assetremove.h"
26 #include "awindowgui.h"
27 #include "awindowmenu.h"
28 #include "bcsignals.h"
31 #include "cwindowgui.h"
34 #include "localsession.h"
35 #include "mainindexes.h"
36 #include "mainsession.h"
38 #include "mwindowgui.h"
41 #include "vwindowgui.h"
45 AssetPopup::AssetPopup(MWindow *mwindow, AWindowGUI *gui)
52 this->mwindow = mwindow;
56 AssetPopup::~AssetPopup()
60 void AssetPopup::create_objects()
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));
76 void AssetPopup::paste_assets()
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");
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
89 mwindow->gui->unlock_window();
90 mwindow->cwindow->gui->unlock_window();
93 void AssetPopup::match_size()
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();
102 void AssetPopup::match_rate()
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();
111 void AssetPopup::match_all()
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();
120 int AssetPopup::update()
123 gui->collect_assets();
135 AssetPopupInfo::AssetPopupInfo(MWindow *mwindow, AssetPopup *popup)
136 : BC_MenuItem(_("Info..."))
138 this->mwindow = mwindow;
142 AssetPopupInfo::~AssetPopupInfo()
146 int AssetPopupInfo::handle_event()
148 if(mwindow->session->drag_assets->total)
150 if(mwindow->awindow->asset_edit->running() &&
151 mwindow->awindow->asset_edit->window)
153 mwindow->awindow->asset_edit->window->raise_window();
154 mwindow->awindow->asset_edit->window->flush();
158 mwindow->awindow->asset_edit->edit_asset(
159 mwindow->session->drag_assets->values[0]);
163 if(mwindow->session->drag_clips->total)
165 popup->gui->awindow->clip_edit->edit_clip(
166 mwindow->session->drag_clips->values[0]);
176 AssetPopupBuildIndex::AssetPopupBuildIndex(MWindow *mwindow, AssetPopup *popup)
177 : BC_MenuItem(_("Rebuild index"))
179 this->mwindow = mwindow;
183 AssetPopupBuildIndex::~AssetPopupBuildIndex()
187 int AssetPopupBuildIndex::handle_event()
189 //printf("AssetPopupBuildIndex::handle_event 1\n");
190 mwindow->rebuild_indices();
200 AssetPopupSort::AssetPopupSort(MWindow *mwindow, AssetPopup *popup)
201 : BC_MenuItem(_("Sort items"))
203 this->mwindow = mwindow;
207 AssetPopupSort::~AssetPopupSort()
211 int AssetPopupSort::handle_event()
213 mwindow->awindow->gui->sort_assets();
223 AssetPopupView::AssetPopupView(MWindow *mwindow, AssetPopup *popup)
224 : BC_MenuItem(_("View"))
226 this->mwindow = mwindow;
230 AssetPopupView::~AssetPopupView()
234 int AssetPopupView::handle_event()
236 VWindow *vwindow = mwindow->get_viewer(1, DEFAULT_VWINDOW);
237 vwindow->gui->lock_window("AssetPopupView::handle_event");
239 if(mwindow->session->drag_assets->total)
240 vwindow->change_source(
241 mwindow->session->drag_assets->values[0]);
243 if(mwindow->session->drag_clips->total)
244 vwindow->change_source(
245 mwindow->session->drag_clips->values[0]);
247 vwindow->gui->unlock_window();
257 AssetPopupViewWindow::AssetPopupViewWindow(MWindow *mwindow, AssetPopup *popup)
258 : BC_MenuItem(_("View in new window"))
260 this->mwindow = mwindow;
264 AssetPopupViewWindow::~AssetPopupViewWindow()
268 int AssetPopupViewWindow::handle_event()
270 // Find window with nothing
271 VWindow *vwindow = mwindow->get_viewer(1);
273 // TODO: create new vwindow or change current vwindow
274 vwindow->gui->lock_window("AssetPopupView::handle_event");
276 if(mwindow->session->drag_assets->total)
277 vwindow->change_source(
278 mwindow->session->drag_assets->values[0]);
280 if(mwindow->session->drag_clips->total)
281 vwindow->change_source(
282 mwindow->session->drag_clips->values[0]);
284 vwindow->gui->unlock_window();
294 AssetPopupPaste::AssetPopupPaste(MWindow *mwindow, AssetPopup *popup)
295 : BC_MenuItem(_("Paste"))
297 this->mwindow = mwindow;
301 AssetPopupPaste::~AssetPopupPaste()
305 int AssetPopupPaste::handle_event()
307 popup->paste_assets();
318 AssetMatchSize::AssetMatchSize(MWindow *mwindow, AssetPopup *popup)
319 : BC_MenuItem(_("Match project size"))
321 this->mwindow = mwindow;
325 int AssetMatchSize::handle_event()
338 AssetMatchRate::AssetMatchRate(MWindow *mwindow, AssetPopup *popup)
339 : BC_MenuItem(_("Match frame rate"))
341 this->mwindow = mwindow;
345 int AssetMatchRate::handle_event()
358 AssetMatchAll::AssetMatchAll(MWindow *mwindow, AssetPopup *popup)
359 : BC_MenuItem(_("Match all"))
361 this->mwindow = mwindow;
365 int AssetMatchAll::handle_event()
384 AssetPopupProjectRemove::AssetPopupProjectRemove(MWindow *mwindow, AssetPopup *popup)
385 : BC_MenuItem(_("Remove from project"))
387 this->mwindow = mwindow;
393 AssetPopupProjectRemove::~AssetPopupProjectRemove()
397 int AssetPopupProjectRemove::handle_event()
399 mwindow->remove_assets_from_project(1,
401 mwindow->session->drag_assets,
402 mwindow->session->drag_clips);
409 AssetPopupDiskRemove::AssetPopupDiskRemove(MWindow *mwindow, AssetPopup *popup)
410 : BC_MenuItem(_("Remove from disk"))
412 this->mwindow = mwindow;
417 AssetPopupDiskRemove::~AssetPopupDiskRemove()
422 int AssetPopupDiskRemove::handle_event()
424 mwindow->awindow->asset_remove->start();