SmartPointer<const IStatus> EditorHistoryItem::RestoreState() { Q_ASSERT_X(!IsRestored(), "RestoreState", "already restored"); IStatus::ConstPointer result = Status::OK_STATUS(BERRY_STATUS_LOC); IMemento::Pointer memento = this->memento; this->memento = nullptr; QString factoryId; memento->GetString(WorkbenchConstants::TAG_FACTORY_ID, factoryId); if (factoryId.isEmpty()) { WorkbenchPlugin::Log("Unable to restore mru list - no input factory ID."); return result; } QScopedPointer<IElementFactory> factory( PlatformUI::GetWorkbench()->GetElementFactory(factoryId)); if (!factory) { return result; } IMemento::Pointer persistableMemento = memento->GetChild(WorkbenchConstants::TAG_PERSISTABLE); if (persistableMemento.IsNull()) { WorkbenchPlugin::Log("Unable to restore mru list - no input element state: " + factoryId); return result; } QScopedPointer<IAdaptable> adaptable(factory->CreateElement(persistableMemento)); if (adaptable == nullptr || dynamic_cast<IEditorInput*>(adaptable.data()) == nullptr) { return result; } input = dynamic_cast<IEditorInput*>(adaptable.data()); // Get the editor descriptor. QString editorId; memento->GetString(WorkbenchConstants::TAG_ID, editorId); if (!editorId.isEmpty()) { IEditorRegistry* registry = WorkbenchPlugin::GetDefault()->GetEditorRegistry(); descriptor = registry->FindEditor(editorId); } return result; }
// for dynamic UI void ViewFactory::RestoreViewState(IMemento::Pointer memento) { QString compoundId; memento->GetString(WorkbenchConstants::TAG_ID, compoundId); mementoTable.insert(compoundId, memento); }