Exciting new Alt/h help key provided by sge (Georgy) with many thanks!
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / transitionpopup.C
index 115a2f1d52eef089a2d405b5a8b693850b9ad85d..2a73b772f1f4c323971a1a24ee1ac3a81850fe44 100644 (file)
@@ -53,11 +53,14 @@ void TransitionLengthThread::start(Transition *transition, double length)
        BC_DialogThread::start();
 }
 
+#define TLW_W xS(300)
+#define TLW_H yS(100)
+
 BC_Window* TransitionLengthThread::new_gui()
 {
        BC_DisplayInfo display_info;
-       int x = display_info.get_abs_cursor_x() - 150;
-       int y = display_info.get_abs_cursor_y() - 50;
+       int x = display_info.get_abs_cursor_x() - TLW_W / 2;
+       int y = display_info.get_abs_cursor_y() - TLW_H / 2;
        TransitionLengthDialog *gui = new TransitionLengthDialog(mwindow, this, x, y);
        gui->create_objects();
        return gui;
@@ -65,6 +68,7 @@ BC_Window* TransitionLengthThread::new_gui()
 
 void TransitionLengthThread::handle_close_event(int result)
 {
+       if( mwindow->in_destructor ) return;
        if( !result ) {
                if( transition )
                        mwindow->set_transition_length(transition, new_length);
@@ -107,20 +111,15 @@ int TransitionUnitsItem::handle_event()
 {
        TransitionUnitsPopup *units_popup = (TransitionUnitsPopup *)get_popup_menu();
        TransitionLengthDialog *gui = units_popup->gui;
-       TransitionLengthText *length_text = gui->text;
-       EDLSession *session = gui->mwindow->edl->session;
        double length = gui->thread->new_length;
-       char text[BCSTRLEN];
        units_popup->units = id;
-       Units::totext(text, length, units_popup->units, session->sample_rate,
-                       session->frame_rate, session->frames_per_foot);
-       length_text->update(text);
+       gui->update_text(length);
        units_popup->set_text(get_text());
        return 1;
 }
 
 TransitionUnitsPopup::TransitionUnitsPopup(TransitionLengthDialog *gui, int x, int y)
- : BC_PopupMenu(x, y, 120, "", 1)
+ : BC_PopupMenu(x, y, xS(120), "", 1)
 {
        this->gui = gui;
        units = TIME_SECONDS;
@@ -145,10 +144,12 @@ void TransitionUnitsPopup::create_objects()
 TransitionLengthDialog::TransitionLengthDialog(MWindow *mwindow,
        TransitionLengthThread *thread, int x, int y)
  : BC_Window(_(PROGRAM_NAME ": Transition length"), x, y,
-               300, 100, -1, -1, 0, 0, 1)
+               TLW_W, TLW_H, -1, -1, 0, 0, 1)
 {
        this->mwindow = mwindow;
        this->thread = thread;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Transition Plugins");
 }
 
 TransitionLengthDialog::~TransitionLengthDialog()
@@ -159,9 +160,9 @@ TransitionLengthDialog::~TransitionLengthDialog()
 void TransitionLengthDialog::create_objects()
 {
        lock_window("TransitionLengthDialog::create_objects");
-       add_subwindow(units_popup = new TransitionUnitsPopup(this, 10, 10));
+       add_subwindow(units_popup = new TransitionUnitsPopup(this, xS(10), yS(10)));
        units_popup->create_objects();
-       text = new TransitionLengthText(mwindow, this, 160, 10);
+       text = new TransitionLengthText(mwindow, this, xS(160), yS(10));
        text->create_objects();
        text->set_precision(3);
        text->set_increment(0.1);
@@ -177,11 +178,22 @@ int TransitionLengthDialog::close_event()
        return 1;
 }
 
+void TransitionLengthDialog::update_text(double length)
+{
+       int units = units_popup->units;
+       EDLSession *session = mwindow->edl->session;
+       char string[BCSTRLEN];
+       Units::totext(string, length, units,
+               session->sample_rate, session->frame_rate,
+               session->frames_per_foot);
+       text->update(string);
+}
+
 
 TransitionLengthText::TransitionLengthText(MWindow *mwindow,
        TransitionLengthDialog *gui, int x, int y)
  : BC_TumbleTextBox(gui, (float)gui->thread->new_length,
-               0.f, 100.f, x, y, 100)
+               0.f, 100.f, x, y, xS(100))
 {
        this->mwindow = mwindow;
        this->gui = gui;
@@ -216,11 +228,7 @@ int TransitionLengthText::handle_up_down(int dir)
                break;
        }
        double length = gui->thread->new_length + delta * dir;
-       char text[BCSTRLEN];
-       Units::totext(text, length, units,
-               session->sample_rate, session->frame_rate,
-               session->frames_per_foot);
-       update(text);
+       gui->update_text(length);
        return gui->thread->update(length);
 }