]> git.sesse.net Git - kdenlive/blobdiff - src/titlewidget.cpp
Clean up timecode handling, improves:
[kdenlive] / src / titlewidget.cpp
index 04209c090bfb323f678c293070a4a64dc5f4285a..028f1a73cad946e9d9e1131e407064c8e31fbf33 100644 (file)
@@ -43,7 +43,7 @@ const int RECTITEM = 3;
 const int TEXTITEM = 8;
 static bool insertingValues = false;
 
-TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWidget *parent) :
+TitleWidget::TitleWidget(KUrl url, Timecode tc, QString projectTitlePath, Render *render, QWidget *parent) :
         QDialog(parent),
         Ui::TitleWidget_UI(),
         m_startViewport(NULL),
@@ -51,7 +51,8 @@ TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWi
         m_render(render),
         m_count(0),
         m_unicodeDialog(new UnicodeDialog(UnicodeDialog::InputHex)),
-        m_projectTitlePath(projectTitlePath)
+        m_projectTitlePath(projectTitlePath),
+        m_tc(tc)
 {
     setupUi(this);
     setFont(KGlobalSettings::toolBarFont());
@@ -66,6 +67,9 @@ TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWi
     m_frameHeight = render->renderHeight();
     showToolbars(TITLE_NONE);
 
+    //TODO: get default title duration instead of hardcoded one
+    title_duration->setText(m_tc.getTimecode(GenTime(5000 / 1000.0)));
+
     connect(kcolorbutton, SIGNAL(clicked()), this, SLOT(slotChangeBackground())) ;
     connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(slotChangeBackground())) ;
 
@@ -217,7 +221,7 @@ TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWi
     // initialize graphic scene
     m_scene = new GraphicsSceneRectMove(this);
     graphicsView->setScene(m_scene);
-    m_titledocument.setScene(m_scene);
+    m_titledocument.setScene(m_scene, m_frameWidth, m_frameHeight);
     connect(m_scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(slotChanged()));
 
     // a gradient background
@@ -257,7 +261,6 @@ TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWi
     readChoices();
 
     initViewports();
-    QTimer::singleShot(500, this, SLOT(slotAdjustZoom()));
     graphicsView->show();
     //graphicsView->setRenderHint(QPainter::Antialiasing);
     graphicsView->setInteractive(true);
@@ -265,11 +268,15 @@ TitleWidget::TitleWidget(KUrl url, QString projectTitlePath, Render *render, QWi
     kDebug() << "// TITLE WIDGWT: " << graphicsView->viewport()->width() << "x" << graphicsView->viewport()->height();
     //toolBox->setItemEnabled(2, false);
     if (!url.isEmpty()) {
-        m_count = m_titledocument.loadDocument(url, m_startViewport, m_endViewport) + 1;
+        double out;
+        m_count = m_titledocument.loadDocument(url, m_startViewport, m_endViewport, &out) + 1;
+        adjustFrameSize();
+        title_duration->setText(m_tc.getTimecode(GenTime(out)));
         slotSelectTool();
     } else {
         slotTextTool();
     }
+    QTimer::singleShot(200, this, SLOT(slotAdjustZoom()));
 }
 
 TitleWidget::~TitleWidget()
@@ -1299,14 +1306,17 @@ void TitleWidget::setupViewports()
 
 void TitleWidget::loadTitle()
 {
-    KUrl url = KFileDialog::getOpenUrl(KUrl(m_projectTitlePath), "*.kdenlivetitle", this, i18n("Load Title"));
+    KUrl url = KFileDialog::getOpenUrl(KUrl(m_projectTitlePath), "application/x-kdenlivetitle", this, i18n("Load Title"));
     if (!url.isEmpty()) {
         QList<QGraphicsItem *> items = m_scene->items();
         for (int i = 0; i < items.size(); i++) {
             if (items.at(i)->zValue() > -1000) delete items.at(i);
         }
         m_scene->clearTextSelection();
-        m_count = m_titledocument.loadDocument(url, m_startViewport, m_endViewport) + 1;
+        double out;
+        m_count = m_titledocument.loadDocument(url, m_startViewport, m_endViewport, &out) + 1;
+        adjustFrameSize();
+        title_duration->setText(m_tc.getTimecode(GenTime(out / 1000.0)));
         insertingValues = true;
         startViewportX->setValue(m_startViewport->data(0).toInt());
         startViewportY->setValue(m_startViewport->data(1).toInt());
@@ -1316,14 +1326,15 @@ void TitleWidget::loadTitle()
         endViewportSize->setValue(m_endViewport->data(2).toInt());
         insertingValues = false;
         slotSelectTool();
+        slotAdjustZoom();
     }
 }
 
 void TitleWidget::saveTitle(KUrl url)
 {
-    if (url.isEmpty()) url = KFileDialog::getSaveUrl(KUrl(m_projectTitlePath), "*.kdenlivetitle", this, i18n("Save Title"));
+    if (url.isEmpty()) url = KFileDialog::getSaveUrl(KUrl(m_projectTitlePath), "application/x-kdenlivetitle", this, i18n("Save Title"));
     if (!url.isEmpty()) {
-        if (m_titledocument.saveDocument(url, m_startViewport, m_endViewport) == false)
+        if (m_titledocument.saveDocument(url, m_startViewport, m_endViewport, GenTime(m_tc.getFrameCount(title_duration->text()), m_render->fps()).ms()) == false)
             KMessageBox::error(this, i18n("Cannot write to file %1", url.path()));
     }
 }
@@ -1331,15 +1342,30 @@ void TitleWidget::saveTitle(KUrl url)
 QDomDocument TitleWidget::xml()
 {
     QDomDocument doc = m_titledocument.xml(m_startViewport, m_endViewport);
+    doc.documentElement().setAttribute("out", GenTime(m_tc.getFrameCount(title_duration->text())).ms());
     if (cropImage->isChecked()) {
         doc.documentElement().setAttribute("crop", 1);
     }
     return doc;
 }
 
+int TitleWidget::duration() const
+{
+    return GenTime(m_tc.getFrameCount(title_duration->text())).frames(m_render->fps());
+}
+
 void TitleWidget::setXml(QDomDocument doc)
 {
-    m_count = m_titledocument.loadFromXml(doc, m_startViewport, m_endViewport);
+    double out;
+    m_count = m_titledocument.loadFromXml(doc, m_startViewport, m_endViewport, &out);
+    adjustFrameSize();
+    title_duration->setText(m_tc.getTimecode(GenTime(out / 1000.0)));
+    /*if (doc.documentElement().hasAttribute("out")) {
+    GenTime duration = GenTime(doc.documentElement().attribute("out").toDouble() / 1000.0);
+    title_duration->setText(m_tc.getTimecode(duration));
+    }
+    else title_duration->setText(m_tc.getTimecode(GenTime(5000)));*/
+
     QDomElement e = doc.documentElement();
     cropImage->setChecked(e.hasAttribute("crop"));
     m_transformations.clear();
@@ -1362,7 +1388,7 @@ void TitleWidget::setXml(QDomDocument doc)
     kcolorbutton->setColor(background_color);
     horizontalSlider->blockSignals(false);
     kcolorbutton->blockSignals(false);
-
+    QTimer::singleShot(200, this, SLOT(slotAdjustZoom()));
     slotSelectTool();
 }
 
@@ -1482,3 +1508,14 @@ void TitleWidget::readChoices()
     cropImage->setChecked(titleConfig.readEntry("crop_image", cropImage->isChecked()));
 }
 
+void TitleWidget::adjustFrameSize()
+{
+    m_frameWidth = m_titledocument.frameWidth();
+    m_frameHeight = m_titledocument.frameHeight();
+    m_frameBorder->setRect(0, 0, m_frameWidth, m_frameHeight);
+    displayBackgroundFrame();
+}
+
+
+
+