/* Load data to corresponding widgets from cache, * this task SHOULD be performed in GUI thread only: */ void UIMachineSettingsSerialPage::getFromCache() { /* Setup tab order: */ Assert(firstWidget()); setTabOrder(firstWidget(), mTabWidget->focusProxy()); QWidget *pLastFocusWidget = mTabWidget->focusProxy(); /* For each serial port: */ for (int iPort = 0; iPort < mTabWidget->count(); ++iPort) { /* Get port page: */ UIMachineSettingsSerial *pPage = qobject_cast<UIMachineSettingsSerial*>(mTabWidget->widget(iPort)); /* Load port data to page: */ pPage->fetchPortData(m_cache.child(iPort)); /* Setup page validation: */ pPage->setValidator(mValidator); /* Setup tab order: */ pLastFocusWidget = pPage->setOrderAfter(pLastFocusWidget); } /* Applying language settings: */ retranslateUi(); /* Polish page finally: */ polishPage(); /* Revalidate if possible: */ if (mValidator) mValidator->revalidate(); }
bool UIMachineSettingsSerialPage::revalidate (QString &aWarning, QString &aTitle) { bool valid = true; QStringList ports; QStringList paths; int index = 0; for (; index < mTabWidget->count(); ++ index) { QWidget *tab = mTabWidget->widget (index); UIMachineSettingsSerial *page = static_cast<UIMachineSettingsSerial*> (tab); if (!page->mGbSerial->isChecked()) continue; /* Check the predefined port number unicity */ if (!page->isUserDefined()) { QString port = page->mCbNumber->currentText(); valid = !ports.contains (port); if (!valid) { aWarning = tr ("Duplicate port number selected "); aTitle += ": " + vboxGlobal().removeAccelMark (mTabWidget->tabText (mTabWidget->indexOf (tab))); break; } ports << port; } /* Check the port path emptiness & unicity */ KPortMode mode = gpConverter->fromString<KPortMode> (page->mCbMode->currentText()); if (mode != KPortMode_Disconnected) { QString path = page->mLePath->text(); valid = !path.isEmpty() && !paths.contains (path); if (!valid) { if (!page->mGbSerial->isChecked()) page->mCbMode->setCurrentIndex (KPortMode_Disconnected); else { aWarning = path.isEmpty() ? tr ("Port path not specified ") : tr ("Duplicate port path entered "); aTitle += ": " + vboxGlobal().removeAccelMark (mTabWidget->tabText (mTabWidget->indexOf (tab))); break; } } paths << path; } } return valid; }
void UIMachineSettingsSerialPage::retranslateUi() { for (int i = 0; i < mTabWidget->count(); ++ i) { UIMachineSettingsSerial *page = static_cast<UIMachineSettingsSerial*> (mTabWidget->widget (i)); mTabWidget->setTabText (i, page->pageTitle()); } }
void UIMachineSettingsSerialPage::polishPage() { /* Get the count of serial port tabs: */ for (int iPort = 0; iPort < mTabWidget->count(); ++iPort) { mTabWidget->setTabEnabled(iPort, isMachineOffline() || (isMachineInValidMode() && m_cache.child(iPort).base().m_fPortEnabled)); UIMachineSettingsSerial *pTab = qobject_cast<UIMachineSettingsSerial*>(mTabWidget->widget(iPort)); pTab->polishTab(); } }
/* Save data from corresponding widgets to cache, * this task SHOULD be performed in GUI thread only: */ void UIMachineSettingsSerialPage::putToCache() { /* For each serial port: */ for (int iPort = 0; iPort < mTabWidget->count(); ++iPort) { /* Getting port page: */ UIMachineSettingsSerial *pPage = qobject_cast<UIMachineSettingsSerial*>(mTabWidget->widget(iPort)); /* Gather & cache port data: */ pPage->uploadPortData(m_cache.child(iPort)); } }
/* UIMachineSettingsSerialPage stuff */ UIMachineSettingsSerialPage::UIMachineSettingsSerialPage() : mTabWidget(0) { /* TabWidget creation */ mTabWidget = new QITabWidget (this); QVBoxLayout *layout = new QVBoxLayout (this); layout->setContentsMargins (0, 5, 0, 5); layout->addWidget (mTabWidget); /* How many ports to display: */ ulong uCount = vboxGlobal().virtualBox().GetSystemProperties().GetSerialPortCount(); /* Add corresponding tab pages to parent tab widget: */ for (ulong uPort = 0; uPort < uCount; ++uPort) { /* Creating port page: */ UIMachineSettingsSerial *pPage = new UIMachineSettingsSerial(this); mTabWidget->addTab(pPage, pPage->pageTitle()); } }