[vlc-devel] [PATCH 07/16] qml: use dynamic Columns on KeyNavigableTableView

Abel Tesfaye abeltesfaye45 at gmail.com
Fri Aug 9 17:23:44 CEST 2019


From: Abel Tesfaye <Abeltesfaye45 at gmail.com>

---
 .../qt/qml/utils/KeyNavigableTableView.qml    | 58 ++++++++++++-------
 1 file changed, 38 insertions(+), 20 deletions(-)

diff --git a/modules/gui/qt/qml/utils/KeyNavigableTableView.qml b/modules/gui/qt/qml/utils/KeyNavigableTableView.qml
index e0521e183b..41b3e621eb 100644
--- a/modules/gui/qt/qml/utils/KeyNavigableTableView.qml
+++ b/modules/gui/qt/qml/utils/KeyNavigableTableView.qml
@@ -19,8 +19,7 @@ import QtQuick 2.11
 import QtQuick.Controls 2.4
 import QtQml.Models 2.2
 import QtQuick.Layouts 1.3
-
-import org.videolan.medialib 0.1
+import QtGraphicalEffects 1.0
 
 import "qrc:///utils/" as Utils
 import "qrc:///style/"
@@ -30,8 +29,11 @@ NavigableFocusScope {
 
     //forwarded from subview
     signal actionForSelection( var selection )
+    signal contextMenuButtonClicked(Item menuParent, var menuModel)
+    signal rightClick(Item menuParent, var menuModel)
 
     property var sortModel: ListModel { }
+    property Component colDelegate: Item { }
     property var model: []
 
     property alias contentHeight: view.contentHeight
@@ -47,6 +49,8 @@ NavigableFocusScope {
     property color headerColor
 
     property alias delegateModel: delegateModel
+    property real rowHeight: VLCStyle.fontHeight_normal + VLCStyle.margin_large
+    property alias spacing: view.spacing
 
     Utils.SelectableDelegateModel {
         id: delegateModel
@@ -61,30 +65,49 @@ NavigableFocusScope {
                 Package.name: "list"
                 id: lineView
 
-                width: view.width
-                height: VLCStyle.fontHeight_normal + VLCStyle.margin_large
-
-                color:  VLCStyle.colors.getBgColor(element.DelegateModel.inSelected, hoverArea.containsMouse, this.activeFocus)
+                width: root.width
+                height: root.rowHeight
+                color: VLCStyle.colors.bg
 
                 MouseArea {
                     id: hoverArea
                     anchors.fill: parent
                     hoverEnabled: true
+                    Keys.onMenuPressed: root.contextMenuButtonClicked(contextButton,rowModel)
+                    acceptedButtons: Qt.RightButton | Qt.LeftButton
+
                     onClicked: {
                         delegateModel.updateSelection( mouse.modifiers , view.currentIndex, index)
                         view.currentIndex = rowModel.index
                         lineView.forceActiveFocus()
+
+                        if (mouse.button === Qt.RightButton){
+                            root.rightClick(lineView,rowModel)
+                        }
                     }
 
                     onDoubleClicked: {
                         actionForSelection(delegateModel.selectedGroup)
                     }
+                    RectangularGlow {
+                        visible: element.DelegateModel.inSelected || hoverArea.containsMouse
+                        anchors.fill: parent
+                        glowRadius: VLCStyle.margin_xxsmall
+                        color: VLCStyle.colors.getBgColor(element.DelegateModel.inSelected, hoverArea.containsMouse, lineView.activeFocus)
+                    }
+
+                    Rectangle{
+                        anchors.fill: parent
+                        anchors.topMargin: VLCStyle.margin_xxsmall
+                        anchors.bottomMargin: VLCStyle.margin_xxsmall
+                        anchors.leftMargin: VLCStyle.margin_xxxsmall
+                        anchors.rightMargin: VLCStyle.margin_xxxsmall
+                        color: VLCStyle.colors.bg
 
                     Row {
                         anchors {
                             fill: parent
                         }
-
                         Repeater {
                             model: sortModel
 
@@ -92,23 +115,18 @@ NavigableFocusScope {
                                 height: parent.height
                                 width: model.width * view.width
                                 Layout.alignment: Qt.AlignVCenter
+                                    Loader{
+                                        anchors.fill: parent
+                                        sourceComponent: colDelegate
 
-                                Text {
-                                    text: rowModel[model.criteria]
-                                    elide: Text.ElideRight
-                                    font.pixelSize: VLCStyle.fontSize_normal
-                                    color: VLCStyle.colors.text
+                                        property var rowModel: element.rowModel
+                                        property var colModel: model
 
-                                    anchors {
-                                        fill: parent
-                                        leftMargin: VLCStyle.margin_xsmall
-                                        rightMargin: VLCStyle.margin_xsmall
                                     }
-                                    verticalAlignment: Text.AlignVCenter
-                                    horizontalAlignment: Text.AlignLeft
-                                }
+
                             }
                         }
+                    }   
                     }
                 }
             }
@@ -152,7 +170,7 @@ NavigableFocusScope {
                             //Layout.alignment: Qt.AlignVCenter
 
                             Text {
-                                text: model.text
+                                text: model.text || ""
                                 elide: Text.ElideRight
                                 font {
                                     pixelSize: VLCStyle.fontSize_normal
-- 
2.21.0



More information about the vlc-devel mailing list