#include "playbackengine.h"
#include "playbackprefs.h"
#include "preferences.h"
+#include "record.h"
#include "recordprefs.h"
+#include "render.h"
#include "shbtnprefs.h"
#include "theme.h"
#include "trackcanvas.h"
-#define WIDTH 860
-#define HEIGHT 700
+#define WIDTH xS(860)
+#define HEIGHT yS(700)
PreferencesMenuitem::PreferencesMenuitem(MWindow *mwindow)
//int need_new_indexes = 0;
rerender = 0;
- mwindow->gui->lock_window("NewThread::new_gui");
+ mwindow->gui->lock_window("NewThread::new_gui");
int scr_x = mwindow->gui->get_screen_x(0, -1);
int scr_w = mwindow->gui->get_screen_w(0, -1);
int scr_h = mwindow->gui->get_screen_h(0, -1);
{
if(thread_running)
{
- lock_gui("PreferencesThread::update_framerate");
+ lock_dialog("PreferencesThread::update_framerate");
PreferencesWindow *window = (PreferencesWindow*)get_gui();
if(window) window->update_framerate();
- unlock_gui();
+ unlock_dialog();
}
return 0;
}
{
if(thread_running)
{
- lock_gui("PreferencesThread::update_framerate");
+ lock_dialog("PreferencesThread::update_framerate");
PreferencesWindow *window = (PreferencesWindow*)get_gui();
if(window) window->update_rates();
- unlock_gui();
+ unlock_dialog();
}
}
(*this_aconfig != *aconfig) || (*this_vconfig != *vconfig) ||
!preferences->brender_asset->equivalent(*mwindow->preferences->brender_asset, 0, 1, edl);
+ if( preferences->autocolor_assets != mwindow->preferences->autocolor_assets )
+ redraw_indexes = 1;
+
if( preferences->yuv_color_space != mwindow->preferences->yuv_color_space ||
preferences->yuv_color_range != mwindow->preferences->yuv_color_range ) {
YUV::yuv.yuv_set_colors(
mwindow->stop_brender();
if( window ) window->lock_window("PreferencesThread::apply_settings 5");
- if( strcmp(preferences->theme, mwindow->preferences->theme) != 0 )
- mwindow->restart_status = -1; // reload, need new bcresources
- if( strcmp(preferences->plugin_icons, mwindow->preferences->plugin_icons) != 0 )
- mwindow->restart_status = -1;
- if( preferences->awindow_picon_h != mwindow->preferences->awindow_picon_h )
- mwindow->restart_status = -1;
+ if( strcmp(preferences->theme, mwindow->preferences->theme) ||
+ strcmp(preferences->plugin_icons, mwindow->preferences->plugin_icons) ||
+ preferences->awindow_picon_h != mwindow->preferences->awindow_picon_h ||
+ preferences->layout_scale != mwindow->preferences->layout_scale ||
+ preferences->vicon_size != mwindow->preferences->vicon_size ||
+ preferences->vicon_color_mode != mwindow->preferences->vicon_color_mode )
+ mwindow->restart_status = -1; // reconstruct/restart program
if( strcmp(preferences->lv2_path, mwindow->preferences->lv2_path) != 0 )
reload_plugins = 1;
if( reload_plugins ) {
mwindow->restart_status = -1;
}
+ if( mwindow->preferences->perpetual_session && !preferences->perpetual_session )
+ mwindow->remove_undo_data();
+
mwindow->edl->copy_session(edl, 1);
- mwindow->preferences->copy_from(preferences);
+ mwindow->update_preferences(preferences);
BC_Signals::set_catch_segv(mwindow->preferences->trap_sigsegv);
BC_Signals::set_catch_intr(mwindow->preferences->trap_sigintr);
//edl->session->recording_format->dump();
//mwindow->edl->session->recording_format->dump();
-
+#ifdef GLx4
if(((mwindow->edl->session->output_w % 4) ||
(mwindow->edl->session->output_h % 4)) &&
mwindow->edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL)
_("This project's dimensions are not multiples of 4 so\n"
"it can't be rendered by OpenGL."));
}
-
+#endif
if(redraw_meters)
{
if(redraw_times)
{
mwindow->gui->lock_window("PreferencesThread::apply_settings 3");
- mwindow->gui->update(0, 0, 1, 0, 0, 1, 0);
+ mwindow->gui->update(0, NO_DRAW, 1, 0, 0, 1, 0);
mwindow->gui->redraw_time_dependancies();
mwindow->gui->unlock_window();
}
//printf("PreferencesThread::apply_settings 10\n");
}
- if(redraw_times || redraw_overlays)
+ if(redraw_indexes)
{
mwindow->gui->lock_window("PreferencesThread::apply_settings 4");
+ mwindow->gui->draw_trackmovement();
+ mwindow->gui->unlock_window();
+ }
+
+ if(redraw_times || redraw_overlays || redraw_indexes)
+ {
+ mwindow->gui->lock_window("PreferencesThread::apply_settings 5");
mwindow->gui->flush();
mwindow->gui->unlock_window();
}
return 0;
}
+const char *PreferencesThread::busy()
+{
+ if( mwindow->render->thread->running() )
+ return _("render");
+ Record *record = mwindow->gui->record;
+ if( record->capturing || record->recording || record->writing_file )
+ return _("record");
+ return 0;
+}
+
const char* PreferencesThread::category_to_text(int category)
{
PlaybackConfig *playback_config = edl->session->playback_config;
}
-
-
-
-
-
-
PreferencesWindow::PreferencesWindow(MWindow *mwindow,
PreferencesThread *thread, int x, int y, int w, int h)
: BC_Window(_(PROGRAM_NAME ": Preferences"), x,y, w,h,w,h, 1)
{
this->mwindow = mwindow;
this->thread = thread;
- dialog = 0;
category = 0;
+ dialog = 0;
+ confirm_dialog = 0;
}
PreferencesWindow::~PreferencesWindow()
{
lock_window("PreferencesWindow::~PreferencesWindow");
delete category;
-
-
- if(dialog) delete dialog;
-
-
+ delete dialog;
+ delete confirm_dialog;
for(int i = 0; i < categories.total; i++)
delete categories.values[i];
unlock_window();
unlock_window();
}
+void PreferencesWindow::confirm_update(const char *reason, int close)
+{
+ delete confirm_dialog;
+ confirm_dialog = new PreferencesConfirmDialog(thread, reason, close);
+ confirm_dialog->start();
+}
+
int PreferencesWindow::set_current_dialog(int number)
{
}
-
-
-
-
-
-
-
-
-
PreferencesButton::PreferencesButton(MWindow *mwindow,
PreferencesThread *thread,
int x,
}
-
-
-
-
-
-
-
PreferencesDialog::PreferencesDialog(MWindow *mwindow,
PreferencesWindow *pwindow)
- : BC_SubWindow(10,
- 40,
- pwindow->get_w() - 20,
- pwindow->get_h() - BC_GenericButton::calculate_h() - 10 - 40)
+ : BC_SubWindow(xS(10), yS(40),
+ pwindow->get_w() - xS(20),
+ pwindow->get_h() - BC_GenericButton::calculate_h() - yS(10 + 40))
{
this->pwindow = pwindow;
this->mwindow = mwindow;
{
}
-// ============================== category window
-
-
+// ============================== category window
PreferencesApply::PreferencesApply(MWindow *mwindow, PreferencesThread *thread)
: BC_GenericButton(thread->window->get_w() / 2 - BC_GenericButton::calculate_w(thread->window, _("Apply")) / 2,
- thread->window->get_h() - BC_GenericButton::calculate_h() - 10,
+ thread->window->get_h() - BC_GenericButton::calculate_h() - yS(10),
_("Apply"))
{
this->mwindow = mwindow;
}
int PreferencesApply::handle_event()
{
- thread->apply_settings();
- mwindow->save_defaults();
+ const char *reason = thread->busy();
+ if( reason )
+ thread->window->confirm_update(reason, 0);
+ else {
+ thread->apply_settings();
+ mwindow->save_defaults();
+ }
return 1;
}
int PreferencesApply::resize_event(int w, int h)
{
- reposition_window(w/2 - get_w()/2, h-get_h()-10);
+ reposition_window(w/2 - get_w()/2, h-get_h()-yS(10));
return 1;
}
-
-
PreferencesOK::PreferencesOK(MWindow *mwindow, PreferencesThread *thread)
- : BC_GenericButton(10,
- thread->window->get_h() - BC_GenericButton::calculate_h() - 10,
+ : BC_GenericButton(xS(10),
+ thread->window->get_h() - BC_GenericButton::calculate_h() - yS(10),
_("OK"))
{
this->mwindow = mwindow;
this->thread = thread;
}
+PreferencesOK::~PreferencesOK()
+{
+}
+
int PreferencesOK::keypress_event()
{
- if(get_keypress() == RETURN)
- {
- thread->window->set_done(0);
- return 1;
- }
+ if( get_keypress() == RETURN )
+ return handle_event();
return 0;
}
+
int PreferencesOK::handle_event()
{
- thread->window->set_done(0);
+ const char *reason = mwindow->restart() ? _("restart") : thread->busy();
+ if( reason )
+ thread->window->confirm_update(reason, 1);
+ else
+ thread->window->set_done(0);
return 1;
}
int PreferencesOK::resize_event(int w, int h)
{
- reposition_window(10, h-get_h()-10);
+ reposition_window(xS(10), h-get_h()-yS(10));
return 1;
}
+PreferencesConfirmDialog::PreferencesConfirmDialog(PreferencesThread *thread,
+ const char *reason, int close)
+{
+ this->thread = thread;
+ this->close = close;
+ sprintf(query, _("Busy: %s in progress. Are you sure?"), reason);
+}
+PreferencesConfirmDialog::~PreferencesConfirmDialog()
+{
+ close_window();
+}
+BC_Window *PreferencesConfirmDialog::new_gui()
+{
+ qwindow = new PreferencesConfirmWindow(this);
+ qwindow->create_objects(query, 0);
+ return qwindow;
+}
+void PreferencesConfirmDialog::handle_done_event(int result)
+{
+ if( result != 2 ) return; // not yes
+ if( !close ) {
+ thread->window->lock_window("PreferencesConfirmDialog::handle_done_event");
+ thread->apply_settings();
+ thread->mwindow->save_defaults();
+ thread->window->unlock_window();
+ }
+ else
+ thread->window->set_done(0);
+}
+
+PreferencesConfirmWindow::PreferencesConfirmWindow(PreferencesConfirmDialog *dialog)
+ : QuestionWindow(dialog->thread->mwindow)
+{
+ this->dialog = dialog;
+}
+PreferencesConfirmWindow::~PreferencesConfirmWindow()
+{
+}
+
PreferencesCancel::PreferencesCancel(MWindow *mwindow, PreferencesThread *thread)
- : BC_GenericButton(thread->window->get_w() - BC_GenericButton::calculate_w(thread->window, _("Cancel")) - 10,
- thread->window->get_h() - BC_GenericButton::calculate_h() - 10,
- _("Cancel"))
+ : BC_GenericButton(thread->window->get_w() - BC_GenericButton::calculate_w(thread->window, _("Cancel")) - xS(10),
+ thread->window->get_h() - BC_GenericButton::calculate_h() - yS(10),
+ _("Cancel"))
{
this->mwindow = mwindow;
this->thread = thread;
}
int PreferencesCancel::resize_event(int w, int h)
{
- reposition_window(w-get_w()-10, h-get_h()-10);
+ reposition_window(w-get_w()-xS(10), h-get_h()-yS(10));
return 1;
}
-
-
-
-
-
-
-
-
PreferencesCategory::PreferencesCategory(MWindow *mwindow, PreferencesThread *thread, int x, int y)
: BC_PopupTextBox(thread->window,
&thread->window->categories,
thread->category_to_text(thread->current_dialog),
- x,
- y,
- 200,
- 150)
+ x, y, xS(200), yS(150))
{
this->mwindow = mwindow;
this->thread = thread;