00001 #include "autoconf.h"
00002 #include "bcsignals.h"
00003 #include "clip.h"
00004 #include "edl.h"
00005 #include "edlsession.h"
00006 #include "gwindowgui.h"
00007 #include "language.h"
00008 #include "mainmenu.h"
00009 #include "mainsession.h"
00010 #include "mwindow.h"
00011 #include "mwindowgui.h"
00012 #include "trackcanvas.h"
00013
00014
00015
00016
00017
00018 GWindowGUI::GWindowGUI(MWindow *mwindow,
00019 int w,
00020 int h)
00021 : BC_Window(PROGRAM_NAME N_(": Overlays"),
00022 mwindow->session->gwindow_x,
00023 mwindow->session->gwindow_y,
00024 w,
00025 h,
00026 w,
00027 h,
00028 0,
00029 0,
00030 1)
00031 {
00032 this->mwindow = mwindow;
00033 }
00034
00035 static char *other_text[NONAUTOTOGGLES_COUNT] =
00036 {
00037 N_("Assets"),
00038 N_("Titles"),
00039 N_("Transitions"),
00040 N_("Plugin Autos")
00041 };
00042
00043 static char *auto_text[] =
00044 {
00045 N_("Mute"),
00046 N_("Camera X"),
00047 N_("Camera Y"),
00048 N_("Camera Z"),
00049 N_("Projector X"),
00050 N_("Projector Y"),
00051 N_("Projector Z"),
00052 N_("Fade"),
00053 N_("Pan"),
00054 N_("Mode"),
00055 N_("Mask"),
00056 N_("Nudge")
00057 };
00058
00059 static toggleinfo toggle_order[] =
00060 {
00061 {0, NONAUTOTOGGLES_ASSETS},
00062 {0, NONAUTOTOGGLES_TITLES},
00063 {0, NONAUTOTOGGLES_TRANSITIONS},
00064 {1, AUTOMATION_FADE},
00065 {1, AUTOMATION_MUTE},
00066 {1, AUTOMATION_MODE},
00067 {1, AUTOMATION_PAN},
00068 {0, NONAUTOTOGGLES_PLUGIN_AUTOS},
00069 {1, AUTOMATION_MASK},
00070 {1, AUTOMATION_CAMERA_X},
00071 {1, AUTOMATION_CAMERA_Y},
00072 {1, AUTOMATION_CAMERA_Z},
00073 {1, AUTOMATION_PROJECTOR_X},
00074 {1, AUTOMATION_PROJECTOR_Y},
00075 {1, AUTOMATION_PROJECTOR_Z},
00076 };
00077
00078 void GWindowGUI::calculate_extents(BC_WindowBase *gui, int *w, int *h)
00079 {
00080 int temp1, temp2, temp3, temp4, temp5, temp6, temp7;
00081 int current_w, current_h;
00082 *w = 10;
00083 *h = 10;
00084 for(int i = 0; i < NONAUTOTOGGLES_COUNT + AUTOMATION_TOTAL; i++)
00085 {
00086 BC_Toggle::calculate_extents(gui,
00087 BC_WindowBase::get_resources()->checkbox_images,
00088 0,
00089 &temp1,
00090 ¤t_w,
00091 ¤t_h,
00092 &temp2,
00093 &temp3,
00094 &temp4,
00095 &temp5,
00096 &temp6,
00097 &temp7,
00098 toggle_order[i].isauto ? auto_text[toggle_order[i].ref] : other_text[toggle_order[i].ref]);
00099 *w = MAX(current_w, *w);
00100 *h += current_h + 5;
00101 }
00102
00103 *h += 10;
00104 *w += 20;
00105 }
00106
00107
00108
00109 void GWindowGUI::create_objects()
00110 {
00111 int x = 10, y = 10;
00112
00113
00114 for(int i = 0; i < NONAUTOTOGGLES_COUNT + AUTOMATION_TOTAL; i++)
00115 {
00116 add_tool(toggles[i] = new GWindowToggle(mwindow,
00117 this,
00118 x,
00119 y,
00120 toggle_order[i]));
00121 y += toggles[i]->get_h() + 5;
00122 }
00123 }
00124
00125 void GWindowGUI::update_mwindow()
00126 {
00127 unlock_window();
00128 mwindow->gui->mainmenu->update_toggles(1);
00129 lock_window("GWindowGUI::update_mwindow");
00130 }
00131
00132 void GWindowGUI::update_toggles(int use_lock)
00133 {
00134 if(use_lock) lock_window("GWindowGUI::update_toggles");
00135
00136 for(int i = 0; i < NONAUTOTOGGLES_COUNT + AUTOMATION_TOTAL; i++)
00137 {
00138 toggles[i]->update();
00139 }
00140
00141 if(use_lock) unlock_window();
00142 }
00143
00144 int GWindowGUI::translation_event()
00145 {
00146 mwindow->session->gwindow_x = get_x();
00147 mwindow->session->gwindow_y = get_y();
00148 return 0;
00149 }
00150
00151 int GWindowGUI::close_event()
00152 {
00153 hide_window();
00154 mwindow->session->show_gwindow = 0;
00155 unlock_window();
00156
00157 mwindow->gui->lock_window("GWindowGUI::close_event");
00158 mwindow->gui->mainmenu->show_gwindow->set_checked(0);
00159 mwindow->gui->unlock_window();
00160
00161 lock_window("GWindowGUI::close_event");
00162 mwindow->save_defaults();
00163 return 1;
00164 }
00165
00166 int GWindowGUI::keypress_event()
00167 {
00168 switch(get_keypress())
00169 {
00170 case 'w':
00171 case 'W':
00172 if(ctrl_down())
00173 {
00174 close_event();
00175 return 1;
00176 }
00177 break;
00178 }
00179 return 0;
00180 }
00181
00182
00183
00184
00185
00186
00187 GWindowToggle::GWindowToggle(MWindow *mwindow,
00188 GWindowGUI *gui,
00189 int x,
00190 int y,
00191 toggleinfo toggleinf)
00192 : BC_CheckBox(x,
00193 y,
00194 *get_main_value(mwindow, toggleinf),
00195 toggleinf.isauto ? auto_text[toggleinf.ref] : other_text[toggleinf.ref])
00196 {
00197 this->mwindow = mwindow;
00198 this->gui = gui;
00199 this->toggleinf = toggleinf;
00200 }
00201
00202 int GWindowToggle::handle_event()
00203 {
00204 *get_main_value(mwindow, toggleinf) = get_value();
00205 gui->update_mwindow();
00206
00207
00208
00209 unlock_window();
00210 mwindow->gui->lock_window("GWindowToggle::handle_event");
00211 if(toggleinf.isauto)
00212 {
00213 mwindow->gui->canvas->draw_overlays();
00214 mwindow->gui->canvas->flash();
00215 }
00216 else
00217 {
00218 switch(toggleinf.ref)
00219 {
00220 case NONAUTOTOGGLES_ASSETS:
00221 case NONAUTOTOGGLES_TITLES:
00222 mwindow->gui->update(1,
00223 1,
00224 0,
00225 0,
00226 1,
00227 0,
00228 0);
00229 break;
00230
00231 case NONAUTOTOGGLES_TRANSITIONS:
00232 case NONAUTOTOGGLES_PLUGIN_AUTOS:
00233 mwindow->gui->canvas->draw_overlays();
00234 mwindow->gui->canvas->flash();
00235 break;
00236 }
00237 }
00238
00239 mwindow->gui->unlock_window();
00240 lock_window("GWindowToggle::handle_event");
00241
00242 return 1;
00243 }
00244
00245 int* GWindowToggle::get_main_value(MWindow *mwindow, toggleinfo toggleinf)
00246 {
00247 if(toggleinf.isauto)
00248 {
00249 return &mwindow->edl->session->auto_conf->autos[toggleinf.ref];
00250 }
00251 else
00252 {
00253 switch(toggleinf.ref)
00254 {
00255 case NONAUTOTOGGLES_ASSETS:
00256 return &mwindow->edl->session->show_assets;
00257 break;
00258 case NONAUTOTOGGLES_TITLES:
00259 return &mwindow->edl->session->show_titles;
00260 break;
00261 case NONAUTOTOGGLES_TRANSITIONS:
00262 return &mwindow->edl->session->auto_conf->transitions;
00263 break;
00264 case NONAUTOTOGGLES_PLUGIN_AUTOS:
00265 return &mwindow->edl->session->auto_conf->plugins;
00266 break;
00267 }
00268 }
00269 }
00270
00271 void GWindowToggle::update()
00272 {
00273 set_value(*get_main_value(mwindow, toggleinf));
00274 }
00275
00276
00277