

Almost every application needs to communicate with the user in some way.
Therefore, a substantial part of the code deals with the interaction
of program logic with GUI components.

Typically, the following is needed:

 put values into input fields under program control
 read and check input from the user
 pop up dialogs to query the user for further information


Task

For a minimal "application", write a program that presents a form with three components to the user:

 a numeric input field ("Value") 
 a button ("increment")
 a button ("random")


The field is initialized to zero.

The user may manually enter a new value into the field,
or increment its value with the "increment" button.

Entering a non-numeric value should be either impossible,
or issue an error message.

Pressing the "random" button presents a confirmation dialog,
and resets the field's value to a random value if the answer is "Yes".

(This task may be regarded as an extension of the task Simple windowed application).



import forms;
import extensions;
 
public class MainWindow : SDIDialog
{
    Button btmIncrement;
    Button btmRandom;
    Edit   txtNumber;
 
    constructor new()
        <= new()
    {
        btmIncrement := Button.new();
        btmRandom    := Button.new();
        txtNumber    := Edit.new();
 
        self
            .appendControl:btmIncrement
            .appendControl:btmRandom
            .appendControl:txtNumber;
 
        self.Caption := "Rosseta Code";
        self.setRegion(100, 100, 160, 120);
 
        txtNumber.setRegion(7, 7, 140, 25);
        txtNumber.Caption := "0";
 
        btmIncrement.setRegion(7, 35, 140, 25);
        btmIncrement.Caption := "Increment";
        btmIncrement.onClick := (args){ self.onButtonIncrementClick() };
 
        btmRandom.setRegion(7, 65, 140, 25);
        btmRandom.Caption := "Random";
        btmRandom.onClick := (args){ self.onButtonRandomClick() };
    }
 
    private onButtonIncrementClick()
    {
        var number := txtNumber.Value.toInt();
 
        number := number + 1;
        self.changeTextBoxValue(number)
    }
 
    private onButtonRandomClick()
    {
        if(messageDialog.showQuestion("Inf", "Really reset to random value?"))
        {
            self.changeTextBoxValue(randomGenerator.eval(99999999))
        }
    }
 
    private changeTextBoxValue(number)
    {
        txtNumber.Caption := number.toString()
    }
}