X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Floadmode.C;h=04193b23d00797858a48e3fa9269e95988f985d9;hp=04b35ee60451ac9e6a954104e4c49cf97eb78e67;hb=4c207ab325a8e8e6b79a9a18d4647273b5f59f93;hpb=3878a693e0ea8626268a95333a11954cf9c10930 diff --git a/cinelerra-5.1/cinelerra/loadmode.C b/cinelerra-5.1/cinelerra/loadmode.C index 04b35ee6..04193b23 100644 --- a/cinelerra-5.1/cinelerra/loadmode.C +++ b/cinelerra-5.1/cinelerra/loadmode.C @@ -25,6 +25,9 @@ #include "mwindow.h" #include "theme.h" +#define LOADMODE_LOAD_TEXT _("Load strategy:") +#define LOADMODE_EDL_TEXT _("EDL strategy:") + // Must match macros static const char *mode_images[] = { @@ -35,7 +38,9 @@ static const char *mode_images[] = "loadmode_cat", "loadmode_paste", "loadmode_resource", - "loadmode_nested" + "loadmode_edl_clip", + "loadmode_edl_nested", + "loadmode_edl_fileref", }; static const char *mode_text[] = @@ -47,7 +52,9 @@ static const char *mode_text[] = N_("Concatenate to existing tracks"), N_("Paste over selection/at insertion point"), N_("Create new resources only"), - N_("Nest sequence") + N_("EDL as Clip"), + N_("EDL as Nested"), + N_("EDL as Reference"), }; @@ -58,53 +65,52 @@ LoadModeItem::LoadModeItem(const char *text, int value) } -LoadModeToggle::LoadModeToggle(int x, int y, LoadMode *window, - int value, const char *images, const char *tooltip) - : BC_Toggle(x, y, window->mwindow->theme->get_image_set(images), - *window->output == value) +LoadModeToggle::LoadModeToggle(int x, int y, LoadMode *window, int id, + int *output, const char *images, const char *tooltip) + : BC_Toggle(x, y, window->mwindow->theme->get_image_set(images), *output) { this->window = window; - this->value = value; + this->id = id; + this->output = output; set_tooltip(tooltip); } int LoadModeToggle::handle_event() { - *window->output = value; + *output = id; window->update(); return 1; } -LoadMode::LoadMode(MWindow *mwindow, - BC_WindowBase *window, int x, int y, int *output, - int use_nothing, int use_nested, int line_wrap) +LoadMode::LoadMode(MWindow *mwindow, BC_WindowBase *window, + int x, int y, int *load_mode, int *edl_mode, + int use_nothing, int line_wrap) { this->mwindow = mwindow; this->window = window; this->x = x; this->y = y; - this->output = output; + this->load_mode = load_mode; + this->edl_mode = edl_mode; this->use_nothing = use_nothing; - this->use_nested = use_nested; this->line_wrap = line_wrap; for( int i=0; ivalue == *output ) + if( load_modes[i]->value == mode ) return load_modes[i]->get_text(); } return _("Unknown"); @@ -115,16 +121,29 @@ void LoadMode::load_mode_geometry(BC_WindowBase *gui, Theme *theme, int *pw, int *ph) { int pad = 5; - const char *title_text = _("Insertion strategy:"); - int mw = BC_Title::calculate_w(gui, title_text); - int mh = BC_Title::calculate_h(gui, title_text); + const char *load_text = LOADMODE_LOAD_TEXT; + int mw = BC_Title::calculate_w(gui, load_text); + int mh = BC_Title::calculate_h(gui, load_text); int ix = mw + 2*pad, iy = 0, x1 = ix; int ww = theme->loadmode_w + 24; if( mw < ww ) mw = ww; for( int i=0; iadd_subwindow(title = new BC_Title(x, y, title_text)); - int mw = title->get_w(), mh = title->get_h(); + load_title = new BC_Title(x, y, LOADMODE_LOAD_TEXT); + window->add_subwindow(load_title); + int mw = load_title->get_w(), mh = load_title->get_h(); int ix = mw + 2*pad, iy = 0, x1 = ix; int ww = mwindow->theme->loadmode_w + 24; if( mw < ww ) mw = ww; for( int i=0; iadd_subwindow(edl_title); + ix += bmax(load_title->get_w(), edl_title->get_w()) + 2*pad; + break; + } load_modes.append(new LoadModeItem(_(mode_text[i]), i)); int text_line, w, h, toggle_x, toggle_y; int text_x, text_y, text_w, text_h; @@ -182,8 +216,8 @@ void LoadMode::create_objects() &text_line, &w, &h, &toggle_x, &toggle_y, &text_x, &text_y, &text_w, &text_h, 0, MEDIUMFONT); if( line_wrap && ix+w > ww ) { ix = x1; iy += h+pad; } - mode[i] = new LoadModeToggle(x+ix, y+iy, this, - i, mode_images[i], _(mode_text[i])); + mode[i] = new LoadModeToggle(x+ix, y+iy, this, i, + mode_set, mode_images[i], _(mode_text[i])); window->add_subwindow(mode[i]); if( (ix+=w) > mw ) mw = ix; if( (h+=iy) > mh ) mh = h; @@ -191,7 +225,7 @@ void LoadMode::create_objects() } ix = 0; iy = mh+pad; - const char *mode_text = mode_to_text(); + const char *mode_text = mode_to_text(*load_mode); textbox = new BC_TextBox(x+ix, y+iy, mwindow->theme->loadmode_w, 1, mode_text); window->add_subwindow(textbox); @@ -199,21 +233,34 @@ void LoadMode::create_objects() listbox = new LoadModeListBox(window, this, x+ix, y+iy); window->add_subwindow(listbox); mh = iy + textbox->get_h(); + update(); } int LoadMode::reposition_window(int x, int y) { this->x = x; this->y = y; - title->reposition_window(x, y); - int mw = title->get_w(), mh = title->get_h(); - int pad = 5; + load_title->reposition_window(x, y); + int mw = load_title->get_w(), mh = load_title->get_h(); + int pad = xS(5); int ix = mw + 2*pad, iy = 0, x1 = ix; - int ww = mwindow->theme->loadmode_w + 24; + int ww = mwindow->theme->loadmode_w + xS(24); if( mw < ww ) mw = ww; for( int i=0; ireposition_window(x+ix, y+iy); + ix += bmax(load_title->get_w(), edl_title->get_w()) + 2*pad; + break; + } int text_line, w, h, toggle_x, toggle_y; int text_x, text_y, text_w, text_h; BC_Toggle::calculate_extents(window, @@ -238,7 +285,7 @@ int LoadMode::get_h() { int result = 0; load_mode_geometry(window, mwindow->theme, - use_nothing, use_nested, line_wrap, 0, &result); + use_nothing, edl_mode!=0, line_wrap, 0, &result); return result; } @@ -256,9 +303,18 @@ void LoadMode::update() { for( int i=0; iset_value(*output == i); + int v = 0; + if( *load_mode == i ) v = 1; + if( edl_mode && *edl_mode == i ) v = 1; + mode[i]->set_value(v); } - textbox->update(mode_to_text()); + for( int k=0; kvalue, v = 0; + if( *load_mode == i ) v = 1; + if( edl_mode && *edl_mode == i ) v = 1; + load_modes[k]->set_selected(v); + } + textbox->update(mode_to_text(*load_mode)); } int LoadMode::set_line_wrap(int v) @@ -270,7 +326,7 @@ int LoadMode::set_line_wrap(int v) LoadModeListBox::LoadModeListBox(BC_WindowBase *window, LoadMode *loadmode, int x, int y) - : BC_ListBox(x, y, loadmode->mwindow->theme->loadmode_w, 150, LISTBOX_TEXT, + : BC_ListBox(x, y, loadmode->mwindow->theme->loadmode_w, yS(150), LISTBOX_TEXT, (ArrayList*)&loadmode->load_modes, 0, 0, 1, 0, 1) { this->window = window; @@ -284,10 +340,13 @@ LoadModeListBox::~LoadModeListBox() int LoadModeListBox::handle_event() { LoadModeItem *item = (LoadModeItem *)get_selection(0, 0); - if( item ) { - *(loadmode->output) = item->value; - loadmode->update(); - } + if( !item ) return 1; + int mode = item->value; + if( mode < LOADMODE_EDL_CLIP ) + *loadmode->load_mode = mode; + else if( loadmode->edl_mode ) + *loadmode->edl_mode = mode; + loadmode->update(); return 1; }