Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSqueezedComboBox Class Reference

#include <KisSqueezedComboBox.h>

+ Inheritance diagram for KisSqueezedComboBox:

Public Member Functions

void addSqueezedItem (const QIcon &icon, const QString &newItem, QVariant userData=QVariant())
 
void addSqueezedItem (const QString &newItem, QVariant userData=QVariant())
 
bool contains (const QString &text) const
 
QString currentUnsqueezedText ()
 
qint32 findOriginalText (const QString &text) const
 
void insertSqueezedItem (const QIcon &icon, const QString &newItem, int index, QVariant userData=QVariant())
 
void insertSqueezedItem (const QString &newItem, int index, QVariant userData=QVariant())
 
 KisSqueezedComboBox (QWidget *parent=0, const char *name=0)
 
QStringList originalTexts () const
 
void removeSqueezedItem (int index)
 
void resetOriginalTexts (const QStringList &texts)
 
void setCurrent (const QString &itemText)
 
QSize sizeHint () const override
 
 ~KisSqueezedComboBox () override
 

Static Public Member Functions

static QString squeezeText (const QString &original, const QWidget *widget)
 

Private Slots

void slotTimeOut ()
 

Private Member Functions

void addItem (const QString &text)
 
void insertItem (const QString &text)
 
void insertItem (qint32 index, const QString &text)
 
void resizeEvent (QResizeEvent *) override
 
void setCurrentText (const QString &itemText)
 

Private Attributes

QMap< int, QString > m_originalItems
 
QTimer * m_timer
 

Detailed Description

This widget is a QComboBox, but then a little bit different. It only shows the right part of the items depending on de size of the widget. When it is not possible to show the complete item, it will be shortened and "..." will be prepended.

This is how it looks
Author
Tom Albers

Definition at line 38 of file KisSqueezedComboBox.h.

Constructor & Destructor Documentation

◆ KisSqueezedComboBox()

KisSqueezedComboBox::KisSqueezedComboBox ( QWidget * parent = 0,
const char * name = 0 )

Constructor

Parameters
parentparent widget
namename to give to the widget

Definition at line 23 of file KisSqueezedComboBox.cpp.

24 : QComboBox(parent)
25{
26 setObjectName(name);
27 setMinimumWidth(100);
28 m_timer = new QTimer(this);
29 m_timer->setSingleShot(true);
30 connect(m_timer, SIGNAL(timeout()),
31 SLOT(slotTimeOut()));
32}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))

References connect(), m_timer, and slotTimeOut().

◆ ~KisSqueezedComboBox()

KisSqueezedComboBox::~KisSqueezedComboBox ( )
override

destructor

Definition at line 34 of file KisSqueezedComboBox.cpp.

35{
36 delete m_timer;
37}

References m_timer.

Member Function Documentation

◆ addItem()

void KisSqueezedComboBox::addItem ( const QString & text)
private

◆ addSqueezedItem() [1/2]

void KisSqueezedComboBox::addSqueezedItem ( const QIcon & icon,
const QString & newItem,
QVariant userData = QVariant() )

Append an item.

Parameters
iconthe item icon
newItemthe original (long version) of the item which needs to be added to the combobox
userDatathe user data

Definition at line 112 of file KisSqueezedComboBox.cpp.

113{
114 insertSqueezedItem(icon, newItem, count(), userData);
115}
void insertSqueezedItem(const QString &newItem, int index, QVariant userData=QVariant())

References insertSqueezedItem().

◆ addSqueezedItem() [2/2]

void KisSqueezedComboBox::addSqueezedItem ( const QString & newItem,
QVariant userData = QVariant() )

Append an item.

Parameters
newItemthe original (long version) of the item which needs to be added to the combobox
userDatathe user data.

Definition at line 107 of file KisSqueezedComboBox.cpp.

108{
109 insertSqueezedItem(newItem, count(), userData);
110}

References insertSqueezedItem().

◆ contains()

bool KisSqueezedComboBox::contains ( const QString & text) const

Returns true if the combobox contains the original (not-squeezed) version of text.

Parameters
textthe original (not-squeezed) text to check for

Definition at line 39 of file KisSqueezedComboBox.cpp.

40{
41 if (_text.isEmpty())
42 return false;
43
44 for (QMap<int, QString>::const_iterator it = m_originalItems.begin() ; it != m_originalItems.end();
45 ++it) {
46 if (it.value() == _text) {
47 return true;
48 }
49 }
50 return false;
51}
QMap< int, QString > m_originalItems

References m_originalItems.

◆ currentUnsqueezedText()

QString KisSqueezedComboBox::currentUnsqueezedText ( )

This method returns the full text (not squeezed) of the currently highlighted item.

Returns
full text of the highlighted item

Definition at line 160 of file KisSqueezedComboBox.cpp.

161{
162 int curItem = currentIndex();
163 return m_originalItems[curItem];
164}

References m_originalItems.

◆ findOriginalText()

qint32 KisSqueezedComboBox::findOriginalText ( const QString & text) const

Returns index of a original text, -1 if the text isn't found

Parameters
textthe original (not-squeezed) text to search for

Definition at line 53 of file KisSqueezedComboBox.cpp.

54{
55 for (int i = 0; i < m_originalItems.size(); i++) {
56 if(m_originalItems.value(i) == text) {
57 return i;
58 }
59 }
60 return -1;
61}

References m_originalItems.

◆ insertItem() [1/2]

void KisSqueezedComboBox::insertItem ( const QString & text)
private

◆ insertItem() [2/2]

void KisSqueezedComboBox::insertItem ( qint32 index,
const QString & text )
private

◆ insertSqueezedItem() [1/2]

void KisSqueezedComboBox::insertSqueezedItem ( const QIcon & icon,
const QString & newItem,
int index,
QVariant userData = QVariant() )

Definition at line 100 of file KisSqueezedComboBox.cpp.

101{
102 m_originalItems[index] = newItem;
103 QComboBox::insertItem(index, icon, squeezeText(newItem, this), userData);
104 setItemData(index, newItem, Qt::ToolTipRole);
105}
static QString squeezeText(const QString &original, const QWidget *widget)

References m_originalItems, and squeezeText().

◆ insertSqueezedItem() [2/2]

void KisSqueezedComboBox::insertSqueezedItem ( const QString & newItem,
int index,
QVariant userData = QVariant() )

This inserts a item to the list. See QComboBox::insertItem() for details. Please do not use QComboBox::insertItem() to this widget, as that will fail.

Parameters
newItemthe original (long version) of the item which needs to be added to the combobox
indexthe position in the widget.
userDatathe user data.

Definition at line 93 of file KisSqueezedComboBox.cpp.

94{
95 m_originalItems[index] = newItem;
96 QComboBox::insertItem(index, squeezeText(newItem, this), userData);
97 setItemData(index, newItem, Qt::ToolTipRole);
98}

References m_originalItems, and squeezeText().

◆ originalTexts()

QStringList KisSqueezedComboBox::originalTexts ( ) const

Return the list of original text items

Definition at line 63 of file KisSqueezedComboBox.cpp.

64{
65 return m_originalItems.values();
66}

References m_originalItems.

◆ removeSqueezedItem()

void KisSqueezedComboBox::removeSqueezedItem ( int index)

remove the squeezed item at index

Definition at line 166 of file KisSqueezedComboBox.cpp.

167{
168 removeItem(index);
169 m_originalItems.remove(index);
170}

References m_originalItems.

◆ resetOriginalTexts()

void KisSqueezedComboBox::resetOriginalTexts ( const QStringList & texts)

Reset the combo box and initialize it with the list of (original) text items

Definition at line 68 of file KisSqueezedComboBox.cpp.

69{
70 if (texts == m_originalItems.values()) return;
71
72 clear();
73 m_originalItems.clear();
74
75 Q_FOREACH (const QString &item, texts) {
76 addSqueezedItem(item);
77 }
78}
void addSqueezedItem(const QString &newItem, QVariant userData=QVariant())
QAction * clear(const QObject *recvr, const char *slot, QObject *parent)

References addSqueezedItem(), and m_originalItems.

◆ resizeEvent()

void KisSqueezedComboBox::resizeEvent ( QResizeEvent * )
overrideprivate

Definition at line 125 of file KisSqueezedComboBox.cpp.

126{
127 m_timer->start(200);
128}

References m_timer.

◆ setCurrent()

void KisSqueezedComboBox::setCurrent ( const QString & itemText)

Set the current item to the one matching the given text.

Parameters
itemTextthe original (long version) of the item text

Definition at line 117 of file KisSqueezedComboBox.cpp.

118{
119 qint32 itemIndex = findOriginalText(itemText);
120 if (itemIndex >= 0) {
121 setCurrentIndex(itemIndex);
122 }
123}
qint32 findOriginalText(const QString &text) const

References findOriginalText().

◆ setCurrentText()

void KisSqueezedComboBox::setCurrentText ( const QString & itemText)
private

◆ sizeHint()

QSize KisSqueezedComboBox::sizeHint ( ) const
override

Sets the sizeHint() of this widget.

Definition at line 80 of file KisSqueezedComboBox.cpp.

81{
82 ensurePolished();
83 QFontMetrics fm = fontMetrics();
84 int maxW = count() ? 18 : 7 * fm.boundingRect(QChar('x')).width() + 18;
85 int maxH = qMax(fm.lineSpacing(), 14) + 2;
86
87 QStyleOptionComboBox options;
88 options.initFrom(this);
89
90 return style()->sizeFromContents(QStyle::CT_ComboBox, &options, QSize(maxW, maxH), this);
91}

◆ slotTimeOut

void KisSqueezedComboBox::slotTimeOut ( )
privateslot

Definition at line 130 of file KisSqueezedComboBox.cpp.

131{
132 for (QMap<int, QString>::iterator it = m_originalItems.begin() ; it != m_originalItems.end();
133 ++it) {
134 setItemText(it.key(), squeezeText(it.value(), this));
135 }
136}

References m_originalItems, and squeezeText().

◆ squeezeText()

QString KisSqueezedComboBox::squeezeText ( const QString & original,
const QWidget * widget )
static

Definition at line 138 of file KisSqueezedComboBox.cpp.

139{
140 // not the complete widgetSize is usable. Need to compensate for that.
141 int widgetSize = widget->width() - 30;
142 QFontMetrics fm(widget->fontMetrics());
143
144 // If we can fit the full text, return that.
145 if (fm.boundingRect(original).width() < widgetSize)
146 return(original);
147
148 // We need to squeeze.
149 QString sqItem = original; // prevent empty return value;
150 widgetSize = widgetSize - fm.boundingRect("...").width();
151 for (int i = 0 ; i != original.length(); ++i) {
152 if ((int)fm.boundingRect(original.right(i)).width() > widgetSize) {
153 sqItem = QString("..." + original.right(--i));
154 break;
155 }
156 }
157 return sqItem;
158}

Member Data Documentation

◆ m_originalItems

QMap<int, QString> KisSqueezedComboBox::m_originalItems
private

Definition at line 147 of file KisSqueezedComboBox.h.

◆ m_timer

QTimer* KisSqueezedComboBox::m_timer
private

Definition at line 148 of file KisSqueezedComboBox.h.


The documentation for this class was generated from the following files: