Warning, /maui/mauikit/src/controls.5/ToolActions.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.15
0002 import QtQuick.Controls 2.15
0003 import QtQuick.Layouts 1.3
0004 import QtQml 2.14
0005 import QtQuick.Templates 2.15 as T
0006 
0007 import org.mauikit.controls 1.3 as Maui
0008 
0009 import "private" as Private
0010 
0011 /**
0012  * ToolActions
0013  * A global sidebar for the application window that can be collapsed.
0014  *
0015  *
0016  *
0017  *
0018  *
0019  *
0020  */
0021 T.Control
0022 {
0023     id: control
0024     implicitWidth: implicitContentWidth + leftPadding + rightPadding
0025     implicitHeight: implicitContentHeight + topPadding + bottomPadding
0026     
0027     opacity: enabled ? 1 : 0.5
0028     
0029     spacing: 2   
0030     padding: 0
0031     
0032     Maui.Theme.colorSet: Maui.Theme.Button
0033     Maui.Theme.inherit: false
0034     /**
0035      * actions : list<Action>
0036      */
0037     default property list<Action> actions
0038     
0039     /**
0040      * autoExclusive : bool
0041      */
0042     property bool autoExclusive: true
0043     
0044     /**
0045      * checkable : bool
0046      */
0047     property bool checkable: true
0048     
0049     /**
0050      * display : int
0051      */
0052     property int display: ToolButton.TextBesideIcon
0053     
0054     /**
0055      * cyclic : bool
0056      */
0057     property bool cyclic: false
0058     
0059     readonly property bool canCyclic : control.cyclic && control.count === 2  && control.autoExclusive
0060     
0061     /**
0062      * flat : bool
0063      */
0064     property bool flat : false
0065     
0066     /**
0067      * count : int
0068      */
0069     readonly property int count : actions.length
0070     
0071        
0072     /**
0073      * expanded : bool
0074      */
0075     property bool expanded : true
0076     
0077     /**
0078      * defaultIconName : string
0079      */
0080     property string defaultIconName: "application-menu"
0081     //     border.color: control.flat ? "transparent" : Qt.tint(Maui.Theme.textColor, Qt.rgba(Maui.Theme.backgroundColor.r, Maui.Theme.backgroundColor.g, Maui.Theme.backgroundColor.b, 0.7))
0082     
0083     //radius: Maui.Style.radiusV
0084     //color: !control.enabled || control.flat ? "transparent" : Maui.Theme.backgroundColor
0085  
0086     
0087     /**
0088      * 
0089      */
0090     function uncheck(except)
0091     {
0092         for(var i in control.actions)
0093         {
0094             if(control.actions[i] === except)
0095             {
0096                 continue
0097             }
0098             
0099             control.actions[i].checked = false
0100         }
0101     }
0102     
0103     contentItem: Loader
0104     {
0105         id: _loader
0106         asynchronous: true
0107         sourceComponent: control.expanded ? _rowComponent : _buttonComponent
0108     }
0109     
0110     background: null
0111     
0112     Component
0113     {
0114         id: _rowComponent
0115         
0116         Row
0117         {
0118             id: _row
0119             property int biggerHeight : 0
0120             spacing: control.spacing
0121                         
0122             Behavior on width
0123             {
0124                 enabled: Maui.Style.enableEffects
0125                 
0126                 NumberAnimation
0127                 {
0128                     duration: Maui.Style.units.shortDuration
0129                     easing.type: Easing.InOutQuad
0130                 }
0131             }            
0132             
0133             function calculateBiggerHeight()
0134             {
0135                 var value = 0
0136                 for(var i in _row.children)
0137                 {
0138                     const height = _row.children[i].implicitHeight
0139                     if(height > value)
0140                     {
0141                         value = height
0142                     }
0143                 }
0144                 
0145                 return value
0146             }
0147             
0148             Repeater
0149             {
0150                 id: _repeater
0151                 model: control.actions
0152                 
0153                 ToolButton
0154                 {
0155                     id: _actionButton
0156                     action : modelData
0157                     checkable: control.checkable || action.checkable
0158                     
0159                     height: Math.max(implicitHeight, _row.biggerHeight)
0160                     
0161                     onImplicitHeightChanged: _row.biggerHeight = _row.calculateBiggerHeight()                    
0162                                        
0163                     autoExclusive: control.autoExclusive
0164                     enabled: action.enabled
0165                     
0166                     display: control.display
0167                     
0168                     background: Maui.ShadowedRectangle
0169                     {                        
0170                         color:  (checked || down ? Maui.Theme.highlightColor : ( hovered ? Maui.Theme.hoverColor : Maui.Theme.backgroundColor)) 
0171                         corners
0172                         {
0173                             topLeftRadius: index === 0 ? Maui.Style.radiusV : 0
0174                             topRightRadius: index === _repeater.count - 1 ? Maui.Style.radiusV : 0
0175                             bottomLeftRadius: index === 0 ? Maui.Style.radiusV : 0
0176                             bottomRightRadius:  index === _repeater.count - 1 ? Maui.Style.radiusV : 0
0177                         }
0178                         
0179                         Behavior on color
0180                         {
0181                             Maui.ColorTransition{}
0182                         }
0183                     }
0184                 }
0185             }
0186         }
0187     }
0188     
0189     Component
0190     {
0191         id: _buttonComponent
0192         
0193          ToolButton
0194                 {
0195                     id: _defaultButtonIcon                                    
0196                     
0197                     property Action m_action 
0198                     
0199                     Component.onCompleted: _defaultButtonIcon.m_action = _defaultButtonIcon.buttonAction()
0200                                         
0201                     function buttonAction()
0202                     {
0203                         if(control.autoExclusive)
0204                         {
0205                             var currentAction
0206                             var actionIndex = -1
0207                             for(var i in control.actions)
0208                             {
0209                                 console.log("Checking current action", i)
0210                                 if(control.actions[i].checked)
0211                                 {
0212                                     actionIndex = i
0213                                     currentAction = control.actions[actionIndex]
0214                                     console.log("Found current action", i, actionIndex)                                    
0215                                 }
0216                             }                    
0217                             
0218                             if(control.canCyclic)
0219                             {
0220                                actionIndex++
0221                                 
0222                                 let m_index = actionIndex >= control.actions.length ? 0 : actionIndex
0223 //                                 
0224                                 console.log("Setting current action at", m_index)
0225                                 if(control.actions[m_index].enabled)
0226                                 {
0227                                     return control.actions[m_index];
0228                                 }
0229                             }
0230                             
0231                             return currentAction                    
0232                         }
0233                         
0234                         return null
0235                     }
0236                     
0237                     Row
0238                     {
0239                         visible: false
0240                         Repeater
0241                         {
0242                             model: control.actions
0243                             delegate: Item
0244                             {
0245                                 property bool checked : modelData.checked
0246                                 onCheckedChanged: _defaultButtonIcon.m_action = _defaultButtonIcon.buttonAction()
0247                             }
0248                         }
0249                     }
0250                     
0251                     
0252                     data: Maui.ContextualMenu
0253                     {
0254                         id: _menu
0255                         
0256                         Repeater
0257                         {
0258                             model: control.autoExclusive && control.canCyclic ? undefined : control.actions
0259                             
0260                             delegate: MenuItem
0261                             {
0262                                 action: modelData
0263                                 enabled: modelData.enabled
0264                                 autoExclusive: control.autoExclusive                        
0265                                 checkable: control.checkable || action.checkable                        
0266                             }
0267                         }
0268                     }
0269                     
0270                     onClicked: 
0271                     {
0272                         if(_defaultButtonIcon.m_action && control.canCyclic && control.autoExclusive)
0273                         {
0274                             console.log("Trigger next cyclic action", _defaultButtonIcon.m_action.icon.name)
0275                             // var previousAction = _defaultButtonIcon.action
0276                             _defaultButtonIcon.m_action.triggered()
0277                             _defaultButtonIcon.m_action = _defaultButtonIcon.buttonAction()
0278                             
0279                         }else
0280                         {
0281                             if(!_menu.visible)
0282                             {
0283                                 _menu.show(0, control.height, control)
0284                                 
0285                             }else
0286                             {
0287                                 _menu.close()
0288                             }
0289                         }
0290                     }
0291                     
0292                     
0293                     
0294                     icon.width:  Maui.Style.iconSize
0295                     icon.height: Maui.Style.iconSize
0296                     icon.color: m_action ? (m_action.icon.color && m_action.icon.color.length ? m_action.icon.color : (pressed ? control.Maui.Theme.highlightColor : control.Maui.Theme.textColor)) :  control.Maui.Theme.textColor
0297                     
0298                     icon.name: m_action ? m_action.icon.name : control.defaultIconName
0299                     text: m_action ? m_action.text: ""
0300                     
0301                     enabled: m_action ? m_action.enabled : true
0302                     
0303                     subMenu: !control.canCyclic
0304                     
0305                     display: control.display
0306                     
0307                     checkable: control.checkable && (action ? action.checkable : false)
0308                     
0309                     background: Rectangle
0310                     {
0311                         color: Maui.Theme.backgroundColor
0312                         radius: Maui.Style.radiusV
0313                         
0314                         Behavior on color
0315                         {
0316                             Maui.ColorTransition{}
0317                         }
0318                     }
0319                 }
0320             
0321         
0322     }
0323 }