}
 }
 
+static bool
+isVariantStringArray(const QVariant &var)
+{
+    if (var.isNull() || var.userType() != QMetaType::type("ApiArray"))
+        return false;
+
+    ApiArray array = var.value<ApiArray>();
+    QList<QVariant> origValues = array.values();
+    if (origValues.isEmpty() ||
+        origValues.first().userType() != QVariant::String)
+        return false;
+
+    return true;
+}
 
 ArgumentsItemEditorFactory::ArgumentsItemEditorFactory()
     : QItemEditorFactory()
     QString str = m_ui.glslEdit->toPlainText();
     m_ui.lengthLabel->setText(
         tr("%1").arg(str.length()));
+
+    m_ui.selectStringCB->setItemData(
+        m_ui.selectStringCB->currentIndex(),
+        str);
 }
 
 void ArgumentsEditor::accept()
                                        const QVariant &originalValue) const
 {
     QVariant val;
+
+    //Handle string arrays specially
+    if (isVariantStringArray(originalValue)) {
+        ApiArray array = originalValue.value<ApiArray>();
+        return arrayFromEditor(array);
+    }
+
     for (int topRow = 0; topRow < m_model->rowCount(); ++topRow) {
         QModelIndex nameIdx = m_model->index(topRow, 0, QModelIndex());
         QString argName = nameIdx.data().toString();
                                          const ApiArray &origArray) const
 {
     QList<QVariant> origValues = origArray.values();
-    QVariant newValue;
     if (origValues.isEmpty())
         return QVariant::fromValue(ApiArray());
 
-    if (origValues.first().userType() == QVariant::String) {
-        //shaders
+    QList<QVariant> lst;
+    for (int i = 0; i < origValues.count(); ++i) {
+        QModelIndex valIdx = m_model->index(i, 1, parentIndex);
+        QVariant var = valIdx.data();
+        //qDebug()<<"\t\tarray "<<i<<") "<<var;
+        lst.append(var);
+    }
+    return QVariant::fromValue(ApiArray(lst));
+}
+
+QVariant ArgumentsEditor::arrayFromEditor(const ApiArray &origArray) const
+{
+    QList<QVariant> vals;
+    QList<QVariant> origValues = origArray.values();
 
-    } else {
-        QList<QVariant> lst;
-        for (int i = 0; i < origValues.count(); ++i) {
-            QModelIndex valIdx = m_model->index(i, 1, parentIndex);
-            QVariant var = valIdx.data();
-            //qDebug()<<"\t\tarray "<<i<<") "<<var;
-            lst.append(var);
-        }
-        newValue = QVariant::fromValue(ApiArray(lst));
+    Q_ASSERT(isVariantStringArray(QVariant::fromValue(origArray)));
+    //shaders
+    for (int i = 0; i < m_ui.selectStringCB->count(); ++i) {
+        QVariant val = m_ui.selectStringCB->itemData(i);
+        vals.append(val);
     }
-    return newValue;
+    return QVariant::fromValue(ApiArray(vals));
 }
 
 #include "argumentseditor.moc"