1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| class MainComponent : public Component,private ValueTree::Listener, private Timer, public KeyListener
{
public:
//==============================================================================
MainComponent()
{
setOpaque (true);
setSize (640, 480);
addAndMakeVisible(mySlider);
addAndMakeVisible(mySlider2);
mySlider.setSliderStyle(Slider::SliderStyle::LinearVertical);
mySlider2.setSliderStyle(Slider::SliderStyle::LinearVertical);
addAndMakeVisible (undoButton);
addAndMakeVisible (redoButton);
undoButton.setButtonText("Undo");
redoButton.setButtonText ("Redo");
undoButton.onClick = [this] { undoManager.undo(); };
redoButton.onClick = [this] { undoManager.redo(); };
ValueTree myValueTree ("myApp");
myValueTree.setProperty("mySlider", mySlider.getValue(), &undoManager);
myValueTree.setProperty("mySlider2", mySlider2.getValue(), &undoManager);
Value valueTreeObj = myValueTree.getPropertyAsValue("mySlider", &undoManager);
Value valueTreeObj2 = myValueTree.getPropertyAsValue("mySlider2", &undoManager);
mySlider.getValueObject().referTo(valueTreeObj);
mySlider2.getValueObject().referTo(valueTreeObj2);
myValueTree.addListener(this);
addKeyListener(this);
startTimer (500);
}
~MainComponent()
{
}
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
{
auto r = getLocalBounds();
auto buttons = r.removeFromBottom (20);
undoButton.setBounds (buttons.removeFromLeft (100));
redoButton.setBounds (buttons.removeFromLeft (100));
mySlider.setBounds(0, 10, getWidth()/2, getHeight()-80);
mySlider2.setBounds(getWidth()/2, 10, getWidth()/2, getHeight()-80);
}
private:
Slider mySlider;
Slider mySlider2;
TextButton undoButton, redoButton;
ApplicationProperties props;
UndoManager undoManager;
void timerCallback() override
{
undoManager.beginNewTransaction();
}
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
}; |
Partager