00001 #include "awindow.h"
00002 #include "awindowgui.h"
00003 #include "clipedit.h"
00004 #include "edl.h"
00005 #include "fonts.h"
00006 #include "language.h"
00007 #include "localsession.h"
00008 #include "mainsession.h"
00009 #include "mwindow.h"
00010 #include "mwindowgui.h"
00011 #include "vwindow.h"
00012 #include "vwindowgui.h"
00013 #include "errorbox.h"
00014 #include "tracks.h"
00015
00016
00017
00018 ClipEdit::ClipEdit(MWindow *mwindow, AWindow *awindow, VWindow *vwindow)
00019 : Thread()
00020 {
00021 this->mwindow = mwindow;
00022 this->awindow = awindow;
00023 this->vwindow = vwindow;
00024 this->clip = 0;
00025 this->create_it = 0;
00026 }
00027
00028 ClipEdit::~ClipEdit()
00029 {
00030 }
00031
00032 void ClipEdit::edit_clip(EDL *clip)
00033 {
00034
00035 if(clip)
00036 {
00037 this->clip = clip;
00038 this->create_it = 0;
00039 Thread::start();
00040 }
00041 }
00042
00043 void ClipEdit::create_clip(EDL *clip)
00044 {
00045
00046 if(clip)
00047 {
00048 this->clip = clip;
00049 this->create_it = 1;
00050 Thread::start();
00051 }
00052 }
00053
00054 void ClipEdit::run()
00055 {
00056 if(clip)
00057 {
00058 EDL *original = clip;
00059 if(!create_it)
00060 {
00061 clip = new EDL(mwindow->edl);
00062 clip->create_objects();
00063 clip->copy_all(original);
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073 ClipEditWindow *window = new ClipEditWindow(mwindow, this);
00074
00075 window->create_objects();
00076
00077 int name_ok_or_cancel = 0;
00078 int result;
00079 while (!name_ok_or_cancel)
00080 {
00081 result = window->run_window();
00082 if (result)
00083 name_ok_or_cancel = 1;
00084 else
00085 {
00086
00087 name_ok_or_cancel = 1;
00088 for (int i = 0; i < mwindow->edl->clips.total; i++)
00089 {
00090 if (!strcasecmp(clip->local_session->clip_title,
00091 mwindow->edl->clips.values[i]->local_session->clip_title) &&
00092 (create_it || strcasecmp(clip->local_session->clip_title,
00093 original->local_session->clip_title)))
00094
00095 name_ok_or_cancel = 0;
00096 }
00097 if (!name_ok_or_cancel)
00098 {
00099 ErrorBox error(PROGRAM_NAME ": Error",
00100 mwindow->gui->get_abs_cursor_x(1),
00101 mwindow->gui->get_abs_cursor_y(1));
00102 error.create_objects(_("A clip with that name already exists."));
00103 error.run_window();
00104 window->titlebox->activate();
00105 }
00106 }
00107 }
00108
00109 if(!result)
00110 {
00111 EDL *new_edl = 0;
00112
00113 if(create_it)
00114 new_edl = mwindow->edl->add_clip(window->clip);
00115
00116
00117 if(!create_it)
00118 original->copy_session(clip);
00119
00120
00121
00122
00123
00124 mwindow->awindow->gui->async_update_assets();
00125
00126
00127
00128 if(vwindow && create_it)
00129 {
00130
00131 }
00132 }
00133 else
00134 {
00135 mwindow->session->clip_number--;
00136 }
00137
00138
00139
00140
00141
00142 delete window->clip;
00143 delete window;
00144 clip = 0;
00145 create_it = 0;
00146 }
00147 }
00148
00149
00150
00151
00152
00153
00154
00155 ClipEditWindow::ClipEditWindow(MWindow *mwindow, ClipEdit *thread)
00156 : BC_Window(PROGRAM_NAME ": Clip Info",
00157 mwindow->gui->get_abs_cursor_x(1) - 400 / 2,
00158 mwindow->gui->get_abs_cursor_y(1) - 350 / 2,
00159 400,
00160 350,
00161 400,
00162 430,
00163 0,
00164 0,
00165 1)
00166 {
00167 this->mwindow = mwindow;
00168 this->thread = thread;
00169 }
00170
00171 ClipEditWindow::~ClipEditWindow()
00172 {
00173 }
00174
00175
00176 void ClipEditWindow::create_objects()
00177 {
00178 this->clip = thread->clip;
00179 this->create_it = thread->create_it;
00180
00181 int x = 10, y = 10;
00182 int x1 = x;
00183 BC_TextBox *textbox;
00184 BC_Title *title;
00185
00186 add_subwindow(title = new BC_Title(x1, y, _("Title:")));
00187 y += title->get_h() + 5;
00188 add_subwindow(titlebox = new ClipEditTitle(this, x1, y, get_w() - x1 * 2));
00189
00190 int end = strlen(titlebox->get_text());
00191 titlebox->set_selection(0, end, end);
00192
00193 y += titlebox->get_h() + 10;
00194 add_subwindow(title = new BC_Title(x1, y, _("Comments:")));
00195 y += title->get_h() + 5;
00196 add_subwindow(textbox = new ClipEditComments(this,
00197 x1,
00198 y,
00199 get_w() - x1 * 2,
00200 BC_TextBox::pixels_to_rows(this,
00201 MEDIUMFONT,
00202 get_h() - 10 - BC_OKButton::calculate_h() - y)));
00203
00204
00205
00206 add_subwindow(new BC_OKButton(this));
00207 add_subwindow(new BC_CancelButton(this));
00208 show_window();
00209 titlebox->activate();
00210 }
00211
00212
00213
00214
00215
00216 ClipEditTitle::ClipEditTitle(ClipEditWindow *window, int x, int y, int w)
00217 : BC_TextBox(x, y, w, 1, window->clip->local_session->clip_title)
00218 {
00219 this->window = window;
00220 }
00221
00222 int ClipEditTitle::handle_event()
00223 {
00224 strcpy(window->clip->local_session->clip_title, get_text());
00225 return 1;
00226 }
00227
00228
00229
00230
00231
00232 ClipEditComments::ClipEditComments(ClipEditWindow *window, int x, int y, int w, int rows)
00233 : BC_TextBox(x, y, w, rows, window->clip->local_session->clip_notes)
00234 {
00235 this->window = window;
00236 }
00237
00238 int ClipEditComments::handle_event()
00239 {
00240 strcpy(window->clip->local_session->clip_notes, get_text());
00241 return 1;
00242 }