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, int x, int y)
82 this->indexable = indexable;
83 this->indexable->add_user();
84 this->x = x; this->y = y;
86 // Copy asset parameters into temporary storage for editing.
87 if( indexable->is_asset ) {
88 changed_params->copy_from((Asset*)indexable, 0);
91 EDL *nested_edl = (EDL*)indexable;
92 strcpy(changed_params->path, nested_edl->path);
93 changed_params->sample_rate = nested_edl->session->sample_rate;
94 changed_params->channels = nested_edl->session->audio_channels;
96 //printf("AssetEdit::edit_asset %d %f\n", __LINE__, nested_edl->session->frame_rate);
97 changed_params->frame_rate = nested_edl->session->frame_rate;
98 changed_params->width = nested_edl->session->output_w;
99 changed_params->height = nested_edl->session->output_h;
102 BC_DialogThread::start();
105 void AssetEdit::handle_done_event(int result)
109 void AssetEdit::handle_close_event(int result)
116 if( indexable->is_asset ) {
117 asset = (Asset*)indexable;
118 if( !changed_params->equivalent(*asset, 1, 1, mwindow->edl) )
122 nested_edl = (EDL*)indexable;
123 if( strcmp(changed_params->path, nested_edl->path)
124 // || changed_params->sample_rate != nested_edl->session->sample_rate
125 // || !EQUIV(changed_params->frame_rate, nested_edl->session->frame_rate
130 mwindow->gui->lock_window();
131 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
133 // Omit index status from copy since an index rebuild may have been
134 // happening when new_asset was created but not be happening anymore.
136 mwindow->remove_asset_from_caches(asset);
137 //printf("AssetEdit::handle_close_event %d %f\n", __LINE__, asset->get_frame_rate());
138 asset->copy_from(changed_params, 0);
139 //printf("AssetEdit::handle_close_event %d %d %d\n", __LINE__, changed_params->bits, asset->bits);
142 strcpy(nested_edl->path, changed_params->path);
143 // Other parameters can't be changed because they're defined in the other EDL
144 // nested_edl->session->frame_rate = changed_params->frame_rate;
145 // nested_edl->session->sample_rate = changed_params->sample_rate;
147 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
149 mwindow->gui->update(0, 2, 0, 0, 0, 0, 0);
150 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
152 // Start index rebuilding
153 if( (asset && asset->audio_data) || nested_edl) {
154 char source_filename[BCTEXTLEN];
155 char index_filename[BCTEXTLEN];
156 IndexFile::get_index_filename(source_filename,
157 mwindow->preferences->index_directory,
160 remove_file(index_filename);
161 indexable->index_state->index_status = INDEX_NOTTESTED;
162 mwindow->mainindexes->add_next_asset(0, indexable);
163 mwindow->mainindexes->start_build();
165 mwindow->gui->unlock_window();
166 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
167 mwindow->awindow->gui->update_picon(indexable);
168 mwindow->awindow->gui->async_update_assets();
170 mwindow->restart_brender();
171 mwindow->sync_parameters(CHANGE_ALL);
172 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
176 this->indexable->remove_user();
178 //printf("AssetEdit::handle_close_event %d\n", __LINE__);
181 BC_Window* AssetEdit::new_gui()
183 window = new AssetEditWindow(mwindow, this);
184 window->create_objects();
188 int AssetEdit::window_height()
191 if( indexable->have_audio() ) h += 200;
192 if( indexable->have_video() ) {
194 if( indexable->is_asset ) {
195 Asset *asset = (Asset *)indexable;
196 if( asset->format == FILE_MPEG ||
197 asset->format == FILE_FFMPEG ) h += 42;
203 AssetEditWindow::AssetEditWindow(MWindow *mwindow, AssetEdit *asset_edit)
204 : BC_Window(_(PROGRAM_NAME ": Asset Info"),
205 asset_edit->x - 450/2, asset_edit->y - asset_edit->window_height()/2,
206 450, asset_edit->window_height(), 0, 0, 1)
208 this->mwindow = mwindow;
209 this->asset_edit = asset_edit;
225 AssetEditWindow::~AssetEditWindow()
227 lock_window("AssetEditWindow::~AssetEditWindow");
229 delete detail_dialog;
236 void AssetEditWindow::create_objects()
238 int y = 10, x = 10, x1 = 10, x2 = 190;
239 char string[BCTEXTLEN];
243 BC_TextBox *textboxw;
244 BC_ListBox *listboxw;
245 Interlaceautofix *ilacefixoption_chkboxw;
249 if( asset_edit->indexable->is_asset )
250 asset = (Asset*)asset_edit->indexable;
252 nested_edl = (EDL*)asset_edit->indexable;
254 if( asset && asset->format == FILE_PCM )
259 lock_window("AssetEditWindow::create_objects");
265 add_subwindow(path_text = new AssetEditPathText(this, y));
266 add_subwindow(path_button = new AssetEditPath(mwindow, this,
267 path_text, y, asset_edit->indexable->path,
268 _(PROGRAM_NAME ": Asset path"),
269 _("Select a file for this asset:")));
273 add_subwindow(new BC_Title(x, y, _("File format:")));
275 add_subwindow(new BC_Title(x, y, File::formattostr(mwindow->plugindb,
278 mwindow->theme->assetedit_color));
282 int64_t bytes = fs.get_size(asset->path);
283 add_subwindow(new BC_Title(x, y, _("Bytes:")));
284 sprintf(string, "%jd", bytes);
285 Units::punctuate(string);
288 add_subwindow(new BC_Title(x2, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
289 if( asset->format == FILE_MPEG || asset->format == FILE_FFMPEG ) {
290 detail_dialog = new DetailAssetDialog(mwindow);
291 BC_GenericButton *detail = new DetailAssetButton(this, x2+120, y);
292 add_subwindow(detail);
302 if( asset->audio_length > 0 )
303 length = (double)asset->audio_length / asset->sample_rate;
304 if( asset->video_length > 0 )
305 length = MAX(length, (double)asset->video_length / asset->frame_rate);
307 if( !EQUIV(length, 0) )
308 bitrate = (int64_t)(bytes * 8 / length);
311 add_subwindow(new BC_Title(x, y, _("Bitrate (bits/sec):")));
312 sprintf(string, "%jd", bitrate);
314 Units::punctuate(string);
315 add_subwindow(new BC_Title(x2, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
321 if( (asset && asset->audio_data) || nested_edl ) {
322 add_subwindow(new BC_Bar(x, y, get_w() - x * 2));
325 add_subwindow(new BC_Title(x, y, _("Audio:"), LARGEFONT, RED));
330 if( asset->get_compression_text(1, 0) ) {
331 add_subwindow(new BC_Title(x, y, _("Compression:")));
333 add_subwindow(new BC_Title(x,
335 asset->get_compression_text(1, 0),
337 mwindow->theme->assetedit_color));
343 add_subwindow(new BC_Title(x, y, _("Channels:")));
344 sprintf(string, "%d", asset_edit->changed_params->channels);
348 BC_TumbleTextBox *textbox = new AssetEditChannels(this,
352 textbox->create_objects();
356 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
361 add_subwindow(new BC_Title(x, y, _("Sample rate:")));
362 sprintf(string, "%d", asset_edit->changed_params->sample_rate);
367 add_subwindow(textbox = new AssetEditRate(this, string, x, y));
368 x += textbox->get_w();
369 add_subwindow(new SampleRatePulldown(mwindow, textbox, x, y));
372 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
379 add_subwindow(new BC_Title(x, y, _("Bits:")));
382 bitspopup = new BitsPopup(this, x, y,
383 &asset_edit->changed_params->bits,
385 bitspopup->create_objects();
388 add_subwindow(new BC_Title(x, y, File::bitstostr(asset->bits), MEDIUMFONT, mwindow->theme->assetedit_color));
393 add_subwindow(new BC_Title(x, y, _("Header length:")));
394 sprintf(string, "%d", asset->header);
398 add_subwindow(new AssetEditHeader(this, string, x, y));
400 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
405 add_subwindow(new BC_Title(x, y, _("Byte order:")));
411 add_subwindow(lohi = new AssetEditByteOrderLOHI(this,
416 add_subwindow(hilo = new AssetEditByteOrderHILO(this,
424 if( asset->byte_order )
425 add_subwindow(new BC_Title(x, y, _("Lo-Hi"), MEDIUMFONT, mwindow->theme->assetedit_color));
427 add_subwindow(new BC_Title(x, y, _("Hi-Lo"), MEDIUMFONT, mwindow->theme->assetedit_color));
434 // add_subwindow(new BC_Title(x, y, _("Values are signed:")));
435 add_subwindow(new AssetEditSigned(this, asset->signed_, x, y));
438 if( !asset->signed_ && asset->bits == 8 )
439 add_subwindow(new BC_Title(x, y, _("Values are unsigned")));
441 add_subwindow(new BC_Title(x, y, _("Values are signed")));
449 if( (asset && asset->video_data) || nested_edl ) {
450 add_subwindow(new BC_Bar(x, y, get_w() - x * 2));
453 add_subwindow(new BC_Title(x, y, _("Video:"), LARGEFONT, RED));
458 if( asset && asset->get_compression_text(0,1) ) {
459 add_subwindow(new BC_Title(x, y, _("Compression:")));
461 add_subwindow(new BC_Title(x,
463 asset->get_compression_text(0,1),
465 mwindow->theme->assetedit_color));
470 add_subwindow(new BC_Title(x, y, _("Frame rate:")));
472 sprintf(string, "%.4f", asset_edit->changed_params->frame_rate);
474 //printf("AssetEditWindow::create_objects %d %f\n", __LINE__, asset_edit->changed_params->frame_rate);
476 BC_TextBox *framerate;
477 add_subwindow(framerate = new AssetEditFRate(this, string, x, y));
479 add_subwindow(new FrameRatePulldown(mwindow, framerate, x, y));
482 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
487 add_subwindow(new BC_Title(x, y, _("Width:")));
489 sprintf(string, "%d", asset_edit->changed_params->width);
490 win_width = new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color);
491 add_subwindow(win_width);
495 add_subwindow(new BC_Title(x, y, _("Height:")));
497 sprintf(string, "%d", asset_edit->changed_params->height);
498 win_height = new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color);
499 add_subwindow(win_height);
500 y += win_height->get_h() + 5;
502 if( asset && (asset->format == FILE_MPEG || asset->format == FILE_FFMPEG ) ) {
505 add_subwindow(new BC_Title(x, y, _("Actual width:")));
507 sprintf(string, "%d", asset->actual_width);
508 add_subwindow(new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color));
510 BC_GenericButton *resize = new ResizeAssetButton(this, x+64, y);
511 add_subwindow(resize);
515 add_subwindow(new BC_Title(x, y, _("Actual height:")));
517 sprintf(string, "%d", asset->actual_height);
518 title = new BC_Title(x, y, string, MEDIUMFONT, mwindow->theme->assetedit_color);
519 add_subwindow(title);
520 y += title->get_h() + 5;
523 // --------------------
524 add_subwindow(title = new BC_Title(x1, y, _("Fix interlacing:")));
525 add_subwindow(ilacefixoption_chkboxw = new Interlaceautofix(mwindow,this, x2, y));
526 y += ilacefixoption_chkboxw->get_h() + 5;
527 // --------------------
528 add_subwindow(title = new BC_Title(x1, y, _("Asset's interlacing:")));
529 add_subwindow(textboxw = new AssetEditILacemode(this, "", ILACE_ASSET_MODEDEFAULT, x2, y, 200));
530 ilacefixoption_chkboxw->ilacemode_textbox = textboxw;
531 add_subwindow(listboxw = new AssetEditInterlacemodePulldown(mwindow,
533 &asset_edit->changed_params->interlace_mode,
534 (ArrayList<BC_ListBoxItem*>*)&mwindow->interlace_asset_modes,
535 ilacefixoption_chkboxw,
536 x2 + textboxw->get_w(),
538 ilacefixoption_chkboxw->ilacemode_listbox = listboxw;
539 y += textboxw->get_h() + 5;
541 // --------------------
542 add_subwindow(title = new BC_Title(x1, y, _("Interlace correction:")));
543 add_subwindow(textboxw = new AssetEditILacefixmethod(this, "", ILACE_FIXDEFAULT, x2, y, 200));
544 ilacefixoption_chkboxw->ilacefixmethod_textbox = textboxw;
545 add_subwindow(listboxw = new InterlacefixmethodPulldown(mwindow,
547 &asset_edit->changed_params->interlace_fixmethod,
548 (ArrayList<BC_ListBoxItem*>*)&mwindow->interlace_asset_fixmethods,
549 x2 + textboxw->get_w(),
551 ilacefixoption_chkboxw->ilacefixmethod_listbox = listboxw;
552 ilacefixoption_chkboxw->showhideotherwidgets();
553 y += textboxw->get_h() + 5;
556 add_subwindow(new BC_OKButton(this));
557 add_subwindow(new BC_CancelButton(this));
562 void AssetEditWindow::show_info_detail()
565 get_abs_cursor_xy(cur_x, cur_y, 0);
566 detail_dialog->start((Asset*)asset_edit->indexable, cur_x, cur_y);
570 AssetEditChannels::AssetEditChannels(AssetEditWindow *fwindow,
574 : BC_TumbleTextBox(fwindow,
582 this->fwindow = fwindow;
585 int AssetEditChannels::handle_event()
587 Asset *asset = fwindow->asset_edit->changed_params;
588 asset->channels = atol(get_text());
592 AssetEditRate::AssetEditRate(AssetEditWindow *fwindow, char *text, int x, int y)
593 : BC_TextBox(x, y, 100, 1, text)
595 this->fwindow = fwindow;
598 int AssetEditRate::handle_event()
600 Asset *asset = fwindow->asset_edit->changed_params;
601 asset->sample_rate = atol(get_text());
605 AssetEditFRate::AssetEditFRate(AssetEditWindow *fwindow, char *text, int x, int y)
606 : BC_TextBox(x, y, 100, 1, text)
608 this->fwindow = fwindow;
611 int AssetEditFRate::handle_event()
613 Asset *asset = fwindow->asset_edit->changed_params;
614 asset->frame_rate = atof(get_text());
618 Interlaceautofix::Interlaceautofix(MWindow *mwindow,AssetEditWindow *fwindow, int x, int y)
620 fwindow->asset_edit->changed_params->interlace_autofixoption,
621 _("Automatically Fix Interlacing"))
623 this->fwindow = fwindow;
624 this->mwindow = mwindow;
627 Interlaceautofix::~Interlaceautofix()
631 int Interlaceautofix::handle_event()
633 Asset *asset = fwindow->asset_edit->changed_params;
634 asset->interlace_autofixoption = get_value();
635 showhideotherwidgets();
639 void Interlaceautofix::showhideotherwidgets()
641 int thevalue = get_value();
643 Asset *asset = fwindow->asset_edit->changed_params;
644 if( thevalue == ILACE_AUTOFIXOPTION_AUTO ) {
645 this->ilacemode_textbox->enable();
646 this->ilacemode_listbox->enable();
647 this->ilacefixmethod_textbox->disable();
648 this->ilacefixmethod_listbox->disable();
649 int xx = ilaceautofixmethod(mwindow->edl->session->interlace_mode,asset->interlace_mode);
650 ilacefixmethod_to_text(string, xx);
651 this->ilacefixmethod_textbox->update(string);
653 if( thevalue == ILACE_AUTOFIXOPTION_MANUAL ) {
654 this->ilacemode_textbox->disable();
655 this->ilacemode_listbox->disable();
656 this->ilacefixmethod_textbox->enable();
657 this->ilacefixmethod_listbox->enable();
658 ilacefixmethod_to_text(string, asset->interlace_fixmethod);
659 this->ilacefixmethod_textbox->update(string);
663 InterlacefixmethodItem::InterlacefixmethodItem(const char *text, int value)
664 : BC_ListBoxItem(text)
669 InterlacefixmethodPulldown::InterlacefixmethodPulldown(MWindow *mwindow,
670 BC_TextBox *output_text, int *output_value,
671 ArrayList<BC_ListBoxItem*> *data, int x, int y)
672 : BC_ListBox(x, y, 200, 150, LISTBOX_TEXT, data, 0, 0, 1, 0, 1)
674 this->mwindow = mwindow;
675 this->output_text = output_text;
676 this->output_value = output_value;
677 output_text->update(interlacefixmethod_to_text());
680 int InterlacefixmethodPulldown::handle_event()
682 output_text->update(get_selection(0, 0)->get_text());
683 *output_value = ((InterlacefixmethodItem*)get_selection(0, 0))->value;
687 const char* InterlacefixmethodPulldown::interlacefixmethod_to_text()
689 ilacefixmethod_to_text(this->string,*output_value);
690 return (this->string);
693 AssetEditILaceautofixoption::AssetEditILaceautofixoption(AssetEditWindow *fwindow, char *text, int thedefault, int x, int y, int w)
694 : BC_TextBox(x, y, w, 1, text)
696 this->fwindow = fwindow;
697 this->thedefault = thedefault;
700 int AssetEditILaceautofixoption::handle_event()
702 Asset *asset = fwindow->asset_edit->changed_params;
703 asset->interlace_autofixoption = ilaceautofixoption_from_text(get_text(), this->thedefault);
708 AssetEditILacemode::AssetEditILacemode(AssetEditWindow *fwindow, const char *text, int thedefault, int x, int y, int w)
709 : BC_TextBox(x, y, w, 1, text)
711 this->fwindow = fwindow;
712 this->thedefault = thedefault;
715 int AssetEditILacemode::handle_event()
717 Asset *asset = fwindow->asset_edit->changed_params;
718 asset->interlace_mode = ilacemode_from_text(get_text(),this->thedefault);
722 AssetEditInterlacemodePulldown::AssetEditInterlacemodePulldown(MWindow *mwindow,
723 BC_TextBox *output_text,
725 ArrayList<BC_ListBoxItem*> *data,
726 Interlaceautofix *fixoption_chkboxw,
741 this->fixoption_chkbox = fixoption_chkboxw;
742 this->mwindow = mwindow;
743 this->output_text = output_text;
744 this->output_value = output_value;
745 output_text->update(interlacemode_to_text());
748 int AssetEditInterlacemodePulldown::handle_event()
750 output_text->update(get_selection(0, 0)->get_text());
751 *output_value = ((InterlacemodeItem*)get_selection(0, 0))->value;
752 fixoption_chkbox->showhideotherwidgets();
756 char* AssetEditInterlacemodePulldown::interlacemode_to_text()
758 ilacemode_to_text(this->string,*output_value);
759 return (this->string);
762 AssetEditILacefixmethod::AssetEditILacefixmethod(AssetEditWindow *fwindow, const char *text, int thedefault, int x, int y, int w)
763 : BC_TextBox(x, y, w, 1, text)
765 this->fwindow = fwindow;
766 this->thedefault = thedefault;
769 int AssetEditILacefixmethod::handle_event()
771 Asset *asset = fwindow->asset_edit->changed_params;
772 asset->interlace_fixmethod = ilacefixmethod_from_text(get_text(),this->thedefault);
776 AssetEditHeader::AssetEditHeader(AssetEditWindow *fwindow, char *text, int x, int y)
777 : BC_TextBox(x, y, 100, 1, text)
779 this->fwindow = fwindow;
782 int AssetEditHeader::handle_event()
784 Asset *asset = fwindow->asset_edit->changed_params;
785 asset->header = atol(get_text());
789 AssetEditByteOrderLOHI::AssetEditByteOrderLOHI(AssetEditWindow *fwindow,
793 : BC_Radial(x, y, value, _("Lo-Hi"))
795 this->fwindow = fwindow;
798 int AssetEditByteOrderLOHI::handle_event()
800 Asset *asset = fwindow->asset_edit->changed_params;
801 asset->byte_order = 1;
802 fwindow->hilo->update(0);
807 AssetEditByteOrderHILO::AssetEditByteOrderHILO(AssetEditWindow *fwindow,
811 : BC_Radial(x, y, value, _("Hi-Lo"))
813 this->fwindow = fwindow;
816 int AssetEditByteOrderHILO::handle_event()
818 Asset *asset = fwindow->asset_edit->changed_params;
819 asset->byte_order = 0;
820 fwindow->lohi->update(0);
825 AssetEditSigned::AssetEditSigned(AssetEditWindow *fwindow,
829 : BC_CheckBox(x, y, value, _("Values are signed"))
831 this->fwindow = fwindow;
834 int AssetEditSigned::handle_event()
836 Asset *asset = fwindow->asset_edit->changed_params;
837 asset->signed_ = get_value();
847 AssetEditPathText::AssetEditPathText(AssetEditWindow *fwindow, int y)
848 : BC_TextBox(5, y, 300, 1, fwindow->asset_edit->changed_params->path)
850 this->fwindow = fwindow;
852 AssetEditPathText::~AssetEditPathText()
855 int AssetEditPathText::handle_event()
857 strcpy(fwindow->asset_edit->changed_params->path, get_text());
861 AssetEditPath::AssetEditPath(MWindow *mwindow, AssetEditWindow *fwindow,
862 BC_TextBox *textbox, int y, const char *text,
863 const char *window_title, const char *window_caption)
864 : BrowseButton(mwindow->theme, fwindow, textbox, 310, y, text,
865 window_title, window_caption, 0)
867 this->fwindow = fwindow;
870 AssetEditPath::~AssetEditPath() {}
877 AssetEditFormat::AssetEditFormat(AssetEditWindow *fwindow, char* default_, int y)
878 : FormatPopup(fwindow->mwindow->plugindb, 90, y)
880 this->fwindow = fwindow;
882 AssetEditFormat::~AssetEditFormat()
885 int AssetEditFormat::handle_event()
887 Asset *asset = fwindow->asset_edit->changed_params;
888 asset->format = File::strtoformat(fwindow->mwindow->plugindb,
889 get_selection(0, 0)->get_text());
896 DetailAssetButton::DetailAssetButton(AssetEditWindow *fwindow, int x, int y)
897 : BC_GenericButton(x, y, _("Detail"))
899 this->fwindow = fwindow;
903 DetailAssetButton::~DetailAssetButton()
907 int DetailAssetButton::handle_event()
909 fwindow->show_info_detail();
913 DetailAssetWindow::DetailAssetWindow(MWindow *mwindow,
914 DetailAssetDialog *detail_dialog, Asset *asset)
915 : BC_Window(_("Asset Detail"),
916 detail_dialog->x - 600/2, detail_dialog->y - 500/2, 600, 500)
918 this->mwindow = mwindow;
919 this->detail_dialog = detail_dialog;
926 DetailAssetWindow::~DetailAssetWindow()
928 asset->remove_user();
932 DetailAssetDialog::DetailAssetDialog(MWindow *mwindow)
935 this->mwindow = mwindow;
939 DetailAssetDialog::~DetailAssetDialog()
944 void DetailAssetWindow::create_objects()
947 char file_name[BCTEXTLEN];
948 int len = sizeof(info);
949 strncpy(info,_("no info available"),len);
950 if( !mwindow->preferences->get_asset_file_path(asset, file_name) ) {
951 switch( asset->format ) {
953 FileMPEG::get_info(asset->path, file_name, &info[0],len);
956 FileFFMPEG::get_info(asset->path, &info[0],len);
960 text = new BC_ScrollTextBox(this, x, y, get_w()-32, 23, info, -len);
961 text->create_objects(); text->set_text_row(0);
962 add_subwindow(new BC_OKButton(this));
966 void DetailAssetDialog::start(Asset *asset, int x, int y)
970 this->x = x; this->y = y;
971 BC_DialogThread::start();
974 BC_Window *DetailAssetDialog::new_gui()
976 dwindow = new DetailAssetWindow(mwindow, this, asset);
977 dwindow->create_objects();