switch move/swap tracks, add mv trk shortcut, update msg
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / labels.C
index 933985e5297dd984b99c38de10da3515e360808a..ad3626bf13608f1c7b3bac7c217d6b66fa82d41c 100644 (file)
@@ -272,7 +272,9 @@ void Labels::copy_from(Labels *labels)
 
        for(Label *current = labels->first; current; current = NEXT)
        {
-               append(new Label(edl, this, current->position, current->textstr));
+               Label *new_label = new Label(edl, this, current->position, current->textstr);
+               new_label->orig_id = current->orig_id;
+               append(new_label);
        }
 }
 
@@ -460,6 +462,13 @@ Label* Labels::next_label(double position)
        return current;
 }
 
+Label* Labels::get_label(int id)
+{
+       Label *current = first;
+       while( current && current->orig_id != id ) current = NEXT;
+       return current;
+}
+
 int Labels::insert(double start, double length)
 {      // shift every label including the first one back
        Label *current;
@@ -478,37 +487,19 @@ int Labels::paste_silence(double start, double end)
        return 0;
 }
 
-int Labels::modify_handles(double oldposition,
-       double newposition,
-       int currentend,
-       int handle_mode,
-       int edit_labels)
+int Labels::modify_handles(double oldposition, double newposition, int currentend)
 {
-       if(edit_labels &&
-               handle_mode == MOVE_ALL_EDITS)
-       {
-               if(currentend == 0)          // left handle
-               {
-                       if(newposition < oldposition)
-                       {
-                               insert(oldposition, oldposition - newposition);    // shift all labels right
-                       }
-                       else
-                       {
-                               clear(oldposition, newposition);   // clear selection
-                       }
-               }
+       if( !currentend ) {     // left handle
+               if( newposition < oldposition )
+                       insert(oldposition, oldposition - newposition);    // shift all labels right
                else
-               {                            // right handle
-                       if(newposition < oldposition)
-                       {
-                               clear(newposition, oldposition);
-                       }
-                       else
-                       {
-                               insert(oldposition, newposition - oldposition);
-                       }
-               }
+                       clear(oldposition, newposition);   // clear selection
+       }
+       else {                  // right handle
+               if( newposition < oldposition )
+                       clear(newposition, oldposition);
+               else
+                       insert(oldposition, newposition - oldposition);
        }
        return 0;
 }
@@ -559,6 +550,8 @@ Label* Labels::label_of(double position)
 Label::Label()
  : ListItem<Label>()
 {
+       id = EDL::next_id();
+       orig_id = id;
 }
 
 Label::Label(EDL *edl, Labels *labels, double position, const char *textstr)
@@ -568,6 +561,8 @@ Label::Label(EDL *edl, Labels *labels, double position, const char *textstr)
        this->labels = labels;
        this->position = position;
        strcpy(this->textstr, textstr ? textstr : "");
+       id = EDL::next_id();
+       orig_id = id;
 }