116 lines
2.7 KiB
C++
116 lines
2.7 KiB
C++
#include "common/gui_value.hh"
|
|
|
|
|
|
namespace nf7::gui {
|
|
|
|
bool Value::ReplaceType(Type t) noexcept {
|
|
if (type_ == t) return false;
|
|
|
|
type_ = t;
|
|
switch (type_) {
|
|
case nf7::gui::Value::kPulse:
|
|
entity_ = nf7::Value::Pulse {};
|
|
break;
|
|
case nf7::gui::Value::kInteger:
|
|
entity_ = nf7::Value::Integer {0};
|
|
break;
|
|
case nf7::gui::Value::kScalar:
|
|
case nf7::gui::Value::kNormalizedScalar:
|
|
entity_ = nf7::Value::Scalar {0};
|
|
break;
|
|
case nf7::gui::Value::kString:
|
|
case nf7::gui::Value::kMultilineString:
|
|
entity_ = nf7::Value::String {};
|
|
break;
|
|
default:
|
|
assert(false);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void Value::ValidateValue() const {
|
|
bool valid = true;
|
|
switch (type_) {
|
|
case nf7::gui::Value::kPulse:
|
|
valid = entity_.isPulse();
|
|
break;
|
|
case nf7::gui::Value::kInteger:
|
|
valid = entity_.isInteger();
|
|
break;
|
|
case nf7::gui::Value::kScalar:
|
|
case nf7::gui::Value::kNormalizedScalar:
|
|
valid = entity_.isScalar();
|
|
break;
|
|
case nf7::gui::Value::kString:
|
|
case nf7::gui::Value::kMultilineString:
|
|
valid = entity_.isString();
|
|
break;
|
|
}
|
|
if (!valid) {
|
|
throw nf7::DeserializeException {"invalid entity type"};
|
|
}
|
|
}
|
|
|
|
bool Value::UpdateTypeButton(const char* name, bool small) noexcept {
|
|
if (name == nullptr) {
|
|
name = StringifyShortType(type_);
|
|
}
|
|
|
|
if (small) {
|
|
ImGui::SmallButton(name);
|
|
} else {
|
|
ImGui::Button(name);
|
|
}
|
|
|
|
bool ret = false;
|
|
if (ImGui::BeginPopupContextItem(nullptr, ImGuiPopupFlags_MouseButtonLeft)) {
|
|
for (const auto t : kTypes) {
|
|
if (ImGui::MenuItem(StringifyType(t), nullptr, type_ == t)) {
|
|
ret |= ReplaceType(t);
|
|
}
|
|
}
|
|
ImGui::EndPopup();
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
bool Value::UpdateEditor() noexcept {
|
|
bool ret = false;
|
|
const auto w = ImGui::CalcItemWidth();
|
|
|
|
const auto em = ImGui::GetFontSize();
|
|
switch (type_) {
|
|
case kPulse:
|
|
ImGui::BeginDisabled();
|
|
ImGui::Button("PULSE", {w, 0});
|
|
ImGui::EndDisabled();
|
|
break;
|
|
case kInteger:
|
|
ImGui::DragScalar("##value", ImGuiDataType_S64, &entity_.integer());
|
|
ret |= ImGui::IsItemDeactivatedAfterEdit();
|
|
break;
|
|
case kScalar:
|
|
ImGui::DragScalar("##value", ImGuiDataType_Double, &entity_.scalar());
|
|
ret |= ImGui::IsItemDeactivatedAfterEdit();
|
|
break;
|
|
case kNormalizedScalar:
|
|
ImGui::DragScalar("##value", ImGuiDataType_Double, &entity_.scalar());
|
|
ret |= ImGui::IsItemDeactivatedAfterEdit();
|
|
break;
|
|
case kString:
|
|
ImGui::InputTextWithHint("##value", "string", &entity_.string());
|
|
ret |= ImGui::IsItemDeactivatedAfterEdit();
|
|
break;
|
|
case kMultilineString:
|
|
ImGui::InputTextMultiline("##value", &entity_.string(), {w, 2.4f*em});
|
|
ret |= ImGui::IsItemDeactivatedAfterEdit();
|
|
break;
|
|
default:
|
|
assert(false);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
} // namespace nf7::gui
|