Skip to content

Commit d60a5b4

Browse files
committed
add ability to delete parameters in tsd UI
1 parent 3b5e29c commit d60a5b4

File tree

6 files changed

+29
-1
lines changed

6 files changed

+29
-1
lines changed

tsd/apps/interactive/common/tsd_ui.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,14 @@ static void buildUI_parameter_contextMenu(Context &ctx, Parameter *p)
135135
ImGui::EndMenu(); // "set type"
136136
}
137137

138+
ImGui::Separator();
139+
140+
if (ImGui::BeginMenu("delete?")) {
141+
if (ImGui::MenuItem("yes"))
142+
p->remove();
143+
ImGui::EndMenu(); // "delete?"
144+
}
145+
138146
ImGui::EndPopup();
139147
}
140148
}
@@ -435,7 +443,7 @@ void buildUI_parameter(tsd::Parameter &p, tsd::Context &ctx, bool useTable)
435443
if (update)
436444
p.setValue(pVal);
437445

438-
buildUI_parameter_contextMenu(ctx, &p);
446+
buildUI_parameter_contextMenu(ctx, &p); // NOTE: 'p' can be deleted after this
439447

440448
ImGui::PopID();
441449
}

tsd/src/tsd/core/Object.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,11 @@ void Object::parameterChanged(const Parameter *p)
209209
m_updateDelegate->signalParameterUpdated(this, p);
210210
}
211211

212+
void Object::removeParameter(const Parameter *p)
213+
{
214+
removeParameter(p->name());
215+
}
216+
212217
BaseUpdateDelegate *Object::updateDelegate() const
213218
{
214219
return m_updateDelegate;

tsd/src/tsd/core/Object.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ struct Object : public ParameterObserver
105105

106106
protected:
107107
virtual void parameterChanged(const Parameter *p) override;
108+
virtual void removeParameter(const Parameter *p) override;
108109
BaseUpdateDelegate *updateDelegate() const;
109110

110111
private:

tsd/src/tsd/core/Parameter.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ Parameter::Parameter(ParameterObserver *object, Token name)
99
: m_observer(object), m_name(name)
1010
{}
1111

12+
void Parameter::remove()
13+
{
14+
if (m_observer)
15+
m_observer->removeParameter(this);
16+
}
17+
1218
Token Parameter::name() const
1319
{
1420
return m_name;

tsd/src/tsd/core/Parameter.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@ struct Parameter;
2626
struct ParameterObserver
2727
{
2828
virtual void parameterChanged(const Parameter *p) = 0;
29+
virtual void removeParameter(const Parameter *p) = 0;
2930
};
3031

3132
struct Parameter
3233
{
3334
Parameter(ParameterObserver *object, Token name);
3435

36+
void remove(); // remove (and delete) parameter from parent object
37+
3538
Token name() const;
3639
const std::string &description() const;
3740

tsd/tests/test_Parameter.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ struct MockObject : public tsd::ParameterObserver
1515
notified = true;
1616
}
1717

18+
void removeParameter(const tsd::Parameter *) override
19+
{
20+
// no-op
21+
}
22+
1823
bool notified{false};
1924
};
2025

0 commit comments

Comments
 (0)