]> git.sesse.net Git - kdenlive/commitdiff
Many improvements to title clips (recreate when missing, fix text selection visible...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 4 Oct 2008 00:45:22 +0000 (00:45 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 4 Oct 2008 00:45:22 +0000 (00:45 +0000)
svn path=/branches/KDE4/; revision=2429

12 files changed:
src/clipmanager.cpp
src/clipmanager.h
src/graphicsscenerectmove.cpp
src/graphicsscenerectmove.h
src/kdenlivedoc.cpp
src/kthumb.cpp
src/mainwindow.cpp
src/projectlist.cpp
src/renderer.cpp
src/titlewidget.cpp
src/titlewidget.h
src/widgets/titlewidget_ui.ui

index 87990b6126d5a82280efc8ecf8bbe259284c00a4..10575c9976575f3f88ff0201abb0ef452e11e950 100644 (file)
@@ -185,12 +185,11 @@ void ClipManager::slotAddSlideshowClipFile(const QString name, const QString pat
 
 
 
-void ClipManager::slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId) {
-    kDebug() << "/////  CLIP MANAGER, ADDING CLIP: " << path;
+void ClipManager::slotAddTextClipFile(const QString titleName, const QString imagePath, const QString xml, const QString group, const QString &groupId) {
     QDomDocument doc;
     QDomElement prod = doc.createElement("producer");
-    prod.setAttribute("resource", path + ".png");
-    prod.setAttribute("xml", path);
+    prod.setAttribute("resource", imagePath);
+    prod.setAttribute("titlename", titleName);
     prod.setAttribute("xmldata", xml);
     uint id = m_clipIdCounter++;
     prod.setAttribute("id", QString::number(id));
index 95a8cceae91862f17ba0cbcc794b702cc2e691fe..575f0e832d95b2accdf15e5a39f1ba940e1cad33 100644 (file)
@@ -50,7 +50,7 @@ Q_OBJECT public:
     void deleteClip(const QString &clipId);
     void slotAddClipFile(const KUrl url, const QString group, const QString &groupId);
     void slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId);
-    void slotAddTextClipFile(const QString path, const QString xml, const QString group, const QString &groupId);
+    void slotAddTextClipFile(const QString titleName, const QString imagePath, const QString xml, const QString group, const QString &groupId);
     void slotAddColorClipFile(const QString name, const QString color, QString duration, const QString group, const QString &groupId);
     void slotAddSlideshowClipFile(const QString name, const QString path, int count, const QString duration, const bool loop, const bool fade, const QString &luma_duration, const QString &luma_file, const int softness, const QString group, const QString &groupId);
     DocClipBase *getClipById(const QString &clipId);
index d972c9cf44a3ef757a628bf3b584832f520f50cd..710d1d50e4ce13e829b574e479ebb5abb6e3955d 100644 (file)
@@ -5,9 +5,11 @@
 #include <QGraphicsSvgItem>
 #include <QGraphicsView>
 #include <QCursor>
+#include <QTextCursor>
 #include <QList>
 #include <QKeyEvent>
 #include <QApplication>
+#include <QTextBlock>
 
 #include "graphicsscenerectmove.h"
 
@@ -96,6 +98,7 @@ void GraphicsSceneRectMove::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* e) {
     if (g) {
         if (g->type() == 8) {
             QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(g);
+            m_selectedItem = g;
             t->setTextInteractionFlags(Qt::TextEditorInteraction);
         }
     }
@@ -109,6 +112,7 @@ void GraphicsSceneRectMove::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
 }
 
 void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) {
+    m_clickPoint = e->screenPos();
     QPointF p = e->scenePos();
     p += QPoint(-2, -2);
     resizeMode = NoResize;
@@ -130,6 +134,9 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) {
             if (m_selectedItem && m_selectedItem->type() == 8) {
                 // disable text editing
                 QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(m_selectedItem);
+                t->textCursor().setPosition(0);
+                QTextBlock cur = t->textCursor().block();
+                t->setTextCursor(QTextCursor(cur));
                 t->setTextInteractionFlags(Qt::NoTextInteraction);
             }
             m_selectedItem = NULL;
@@ -141,7 +148,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) {
             }
         }
         if (item != NULL) {
-            m_clickPoint = e->scenePos();
+            m_sceneClickPoint = e->scenePos();
             m_selectedItem = item;
             kDebug() << "/////////  ITEM TYPE: " << item->type();
             if (item->type() == 8) {
@@ -180,7 +187,7 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) {
         }
         QGraphicsScene::mousePressEvent(e);
     } else if (m_tool == TITLE_RECTANGLE) {
-        m_clickPoint = e->scenePos();
+        m_sceneClickPoint = e->scenePos();
         m_selectedItem = NULL;
     } else if (m_tool == TITLE_TEXT) {
         m_selectedItem = addText(QString());
@@ -195,10 +202,25 @@ void GraphicsSceneRectMove::mousePressEvent(QGraphicsSceneMouseEvent* e) {
 
 }
 
+void GraphicsSceneRectMove::clearTextSelection() {
+    if (m_selectedItem && m_selectedItem->type() == 8) {
+        // disable text editing
+        QGraphicsTextItem *t = static_cast<QGraphicsTextItem *>(m_selectedItem);
+        t->textCursor().setPosition(0);
+        QTextBlock cur = t->textCursor().block();
+        t->setTextCursor(QTextCursor(cur));
+        t->setTextInteractionFlags(Qt::NoTextInteraction);
+    }
+    m_selectedItem = NULL;
+    clearSelection();
+}
 
 //virtual
 void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) {
-
+    if ((e->screenPos() - m_clickPoint).manhattanLength() < QApplication::startDragDistance()) {
+        e->accept();
+        return;
+    }
     if (m_selectedItem && e->buttons() & Qt::LeftButton) {
         if (m_selectedItem->type() == 3 || m_selectedItem->type() == 13 || m_selectedItem->type() == 7) {
             QRectF newrect;
@@ -239,8 +261,8 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) {
                 newrect.setBottom(newpoint.y() - m_selectedItem->pos().y());
                 break;
             default:
-                QPointF diff = e->scenePos() - m_clickPoint;
-                m_clickPoint = e->scenePos();
+                QPointF diff = e->scenePos() - m_sceneClickPoint;
+                m_sceneClickPoint = e->scenePos();
                 m_selectedItem->moveBy(diff.x(), diff.y());
                 break;
             }
@@ -266,13 +288,12 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) {
                 QGraphicsScene::mouseMoveEvent(e);
                 return;
             }
-            QPointF diff = e->scenePos() - m_clickPoint;
-            m_clickPoint = e->scenePos();
+            QPointF diff = e->scenePos() - m_sceneClickPoint;
+            m_sceneClickPoint = e->scenePos();
             m_selectedItem->moveBy(diff.x(), diff.y());
         }
         emit itemMoved();
     } else if (m_tool == TITLE_SELECT) {
-
         QPointF p = e->scenePos();
         p += QPoint(-2, -2);
         resizeMode = NoResize;
@@ -309,12 +330,12 @@ void GraphicsSceneRectMove::mouseMoveEvent(QGraphicsSceneMouseEvent* e) {
         }
         QGraphicsScene::mouseMoveEvent(e);
     } else if (m_tool == TITLE_RECTANGLE && e->buttons() & Qt::LeftButton) {
-        if (m_selectedItem == NULL && (m_clickPoint.toPoint() - e->scenePos().toPoint()).manhattanLength() >= QApplication::startDragDistance()) {
+        if (m_selectedItem == NULL && (m_clickPoint - e->screenPos()).manhattanLength() >= QApplication::startDragDistance()) {
             // create new rect item
-            m_selectedItem = addRect(0, 0, e->scenePos().x() - m_clickPoint.x(), e->scenePos().y() - m_clickPoint.y());
+            m_selectedItem = addRect(0, 0, e->scenePos().x() - m_sceneClickPoint.x(), e->scenePos().y() - m_sceneClickPoint.y());
             emit newRect((QGraphicsRectItem *) m_selectedItem);
             m_selectedItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
-            m_selectedItem->setPos(m_clickPoint);
+            m_selectedItem->setPos(m_sceneClickPoint);
             resizeMode = BottomRight;
             QGraphicsScene::mouseMoveEvent(e);
         }
index 091702434c0b52ac97e96a67e90f92c1fa861420..45bd5f7dd1d15a8c1d35c6a1f7e89c3369613754 100644 (file)
@@ -16,6 +16,7 @@ public:
     void setZoom(double s);
     void setTool(TITLETOOL tool);
     TITLETOOL tool();
+    void clearTextSelection();
 
 protected:
     virtual void keyPressEvent(QKeyEvent * keyEvent);
@@ -30,8 +31,9 @@ private:
     double zoom;
     QGraphicsItem* m_selectedItem;
     resizeModes resizeMode;
-    QPointF m_clickPoint;
+    QPointF m_sceneClickPoint;
     TITLETOOL m_tool;
+    QPoint m_clickPoint;
 
 signals:
     void itemMoved();
index 043953d84b7786f8e58acabee6f16833bfeb1da5..e24df38947564477edc6bed731848f5b871723fe 100644 (file)
@@ -488,17 +488,9 @@ void KdenliveDoc::convertDocument(double version) {
                         }
                     }
                     prod.setAttribute("xmldata", tdoc.toString());
-                    QString titlesFolder = projectFolder().path() + "/titles/";
-                    KStandardDirs::makeDir(titlesFolder);
-                    QString titleName = "title";
-                    int counter = 0;
-                    QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false);
-                    while (QFile::exists(path + ".png")) {
-                        counter++;
-                        path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false);
-                    }
-                    prod.setAttribute("xml", path);
-                    prod.setAttribute("resource", path + ".png");
+                    QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
+                    prod.setAttribute("titlename", titleInfo.at(0));
+                    prod.setAttribute("resource", titleInfo.at(1));
                     //kDebug()<<"TITLE DATA:\n"<<tdoc.toString();
                     prod.removeChild(m);
                 }
@@ -646,6 +638,31 @@ void KdenliveDoc::checkProjectClips() {
         if (clip && clip->producer() == NULL) {
             clip->setProducer(prods.at(i));
         }
+        if (clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) {
+            // regenerate text clip image if required
+            kDebug() << "// TITLE: " << clip->getProperty("titlename") << " Preview file: " << clip->getProperty("resource") << " DOES NOT EXIST";
+            QString titlename = clip->getProperty("titlename");
+            QString titleresource;
+            if (titlename.isEmpty()) {
+                QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
+                titlename = titleInfo.at(0);
+                titleresource = titleInfo.at(1);
+                clip->setProperty("titlename", titlename);
+                kDebug() << "// New title set to: " << titlename;
+            } else {
+                titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename);
+            }
+            QString titlepath = projectFolder().path() + "/titles/";
+            TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow());
+            QDomDocument doc;
+            doc.setContent(clip->getProperty("xmldata"));
+            dia_ui->setXml(doc);
+            QPixmap pix = dia_ui->renderedPixmap();
+            pix.save(titleresource);
+            clip->setProperty("resource", titleresource);
+            delete dia_ui;
+            clip->producer()->set("force_reload", 1);
+        }
     }
 }
 
@@ -862,17 +879,11 @@ void KdenliveDoc::slotCreateTextClip(QString group, const QString &groupId) {
     KStandardDirs::makeDir(titlesFolder);
     TitleWidget *dia_ui = new TitleWidget(KUrl(), titlesFolder, m_render, kapp->activeWindow());
     if (dia_ui->exec() == QDialog::Accepted) {
-        QString titleName = "title";
-        int counter = 0;
-        QString path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false);
-        while (QFile::exists(path + ".png")) {
-            counter++;
-            path = titlesFolder + titleName + QString::number(counter).rightJustified(3, '0', false);
-        }
+        QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
         QPixmap pix = dia_ui->renderedPixmap();
-        pix.save(path + ".png");
+        pix.save(titleInfo.at(1));
         //dia_ui->saveTitle(path + ".kdenlivetitle");
-        m_clipManager->slotAddTextClipFile(path, dia_ui->xml().toString(), QString(), QString());
+        m_clipManager->slotAddTextClipFile(titleInfo.at(0), titleInfo.at(1), dia_ui->xml().toString(), QString(), QString());
         setModified(true);
     }
     delete dia_ui;
index 57aaf4a84a2ef1cf4b8c1590a45077bc290fe92c..10f8aced03cf2c965b0dacb2342af956939920bf 100644 (file)
@@ -230,6 +230,11 @@ void KThumb::setProducer(Mlt::Producer *producer) {
 
 void KThumb::updateClipUrl(KUrl url) {
     m_url = url;
+    if (m_producer) {
+        char *tmp = Render::decodedString(url.path());
+        m_producer->set("resource", tmp);
+        delete[] tmp;
+    }
 }
 
 //static
index b050f603bd587a1f2ddcac09924d58dc0584f349..4b578d7705652df7c61ca393ba8cf385116763fb 100644 (file)
@@ -1422,22 +1422,23 @@ void MainWindow::slotGotProgressInfo(const QString &message, int progress) {
 
 void MainWindow::slotShowClipProperties(DocClipBase *clip) {
     if (clip->clipType() == TEXT) {
-        QString path = clip->getProperty("xml");
-        TitleWidget *dia_ui = new TitleWidget(KUrl()/*path + ".kdenlivetitle")*/, path, m_projectMonitor->render, this);
+        QString titlepath = m_activeDocument->projectFolder().path() + "/titles/";
+        QString path = clip->getProperty("resource");
+        TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_projectMonitor->render, this);
         QDomDocument doc;
         doc.setContent(clip->getProperty("xmldata"));
         dia_ui->setXml(doc);
         if (dia_ui->exec() == QDialog::Accepted) {
-            kDebug() << "//  UPDATUING CLIP TITLE: " << path;
             QPixmap pix = dia_ui->renderedPixmap();
-            pix.save(path + ".png");
+            pix.save(path);
             //slotAddClipFile(KUrl("/tmp/kdenlivetitle.png"), QString(), -1);
             //m_clipManager->slotEditTextClipFile(id, dia_ui->xml().toString());
             QMap <QString, QString> newprops;
             newprops.insert("xmldata", dia_ui->xml().toString());
             EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
             m_activeDocument->commandStack()->push(command);
-            //setModified(true);
+            m_clipMonitor->refreshMonitor(true);
+            m_activeDocument->setModified(true);
         }
         delete dia_ui;
 
index 217e0b1ba9364d1e4ca4c31830cd9e47c1536afc..21c28ffe01a0cbad82708c8e7e29d463a44a3602 100644 (file)
@@ -41,6 +41,7 @@
 #include "kdenlivesettings.h"
 #include "slideshowclip.h"
 #include "ui_colorclip_ui.h"
+#include "titlewidget.h"
 
 
 #include "definitions.h"
@@ -315,8 +316,20 @@ void ProjectList::updateAllClips() {
     while (*it) {
         ProjectItem *item = static_cast <ProjectItem *>(*it);
         if (!item->isGroup()) {
-            if (item->referencedClip()->producer() == NULL) emit getFileProperties(item->referencedClip()->toXML(), item->referencedClip()->getId());
-            else {
+            if (item->referencedClip()->producer() == NULL) {
+                DocClipBase *clip = item->referencedClip();
+                if (clip->clipType() == TEXT && !QFile::exists(clip->fileURL().path())) {
+                    // regenerate text clip image if required
+                    TitleWidget *dia_ui = new TitleWidget(KUrl(), QString(), m_render, this);
+                    QDomDocument doc;
+                    doc.setContent(clip->getProperty("xmldata"));
+                    dia_ui->setXml(doc);
+                    QPixmap pix = dia_ui->renderedPixmap();
+                    pix.save(clip->fileURL().path());
+                    delete dia_ui;
+                }
+                emit getFileProperties(clip->toXML(), clip->getId());
+            } else {
                 slotRefreshClipThumbnail(item, false);
                 item->changeDuration(item->referencedClip()->producer()->get_playtime());
             }
@@ -331,7 +344,7 @@ void ProjectList::slotAddClip(QUrl givenUrl, QString group) {
     if (!m_commandStack) kDebug() << "!!!!!!!!!!!!!!!!  NO CMD STK";
     KUrl::List list;
     if (givenUrl.isEmpty()) {
-        list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/vnd.kde.kdenlive application/vnd.westley.scenelist application/flv application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr video/mlt-playlist", this);
+        list = KFileDialog::getOpenUrls(KUrl("kfiledialog:///clipfolder"), "application/x-kdenlive application/x-flash-video application/vnd.rn-realmedia video/x-dv video/dv video/x-msvideo video/mpeg video/x-ms-wmv audio/mpeg audio/x-mp3 audio/x-wav application/ogg video/mp4 video/quicktime image/gif image/jpeg image/png image/x-bmp image/svg+xml image/tiff image/x-xcf-gimp image/x-vnd.adobe.photoshop image/x-pcx image/x-exr video/mlt-playlist", this);
     } else list.append(givenUrl);
     if (list.isEmpty()) return;
 
index ce690ac9e2dd0288d847d9b086d16ce61bd08472..74b6ceb2b870eaf7ee01f798f2d9d05a4fa6de80 100644 (file)
@@ -469,6 +469,9 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
 
     KUrl url = KUrl(xml.attribute("resource", QString::null));
     Mlt::Producer *producer;
+    if (xml.attribute("type").toInt() == TEXT && !QFile::exists(url.path())) {
+        return;
+    }
     if (xml.attribute("type").toInt() == COLOR) {
         char *tmp = decodedString("colour:" + xml.attribute("colour"));
         producer = new Mlt::Producer(*m_mltProfile, "fezzik", tmp);
@@ -480,14 +483,22 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
         doc.appendChild(westley);
         westley.appendChild(play);
         play.appendChild(doc.importNode(xml, true));
-        kDebug() << "/ / / / /CLIP XML: " << doc.toString();
         char *tmp = decodedString(doc.toString());
         producer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp);
         delete[] tmp;
     } else {
-        char *tmp = decodedString(url.path());
+        QString urlpath = url.path();
+        /*if (urlpath.contains(':')) {
+            if (!urlpath.startsWith("file:")) urlpath.prepend("file:");
+            char *tmp = decodedString(urlpath);
+            producer = new Mlt::Producer(*m_mltProfile, "avformat", tmp);
+            delete[] tmp;
+        }
+        else {*/
+        char *tmp = decodedString(urlpath);
         producer = new Mlt::Producer(*m_mltProfile, tmp);
         delete[] tmp;
+        //}
     }
     if (xml.hasAttribute("out")) producer->set_in_and_out(xml.attribute("in").toInt(), xml.attribute("out").toInt());
 
@@ -503,7 +514,6 @@ void Render::getFileProperties(const QDomElement &xml, const QString &clipId) {
     if (frameNumber != 0) producer->seek(frameNumber);
     mlt_properties properties = MLT_PRODUCER_PROPERTIES(producer->get_producer());
 
-    filePropertyMap["filename"] = url.path();
     filePropertyMap["duration"] = QString::number(producer->get_playtime());
     //kDebug() << "///////  PRODUCER: " << url.path() << " IS: " << producer.get_playtime();
 
index 19cc14c96d0011f7d9f509d8e05ccd247d66504f..b2fd5257262ebcb678377fdd317b206abb495c9b 100644 (file)
@@ -29,6 +29,7 @@
 #include <KDebug>
 #include <KGlobalSettings>
 #include <KFileDialog>
+#include <KStandardDirs>
 
 #include "titlewidget.h"
 #include "kdenlivesettings.h"
@@ -37,10 +38,11 @@ int settingUp = false;
 
 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);
+    rect_properties->setFixedHeight(frame_properties->height() + 4);
+    text_properties->setFixedHeight(frame_properties->height() + 4);
     m_frameWidth = render->renderWidth();
     m_frameHeight = render->renderHeight();
     //connect(newTextButton, SIGNAL(clicked()), this, SLOT(slotNewText()));
@@ -101,7 +103,7 @@ TitleWidget::TitleWidget(KUrl url, QString projectPath, Render *render, QWidget
 
     QHBoxLayout *layout = new QHBoxLayout;
     frame_toolbar->setLayout(layout);
-
+    layout->setContentsMargins(2, 2, 2, 2);
     QToolBar *m_toolbar = new QToolBar("titleToolBar", this);
 
     m_buttonRect = m_toolbar->addAction(KIcon("kdenlive-insert-rect"), i18n("Add Rectangle"));
@@ -170,20 +172,44 @@ TitleWidget::TitleWidget(KUrl url, QString projectPath, Render *render, QWidget
     graphicsView->scene()->addItem(m_frameBorder);
 
     initViewports();
-
+    QTimer::singleShot(500, this, SLOT(slotAdjustZoom()));
     graphicsView->show();
     //graphicsView->setRenderHint(QPainter::Antialiasing);
     graphicsView->setInteractive(true);
-    QTimer::singleShot(500, this, SLOT(slotAdjustZoom()));
     //graphicsView->resize(400, 300);
     kDebug() << "// TITLE WIDGWT: " << graphicsView->viewport()->width() << "x" << graphicsView->viewport()->height();
     toolBox->setItemEnabled(2, false);
     if (!url.isEmpty()) {
         m_count = m_titledocument.loadDocument(url, startViewport, endViewport) + 1;
         slotSelectTool();
-    } else slotRectTool();
+    } else {
+        slotRectTool();
+    }
 }
 
+//static
+QStringList TitleWidget::getFreeTitleInfo(const KUrl &projectUrl) {
+    QStringList result;
+    QString titlePath = projectUrl.path() + "/titles/";
+    KStandardDirs::makeDir(titlePath);
+    QString titleName = "title";
+    int counter = 0;
+    QString path = titlePath + titleName + QString::number(counter).rightJustified(3, '0', false);
+    while (QFile::exists(path + ".png")) {
+        counter++;
+        path = titlePath + titleName + QString::number(counter).rightJustified(3, '0', false);
+    }
+    result.append(titleName + QString::number(counter).rightJustified(3, '0', false));
+    result.append(path + ".png");
+    return result;
+}
+
+QString TitleWidget::getTitleResourceFromName(const KUrl &projectUrl, const QString &titleName) {
+    QStringList result;
+    QString titlePath = projectUrl.path() + "/titles/";
+    KStandardDirs::makeDir(titlePath);
+    return titlePath + titleName + ".png";
+}
 
 //virtual
 void TitleWidget::resizeEvent(QResizeEvent * event) {
@@ -286,8 +312,8 @@ void TitleWidget::initViewports() {
 }
 
 void TitleWidget::slotUpdateZoom(int pos) {
-    m_scene->setZoom((double) pos / 7);
-    zoom_label->setText("x" + QString::number((double) pos / 7, 'g', 2));
+    m_scene->setZoom((double) pos / 100);
+    zoom_label->setText(QString::number(pos) + "%");
 }
 
 void TitleWidget::slotZoom(bool up) {
@@ -298,16 +324,18 @@ void TitleWidget::slotZoom(bool up) {
 }
 
 void TitleWidget::slotAdjustZoom() {
-    double scalex = graphicsView->width() / (double)(m_frameWidth * 1.2);
+    /*double scalex = graphicsView->width() / (double)(m_frameWidth * 1.2);
     double scaley = graphicsView->height() / (double)(m_frameHeight * 1.2);
     if (scalex > scaley) scalex = scaley;
-    int zoompos = (int)(scalex * 7 + 0.5);
+    int zoompos = (int)(scalex * 7 + 0.5);*/
+    graphicsView->fitInView(m_frameBorder, Qt::KeepAspectRatio);
+    int zoompos = graphicsView->matrix().m11() * 100;
     zoom_slider->setValue(zoompos);
     graphicsView->centerOn(m_frameBorder);
 }
 
 void TitleWidget::slotZoomOneToOne() {
-    zoom_slider->setValue(7);
+    zoom_slider->setValue(100);
     graphicsView->centerOn(m_frameBorder);
 }
 
@@ -356,7 +384,7 @@ void TitleWidget::selectionChanged() {
     value_y->blockSignals(true);
     value_w->blockSignals(true);
     value_h->blockSignals(true);
-    kDebug() << "////////  SELECTION CHANGED; ITEMS: " << l.size();
+    //kDebug() << "////////  SELECTION CHANGED; ITEMS: " << l.size();
     if (l.size() == 1) {
         if ((l[0])->type() == 8) {
             rect_properties->setHidden(true);
@@ -409,7 +437,7 @@ void TitleWidget::selectionChanged() {
             //toolBox->setItemEnabled(3, true);
             rectFAlpha->setValue(rec->pen().color().alpha());
             rectBAlpha->setValue(rec->brush().color().alpha());
-            kDebug() << rec->brush().color().alpha();
+            //kDebug() << rec->brush().color().alpha();
             QColor fcol = rec->pen().color();
             QColor bcol = rec->brush().color();
             //fcol.setAlpha(255);
@@ -622,7 +650,7 @@ QDomDocument TitleWidget::xml() {
 }
 
 void TitleWidget::setXml(QDomDocument doc) {
-    m_titledocument.loadFromXml(doc, startViewport, endViewport);
+    m_count = m_titledocument.loadFromXml(doc, startViewport, endViewport);
     slotSelectTool();
 }
 
@@ -631,7 +659,7 @@ QPixmap TitleWidget::renderedPixmap() {
     pix.fill(Qt::transparent);
     QPainter painter(&pix);
     painter.setRenderHint(QPainter::Antialiasing);
-    m_scene->clearSelection();
+    m_scene->clearTextSelection();
     QPen framepen = m_frameBorder->pen();
     m_frameBorder->setPen(Qt::NoPen);
     startViewport->setVisible(false);
index 9bd79ed519beee1dbb5cc7321fc0e2a697d6c7e5..866d737d55ca316d8ec7b023cbafc45fd171f6c7 100644 (file)
@@ -43,10 +43,13 @@ public:
 
 class TitleWidget : public QDialog , public Ui::TitleWidget_UI {
     Q_OBJECT
+
 public:
     TitleWidget(KUrl url, QString projectPath, Render *render, QWidget *parent = 0);
     QDomDocument xml();
     void setXml(QDomDocument doc);
+    static QStringList getFreeTitleInfo(const KUrl &projectUrl);
+    static QString getTitleResourceFromName(const KUrl &projectUrl, const QString &titleName);
 
 protected:
     virtual void resizeEvent(QResizeEvent * event);
index 84f9ae785460351eab239b621e52432552af8927..b19935380aee63fc678d060ae92d579c649b50f5 100644 (file)
@@ -28,6 +28,9 @@
       <enum>QFrame::Sunken</enum>
      </property>
      <layout class="QGridLayout" name="gridLayout_4" >
+      <property name="margin" >
+       <number>2</number>
+      </property>
       <item row="0" column="0" >
        <layout class="QHBoxLayout" name="horizontalLayout_3" >
         <item>
       <enum>QFrame::Sunken</enum>
      </property>
      <layout class="QGridLayout" name="gridLayout_5" >
+      <property name="leftMargin" >
+       <number>2</number>
+      </property>
+      <property name="topMargin" >
+       <number>2</number>
+      </property>
+      <property name="rightMargin" >
+       <number>2</number>
+      </property>
       <item row="0" column="0" >
        <layout class="QHBoxLayout" name="horizontalLayout_4" >
         <item>
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>283</width>
-         <height>154</height>
+         <width>355</width>
+         <height>168</height>
         </rect>
        </property>
        <attribute name="label" >
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>283</width>
-         <height>154</height>
+         <width>355</width>
+         <height>158</height>
         </rect>
        </property>
        <attribute name="label" >
         <rect>
          <x>0</x>
          <y>0</y>
-         <width>264</width>
-         <height>212</height>
+         <width>336</width>
+         <height>210</height>
         </rect>
        </property>
        <attribute name="label" >
       <number>1</number>
      </property>
      <property name="maximum" >
-      <number>10</number>
+      <number>150</number>
      </property>
      <property name="pageStep" >
-      <number>2</number>
+      <number>30</number>
      </property>
      <property name="orientation" >
       <enum>Qt::Horizontal</enum>
       <enum>QFrame::Raised</enum>
      </property>
      <layout class="QGridLayout" name="gridLayout" >
+      <property name="margin" >
+       <number>2</number>
+      </property>
       <item row="0" column="0" >
        <layout class="QHBoxLayout" name="positionLayout" >
         <item>
     </widget>
    </item>
   </layout>
+  <zorder>rect_properties</zorder>
+  <zorder>text_properties</zorder>
+  <zorder>splitter</zorder>
+  <zorder>buttonFitZoom</zorder>
+  <zorder>buttonRealSize</zorder>
+  <zorder>zoom_slider</zorder>
+  <zorder>zoom_label</zorder>
+  <zorder>displayBg</zorder>
+  <zorder>buttonBox</zorder>
+  <zorder>frame_properties</zorder>
+  <zorder>frame_toolbar</zorder>
  </widget>
  <customwidgets>
   <customwidget>