[vlc-commits] [Git][videolan/vlc][master] 10 commits: qt: set transient parent in `DialogsProvider::getMessageDialog()`

Steve Lhomme (@robUx4) gitlab at videolan.org
Sat Jun 14 08:49:48 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
693a33d6 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: set transient parent in `DialogsProvider::getMessageDialog()`

This is also the reason why `QMessageBox::question()` is not
used here.

- - - - -
7855ef44 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: have the window title as parameter in `DialogsProvider::getMessageDialog()`

- - - - -
e49faa4c by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: set icon to question in `DialogsProvider::getMessageDialog()`

Having the "OK" and "Cancel" buttons already make it a question.

- - - - -
c14e9d27 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: use "Yes" and "No" buttons instead of "OK" and "Cancel" in `DialogsProvider::getMessageDialog()`

- - - - -
c539a4d6 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: set default button to `No` in `DialogsProvider::getMessageDialog()`

- - - - -
08d4a5ad by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: rename `DialogsProvider::getMessageDialog()` to `DialogsProvider::questionDialog()`

- - - - -
1cd602b4 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: register `MLPlaylistListModel::Roles` enum in metatype system

- - - - -
ddd66d52 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: prompt confirmation before committing deletion in `PlaylistMediaList`

- - - - -
44fa61fe by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: make it possible to delete playlists with the delete key

- - - - -
cf70d3d1 by Fatih Uzunoglu at 2025-06-14T08:35:28+00:00
qt: make `MLContextMenu::deleteFileFromSource()`'s prompt translatable

- - - - -


7 changed files:

- modules/gui/qt/dialogs/dialogs_provider.cpp
- modules/gui/qt/dialogs/dialogs_provider.hpp
- modules/gui/qt/medialibrary/mlplaylistlistmodel.hpp
- modules/gui/qt/medialibrary/qml/PlaylistMediaList.qml
- modules/gui/qt/menus/qml_menu_wrapper.cpp
- modules/gui/qt/menus/qml_menu_wrapper.hpp
- modules/gui/qt/util/qml/MLContextMenu.qml


Changes:

=====================================
modules/gui/qt/dialogs/dialogs_provider.cpp
=====================================
@@ -402,14 +402,20 @@ void DialogsProvider::mediaInfoDialog( const MLItemId& itemId )
     }
 }
 
-bool DialogsProvider::getMessageDialog(const QString& message) const
+bool DialogsProvider::questionDialog(const QString& text, const QString &title) const
 {
     QMessageBox messageBox;
-    messageBox.setText(message);
-    messageBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
+    messageBox.setText(text);
+    if (!title.isEmpty())
+        messageBox.setWindowTitle(title);
+    messageBox.setIcon(QMessageBox::Question);
+    messageBox.setStandardButtons(QMessageBox::StandardButtons(QMessageBox::Yes | QMessageBox::No));
+    messageBox.setDefaultButton(QMessageBox::No);
+
+    QVLCDialog::setWindowTransientParent(&messageBox, nullptr, p_intf);
 
     int result = messageBox.exec();
-    return result == QMessageBox::Ok;
+    return result == QMessageBox::Yes;
 }
 
 void DialogsProvider::mediaCodecDialog()


=====================================
modules/gui/qt/dialogs/dialogs_provider.hpp
=====================================
@@ -177,7 +177,7 @@ public slots:
     void mediaInfoDialog( const PlaylistItem& pItem );
     void mediaInfoDialog( const MLItemId& itemId );
     void mediaCodecDialog();
-    bool getMessageDialog(const QString& message) const;
+    bool questionDialog(const QString& text, const QString& title = {}) const;
     void prefsDialog();
     void firstRunDialog();
     void extendedDialog();


=====================================
modules/gui/qt/medialibrary/mlplaylistlistmodel.hpp
=====================================
@@ -39,6 +39,7 @@ public:
         PLAYLIST_DURATION,
         PLAYLIST_COUNT
     };
+    Q_ENUM(Roles)
 
     enum PlaylistType {
         PLAYLIST_TYPE_ALL,


=====================================
modules/gui/qt/medialibrary/qml/PlaylistMediaList.qml
=====================================
@@ -80,6 +80,9 @@ MainViewLoader {
         resetFocus()
     }
 
+    Component.onCompleted: {
+        root.Keys.deletePressed.connect(root.deleteSelectedPlaylists)
+    }
 
     //---------------------------------------------------------------------------------------------
     // Private
@@ -183,6 +186,23 @@ MainViewLoader {
         return Promise.resolve()
     }
 
+    function deleteSelectedPlaylists() {
+        console.assert(root.model)
+        console.assert(root.selectionModel)
+        if (root.selectionModel.hasSelection) {
+            const items = []
+            for (const i of root.selectionModel.selectedIndexes) {
+                items.push(root.model.data(i, MLPlaylistListModel.PLAYLIST_ID))
+            }
+            console.assert(items.length > 0)
+            if (DialogsProvider.questionDialog(qsTr("Do you really want to delete the selected playlist(s)?"),
+                                               qsTr("Delete playlist(s)")))
+                root.model.deletePlaylists(items)
+        } else {
+            console.warn(root, ": Nothing to delete")
+        }
+    }
+
     //---------------------------------------------------------------------------------------------
     // Childs
     //---------------------------------------------------------------------------------------------
@@ -248,6 +268,10 @@ MainViewLoader {
         function tableView_popup(index, selectedIndexes, globalPos) {
             popup(selectedIndexes, globalPos)
         }
+
+        Component.onCompleted: {
+            contextMenu.requestDeleteSelectedPlaylists.connect(root.deleteSelectedPlaylists)
+        }
     }
 
     // TBD: Refactor this with MusicGenres ?


=====================================
modules/gui/qt/menus/qml_menu_wrapper.cpp
=====================================
@@ -839,9 +839,7 @@ void PlaylistListContextMenu::popup(const QModelIndexList & selected, QPoint pos
 
     action = menu->addAction(qtr("Delete"));
 
-    connect(action, &QAction::triggered, [this, ids]() {
-        m_model->deletePlaylists(ids);
-    });
+    connect(action, &QAction::triggered, this, &PlaylistListContextMenu::requestDeleteSelectedPlaylists);
 
     menu->popup(pos);
 }


=====================================
modules/gui/qt/menus/qml_menu_wrapper.hpp
=====================================
@@ -391,6 +391,9 @@ public:
 
 public slots:
     void popup(const QModelIndexList & selected, QPoint pos, QVariantMap options = {});
+
+signals:
+    void requestDeleteSelectedPlaylists();
 };
 
 class QmlAudioContextMenu : public VLCMenuBar


=====================================
modules/gui/qt/util/qml/MLContextMenu.qml
=====================================
@@ -165,7 +165,7 @@ NativeMenu {
     }
 
     function deleteFileFromSource(dataList, options, indexes) {
-        let confirm = DialogsProvider.getMessageDialog("Are you sure you want to delete this file?");
+        let confirm = DialogsProvider.questionDialog(qsTr("Are you sure you want to delete this file?"));
         
         if (confirm) {
             model.deleteFileFromSource(indexes[0]);



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/3a90548bc1c85a18d81f14f3ce5aedc5af943b6a...cf70d3d1e8a2b1e042bde6676a129a53dac505fa

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/3a90548bc1c85a18d81f14f3ce5aedc5af943b6a...cf70d3d1e8a2b1e042bde6676a129a53dac505fa
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list