void UIGInformationGroup::sltBuildStep(QString strStepId, int iStepNumber) { /* Cleanup build-step: */ delete m_pBuildStep; m_pBuildStep = 0; /* Is step id valid? */ if (strStepId != m_strGroupId) return; /* Step number feats the bounds: */ if (iStepNumber >= 0 && iStepNumber < m_machineItems.size()) { /* Should we create a new set for this step? */ UIGInformationSet *pSet = 0; if (iStepNumber > m_items.size() - 1) pSet = new UIGInformationSet(this); /* Or use existing? */ else pSet = m_items.at(iStepNumber)->toSet(); /* Create next build-step: */ m_pBuildStep = new UIInformationBuildStep(this, pSet, strStepId, iStepNumber + 1); /* Build set: */ pSet->buildSet(m_machineItems[iStepNumber], m_machineItems.size() == 1, model()->informationWindowElements()); } else { /* Notify listener about build done: */ emit sigBuildDone(); } }
void UIDetailsGroup::sltBuildStep(const QUuid &uStepId, int iStepNumber) { /* Cleanup build-step: */ delete m_pBuildStep; m_pBuildStep = 0; /* Is step id valid? */ if (uStepId != m_uGroupId) return; /* Step number feats the bounds: */ if (iStepNumber >= 0 && iStepNumber < m_machineItems.size()) { /* Should we create a new set for this step? */ UIDetailsSet *pSet = 0; if (iStepNumber > m_items.size() - 1) pSet = new UIDetailsSet(this); /* Or use existing? */ else pSet = m_items.at(iStepNumber)->toSet(); /* Create next build-step: */ m_pBuildStep = new UIPrepareStep(this, pSet, uStepId, iStepNumber + 1); /* Build set: */ pSet->buildSet(m_machineItems[iStepNumber], m_machineItems.size() == 1, model()->categories()); } else { /* Notify listener about build done: */ emit sigBuildDone(); } }
void UIGInformationElementPreview::updateAppearance() { /* Call to base-class: */ UIGInformationElement::updateAppearance(); /* Set new machine attribute directly: */ m_pPreview->setMachine(machine()); emit sigBuildDone(); }
void UIGDetailsSet::buildSet(UIVMItem *pMachineItem, bool fFullSet, const QStringList &settings) { /* Remember passed arguments: */ m_machine = pMachineItem->machine(); m_fElementNameHoverable = pMachineItem->reconfigurable(); m_fHasDetails = pMachineItem->hasDetails(); m_fFullSet = fFullSet; m_settings = settings; /* Cleanup superfluous items: */ if (!m_fFullSet || !m_fHasDetails) { int iFirstItem = m_fHasDetails ? DetailsElementType_Display : DetailsElementType_General; int iLastItem = DetailsElementType_Description; bool fCleanupPerformed = false; for (int i = iFirstItem; i <= iLastItem; ++i) if (m_elements.contains(i)) { delete m_elements[i]; fCleanupPerformed = true; } if (fCleanupPerformed) updateGeometry(); } /* Make sure we have details: */ if (!m_fHasDetails) { /* Reset last-step number: */ m_iLastStepNumber = -1; /* Notify parent group we are built: */ emit sigBuildDone(); return; } /* Choose last-step number: */ m_iLastStepNumber = m_fFullSet ? DetailsElementType_Description : DetailsElementType_Preview; /* Fetch USB controller restrictions: */ const CUSBController &ctl = m_machine.GetUSBController(); if (ctl.isNull() || !ctl.GetProxyAvailable()) { QString strElementTypeOpened = gpConverter->toInternalString(DetailsElementType_USB); QString strElementTypeClosed = strElementTypeOpened + "Closed"; m_settings.removeAll(strElementTypeOpened); m_settings.removeAll(strElementTypeClosed); } /* Start building set: */ rebuildSet(); }
void UIGInformationElementInterface::sltUpdateAppearanceFinished(UITask *pTask) { /* Make sure that is one of our tasks: */ if (pTask->type() != UITask::Type_DetailsPopulation) return; /* Skip unrelated tasks: */ if (m_pTask != pTask) return; /* Assign new text if changed: */ const UITextTable newText = pTask->property("table").value<UITextTable>(); if (text() != newText) setText(newText); /* Mark task processed: */ m_pTask = 0; /* Notify listeners about update task complete: */ emit sigBuildDone(); }
void UIGDetailsSet::sltBuildStep(QString strStepId, int iStepNumber) { /* Cleanup build-step: */ delete m_pBuildStep; m_pBuildStep = 0; /* Is step id valid? */ if (strStepId != m_strSetId) return; /* Step number feats the bounds: */ if (iStepNumber >= 0 && iStepNumber <= m_iLastStepNumber) { /* Load details settings: */ DetailsElementType elementType = (DetailsElementType)iStepNumber; QString strElementTypeOpened = gpConverter->toInternalString(elementType); QString strElementTypeClosed = strElementTypeOpened + "Closed"; /* Should the element be visible? */ bool fVisible = m_settings.contains(strElementTypeOpened) || m_settings.contains(strElementTypeClosed); /* Should the element be opened? */ bool fOpen = m_settings.contains(strElementTypeOpened); /* Check if element is present already: */ UIGDetailsElement *pElement = element(elementType); if (pElement && fOpen) pElement->open(false); /* Create element if necessary: */ bool fJustCreated = false; if (!pElement) { fJustCreated = true; pElement = createElement(elementType, fOpen); } /* Show element if necessary: */ if (fVisible && !pElement->isVisible()) { /* Show the element: */ pElement->show(); /* Recursively update size-hint: */ pElement->updateGeometry(); /* Update layout: */ model()->updateLayout(); } /* Hide element if necessary: */ else if (!fVisible && pElement->isVisible()) { /* Hide the element: */ pElement->hide(); /* Recursively update size-hint: */ updateGeometry(); /* Update layout: */ model()->updateLayout(); } /* Update model if necessary: */ else if (fJustCreated) model()->updateLayout(); /* For visible element: */ if (pElement->isVisible()) { /* Create next build-step: */ m_pBuildStep = new UIBuildStep(this, pElement, strStepId, iStepNumber + 1); /* Build element: */ pElement->updateAppearance(); } /* For invisible element: */ else { /* Just build next step: */ sltBuildStep(strStepId, iStepNumber + 1); } } /* Step number out of bounds: */ else { /* Update model: */ model()->updateLayout(); /* Repaint all the items: */ foreach (UIGDetailsItem *pItem, items()) pItem->update(); /* Notify listener about build done: */ emit sigBuildDone(); } }