Exemplo n.º 1
0
PropertiesEditor::PropertiesEditor(QWidget* parent, const arrayElement& ae, bool (*extractMapData) (QMap<QString,QVariant>&,const QVariant&))
    : QDialog(parent)
{
  // Setup the user interface
  ui.setupUi(this);

  // Data members
  objpath = ae.objpath;
  objmap = ae.objmap;

  // 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).
  QString s_ip4 = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])";
  QString s_ip6 = "(?:[0-9a-fA-F]{1,4})";

  // 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 rx46("\\s?|((" + s_ip4 + "(?:\." + s_ip4 + "){3}|" + s_ip6 + "(?::" + s_ip6 + "){7})(\\s*[,|;|\\s]\\s*))+");
Exemplo n.º 2
0
// 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;
}
Exemplo n.º 3
0
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()));

}
Exemplo n.º 4
0
// ========================================================
int init1 (  )
{
    BL_FUNC_DEBUG


    PluginBl_Report *mcont = new PluginBl_Report;

    QMenu *pPluginMenu = NULL;
    /// Miramos si existe un menu Informes
    pPluginMenu = g_pluginbl_report->menuBar()->findChild<QMenu *> ( "menuInformes" );
    QMenu *pPluginVer = g_pluginbl_report->menuBar()->findChild<QMenu *> ( "menuVentana" );

    /// Buscamos ficheros adecuados
    QDir dir ( g_confpr->value( CONF_DIR_OPENREPORTS ) );
    dir.setFilter ( QDir::Files | QDir::NoSymLinks );
    dir.setSorting ( QDir::Size | QDir::Reversed );
    /// Hacemos un filtrado de busqueda
    QStringList filters;
    filters << "inf_*.txt";
    dir.setNameFilters ( filters );

    QFileInfoList list = dir.entryInfoList();

    
    for ( int i = 0; i < list.size(); ++i ) {
      
        QFileInfo fileInfo = list.at ( i );

        QFile file;
        file.setFileName ( g_confpr->value( CONF_DIR_OPENREPORTS ) + fileInfo.fileName() );
        file.open ( QIODevice::ReadOnly );
        QTextStream stream ( &file );
        QString buff = stream.readAll();
        file.close();

        /// Buscamos el titulo
        QString titulo = fileInfo.fileName();
        QRegExp rx3 ( " title\\s*=\\s*\"(.*)\"" );
        rx3.setMinimal ( true );
        if ( rx3.indexIn ( buff, 0 )  != -1 ) {
            titulo = rx3.cap ( 1 );
        } // end while

        QString pathtitulo = fileInfo.fileName();
        QRegExp rx1 ( "pathtitle\\s*=\\s*\"(.*)\"" );
        rx1.setMinimal ( true );
        if ( rx1.indexIn ( buff, 0 )  != -1 ) {
            pathtitulo = rx1.cap ( 1 );
        } else {
	    pathtitulo = titulo;
	} // end while

        /// Buscamos el icono
        QString icon = ":/Images/template2rml.png";
        QRegExp rx6 ( " icon\\s*=\\s*\"(.*)\"" );
        rx6.setMinimal ( true );
        if ( rx6.indexIn ( buff, 0 )  != -1 ) {
            icon = rx6.cap ( 1 );
        } // end while


	QMenuBar *menubar =g_pluginbl_report->menuBar();
	QMenu *menu = NULL;
	QStringList path = pathtitulo.split("\\");


	if (path.size() > 1) {
		    QList<QMenu *> allPButtons = menubar->findChildren<QMenu *>();
		    bool encontrado = false;
		    for (int j = 0; j < allPButtons.size(); ++j) {
			if (allPButtons.at(j)->title() == path[0]) {
			    encontrado = true;
			    menu = allPButtons.at(j);
			} // end if
		    } // end for

		    if (!encontrado) {
			QMenu *pPluginMenu1 = new QMenu (path[0] , menubar );
                        menubar->insertMenu ( pPluginVer->menuAction(), pPluginMenu1 );
			menu = pPluginMenu1;
		    } // end if
	} else {

		    if (!pPluginMenu) {
			    pPluginMenu = new QMenu ( _ ( "Informes" ), g_pluginbl_report->menuBar() );
			    pPluginMenu->setObjectName ( QString::fromUtf8 ( "menuInformes" ) );
			    g_pluginbl_report->menuBar()->insertMenu ( pPluginVer->menuAction(), pPluginMenu );
		    } // end if
		    menu = pPluginMenu;
	} // end if
	


	for (int i = 1; i < path.size()-1; ++i) {
	    QList<QMenu *> allPButtons = menu->findChildren<QMenu *>();
	    bool encontrado = false;
	    for (int j = 0; j < allPButtons.size(); ++j) {
		if (allPButtons.at(j)->title() == path[i]) {
		    encontrado = true;
		    menu = allPButtons.at(j);
		} // end if
	    } // end for

	    if (!encontrado) {
		QMenu *pPluginMenu1 = new QMenu ( path[i] , menu );
		menu->addMenu (  pPluginMenu1 );
		menu = pPluginMenu1;
	    } // end if

	} // end for

        /// Creamos el men&uacute;.
        QAction *accion = new QAction ( path[path.size()-1], 0 );
        accion->setIcon(QIcon(icon));
        accion->setObjectName ( fileInfo.fileName() );
        accion->setStatusTip ( titulo);
        accion->setWhatsThis ( titulo );
        mcont->connect ( accion, SIGNAL ( activated() ), mcont, SLOT ( elslot2() ) );
        menu->addAction ( accion );
    } // end for

    return 0;
}
Exemplo n.º 5
0
void Videoner_Handler::populateWebViewMenu(QMenu* menu, WebView* view, const QWebHitTestResult &r)
{
    m_view = view;
    if (m_pageyt) {
        QRegExp rx1("v=([^&]+)|youtu.be/([^&]+)|y2u.be/([^&]+)|youtube.com/embed/([^&]+)");
        QString videoId1;

        rx1.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx1.cap(i).isEmpty()) {
                videoId1 = rx1.cap(i);
                break;
            }
        }
        if (videoId1.isEmpty()) {
            rx1.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx1.cap(i).isEmpty()) {
                    videoId1 = rx1.cap(i);
                    break;
                }
            }
        }
        if (!videoId1.isEmpty()) {
            QString videoPage1;
            videoPage1 = "http://www.youtube.com/watch?v=" + videoId1;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, (m_sepyth ? SLOT(startExternalHandlerYt()) : SLOT(startExternalHandler())))->setData(videoPage1);
        }
    }
    if (m_pagevm) {
        QRegExp rx2("://vimeo.com/([^d]{8})");
        QString videoId2;

        rx2.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx2.cap(i).isEmpty()) {
                videoId2 = rx2.cap(i);
                break;
            }
        }
        if (videoId2.isEmpty()) {
            rx2.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx2.cap(i).isEmpty()) {
                    videoId2 = rx2.cap(i);
                    break;
                }
            }
        }
        if (!videoId2.isEmpty()) {
            QString videoPage2;
            videoPage2 = "http://vimeo.com/" + videoId2;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, SLOT(startExternalHandler()))->setData(videoPage2);
        }
    }
    if (m_pagell) {
        QRegExp rx3("www.liveleak.com/view?i=([a-z0-9]{3})_([^&]+)");
        QString videoId3;

        rx3.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx3.cap(i).isEmpty()) {
                videoId3 = rx3.cap(i);
                break;
            }
        }
        if (videoId3.isEmpty()) {
            rx3.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx3.cap(i).isEmpty()) {
                    videoId3 = rx3.cap(i);
                    break;
                }
            }
        }
        if (!videoId3.isEmpty()) {
            QString videoPage3;
            videoPage3 = "http://www.liveleak.com/view?i=" + videoId3;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, SLOT(startExternalHandler()))->setData(videoPage3);
        }
    }
    if (m_pagemc) {
        QRegExp rx4("www.metacafe.com/watch/([^d]+)/([^&]+)");
        QString videoId4;

        rx4.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx4.cap(i).isEmpty()) {
                videoId4 = rx4.cap(i);
                break;
            }
        }
        if (videoId4.isEmpty()) {
            rx4.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx4.cap(i).isEmpty()) {
                    videoId4 = rx4.cap(i);
                    break;
                }
            }
        }
        if (!videoId4.isEmpty()) {
            QString videoPage4;
            videoPage4 = "http://www.metacafe.com/watch/" + videoId4;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, SLOT(startExternalHandler()))->setData(videoPage4);
        }
    }
    if (m_pagedm) {
        QRegExp rx5("dailymotion.com/video/([a-z0-9]+_[^&]+)");
        QString videoId5;

        rx5.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx5.cap(i).isEmpty()) {
                videoId5 = rx5.cap(i);
                break;
            }
        }
        if (videoId5.isEmpty()) {
            rx5.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx5.cap(i).isEmpty()) {
                    videoId5 = rx5.cap(i);
                    break;
                }
            }
        }
        if (!videoId5.isEmpty()) {
            QString videoPage5;
            videoPage5 = "http://www.dailymotion.com/video/" + videoId5;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, SLOT(startExternalHandler()))->setData(videoPage5);
        }
    }
    if (m_pagebr) {
        QRegExp rx6("www.break.com/video/([^&]+)");
        QString videoId6;

        rx6.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx6.cap(i).isEmpty()) {
                videoId6 = rx6.cap(i);
                break;
            }
        }
        if (videoId6.isEmpty()) {
            rx6.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx6.cap(i).isEmpty()) {
                    videoId6 = rx6.cap(i);
                    break;
                }
            }
        }
        if (!videoId6.isEmpty()) {
            QString videoPage6;
            videoPage6 = "www.break.com/video/" + videoId6;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, SLOT(startExternalHandler()))->setData(videoPage6);
        }
    }
    if (m_pagehu) {
        QRegExp rx7("www.hulu.com/watch/([^d]+)");
        QString videoId7;

        rx7.indexIn(r.linkUrl().toString());
        for (int i = 1; i < 4; ++i) {
            if (!rx7.cap(i).isEmpty()) {
                videoId7 = rx7.cap(i);
                break;
            }
        }
        if (videoId7.isEmpty()) {
            rx7.indexIn(view->url().toString());
            for (int i = 1; i < 4; ++i) {
                if (!rx7.cap(i).isEmpty()) {
                    videoId7 = rx7.cap(i);
                    break;
                }
            }
        }
        if (!videoId7.isEmpty()) {
            QString videoPage7;
            videoPage7 = "http://www.hulu.com/watch/" + videoId7;
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, SLOT(startExternalHandler()))->setData(videoPage7);
        }
    }
    if (m_medel) {
        if (r.element().tagName().toLower() == QLatin1String("video")
           || r.element().tagName().toLower() == QLatin1String("audio")) {
            QUrl mediaLink = r.element().evaluateJavaScript("this.currentSrc").toUrl();
            menu->addAction(QIcon(":/videoner/data/videoner.png"), tr("Videonize!"), this, (m_sepmedel ? SLOT(startExternalHandlerMed()) : SLOT(startExternalHandler())))->setData(mediaLink);
        }
    }
}
Exemplo n.º 6
0
PropertiesEditor::PropertiesEditor(QWidget* parent, const arrayElement& ae, bool (*extractMapData) (QMap<QString,QVariant>&,const QVariant&))
    : QDialog(parent)
{
  // Setup the user interface
  ui.setupUi(this);

  // Data members
  objpath = ae.objpath;
  objmap = ae.objmap;

  // 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).
  QString s_ip4 = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])";
  QString s_ip6 = "(?:[0-9a-fA-F]{1,4})";

  // 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 rx46("\\s?|((" + s_ip4 + "(?:\\." + s_ip4 + "){3}|" + s_ip6 + "(?::" + s_ip6 + "){7})(\\s*[,|;|\\s]\\s*))+");
  QRegularExpressionValidator* lev_m = new QRegularExpressionValidator(rx46, this);
  ui.lineEdit_nameservers->setValidator(lev_m);
  ui.lineEdit_timeservers->setValidator(lev_m);

  // initialize and populate submaps
  ipv4map.clear();
  ipv6map.clear();
  proxmap.clear();
  extractMapData(ipv4map, objmap.value("IPv4.Configuration") );
  extractMapData(ipv6map, objmap.value("IPv6.Configuration") );
  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(ui.comboBox_ipv4method->findText(ipv4map.value("Method").toString(), Qt::MatchFixedString) );
  }
  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(ui.comboBox_ipv6method->findText(ipv6map.value("Method").toString(), Qt::MatchFixedString) );
  }
  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(ui.comboBox_ipv6privacy->findText(ipv6map.value("Privacy").toString(), Qt::MatchFixedString) );
  }

  // proxy page
  if (! proxmap.value("Method").toString().isEmpty() ) {
    ui.comboBox_proxymethod->setCurrentIndex(ui.comboBox_proxymethod->findText(proxmap.value("Method").toString(), Qt::MatchFixedString) );
  }
  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()));

}