4 * Copyright (C) 2010 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
23 #include "assetedit.h"
25 #include "awindowgui.h"
26 #include "bcprogressbox.h"
27 #include "bcsignals.h"
28 #include "bitspopup.h"
31 #include "cplayback.h"
34 #include "edlsession.h"
37 #include "fileffmpeg.h"
38 #include "filesystem.h"
39 #include "indexable.h"
40 #include "indexfile.h"
41 #include "indexstate.h"
43 #include "mainindexes.h"
45 #include "mwindowgui.h"
48 #include "preferences.h"
49 #include "resizetrackthread.h"
50 #include "removefile.h"
52 #include "transportque.h"
53 #include "interlacemodes.h"
55 #include "edlsession.h"
61 AssetEdit::AssetEdit(MWindow *mwindow)
64 this->mwindow = mwindow;
67 changed_params = new Asset;
72 AssetEdit::~AssetEdit()
75 changed_params->remove_user();
79 void AssetEdit::edit_asset(Indexable *indexable)
86 this->indexable = indexable;
87 this->indexable->add_user();
89 // Copy asset parameters into temporary storage for editing.
90 if(indexable->is_asset)
92 changed_params->copy_from((Asset*)indexable, 0);
96 EDL *nested_edl = (EDL*)indexable;
98 strcpy(changed_params->path, nested_edl->path);
99 changed_params->sample_rate = nested_edl->session->sample_rate;
100 changed_params->channels = nested_edl->session->audio_channels;
102 //printf("AssetEdit::edit_asset %d %f\n", __LINE__, nested_edl->session->frame_rate);
103 changed_params->frame_rate = nested_edl->session->frame_rate;
104 changed_params->width = nested_edl->session->output_w;
105 changed_params->height = nested_edl->session->output_h;
108 BC_DialogThread::start();
111 void AssetEdit::handle_done_event(int result)
113 if( !result && window->tc_hours_textbox ) {
114 changed_params->tcstart = ceil(indexable->get_frame_rate() *
115 (atoi(window->tc_hours_textbox->get_text()) * 3600 +
116 atoi(window->tc_minutes_textbox->get_text()) * 60 +
117 atoi(window->tc_seconds_textbox->get_text()))) +
118 atoi(window->tc_rest_textbox->get_text());
122 void AssetEdit::handle_close_event(int result)
129 if(indexable->is_asset) {
130 asset = (Asset*)indexable;
131 if( !changed_params->equivalent(*asset, 1, 1, mwindow->edl) )
135 nested_edl = (EDL*)indexable;
136 if( strcmp(changed_params->path, nested_edl->path)
137 // || changed_params->sample_rate != nested_edl->session->sample_rate
138 // || !EQUIV(changed_params->frame_rate, nested_edl->session->frame_rate
143 mwindow->gui->lock_window();
144 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
146 // Omit index status from copy since an index rebuild may have been
147 // happening when new_asset was created but not be happening anymore.
149 mwindow->remove_asset_from_caches(asset);
150 //printf("AssetEdit::handle_close_event %d %f\n", __LINE__, asset->get_frame_rate());
151 asset->copy_from(changed_params, 0);
152 //printf("AssetEdit::handle_close_event %d %d %d\n", __LINE__, changed_params->bits, asset->bits);
155 strcpy(nested_edl->path, changed_params->path);
156 // Other parameters can't be changed because they're defined in the other EDL
157 // nested_edl->session->frame_rate = changed_params->frame_rate;
158 // nested_edl->session->sample_rate = changed_params->sample_rate;
160 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
162 mwindow->gui->update(0, 2, 0, 0, 0, 0, 0);
163 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
165 // Start index rebuilding
166 if( (asset && asset->audio_data) || nested_edl) {
167 char source_filename[BCTEXTLEN];
168 char index_filename[BCTEXTLEN];
169 IndexFile::get_index_filename(source_filename,
170 mwindow->preferences->index_directory,
173 remove_file(index_filename);
174 indexable->index_state->index_status = INDEX_NOTTESTED;
175 mwindow->mainindexes->add_next_asset(0, indexable);
176 mwindow->mainindexes->start_build();
178 mwindow->gui->unlock_window();
179 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
180 mwindow->awindow->gui->update_picon(indexable);
181 mwindow->awindow->gui->async_update_assets();
183 mwindow->restart_brender();
184 mwindow->sync_parameters(CHANGE_ALL);
185 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
189 this->indexable->remove_user();
191 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
194 BC_Window* AssetEdit::new_gui()
196 window = new AssetEditWindow(mwindow, this);
197 window->create_objects();
209 AssetEditWindow::AssetEditWindow(MWindow *mwindow, AssetEdit *asset_edit)
210 : BC_Window(_(PROGRAM_NAME ": Asset Info"),
211 mwindow->gui->get_abs_cursor_x(1) - 400 / 2,
212 mwindow->gui->get_abs_cursor_y(1) - (128 + 64 +
213 (!asset_edit->indexable->have_audio() ? 0 : 180) +
214 (!asset_edit->indexable->have_video() ? 0 : 350)) / 2,
216 (!asset_edit->indexable->have_audio() ? 0 : 180) +
217 (!asset_edit->indexable->have_video() ? 0 : 350)), 0, 0, 1)
219 this->mwindow = mwindow;
220 this->asset_edit = asset_edit;
228 tc_hours_textbox = 0;
229 tc_minutes_textbox = 0;
230 tc_seconds_textbox = 0;
240 AssetEditWindow::~AssetEditWindow()
242 lock_window("AssetEditWindow::~AssetEditWindow");
243 if(bitspopup) delete bitspopup;
244 if(detail_thread) delete detail_thread;
251 void AssetEditWindow::create_objects()
253 int y = 10, x = 10, x1 = 10, x2 = 190;
254 char string[BCTEXTLEN];
258 BC_TextBox *textboxw;
259 BC_ListBox *listboxw;
260 Interlaceautofix *ilacefixoption_chkboxw;
264 if(asset_edit->indexable->is_asset)
265 asset = (Asset*)asset_edit->indexable;
267 nested_edl = (EDL*)asset_edit->indexable;
269 if(asset && asset->format == FILE_PCM)
274 lock_window("AssetEditWindow::create_objects");
280 add_subwindow(path_text = new AssetEditPathText(this, y));
281 add_subwindow(path_button = new AssetEditPath(mwindow,
285 asset_edit->indexable->path,
286 _(PROGRAM_NAME ": Asset path"), _("Select a file for this asset:")));
291 add_subwindow(new BC_Title(x, y, _("File format:")));
293 add_subwindow(new BC_Title(x, y, File::formattostr(mwindow->plugindb,
296 mwindow->theme->assetedit_color));
300 int64_t bytes = fs.get_size(asset->path);
301 add_subwindow(new BC_Title(x, y, _("Bytes:")));
302 sprintf(string, "%jd", bytes);
303 Units::punctuate(string);
306 add_subwindow(new BC_Title(x2, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
307 if(asset->format == FILE_MPEG || asset->format == FILE_FFMPEG)
309 detail_thread = new DetailAssetThread(mwindow);
310 BC_GenericButton *detail = new DetailAssetButton(this, x2+120, y);
311 add_subwindow(detail);
321 if(asset->audio_length > 0)
322 length = (double)asset->audio_length / asset->sample_rate;
323 if(asset->video_length > 0)
324 length = MAX(length, (double)asset->video_length / asset->frame_rate);
326 if(!EQUIV(length, 0))
327 bitrate = (int64_t)(bytes * 8 / length);
330 add_subwindow(new BC_Title(x, y, _("Bitrate (bits/sec):")));
331 sprintf(string, "%jd", bitrate);
333 Units::punctuate(string);
334 add_subwindow(new BC_Title(x2, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
340 if((asset && asset->audio_data) || nested_edl)
342 add_subwindow(new BC_Bar(x, y, get_w() - x * 2));
345 add_subwindow(new BC_Title(x, y, _("Audio:"), LARGEFONT, RED));
351 if(asset->get_compression_text(1, 0))
353 add_subwindow(new BC_Title(x, y, _("Compression:")));
355 add_subwindow(new BC_Title(x,
357 asset->get_compression_text(1, 0),
359 mwindow->theme->assetedit_color));
365 add_subwindow(new BC_Title(x, y, _("Channels:")));
366 sprintf(string, "%d", asset_edit->changed_params->channels);
371 BC_TumbleTextBox *textbox = new AssetEditChannels(this,
375 textbox->create_objects();
380 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
385 add_subwindow(new BC_Title(x, y, _("Sample rate:")));
386 sprintf(string, "%d", asset_edit->changed_params->sample_rate);
392 add_subwindow(textbox = new AssetEditRate(this, string, x, y));
393 x += textbox->get_w();
394 add_subwindow(new SampleRatePulldown(mwindow, textbox, x, y));
398 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
406 add_subwindow(new BC_Title(x, y, _("Bits:")));
410 bitspopup = new BitsPopup(this,
413 &asset_edit->changed_params->bits,
419 bitspopup->create_objects();
422 add_subwindow(new BC_Title(x, y, File::bitstostr(asset->bits), MEDIUMFONT, mwindow->theme->assetedit_color));
427 add_subwindow(new BC_Title(x, y, _("Header length:")));
428 sprintf(string, "%d", asset->header);
432 add_subwindow(new AssetEditHeader(this, string, x, y));
434 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
439 add_subwindow(new BC_Title(x, y, _("Byte order:")));
445 add_subwindow(lohi = new AssetEditByteOrderLOHI(this,
450 add_subwindow(hilo = new AssetEditByteOrderHILO(this,
459 if(asset->byte_order)
460 add_subwindow(new BC_Title(x, y, _("Lo-Hi"), MEDIUMFONT, mwindow->theme->assetedit_color));
462 add_subwindow(new BC_Title(x, y, _("Hi-Lo"), MEDIUMFONT, mwindow->theme->assetedit_color));
470 // add_subwindow(new BC_Title(x, y, _("Values are signed:")));
471 add_subwindow(new AssetEditSigned(this, asset->signed_, x, y));
475 if(!asset->signed_ && asset->bits == 8)
476 add_subwindow(new BC_Title(x, y, _("Values are unsigned")));
478 add_subwindow(new BC_Title(x, y, _("Values are signed")));
486 if((asset && asset->video_data) || nested_edl)
488 add_subwindow(new BC_Bar(x, y, get_w() - x * 2));
491 add_subwindow(new BC_Title(x, y, _("Video:"), LARGEFONT, RED));
496 if(asset && asset->get_compression_text(0,1))
498 add_subwindow(new BC_Title(x, y, _("Compression:")));
500 add_subwindow(new BC_Title(x,
502 asset->get_compression_text(0,1),
504 mwindow->theme->assetedit_color));
509 add_subwindow(new BC_Title(x, y, _("Frame rate:")));
511 sprintf(string, "%.4f", asset_edit->changed_params->frame_rate);
513 //printf("AssetEditWindow::create_objects %d %f\n", __LINE__, asset_edit->changed_params->frame_rate);
516 BC_TextBox *framerate;
517 add_subwindow(framerate = new AssetEditFRate(this, string, x, y));
519 add_subwindow(new FrameRatePulldown(mwindow, framerate, x, y));
523 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
528 add_subwindow(new BC_Title(x, y, _("Width:")));
530 sprintf(string, "%d", asset_edit->changed_params->width);
531 win_width = new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color);
532 add_subwindow(win_width);
536 add_subwindow(new BC_Title(x, y, _("Height:")));
538 sprintf(string, "%d", asset_edit->changed_params->height);
539 win_height = new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color);
540 add_subwindow(win_height);
541 y += win_height->get_h() + 5;
543 if(asset && (asset->format == FILE_MPEG || asset->format == FILE_FFMPEG ) )
547 add_subwindow(new BC_Title(x, y, _("Actual width:")));
549 sprintf(string, "%d", asset->actual_width);
550 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
552 BC_GenericButton *resize = new ResizeAssetButton(this, x+64, y);
553 add_subwindow(resize);
557 add_subwindow(new BC_Title(x, y, _("Actual height:")));
559 sprintf(string, "%d", asset->actual_height);
560 title = new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color);
561 add_subwindow(title);
562 y += title->get_h() + 5;
565 // --------------------
566 add_subwindow(title = new BC_Title(x1, y, _("Fix interlacing:")));
567 add_subwindow(ilacefixoption_chkboxw = new Interlaceautofix(mwindow,this, x2, y));
568 y += ilacefixoption_chkboxw->get_h() + 5;
569 // --------------------
570 add_subwindow(title = new BC_Title(x1, y, _("Asset's interlacing:")));
571 add_subwindow(textboxw = new AssetEditILacemode(this, "", ILACE_ASSET_MODEDEFAULT, x2, y, 200));
572 ilacefixoption_chkboxw->ilacemode_textbox = textboxw;
573 add_subwindow(listboxw = new AssetEditInterlacemodePulldown(mwindow,
575 &asset_edit->changed_params->interlace_mode,
576 (ArrayList<BC_ListBoxItem*>*)&mwindow->interlace_asset_modes,
577 ilacefixoption_chkboxw,
578 x2 + textboxw->get_w(),
580 ilacefixoption_chkboxw->ilacemode_listbox = listboxw;
581 y += textboxw->get_h() + 5;
583 // --------------------
584 add_subwindow(title = new BC_Title(x1, y, _("Interlace correction:")));
585 add_subwindow(textboxw = new AssetEditILacefixmethod(this, "", ILACE_FIXDEFAULT, x2, y, 200));
586 ilacefixoption_chkboxw->ilacefixmethod_textbox = textboxw;
587 add_subwindow(listboxw = new InterlacefixmethodPulldown(mwindow,
589 &asset_edit->changed_params->interlace_fixmethod,
590 (ArrayList<BC_ListBoxItem*>*)&mwindow->interlace_asset_fixmethods,
591 x2 + textboxw->get_w(),
593 ilacefixoption_chkboxw->ilacefixmethod_listbox = listboxw;
594 ilacefixoption_chkboxw->showhideotherwidgets();
595 y += textboxw->get_h() + 5;
598 add_subwindow(new BC_Title(x, y, _("Reel Name:")));
600 add_subwindow(new AssetEditReelName(this, x, y));
604 add_subwindow(new BC_Title(x, y, _("Reel Number:")));
606 add_subwindow(new AssetEditReelNumber(this, x, y));
610 add_subwindow(new BC_Title(x, y, _("Time Code Start:")));
613 // Calculate values to enter into textboxes
614 char text[32], *tc = text;
616 Units::totext(tc, asset->tcstart / asset->frame_rate,
617 TIME_HMSF, asset->sample_rate, asset->frame_rate);
619 strcpy(tc, "0:00:00:00");
621 const char *tc_hours = tc, *tc_minutes, *tc_seconds, *tc_rest;
622 tc = strchr(tc, ':'); *tc++ = 0; tc_minutes = tc;
623 tc = strchr(tc, ':'); *tc++ = 0; tc_seconds = tc;
624 tc = strchr(tc, ':'); *tc++ = 0; tc_rest = tc;
626 int padw = BC_Title::calculate_w(this, ":", MEDIUMFONT);
627 int fldw = BC_Title::calculate_w(this, "00", MEDIUMFONT) + 5;
628 add_subwindow(tc_hours_textbox = new BC_TextBox(x, y, fldw, 1, tc_hours));
629 add_subwindow(new BC_Title(x += tc_hours_textbox->get_w(), y, ":"));
630 add_subwindow(tc_minutes_textbox = new BC_TextBox(x += padw, y, fldw, 1, tc_minutes));
631 add_subwindow(new BC_Title(x += tc_minutes_textbox->get_w(), y, ":"));
632 add_subwindow(tc_seconds_textbox = new BC_TextBox(x += padw, y , fldw, 1, tc_seconds));
633 add_subwindow(new BC_Title(x += tc_seconds_textbox->get_w(), y, ":"));
634 add_subwindow(tc_rest_textbox = new BC_TextBox(x += 10, y, fldw, 1, tc_rest));
639 add_subwindow(new BC_OKButton(this));
640 add_subwindow(new BC_CancelButton(this));
645 void AssetEditWindow::show_info_detail()
647 detail_thread->start((Asset*)asset_edit->indexable);
651 AssetEditChannels::AssetEditChannels(AssetEditWindow *fwindow,
655 : BC_TumbleTextBox(fwindow,
663 this->fwindow = fwindow;
666 int AssetEditChannels::handle_event()
668 Asset *asset = fwindow->asset_edit->changed_params;
669 asset->channels = atol(get_text());
673 AssetEditRate::AssetEditRate(AssetEditWindow *fwindow, char *text, int x, int y)
674 : BC_TextBox(x, y, 100, 1, text)
676 this->fwindow = fwindow;
679 int AssetEditRate::handle_event()
681 Asset *asset = fwindow->asset_edit->changed_params;
682 asset->sample_rate = atol(get_text());
686 AssetEditFRate::AssetEditFRate(AssetEditWindow *fwindow, char *text, int x, int y)
687 : BC_TextBox(x, y, 100, 1, text)
689 this->fwindow = fwindow;
692 int AssetEditFRate::handle_event()
694 Asset *asset = fwindow->asset_edit->changed_params;
695 asset->frame_rate = atof(get_text());
699 Interlaceautofix::Interlaceautofix(MWindow *mwindow,AssetEditWindow *fwindow, int x, int y)
701 fwindow->asset_edit->changed_params->interlace_autofixoption,
702 _("Automatically Fix Interlacing"))
704 this->fwindow = fwindow;
705 this->mwindow = mwindow;
708 Interlaceautofix::~Interlaceautofix()
712 int Interlaceautofix::handle_event()
714 Asset *asset = fwindow->asset_edit->changed_params;
715 asset->interlace_autofixoption = get_value();
716 showhideotherwidgets();
720 void Interlaceautofix::showhideotherwidgets()
722 int thevalue = get_value();
724 Asset *asset = fwindow->asset_edit->changed_params;
725 if (thevalue == ILACE_AUTOFIXOPTION_AUTO)
727 this->ilacemode_textbox->enable();
728 this->ilacemode_listbox->enable();
729 this->ilacefixmethod_textbox->disable();
730 this->ilacefixmethod_listbox->disable();
731 int xx = ilaceautofixmethod(mwindow->edl->session->interlace_mode,asset->interlace_mode);
732 ilacefixmethod_to_text(string,xx);
733 this->ilacefixmethod_textbox->update(string);
735 if (thevalue == ILACE_AUTOFIXOPTION_MANUAL)
737 this->ilacemode_textbox->disable();
738 this->ilacemode_listbox->disable();
739 this->ilacefixmethod_textbox->enable();
740 this->ilacefixmethod_listbox->enable();
741 ilacefixmethod_to_text(string,asset->interlace_fixmethod);
742 this->ilacefixmethod_textbox->update(string);
746 InterlacefixmethodItem::InterlacefixmethodItem(const char *text, int value)
747 : BC_ListBoxItem(text)
752 InterlacefixmethodPulldown::InterlacefixmethodPulldown(MWindow *mwindow,
753 BC_TextBox *output_text, int *output_value,
754 ArrayList<BC_ListBoxItem*> *data, int x, int y)
755 : BC_ListBox(x, y, 200, 150, LISTBOX_TEXT, data, 0, 0, 1, 0, 1)
757 this->mwindow = mwindow;
758 this->output_text = output_text;
759 this->output_value = output_value;
760 output_text->update(interlacefixmethod_to_text());
763 int InterlacefixmethodPulldown::handle_event()
765 output_text->update(get_selection(0, 0)->get_text());
766 *output_value = ((InterlacefixmethodItem*)get_selection(0, 0))->value;
770 const char* InterlacefixmethodPulldown::interlacefixmethod_to_text()
772 ilacefixmethod_to_text(this->string,*output_value);
773 return (this->string);
776 AssetEditILaceautofixoption::AssetEditILaceautofixoption(AssetEditWindow *fwindow, char *text, int thedefault, int x, int y, int w)
777 : BC_TextBox(x, y, w, 1, text)
779 this->fwindow = fwindow;
780 this->thedefault = thedefault;
783 int AssetEditILaceautofixoption::handle_event()
785 Asset *asset = fwindow->asset_edit->changed_params;
786 asset->interlace_autofixoption = ilaceautofixoption_from_text(get_text(), this->thedefault);
791 AssetEditILacemode::AssetEditILacemode(AssetEditWindow *fwindow, const char *text, int thedefault, int x, int y, int w)
792 : BC_TextBox(x, y, w, 1, text)
794 this->fwindow = fwindow;
795 this->thedefault = thedefault;
798 int AssetEditILacemode::handle_event()
800 Asset *asset = fwindow->asset_edit->changed_params;
801 asset->interlace_mode = ilacemode_from_text(get_text(),this->thedefault);
805 AssetEditInterlacemodePulldown::AssetEditInterlacemodePulldown(MWindow *mwindow,
806 BC_TextBox *output_text,
808 ArrayList<BC_ListBoxItem*> *data,
809 Interlaceautofix *fixoption_chkboxw,
824 this->fixoption_chkbox = fixoption_chkboxw;
825 this->mwindow = mwindow;
826 this->output_text = output_text;
827 this->output_value = output_value;
828 output_text->update(interlacemode_to_text());
831 int AssetEditInterlacemodePulldown::handle_event()
833 output_text->update(get_selection(0, 0)->get_text());
834 *output_value = ((InterlacemodeItem*)get_selection(0, 0))->value;
835 fixoption_chkbox->showhideotherwidgets();
839 char* AssetEditInterlacemodePulldown::interlacemode_to_text()
841 ilacemode_to_text(this->string,*output_value);
842 return (this->string);
845 AssetEditILacefixmethod::AssetEditILacefixmethod(AssetEditWindow *fwindow, const char *text, int thedefault, int x, int y, int w)
846 : BC_TextBox(x, y, w, 1, text)
848 this->fwindow = fwindow;
849 this->thedefault = thedefault;
852 int AssetEditILacefixmethod::handle_event()
854 Asset *asset = fwindow->asset_edit->changed_params;
855 asset->interlace_fixmethod = ilacefixmethod_from_text(get_text(),this->thedefault);
859 AssetEditHeader::AssetEditHeader(AssetEditWindow *fwindow, char *text, int x, int y)
860 : BC_TextBox(x, y, 100, 1, text)
862 this->fwindow = fwindow;
865 int AssetEditHeader::handle_event()
867 Asset *asset = fwindow->asset_edit->changed_params;
868 asset->header = atol(get_text());
872 AssetEditByteOrderLOHI::AssetEditByteOrderLOHI(AssetEditWindow *fwindow,
876 : BC_Radial(x, y, value, _("Lo-Hi"))
878 this->fwindow = fwindow;
881 int AssetEditByteOrderLOHI::handle_event()
883 Asset *asset = fwindow->asset_edit->changed_params;
884 asset->byte_order = 1;
885 fwindow->hilo->update(0);
890 AssetEditByteOrderHILO::AssetEditByteOrderHILO(AssetEditWindow *fwindow,
894 : BC_Radial(x, y, value, _("Hi-Lo"))
896 this->fwindow = fwindow;
899 int AssetEditByteOrderHILO::handle_event()
901 Asset *asset = fwindow->asset_edit->changed_params;
902 asset->byte_order = 0;
903 fwindow->lohi->update(0);
908 AssetEditSigned::AssetEditSigned(AssetEditWindow *fwindow,
912 : BC_CheckBox(x, y, value, _("Values are signed"))
914 this->fwindow = fwindow;
917 int AssetEditSigned::handle_event()
919 Asset *asset = fwindow->asset_edit->changed_params;
920 asset->signed_ = get_value();
930 AssetEditPathText::AssetEditPathText(AssetEditWindow *fwindow, int y)
931 : BC_TextBox(5, y, 300, 1, fwindow->asset_edit->changed_params->path)
933 this->fwindow = fwindow;
935 AssetEditPathText::~AssetEditPathText()
938 int AssetEditPathText::handle_event()
940 strcpy(fwindow->asset_edit->changed_params->path, get_text());
944 AssetEditPath::AssetEditPath(MWindow *mwindow, AssetEditWindow *fwindow,
945 BC_TextBox *textbox, int y, const char *text,
946 const char *window_title, const char *window_caption)
947 : BrowseButton(mwindow->theme, fwindow, textbox, 310, y, text,
948 window_title, window_caption, 0)
950 this->fwindow = fwindow;
953 AssetEditPath::~AssetEditPath() {}
960 AssetEditFormat::AssetEditFormat(AssetEditWindow *fwindow, char* default_, int y)
961 : FormatPopup(fwindow->mwindow->plugindb, 90, y)
963 this->fwindow = fwindow;
965 AssetEditFormat::~AssetEditFormat()
968 int AssetEditFormat::handle_event()
970 Asset *asset = fwindow->asset_edit->changed_params;
971 asset->format = File::strtoformat(fwindow->mwindow->plugindb,
972 get_selection(0, 0)->get_text());
979 DetailAssetButton::DetailAssetButton(AssetEditWindow *fwindow, int x, int y)
980 : BC_GenericButton(x, y, _("Detail"))
982 this->fwindow = fwindow;
986 DetailAssetButton::~DetailAssetButton()
990 int DetailAssetButton::handle_event()
992 fwindow->show_info_detail();
996 DetailAssetWindow::DetailAssetWindow(MWindow *mwindow, Asset *asset)
997 : BC_Window(_("Asset Detail"),
998 mwindow->gui->get_abs_cursor_x(1) - 600/2,
999 mwindow->gui->get_abs_cursor_y(1) - 500/2,
1002 this->mwindow = mwindow;
1003 this->asset = asset;
1009 DetailAssetWindow::~DetailAssetWindow()
1011 asset->remove_user();
1015 DetailAssetThread::DetailAssetThread(MWindow *mwindow)
1018 this->mwindow = mwindow;
1022 DetailAssetThread::~DetailAssetThread()
1027 void DetailAssetThread::stop()
1029 if( Thread::running() ) {
1030 dwindow->lock_window("DetailAssetThread::stop");
1031 dwindow->set_done(1);
1032 dwindow->unlock_window();
1037 void DetailAssetWindow::create_objects()
1040 char file_name[BCTEXTLEN];
1041 int len = sizeof(info);
1042 strncpy(info,_("no info available"),len);
1043 if( !mwindow->preferences->get_asset_file_path(asset, file_name) ) {
1044 switch( asset->format ) {
1046 FileMPEG::get_info(asset->path, file_name, &info[0],len);
1049 FileFFMPEG::get_info(asset->path, &info[0],len);
1053 lock_window("DetailAssetThread::create_objects");
1054 text = new BC_ScrollTextBox(this, x, y, get_w()-32, 23, info, -len);
1055 text->create_objects(); text->set_text_row(0);
1056 add_subwindow(new BC_OKButton(this));
1061 void DetailAssetThread::start(Asset *asset)
1065 dwindow = new DetailAssetWindow(mwindow, asset);
1069 void DetailAssetThread::run()
1071 // Get length from TOC
1072 dwindow->create_objects();
1073 dwindow->run_window();
1082 AssetEditReelName::AssetEditReelName(AssetEditWindow *fwindow, int x, int y)
1083 : BC_TextBox(x, y, 220, 1, fwindow->asset_edit->changed_params->reel_name,
1086 this->fwindow = fwindow;
1088 AssetEditReelName::~AssetEditReelName()
1091 int AssetEditReelName::handle_event()
1093 Asset *asset = fwindow->asset_edit->changed_params;
1094 strcpy(asset->reel_name, get_text());
1102 AssetEditReelNumber::AssetEditReelNumber(AssetEditWindow *fwindow, int x, int y)
1103 : BC_TextBox(x, y, 200, 1, fwindow->asset_edit->changed_params->reel_number)
1105 this->fwindow = fwindow;
1107 AssetEditReelNumber::~AssetEditReelNumber()
1110 int AssetEditReelNumber::handle_event()
1112 Asset *asset = fwindow->asset_edit->changed_params;
1113 asset->reel_number = atoi(get_text());