/* * CINELERRA * Copyright (C) 2009 Adam Williams * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "clip.h" #include "language.h" #include "loadmode.h" #include "mwindow.h" #include "theme.h" // Must match macros static const char *mode_images[] = { "loadmode_none", "loadmode_new", "loadmode_newcat", "loadmode_newtracks", "loadmode_cat", "loadmode_paste", "loadmode_resource", "loadmode_nested" }; static const char *tooltips[] = { _("Insert nothing"), _("Replace current project"), _("Replace current project and concatenate tracks"), _("Append in new tracks"), _("Concatenate to existing tracks"), _("Paste at insertion point"), _("Create new resources only"), _("Nest sequence") }; LoadMode::LoadMode(MWindow *mwindow, BC_WindowBase *window, int x, int y, int *output, int use_nothing, int use_nested) { this->mwindow = mwindow; this->window = window; this->x = x; this->y = y; this->output = output; this->use_nothing = use_nothing; this->use_nested = use_nested; for(int i = 0; i < TOTAL_LOADMODES; i++) mode[i] = 0; } LoadMode::~LoadMode() { delete title; for(int i = 0; i < TOTAL_LOADMODES; i++) if(mode[i]) delete mode[i]; } int LoadMode::calculate_h(BC_WindowBase *gui, Theme *theme) { int text_line; int w; int h; int toggle_x; int toggle_y; int text_x; int text_y; int text_w; int text_h; BC_Toggle::calculate_extents(gui, theme->get_image_set(mode_images[0]), 0, &text_line, &w, &h, &toggle_x, &toggle_y, &text_x, &text_y, &text_w, &text_h, 0, MEDIUMFONT); return h; } int LoadMode::calculate_w(BC_WindowBase *gui, Theme *theme, int use_none, int use_nested) { int total = gui->get_text_width(MEDIUMFONT, _("Insertion strategy:")) + 10; for(int i = 0; i < TOTAL_LOADMODES; i++) { if((i != LOADMODE_NOTHING || use_none) && (i != LOADMODE_NESTED || use_nested)) { int text_line; int w; int h; int toggle_x; int toggle_y; int text_x; int text_y; int text_w; int text_h; BC_Toggle::calculate_extents(gui, theme->get_image_set(mode_images[i]), 0, &text_line, &w, &h, &toggle_x, &toggle_y, &text_x, &text_y, &text_w, &text_h, 0, MEDIUMFONT); total += w + 10; } } return total; } int LoadMode::get_h() { int result = 0; result = MAX(result, title->get_h()); result = MAX(result, mode[1]->get_h()); return result; } void LoadMode::create_objects() { int x = this->x, y = this->y; window->add_subwindow(title = new BC_Title(x, y, _("Insertion strategy:"))); x += title->get_w() + 10; int x1 = x; for(int i = 0; i < TOTAL_LOADMODES; i++) { if((i != LOADMODE_NOTHING || use_nothing) && (i != LOADMODE_NESTED || use_nested)) { VFrame **images = mwindow->theme->get_image_set(mode_images[i]); if(x + images[0]->get_w() > window->get_w()) { x = x1; y += images[0]->get_h() + 5; } window->add_subwindow(mode[i] = new LoadModeToggle(x, y, this, i, mode_images[i], tooltips[i])); x += mode[i]->get_w() + 10; } } } int LoadMode::get_x() { return x; } int LoadMode::get_y() { return y; } int LoadMode::reposition_window(int x, int y) { this->x = x; this->y = y; title->reposition_window(x, y); x += title->get_w() + 10; int x1 = x; for(int i = 0; i < TOTAL_LOADMODES; i++) { if(mode[i]) { VFrame **images = mwindow->theme->get_image_set(mode_images[i]); if(x + images[0]->get_w() > window->get_w()) { x = x1; y += images[0]->get_h() + 5; } mode[i]->reposition_window(x, y); x += mode[i]->get_w() + 10; } } return 0; } void LoadMode::update() { for(int i = 0; i < TOTAL_LOADMODES; i++) { if(mode[i]) { mode[i]->set_value(*output == i); } } } 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) { this->window = window; this->value = value; set_tooltip(_(tooltip)); } int LoadModeToggle::handle_event() { *window->output = value; window->update(); return 1; }