00001 #include "edl.h"
00002 #include "edlsession.h"
00003 #include "formatpresets.h"
00004 #include "new.h"
00005 #include "setformat.h"
00006 #include "interlacemodes.h"
00007
00008
00009
00010
00011 FormatPresets::FormatPresets(MWindow *mwindow,
00012 NewWindow *new_gui,
00013 SetFormatWindow *format_gui,
00014 int x,
00015 int y)
00016 {
00017 this->mwindow = mwindow;
00018 this->new_gui = new_gui;
00019 this->format_gui = format_gui;
00020 gui_base = new_gui ? (BC_WindowBase*)new_gui : (BC_WindowBase*)(format_gui);
00021 this->x = x;
00022 this->y = y;
00023 text = 0;
00024 pulldown = 0;
00025 }
00026
00027 FormatPresets::~FormatPresets()
00028 {
00029 if(text) delete text;
00030 if(pulldown) delete pulldown;
00031 for(int i = 0; i < preset_items.total; i++)
00032 delete preset_items.values[i];
00033 }
00034
00035 void FormatPresets::create_objects()
00036 {
00037
00038 FormatPresetItem *item;
00039 item = new FormatPresetItem(mwindow, this, _("User Defined"));
00040 preset_items.append(item);
00041
00042 item = new FormatPresetItem(mwindow, this, _("NTSC"));
00043 item->edl->session->audio_channels = 2;
00044 item->edl->session->audio_tracks = 2;
00045 item->edl->session->sample_rate = 48000;
00046 item->edl->session->video_channels = 1;
00047 item->edl->session->video_tracks = 1;
00048 item->edl->session->frame_rate = (double)30000.0 / 1001;
00049 item->edl->session->output_w = 720;
00050 item->edl->session->output_h = 480;
00051 item->edl->session->aspect_w = 4;
00052 item->edl->session->aspect_h = 3;
00053 item->edl->session->interlace_mode = BC_ILACE_MODE_BOTTOM_FIRST;
00054 preset_items.append(item);
00055
00056 item = new FormatPresetItem(mwindow, this, _("NTSC Half"));
00057 item->edl->session->audio_channels = 2;
00058 item->edl->session->audio_tracks = 2;
00059 item->edl->session->sample_rate = 48000;
00060 item->edl->session->video_channels = 1;
00061 item->edl->session->video_tracks = 1;
00062 item->edl->session->frame_rate = (double)30000.0 / 1001;
00063 item->edl->session->output_w = 360;
00064 item->edl->session->output_h = 240;
00065 item->edl->session->aspect_w = 4;
00066 item->edl->session->aspect_h = 3;
00067 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00068 preset_items.append(item);
00069
00070 item = new FormatPresetItem(mwindow, this, _("NTSC Progressive"));
00071 item->edl->session->audio_channels = 2;
00072 item->edl->session->audio_tracks = 2;
00073 item->edl->session->sample_rate = 48000;
00074 item->edl->session->video_channels = 1;
00075 item->edl->session->video_tracks = 1;
00076 item->edl->session->frame_rate = (double)60000.0 / 1001;
00077 item->edl->session->output_w = 720;
00078 item->edl->session->output_h = 480;
00079 item->edl->session->aspect_w = 4;
00080 item->edl->session->aspect_h = 3;
00081 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00082 preset_items.append(item);
00083
00084
00085 item = new FormatPresetItem(mwindow, this, _("PAL"));
00086 item->edl->session->audio_channels = 2;
00087 item->edl->session->audio_tracks = 2;
00088 item->edl->session->sample_rate = 48000;
00089 item->edl->session->video_channels = 1;
00090 item->edl->session->video_tracks = 1;
00091 item->edl->session->frame_rate = 25;
00092 item->edl->session->output_w = 720;
00093 item->edl->session->output_h = 576;
00094 item->edl->session->aspect_w = 4;
00095 item->edl->session->aspect_h = 3;
00096 item->edl->session->interlace_mode = BC_ILACE_MODE_BOTTOM_FIRST;
00097 preset_items.append(item);
00098
00099
00100
00101 item = new FormatPresetItem(mwindow, this, _("PAL Half"));
00102 item->edl->session->audio_channels = 2;
00103 item->edl->session->audio_tracks = 2;
00104 item->edl->session->sample_rate = 48000;
00105 item->edl->session->video_channels = 1;
00106 item->edl->session->video_tracks = 1;
00107 item->edl->session->frame_rate = 25;
00108 item->edl->session->output_w = 360;
00109 item->edl->session->output_h = 288;
00110 item->edl->session->aspect_w = 4;
00111 item->edl->session->aspect_h = 3;
00112 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00113 preset_items.append(item);
00114
00115
00116
00117 item = new FormatPresetItem(mwindow, this, _("PAL Progressive"));
00118 item->edl->session->audio_channels = 2;
00119 item->edl->session->audio_tracks = 2;
00120 item->edl->session->sample_rate = 48000;
00121 item->edl->session->video_channels = 1;
00122 item->edl->session->video_tracks = 1;
00123 item->edl->session->frame_rate = 50;
00124 item->edl->session->output_w = 720;
00125 item->edl->session->output_h = 576;
00126 item->edl->session->aspect_w = 4;
00127 item->edl->session->aspect_h = 3;
00128 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00129 preset_items.append(item);
00130
00131
00132 item = new FormatPresetItem(mwindow, this, _("1080P/60"));
00133 item->edl->session->audio_channels = 2;
00134 item->edl->session->audio_tracks = 2;
00135 item->edl->session->sample_rate = 48000;
00136 item->edl->session->video_channels = 1;
00137 item->edl->session->video_tracks = 1;
00138 item->edl->session->frame_rate = (double)60000.0 / 1001;
00139
00140
00141 item->edl->session->output_w = 1920;
00142 item->edl->session->output_h = 1080;
00143 item->edl->session->aspect_w = 16;
00144 item->edl->session->aspect_h = 9;
00145 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00146 preset_items.append(item);
00147
00148 item = new FormatPresetItem(mwindow, this, _("1080P/24"));
00149 item->edl->session->audio_channels = 2;
00150 item->edl->session->audio_tracks = 2;
00151 item->edl->session->sample_rate = 48000;
00152 item->edl->session->video_channels = 1;
00153 item->edl->session->video_tracks = 1;
00154 item->edl->session->frame_rate = 24;
00155
00156
00157 item->edl->session->output_w = 1920;
00158 item->edl->session->output_h = 1080;
00159 item->edl->session->aspect_w = 16;
00160 item->edl->session->aspect_h = 9;
00161 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00162 preset_items.append(item);
00163
00164 item = new FormatPresetItem(mwindow, this, _("1080I"));
00165 item->edl->session->audio_channels = 2;
00166 item->edl->session->audio_tracks = 2;
00167 item->edl->session->sample_rate = 48000;
00168 item->edl->session->video_channels = 1;
00169 item->edl->session->video_tracks = 1;
00170 item->edl->session->frame_rate = (double)30000.0 / 1001;
00171
00172
00173 item->edl->session->output_w = 1920;
00174 item->edl->session->output_h = 1080;
00175 item->edl->session->aspect_w = 16;
00176 item->edl->session->aspect_h = 9;
00177 item->edl->session->interlace_mode = BC_ILACE_MODE_BOTTOM_FIRST;
00178 preset_items.append(item);
00179
00180 item = new FormatPresetItem(mwindow, this, _("720P/60"));
00181 item->edl->session->audio_channels = 2;
00182 item->edl->session->audio_tracks = 2;
00183 item->edl->session->sample_rate = 48000;
00184 item->edl->session->video_channels = 1;
00185 item->edl->session->video_tracks = 1;
00186 item->edl->session->frame_rate = (double)60000.0 / 1001;
00187 item->edl->session->output_w = 1280;
00188 item->edl->session->output_h = 720;
00189 item->edl->session->aspect_w = 16;
00190 item->edl->session->aspect_h = 9;
00191 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00192 preset_items.append(item);
00193
00194
00195
00196
00197 item = new FormatPresetItem(mwindow, this, _("Internet"));
00198 item->edl->session->audio_channels = 1;
00199 item->edl->session->audio_tracks = 1;
00200 item->edl->session->sample_rate = 22050;
00201 item->edl->session->video_channels = 1;
00202 item->edl->session->video_tracks = 1;
00203 item->edl->session->frame_rate = 15;
00204 item->edl->session->output_w = 320;
00205 item->edl->session->output_h = 240;
00206 item->edl->session->aspect_w = 4;
00207 item->edl->session->aspect_h = 3;
00208 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00209 preset_items.append(item);
00210
00211 item = new FormatPresetItem(mwindow, this, _("CD Audio"));
00212 item->edl->session->audio_channels = 2;
00213 item->edl->session->audio_tracks = 2;
00214 item->edl->session->sample_rate = 44100;
00215 item->edl->session->video_channels = 1;
00216 item->edl->session->video_tracks = 0;
00217 item->edl->session->frame_rate = (double)30000.0 / 1001;
00218 item->edl->session->output_w = 720;
00219 item->edl->session->output_h = 480;
00220 item->edl->session->aspect_w = 4;
00221 item->edl->session->aspect_h = 3;
00222 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00223 preset_items.append(item);
00224
00225 item = new FormatPresetItem(mwindow, this, _("DAT Audio"));
00226 item->edl->session->audio_channels = 2;
00227 item->edl->session->audio_tracks = 2;
00228 item->edl->session->sample_rate = 48000;
00229 item->edl->session->video_channels = 1;
00230 item->edl->session->video_tracks = 0;
00231 item->edl->session->frame_rate = (double)30000.0 / 1001;
00232 item->edl->session->output_w = 720;
00233 item->edl->session->output_h = 480;
00234 item->edl->session->aspect_w = 4;
00235 item->edl->session->aspect_h = 3;
00236 item->edl->session->interlace_mode = BC_ILACE_MODE_NOTINTERLACED;
00237 preset_items.append(item);
00238
00239
00240
00241 gui_base->add_subwindow(new BC_Title(x, y, _("Presets:")));
00242 int x1 = x;
00243 y += 20;
00244
00245
00246 gui_base->add_subwindow(text = new FormatPresetsText(mwindow,
00247 this,
00248 x,
00249 y));
00250 x += text->get_w();
00251 gui_base->add_subwindow(pulldown = new FormatPresetsPulldown(mwindow,
00252 this,
00253 x,
00254 y));
00255 x = x1;
00256 }
00257
00258 FormatPresetItem* FormatPresets::find_preset(EDL *edl)
00259 {
00260 for(int i = 1; i < preset_items.total; i++)
00261 {
00262 FormatPresetItem *preset = preset_items.values[i];
00263 if(edl->session->audio_tracks == preset->edl->session->audio_tracks &&
00264 edl->session->audio_channels == preset->edl->session->audio_channels &&
00265 edl->session->sample_rate == preset->edl->session->sample_rate &&
00266 edl->session->video_tracks == preset->edl->session->video_tracks &&
00267 edl->session->frame_rate == preset->edl->session->frame_rate &&
00268 edl->session->output_w == preset->edl->session->output_w &&
00269 edl->session->output_h == preset->edl->session->output_h &&
00270 edl->session->aspect_w == preset->edl->session->aspect_w &&
00271 edl->session->aspect_h == preset->edl->session->aspect_h &&
00272 edl->session->interlace_mode == preset->edl->session->interlace_mode)
00273 {
00274 return preset;
00275 }
00276 }
00277 return 0;
00278 }
00279
00280 char* FormatPresets::get_preset_text(EDL *edl)
00281 {
00282 FormatPresetItem *item = find_preset(edl);
00283 if(item)
00284 return item->get_text();
00285 else
00286 return "User Defined";
00287 }
00288
00289
00290 int FormatPresets::handle_event()
00291 {
00292 return 0;
00293 }
00294
00295 EDL* FormatPresets::get_edl()
00296 {
00297 return 0;
00298 }
00299
00300
00301
00302
00303
00304 FormatPresetsText::FormatPresetsText(MWindow *mwindow,
00305 FormatPresets *gui,
00306 int x,
00307 int y)
00308 : BC_TextBox(x,
00309 y,
00310 200,
00311 1,
00312 gui->get_preset_text(gui->get_edl()))
00313 {
00314 this->gui = gui;
00315 this->mwindow = mwindow;
00316 }
00317
00318 int FormatPresetsText::handle_event()
00319 {
00320 return 1;
00321 }
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332 FormatPresetsPulldown::FormatPresetsPulldown(MWindow *mwindow,
00333 FormatPresets *gui,
00334 int x,
00335 int y)
00336 : BC_ListBox(x,
00337 y,
00338 200,
00339 250,
00340 LISTBOX_TEXT,
00341 (ArrayList<BC_ListBoxItem*>*)&gui->preset_items,
00342 0,
00343 0,
00344 1,
00345 0,
00346 1)
00347 {
00348 this->mwindow = mwindow;
00349 this->gui = gui;
00350 }
00351
00352 int FormatPresetsPulldown::handle_event()
00353 {
00354 gui->handle_event();
00355 FormatPresetItem *preset = ((FormatPresetItem*)get_selection(0, 0));
00356 gui->get_edl()->copy_all(preset->edl);
00357 gui->text->update(preset->get_text());
00358 gui->handle_event();
00359 return 1;
00360 }
00361
00362 FormatPresetItem::FormatPresetItem(MWindow *mwindow,
00363 FormatPresets *gui,
00364 char *text)
00365 : BC_ListBoxItem(text)
00366 {
00367 this->mwindow = mwindow;
00368 this->gui = gui;
00369 edl = new EDL;
00370 edl->create_objects();
00371 edl->copy_all(gui->get_edl());
00372 }
00373
00374 FormatPresetItem::~FormatPresetItem()
00375 {
00376 delete edl;
00377 }
00378
00379