Skip to content

Plus-minus combined button

The plus-minus combined button is an input element and combines a - and + buttons into a single element.

Configure

Ensure the GUI library is included and initialised according to the configuration procedure.

plusMinus myPlusMinus;

The constructor creates a plus-minus combined button.

1
myPlusMinus.dDefine(10, 10, 80, 50);

dDefine() defines the plus-minus combined button with vector coordinates.

The required parameters are

  • The first line specifies the vector coordinates: top-left coordinates x-y then width and height in pixels;

By default, the plus-minus combined button is horizontal and enabled according to the GUI setting.

Then,

myPlusMinus.setOption(optionHorizontal);
myPlusMinus.setState(stateEnabled);

setOption() defines the orientation:

  • optionHorizontal or false for horizontal orientation;
  • optionVertical or true of vertical orientation.

Default is false for vertical orientation.

setState() defines whether touch is enabled for the element.

Select

  • stateDisabled or false for touch disabled;
  • stateEnabled or true for touch enabled.

Default is false for touch disabled.

Use

myPlusMinus.draw();
bool result = myPlusMinus.check();
int8_t value = myPlusMinus.getValue();

draw() displays the button.

check() polls the touch controller and returns true is the button is pressed.

An optional parameter defines the mode:

  • modeNormal or false for normal mode;
  • modeInstant or true for instant mode.

Default mode is normal mode.

In normal mode, the element raises the event when the finger is released from the element. Additionally, the element goes through a cinematic sequence.

Start, press, release

In instant mode, the element raises the event when the finger touches the element. No cinematic sequence is performed.

Start, press, hold

getValue() gets the last value, as a signed 8-bit integer:

  • +1 if plus has been touched;
  • -1 if minus has been touched;
  • 0 if the plus-minus combined button hasn’t been touched.

Example

This is the core of the code from example GUI_PlusMinus.ino.

void displayPlusMinus()
{
    myScreen.setOrientation(myOrientation);
    uint16_t x, y, dx, dy;

    x = myScreen.screenSizeX();
    y = myScreen.screenSizeY();
    dx = x / 5;
    dy = y / 4;

    myGUI.delegatePartial(false);

    dLabel(0, 0, x, dy, "Plus minus", myColours.black, myColours.white, -1, 1, fontLarge);

    int16_t value1 = 0;
    int16_t value2 = 0;

    plusMinus myPlusMinus1;
    myPlusMinus1.dDefine(0, dy * 3, dx * 2, dy);
    myPlusMinus1.setOption(optionHorizontal); // optionVertical
    myPlusMinus1.setState(stateEnabled);
    myPlusMinus1.draw();

    plusMinus myPlusMinus2;
    myPlusMinus2.dDefine(4 * dx, dy, dx, dy * 2);
    myPlusMinus2.setOption(optionVertical); // optionVertical
    myPlusMinus2.setState(stateEnabled);
    myPlusMinus2.draw();

    text myText1;
    myText1.dDefine(0, dy, dx * 2, dy * 2, 0, 0, fontExtra);
    myText1.setOption(optionWithFrame); // true=frame
    myText1.setState(stateDisabled);
    myText1.draw(String(value1));

    text myText2;
    myText2.dDefine(dx * 2, dy, dx * 2, dy * 2, 0, 0, fontExtra);
    myText2.setOption(optionWithFrame); // true=frame
    myText2.setState(stateDisabled);
    myText2.draw(String(value1));

    drawNext();
    myScreen.flushFast();

    myGUI.delegatePartial(true);
    while (!checkNext())
    {
        if (myPlusMinus1.check(false))
        {
            value1 += myPlusMinus1.getValue();
            myText1.draw(String(value1));
        }
        else if (myPlusMinus2.check(modeInstant))
        {
            value2 += myPlusMinus2.getValue();
            myText2.draw(String(value2));
        }
        else
        {
            delay(10);
        }
    }
}
Back to top