intl tweaks and olafs de.po, drag label rework
[goodguy/history.git] / cinelerra-5.1 / cinelerra / timebar.C
index 3f0780b732d86180fd2a036b7cb335feda6f986f..7d0cc950b3ca9bc54409430d482ba53101628087 100644 (file)
@@ -19,6 +19,8 @@
  *
  */
 
+#include "awindow.h"
+#include "awindowgui.h"
 #include "bcsignals.h"
 #include "clip.h"
 #include "cplayback.h"
@@ -135,8 +137,10 @@ int LabelGUI::test_drag_label(int press)
                case TIMEBAR_DRAG_LABEL:
                        if( !press ) {
                                timebar->current_operation = TIMEBAR_NONE;
+                               timebar->drag_label = 0;
                                set_cursor(ARROW_CURSOR, 0, 0);
                                mwindow->undo->update_undo_after(_("drag label"), LOAD_TIMEBAR);
+                               mwindow->awindow->gui->async_update_assets(); // labels folder
                        }
                        break;
                }
@@ -150,6 +154,18 @@ int LabelGUI::handle_event()
        return 1;
 }
 
+void LabelGUI::update_value()
+{
+       EDL *edl = timebar->get_edl();
+       double start = edl->local_session->get_selectionstart(1);
+       double end = edl->local_session->get_selectionend(1);
+       int v = ( label->position >= start && end >= label->position ) ||
+           edl->equivalent(label->position, start) ||
+           edl->equivalent(label->position, end) ||
+           timebar->drag_label == this ? 1 : 0;
+       update(v);
+}
+
 
 InPointGUI::InPointGUI(MWindow *mwindow, TimeBar *timebar,
        int64_t pixel, double position)
@@ -280,23 +296,16 @@ void TimeBar::update_labels()
                                                gui->pixel = pixel;
                                                gui->reposition(0);
                                        }
-                                       else {
-                                               gui->draw_face(1,0);
-                                       }
+//                                     else {
+//                                             gui->draw_face(1,0);
+//                                     }
 
                                        labels.values[output]->position = current->position;
                                        labels.values[output]->set_tooltip(current->textstr);
                                        labels.values[output]->label = current;
                                }
 
-                               if( edl->local_session->get_selectionstart(1) <= current->position &&
-                                   edl->local_session->get_selectionend(1) >= current->position )
-                                       labels.values[output]->update(1);
-                               else
-                               if( labels.values[output]->get_value() )
-                                       labels.values[output]->update(0);
-
-                               output++;
+                               labels.values[output++]->update_value();
                        }
                }
        }
@@ -316,15 +325,7 @@ void TimeBar::update_highlights()
        EDL *edl = get_edl();
        if( !edl ) return;
        for( int i = 0; i < labels.total; i++ ) {
-               LabelGUI *label = labels.values[i];
-               if( edl->equivalent(label->position,
-                               edl->local_session->get_selectionstart(1)) ||
-                   edl->equivalent(label->position,
-                               edl->local_session->get_selectionend(1)) ) {
-                       if( !label->get_value() ) label->update(1);
-               }
-               else
-                       if( label->get_value() ) label->update(0);
+               labels.values[i]->update_value();
        }
 
        if( edl->equivalent(edl->local_session->get_inpoint(),
@@ -782,60 +783,61 @@ int TimeBar::cursor_motion_event()
        int result = 0;
        int redraw = 0;
 
-//printf("TimeBar::cursor_motion_event %d %p %d\n", __LINE__, this, current_operation);
-       switch( current_operation )
-       {
-               case TIMEBAR_DRAG_LEFT:
-               case TIMEBAR_DRAG_RIGHT:
-               case TIMEBAR_DRAG_CENTER:
-                       if( has_preview() )
-                               result = move_preview(redraw);
-                       break;
-
-               case TIMEBAR_DRAG_LABEL:
-                       if( drag_label ) {
-                               int pixel = get_relative_cursor_x();
-                               double position = pixel_to_position(pixel);
-                               if( drag_label->label )
-                                       drag_label->label->position = position;
-                               else if( drag_label == in_point ) {
-                                       EDL *edl = get_edl();
-                                       edl->local_session->set_inpoint(position);
-                               }
-                               else if( drag_label == out_point ) {
-                                       EDL *edl = get_edl();
-                                       edl->local_session->set_outpoint(position);
+       switch( current_operation ) {
+       case TIMEBAR_DRAG_LEFT:
+       case TIMEBAR_DRAG_RIGHT:
+       case TIMEBAR_DRAG_CENTER:
+               if( has_preview() )
+                       result = move_preview(redraw);
+               break;
+
+       case TIMEBAR_DRAG_LABEL:
+               if( drag_label ) {
+                       EDL *edl = get_edl();
+                       int pixel = get_relative_cursor_x();
+                       double position = pixel_to_position(pixel);
+                       if( drag_label->label )
+                               drag_label->label->position = position;
+                       else if( drag_label == in_point ) {
+                               if( out_point && edl->local_session->outpoint_valid() ) {
+                                       double out_pos = edl->local_session->get_outpoint();
+                                       if( position > out_pos ) {
+                                               edl->local_session->set_outpoint(position);
+                                               drag_label = out_point;
+                                               position = out_pos;
+                                       }
                                }
+                               edl->local_session->set_inpoint(position);
                        }
-                       highlighted = 1;
-                       redraw = 1; // fall thru
-
-               case TIMEBAR_DRAG:
-                       update_cursor();
-                       handle_mwindow_drag();
-                       result = 1;
-//printf("TimeBar::cursor_motion_event %d %d\n", __LINE__, current_operation);
-                       break;
-
-               default:
-                       if( cursor_above() ) {
-                               highlighted = 1;
-                               redraw = 1;
+                       else if( drag_label == out_point ) {
+                               if( in_point && edl->local_session->inpoint_valid() ) {
+                                       double in_pos = edl->local_session->get_inpoint();
+                                       if( position < in_pos ) {
+                                               edl->local_session->set_inpoint(position);
+                                               drag_label = in_point;
+                                               position = in_pos;
+                                       }
+                               }
+                               edl->local_session->set_outpoint(position);
                        }
+               }
+       // fall thru
+       case TIMEBAR_DRAG:
+               update_cursor();
+               handle_mwindow_drag();
+               result = 1;
+               break;
 
-//printf("TimeBar::cursor_motion_event 20\n");
-                       if( has_preview() )
-                               result = test_preview(0);
-//printf("TimeBar::cursor_motion_event 30\n");
-                       break;
+       default:
+               if( has_preview() )
+                       result = test_preview(0);
+               break;
        }
 
 
-//printf("TimeBar::cursor_motion_event %d %d\n", __LINE__, current_operation);
        if( redraw ) {
                update(1);
        }
-//printf("TimeBar::cursor_motion_event %d %p %d\n", __LINE__, this, current_operation);
 
        return result;
 }