]> git.sesse.net Git - kdenlive/blobdiff - src/titlewidget.cpp
improve opening of Kdenlive 0.6 documents
[kdenlive] / src / titlewidget.cpp
index d0ebab329083d685e9bd593cd162ad3e2ab24420..a79cdba5710401a84a15173b87a6bac40feaae5a 100644 (file)
 
 int settingUp = false;
 
-TitleWidget::TitleWidget(Render *render, QWidget *parent): QDialog(parent), m_frameImage(NULL), m_render(render), m_count(0) {
+TitleWidget::TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent): QDialog(parent), m_render(render), m_count(0), m_projectPath(projectPath) {
     setupUi(this);
     //frame_properties->
     setFont(KGlobalSettings::toolBarFont());
     //toolBox->setFont(KGlobalSettings::toolBarFont());
     frame_properties->setEnabled(false);
+    m_frameWidth = render->renderWidth();
+    m_frameHeight = render->renderHeight();
     //connect(newTextButton, SIGNAL(clicked()), this, SLOT(slotNewText()));
     //connect(newRectButton, SIGNAL(clicked()), this, SLOT(slotNewRect()));
     connect(kcolorbutton, SIGNAL(clicked()), this, SLOT(slotChangeBackground())) ;
@@ -70,7 +72,6 @@ TitleWidget::TitleWidget(Render *render, QWidget *parent): QDialog(parent), m_fr
     connect(endViewportSize, SIGNAL(valueChanged(int)), this, SLOT(setupViewports()));
 
     connect(zValue, SIGNAL(valueChanged(int)), this, SLOT(zIndexChanged(int)));
-    connect(svgfilename, SIGNAL(urlSelected(const KUrl&)), this, SLOT(svgSelected(const KUrl &)));
     connect(itemzoom, SIGNAL(valueChanged(int)), this, SLOT(itemScaled(int)));
     connect(itemrotate, SIGNAL(valueChanged(int)), this, SLOT(itemRotate(int)));
 
@@ -105,7 +106,7 @@ TitleWidget::TitleWidget(Render *render, QWidget *parent): QDialog(parent), m_fr
     connect(m_buttonText, SIGNAL(triggered()), this, SLOT(slotTextTool()));
 
     m_buttonImage = m_toolbar->addAction(KIcon("insert-image"), i18n("Add Image"));
-    m_buttonImage->setCheckable(true);
+    m_buttonImage->setCheckable(false);
     connect(m_buttonImage, SIGNAL(triggered()), this, SLOT(slotImageTool()));
 
     m_buttonCursor = m_toolbar->addAction(KIcon("select-rectangular"), i18n("Selection Tool"));
@@ -123,13 +124,25 @@ TitleWidget::TitleWidget(Render *render, QWidget *parent): QDialog(parent), m_fr
     layout->addWidget(m_toolbar);
     text_properties->setHidden(true);
 
+    // initialize graphic scene
     m_scene = new GraphicsSceneRectMove(this);
+    graphicsView->setScene(m_scene);
+    m_titledocument.setScene(m_scene);
 
     // a gradient background
     QRadialGradient *gradient = new QRadialGradient(0, 0, 10);
     gradient->setSpread(QGradient::ReflectSpread);
     //scene->setBackgroundBrush(*gradient);
 
+    m_frameImage = new QGraphicsPixmapItem();
+    QTransform qtrans;
+    qtrans.scale(2.0, 2.0);
+    m_frameImage->setTransform(qtrans);
+    m_frameImage->setZValue(-1200);
+    m_frameImage->setFlags(QGraphicsItem::ItemClipsToShape);
+    displayBackgroundFrame();
+    graphicsView->scene()->addItem(m_frameImage);
+
     connect(m_scene, SIGNAL(selectionChanged()), this , SLOT(selectionChanged()));
     connect(m_scene, SIGNAL(itemMoved()), this , SLOT(selectionChanged()));
     connect(m_scene, SIGNAL(sceneZoom(bool)), this , SLOT(slotZoom(bool)));
@@ -139,14 +152,8 @@ TitleWidget::TitleWidget(Render *render, QWidget *parent): QDialog(parent), m_fr
     connect(m_scene, SIGNAL(newText(QGraphicsTextItem *)), this , SLOT(slotNewText(QGraphicsTextItem *)));
     connect(zoom_slider, SIGNAL(valueChanged(int)), this , SLOT(slotUpdateZoom(int)));
 
-    graphicsView->setScene(m_scene);
-    m_titledocument.setScene(m_scene);
-
     QPen framepen(Qt::DotLine);
     framepen.setColor(Qt::red);
-    m_frameWidth = render->renderWidth();
-    m_frameHeight = render->renderHeight();
-    slotRectTool();
 
     m_frameBorder = new QGraphicsRectItem(QRectF(0, 0, m_frameWidth, m_frameHeight));
     m_frameBorder->setPen(framepen);
@@ -164,7 +171,10 @@ TitleWidget::TitleWidget(Render *render, QWidget *parent): QDialog(parent), m_fr
     //graphicsView->resize(400, 300);
     kDebug() << "// TITLE WIDGWT: " << graphicsView->viewport()->width() << "x" << graphicsView->viewport()->height();
     toolBox->setItemEnabled(2, false);
-    toolBox->setItemEnabled(3, false);
+    if (!url.isEmpty()) {
+        m_count = m_titledocument.loadDocument(url, startViewport, endViewport) + 1;
+        slotSelectTool();
+    } else slotRectTool();
 }
 
 
@@ -179,7 +189,6 @@ void TitleWidget::slotTextTool() {
     m_scene->setTool(TITLE_TEXT);
     m_buttonRect->setChecked(false);
     m_buttonCursor->setChecked(false);
-    m_buttonImage->setChecked(false);
 }
 
 void TitleWidget::slotRectTool() {
@@ -188,7 +197,6 @@ void TitleWidget::slotRectTool() {
     m_scene->setTool(TITLE_RECTANGLE);
     m_buttonText->setChecked(false);
     m_buttonCursor->setChecked(false);
-    m_buttonImage->setChecked(false);
 }
 
 void TitleWidget::slotSelectTool() {
@@ -196,21 +204,52 @@ void TitleWidget::slotSelectTool() {
     m_buttonCursor->setChecked(true);
     m_buttonText->setChecked(false);
     m_buttonRect->setChecked(false);
-    m_buttonImage->setChecked(false);
+}
+
+void TitleWidget::slotImageTool() {
+    KUrl url = KFileDialog::getOpenUrl(KUrl(), "*.svg *.png *.jpg *.jpeg *.gif *.raw", this, i18n("Load Image"));
+    if (!url.isEmpty()) {
+        if (url.path().endsWith(".svg")) {
+            QGraphicsSvgItem *svg = new QGraphicsSvgItem(url.toLocalFile());
+            svg->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+            svg->setZValue(m_count++);
+            svg->setData(Qt::UserRole, url.path());
+            graphicsView->scene()->addItem(svg);
+        } else {
+            QPixmap pix(url.path());
+            QGraphicsPixmapItem *image = new QGraphicsPixmapItem(pix);
+            image->setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
+            image->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
+            image->setData(Qt::UserRole, url.path());
+            image->setZValue(m_count++);
+            graphicsView->scene()->addItem(image);
+        }
+    }
+    m_scene->setTool(TITLE_SELECT);
+    m_buttonRect->setChecked(false);
+    m_buttonCursor->setChecked(true);
+    m_buttonText->setChecked(false);
 }
 
 void TitleWidget::displayBackgroundFrame() {
-    if (m_frameImage) delete m_frameImage;
-    m_frameImage = NULL;
-    if (!displayBg->isChecked()) return;
-    QPixmap bg = m_render->extractFrame((int) m_render->seekPosition().frames(m_render->fps()), m_frameWidth / 2, m_frameHeight / 2);
-    m_frameImage = new QGraphicsPixmapItem(bg);
-    QTransform qtrans;
-    qtrans.scale(2.0, 2.0);
-    m_frameImage->setTransform(qtrans);
-    m_frameImage->setZValue(-1200);
-    m_frameImage->setFlags(QGraphicsItem::ItemClipsToShape);
-    graphicsView->scene()->addItem(m_frameImage);
+    if (!displayBg->isChecked()) {
+        QPixmap bg(m_frameWidth / 2, m_frameHeight / 2);
+        QPixmap pattern(20, 20);
+        pattern.fill();
+        QPainter p;
+        p.begin(&pattern);
+        p.fillRect(QRect(0, 0, 10, 10), QColor(210, 210, 210));
+        p.fillRect(QRect(10, 10, 20, 20), QColor(210, 210, 210));
+        p.end();
+        QBrush br(pattern);
+
+        p.begin(&bg);
+        p.fillRect(bg.rect(), br);
+        p.end();
+        m_frameImage->setPixmap(bg);
+    } else {
+        m_frameImage->setPixmap(m_render->extractFrame((int) m_render->seekPosition().frames(m_render->fps()), m_frameWidth / 2, m_frameHeight / 2));
+    }
 }
 
 void TitleWidget::initViewports() {
@@ -383,8 +422,8 @@ void TitleWidget::selectionChanged() {
             frame_properties->setEnabled(false);
         }
         zValue->setValue((int)l[0]->zValue());
-        itemzoom->setValue((int)transformations[l[0]].scalex*100);
-        itemrotate->setValue((int)transformations[l[0]].rotate);
+        itemzoom->setValue((int)(transformations[l[0]].scalex * 100));
+        itemrotate->setValue((int)(transformations[l[0]].rotate));
         value_x->blockSignals(false);
         value_y->blockSignals(false);
         value_w->blockSignals(false);
@@ -479,12 +518,6 @@ void TitleWidget::fontBold() {
     }
 }
 
-void TitleWidget::svgSelected(const KUrl& u) {
-    QGraphicsSvgItem *svg = new QGraphicsSvgItem(u.toLocalFile());
-    svg->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
-    graphicsView->scene()->addItem(svg);
-}
-
 void TitleWidget::itemScaled(int val) {
     QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
     if (l.size() == 1) {
@@ -533,7 +566,7 @@ void TitleWidget::setupViewports() {
 }
 
 void TitleWidget::loadTitle() {
-    KUrl url = KFileDialog::getOpenUrl(KUrl(), "*.kdenlivetitle", this, tr("Save Title"));
+    KUrl url = KFileDialog::getOpenUrl(KUrl(m_projectPath), "*.kdenlivetitle", this, i18n("Load Title"));
     if (!url.isEmpty()) {
         QList<QGraphicsItem *> items = m_scene->items();
         for (int i = 0; i < items.size(); i++) {
@@ -544,9 +577,9 @@ void TitleWidget::loadTitle() {
     }
 }
 
-void TitleWidget::saveTitle() {
-    KUrl url = KFileDialog::getSaveUrl(KUrl(), "*.kdenlivetitle", this, tr("Save Title"));
-    m_titledocument.saveDocument(url, startViewport, endViewport);
+void TitleWidget::saveTitle(KUrl url) {
+    if (url.isEmpty()) url = KFileDialog::getSaveUrl(KUrl(m_projectPath), "*.kdenlivetitle", this, i18n("Save Title"));
+    if (!url.isEmpty()) m_titledocument.saveDocument(url, startViewport, endViewport);
 }
 
 QPixmap TitleWidget::renderedPixmap() {
@@ -557,17 +590,15 @@ QPixmap TitleWidget::renderedPixmap() {
     m_scene->clearSelection();
     QPen framepen = m_frameBorder->pen();
     m_frameBorder->setPen(Qt::NoPen);
-    QPen startpen = startViewport->pen();
-    QPen endpen = endViewport->pen();
-    startViewport->setPen(Qt::NoPen);
-    endViewport->setPen(Qt::NoPen);
-    if (m_frameImage) delete m_frameImage;
-    m_frameImage = NULL;
+    startViewport->setVisible(false);
+    endViewport->setVisible(false);
+    m_frameImage->setVisible(false);
+
     m_scene->render(&painter, QRectF(), QRectF(0, 0, m_frameWidth, m_frameHeight));
     m_frameBorder->setPen(framepen);
-    startViewport->setPen(startpen);
-    endViewport->setPen(endpen);
-    displayBackgroundFrame();
+    startViewport->setVisible(true);
+    endViewport->setVisible(true);
+    m_frameImage->setVisible(true);
     return pix;
 }