]> git.sesse.net Git - kdenlive/commitdiff
Minor improvements to keyframe widget, allow resetting keyframes
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 30 Oct 2012 14:25:33 +0000 (15:25 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 30 Oct 2012 14:25:33 +0000 (15:25 +0100)
14 files changed:
src/customtrackview.cpp
src/customtrackview.h
src/effectstack/parametercontainer.cpp
src/effectstack/parametercontainer.h
src/effectstackedit.cpp
src/effectstackedit.h
src/geometrywidget.cpp
src/geometrywidget.h
src/mainwindow.cpp
src/mainwindow.h
src/transitionsettings.cpp
src/transitionsettings.h
src/widgets/geometrywidget_ui.ui
src/widgets/importkeyframesdialog_ui.ui

index 3805c6eda45122602a71bce8d944b66fe8f4d47d..a259b787ae6200ec905e0d7abf107a48d5937475 100644 (file)
@@ -1024,7 +1024,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
        if (selected == false) {
            m_dragItem = NULL;
        }
-        groupSelectedItems();
+        groupSelectedItems(QList <QGraphicsItem*>(), false, false, true);
        if (m_dragItem) { 
            ClipItem *clip = static_cast <ClipItem *>(m_dragItem);
            updateClipTypeActions(dragGroup == NULL ? clip : NULL);
@@ -7650,7 +7650,7 @@ void CustomTrackView::slotImportClipKeyframes(GRAPHICSRECTITEM type)
            result.append(';');
        }
     }
-    emit importKeyframes(type, result);
+    emit importKeyframes(type, result, ui.limit_keyframes->isChecked() ? ui.max_keyframes->value() : -1);
     delete d;
 }
 
index f27f9710d489ee7a850bf5f1e3d6bcdbd30c49e8..344a01a25565a91df13512c9eb0a641fc19978b9 100644 (file)
@@ -530,7 +530,7 @@ signals:
     /** @brief Cursor position changed, repaint ruler.*/
     void updateRuler();
     /** @brief Send data from a clip to be imported as keyframes for effect / transition.*/
-    void importKeyframes(GRAPHICSRECTITEM type, const QString&);
+    void importKeyframes(GRAPHICSRECTITEM type, const QString&, int maximum);
 };
 
 #endif
index b3820c6f1a469413243b2591e9f2d4b6fc4566ca..89256436f738cd21979a075f527a73a23a04a2bd 100644 (file)
@@ -854,13 +854,13 @@ bool ParameterContainer::needsMonitorEffectScene() const
     return m_needsMonitorEffectScene;
 }
 
-void ParameterContainer::setKeyframes(const QString &data)
+void ParameterContainer::setKeyframes(const QString &data, int maximum)
 {
     if (!m_geometryWidget) {
        kDebug()<<" / / NO GEOMETRY WIDGET FOUND FOR IMPORTING DATA";
        return;
     }
-    m_geometryWidget->importKeyframes(data);
+    m_geometryWidget->importKeyframes(data, maximum);
     
 }
 
index 92b8dcb508c11fd124dd6183b3df384b6d31088e..86bc2cd0bef12ecdca0d3049e4a3189161379f13 100644 (file)
@@ -67,7 +67,7 @@ public:
     /** @brief Returns true of this effect requires an on monitor adjustable effect scene. */
     bool needsMonitorEffectScene() const;
     /** @brief Set keyframes for this param. */
-    void setKeyframes(const QString &data);
+    void setKeyframes(const QString &data, int maximum);
 
 private slots:
     void slotCollectAllParameters();
index 10899110d1a13581a38596bc67b111006848b653..95b8d37be53e6aef9e3d77216185235b9a941889 100644 (file)
@@ -184,9 +184,9 @@ bool EffectStackEdit::needsMonitorEffectScene() const
     return m_paramWidget->needsMonitorEffectScene();
 }
 
-void EffectStackEdit::setKeyframes(const QString &data)
+void EffectStackEdit::setKeyframes(const QString &data, int maximum)
 {
     if (!m_paramWidget) return;
-    m_paramWidget->setKeyframes(data);
+    m_paramWidget->setKeyframes(data, maximum);
 }
 
index f760222242c85ca8c2a185b5ed5651ac434632e8..499fe8edbc798d4cace6bce92a53b5626a543a6b 100644 (file)
@@ -57,7 +57,7 @@ public:
     /** @brief Returns true if this transition requires an on monitor scene. */
     bool needsMonitorEffectScene() const;
     /** @brief Set keyframes for this transition. */
-    void setKeyframes(const QString &data);
+    void setKeyframes(const QString &data, int maximum);
 
 private:
     Monitor *m_monitor;
index fcbb90a660ccf8f50e9b913182c17428601adfe5..27c0f8eb466124e3067db387f8061d34f81abfa9 100644 (file)
@@ -65,7 +65,7 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
         Setup of timeline and keyframe controls
     */
 
-    ((QGridLayout *)(m_ui.widgetTimeWrapper->layout()))->addWidget(m_timePos, 1, 6);
+    ((QGridLayout *)(m_ui.widgetTimeWrapper->layout()))->addWidget(m_timePos, 1, 5);
 
     QVBoxLayout *layout = new QVBoxLayout(m_ui.frameTimeline);
     m_timeline = new KeyframeHelper(m_ui.frameTimeline);
@@ -81,15 +81,10 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
     m_ui.buttonNext->setIcon(KIcon("media-skip-forward"));
     m_ui.buttonNext->setToolTip(i18n("Go to next keyframe"));
     m_ui.buttonNext->setIconSize(iconSize);
-    m_ui.buttonAddDelete->setIcon(KIcon("document-new"));
+    m_ui.buttonAddDelete->setIcon(KIcon("list-add"));
     m_ui.buttonAddDelete->setToolTip(i18n("Add keyframe"));
     m_ui.buttonAddDelete->setIconSize(iconSize);
 
-    m_ui.buttonSync->setIcon(KIcon("insert-link"));
-    m_ui.buttonSync->setToolTip(i18n("Synchronize with timeline cursor"));
-    m_ui.buttonSync->setChecked(KdenliveSettings::transitionfollowcursor());
-    m_ui.buttonSync->setIconSize(iconSize);
-
     connect(m_timeline, SIGNAL(requestSeek(int)), this, SLOT(slotRequestSeek(int)));
     connect(m_timeline, SIGNAL(keyframeMoved(int)),   this, SLOT(slotKeyframeMoved(int)));
     connect(m_timeline, SIGNAL(addKeyframe(int)),     this, SLOT(slotAddKeyframe(int)));
@@ -98,7 +93,6 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
     connect(m_ui.buttonPrevious,  SIGNAL(clicked()), this, SLOT(slotPreviousKeyframe()));
     connect(m_ui.buttonNext,      SIGNAL(clicked()), this, SLOT(slotNextKeyframe()));
     connect(m_ui.buttonAddDelete, SIGNAL(clicked()), this, SLOT(slotAddDeleteKeyframe()));
-    connect(m_ui.buttonSync,      SIGNAL(toggled(bool)), this, SLOT(slotSetSynchronize(bool)));
 
     m_spinX = new DragValue(i18nc("x axis position", "X"), 0, 0, -99000, 99000, -1, QString(), false, this);
     m_ui.horizontalLayout->addWidget(m_spinX, 0, 0);
@@ -115,39 +109,44 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
     m_ui.horizontalLayout->setColumnStretch(4, 10);
 
     QMenu *menu = new QMenu(this);
-    QAction *adjustSize = new QAction(i18n("Adjust to original size"), this);
+    QAction *adjustSize = new QAction(KIcon("zoom-fit-best"), i18n("Adjust to original size"), this);
     connect(adjustSize, SIGNAL(triggered()), this, SLOT(slotAdjustToFrameSize()));
-    menu->addAction(adjustSize);
-    QAction *fitToWidth = new QAction(i18n("Fit to width"), this);
+    QAction *fitToWidth = new QAction(KIcon("zoom-fit-width"), i18n("Fit to width"), this);
     connect(fitToWidth, SIGNAL(triggered()), this, SLOT(slotFitToWidth()));
-    menu->addAction(fitToWidth);
-    QAction *fitToHeight = new QAction(i18n("Fit to height"), this);
+    QAction *fitToHeight = new QAction(KIcon("zoom-fit-height"), i18n("Fit to height"), this);
     connect(fitToHeight, SIGNAL(triggered()), this, SLOT(slotFitToHeight()));
-    menu->addAction(fitToHeight);
-    menu->addSeparator();
+
     QAction *importKeyframes = new QAction(i18n("Import keyframes from clip"), this);
     connect(importKeyframes, SIGNAL(triggered()), this, SIGNAL(importClipKeyframes()));
     menu->addAction(importKeyframes);
+    QAction *resetKeyframes = new QAction(i18n("Reset keyframes"), this);
+    connect(resetKeyframes, SIGNAL(triggered()), this, SLOT(slotResetKeyframes()));
+    menu->addAction(resetKeyframes);
     menu->addSeparator();
+
+    QAction *syncTimeline = new QAction(KIcon("insert-link"), i18n("Synchronize with timeline cursor"), this);
+    syncTimeline->setCheckable(true);
+    syncTimeline->setChecked(KdenliveSettings::transitionfollowcursor());
+    connect(syncTimeline, SIGNAL(toggled(bool)), this, SLOT(slotSetSynchronize(bool)));
+    menu->addAction(syncTimeline);
+
     QAction *alignleft = new QAction(KIcon("kdenlive-align-left"), i18n("Align left"), this);
     connect(alignleft, SIGNAL(triggered()), this, SLOT(slotMoveLeft()));
-    menu->addAction(alignleft);
     QAction *alignhcenter = new QAction(KIcon("kdenlive-align-hor"), i18n("Center horizontally"), this);
     connect(alignhcenter, SIGNAL(triggered()), this, SLOT(slotCenterH()));
-    menu->addAction(alignhcenter);
     QAction *alignright = new QAction(KIcon("kdenlive-align-right"), i18n("Align right"), this);
     connect(alignright, SIGNAL(triggered()), this, SLOT(slotMoveRight()));
-    menu->addAction(alignright);
     QAction *aligntop = new QAction(KIcon("kdenlive-align-top"), i18n("Align top"), this);
     connect(aligntop, SIGNAL(triggered()), this, SLOT(slotMoveTop()));
-    menu->addAction(aligntop);
     QAction *alignvcenter = new QAction(KIcon("kdenlive-align-vert"), i18n("Center vertically"), this);
     connect(alignvcenter, SIGNAL(triggered()), this, SLOT(slotCenterV()));
-    menu->addAction(alignvcenter);
     QAction *alignbottom = new QAction(KIcon("kdenlive-align-bottom"), i18n("Align bottom"), this);
     connect(alignbottom, SIGNAL(triggered()), this, SLOT(slotMoveBottom()));
-    menu->addAction(alignbottom);
+    
     m_ui.buttonOptions->setMenu(menu);
+    m_ui.buttonOptions->setIcon(KIcon("configure"));
+    m_ui.buttonOptions->setToolTip(i18n("Options"));
+    m_ui.buttonOptions->setIconSize(iconSize);
 
     QHBoxLayout *alignLayout = new QHBoxLayout;
     alignLayout->setSpacing(0);
@@ -180,6 +179,21 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
     alignButton->setDefaultAction(alignbottom);
     alignButton->setAutoRaise(true);
     alignLayout->addWidget(alignButton);
+
+    alignButton = new QToolButton;
+    alignButton->setDefaultAction(adjustSize);
+    alignButton->setAutoRaise(true);
+    alignLayout->addWidget(alignButton);
+
+    alignButton = new QToolButton;
+    alignButton->setDefaultAction(fitToWidth);
+    alignButton->setAutoRaise(true);
+    alignLayout->addWidget(alignButton);
+    
+    alignButton = new QToolButton;
+    alignButton->setDefaultAction(fitToHeight);
+    alignButton->setAutoRaise(true);
+    alignLayout->addWidget(alignButton);
     alignLayout->addStretch(10);
 
     m_ui.horizontalLayout->addLayout(alignLayout, 1, 0, 1, 4);
@@ -238,7 +252,7 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
 
 GeometryWidget::~GeometryWidget()
 {
-    m_scene->setEnabled(true);
+    m_scene->setEnabled(false);
     delete m_timePos;
     delete m_timeline;
     delete m_spinX;
@@ -246,10 +260,14 @@ GeometryWidget::~GeometryWidget()
     delete m_spinWidth;
     delete m_spinHeight;
     delete m_opacity;
-    m_scene->removeItem(m_rect);
-    m_scene->removeItem(m_geomPath);
-    if (m_rect) delete m_rect;
-    if (m_geomPath) delete m_geomPath;
+    if (m_rect) {
+       m_scene->removeItem(m_rect);
+       delete m_rect;
+    }
+    if (m_geomPath) {
+       m_scene->removeItem(m_geomPath);
+       delete m_geomPath;
+    }
     if (m_previous) delete m_previous;
     delete m_geometry;
     m_extraGeometryNames.clear();
@@ -308,7 +326,6 @@ void GeometryWidget::setupParam(const QDomElement elem, int minframe, int maxfra
     } else {
         m_ui.widgetTimeWrapper->setHidden(false);
         m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint);
-        m_timeline->update();
         m_timePos->setRange(0, m_outPoint - m_inPoint);
     }
 
@@ -387,14 +404,14 @@ void GeometryWidget::slotPositionChanged(int pos, bool seek)
         m_rect->setEnabled(false);
         m_scene->setEnabled(false);
         m_ui.widgetGeometry->setEnabled(false);
-        m_ui.buttonAddDelete->setIcon(KIcon("document-new"));
+        m_ui.buttonAddDelete->setIcon(KIcon("list-add"));
         m_ui.buttonAddDelete->setToolTip(i18n("Add keyframe"));
     } else {
         // keyframe
         m_rect->setEnabled(true);
         m_scene->setEnabled(true);
         m_ui.widgetGeometry->setEnabled(true);
-        m_ui.buttonAddDelete->setIcon(KIcon("edit-delete"));
+        m_ui.buttonAddDelete->setIcon(KIcon("list-remove"));
         m_ui.buttonAddDelete->setToolTip(i18n("Delete keyframe"));
     }
     
@@ -506,6 +523,7 @@ void GeometryWidget::slotDeleteKeyframe(int pos)
     }
 
     m_timeline->update();
+    if (m_geomPath) m_geomPath->setPoints(m_geometry);
     slotPositionChanged(pos, false);
     emit parameterChanged();
 }
@@ -769,20 +787,59 @@ void GeometryWidget::slotFitToHeight()
     updateMonitorGeometry();
 }
 
-void GeometryWidget::importKeyframes(const QString &data)
+void GeometryWidget::slotResetKeyframes()
+{
+    // Delete existing keyframes
+    Mlt::GeometryItem item;
+    while (!m_geometry->next_key(&item, 1)) {
+       m_geometry->remove(item.frame());
+    }
+
+    // Create neutral first keyframe
+    item.frame(0);
+    item.x(0);
+    item.y(0);
+    item.w(m_monitor->render->frameRenderWidth());
+    item.h(m_monitor->render->renderHeight());
+    item.mix(100);
+    m_geometry->insert(item);
+    m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint);
+    if (m_geomPath) {
+       m_scene->removeItem(m_geomPath);
+       m_geomPath->setPoints(m_geometry);
+       m_scene->addItem(m_geomPath);
+    }
+    slotPositionChanged(-1, false);
+    emit parameterChanged();
+    
+}
+
+void GeometryWidget::importKeyframes(const QString &data, int maximum)
 {
     QStringList list = data.split(';', QString::SkipEmptyParts);
+    if (list.isEmpty()) return;
     QPoint screenSize = m_frameSize;
     if (screenSize == QPoint() || screenSize.x() == 0 || screenSize.y() == 0) {
         screenSize = QPoint(m_monitor->render->frameRenderWidth(), m_monitor->render->renderHeight());
     }
-    for (int i = 0; i < list.count(); i++) {
-       Mlt::GeometryItem item;
+    // Clear existing keyframes
+    Mlt::GeometryItem item;
+    
+    while (!m_geometry->next_key(&item, 0)) {
+       m_geometry->remove(item.frame());
+    }
+    
+    int offset = 1;
+    if (maximum > 0 && list.count() > maximum) {
+       offset = list.count() / maximum;
+    }
+    for (int i = 0; i < list.count(); i += offset) {
        QString geom = list.at(i);
        if (geom.contains('=')) {
            item.frame(geom.section('=', 0, 0).toInt());
+           geom = geom.section('=', 1);
        }
-       geom = geom.section('=', 1);
+       else item.frame(0);
        if (geom.contains('/')) {
            item.x(geom.section('/', 0, 0).toDouble());
            item.y(geom.section('/', 1, 1).section(':', 0, 0).toDouble());
@@ -803,7 +860,11 @@ void GeometryWidget::importKeyframes(const QString &data)
        item.mix(100);
        m_geometry->insert(item);
     }
+    m_timeline->setKeyGeometry(m_geometry, m_outPoint - m_inPoint);
+    if (m_geomPath) m_geomPath->setPoints(m_geometry);
+    slotPositionChanged(-1, false);
     emit parameterChanged();
 }
 
+
 #include "geometrywidget.moc"
index 0ae57f737468a22af3c024992cf899bdf60d0db3..cdd01cd6427a3cfe482ac7f06aeab6d6d52fcc8e 100644 (file)
@@ -58,7 +58,7 @@ public:
     /** @brief Sets the size of the original clip. */
     void setFrameSize(QPoint size);
     void addParameter(const QDomElement elem);
-    void importKeyframes(const QString &data);
+    void importKeyframes(const QString &data, int maximum);
 
 public slots:
     /** @brief Sets up the rect and the geometry object.
@@ -68,6 +68,7 @@ public slots:
     void setupParam(const QDomElement elem, int minframe, int maxframe);
     /** @brief Updates position of the local timeline to @param relTimelinePos.  */
     void slotSyncPosition(int relTimelinePos);
+    void slotResetKeyframes();
 
 private:
     Ui::GeometryWidget_UI m_ui;
index 9139b6d2ec72b6ef2b6460a0131c4152f61b025a..82490f7f4f9ab9013011b8307f0998ff87b4f4cf 100644 (file)
@@ -2568,7 +2568,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(trackView, SIGNAL(mousePosition(int)), this, SLOT(slotUpdateMousePosition(int)));
     connect(trackView->projectView(), SIGNAL(forceClipProcessing(const QString &)), m_projectList, SLOT(slotForceProcessing(const QString &)));
 
-    connect(trackView->projectView(), SIGNAL(importKeyframes(GRAPHICSRECTITEM, const QString&)), this, SLOT(slotProcessImportKeyframes(GRAPHICSRECTITEM, const QString&)));
+    connect(trackView->projectView(), SIGNAL(importKeyframes(GRAPHICSRECTITEM, const QString&, int)), this, SLOT(slotProcessImportKeyframes(GRAPHICSRECTITEM, const QString&, int)));
     
     connect(m_projectMonitor, SIGNAL(renderPosition(int)), trackView, SLOT(moveCursorPos(int)));
     connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), trackView, SLOT(slotSetZone(QPoint)));
@@ -4573,14 +4573,14 @@ void MainWindow::slotSaveTimelineClip()
     }
 }
 
-void MainWindow::slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data)
+void MainWindow::slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data, int maximum)
 {
     if (type == AVWIDGET) {
        // This data should be sent to the effect stack
     }
     else if (type == TRANSITIONWIDGET) {
        // This data should be sent to the transition stack
-       m_transitionConfig->setKeyframes(data);
+       m_transitionConfig->setKeyframes(data, maximum);
     }
     else {
        // Error
index 4833d77b85657129fd46b99aeec88e3fe5591cf7..9efa6e4c741c8d1c26164ce2295559cec8ac8722 100644 (file)
@@ -567,7 +567,7 @@ private slots:
     /** @brief Save current timeline clip as mlt playlist. */
     void slotSaveTimelineClip();
     /** @brief Process keyframe data sent from a clip to effect / transition stack. */
-    void slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data);
+    void slotProcessImportKeyframes(GRAPHICSRECTITEM type, const QString& data, int maximum);
 
 signals:
     Q_SCRIPTABLE void abortRenderJob(const QString &url);
index 312cf60d73cf6d7d6d744dc463e48fdaeb201c7c..996d8a8948599431fcb3922bfa09d003123c8a61 100644 (file)
@@ -246,9 +246,9 @@ void TransitionSettings::slotCheckMonitorPosition(int renderPos)
     }
 }
 
-void TransitionSettings::setKeyframes(const QString data)
+void TransitionSettings::setKeyframes(const QString data, int maximum)
 {
-    m_effectEdit->setKeyframes(data);
+    m_effectEdit->setKeyframes(data, maximum);
 }
 
 #include "transitionsettings.moc"
index 46e6eef077a2ca8a4510498ade8c0bdbced2e61c..efe0188e1e53031e1ce800158f5c6b6369042573 100644 (file)
@@ -37,7 +37,7 @@ public:
     void raiseWindow(QWidget*);
     void updateProjectFormat(MltVideoProfile profile, Timecode t, const QList <TrackInfo> info);
     void updateTimecodeFormat();
-    void setKeyframes(const QString data);
+    void setKeyframes(const QString data, int maximum);
 
 private:
     EffectStackEdit *m_effectEdit;
index b83e2f562f699fc763e33f728b717646ab6baea8..d412e48b2d3a6078e97056f31315a855d543432e 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>129</width>
-    <height>85</height>
+    <width>312</width>
+    <height>183</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout_3">
       <property name="margin">
        <number>0</number>
       </property>
-      <item row="1" column="0">
-       <widget class="QToolButton" name="buttonPrevious">
-        <property name="text">
-         <string>...</string>
+      <item row="1" column="3">
+       <widget class="QToolButton" name="buttonOptions">
+        <property name="popupMode">
+         <enum>QToolButton::InstantPopup</enum>
         </property>
         <property name="autoRaise">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="2">
-       <widget class="QToolButton" name="buttonNext">
+      <item row="1" column="4">
+       <spacer name="horizontalSpacer_3">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="1">
+       <widget class="QToolButton" name="buttonAddDelete">
         <property name="text">
          <string>...</string>
         </property>
         </property>
        </widget>
       </item>
-      <item row="1" column="1">
-       <widget class="QToolButton" name="buttonAddDelete">
+      <item row="1" column="5">
+       <widget class="QFrame" name="frameTimePos"/>
+      </item>
+      <item row="1" column="0">
+       <widget class="QToolButton" name="buttonPrevious">
         <property name="text">
          <string>...</string>
         </property>
         </property>
        </widget>
       </item>
-      <item row="1" column="5">
-       <spacer name="horizontalSpacer_3">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
+      <item row="1" column="2">
+       <widget class="QToolButton" name="buttonNext">
+        <property name="text">
+         <string>...</string>
         </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>40</width>
-          <height>20</height>
-         </size>
+        <property name="autoRaise">
+         <bool>true</bool>
         </property>
-       </spacer>
+       </widget>
       </item>
-      <item row="0" column="0" colspan="7">
+      <item row="0" column="0" colspan="6">
        <widget class="QFrame" name="frameTimeline">
         <property name="sizePolicy">
          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
         </property>
        </widget>
       </item>
-      <item row="1" column="6">
-       <widget class="QFrame" name="frameTimePos"/>
-      </item>
-      <item row="1" column="4">
-       <widget class="QToolButton" name="buttonSync">
-        <property name="text">
-         <string>...</string>
-        </property>
-        <property name="checkable">
-         <bool>true</bool>
-        </property>
-        <property name="autoRaise">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="3">
-       <widget class="Line" name="line_3">
-        <property name="frameShadow">
-         <enum>QFrame::Raised</enum>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Vertical</enum>
-        </property>
-       </widget>
-      </item>
      </layout>
     </widget>
    </item>
         <property name="leftMargin">
          <number>0</number>
         </property>
-        <item>
-         <widget class="QToolButton" name="buttonOptions">
-          <property name="text">
-           <string>Options</string>
-          </property>
-          <property name="popupMode">
-           <enum>QToolButton::InstantPopup</enum>
-          </property>
-          <property name="autoRaise">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
        </layout>
       </item>
      </layout>
   <tabstop>buttonPrevious</tabstop>
   <tabstop>buttonAddDelete</tabstop>
   <tabstop>buttonNext</tabstop>
-  <tabstop>buttonSync</tabstop>
  </tabstops>
  <resources/>
  <connections/>
index dd057f8ff683d30579f5ac994a96964f4e57af8a..00413bfbec449d89591515efa735791a89aa43c9 100644 (file)
@@ -6,20 +6,16 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>255</width>
-    <height>115</height>
+    <width>248</width>
+    <height>163</height>
    </rect>
   </property>
   <property name="windowTitle">
-   <string>Scene Cut</string>
+   <string>Import Keyframes</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Data to import</string>
-     </property>
-    </widget>
+   <item row="4" column="0" colspan="2">
+    <widget class="QLabel" name="keyframe_info"/>
    </item>
    <item row="0" column="1">
     <widget class="QComboBox" name="data_list">
      </property>
     </widget>
    </item>
+   <item row="5" column="0" rowspan="2" colspan="2">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>218</width>
+       <height>2</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="3" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QCheckBox" name="limit_keyframes">
+       <property name="text">
+        <string>Limit keyframes number</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="max_keyframes">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="minimum">
+        <number>1</number>
+       </property>
+       <property name="maximum">
+        <number>1000</number>
+       </property>
+       <property name="value">
+        <number>10</number>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="QCheckBox" name="import_size">
+     <property name="text">
+      <string>Size</string>
+     </property>
+    </widget>
+   </item>
    <item row="1" column="0" colspan="2">
     <widget class="QCheckBox" name="import_position">
      <property name="text">
      </property>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2">
-    <widget class="QCheckBox" name="import_size">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
      <property name="text">
-      <string>Size</string>
+      <string>Data to import</string>
      </property>
     </widget>
    </item>
-   <item row="3" column="0" colspan="2">
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>218</width>
-       <height>2</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="4" column="1">
+   <item row="7" column="0" colspan="2">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>limit_keyframes</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>max_keyframes</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>86</x>
+     <y>94</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>207</x>
+     <y>94</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>