I’m sorry to ask you again, but how I can use my valueTree and undoManager in my children views ? I try this but it doesn’t work for the second view ?
class ChildView : public Component
{
public:
ChildView()
{
addAndMakeVisible(sliderFirst);
addAndMakeVisible(sliderSecond);
}
void setUndo (ValueTree& v, UndoManager& um, int intIndexChildren)
{
sliderFirst.getValueObject().referTo(v.getChild(intIndexChildren).getPropertyAsValue("SliderFirst", &um));
sliderSecond.getValueObject().referTo(v.getChild(intIndexChildren).getPropertyAsValue("SliderSecond", &um));
}
void paint (Graphics& g) override
{
}
void resized() override
{
sliderFirst.setBoundsRelative(0.01f, 0.01f, 0.48f, 0.98f);
sliderSecond.setBoundsRelative(0.5f, 0.01f, 0.48f, 0.98f);
}
private:
Slider sliderFirst;
Slider sliderSecond;
};
class MainComponent : public Component,private ValueTree::Listener, private Timer, public KeyListener, private ComboBox::Listener
{
public:
//==============================================================================
MainComponent()
{
setOpaque (true);
setSize (640, 480);
ValueTree myValueTree ("myApp");
addAndMakeVisible(viewNumber1);
addAndMakeVisible(viewNumber2);
ValueTree valueTreeChildView1 ("View1");
ValueTree valueTreeChildView2 ("View2");
myValueTree.addChild(valueTreeChildView1, 1, &undoManager);
myValueTree.addChild(valueTreeChildView2, 2, &undoManager);
viewNumber1.setUndo(myValueTree, undoManager, 1);
viewNumber2.setUndo(myValueTree, undoManager, 2);
comboBoxTest.addItem("View 1", 1);
comboBoxTest.addItem("View 2", 2);
addAndMakeVisible(comboBoxTest);
addAndMakeVisible (undoButton);
addAndMakeVisible (redoButton);
undoButton.setButtonText("Undo");
redoButton.setButtonText ("Redo");
undoButton.onClick = [this] { undoManager.undo(); };
redoButton.onClick = [this] { undoManager.redo(); };
Value valueComboTest = myValueTree.getPropertyAsValue("comboTest", &undoManager);
comboBoxTest.getSelectedIdAsValue().referTo(valueComboTest);
myValueTree.addListener(this);
addKeyListener(this);
comboBoxTest.addListener(this);
comboBoxTest.setSelectedId(1);
resized();
startTimer (500);
}
~MainComponent()
{
}
void comboBoxChanged (ComboBox* comboBoxThatHasChanged) override
{
if(comboBoxTest.getSelectedId() == 1)
{
viewNumber1.setVisible(true);
viewNumber2.setVisible(false);
}
else
{
viewNumber1.setVisible(false);
viewNumber2.setVisible(true);
}
}
bool keyPressed (const KeyPress& key,
Component* originatingComponent) override
{
if(key.getKeyCode() == 90)
{
if(key.getModifiers() == ModifierKeys::commandModifier)
undoManager.undo();
if(key.getModifiers() == ModifierKeys::shiftModifier + ModifierKeys::commandModifier)
undoManager.redo();
}
return 0;
}
void valueTreePropertyChanged (ValueTree&, const Identifier&) override
{
repaint();
}
void valueTreeChildAdded (ValueTree& parentTree,
ValueTree& childWhichHasBeenAdded) override
{
}
void valueTreeChildRemoved (ValueTree& parentTree,
ValueTree& childWhichHasBeenRemoved,
int indexFromWhichChildWasRemoved) override
{
}
virtual void valueTreeChildOrderChanged (ValueTree& parentTreeWhoseChildrenHaveMoved,
int oldIndex, int newIndex) override
{
}
void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) override
{
}
void paint (Graphics& g) override
{
g.fillAll (findColour (ResizableWindow::backgroundColourId));
}
void resized() override
{
comboBoxTest.setBoundsRelative(0, 0.02f, 1, 0.08f);
undoButton.setBoundsRelative(0.02f, 0.88f, 0.4f, 0.1f);
redoButton.setBoundsRelative(0.58f, 0.88f, 0.4f, 0.1f);
viewNumber1.setBoundsRelative(0, 0.2f, 1.0f, 0.8f);
viewNumber2.setBoundsRelative(0, 0.2f, 1.0f, 0.8f);
}
private:
ComboBox comboBoxTest;
ChildView viewNumber1;
ChildView viewNumber2;
TextButton undoButton, redoButton;
UndoManager undoManager;
void timerCallback() override
{
undoManager.beginNewTransaction();
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};