[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdenlive/Applications/16.04] src: Move Clip Properties panel into its own dock, fixing several usab
From:       Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date:       2016-03-31 20:37:33
Message-ID: E1aljLR-0001XQ-MX () scm ! kde ! org
[Download RAW message or body]

Git commit cdceaa76a0decc3fd871ca7755e63cda8ccbc9e7 by Jean-Baptiste Mardelle.
Committed on 31/03/2016 at 19:59.
Pushed by mardelle into branch 'Applications/16.04'.

Move Clip Properties panel into its own dock, fixing several usability issues

M  +42   -39   src/bin/bin.cpp
M  +5    -3    src/bin/bin.h
M  +1    -1    src/mainwindow.cpp

http://commits.kde.org/kdenlive/cdceaa76a0decc3fd871ca7755e63cda8ccbc9e7

diff --git a/src/bin/bin.cpp b/src/bin/bin.cpp
index 4be55a3..0f32e07 100644
--- a/src/bin/bin.cpp
+++ b/src/bin/bin.cpp
@@ -280,12 +280,12 @@ Bin::Bin(QWidget* parent) :
   , m_invalidClipDialog(NULL)
   , m_gainedFocus(false)
 {
-    QVBoxLayout *layout = new QVBoxLayout(this);
+    m_layout = new QVBoxLayout(this);
 
     // Create toolbar for buttons
     m_toolbar = new KToolBar(this);
     m_toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly);
-    layout->addWidget(m_toolbar);
+    m_layout->addWidget(m_toolbar);
 
     // Search line
     m_proxyModel = new ProjectSortProxyModel(this);
@@ -413,15 +413,12 @@ Bin::Bin(QWidget* parent) :
 
     m_binTreeViewDelegate = new BinItemDelegate(this);
     //connect(pCore->projectManager(), SIGNAL(projectOpened(Project*)), this, \
                SLOT(setProject(Project*)));
-    m_splitter = new QSplitter(this);
     m_headerInfo = QByteArray::fromBase64(KdenliveSettings::treeviewheaders().toLatin1());
                
-    layout->addWidget(m_splitter);
     m_propertiesPanel = new QWidget(this);
-    m_splitter->addWidget(m_propertiesPanel);
 
     // Info widget for failed jobs, other errors
     m_infoMessage = new BinMessageWidget;
-    layout->addWidget(m_infoMessage);
+    m_layout->addWidget(m_infoMessage);
     m_infoMessage->setCloseButtonVisible(false);
     connect(m_infoMessage, SIGNAL(messageClosing()), this, \
SLOT(slotResetInfoMessage()));  //m_infoMessage->setWordWrap(true);
@@ -432,6 +429,7 @@ Bin::Bin(QWidget* parent) :
     connect(this, SIGNAL(requesteInvalidRemoval(QString,QUrl,QString)), this, \
                SLOT(slotQueryRemoval(QString,QUrl,QString)));
     connect(this, &Bin::refreshAudioThumbs, this, &Bin::doRefreshAudioThumbs);
     connect(this, SIGNAL(displayBinMessage(QString,KMessageWidget::MessageType)), \
this, SLOT(doDisplayMessage(QString,KMessageWidget::MessageType))); +    \
m_propertiesDock = pCore->window()->addDock(i18n("Clip Properties"), \
"clipProperties", m_propertiesPanel);  }
 
 Bin::~Bin()
@@ -1313,13 +1311,13 @@ void Bin::slotInitView(QAction *action)
 
     switch (m_listType) {
 	case BinIconView:
-	    m_itemView = new MyListView(m_splitter);
+	    m_itemView = new MyListView(this);
 	    m_folderUp = new ProjectFolderUp(NULL);
 	    m_showDate->setEnabled(false);
 	    m_showDesc->setEnabled(false);
 	    break;
 	default:
-	    m_itemView = new MyTreeView(m_splitter);
+	    m_itemView = new MyTreeView(this);
 	    m_showDate->setEnabled(true);
 	    m_showDesc->setEnabled(true);
 	    break;
@@ -1333,10 +1331,7 @@ void Bin::slotInitView(QAction *action)
     m_blankThumb.addPixmap(pix);
     m_itemView->setModel(m_proxyModel);
     m_itemView->setSelectionModel(m_proxyModel->selectionModel());
-    m_splitter->addWidget(m_itemView);
-    m_splitter->insertWidget(2, m_propertiesPanel);
-    m_splitter->setSizes(QList <int>() << 4 << 2);
-    m_propertiesPanel->hide();
+    m_layout->addWidget(m_itemView);
 
     // setup some default view specific parameters
     if (m_listType == BinTreeView) {
@@ -1539,12 +1534,25 @@ void Bin::slotItemDoubleClicked(const QModelIndex &ix, const \
QPoint pos)  m_itemView->edit(ix);
             return;
         }
-        m_editAction->trigger();
+        if (item->itemType() == AbstractProjectItem::ClipItem) {
+            ProjectClip *clip = static_cast<ProjectClip*>(item);
+            if (clip) {
+                if (clip->clipType() != Text) {
+                    m_editAction->trigger();
+                } else {
+                    m_propertiesPanel->setEnabled(false);
+                    showTitleWidget(clip);
+                }
+            }
+        }
     }
 }
 
-void Bin::slotSwitchClipProperties()
+void Bin::slotSwitchClipProperties(bool display)
 {
+    m_propertiesDock->toggleViewAction()->trigger();
+    if (display)
+        m_propertiesDock->raise();
     QModelIndex current = m_proxyModel->selectionModel()->currentIndex();
     slotSwitchClipProperties(current);
 }
@@ -1553,40 +1561,30 @@ void Bin::slotSwitchClipProperties(const QModelIndex &ix)
 {
     if (ix.isValid()) {
         // User clicked in the icon, open clip properties
-        if (m_propertiesPanel->isHidden()) {
-	    AbstractProjectItem *item = \
                static_cast<AbstractProjectItem*>(m_proxyModel->mapToSource(ix).internalPointer());
                
-            ProjectClip *clip = qobject_cast<ProjectClip*>(item);
-            if (clip && clip->clipType() == Text) {
-		m_propertiesPanel->hide();
-	    } else {
-		m_propertiesPanel->setEnabled(true);
-		m_propertiesPanel->show();
-		
-	    }
-            showClipProperties(clip);
+        AbstractProjectItem *item = \
static_cast<AbstractProjectItem*>(m_proxyModel->mapToSource(ix).internalPointer()); + \
ProjectClip *clip = qobject_cast<ProjectClip*>(item); +        if (clip && \
clip->clipType() == Text) { +            m_propertiesPanel->setEnabled(false);
+        } else {
+            m_propertiesPanel->setEnabled(true);
         }
-        else m_propertiesPanel->hide();
+        showClipProperties(clip);
     }
     else {
-        if (m_propertiesPanel->isHidden()) {
-            showClipProperties(NULL);
-        }
-        else m_propertiesPanel->hide();
+        m_propertiesPanel->setEnabled(false);
     }
 }
 
-void Bin::doRefreshPanel(const QString &id) {
-    if (m_editAction->isChecked()) {
-        ProjectClip *currentItem = getFirstSelectedClip();
-        if (currentItem && currentItem->clipId() == id) {
-            showClipProperties(currentItem, true);
-        }
+void Bin::doRefreshPanel(const QString &id)
+{
+    ProjectClip *currentItem = getFirstSelectedClip();
+    if (currentItem && currentItem->clipId() == id) {
+        showClipProperties(currentItem, true);
     }
 }
 
 void Bin::showClipProperties(ProjectClip *clip, bool forceRefresh, bool \
openExternalDialog )  {
-    if (!m_editAction->isChecked()) return;
     if (!clip) {
         m_propertiesPanel->setEnabled(false);
         return;
@@ -1597,8 +1595,11 @@ void Bin::showClipProperties(ProjectClip *clip, bool \
forceRefresh, bool openExte  }
     // Special case: text clips open title widget
     if (clip->clipType() == Text) {
+        foreach (QWidget * w, \
m_propertiesPanel->findChildren<ClipPropertiesController*>()) { +            delete \
w; +        }
+        m_propertiesPanel->setProperty("clipId", clip->clipId());
         m_propertiesPanel->setEnabled(false);
-        if (openExternalDialog) showTitleWidget(clip);
         return;
     }
     if (clip->clipType() == SlideShow) {
@@ -1606,6 +1607,7 @@ void Bin::showClipProperties(ProjectClip *clip, bool \
                forceRefresh, bool openExte
         foreach (QWidget * w, \
m_propertiesPanel->findChildren<ClipPropertiesController*>()) {  delete w;
         }
+        m_propertiesPanel->setProperty("clipId", clip->clipId());
         m_propertiesPanel->setEnabled(false);
         showSlideshowWidget(clip);
         return;
@@ -1615,11 +1617,11 @@ void Bin::showClipProperties(ProjectClip *clip, bool \
                forceRefresh, bool openExte
         foreach (QWidget * w, \
m_propertiesPanel->findChildren<ClipPropertiesController*>()) {  delete w;
         }
+        m_propertiesPanel->setProperty("clipId", clip->clipId());
         m_propertiesPanel->setEnabled(false);
         ClipCreationDialog::createQTextClip(m_doc, getFolderInfo(), this, clip);
         return;
     }
-    m_propertiesPanel->show();
     QString panelId = m_propertiesPanel->property("clipId").toString();
     if (!forceRefresh && panelId == clip->clipId()) {
         // the properties panel is already displaying current clip, do nothing
@@ -1901,6 +1903,7 @@ void Bin::setupMenu(QMenu *addMenu, QAction *defaultAction, \
QHash <QString, QAct  m_addButton->setPopupMode(QToolButton::MenuButtonPopup);
     m_toolbar->insertWidget(folder, m_addButton);
     m_menu = new QMenu();
+    connect(m_propertiesDock, &QDockWidget::visibilityChanged, m_editAction, \
&QAction::setChecked);  //m_menu->addActions(addMenu->actions());
 }
 
diff --git a/src/bin/bin.h b/src/bin/bin.h
index b6633ed..739aca7 100644
--- a/src/bin/bin.h
+++ b/src/bin/bin.h
@@ -41,8 +41,9 @@ along with this program.  If not, see \
<http://www.gnu.org/licenses/>.  #include <QLineEdit>
 
 class KdenliveDoc;
+class QVBoxLayout;
 class ClipController;
-class QSplitter;
+class QDockWidget;
 class QTimeLine;
 class KToolBar;
 class QMenu;
@@ -576,7 +577,7 @@ public slots:
     void slotRefreshClipProperties();
     void slotItemDoubleClicked(const QModelIndex &ix, const QPoint pos);
     void slotSwitchClipProperties(const QModelIndex &ix);
-    void slotSwitchClipProperties();
+    void slotSwitchClipProperties(bool display = true);
     /** @brief Creates a new folder with optional name, and returns new folder's id \
*/  QString slotAddFolder(const QString &folderName = QString());
     void slotCreateProjectClip();
@@ -641,7 +642,6 @@ private:
     QAction *m_inTimelineAction;
     QAction *m_showDate;
     QAction *m_showDesc;
-    QSplitter *m_splitter;
     /** @brief Holds an available unique id for a clip to be created */
     int m_clipCounter;
     /** @brief Holds an available unique id for a folder to be created */
@@ -652,6 +652,8 @@ private:
     QSize m_iconSize;
     /** @brief Keeps the column width info of the tree view. */
     QByteArray m_headerInfo;
+    QVBoxLayout *m_layout;
+    QDockWidget *m_propertiesDock;
     QWidget *m_propertiesPanel;
     QSlider *m_slider;
     Monitor *m_monitor;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 609fcca..d10d8d3 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1331,7 +1331,7 @@ void MainWindow::setupActions()
     QAction *addFolder = addAction(QStringLiteral("add_folder"), i18n("Create \
Folder"), pCore->bin(), SLOT(slotAddFolder()), \
KoIconUtils::themedIcon(QStringLiteral("folder-new")));  \
addClips->addAction(addAction(QStringLiteral("download_resource"), i18n("Online \
Resources"), this, SLOT(slotDownloadResources()), \
KoIconUtils::themedIcon(QStringLiteral("edit-download"))));  
-    QAction *clipProperties = addAction(QStringLiteral("clip_properties"), \
i18n("Clip Properties"), pCore->bin(), SLOT(slotSwitchClipProperties()), \
KoIconUtils::themedIcon(QStringLiteral("document-edit"))); +    QAction \
*clipProperties = addAction(QStringLiteral("clip_properties"), i18n("Clip \
Properties"), pCore->bin(), SLOT(slotSwitchClipProperties(bool)), \
KoIconUtils::themedIcon(QStringLiteral("document-edit")));  \
clipProperties->setCheckable(true);  clipProperties->setData("clip_properties");
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic