summaryrefslogtreecommitdiff
path: root/ui/qt/extcap_argument.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui/qt/extcap_argument.cpp')
-rw-r--r--ui/qt/extcap_argument.cpp208
1 files changed, 65 insertions, 143 deletions
diff --git a/ui/qt/extcap_argument.cpp b/ui/qt/extcap_argument.cpp
index ab1916db8d..b2ff0d04a7 100644
--- a/ui/qt/extcap_argument.cpp
+++ b/ui/qt/extcap_argument.cpp
@@ -44,149 +44,7 @@
#include <extcap_parser.h>
#include <extcap_argument_file.h>
-
-class ExtArgMultiSelect : public ExtcapArgument
-{
-public:
- ExtArgMultiSelect(extcap_arg * argument) :
- ExtcapArgument(argument), treeView(0), viewModel(0) {};
-
- virtual QList<QStandardItem *> valueWalker(ExtcapValueList list, QStringList &defaults)
- {
- ExtcapValueList::iterator iter = list.begin();
- QList<QStandardItem *> items;
-
- while ( iter != list.end() )
- {
- QStandardItem * item = new QStandardItem((*iter).value());
- if ( (*iter).enabled() == false )
- {
- item->setSelectable(false);
- }
- else
- item->setSelectable(true);
-
- item->setData((*iter).call(), Qt::UserRole);
- if ((*iter).isDefault())
- defaults << (*iter).call();
-
- item->setEditable(false);
- QList<QStandardItem *> childs = valueWalker((*iter).children(), defaults);
- if ( childs.length() > 0 )
- item->appendRows(childs);
-
- items << item;
- ++iter;
- }
-
- return items;
- }
-
- void selectItemsWalker(QStandardItem * item, QStringList defaults)
- {
- QModelIndexList results;
- QModelIndex index;
-
- if ( item->hasChildren() )
- {
- for (int row = 0; row < item->rowCount(); row++)
- {
- QStandardItem * child = item->child(row);
- if ( child != 0 )
- {
- selectItemsWalker(child, defaults);
- }
- }
- }
-
- QString data = item->data(Qt::UserRole).toString();
-
- if ( defaults.contains(data) )
- {
- treeView->selectionModel()->select(item->index(), QItemSelectionModel::Select);
- index = item->index();
- while ( index.isValid() )
- {
- treeView->setExpanded(index, true);
- index = index.parent();
- }
- }
- }
-
- virtual QWidget * createEditor(QWidget * parent)
- {
- QStringList defaults;
-
- QList<QStandardItem *> items = valueWalker(values, defaults);
- if (items.length() == 0)
- return new QWidget();
-
- if ( _default != 0 )
- defaults = _default->toString().split(",", QString::SkipEmptyParts);
-
- viewModel = new QStandardItemModel();
- QList<QStandardItem *>::const_iterator iter = items.constBegin();
- while ( iter != items.constEnd() )
- {
- ((QStandardItemModel *)viewModel)->appendRow((*iter));
- ++iter;
- }
-
- treeView = new QTreeView(parent);
- treeView->setModel(viewModel);
-
- /* Shows at minimum 6 entries at most desktops */
- treeView->setMinimumHeight(100);
- treeView->setHeaderHidden(true);
- treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
- treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
-
- for (int row = 0; row < viewModel->rowCount(); row++ )
- selectItemsWalker(((QStandardItemModel*)viewModel)->item(row), defaults);
-
- return treeView;
- }
-
- virtual QString value()
- {
- if ( viewModel == 0 )
- return QString();
-
- QStringList result;
- QModelIndexList selected = treeView->selectionModel()->selectedIndexes();
-
- if ( selected.size() <= 0 )
- return QString();
-
- QModelIndexList::const_iterator iter = selected.constBegin();
- while ( iter != selected.constEnd() )
- {
- QModelIndex index = (QModelIndex)(*iter);
-
- result << viewModel->data(index, Qt::UserRole).toString();
-
- ++iter;
- }
-
- return result.join(QString(","));
- }
-
- virtual QString defaultValue()
- {
- if ( _argument != 0 && _argument->default_complex != 0)
- {
- gchar * str = extcap_get_complex_as_string(_argument->default_complex);
- if ( str != 0 )
- return QString(str);
- }
-
- return QString();
- }
-
-private:
- QTreeView * treeView;
- QAbstractItemModel * viewModel;
-};
+#include <extcap_argument_multiselect.h>
class ExtArgSelector : public ExtcapArgument
{
@@ -219,6 +77,8 @@ public:
boxSelection->setCurrentIndex(selected);
}
+ connect ( boxSelection, SIGNAL(currentIndexChanged(int)), SLOT(onIntChanged(int)) );
+
return boxSelection;
}
@@ -237,6 +97,7 @@ public:
}
private:
+
QComboBox * boxSelection;
};
@@ -287,6 +148,8 @@ public:
anyChecked = true;
}
}
+
+ connect(radio, SIGNAL(clicked(bool)), SLOT(onBoolChanged(bool)));
selectorGroup->addButton(radio, count);
vrLayout->addWidget(radio);
@@ -319,6 +182,7 @@ public:
}
private:
+
QButtonGroup * selectorGroup;
QList<QString> * callStrings;
};
@@ -350,6 +214,8 @@ public:
boolBox->setCheckState(Qt::Checked);
}
+ connect (boolBox, SIGNAL(stateChanged(int)), SLOT(onIntChanged(int)));
+
return boolBox;
}
@@ -381,11 +247,13 @@ public:
}
private:
+
QCheckBox * boolBox;
};
class ExtArgText : public ExtcapArgument
{
+
public:
ExtArgText(extcap_arg * argument) :
ExtcapArgument(argument), textBox(0)
@@ -402,6 +270,8 @@ public:
if ( _argument->tooltip != NULL )
textBox->setToolTip(QString().fromUtf8(_argument->tooltip));
+ connect(textBox , SIGNAL(textChanged(QString)), SLOT(onStringChanged(QString)));
+
return textBox;
}
@@ -413,6 +283,14 @@ public:
return textBox->text();
}
+ virtual bool isValid()
+ {
+ if ( isRequired() && value().length() == 0 )
+ return false;
+
+ return true;
+ }
+
virtual QString defaultValue()
{
if ( _argument != 0 && _argument->default_complex != 0)
@@ -426,6 +304,7 @@ public:
}
protected:
+
QLineEdit * textBox;
};
@@ -438,6 +317,7 @@ public:
virtual QWidget * createEditor(QWidget * parent)
{
textBox = (QLineEdit *)ExtArgText::createEditor(parent);
+ textBox->disconnect(SIGNAL(textChanged(QString)));
if ( _argument->arg_type == EXTCAP_ARG_INTEGER || _argument->arg_type == EXTCAP_ARG_UNSIGNED )
{
@@ -465,6 +345,8 @@ public:
textBox->setText(defaultValue());
+ connect(textBox, SIGNAL(textChanged(QString)), SLOT(onStringChanged(QString)));
+
return textBox;
};
@@ -488,6 +370,7 @@ public:
return result;
}
+
};
ExtcapValue::~ExtcapValue() {}
@@ -582,6 +465,12 @@ QString ExtcapArgument::value()
return QString();
}
+
+bool ExtcapArgument::isValid()
+{
+ return value().length() > 0;
+}
+
QString ExtcapArgument::defaultValue()
{
return QString();
@@ -609,6 +498,22 @@ void ExtcapArgument::setDefault(GHashTable * defaultsList)
}
}
+bool ExtcapArgument::isRequired()
+{
+ if ( _argument != NULL )
+ return _argument->is_required;
+
+ return FALSE;
+}
+
+bool ExtcapArgument::isDefault()
+{
+ if ( value().compare(defaultValue()) == 0 )
+ return true;
+
+ return false;
+}
+
ExtcapArgument * ExtcapArgument::create(extcap_arg * argument, GHashTable * device_defaults)
{
if ( argument == 0 || argument->display == 0 )
@@ -642,6 +547,23 @@ ExtcapArgument * ExtcapArgument::create(extcap_arg * argument, GHashTable * devi
return result;
}
+/* The following is a necessity, because Q_Object does not do well with multiple inheritances */
+void ExtcapArgument::onStringChanged(QString)
+{
+ emit valueChanged();
+}
+
+void ExtcapArgument::onIntChanged(int)
+{
+ if ( isValid() )
+ emit valueChanged();
+}
+
+void ExtcapArgument::onBoolChanged(bool)
+{
+ emit valueChanged();
+}
+
/*
* Editor modelines
*