void UISettingsDialog::setWarning(const QString &strWarning) { m_strWarningString = strWarning.isEmpty() ? QString() : QString("<font color=#ff5400>%1</font>").arg(strWarning); /* Do not touching QILabel until dialog is polished * otherwise it can change its size to undefined: */ if (m_fPolished) { if (!m_strWarningString.isEmpty() && m_pStatusBar->currentWidget() == m_pWarningPane) m_pLbWhatsThis->setText(m_strWarningString); else sltUpdateWhatsThis(true /* got focus? */); } }
bool UISettingsDialog::eventFilter(QObject *pObject, QEvent *pEvent) { /* Ignore objects which are NOT widgets: */ if (!pObject->isWidgetType()) return QIMainDialog::eventFilter(pObject, pEvent); /* Ignore widgets which window is NOT settings dialog: */ QWidget *pWidget = static_cast<QWidget*>(pObject); if (pWidget->window() != this) return QIMainDialog::eventFilter(pObject, pEvent); /* Process different event-types: */ switch (pEvent->type()) { /* Process enter/leave events to remember whats-this candidates: */ case QEvent::Enter: case QEvent::Leave: { if (pEvent->type() == QEvent::Enter) m_pWhatsThisCandidate = pWidget; else m_pWhatsThisCandidate = 0; m_pWhatsThisTimer->start(100); break; } /* Process focus-in event to update whats-this pane: */ case QEvent::FocusIn: { sltUpdateWhatsThis(true /* got focus? */); break; } default: break; } /* Base-class processing: */ return QIMainDialog::eventFilter(pObject, pEvent); }
/* Settings Dialog Constructor: */ UISettingsDialog::UISettingsDialog(QWidget *pParent) /* Parent class: */ : QIWithRetranslateUI<QIMainDialog>(pParent) /* Protected variables: */ , m_pSelector(0) , m_pStack(0) /* Common variables: */ , m_dialogType(SettingsDialogType_Wrong) , m_fPolished(false) /* Loading/saving stuff: */ , m_fLoaded(false) , m_fSaved(false) /* Status bar stuff: */ , m_pStatusBar(new QStackedWidget(this)) /* Process bar stuff: */ , m_pProcessBar(new QProgressBar(this)) /* Error/Warning stuff: */ , m_fValid(true) , m_fSilent(true) , m_pWarningPane(new VBoxWarningPane(this)) /* Whats-this stuff: */ , m_pWhatsThisTimer(new QTimer(this)) , m_pWhatsThisCandidate(0) { /* Apply UI decorations: */ Ui::UISettingsDialog::setupUi(this); #ifdef Q_WS_MAC /* No status bar on the mac: */ setSizeGripEnabled(false); setStatusBar(0); #endif /* Q_WS_MAC */ /* Page-title font is derived from the system font: */ QFont pageTitleFont = font(); pageTitleFont.setBold(true); pageTitleFont.setPointSize(pageTitleFont.pointSize() + 2); m_pLbTitle->setFont(pageTitleFont); /* Get main grid layout: */ QGridLayout *pMainLayout = static_cast<QGridLayout*>(centralWidget()->layout()); #ifdef VBOX_GUI_WITH_TOOLBAR_SETTINGS /* No page-title with tool-bar: */ m_pLbTitle->hide(); /* No whats-this with tool-bar: */ m_pLbWhatsThis->hide(); /* Create modern tool-bar selector: */ m_pSelector = new VBoxSettingsToolBarSelector(this); static_cast<UIToolBar*>(m_pSelector->widget())->setMacToolbar(); addToolBar(qobject_cast<QToolBar*>(m_pSelector->widget())); /* No title in this mode, we change the title of the window: */ pMainLayout->setColumnMinimumWidth(0, 0); pMainLayout->setHorizontalSpacing(0); #else /* Create classical tree-view selector: */ m_pSelector = new VBoxSettingsTreeViewSelector(this); pMainLayout->addWidget(m_pSelector->widget(), 0, 0, 3, 1); m_pSelector->widget()->setFocus(); pMainLayout->setSpacing(10); #endif /* VBOX_GUI_WITH_TOOLBAR_SETTINGS */ /* Creating stack of pages: */ m_pStack = new QStackedWidget(m_pWtStackHandler); QVBoxLayout *pStackLayout = new QVBoxLayout(m_pWtStackHandler); pStackLayout->setContentsMargins(0, 0, 0, 0); pStackLayout->addWidget(m_pStack); /* Status bar: */ m_pStatusBar->addWidget(new QWidget); m_pButtonBox->addExtraWidget(m_pStatusBar); /* Setup process bar stuff: */ m_pStatusBar->addWidget(m_pProcessBar); /* Setup error & warning stuff: */ m_pStatusBar->addWidget(m_pWarningPane); m_errorIcon = UIIconPool::defaultIcon(UIIconPool::MessageBoxCriticalIcon, this).pixmap(16, 16); m_warningIcon = UIIconPool::defaultIcon(UIIconPool::MessageBoxWarningIcon, this).pixmap(16, 16); /* Setup whatsthis stuff: */ qApp->installEventFilter(this); m_pWhatsThisTimer->setSingleShot(true); connect(m_pWhatsThisTimer, SIGNAL(timeout()), this, SLOT(sltUpdateWhatsThis())); m_pLbWhatsThis->setAutoFillBackground(true); QPalette whatsThisPalette = m_pLbWhatsThis->palette(); whatsThisPalette.setBrush(QPalette::Window, whatsThisPalette.brush(QPalette::Midlight)); m_pLbWhatsThis->setPalette(whatsThisPalette); m_pLbWhatsThis->setFixedHeight(m_pLbWhatsThis->frameWidth() * 2 + m_pLbWhatsThis->margin() * 2 + m_pLbWhatsThis->fontMetrics().lineSpacing() * 4); /* Set the default button: */ m_pButtonBox->button(QDialogButtonBox::Ok)->setDefault(true); /* Setup connections: */ connect(m_pSelector, SIGNAL(categoryChanged(int)), this, SLOT(sltCategoryChanged(int))); connect(m_pButtonBox, SIGNAL(helpRequested()), &msgCenter(), SLOT(sltShowHelpHelpDialog())); /* Translate UI: */ retranslateUi(); }
/* Settings Dialog Constructor: */ UISettingsDialog::UISettingsDialog(QWidget *pParent) /* Parent class: */ : QIWithRetranslateUI<QIMainDialog>(pParent) /* Protected variables: */ , m_pSelector(0) , m_pStack(0) /* Common variables: */ , m_configurationAccessLevel(ConfigurationAccessLevel_Null) , m_fPolished(false) /* Serialization stuff: */ , m_pSerializeProcess(0) , m_fSerializationIsInProgress(false) /* Status-bar stuff: */ , m_pStatusBar(0) /* Process-bar stuff: */ , m_pProcessBar(0) /* Warning-pane stuff: */ , m_pWarningPane(0) , m_fValid(true) , m_fSilent(true) /* Whats-this stuff: */ , m_pWhatsThisTimer(new QTimer(this)) , m_pWhatsThisCandidate(0) { /* Apply UI decorations: */ Ui::UISettingsDialog::setupUi(this); /* Page-title font is derived from the system font: */ QFont pageTitleFont = font(); pageTitleFont.setBold(true); pageTitleFont.setPointSize(pageTitleFont.pointSize() + 2); m_pLbTitle->setFont(pageTitleFont); /* Prepare selector: */ QGridLayout *pMainLayout = static_cast<QGridLayout*>(centralWidget()->layout()); #ifdef VBOX_GUI_WITH_TOOLBAR_SETTINGS /* No page-title with tool-bar: */ m_pLbTitle->hide(); /* Create modern tool-bar selector: */ m_pSelector = new UISettingsSelectorToolBar(this); static_cast<UIToolBar*>(m_pSelector->widget())->enableMacToolbar(); addToolBar(qobject_cast<QToolBar*>(m_pSelector->widget())); /* No title in this mode, we change the title of the window: */ pMainLayout->setColumnMinimumWidth(0, 0); pMainLayout->setHorizontalSpacing(0); #else /* Create classical tree-view selector: */ m_pSelector = new UISettingsSelectorTreeView(this); pMainLayout->addWidget(m_pSelector->widget(), 0, 0, 2, 1); m_pSelector->widget()->setFocus(); pMainLayout->setSpacing(10); #endif /* VBOX_GUI_WITH_TOOLBAR_SETTINGS */ connect(m_pSelector, SIGNAL(sigCategoryChanged(int)), this, SLOT(sltCategoryChanged(int))); /* Prepare page-stack: */ m_pStack = new QStackedWidget(m_pWtStackHandler); popupCenter().setPopupStackOrientation(m_pStack, UIPopupStackOrientation_Bottom); QVBoxLayout *pStackLayout = new QVBoxLayout(m_pWtStackHandler); pStackLayout->setContentsMargins(0, 0, 0, 0); pStackLayout->addWidget(m_pStack); /* Prepare button-box: */ m_pButtonBox->button(QDialogButtonBox::Ok)->setDefault(true); connect(m_pButtonBox, SIGNAL(helpRequested()), &msgCenter(), SLOT(sltShowHelpHelpDialog())); /* Prepare process-bar: */ m_pProcessBar = new QProgressBar; m_pProcessBar->setMaximum(100); m_pProcessBar->setMinimum(0); /* Prepare warning-pane: */ m_pWarningPane = new UIWarningPane; connect(m_pWarningPane, SIGNAL(sigHoverEnter(UIPageValidator*)), this, SLOT(sltHandleWarningPaneHovered(UIPageValidator*))); connect(m_pWarningPane, SIGNAL(sigHoverLeave(UIPageValidator*)), this, SLOT(sltHandleWarningPaneUnhovered(UIPageValidator*))); /* Prepare status-bar: */ m_pStatusBar = new QStackedWidget; /* Add empty widget: */ m_pStatusBar->addWidget(new QWidget); /* Add process-bar widget: */ m_pStatusBar->addWidget(m_pProcessBar); /* Add warning-pane: */ m_pStatusBar->addWidget(m_pWarningPane); /* Add status-bar to button-box: */ m_pButtonBox->addExtraWidget(m_pStatusBar); /* Setup whatsthis stuff: */ qApp->installEventFilter(this); m_pWhatsThisTimer->setSingleShot(true); connect(m_pWhatsThisTimer, SIGNAL(timeout()), this, SLOT(sltUpdateWhatsThis())); /* Translate UI: */ retranslateUi(); }