initial commit
[goodguy/history.git] / cinelerra-5.0 / cinelerra / editpopup.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 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 "edit.h"
23 #include "editpopup.h"
24 #include "language.h"
25 #include "mainsession.h"
26 #include "mwindow.h"
27 #include "mwindowgui.h"
28 #include "plugindialog.h"
29 #include "resizetrackthread.h"
30 #include "track.h"
31 #include "tracks.h"
32 #include "trackcanvas.h"
33
34
35 #include <string.h>
36
37 EditPopup::EditPopup(MWindow *mwindow, MWindowGUI *gui)
38  : BC_PopupMenu(0, 
39                 0, 
40                 0, 
41                 "", 
42                 0)
43 {
44         this->mwindow = mwindow;
45         this->gui = gui;
46 }
47
48 EditPopup::~EditPopup()
49 {
50 }
51
52 void EditPopup::create_objects()
53 {
54         add_item(new EditAttachEffect(mwindow, this));
55         add_item(new EditMoveTrackUp(mwindow, this));
56         add_item(new EditMoveTrackDown(mwindow, this));
57         add_item(new EditPopupDeleteTrack(mwindow, this));
58         add_item(new EditPopupAddTrack(mwindow, this));
59 //      add_item(new EditPopupTitle(mwindow, this));
60         resize_option = 0;
61 }
62
63 int EditPopup::update(Track *track, Edit *edit)
64 {
65         this->edit = edit;
66         this->track = track;
67
68         if(track->data_type == TRACK_VIDEO && !resize_option)
69         {
70                 add_item(resize_option = new EditPopupResize(mwindow, this));
71                 add_item(matchsize_option = new EditPopupMatchSize(mwindow, this));
72         }
73         else
74         if(track->data_type == TRACK_AUDIO && resize_option)
75         {
76                 remove_item(resize_option);
77                 remove_item(matchsize_option);
78                 resize_option = 0;
79                 matchsize_option = 0;
80         }
81         return 0;
82 }
83
84
85
86
87
88
89
90
91
92 EditAttachEffect::EditAttachEffect(MWindow *mwindow, EditPopup *popup)
93  : BC_MenuItem(_("Attach effect..."))
94 {
95         this->mwindow = mwindow;
96         this->popup = popup;
97         dialog_thread = new PluginDialogThread(mwindow);
98 }
99
100 EditAttachEffect::~EditAttachEffect()
101 {
102         delete dialog_thread;
103 }
104
105 int EditAttachEffect::handle_event()
106 {
107         dialog_thread->start_window(popup->track,
108                 0, 
109                 PROGRAM_NAME ": Attach Effect",
110                 0,
111                 popup->track->data_type);
112         return 1;
113 }
114
115
116 EditMoveTrackUp::EditMoveTrackUp(MWindow *mwindow, EditPopup *popup)
117  : BC_MenuItem(_("Move up"))
118 {
119         this->mwindow = mwindow;
120         this->popup = popup;
121 }
122 EditMoveTrackUp::~EditMoveTrackUp()
123 {
124 }
125 int EditMoveTrackUp::handle_event()
126 {
127         mwindow->move_track_up(popup->track);
128         return 1;
129 }
130
131
132
133 EditMoveTrackDown::EditMoveTrackDown(MWindow *mwindow, EditPopup *popup)
134  : BC_MenuItem(_("Move down"))
135 {
136         this->mwindow = mwindow;
137         this->popup = popup;
138 }
139 EditMoveTrackDown::~EditMoveTrackDown()
140 {
141 }
142 int EditMoveTrackDown::handle_event()
143 {
144         mwindow->move_track_down(popup->track);
145         return 1;
146 }
147
148
149
150
151 EditPopupResize::EditPopupResize(MWindow *mwindow, EditPopup *popup)
152  : BC_MenuItem(_("Resize track..."))
153 {
154         this->mwindow = mwindow;
155         this->popup = popup;
156         dialog_thread = new ResizeTrackThread(mwindow);
157 }
158 EditPopupResize::~EditPopupResize()
159 {
160         delete dialog_thread;
161 }
162
163 int EditPopupResize::handle_event()
164 {
165         dialog_thread->start_window(popup->track);
166         return 1;
167 }
168
169
170
171
172
173
174 EditPopupMatchSize::EditPopupMatchSize(MWindow *mwindow, EditPopup *popup)
175  : BC_MenuItem(_("Match output size"))
176 {
177         this->mwindow = mwindow;
178         this->popup = popup;
179 }
180 EditPopupMatchSize::~EditPopupMatchSize()
181 {
182 }
183
184 int EditPopupMatchSize::handle_event()
185 {
186         mwindow->match_output_size(popup->track);
187         return 1;
188 }
189
190
191
192
193
194
195
196 EditPopupDeleteTrack::EditPopupDeleteTrack(MWindow *mwindow, EditPopup *popup)
197  : BC_MenuItem(_("Delete track"))
198 {
199         this->mwindow = mwindow;
200         this->popup = popup;
201 }
202 int EditPopupDeleteTrack::handle_event()
203 {
204         mwindow->delete_track(popup->track);
205         return 1;
206 }
207
208
209
210
211
212
213 EditPopupAddTrack::EditPopupAddTrack(MWindow *mwindow, EditPopup *popup)
214  : BC_MenuItem(_("Add track"))
215 {
216         this->mwindow = mwindow;
217         this->popup = popup;
218 }
219
220 int EditPopupAddTrack::handle_event()
221 {
222         switch( popup->track->data_type ) {
223         case TRACK_AUDIO:
224                 mwindow->add_audio_track_entry(1, popup->track);
225                 break;
226         case TRACK_VIDEO:
227                 mwindow->add_video_track_entry(popup->track);
228                 break;
229         case TRACK_SUBTITLE:
230                 mwindow->add_subttl_track_entry(popup->track);
231                 break;
232         }
233         return 1;
234 }
235
236
237
238
239
240
241 EditPopupTitle::EditPopupTitle(MWindow *mwindow, EditPopup *popup)
242  : BC_MenuItem(_("User title..."))
243 {
244         this->mwindow = mwindow;
245         this->popup = popup;
246         window = 0;
247 }
248
249 EditPopupTitle::~EditPopupTitle()
250 {
251         delete popup;
252 }
253
254 int EditPopupTitle::handle_event()
255 {
256         int result;
257
258         Track *trc = mwindow->session->track_highlighted;
259
260         if (trc && trc->record)
261         {
262                 Edit *edt = mwindow->session->edit_highlighted;
263                 if(!edt) return 1;
264
265                 window = new EditPopupTitleWindow (mwindow, popup);
266                 window->create_objects();
267                 result = window->run_window();
268
269
270                 if(!result && edt)
271                 {
272                         strcpy(edt->user_title, window->title_text->get_text());
273                 }
274
275                 delete window;
276                 window = 0;
277         }
278
279         return 1;
280 }
281
282
283 EditPopupTitleWindow::EditPopupTitleWindow (MWindow *mwindow, EditPopup *popup)
284  : BC_Window (PROGRAM_NAME ": Set edit title",
285         mwindow->gui->get_abs_cursor_x(0) - 400 / 2,
286         mwindow->gui->get_abs_cursor_y(0) - 500 / 2,
287         300,
288         100,
289         300,
290         100,
291         0,
292         0,
293         1)
294 {
295         this->mwindow = mwindow;
296         this->popup = popup;
297         this->edt = this->mwindow->session->edit_highlighted;
298         if(this->edt)
299         {
300                 strcpy(new_text, this->edt->user_title);
301         }
302 }
303
304 EditPopupTitleWindow::~EditPopupTitleWindow()
305 {
306 }
307
308 int EditPopupTitleWindow::close_event()
309 {
310         set_done(1);
311         return 1;
312 }
313
314 void EditPopupTitleWindow::create_objects()
315 {
316         int x = 5;
317         int y = 10;
318
319         add_subwindow (new BC_Title (x, y, _("User title")));
320         add_subwindow (title_text = new EditPopupTitleText (this,
321                 mwindow, x, y + 20));
322         add_tool(new BC_OKButton(this));
323         add_tool(new BC_CancelButton(this));
324
325
326         show_window();
327         flush();
328 }
329
330
331 EditPopupTitleText::EditPopupTitleText (EditPopupTitleWindow *window, 
332         MWindow *mwindow, int x, int y)
333  : BC_TextBox(x, y, 250, 1, (char*)(window->edt ? window->edt->user_title : ""))
334 {
335         this->window = window;
336         this->mwindow = mwindow;
337 }
338
339 EditPopupTitleText::~EditPopupTitleText() 
340
341 }
342  
343 int EditPopupTitleText::handle_event()
344 {
345         return 1;
346 }
347
348
349
350
351
352
353