#define TITLEWIDGET_H
-#include <QDialog>
-
-#include <QMap>
-
#include "ui_titlewidget_ui.h"
#include "titledocument.h"
#include "renderer.h"
#include "graphicsscenerectmove.h"
+#include "unicodedialog.h"
+#include <QMap>
-class Transform {
+class Transform
+{
public:
Transform() {
scalex = 1.0;
double rotate;
};
-class TitleWidget : public QDialog , public Ui::TitleWidget_UI {
+class TitleWidget : public QDialog , public Ui::TitleWidget_UI
+{
Q_OBJECT
+
public:
+ /** \brief Constructor
+ * \param projectPath Path to use when user requests loading or saving of titles as .kdenlivetitle documents */
TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent = 0);
+ virtual ~TitleWidget();
QDomDocument xml();
void setXml(QDomDocument doc);
+ /** \brief Find first available filename of the form titleXXX.png in projectUrl + "/titles/" directory
+ * \param projectUrl Url to directory of project.
+ * \returns A list, with the name in the form of "/path/to/titles/titleXXX" as the first element, the extension
+ * ".png" as the second element.
+ *
+ * The path "/titles/" is appended to projectUrl to locate the actual directory that contains the title pngs. */
+ static QStringList getFreeTitleInfo(const KUrl &projectUrl);
+
+ /** \brief Build a filename from a projectUrl and a titleName
+ * \param projectUrl Url to directory of project.
+ * \param titleName Name of title, on the form "titleXXX"
+ *
+ * The path "/titles/" is appended to projectUrl to build the directoryname, then .pgn is appended to
+ * get the filename. It is not checked that the title png actually exists, only the name is build and
+ * returned. */
+ static QString getTitleResourceFromName(const KUrl &projectUrl, const QString &titleName);
+
+ /** \brief returns the size of the rendered pixmap
+ *
+ */
+ const QRect renderedRect();
+
protected:
virtual void resizeEvent(QResizeEvent * event);
private:
- QGraphicsPolygonItem *startViewport, *endViewport;
+ QGraphicsPolygonItem *m_startViewport, *m_endViewport;
GraphicsSceneRectMove *m_scene;
void initViewports();
- QMap<QGraphicsItem*, Transform > transformations;
+ QMap<QGraphicsItem*, Transform > m_transformations;
TitleDocument m_titledocument;
QGraphicsRectItem *m_frameBorder;
QGraphicsPixmapItem *m_frameImage;
QAction *m_buttonCursor;
QAction *m_buttonSave;
QAction *m_buttonLoad;
+ /** \brief Dialog for entering unicode in text fields */
+ UnicodeDialog *m_unicodeDialog;
/** project path for storing title clips */
QString m_projectPath;
+ /** \brief Store the current choices of font, background and rect values */
+ void writeChoices();
+ /** \brief Read the last stored choices into the dialog */
+ void readChoices();
+ /** \brief Update the displayed X/Y coordinates */
+ void updateCoordinates(QGraphicsItem *i);
+ void updateDimension(QGraphicsItem *i);
+ /** \brief Update the item's position */
+ void updatePosition(QGraphicsItem *i);
+
+ void textChanged(QGraphicsTextItem *i);
+ void updateAxisButtons(QGraphicsItem *i);
+
+ void updateTextOriginX();
+ void updateTextOriginY();
public slots:
void slotNewText(QGraphicsTextItem *tt);
void slotNewRect(QGraphicsRectItem *rect);
void slotChangeBackground();
void selectionChanged();
- void textChanged();
void rectChanged();
- void fontBold();
void setupViewports();
void zIndexChanged(int);
void itemScaled(int);
void itemVCenter();
void saveTitle(KUrl url = KUrl());
void loadTitle();
- QPixmap renderedPixmap();
+ QImage renderedPixmap();
private slots:
void slotAdjustSelectedItem();
- void slotUpdateZoom(int pos);
+
+ /**
+ * \brief Switches the origin of the x axis between left and right
+ * border of the frame (offset from left/right frame border)
+ * \param originLeft Take left border?
+ *
+ * Called when the origin of the x coorinate has been changed. The
+ * x origin will either be at the left or at the right side of the frame.
+ *
+ * When the origin of the x axis is at the left side, the user can
+ * enter the distance between an element's left border and the left
+ * side of the frame.
+ *
+ * When on the right, the distance from the right border of the
+ * frame to the right border of the element can be entered. This
+ * would result in negative values as long as the element's right
+ * border is at the left of the frame's right border. As that is
+ * usually the case, I additionally invert the x axis.
+ *
+ * Default value is left.
+ *
+ * |----l----->|#######|----r--->|
+ * | |---w-->| |
+ * | |#######| |
+ * | |
+ * |----------m_frameWidth------>|
+ * | |
+ *
+ * Left selected: Value = l
+ * Right selected: Value = r
+ *
+ * To calculate between the two coorindate systems:
+ * l = m_frameWidth - w - r
+ * r = m_frameWidth - w - l
+ *
+ */
+ void slotOriginXClicked();
+ /** \brief Same as slotOriginYChanged, but for the Y axis; default is top.
+ * \param originTop Take top border? */
+ void slotOriginYClicked();
+
+ /** \brief Update coorinates of text fields if necessary and text has changed */
+ void slotChanged();
+
void slotZoom(bool up);
+ void slotUpdateZoom(int pos);
void slotAdjustZoom();
void slotZoomOneToOne();
+
void slotUpdateText();
+ void slotInsertUnicode();
+ void slotInsertUnicodeString(QString);
+
void displayBackgroundFrame();
+
void setCurrentItem(QGraphicsItem *item);
+
void slotTextTool();
void slotRectTool();
void slotSelectTool();
void slotImageTool();
+
+ /** \brief Called when accepted, stores the user selections for next time use */
+ void slotAccepted();
};