[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