void UI::restart () { if (!_restart) return; _restart = false; ServiceProvider *serviceProvider = _serviceProvider; EventHandler *eventHandler = _eventHandler; IFrontend *frontend = _frontend; const std::string root = getRootWindow() != nullptr ? getRootWindow()->getId() : ""; shutdown(); init(*serviceProvider, *eventHandler, *frontend); if (root.empty()) return; pushRoot(root); }
void Scene::Iterator::forward() { assert(!isReachedEnd()); if (seekedNodes.top().lock() == roots.top().lock()) { // 現在ルートを指している: このルートとその下の走査を終了 seekedNodes.pop(); roots.pop(); } else { // 現在指しているのはルートではない: 親ノードに移動 auto popped = seekedNodes.top().lock(); seekedNodes.pop(); seekedNodes.push(popped->linkage.getParent()); // 次に指すべき兄弟ノードがあればそれを先に処理する auto nextSiblingToIterate = getSiblingToIterate(popped); if (nextSiblingToIterate != nullptr) { pushRoot(nextSiblingToIterate); } } }
Scene::Iterator::Iterator(const ScenePtr& root, bool reversed) { this->reversed = reversed; pushRoot(root); }