add Autosave continuous backups by Andras Reuss and Andrew-R
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / labels.C
index 1435a985c8d88abc115a12d245387c1ec55f29cc..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,22 +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_EDGE ) {
-               if( !currentend ) {     // left handle
-                       if( newposition < oldposition )
-                               insert(oldposition, oldposition - newposition);    // shift all labels right
-                       else
-                               clear(oldposition, newposition);   // clear selection
-               }
-               else {                  // right handle
-                       if( newposition < oldposition )
-                               clear(newposition, oldposition);
-                       else
-                               insert(oldposition, newposition - oldposition);
-               }
+       if( !currentend ) {     // left handle
+               if( newposition < oldposition )
+                       insert(oldposition, oldposition - newposition);    // shift all labels right
+               else
+                       clear(oldposition, newposition);   // clear selection
+       }
+       else {                  // right handle
+               if( newposition < oldposition )
+                       clear(newposition, oldposition);
+               else
+                       insert(oldposition, newposition - oldposition);
        }
        return 0;
 }
@@ -544,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)
@@ -553,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;
 }