]> git.sesse.net Git - kdenlive/blobdiff - src/dvdwizardmenu.cpp
Fix freeze on reloading a missing clip, don't reload twice missing clips that were...
[kdenlive] / src / dvdwizardmenu.cpp
index 4a90c50aa4fa6c9e45bc2fe97721069926712d53..e1318540cd889cc46a5c116472080ea351353f90 100644 (file)
  ***************************************************************************/
 
 #include "dvdwizardmenu.h"
+#include "kdenlivesettings.h"
 
 #include <KDebug>
 #include <KColorScheme>
+#include "kthumb.h"
 
 DvdWizardMenu::DvdWizardMenu(const QString &profile, QWidget *parent) :
         QWizardPage(parent),
@@ -34,6 +36,14 @@ DvdWizardMenu::DvdWizardMenu(const QString &profile, QWidget *parent) :
     m_view.menu_preview->setMouseTracking(true);
     connect(m_view.create_menu, SIGNAL(toggled(bool)), m_view.menu_box, SLOT(setEnabled(bool)));
     connect(m_view.create_menu, SIGNAL(toggled(bool)), this, SIGNAL(completeChanged()));
+    
+#if KDE_IS_VERSION(4,7,0)
+    m_menuMessage = new KMessageWidget;
+    QGridLayout *s =  static_cast <QGridLayout*> (layout());
+    s->addWidget(m_menuMessage, 7, 0, 1, -1);
+    m_menuMessage->hide();
+    m_view.error_message->hide();
+#endif
 
     m_view.add_button->setIcon(KIcon("document-new"));
     m_view.delete_button->setIcon(KIcon("trash-empty"));
@@ -48,7 +58,6 @@ DvdWizardMenu::DvdWizardMenu(const QString &profile, QWidget *parent) :
     } else changeProfile(true);
 
 
-
     // Create color background
     m_color = new QGraphicsRectItem(0, 0, m_width, m_height);
     m_color->setBrush(m_view.background_color->color());
@@ -111,7 +120,7 @@ DvdWizardMenu::DvdWizardMenu(const QString &profile, QWidget *parent) :
     connect(m_scene, SIGNAL(changed(const QList<QRectF> &)), this, SIGNAL(completeChanged()));
 
     // red background for error message
-    KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window);
+    KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window, KSharedConfig::openConfig(KdenliveSettings::colortheme()));
     QPalette p = m_view.error_message->palette();
     p.setColor(QPalette::Background, scheme.background(KColorScheme::NegativeBackground).color());
     m_view.error_message->setAutoFillBackground(true);
@@ -147,8 +156,14 @@ bool DvdWizardMenu::isComplete() const
             if (!collisions.isEmpty()) {
                 for (int j = 0; j < collisions.count(); j++) {
                     if (collisions.at(j)->type() == button->type()) {
+#if KDE_IS_VERSION(4,7,0)
+                        m_menuMessage->setText(i18n("Buttons overlapping"));
+                        m_menuMessage->setMessageType(KMessageWidget::Warning);
+                        m_menuMessage->animatedShow();
+#else
                         m_view.error_message->setText(i18n("Buttons overlapping"));
                         m_view.error_message->setHidden(false);
+#endif
                         return false;
                     }
                 }
@@ -157,20 +172,36 @@ bool DvdWizardMenu::isComplete() const
         }
     }
     if (buttonCount == 0) {
-        // We need at least one button
+        //We need at least one button
+#if KDE_IS_VERSION(4,7,0)
+        m_menuMessage->setText(i18n("No button in menu"));
+        m_menuMessage->setMessageType(KMessageWidget::Warning);
+        m_menuMessage->animatedShow();
+#else
         m_view.error_message->setText(i18n("No button in menu"));
         m_view.error_message->setHidden(false);
+#endif
         return false;
     }
 
     if (!m_view.background_image->isHidden()) {
         // Make sure user selected a valid image / video file
         if (!QFile::exists(m_view.background_image->url().path())) {
+#if KDE_IS_VERSION(4,7,0)
+            m_menuMessage->setText(i18n("Missing background image"));
+            m_menuMessage->setMessageType(KMessageWidget::Warning);
+            m_menuMessage->animatedShow();
+#else
             m_view.error_message->setText(i18n("Missing background image"));
             m_view.error_message->setHidden(false);
+#endif
             return false;
         }
     }
+    
+#if KDE_IS_VERSION(4,7,0)
+    m_menuMessage->animatedHide();
+#endif
 
     // check that we have a "Play all" entry
     if (targets.contains(0)) return true;
@@ -178,8 +209,14 @@ bool DvdWizardMenu::isComplete() const
     for (int i = m_view.target_list->count() - 1; i > 0; i--) {
         // If there is a vob file entry and it has no button assigned, don't allow to go further
         if (m_view.target_list->itemIcon(i).isNull() == false && !targets.contains(i)) {
+#if KDE_IS_VERSION(4,7,0)
+            m_menuMessage->setText(i18n("No menu entry for %1", m_view.target_list->itemText(i)));
+            m_menuMessage->setMessageType(KMessageWidget::Warning);
+            m_menuMessage->animatedShow();
+#else
             m_view.error_message->setText(i18n("No menu entry for %1", m_view.target_list->itemText(i)));
             m_view.error_message->setHidden(false);
+#endif
             return false;
         }
     }
@@ -276,14 +313,11 @@ void DvdWizardMenu::changeProfile(bool isPal)
     if (isPal == false) {
         m_width = 720;
         m_height = 480;
-        m_isPal = false;
-        updatePreview();
     } else {
         m_width = 720;
         m_height = 576;
-        m_isPal = true;
-        updatePreview();
     }
+    updatePreview();
 }
 
 void DvdWizardMenu::updatePreview()
@@ -304,7 +338,7 @@ void DvdWizardMenu::updatePreview()
 void DvdWizardMenu::setTargets(QStringList list, QStringList targetlist)
 {
     m_view.target_list->clear();
-    m_view.target_list->addItem(i18n("Play All"), "title 1");
+    m_view.target_list->addItem(i18n("Play All"), "jump title 1");
     int movieCount = 0;
     for (int i = 0; i < list.count(); i++) {
         if (targetlist.at(i).contains("chapter"))
@@ -322,16 +356,21 @@ void DvdWizardMenu::checkBackgroundType(int ix)
     if (ix == 0) {
         m_view.background_color->setVisible(true);
         m_view.background_image->setVisible(false);
+        m_view.loop_movie->setVisible(false);
         if (m_background->scene() != 0) m_scene->removeItem(m_background);
     } else {
         m_view.background_color->setVisible(false);
         m_view.background_image->setVisible(true);
         if (ix == 1) {
+            m_view.background_image->clear();
             m_view.background_image->setFilter("*");
-            m_scene->addItem(m_background);
+            if (m_background->scene() != 0) m_scene->removeItem(m_background);
+            m_view.loop_movie->setVisible(false);
         } else {
             if (m_background->scene() != 0) m_scene->removeItem(m_background);
+            m_view.background_image->clear();
             m_view.background_image->setFilter("video/mpeg");
+            m_view.loop_movie->setVisible(true);
         }
     }
 }
@@ -349,13 +388,24 @@ void DvdWizardMenu::buildImage()
         return;
     }
     QPixmap pix;
-    if (!pix.load(m_view.background_image->url().path())) {
-        if (m_background->scene() != 0) m_scene->removeItem(m_background);
-        return;
+
+    if (m_view.background_list->currentIndex() == 1) {
+        // image background
+        if (!pix.load(m_view.background_image->url().path())) {
+            if (m_background->scene() != 0) m_scene->removeItem(m_background);
+            return;
+        }
+        pix = pix.scaled(m_width, m_height);
+    } else if (m_view.background_list->currentIndex() == 2) {
+        // video background
+        int w;
+        if (m_isPal) w = 768;
+        else w = 640;
+        pix = KThumb::getImage(m_view.background_image->url(), 0, w, m_height);
+        pix = pix.scaled(m_width, m_height);
     }
-    pix = pix.scaled(m_width, m_height);
     m_background->setPixmap(pix);
-    if (m_view.background_list->currentIndex() == 1) m_scene->addItem(m_background);
+    m_scene->addItem(m_background);
 }
 
 void DvdWizardMenu::checkBackground()
@@ -409,70 +459,59 @@ void DvdWizardMenu::createButtonImages(const QString &img1, const QString &img2,
 {
     if (m_view.create_menu->isChecked()) {
         m_scene->clearSelection();
-        QImage img(m_width, m_height, QImage::Format_ARGB8555_Premultiplied);
-        QPainter p(&img);
-        p.setRenderHints(QPainter::Antialiasing, false);
-        p.setRenderHints(QPainter::TextAntialiasing, false);
         if (m_safeRect->scene() != 0) m_scene->removeItem(m_safeRect);
         if (m_color->scene() != 0) m_scene->removeItem(m_color);
         if (m_background->scene() != 0) m_scene->removeItem(m_background);
+        
+        QImage img(m_width, m_height, QImage::Format_Mono);
+        img.fill(Qt::white);
+        updateColor(Qt::black);
+        QPainter p(&img);
+        p.setRenderHints(QPainter::Antialiasing, false);
+        p.setRenderHints(QPainter::TextAntialiasing, false);
         m_scene->render(&p, QRectF(0, 0, m_width, m_height));
         p.end();
 #if QT_VERSION >= 0x040600
-        img.setColorCount(4);
+        img.setColor(0, m_view.text_color->color().rgb());
+        img.setColor(1, qRgba(0,0,0,0));
 #else
         img.setNumColors(4);
 #endif
         img.save(img1);
-        /*QImage saved;
-        if (m_view.menu_profile->currentIndex() < 2)
-            saved = img.scaled(720, 576);
-        else saved = img.scaled(720, 480);
-        saved.setNumColors(4);
-        saved.save(img1);*/
-
-        updateColor(m_view.selected_color->color());
+
+        img.fill(Qt::white);
         p.begin(&img);
         p.setRenderHints(QPainter::Antialiasing, false);
         p.setRenderHints(QPainter::TextAntialiasing, false);
         m_scene->render(&p, QRectF(0, 0, m_width, m_height));
         p.end();
-        /*        if (m_view.menu_profile->currentIndex() < 2)
-                    saved = img.scaled(720, 576);
-                else saved = img.scaled(720, 480);
-                saved.setNumColors(4);
-                saved.save(img2);*/
 #if QT_VERSION >= 0x040600
-        img.setColorCount(4);
+        img.setColor(0, m_view.highlighted_color->color().rgb());
+        img.setColor(1, qRgba(0,0,0,0));
 #else
         img.setNumColors(4);
 #endif
-        img.save(img2);
-
+        img.save(img3);        
 
-        updateColor(m_view.highlighted_color->color());
+        img.fill(Qt::white);
         p.begin(&img);
         p.setRenderHints(QPainter::Antialiasing, false);
         p.setRenderHints(QPainter::TextAntialiasing, false);
         m_scene->render(&p, QRectF(0, 0, m_width, m_height));
         p.end();
-        /*if (m_view.menu_profile->currentIndex() < 2)
-            saved = img.scaled(720, 576);
-        else saved = img.scaled(720, 480);
-        saved.setNumColors(4);
-        saved.save(img3);*/
+
 #if QT_VERSION >= 0x040600
-        img.setColorCount(4);
+        img.setColor(0, m_view.selected_color->color().rgb());
+        img.setColor(1, qRgba(0,0,0,0));
 #else
         img.setNumColors(4);
 #endif
-        img.save(img3);
-
+        img.save(img2);
         updateColor();
 
         m_scene->addItem(m_safeRect);
         m_scene->addItem(m_color);
-        if (m_view.background_list->currentIndex() == 1) m_scene->addItem(m_background);
+        if (m_view.background_list->currentIndex() > 0) m_scene->addItem(m_background);
     }
 }
 
@@ -505,6 +544,11 @@ bool DvdWizardMenu::createMenu() const
     return m_view.create_menu->isChecked();
 }
 
+bool DvdWizardMenu::loopMovie() const
+{
+    return m_view.loop_movie->isChecked();
+}
+
 bool DvdWizardMenu::menuMovie() const
 {
     return m_view.background_list->currentIndex() == 2;
@@ -632,7 +676,6 @@ void DvdWizardMenu::loadXml(QDomElement xml)
         button->setBackMenu(e.attribute("backtomenu").toInt());
         button->setDefaultTextColor(m_view.text_color->color());
         button->setZValue(4);
-        QRectF r = button->sceneBoundingRect();
         m_scene->addItem(button);
         button->setPos(e.attribute("posx").toDouble(), e.attribute("posy").toDouble());