• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegraphics API Reference
  • KDE Home
  • Contact Us
 

libs/libkdcraw/libkdcraw

  • sources
  • kde-4.14
  • kdegraphics
  • libs
  • libkdcraw
  • libkdcraw
squeezedcombobox.cpp
Go to the documentation of this file.
1 
31 #include "squeezedcombobox.moc"
32 
33 // Qt includes
34 
35 #include <QComboBox>
36 #include <QPair>
37 #include <QTimer>
38 #include <QStyle>
39 #include <QApplication>
40 #include <QToolTip>
41 #include <QResizeEvent>
42 
43 namespace KDcrawIface
44 {
45 
46 class SqueezedComboBox::Private
47 {
48 public:
49 
50  Private()
51  {
52  timer = 0;
53  }
54 
55  QMap<int, QString> originalItems;
56 
57  QTimer* timer;
58 };
59 
60 SqueezedComboBox::SqueezedComboBox(QWidget* const parent, const char* name)
61  : QComboBox(parent), d(new Private)
62 {
63  setObjectName(name);
64  setMinimumWidth(100);
65  d->timer = new QTimer(this);
66  d->timer->setSingleShot(true);
67 
68  connect(d->timer, SIGNAL(timeout()),
69  this, SLOT(slotTimeOut()));
70 
71  connect(this, SIGNAL(activated(int)),
72  SLOT(slotUpdateToolTip(int)));
73 }
74 
75 SqueezedComboBox::~SqueezedComboBox()
76 {
77  d->originalItems.clear();
78  delete d->timer;
79  delete d;
80 }
81 
82 bool SqueezedComboBox::contains(const QString& text) const
83 {
84  if (text.isEmpty())
85  return false;
86 
87  for (QMap<int, QString>::const_iterator it = d->originalItems.constBegin() ; it != d->originalItems.constEnd(); ++it)
88  {
89  if (it.value() == text)
90  return true;
91  }
92 
93  return false;
94 }
95 
96 QSize SqueezedComboBox::sizeHint() const
97 {
98  ensurePolished();
99  QFontMetrics fm = fontMetrics();
100  int maxW = count() ? 18 : 7 * fm.width(QChar('x')) + 18;
101  int maxH = qMax( fm.lineSpacing(), 14 ) + 2;
102 
103  QStyleOptionComboBox options;
104  options.initFrom(this);
105 
106  return style()->sizeFromContents(QStyle::CT_ComboBox, &options,
107  QSize(maxW, maxH), this).expandedTo(QApplication::globalStrut());
108 }
109 
110 void SqueezedComboBox::insertSqueezedItem(const QString& newItem, int index,
111  const QVariant& userData)
112 {
113  d->originalItems[index] = newItem;
114  QComboBox::insertItem(index, squeezeText(newItem), userData);
115 
116  // if this is the first item, set the tooltip.
117  if (index == 0)
118  slotUpdateToolTip(0);
119 }
120 
121 void SqueezedComboBox::insertSqueezedList(const QStringList& newItems, int index)
122 {
123  for(QStringList::const_iterator it = newItems.constBegin() ; it != newItems.constEnd() ; ++it)
124  {
125  insertSqueezedItem(*it, index);
126  index++;
127  }
128 }
129 
130 void SqueezedComboBox::addSqueezedItem(const QString& newItem,
131  const QVariant& userData)
132 {
133  insertSqueezedItem(newItem, count(), userData);
134 }
135 
136 void SqueezedComboBox::setCurrent(const QString& itemText)
137 {
138  QString squeezedText = squeezeText(itemText);
139  qint32 itemIndex = findText(squeezedText);
140 
141  if (itemIndex >= 0)
142  setCurrentIndex(itemIndex);
143 }
144 
145 void SqueezedComboBox::resizeEvent(QResizeEvent *)
146 {
147  d->timer->start(200);
148 }
149 
150 void SqueezedComboBox::slotTimeOut()
151 {
152  for (QMap<int, QString>::iterator it = d->originalItems.begin() ; it != d->originalItems.end(); ++it)
153  {
154  setItemText( it.key(), squeezeText( it.value() ) );
155  }
156 }
157 
158 QString SqueezedComboBox::squeezeText(const QString& original) const
159 {
160  // not the complete widgetSize is usable. Need to compensate for that.
161  int widgetSize = width()-30;
162  QFontMetrics fm( fontMetrics() );
163 
164  // If we can fit the full text, return that.
165  if (fm.width(original) < widgetSize)
166  return(original);
167 
168  // We need to squeeze.
169  QString sqItem = original; // prevent empty return value;
170  widgetSize = widgetSize-fm.width("...");
171 
172  for (int i = 0 ; i != original.length(); ++i)
173  {
174  if ((int)fm.width(original.right(i)) > widgetSize)
175  {
176  sqItem = QString(original.left(i) + "...");
177  break;
178  }
179  }
180 
181  return sqItem;
182 }
183 
184 void SqueezedComboBox::slotUpdateToolTip(int index)
185 {
186  setToolTip(d->originalItems[index]);
187 }
188 
189 QString SqueezedComboBox::itemHighlighted() const
190 {
191  int curItem = currentIndex();
192  return d->originalItems[curItem];
193 }
194 
195 QString SqueezedComboBox::item(int index) const
196 {
197  return d->originalItems[index];
198 }
199 
200 } // namespace KDcrawIface
QResizeEvent
QWidget
KDcrawIface::SqueezedComboBox::itemHighlighted
QString itemHighlighted() const
This method returns the full text (not squeezed) of the currently highlighted item.
Definition: squeezedcombobox.cpp:189
QChar
KDcrawIface::SqueezedComboBox::setCurrent
void setCurrent(const QString &itemText)
Set the current item to the one matching the given text.
Definition: squeezedcombobox.cpp:136
QWidget::style
QStyle * style() const
QComboBox::text
QString text(int index) const
QWidget::setMinimumWidth
void setMinimumWidth(int minw)
QMap< int, QString >
QWidget::ensurePolished
void ensurePolished() const
QFontMetrics
KDcrawIface::SqueezedComboBox::sizeHint
virtual QSize sizeHint() const
Sets the sizeHint() of this widget.
Definition: squeezedcombobox.cpp:96
QList::const_iterator
QComboBox::setItemText
void setItemText(int index, const QString &text)
QComboBox::insertItem
void insertItem(int index, const QString &text, const QVariant &userData)
QApplication::globalStrut
QSize globalStrut()
KDcrawIface::SqueezedComboBox::addSqueezedItem
void addSqueezedItem(const QString &newItem, const QVariant &userData=QVariant())
Append an item.
Definition: squeezedcombobox.cpp:130
QStyleOption::initFrom
void initFrom(const QWidget *widget)
QWidget::width
int width() const
QComboBox::findText
int findText(const QString &text, QFlags< Qt::MatchFlag > flags) const
QComboBox::count
int count() const
QTimer
KDcrawIface::SqueezedComboBox::insertSqueezedItem
void insertSqueezedItem(const QString &newItem, int index, const QVariant &userData=QVariant())
This inserts a item to the list.
Definition: squeezedcombobox.cpp:110
QObject::setObjectName
void setObjectName(const QString &name)
QString::isEmpty
bool isEmpty() const
QComboBox::activated
void activated(int index)
QString
QStringList
QString::right
QString right(int n) const
KDcrawIface::SqueezedComboBox::~SqueezedComboBox
virtual ~SqueezedComboBox()
destructor
Definition: squeezedcombobox.cpp:75
QSize
QFontMetrics::width
int width(const QString &text, int len) const
KDcrawIface::SqueezedComboBox::SqueezedComboBox
SqueezedComboBox(QWidget *const parent=0, const char *name=0)
Constructor.
Definition: squeezedcombobox.cpp:60
QWidget::fontMetrics
QFontMetrics fontMetrics() const
QSize::expandedTo
QSize expandedTo(const QSize &otherSize) const
KDcrawIface::SqueezedComboBox::contains
bool contains(const QString &text) const
Returns true if the combobox contains the original (not-squeezed) version of text.
Definition: squeezedcombobox.cpp:82
KDcrawIface::SqueezedComboBox::item
QString item(int index) const
This method returns the full text (not squeezed) for the index.
Definition: squeezedcombobox.cpp:195
QComboBox::setCurrentIndex
void setCurrentIndex(int index)
QString::length
int length() const
QStyleOptionComboBox
QString::left
QString left(int n) const
QWidget::setToolTip
void setToolTip(const QString &)
QList::constEnd
const_iterator constEnd() const
QList::constBegin
const_iterator constBegin() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
KDcrawIface::SqueezedComboBox::insertSqueezedList
void insertSqueezedList(const QStringList &newItems, int index)
This inserts items to the list.
Definition: squeezedcombobox.cpp:121
QStyle::sizeFromContents
virtual QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const =0
QFontMetrics::lineSpacing
int lineSpacing() const
QVariant
QComboBox
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:19:36 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libs/libkdcraw/libkdcraw

Skip menu "libs/libkdcraw/libkdcraw"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdegraphics API Reference

Skip menu "kdegraphics API Reference"
  •     libkdcraw
  •     libkexiv2
  •     libkipi
  •     libksane
  • okular

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal