///initializations ///added a stacked widget to implement the site and interface viewer ///setting up the view and queries vpnTab::vpnTab(QString inputVpnName,QString vpnDescription,QString inputAddressRange,QString inputVlanRange,unsigned int inputVpnId):ui(new Ui::vpnTab) { ui->setupUi(this); ui->stackedWidget->insertWidget(0,&viewSite); ui->stackedWidget->setCurrentIndex(0); //I've used a stacked widget to implement the site and interface viewer //I change between them by setting the index depending on where the user clicks vpnId=inputVpnId; vpnName=inputVpnName; addressRange=inputAddressRange; vlanRange=inputVlanRange; ui->label->setText("VPN name: "+vpnName); ui->label_2->setText("Description: "+vpnDescription); ui->label_3->setText("Address range: "+addressRange); ui->label_4->setText("VLAN: "+vlanRange); //initializations siteModel = new QSqlQueryModel; QString qry=QString("SELECT siteId,siteName,siteAddressRange FROM sites where vpnId=%1").arg(vpnId); siteModel->setQuery(qry); siteModel->setHeaderData(0, Qt::Horizontal, tr("Site id")); siteModel->setHeaderData(1, Qt::Horizontal, tr("Site name")); siteModel->setHeaderData(2, Qt::Horizontal, tr("Address range")); ui->tableView->setModel(siteModel); ui->tableView->setColumnHidden(0,1); ui->tableView->horizontalHeader()->setDefaultSectionSize(120); ui->tableView->horizontalHeader()->setStretchLastSection(true); //fetching the site list and sizing up elements ui->splitter->setStretchFactor(0,1); ui->splitter->setStretchFactor(1,2); //connecting signals connect(&viewSite, SIGNAL(interfaceDetail(uint,QString,QString)),this, SLOT(detailRequested(uint,QString,QString))); //signal to view the details of an interface after double click connect(&viewInterface, SIGNAL(back()),this, SLOT(backToInterfaces())); //signal to switch back to the interfaces list from the details list connect(&addSite, SIGNAL(addedSite()),this, SLOT(refreshSite())); connect(&del, SIGNAL(deleted()),this, SLOT(refreshSite())); connect(&del, SIGNAL(deleted()),&viewSite, SLOT(refreshInterfaces())); //signal to refresh lists after deletion of site/interface or successfully adding a site }
const std::vector<Serial::Device>& Serial::getDevices( bool forceRefresh ) { if( ( ! forceRefresh ) && ( sDevicesInited ) ) return sDevices; sDevices.clear(); #if defined( CINDER_MAC ) ::DIR *dir; ::dirent *entry; dir = ::opendir( "/dev" ); if( ! dir ) { throw SerialExcDeviceEnumerationFailed(); } else { while( ( entry = ::readdir( dir ) ) != NULL ) { std::string str( (char *)entry->d_name ); if( ( str.substr( 0, 4 ) == "tty." ) || ( str.substr( 0, 3 ) == "cu." ) ) { sDevices.push_back( Serial::Device( str ) ); } } } #elif defined( CINDER_MSW ) ::HDEVINFO devInfoSet; ::DWORD devCount = 0; ::SP_DEVINFO_DATA devInfo; ::SP_DEVICE_INTERFACE_DATA devInterface; DWORD size = 0; devInfoSet = ::SetupDiGetClassDevs( &GUID_SERENUM_BUS_ENUMERATOR, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE ); if( devInfoSet == INVALID_HANDLE_VALUE ) throw SerialExcDeviceEnumerationFailed(); devInterface.cbSize = sizeof( ::SP_DEVICE_INTERFACE_DATA ); while( ::SetupDiEnumDeviceInterfaces( devInfoSet, 0, &GUID_SERENUM_BUS_ENUMERATOR, devCount++, &devInterface ) ) { // See how large a buffer we require for the device interface details ::SetupDiGetDeviceInterfaceDetail( devInfoSet, &devInterface, 0, 0, &size, 0 ); devInfo.cbSize = sizeof( ::SP_DEVINFO_DATA ); shared_ptr<::SP_DEVICE_INTERFACE_DETAIL_DATA> interfaceDetail( (::SP_DEVICE_INTERFACE_DETAIL_DATA*)calloc( 1, size ), free ); if( interfaceDetail ) { interfaceDetail->cbSize = sizeof( ::SP_DEVICE_INTERFACE_DETAIL_DATA ); devInfo.cbSize = sizeof( ::SP_DEVINFO_DATA ); if( ! ::SetupDiGetDeviceInterfaceDetail( devInfoSet, &devInterface, interfaceDetail.get(), size, 0, &devInfo ) ) { continue; } char friendlyName[2048]; size = sizeof( friendlyName ); friendlyName[0] = 0; ::DWORD propertyDataType; if( ! ::SetupDiGetDeviceRegistryPropertyA( devInfoSet, &devInfo, SPDRP_FRIENDLYNAME, &propertyDataType, (LPBYTE)friendlyName, size, 0 ) ) { continue; } sDevices.push_back( Serial::Device( string( friendlyName ), toUtf8( interfaceDetail->DevicePath ) ) ); } } ::SetupDiDestroyDeviceInfoList(devInfoSet); #endif sDevicesInited = true; return sDevices; }