// Slot to set the lineedit validator. If plural is true multiple values can // be supplied separated by comma, semi-colon or white space void shared::ValidatingDialog::setValidator(const int& vd, bool plural) { // setup a switch to set the validator const QString s_ip4 = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"; const QString s_ip6 = "(?:[0-9a-fA-F]{1,4})"; const QString s_mac = "(?:[0-9a-fA-F]{1,2})"; const QString s_hex = "[0-9a-fA-F]*"; const QString s_int = "[0-9]*"; const QString s_dom = "((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}"; const QString s_wd = "[0-9,a-zA-Z_\\.\\!\\@\\#\\$\\%\\^\\&\\*\\+\\-]*"; const QString s_ch = "\\S"; const QString s_start = (plural ? "\\s?|(" : "^"); const QString s_end = (plural ? "(\\s*|[,|;|\\s]\\s*|$))+" : "$"); switch (vd){ case CMST::ValDialog_IPv4: { QRegularExpression rx4(s_start + s_ip4 + "(?:\\." + s_ip4 + "){3}" + s_end); QRegularExpressionValidator* lev_4 = new QRegularExpressionValidator(rx4, this); lineedit->setValidator(lev_4); } break; case CMST::ValDialog_IPv6: { QRegularExpression rx6(s_start + s_ip6 + "(?::" + s_ip6 + "){7}" + s_end); QRegularExpressionValidator* lev_6 = new QRegularExpressionValidator(rx6, this); lineedit->setValidator(lev_6); } break; case CMST::ValDialog_MAC: { QRegularExpression rxm(s_start + s_mac + "(?::" + s_mac + "){5}" + s_end); QRegularExpressionValidator* lev_m = new QRegularExpressionValidator(rxm, this); lineedit->setValidator(lev_m); } break; case CMST::ValDialog_46: { QRegularExpression rx46(s_start + "(" + s_ip4 + "(?:\\." + s_ip4 + "){3}|" + s_ip6 + "(?::" + s_ip6 + "){7})" + s_end); QRegularExpressionValidator* lev_46 = new QRegularExpressionValidator(rx46, this); lineedit->setValidator(lev_46); } break; case CMST::ValDialog_Hex: { QRegularExpression rxh(s_start + s_hex + s_end); QRegularExpressionValidator* lev_h = new QRegularExpressionValidator(rxh, this); lineedit->setValidator(lev_h); } break; case CMST::ValDialog_Int: { QRegularExpression rxint(s_start + s_int + s_end); QRegularExpressionValidator* lev_int = new QRegularExpressionValidator(rxint, this); lineedit->setValidator(lev_int); } break; case CMST::ValDialog_Dom: { QRegularExpression rxdom(s_start + s_dom + s_end); QRegularExpressionValidator* lev_dom = new QRegularExpressionValidator(rxdom, this); lineedit->setValidator(lev_dom); } break; case CMST::ValDialog_Wd: { QRegularExpression rxwd(s_start + s_wd + s_end); QRegularExpressionValidator* lev_wd = new QRegularExpressionValidator(rxwd, this); lineedit->setValidator(lev_wd); } break; case CMST::ValDialog_min1ch: { QRegularExpression rx1char(s_start + s_ch + "{1,}" + s_end); QRegularExpressionValidator* lev_1char = new QRegularExpressionValidator(rx1char, this); lineedit->setValidator(lev_1char); } break; case CMST::ValDialog_min8ch: { QRegularExpression rx8char(s_start + s_ch + "{8,}" + s_end); QRegularExpressionValidator* lev_8char = new QRegularExpressionValidator(rx8char, this); lineedit->setValidator(lev_8char); } break; case CMST::ValDialog_46d: { QRegularExpression rx46d(s_start + "(" + s_ip4 + "(?:\\." + s_ip4 + "){3}|" + s_ip6 + "(?::" + s_ip6 + "){7}|" + s_dom + ")" + s_end); QRegularExpressionValidator* lev_46d = new QRegularExpressionValidator(rx46d, this); lineedit->setValidator(lev_46d); } break; default: lineedit->setValidator(0); break; } // switch return; }
PropertiesEditor::PropertiesEditor(QWidget* parent, const arrayElement& ae) : QDialog(parent) { // Setup the user interface ui.setupUi(this); // Data members objpath = ae.objpath; objmap = ae.objmap; sl_ipv4_method << "dhcp" << "manual" << "off"; sl_ipv6_method << "auto" << "manual" << "off"; sl_ipv6_privacy << "disabled" << "enabled" << "prefered"; // misspelling prefered is necessary sl_proxy_method << "direct" << "auto" << "manual"; // Setup comboboxes ui.comboBox_ipv4method->addItems(TranslateStrings::cmtr_sl(sl_ipv4_method) ); ui.comboBox_ipv6method->addItems(TranslateStrings::cmtr_sl(sl_ipv6_method) ); ui.comboBox_ipv6privacy->addItems(TranslateStrings::cmtr_sl(sl_ipv6_privacy) ); ui.comboBox_proxymethod->addItems(TranslateStrings::cmtr_sl(sl_proxy_method) ); // Setup the address validator and apply it to any ui QLineEdit. // The lev validator will validate an IP address or up to one white space character (to allow // editing of the line edit). const QString s_ip4 = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])"; const QString s_ip6 = "(?:[0-9a-fA-F]{1,4})"; const QString s_dom = "((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}"; // QLineEdits that allow single address QRegularExpression rx4("\\s?|^" + s_ip4 + "(?:\\." + s_ip4 + "){3}" + "$"); QRegularExpression rx6("\\s?|^" + s_ip6 + "(?::" + s_ip6 + "){7}" + "$"); QRegularExpressionValidator* lev_4 = new QRegularExpressionValidator(rx4, this); QRegularExpressionValidator* lev_6 = new QRegularExpressionValidator(rx6, this); ui.lineEdit_ipv4address->setValidator(lev_4); ui.lineEdit_ipv4netmask->setValidator(lev_4); ui.lineEdit_ipv4gateway->setValidator(lev_4); ui.lineEdit_ipv6address->setValidator(lev_6); ui.lineEdit_ipv6gateway->setValidator(lev_6); // now QLineEdits that allow multiple addresses QRegularExpression rx46d("\\s?|((" + s_ip4 + "(?:\\." + s_ip4 + "){3}|"+ s_ip6 + "(?::" + s_ip6 + "){7}|" + s_dom + ")(\\s*[,|;|\\s]\\s*))+"); QRegularExpressionValidator* lev_m = new QRegularExpressionValidator(rx46d, this); ui.lineEdit_nameservers->setValidator(lev_m); ui.lineEdit_timeservers->setValidator(lev_m); // initialize and populate submaps ipv4map.clear(); ipv6map.clear(); proxmap.clear(); shared::extractMapData(ipv4map, objmap.value("IPv4.Configuration") ); shared::extractMapData(ipv6map, objmap.value("IPv6.Configuration") ); shared::extractMapData(proxmap, objmap.value("Proxy.Configuration") ); // Seed initial values in the dialog. ui.checkBox_autoconnect->setChecked(objmap.value("AutoConnect").toBool() ); ui.lineEdit_nameservers->setText(objmap.value("Nameservers.Configuration").toStringList().join("\n") ); ui.lineEdit_timeservers->setText(objmap.value("Timeservers.Configuration").toStringList().join("\n")); ui.lineEdit_domains->setText(objmap.value("Domains.Configuration").toStringList().join("\n")); // ipv4 page if (! ipv4map.value("Method").toString().isEmpty() ) { ui.comboBox_ipv4method->setCurrentIndex(sl_ipv4_method.indexOf(QRegExp(ipv4map.value("Method").toString())) ); } ui.lineEdit_ipv4address->setText(ipv4map.value("Address").toString() ); ui.lineEdit_ipv4netmask->setText(ipv4map.value("Netmask").toString() ); ui.lineEdit_ipv4gateway->setText(ipv4map.value("Gateway").toString() ); // ipv6 page if (! ipv6map.value("Method").toString().isEmpty() ) { ui.comboBox_ipv6method->setCurrentIndex(sl_ipv6_method.indexOf(QRegularExpression(ipv6map.value("Method").toString())) ); } ui.spinBox_ipv6prefixlength->setValue(ipv6map.value("PrefixLength").toUInt() ); ui.lineEdit_ipv6address->setText(ipv6map.value("Address").toString() ); ui.lineEdit_ipv6gateway->setText(ipv6map.value("Gateway").toString() ); if (! ipv6map.value("Privacy").toString().isEmpty() ) { ui.comboBox_ipv6privacy->setCurrentIndex(sl_ipv6_privacy.indexOf(QRegularExpression(ipv6map.value("Privacy").toString())) ); } // proxy page if (! proxmap.value("Method").toString().isEmpty() ) { ui.comboBox_proxymethod->setCurrentIndex(sl_proxy_method.indexOf(QRegularExpression(proxmap.value("Method").toString())) ); } ui.lineEdit_proxyservers->setText(proxmap.value("Servers").toStringList().join("\n") ); ui.lineEdit_proxyexcludes->setText(proxmap.value("Excludes").toStringList().join("\n") ); ui.lineEdit_proxyurl->setText(proxmap.value("URL").toString() ); // connect signals to slots connect(ui.toolButton_whatsthis, SIGNAL(clicked()), this, SLOT(showWhatsThis())); connect(ui.pushButton_resetpage, SIGNAL(clicked()), this, SLOT(resetPage())); connect(ui.pushButton_resetall, SIGNAL(clicked()), this, SLOT(resetAll())); connect(ui.pushButton_ok, SIGNAL(clicked()), this, SLOT(updateConfiguration())); }