/* # Copyright (c) 2009, 2010 - OpenSLX Project, Computer Center University of # Freiburg # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING # # If you have any feedback please consult http://openslx.org/feedback and # send your suggestions, praise, or complaints to feedback@openslx.org # # General information about OpenSLX can be found at http://openslx.org/ # ----------------------------------------------------------------------------- # clientConfigDialog.cpp # - graphical interface # - all configuration used by pvs/pvsgui is done here # ----------------------------------------------------------------------------- */ #include #include "clientConfigDialog.h" #include #include #include // For getting the network interface list: #ifdef __linux # include # include #endif using namespace std; ClientConfigDialog::ClientConfigDialog(QWidget *parent) : QDialog(parent), _interfaceListModel(0) { setupUi(this); connect(this, SIGNAL(accepted()), this, SLOT(writeSettings())); connect(radioButtonOtherRO, SIGNAL(clicked()), this, SLOT(checkPermissions())); connect(reloadInterfaceListButton, SIGNAL(clicked()), this, SLOT(reloadNetworkInterfaceList())); reloadNetworkInterfaceList(); interfaceList->setModel(_interfaceListModel); interfaceList->setModelColumn(0); } ClientConfigDialog::~ClientConfigDialog() { } //////////////////////////////////////////////////////////////////////////////// // Public void ClientConfigDialog::open() { readSettings(); setVisible(true); } void ClientConfigDialog::readSettings() { if (_settings.value("Display/location").isNull()) comboBox->setCurrentIndex(1); else comboBox->setCurrentIndex(_settings.value("Display/location").toInt()); if (_settings.value("Permissions/vnc_lecturer").toString() == "rw") radioButtonLecturerRW->setChecked(true); else if (_settings.value("Permissions/vnc_lecturer").toString() == "ro") radioButtonLecturerRO->setChecked(true); else radioButtonLecturerNO->setChecked(true); if (_settings.value("Permissions/vnc_other").toString() == "rw") radioButtonOtherRW->setChecked(true); else if (_settings.value("Permissions/vnc_other").toString() == "ro") radioButtonOtherRO->setChecked(true); else radioButtonOtherNO->setChecked(true); checkBoxAllowChat->setChecked( _settings.value("Permissions/allow_chat").toBool()); checkBoxAllowFiletransfer->setChecked(_settings.value( "Permissions/allow_filetransfer").toBool()); if(!_settings.value("Muticast/interface").isNull()) interfaceList->setEditText(_settings.value("Multicast/interface").toString()); qDebug("[%s] Setting read from: '%s'", metaObject()->className(), qPrintable(_settings.fileName())); } void ClientConfigDialog::writeSettings() { _settings.setValue("Display/location", comboBox->currentIndex()); if (radioButtonLecturerRW->isChecked()) _settings.setValue("Permissions/vnc_lecturer", "rw"); else if (radioButtonLecturerRO->isChecked()) _settings.setValue("Permissions/vnc_lecturer", "ro"); else _settings.setValue("Permissions/vnc_lecturer", "no"); if (radioButtonOtherRW->isChecked()) _settings.setValue("Permissions/vnc_other", "rw"); else if (radioButtonOtherRO->isChecked()) _settings.setValue("Permissions/vnc_other", "ro"); else _settings.setValue("Permissions/vnc_other", "no"); _settings.setValue("Permissions/allow_chat", checkBoxAllowChat->isChecked()); _settings.setValue("Permissions/allow_filetransfer", checkBoxAllowFiletransfer->isChecked()); _settings.setValue("Multicast/interface", interfaceList->currentText()); _settings.sync(); emit configChanged(); qDebug("[%s] Settings written to: '%s'.", metaObject()->className(), qPrintable(_settings.fileName())); } //////////////////////////////////////////////////////////////////////////////// // Private void ClientConfigDialog::checkPermissions() { if (radioButtonLecturerNO->isChecked() && radioButtonOtherRO->isChecked()) radioButtonLecturerRO->setChecked(true); } void ClientConfigDialog::reloadNetworkInterfaceList() { #ifdef __linux static struct ifreq ifreqs[20]; ifconf ifconfigs; memset(&ifconfigs, 0, sizeof(ifconfigs)); ifconfigs.ifc_len = sizeof(ifreqs); ifconfigs.ifc_buf = (char*)&ifreqs; int nosock = socket(AF_INET, SOCK_STREAM, 0); if (nosock < 0) { qWarning() << "Could not get a socket descriptor:" << strerror(errno); } int retval; if ((retval = ioctl(nosock, SIOCGIFCONF, (char*)(&ifconfigs))) < 0) { qWarning() << "Could not get the list of interfaces:" << strerror(errno); return; } QStringList interfaces; for(int i = 0; i < ifconfigs.ifc_len/sizeof(struct ifreq); i++) { char ifname[IFNAMSIZ + 1]; strncpy(ifname, ifreqs[i].ifr_name, IFNAMSIZ); ifname[IFNAMSIZ] = '\0'; interfaces << QString::fromLocal8Bit(ifname); } if(!_interfaceListModel) _interfaceListModel = new QStringListModel(interfaces, this); else _interfaceListModel->setStringList(interfaces); #else # warning "We have no way to get your system's network interface list. Some porting may be required." #endif }