#include <QWidget>
class QDomElement;
-class QGraphicsRectItem;
class Monitor;
class MonitorScene;
class KeyframeHelper;
class TimecodeDisplay;
+class OnMonitorRectItem;
+class OnMonitorPathItem;
+class QGraphicsRectItem;
+class DragValue;
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);
+ explicit GeometryWidget(Monitor *monitor, const 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(const QPoint &size);
+ void addParameter(const QDomElement &elem);
+ void importKeyframes(const QString &data, int maximum);
+ int currentPosition() const;
public slots:
/** @brief Sets up the rect and the geometry object.
* @param elem DomElement representing this effect parameter
* @param minframe In point of the clip
* @param maxframe Out point of the clip */
- void setupParam(const QDomElement elem, int minframe, int maxframe);
+ 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();
+ void slotResetNextKeyframes();
+ void slotResetPreviousKeyframes();
+ void slotUpdateRange(int inPoint, int outPoint);
private:
Ui::GeometryWidget_UI m_ui;
int m_outPoint;
bool m_isEffect;
MonitorScene *m_scene;
- QGraphicsRectItem *m_rect;
+ OnMonitorRectItem *m_rect;
+ OnMonitorPathItem *m_geomPath;
+ 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.
* @param seek (optional, default = true) Whether to seek timleine & project monitor to pos
* If pos = -1 (default) the value of m_timePos is used. */
void slotPositionChanged(int pos = -1, bool seek = true);
+ /** @brief Seeking requested from timeline. */
+ void slotRequestSeek(int pos);
/** @brief Updates settings after a keyframe was moved to @param pos. */
void slotKeyframeMoved(int pos);
/** @brief Adds a keyframe.
/** @brief Adds or deletes a keyframe depending on whether there is already a keyframe at the current position. */
void slotAddDeleteKeyframe();
- /** @brief Makes sure the monitor effect scene is only visible if the clip this geometry belongs to is visible.
- * @param renderPos Postion of the Monitor / Timeline cursor */
- void slotCheckMonitorPosition(int renderPos);
-
+ /** @brief Updates the Mlt::Geometry path object. */
+ void slotUpdatePath();
/** @brief Updates the Mlt::Geometry object. */
void slotUpdateGeometry();
/** @brief Updates the spinBoxes according to the rect. */
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();
/** @brief Moves the rect to the bottom frame border (y position = frame height - rect height). */
void slotMoveBottom();
+ /** @brief Enables/Disables syncing with the timeline according to @param sync. */
+ void slotSetSynchronize(bool sync);
+ void slotAdjustToFrameSize();
+ void slotFitToWidth();
+ void slotFitToHeight();
+ /** @brief Show / hide previous keyframe in monitor scene. */
+ void slotShowPreviousKeyFrame(bool show);
+ /** @brief Show / hide keyframe path in monitor scene. */
+ void slotShowPath(bool show);
+
signals:
void parameterChanged();
- void checkMonitorPosition(int);
void seekToPos(int);
+ void importClipKeyframes();
};
#endif