[vlc-devel] [PATCH 15/16] qt: Add toolbar editor (native)

Rohan Rajpal rohan17089 at iiitd.ac.in
Wed Jul 31 14:30:55 CEST 2019


Add the native part of the toolbar editor.
This part has the window and a few widgets.
---
 modules/gui/qt/Makefile.am               |   2 +
 modules/gui/qt/dialogs/toolbareditor.cpp | 180 +++++++++++++++++++++++
 modules/gui/qt/dialogs/toolbareditor.hpp |  57 +++++++
 modules/gui/qt/dialogs_provider.cpp      |   4 +-
 4 files changed, 242 insertions(+), 1 deletion(-)
 create mode 100644 modules/gui/qt/dialogs/toolbareditor.cpp
 create mode 100644 modules/gui/qt/dialogs/toolbareditor.hpp

diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index 5842b1fcbd..afbadf0bb8 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -70,6 +70,7 @@ libqt_plugin_la_SOURCES = \
 	gui/qt/dialogs/help.cpp gui/qt/dialogs/help.hpp \
 	gui/qt/dialogs/gototime.cpp gui/qt/dialogs/gototime.hpp \
 	gui/qt/dialogs/toolbar.cpp gui/qt/dialogs/toolbar.hpp \
+	gui/qt/dialogs/toolbareditor.cpp gui/qt/dialogs/toolbareditor.hpp \
 	gui/qt/dialogs/open.cpp gui/qt/dialogs/open.hpp \
 	gui/qt/dialogs/openurl.cpp gui/qt/dialogs/openurl.hpp \
 	gui/qt/dialogs/vlm.cpp gui/qt/dialogs/vlm.hpp \
@@ -242,6 +243,7 @@ nodist_libqt_plugin_la_SOURCES = \
 	gui/qt/dialogs/help.moc.cpp \
 	gui/qt/dialogs/gototime.moc.cpp \
 	gui/qt/dialogs/toolbar.moc.cpp \
+	gui/qt/dialogs/toolbareditor.moc.cpp \
 	gui/qt/dialogs/open.moc.cpp \
 	gui/qt/dialogs/openurl.moc.cpp \
 	gui/qt/dialogs/podcast_configuration.moc.cpp \
diff --git a/modules/gui/qt/dialogs/toolbareditor.cpp b/modules/gui/qt/dialogs/toolbareditor.cpp
new file mode 100644
index 0000000000..bc44c049bf
--- /dev/null
+++ b/modules/gui/qt/dialogs/toolbareditor.cpp
@@ -0,0 +1,180 @@
+/*****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "dialogs/toolbareditor.hpp"
+#include "components/settings.hpp"
+#include "components/playercontrolbarmodel.hpp"
+#include "main_interface.hpp"
+
+#include <QInputDialog>
+#include <QtQml/QQmlContext>
+
+#define PROFILE_NAME_1 "Minimalist Style"
+#define VALUE_1 "0;64;3;1;4;64;11;64;34;64;9;64;33"
+#define PROFILE_NAME_2 "One-Liner Style"
+#define VALUE_2 "0;64;3;1;4;64;7;9;8;64;64;11;10;12;13;65;33"
+#define PROFILE_NAME_3 "Simplest Style"
+#define VALUE_3 "33;65;0;4;1;65;7"
+
+ToolbarEditorDialog::ToolbarEditorDialog( QWidget *_w, intf_thread_t *_p_intf)
+    : QVLCDialog( _w,  _p_intf )
+{
+    setWindowTitle( qtr( "Toolbars Editor" ) );
+    setWindowRole( "vlc-toolbars-editor" );
+    setMinimumWidth( 800 );
+    setMinimumHeight( 500 );
+
+    /* Profile */
+    QGridLayout *mainLayout = new QGridLayout( this );
+    QHBoxLayout *profileBoxLayout = new QHBoxLayout();
+
+    profileCombo = new QComboBox;
+
+    QToolButton *newButton = new QToolButton;
+    newButton->setIcon( QIcon( ":/new.svg" ) );
+    newButton->setToolTip( qtr("New profile") );
+    QToolButton *deleteButton = new QToolButton;
+    deleteButton->setIcon( QIcon( ":/toolbar/clear.svg" ) );
+    deleteButton->setToolTip( qtr( "Delete the current profile" ) );
+
+    profileBoxLayout->addWidget( new QLabel( qtr( "Select profile:" ) ) );
+    profileBoxLayout->addWidget( profileCombo );
+    profileBoxLayout->addWidget( newButton );
+    profileBoxLayout->addWidget( deleteButton );
+
+    mainLayout->addLayout( profileBoxLayout, 0, 0, 1, 9 );
+
+    /* Fill combos */
+    int i_size = getSettings()->beginReadArray( "ToolbarProfiles" );
+    for( int i = 0; i < i_size; i++ )
+    {
+        getSettings()->setArrayIndex(i);
+        profileCombo->addItem( getSettings()->value( "ProfileName" ).toString(),
+                               getSettings()->value( "Value" ).toString() );
+    }
+    getSettings()->endArray();
+
+    /* Load defaults ones if we have no combos */
+    if( i_size == 0 )
+    {
+        profileCombo->addItem( PROFILE_NAME_1, QString( VALUE_1 ) );
+        profileCombo->addItem( PROFILE_NAME_2, QString( VALUE_2 ) );
+        profileCombo->addItem( PROFILE_NAME_3, QString( VALUE_3 ) );
+    }
+    profileCombo->setCurrentIndex( -1 );
+
+    /* Drag and Drop */
+    editorView = new QQuickWidget(p_intf->p_sys->p_mi->getEngine(),this);
+    editorView->setClearColor(Qt::transparent);
+    QQmlContext *rootCtx = editorView->rootContext();
+    QQmlContext *p_mi_rootCtx = p_intf->p_sys->p_mi->getRootCtx();
+
+    rootCtx->setContextProperty( "mainctx", p_mi_rootCtx->contextProperty("mainctx"));
+    rootCtx->setContextProperty( "player", p_mi_rootCtx->contextProperty("player") );
+    rootCtx->setContextProperty( "settings",  p_mi_rootCtx->contextProperty("settings"));
+    rootCtx->setContextProperty( "medialib",  p_mi_rootCtx->contextProperty("medialib"));
+    rootCtx->setContextProperty( "recentsMedias",  p_mi_rootCtx->contextProperty("recentsMedias"));
+    rootCtx->setContextProperty( "rootWindow",  p_mi_rootCtx->contextProperty("rootWindow"));
+    rootCtx->setContextProperty( "toolbareditor",  this);
+
+    editorView->setSource( QUrl ( QStringLiteral("qrc:/dialogs/ToolbarEditor.qml") ) );
+
+    mainLayout->addWidget(editorView, 0, 0);
+
+    editorView->setResizeMode( QQuickWidget::SizeRootObjectToView );
+
+    mainLayout->addWidget( editorView, 1, 0, 1, 9 );
+    editorView->show();
+
+    /* Buttons */
+    QDialogButtonBox *okCancel = new QDialogButtonBox;
+    QPushButton *okButton = new QPushButton( qtr( "Cl&ose" ), this );
+    okButton->setDefault( true );
+    QPushButton *cancelButton = new QPushButton( qtr( "&Cancel" ), this );
+    okCancel->addButton( okButton, QDialogButtonBox::AcceptRole );
+    okCancel->addButton( cancelButton, QDialogButtonBox::RejectRole );
+
+    BUTTONACT( deleteButton, deleteProfile() );
+    BUTTONACT( newButton, newProfile() );
+    CONNECT( profileCombo, currentIndexChanged( int ), this, changeProfile( int ) );
+    BUTTONACT( okButton, close() );
+    BUTTONACT( cancelButton, cancel() );
+    mainLayout->addWidget( okCancel, 2, 0, 1, 9 );
+}
+ToolbarEditorDialog::~ToolbarEditorDialog()
+{
+    getSettings()->beginWriteArray( "ToolbarProfiles" );
+    for( int i = 0; i < profileCombo->count(); i++ )
+    {
+        getSettings()->setArrayIndex(i);
+        getSettings()->setValue( "ProfileName", profileCombo->itemText( i ) );
+        getSettings()->setValue( "Value", profileCombo->itemData( i ) );
+    }
+    getSettings()->endArray();
+}
+
+void ToolbarEditorDialog::close()
+{
+    emit saveConfig();
+    accept();
+}
+
+void ToolbarEditorDialog::cancel()
+{
+    reject();
+}
+
+void ToolbarEditorDialog::newProfile()
+{
+    bool ok;
+    QString name =  QInputDialog::getText( this, qtr( "Profile Name" ),
+                                           qtr( "Please enter the new profile name." ), QLineEdit::Normal, 0, &ok );
+    if( !ok ) return;
+
+    QVariant config;
+    QMetaObject::invokeMethod(editorView->rootObject(),"getConfig",
+                              Q_RETURN_ARG(QVariant, config));
+
+    profileCombo->addItem( name, config.toString() );
+    profileCombo->setCurrentIndex( profileCombo->count() - 1 );
+}
+
+void ToolbarEditorDialog::deleteProfile()
+{
+    profileCombo->removeItem( profileCombo->currentIndex() );
+}
+
+void ToolbarEditorDialog::changeProfile( int i )
+{
+    QString config = profileCombo->itemData( i ).toString();
+    emit updatePlayerModel(config);
+}
+
+void ToolbarEditorDialog::deleteCursor()
+{
+    QApplication::setOverrideCursor(Qt::ForbiddenCursor);
+}
+
+void ToolbarEditorDialog::restoreCursor()
+{
+    QApplication::restoreOverrideCursor();
+}
diff --git a/modules/gui/qt/dialogs/toolbareditor.hpp b/modules/gui/qt/dialogs/toolbareditor.hpp
new file mode 100644
index 0000000000..be27ff6ac2
--- /dev/null
+++ b/modules/gui/qt/dialogs/toolbareditor.hpp
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef QVLC_TOOLBAREDITOR_DIALOG_H_
+#define QVLC_TOOLBAREDITOR_DIALOG_H_ 1
+
+#include "util/qvlcframe.hpp"                                 /* QVLCDialog */
+#include "components/qml_main_context.hpp"
+#include "components/sout/profile_selector.hpp"
+
+#include <QAbstractListModel>
+#include <QVector>
+#include <QQuickWidget>
+
+class ToolbarEditorDialog : public QVLCDialog
+{
+    Q_OBJECT
+public:
+    ToolbarEditorDialog( QWidget *, intf_thread_t *);
+    virtual ~ToolbarEditorDialog();
+
+public slots:
+    Q_INVOKABLE void close();
+    Q_INVOKABLE void cancel();
+    Q_INVOKABLE void deleteCursor();
+    Q_INVOKABLE void restoreCursor();
+
+private slots:
+    void newProfile();
+    void deleteProfile();
+    void changeProfile( int );
+
+private:
+    QComboBox *profileCombo;
+    QQuickWidget *editorView;
+
+signals:
+    void updatePlayerModel(QString config);
+    void saveConfig();
+};
+
+#endif
diff --git a/modules/gui/qt/dialogs_provider.cpp b/modules/gui/qt/dialogs_provider.cpp
index 58c88a7c1f..0603d31707 100644
--- a/modules/gui/qt/dialogs_provider.cpp
+++ b/modules/gui/qt/dialogs_provider.cpp
@@ -52,6 +52,7 @@
 #include "dialogs/gototime.hpp"
 #include "dialogs/podcast_configuration.hpp"
 #include "dialogs/toolbar.hpp"
+#include "dialogs/toolbareditor.hpp"
 #include "dialogs/plugins.hpp"
 #include "dialogs/epg.hpp"
 #include "dialogs/errors.hpp"
@@ -314,9 +315,10 @@ void DialogsProvider::podcastConfigureDialog()
 
 void DialogsProvider::toolbarDialog()
 {
-    ToolbarEditDialog *toolbarEditor = new ToolbarEditDialog( (QWidget *)p_intf->p_sys->p_mi, p_intf );
+    ToolbarEditorDialog *toolbarEditor = new ToolbarEditorDialog( (QWidget *)p_intf->p_sys->p_mi, p_intf);
     if( toolbarEditor->exec() == QDialog::Accepted )
         emit toolBarConfUpdated();
+    delete toolbarEditor;
 }
 
 void DialogsProvider::pluginDialog()
-- 
2.17.1



More information about the vlc-devel mailing list