improve nf7::FileBase interface to prevent from forgetting calling super method
This commit is contained in:
@@ -30,7 +30,10 @@ class FileBase : public nf7::File {
|
||||
|
||||
using nf7::File::File;
|
||||
|
||||
nf7::File* Find(std::string_view name) const noexcept override {
|
||||
nf7::File* Find(std::string_view name) const noexcept final {
|
||||
if (auto ret = PreFind(name)) {
|
||||
return ret;
|
||||
}
|
||||
for (auto feat : feats_) {
|
||||
if (auto ret = feat->Find(name)) {
|
||||
return ret;
|
||||
@@ -38,17 +41,30 @@ class FileBase : public nf7::File {
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
void Handle(const nf7::File::Event& ev) noexcept override {
|
||||
void Handle(const nf7::File::Event& ev) noexcept final {
|
||||
PreHandle(ev);
|
||||
for (auto feat : feats_) {
|
||||
feat->Handle(ev);
|
||||
}
|
||||
PostHandle(ev);
|
||||
}
|
||||
void Update() noexcept override {
|
||||
void Update() noexcept final {
|
||||
PreUpdate();
|
||||
for (auto feat : feats_) {
|
||||
feat->Update();
|
||||
}
|
||||
PostUpdate();
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual nf7::File* PreFind(std::string_view) const noexcept { return nullptr; }
|
||||
|
||||
virtual void PreHandle(const nf7::File::Event&) noexcept { }
|
||||
virtual void PostHandle(const nf7::File::Event&) noexcept { }
|
||||
|
||||
virtual void PreUpdate() noexcept { }
|
||||
virtual void PostUpdate() noexcept { }
|
||||
|
||||
private:
|
||||
std::vector<Feature*> feats_;
|
||||
};
|
||||
|
||||
@@ -99,7 +99,7 @@ class Node final : public nf7::FileBase,
|
||||
|
||||
nf7::Future<std::shared_ptr<nf7::luajit::Ref>> Build() noexcept;
|
||||
|
||||
void Update() noexcept override;
|
||||
void PostUpdate() noexcept override;
|
||||
void UpdateNode(nf7::Node::Editor&) noexcept override;
|
||||
|
||||
File::Interface* interface(const std::type_info& t) noexcept override {
|
||||
@@ -228,9 +228,7 @@ try {
|
||||
}
|
||||
|
||||
|
||||
void Node::Update() noexcept {
|
||||
nf7::FileBase::Update();
|
||||
|
||||
void Node::PostUpdate() noexcept {
|
||||
if (last_build_ < importer_->GetLatestMod()) {
|
||||
cache_ = std::nullopt;
|
||||
}
|
||||
|
||||
@@ -151,11 +151,11 @@ class Network final : public nf7::FileBase,
|
||||
env, std::move(items), NodeLinkStore(links_));
|
||||
}
|
||||
|
||||
File* Find(std::string_view name) const noexcept;
|
||||
File* PreFind(std::string_view name) const noexcept override;
|
||||
|
||||
void Handle(const Event& ev) noexcept override;
|
||||
void PostHandle(const Event& ev) noexcept override;
|
||||
|
||||
void Update() noexcept override;
|
||||
void PostUpdate() noexcept override;
|
||||
void UpdateMenu() noexcept override;
|
||||
void UpdateTooltip() noexcept override;
|
||||
void UpdateWidget() noexcept override;
|
||||
@@ -873,7 +873,7 @@ void Network::Sanitize() {
|
||||
}
|
||||
}
|
||||
}
|
||||
File* Network::Find(std::string_view name) const noexcept
|
||||
File* Network::PreFind(std::string_view name) const noexcept
|
||||
try {
|
||||
size_t idx;
|
||||
const auto id = std::stol(std::string(name), &idx);
|
||||
@@ -891,9 +891,7 @@ std::shared_ptr<Node::Lambda> Network::CreateLambda(
|
||||
lambdas_running_.emplace_back(ret);
|
||||
return ret;
|
||||
}
|
||||
void Network::Handle(const Event& ev) noexcept {
|
||||
nf7::FileBase::Handle(ev);
|
||||
|
||||
void Network::PostHandle(const Event& ev) noexcept {
|
||||
switch (ev.type) {
|
||||
case Event::kAdd:
|
||||
for (const auto& item : items_) item->Attach(*this);
|
||||
@@ -969,9 +967,7 @@ void Network::Item::Watcher::Handle(const File::Event& ev) noexcept {
|
||||
}
|
||||
|
||||
|
||||
void Network::Update() noexcept {
|
||||
nf7::FileBase::Update();
|
||||
|
||||
void Network::PostUpdate() noexcept {
|
||||
// forget expired lambdas
|
||||
lambdas_running_.erase(
|
||||
std::remove_if(lambdas_running_.begin(), lambdas_running_.end(),
|
||||
|
||||
@@ -99,8 +99,8 @@ class TL final : public nf7::FileBase, public nf7::DirItem, public nf7::Node {
|
||||
return kOutputs;
|
||||
}
|
||||
|
||||
void Handle(const nf7::File::Event& ev) noexcept;
|
||||
void Update() noexcept override;
|
||||
void PostHandle(const nf7::File::Event& ev) noexcept;
|
||||
void PostUpdate() noexcept override;
|
||||
void UpdateMenu() noexcept override;
|
||||
|
||||
nf7::File::Interface* interface(const std::type_info& t) noexcept override {
|
||||
@@ -1092,9 +1092,7 @@ std::unique_ptr<nf7::File> TL::Clone(nf7::Env& env) const noexcept {
|
||||
}
|
||||
return std::make_unique<TL>(env, std::move(layers), next);
|
||||
}
|
||||
void TL::Handle(const Event& ev) noexcept {
|
||||
nf7::FileBase::Handle(ev);
|
||||
|
||||
void TL::PostHandle(const Event& ev) noexcept {
|
||||
switch (ev.type) {
|
||||
case Event::kAdd:
|
||||
if (layers_.size() == 0) {
|
||||
@@ -1124,9 +1122,7 @@ void TL::Handle(const Event& ev) noexcept {
|
||||
}
|
||||
}
|
||||
|
||||
void TL::Update() noexcept {
|
||||
nf7::FileBase::Update();
|
||||
|
||||
void TL::PostUpdate() noexcept {
|
||||
// display param panel window
|
||||
if (win_.shown()) {
|
||||
const auto em = ImGui::GetFontSize();
|
||||
|
||||
@@ -87,7 +87,7 @@ class Dir final : public nf7::FileBase,
|
||||
return std::make_unique<Dir>(env, std::move(items));
|
||||
}
|
||||
|
||||
File* Find(std::string_view name) const noexcept override {
|
||||
File* PreFind(std::string_view name) const noexcept override {
|
||||
auto itr = items_.find(std::string(name));
|
||||
if (itr == items_.end()) return nullptr;
|
||||
return itr->second.get();
|
||||
@@ -113,15 +113,15 @@ class Dir final : public nf7::FileBase,
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Update() noexcept override;
|
||||
void UpdateChildren(bool early) noexcept;
|
||||
void PreUpdate() noexcept override { UpdateChildren(true); }
|
||||
void PostUpdate() noexcept override { UpdateChildren(false); }
|
||||
void UpdateTree() noexcept override;
|
||||
void UpdateMenu() noexcept override;
|
||||
void UpdateTooltip() noexcept override;
|
||||
void UpdateDragDropTarget() noexcept override;
|
||||
|
||||
void Handle(const Event& ev) noexcept override {
|
||||
nf7::FileBase::Handle(ev);
|
||||
|
||||
void PostHandle(const Event& ev) noexcept override {
|
||||
switch (ev.type) {
|
||||
case Event::kAdd:
|
||||
// force to show window if this is the root
|
||||
@@ -173,29 +173,15 @@ class Dir final : public nf7::FileBase,
|
||||
bool ValidateName(const std::string& name) noexcept;
|
||||
};
|
||||
|
||||
void Dir::Update() noexcept {
|
||||
// update children flagged as kEarlyUpdate
|
||||
std::vector<nf7::File*> later;
|
||||
later.reserve(items_.size());
|
||||
void Dir::UpdateChildren(bool early) noexcept {
|
||||
for (const auto& item : items_) {
|
||||
auto& f = *item.second;
|
||||
if (TestFlags(f, nf7::DirItem::kEarlyUpdate)) {
|
||||
if (early == TestFlags(f, nf7::DirItem::kEarlyUpdate)) {
|
||||
ImGui::PushID(&f);
|
||||
f.Update();
|
||||
ImGui::PopID();
|
||||
} else {
|
||||
later.push_back(&f);
|
||||
}
|
||||
}
|
||||
|
||||
nf7::FileBase::Update();
|
||||
|
||||
// update children
|
||||
for (auto f : later) {
|
||||
ImGui::PushID(f);
|
||||
f->Update();
|
||||
ImGui::PopID();
|
||||
}
|
||||
}
|
||||
void Dir::UpdateTree() noexcept {
|
||||
for (const auto& item : items_) {
|
||||
|
||||
@@ -100,7 +100,7 @@ class Event final : public nf7::FileBase,
|
||||
return {};
|
||||
}
|
||||
|
||||
void Update() noexcept override;
|
||||
void PostUpdate() noexcept override;
|
||||
void UpdateMenu() noexcept override;
|
||||
|
||||
nf7::File::Interface* interface(const std::type_info& t) noexcept override {
|
||||
@@ -178,9 +178,7 @@ std::shared_ptr<nf7::Node::Lambda> Event::CreateLambda(
|
||||
}
|
||||
|
||||
|
||||
void Event::Update() noexcept {
|
||||
nf7::FileBase::Update();
|
||||
|
||||
void Event::PostUpdate() noexcept {
|
||||
const auto& io = ImGui::GetIO();
|
||||
const auto in = GetHandlerInputs();
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ class ImGui_ final : public nf7::FileBase,
|
||||
return std::make_unique<ImGui_>(env);
|
||||
}
|
||||
|
||||
void Update() noexcept override;
|
||||
void PostUpdate() noexcept override;
|
||||
void UpdateMenu() noexcept override;
|
||||
|
||||
nf7::File::Interface* interface(const std::type_info& t) noexcept override {
|
||||
@@ -110,7 +110,7 @@ class ImGui_ final : public nf7::FileBase,
|
||||
};
|
||||
|
||||
|
||||
void ImGui_::Update() noexcept {
|
||||
void ImGui_::PostUpdate() noexcept {
|
||||
const auto em = ImGui::GetFontSize();
|
||||
|
||||
ImGui::DockSpaceOverViewport(ImGui::GetMainViewport(), ImGuiDockNodeFlags_PassthruCentralNode);
|
||||
|
||||
@@ -138,8 +138,7 @@ class Logger final : public nf7::FileBase,
|
||||
return std::make_unique<Logger>(env, Data {mem_.data()});
|
||||
}
|
||||
|
||||
void Handle(const nf7::File::Event& ev) noexcept override {
|
||||
nf7::FileBase::Handle(ev);
|
||||
void PostHandle(const nf7::File::Event& ev) noexcept override {
|
||||
switch (ev.type) {
|
||||
case Event::kAdd:
|
||||
store_ = std::make_shared<ItemStore>(*this);
|
||||
|
||||
Reference in New Issue
Block a user