23 #include "KPropertyEditorView.h" 24 #include "KPropertyListData.h" 25 #include "KPropertyUtils.h" 26 #include "KPropertyUtils_p.h" 27 #include "KPropertyWidgetsFactory.h" 28 #include "kproperty_debug.h" 31 #include <QGuiApplication> 33 KPropertyComboBoxEditorOptions::KPropertyComboBoxEditorOptions()
34 : extraValueAllowed(false)
38 KPropertyComboBoxEditorOptions::KPropertyComboBoxEditorOptions(
39 const KPropertyComboBoxEditorOptions &other)
44 KPropertyComboBoxEditorOptions::~KPropertyComboBoxEditorOptions()
49 KPropertyComboBoxEditorOptions& KPropertyComboBoxEditorOptions::operator=(
const KPropertyComboBoxEditorOptions &other)
52 if (other.iconProvider) {
53 iconProvider = other.iconProvider->clone();
56 iconProvider =
nullptr;
58 extraValueAllowed = other.extraValueAllowed;
64 class Q_DECL_HIDDEN KPropertyComboBoxEditor::Private
75 bool setValueEnabled =
true;
76 KPropertyComboBoxEditorOptions options;
80 KPropertyComboBoxEditor::KPropertyComboBoxEditor(
const KPropertyListData &listData,
81 const KPropertyComboBoxEditorOptions &options,
86 setEditable(d->options.extraValueAllowed);
88 setAutoCompletion(
true);
90 setListData(listData);
91 connect(
this, SIGNAL(activated(
int)),
this, SLOT(slotValueChanged(
int)));
96 if (!KPropertyUtilsPrivate::gridLineColor(
this).isValid()) {
107 padding-top: %2px; padding-left: %3px; }").
arg(borderSheet(
this)).
arg(paddingTop).
arg(paddingLeft);
111 KPropertyComboBoxEditor::~KPropertyComboBoxEditor()
117 QString KPropertyComboBoxEditor::borderSheet(
const QWidget *widget)
129 bool KPropertyComboBoxEditor::listDataKeysAvailable()
const 131 return !d->listData.keys().isEmpty();
134 QVariant KPropertyComboBoxEditor::value()
const 136 if (!listDataKeysAvailable())
139 const int idx = currentIndex();
140 if (idx < 0 || idx >= d->listData.keys().count()
141 || d->listData.names()[idx].toString() != currentText().trimmed())
143 if (!d->options.extraValueAllowed || currentText().isEmpty())
145 return currentText().trimmed();
147 return d->listData.keys()[idx];
150 void KPropertyComboBoxEditor::setValue(
const QVariant &value)
152 if (!d->setValueEnabled)
154 const int idx = d->listData.keys().isEmpty() ? -1 : d->listData.keys().indexOf(value);
156 if (idx >= 0 && idx < count()) {
157 setCurrentIndex(idx);
161 if (d->options.extraValueAllowed) {
165 kprWarning() <<
"NO SUCH KEY:" << value.
toString()
169 for (
int i = 0; i < count(); i++)
171 kprWarning() <<
"NO SUCH INDEX WITHIN COMBOBOX:" << idx
172 <<
"count=" << count() <<
"value=" << value.
toString()
173 <<
"property=" <<
objectName() <<
"\nActual combobox contents" 176 setItemText(currentIndex(),
QString());
180 void KPropertyComboBoxEditor::fillValues()
184 if (!listDataKeysAvailable())
188 for (
const QString &itemName : d->listData.namesAsStringList()) {
190 if (d->options.iconProvider) {
191 QIcon icon = d->options.iconProvider->icon(index);
192 setItemIcon(index, icon);
197 d->completer =
new QCompleter(d->listData.namesAsStringList());
198 d->completer->setWidget(
this);
204 d->listData = listData;
208 void KPropertyComboBoxEditor::slotValueChanged(
int)
210 emit commitData(
this );
216 KPropertyWidgetsFactory::paintTopGridLine(
this);
221 KPropertyComboBoxDelegate::KPropertyComboBoxDelegate()
223 options()->setBordersVisible(
true);
231 return property->value().toString();
232 if (property->value().isNull())
235 const
int idx = listData->keys().indexOf(property->value());
241 return property->value().toString();
243 return property->listData()->names()[idx].toString();
246 QString KPropertyComboBoxDelegate::valueToString(
const QVariant& value,
const QLocale &locale)
const 249 return value.toString();
252 QWidget* KPropertyComboBoxDelegate::createEditor(
int type,
QWidget *parent,
258 KProperty *
property = KPropertyUtils::propertyForIndex(index);
262 KPropertyComboBoxEditorOptions options;
263 options.extraValueAllowed =
property->option(
"extraValueAllowed",
false).toBool();
264 KPropertyComboBoxEditor *cb =
new KPropertyComboBoxEditor(*property->
listData(), options,
parent);
QVariant option(const char *name, const QVariant &defaultValue=QVariant()) const
Returns value of given option Option is set if returned value is not null. If there is no option for ...
QVariant property(const char *name) const const
KPropertyListData * listData() const
The base class representing a single property.
virtual void paintEvent(QPaintEvent *e) override
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
bool toBool() const const
QString fromLatin1(const char *str, int size)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject * parent() const const
QString toString() const const
A data container for properties of list type.
KIOFILEWIDGETS_EXPORT QStringList list(const QString &fileClass)