]> git.sesse.net Git - kdenlive/blobdiff - src/geometrywidget.h
Do not hide render profile list when there is only one item:
[kdenlive] / src / geometrywidget.h
index 378501c2cde7c0dc97e37444836fcd574391fa36..65681b31f2060be2616d4207df3a5d53791a7dae 100644 (file)
 #include <mlt++/Mlt.h>
 
 #include <QWidget>
-#include <QGraphicsRectItem>
-#include <QPainter>
 
 class QDomElement;
-class QGraphicsRectItem;
 class Monitor;
 class MonitorScene;
 class KeyframeHelper;
 class TimecodeDisplay;
-
-
-class QGraphicsRectHandleItem: public QGraphicsRectItem
-{
-public:
-
-    QGraphicsRectHandleItem(const QRectF & rect, QGraphicsItem * parent = 0):
-            QGraphicsRectItem(rect, parent),
-            drawHandles(false) {
-    }
-
-    bool drawHandles;
-
-
-    virtual void paint(QPainter *painter,
-                       const QStyleOptionGraphicsItem * option,
-                       QWidget* widget = 0) {
-        QGraphicsRectItem::paint(painter, option, widget);
-        if (!drawHandles) return;
-        double handleSize = 6 / painter->matrix().m11();
-        painter->fillRect(0, 0, handleSize, handleSize, QColor(Qt::yellow));
-        painter->fillRect(option->rect.width() - handleSize, 0, handleSize, handleSize, QColor(Qt::yellow));
-        painter->fillRect(option->rect.width() - handleSize, option->rect.height() - handleSize, handleSize, handleSize, QColor(Qt::yellow));
-        painter->fillRect(0, option->rect.height() - handleSize, handleSize, handleSize, QColor(Qt::yellow));
-    }
-};
+class OnMonitorRectItem;
+class QGraphicsRectItem;
+class DragValue;
 
 class GeometryWidget : public QWidget
 {
@@ -68,14 +42,22 @@ class GeometryWidget : public QWidget
 public:
     /** @brief Sets up the UI and connects it.
     * @param monitor Project monitor
+    * @param timecode Timecode needed by timecode display widget
     * @param clipPos Position of the clip in timeline
+    * @param isEffect true if used in an effect, false if used in a transition
+    * @param showRotation Should we show or hide the rotation sliders
     * @param parent (optional) Parent widget */
-    GeometryWidget(Monitor *monitor, Timecode timecode, int clipPos, bool isEffect, QWidget* parent = 0);
+    GeometryWidget(Monitor *monitor, Timecode timecode, int clipPos, bool isEffect, bool showRotation, QWidget* parent = 0);
     virtual ~GeometryWidget();
     /** @brief Gets the geometry as a serialized string. */
     QString getValue() const;
+    QString getExtraValue(const QString &name) const;
     /** @brief Updates the timecode display according to settings (frame number or hh:mm:ss:ff) */
     void updateTimecodeFormat();
+    /** @brief Sets the size of the original clip. */
+    void setFrameSize(QPoint size);
+
+    void addParameter(const QDomElement elem);
 
 public slots:
     /** @brief Sets up the rect and the geometry object.
@@ -85,6 +67,8 @@ 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);
+    /** @brief Switches from normal monitor to monitor scene according to @param show. */
+    void slotShowScene(bool show = true);
 
 private:
     Ui::GeometryWidget_UI m_ui;
@@ -98,11 +82,28 @@ private:
     int m_outPoint;
     bool m_isEffect;
     MonitorScene *m_scene;
-    QGraphicsRectHandleItem *m_rect;
+    OnMonitorRectItem *m_rect;
+    QGraphicsRectItem *m_previous;
     KeyframeHelper *m_timeline;
     /** Stores the different settings in the MLT geometry format. */
     Mlt::Geometry *m_geometry;
+    QStringList m_extraGeometryNames;
+    QStringList m_extraFactors;
+    QList <Mlt::Geometry *>m_extraGeometries;
     bool m_showScene;
+    DragValue *m_spinX;
+    DragValue *m_spinY;
+    DragValue *m_spinWidth;
+    DragValue *m_spinHeight;
+    DragValue *m_spinSize;
+    DragValue *m_opacity;
+    DragValue *m_rotateX;
+    DragValue *m_rotateY;
+    DragValue *m_rotateZ;
+    QPoint m_frameSize;
+    bool m_showRotation;
+    /** @brief Update monitor rect with current width / height values. */
+    void updateMonitorGeometry();
 
 private slots:
     /** @brief Updates controls according to position.
@@ -137,19 +138,19 @@ private slots:
     void slotUpdateProperties();
 
     /** @brief Sets the rect's x position to @param value. */
-    void slotSetX(int value);
+    void slotSetX(double value);
     /** @brief Sets the rect's y position to @param value. */
-    void slotSetY(int value);
+    void slotSetY(double value);
     /** @brief Sets the rect's width to @param value. */
-    void slotSetWidth(int value);
+    void slotSetWidth(double value);
     /** @brief Sets the rect's height to @param value. */
-    void slotSetHeight(int value);
+    void slotSetHeight(double value);
 
     /** @brief Resizes the rect by @param value (in perecent) compared to the frame size. */
-    void slotResize(int value);
+    void slotResize(double value);
 
     /** @brief Sets the opacity to @param value. */
-    void slotSetOpacity(int value);
+    void slotSetOpacity(double value);
 
     /** @brief Moves the rect to the left frame border (x position = 0). */
     void slotMoveLeft();
@@ -166,8 +167,11 @@ private slots:
 
     /** @brief Enables/Disables syncing with the timeline according to @param sync. */
     void slotSetSynchronize(bool sync);
-    /** @brief Switches from normal monitor to monitor scene according to @param show. */
-    void slotShowScene(bool show = true);
+    void slotAdjustToFrameSize();
+    void slotFitToWidth();
+    void slotFitToHeight();
+    /** @brief Show / hide previous keyframe in monitor scene. */
+    void slotShowPreviousKeyFrame(bool show);
 
 signals:
     void parameterChanged();