[vlc-devel] [PATCH 2/2] qt: make ml entry point manager ui

Abel Tesfaye abeltesfaye45 at gmail.com
Mon Aug 5 13:53:27 CEST 2019


From: Abel Tesfaye <Abeltesfaye45 at gmail.com>

---
 .../gui/qt/components/simple_preferences.cpp  | 96 +++++++++++++++++++
 .../gui/qt/components/simple_preferences.hpp  | 13 +++
 modules/gui/qt/ui/sprefs_interface.ui         | 66 ++++++++++++-
 3 files changed, 171 insertions(+), 4 deletions(-)

diff --git a/modules/gui/qt/components/simple_preferences.cpp b/modules/gui/qt/components/simple_preferences.cpp
index 6f8afa01c5..f80c48cc1b 100644
--- a/modules/gui/qt/components/simple_preferences.cpp
+++ b/modules/gui/qt/components/simple_preferences.cpp
@@ -47,6 +47,17 @@
 #include <QScreen>
 #include <QtAlgorithms>
 #include <QDir>
+
+#include <QSpinBox>
+#include <QCheckBox>
+#include <QLabel>
+#include <QPushButton>
+#include <QGridLayout>
+#include <QWidget>
+#include <QHBoxLayout>
+#include <QDialog>
+#include <QBoxLayout>
+
 #include <assert.h>
 #include <math.h>
 
@@ -719,6 +730,24 @@ SPrefsPanel::SPrefsPanel( intf_thread_t *_p_intf, QWidget *_parent,
                     + qtr( "VLC skins website" )+ QString( "</a>." ) );
             ui.skinsLabel->setFont( italicFont );
 
+            if ( vlc_ml_instance_get( p_intf ) != NULL )
+            {
+                mlModel = new MlFoldersModel( vlc_ml_instance_get( p_intf ) , this );
+
+                mlTableView = ui.entryPointsTV;
+
+                mlTableView->setModel( mlModel );
+
+                connect( mlModel , &QAbstractItemModel::modelReset , this , &SPrefsPanel::MLdrawControls );
+
+                BUTTONACT( ui.addButton , MLaddNewEntryPoint() );
+
+                MLdrawControls( );
+
+            }else {
+                ui.mlGroupBox->hide( );
+            }
+
 #ifdef _WIN32
             BUTTONACT( ui.assoButton, assoDialog() );
 #else
@@ -1475,3 +1504,70 @@ void SPrefsPanel::saveAsso()
 
 #endif /* _WIN32 */
 
+void SPrefsPanel::MLaddNewEntryPoint( ){
+    QUrl newEntryPoints = QFileDialog::getExistingDirectoryUrl( this , qtr("Please choose an entry point folder") ,
+                                             QUrl( QDir::homePath( ) ) );
+
+    if(! newEntryPoints.isEmpty() )
+        mlModel->add( newEntryPoints );
+}
+
+QWidget *SPrefsPanel::MLgenerateWidget( QModelIndex index , MlFoldersModel *mlf , QWidget *parent){
+    if ( index.column() == 0 ){
+
+        QWidget *wid = new QWidget( parent );
+
+        QBoxLayout* layout = new QBoxLayout( QBoxLayout::LeftToRight , wid );
+
+        QCheckBox*cb = new QCheckBox( wid );
+        cb->setFixedSize( 16 , 16 );
+
+        //cb->setChecked(mlf->data(index, MlFoldersModel::CustomCheckBoxRole).toBool()); //TODO: disable banning till un-banning works
+        cb->setEnabled( false );
+
+        layout->addWidget( cb , Qt::AlignCenter );
+        wid->setLayout( layout );
+
+        connect( cb , &QPushButton::clicked, [=]( ) {
+            mlf->setData( index , cb->isChecked() , MlFoldersModel::CustomCheckBoxRole);
+        } );
+        return wid;
+    }
+    else if ( index.column( ) == 2 ){
+        QWidget *wid = new QWidget( parent );
+
+        QBoxLayout* layout = new QBoxLayout( QBoxLayout::LeftToRight , wid );
+
+        QPushButton *pb = new QPushButton( "-" , wid );
+        pb->setFixedSize( 16 , 16 );
+
+        layout->addWidget( pb , Qt::AlignCenter );
+        wid->setLayout( layout );
+
+
+        connect( pb , &QPushButton::clicked , [=]() {
+             mlf->setData( index , {} , MlFoldersModel::CustomRemoveRole);
+        } );
+
+        return wid;
+    }
+
+    return nullptr;
+}
+
+void SPrefsPanel::MLdrawControls( ) {
+  for ( int col = 0 ; col < mlModel->columnCount( ) ; col++ )
+    for (int row = 0 ; row < mlModel->rowCount() ; row++ )
+      {
+    QModelIndex index = mlModel->index ( row , col );
+    mlTableView->setIndexWidget ( index, MLgenerateWidget ( index, mlModel,
+                               mlTableView ) );
+      }
+
+  mlTableView->resizeColumnsToContents( );
+  mlTableView->horizontalHeader()->setMinimumSectionSize( 100 );
+  mlTableView->horizontalHeader()->setSectionResizeMode( 1 , QHeaderView::Stretch );
+
+  mlTableView->horizontalHeader()->setFixedHeight( 24 );
+}
+
diff --git a/modules/gui/qt/components/simple_preferences.hpp b/modules/gui/qt/components/simple_preferences.hpp
index e249cfadc8..b8a9286c7e 100644
--- a/modules/gui/qt/components/simple_preferences.hpp
+++ b/modules/gui/qt/components/simple_preferences.hpp
@@ -36,6 +36,12 @@
 #include "ui_sprefs_subtitles.h"
 #include "ui_sprefs_interface.h"
 
+#include <vlc_media_library.h>
+#include <QDialogButtonBox>
+#include <QTableView>
+#include <QFileDialog>
+#include "components/mediacenter/ml_folders_model.hpp"
+
 #ifdef _WIN32
 # include "util/registry.hpp"
 #endif
@@ -107,6 +113,9 @@ private:
 
     char *lang;
 
+    MlFoldersModel *mlModel;
+    QTableView * mlTableView;
+
 #ifdef _WIN32
     QList<QTreeWidgetItem *> listAsso;
     bool addType( const char * psz_ext, QTreeWidgetItem*, QTreeWidgetItem*, QVLCRegistry* );
@@ -124,6 +133,10 @@ private slots:
     void updateCheckBoxes( QTreeWidgetItem*, int );
     void saveAsso();
 #endif
+    void MLaddNewEntryPoint( );
+    QWidget * MLgenerateWidget( QModelIndex index , MlFoldersModel *mlf , QWidget *parent );
+    void MLdrawControls( );
+
     void configML();
     void changeStyle( QString );
 };
diff --git a/modules/gui/qt/ui/sprefs_interface.ui b/modules/gui/qt/ui/sprefs_interface.ui
index da2faf548c..9e187f767e 100644
--- a/modules/gui/qt/ui/sprefs_interface.ui
+++ b/modules/gui/qt/ui/sprefs_interface.ui
@@ -8,7 +8,7 @@
     <x>0</x>
     <y>0</y>
     <width>700</width>
-    <height>785</height>
+    <height>1069</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -577,9 +577,6 @@
         <property name="text">
          <string>File extensions association</string>
         </property>
-        <property name="buddy">
-         <cstring>assoButton</cstring>
-        </property>
        </widget>
       </item>
       <item row="2" column="1">
@@ -633,6 +630,67 @@
      </layout>
     </widget>
    </item>
+   <item>
+    <widget class="QGroupBox" name="mlGroupBox">
+     <property name="title">
+      <string>Media Library</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_5">
+      <item row="0" column="2">
+       <widget class="QPushButton" name="addButton">
+        <property name="maximumSize">
+         <size>
+          <width>16</width>
+          <height>16</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>+</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="3" column="0" colspan="3">
+       <widget class="QTableView" name="entryPointsTV">
+        <property name="editTriggers">
+         <set>QAbstractItemView::AllEditTriggers</set>
+        </property>
+        <property name="alternatingRowColors">
+         <bool>true</bool>
+        </property>
+        <property name="showGrid">
+         <bool>false</bool>
+        </property>
+        <attribute name="horizontalHeaderVisible">
+         <bool>true</bool>
+        </attribute>
+        <attribute name="verticalHeaderVisible">
+         <bool>false</bool>
+        </attribute>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Folders scanned by the Media Library:</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
-- 
2.21.0



More information about the vlc-devel mailing list