Skip to content
Snippets Groups Projects
DapComboBox.qml 4.95 KiB
Newer Older
konstantin.kukharenko's avatar
konstantin.kukharenko committed
import QtQuick.Controls 2.0
konstantin.kukharenko's avatar
konstantin.kukharenko committed

konstantin.kukharenko's avatar
konstantin.kukharenko committed
DapComboBoxForm
{
            //Adjusting the height of the line, taking into account that the second element from the end may be the last
            height:
                {
                    if(index != currentIndex)
                    {
                        if(index == (count - 2))
                        {
                            if(index+1 == currentIndex)
                                return heightListElement + bottomIntervalListElement
                            else
                                return heightListElement + intervalListElement
                        }
                        if (index == count - 1)
                            return heightListElement + bottomIntervalListElement
                        return heightListElement + intervalListElement
                    }
                    else return 0
                }
konstantin.kukharenko's avatar
konstantin.kukharenko committed
                {
                    id:textDelegateComboBox
                    anchors.fill: parent
                    anchors.topMargin: paddingTopItemDelegate
                    anchors.leftMargin: popup.visible ? sidePaddingActive : sidePaddingNormal
                    anchors.rightMargin: popup.visible ? sidePaddingActive : sidePaddingNormal
                    font: fontComboBox

                    //Calculates various properties of a given string of text for a particular font
                    TextMetrics
                    {
                        id: tm
                        font: fontComboBox
                        elide: Text.ElideRight
                        text: modelData
                        elideWidth:
                            {
                                if(index != currentIndex)
                                    return widthPopupComboBoxActive - 2*sidePaddingActive;
                                else
                                    return widthPopupComboBoxNormal - indicatorWidth - indicatorLeftInterval;
                            }
                    }
                    FontMetrics
                    {
                        id: fm
                        font: fontComboBox
                    }
                    text:
                        {
                            if(index != currentIndex)
                            {
                                if(tm.elidedText.length < tm.text.length)
                                    return tm.elidedText.substring(0, tm.elidedText.length-1) +
                                            ((fm.tightBoundingRect(tm.elidedText.substring(0, tm.elidedText.length-1)).width +
                                              fm.tightBoundingRect(tm.text.charAt(tm.elidedText.length-1) + '..').width) < tm.elideWidth ?
                                                 (tm.text.charAt(tm.elidedText.length-1) + '..')
                                                    : '..');
                                return tm.elidedText.replace('', '..');
                            }
                            else
                            {
                                if(tm.elidedText.length < tm.text.length)
                                    mainLineText = tm.elidedText.substring(0, tm.elidedText.length-1) +
                                            ((fm.tightBoundingRect(tm.elidedText.substring(0, tm.elidedText.length-1)).width +
                                              fm.tightBoundingRect(tm.text.charAt(tm.elidedText.length-1) + '..').width) < tm.elideWidth ?
                                                 (tm.text.charAt(tm.elidedText.length-1) + '..')
                                                    : '..');
                                else
                                    mainLineText = tm.elidedText.replace('', '..');
                                return "";
                            }
                        }
                    color: hovered ? hilightColorText : normalColorText
konstantin.kukharenko's avatar
konstantin.kukharenko committed
                }
konstantin.kukharenko's avatar
konstantin.kukharenko committed

            //Indent from the bottom edge or the next line that will not stand out when you hover over the mouse
            background:
                Rectangle
konstantin.kukharenko's avatar
konstantin.kukharenko committed
                {
                    anchors.fill: parent
                    anchors.bottomMargin: {
                        if(index == count - 2)
                        {
                            if(index+1 == currentIndex)
                                return bottomIntervalListElement
                            else
                                return intervalListElement
                        }
                        if (index == count - 1)
                            return bottomIntervalListElement
                        return intervalListElement
                    }
                    color: hovered ? hilightColor : normalColor
konstantin.kukharenko's avatar
konstantin.kukharenko committed
                }
            highlighted: parent.highlightedIndex === index
konstantin.kukharenko's avatar
konstantin.kukharenko committed
        }
konstantin.kukharenko's avatar
konstantin.kukharenko committed
}