From kde-commits Thu Mar 31 20:37:33 2016 From: Jean-Baptiste Mardelle Date: Thu, 31 Mar 2016 20:37:33 +0000 To: kde-commits Subject: [kdenlive/Applications/16.04] src: Move Clip Properties panel into its own dock, fixing several usab Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=145945666301243 Git commit cdceaa76a0decc3fd871ca7755e63cda8ccbc9e7 by Jean-Baptiste Mardel= le. 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 issu= es 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 =3D new QVBoxLayout(this); + m_layout =3D new QVBoxLayout(this); = // Create toolbar for buttons m_toolbar =3D new KToolBar(this); m_toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); - layout->addWidget(m_toolbar); + m_layout->addWidget(m_toolbar); = // Search line m_proxyModel =3D new ProjectSortProxyModel(this); @@ -413,15 +413,12 @@ Bin::Bin(QWidget* parent) : = m_binTreeViewDelegate =3D new BinItemDelegate(this); //connect(pCore->projectManager(), SIGNAL(projectOpened(Project*)), th= is, SLOT(setProject(Project*))); - m_splitter =3D new QSplitter(this); m_headerInfo =3D QByteArray::fromBase64(KdenliveSettings::treeviewhead= ers().toLatin1()); - layout->addWidget(m_splitter); m_propertiesPanel =3D new QWidget(this); - m_splitter->addWidget(m_propertiesPanel); = // Info widget for failed jobs, other errors m_infoMessage =3D new BinMessageWidget; - layout->addWidget(m_infoMessage); + m_layout->addWidget(m_infoMessage); m_infoMessage->setCloseButtonVisible(false); connect(m_infoMessage, SIGNAL(messageClosing()), this, SLOT(slotResetI= nfoMessage())); //m_infoMessage->setWordWrap(true); @@ -432,6 +429,7 @@ Bin::Bin(QWidget* parent) : connect(this, SIGNAL(requesteInvalidRemoval(QString,QUrl,QString)), th= is, SLOT(slotQueryRemoval(QString,QUrl,QString))); connect(this, &Bin::refreshAudioThumbs, this, &Bin::doRefreshAudioThum= bs); connect(this, SIGNAL(displayBinMessage(QString,KMessageWidget::Message= Type)), this, SLOT(doDisplayMessage(QString,KMessageWidget::MessageType))); + m_propertiesDock =3D 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 =3D new MyListView(m_splitter); + m_itemView =3D new MyListView(this); m_folderUp =3D new ProjectFolderUp(NULL); m_showDate->setEnabled(false); m_showDesc->setEnabled(false); break; default: - m_itemView =3D new MyTreeView(m_splitter); + m_itemView =3D 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 () << 4 << 2); - m_propertiesPanel->hide(); + m_layout->addWidget(m_itemView); = // setup some default view specific parameters if (m_listType =3D=3D 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() =3D=3D AbstractProjectItem::ClipItem) { + ProjectClip *clip =3D static_cast(item); + if (clip) { + if (clip->clipType() !=3D 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 =3D m_proxyModel->selectionModel()->currentIndex(); slotSwitchClipProperties(current); } @@ -1553,40 +1561,30 @@ void Bin::slotSwitchClipProperties(const QModelInde= x &ix) { if (ix.isValid()) { // User clicked in the icon, open clip properties - if (m_propertiesPanel->isHidden()) { - AbstractProjectItem *item =3D static_cast(m_pro= xyModel->mapToSource(ix).internalPointer()); - ProjectClip *clip =3D qobject_cast(item); - if (clip && clip->clipType() =3D=3D Text) { - m_propertiesPanel->hide(); - } else { - m_propertiesPanel->setEnabled(true); - m_propertiesPanel->show(); - = - } - showClipProperties(clip); + AbstractProjectItem *item =3D static_cast(m_= proxyModel->mapToSource(ix).internalPointer()); + ProjectClip *clip =3D qobject_cast(item); + if (clip && clip->clipType() =3D=3D 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 =3D getFirstSelectedClip(); - if (currentItem && currentItem->clipId() =3D=3D id) { - showClipProperties(currentItem, true); - } +void Bin::doRefreshPanel(const QString &id) +{ + ProjectClip *currentItem =3D getFirstSelectedClip(); + if (currentItem && currentItem->clipId() =3D=3D id) { + showClipProperties(currentItem, true); } } = void Bin::showClipProperties(ProjectClip *clip, bool forceRefresh, bool op= enExternalDialog ) { - 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() =3D=3D Text) { + foreach (QWidget * w, m_propertiesPanel->findChildren()) { + delete w; + } + m_propertiesPanel->setProperty("clipId", clip->clipId()); m_propertiesPanel->setEnabled(false); - if (openExternalDialog) showTitleWidget(clip); return; } if (clip->clipType() =3D=3D SlideShow) { @@ -1606,6 +1607,7 @@ void Bin::showClipProperties(ProjectClip *clip, bool = forceRefresh, bool openExte foreach (QWidget * w, m_propertiesPanel->findChildren()) { delete w; } + m_propertiesPanel->setProperty("clipId", clip->clipId()); m_propertiesPanel->setEnabled(false); showSlideshowWidget(clip); return; @@ -1615,11 +1617,11 @@ void Bin::showClipProperties(ProjectClip *clip, boo= l forceRefresh, bool openExte foreach (QWidget * w, m_propertiesPanel->findChildren()) { 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 =3D m_propertiesPanel->property("clipId").toString(); if (!forceRefresh && panelId =3D=3D clip->clipId()) { // the properties panel is already displaying current clip, do not= hing @@ -1901,6 +1903,7 @@ void Bin::setupMenu(QMenu *addMenu, QAction *defaultA= ction, QHash setPopupMode(QToolButton::MenuButtonPopup); m_toolbar->insertWidget(folder, m_addButton); m_menu =3D new QMenu(); + connect(m_propertiesDock, &QDockWidget::visibilityChanged, m_editActio= n, &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 . #include = 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 =3D true); /** @brief Creates a new folder with optional name, and returns new fo= lder's id */ QString slotAddFolder(const QString &folderName =3D 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 =3D addAction(QStringLiteral("add_folder"), i18n("C= reate Folder"), pCore->bin(), SLOT(slotAddFolder()), KoIconUtils::themedIco= n(QStringLiteral("folder-new"))); addClips->addAction(addAction(QStringLiteral("download_resource"), i18= n("Online Resources"), this, SLOT(slotDownloadResources()), KoIconUtils::th= emedIcon(QStringLiteral("edit-download")))); = - QAction *clipProperties =3D addAction(QStringLiteral("clip_properties"= ), i18n("Clip Properties"), pCore->bin(), SLOT(slotSwitchClipProperties()),= KoIconUtils::themedIcon(QStringLiteral("document-edit"))); + QAction *clipProperties =3D addAction(QStringLiteral("clip_properties"= ), i18n("Clip Properties"), pCore->bin(), SLOT(slotSwitchClipProperties(boo= l)), KoIconUtils::themedIcon(QStringLiteral("document-edit"))); clipProperties->setCheckable(true); clipProperties->setData("clip_properties"); =