Pwnna
Pwnna

Reputation: 9538

Porting console based ui to a GUI one?

As most of you experienced, developing a console app is as easy as:

void mainloop(){
    while (1){
        giveInstructions();
        getInput();
        if (!process()) break;
        printOutput();
    }
}

int main(){
    mainloop();
    return 0;
}

However, in GUI it becomes an issue.

We can still giveInstructions(), process(), and printOutput(), but getInput() wouldn't work because it relies on an event, usually button click or key down.

How can I port a console app to a gui app with minimum code changes? (preferably do not change the main method, and as little change to the mainloop function as possible)

Note: I'm not too comfortable with threading yet.

Upvotes: 0

Views: 224

Answers (1)

mattygs
mattygs

Reputation: 128

Since there is no specific language given, I will show an example in C# where you would be able to use the same code as the console app with a simple GUI.

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //using form-editor, double-click buttons or use the following
            btnInput.Click += new EventHandler(btnInput_Click);
            btnContinue.Click += new EventHandler(btnContinue_Click);
            giveInstructions();
        }

        private void giveInstructions()
        {
            txtInfo.Text = "";
            txtInput.Text = "";
            //display instructions to multi-line textbox
        }

        private void btnInput_Click(object sender, EventArgs e)
        {
            //or you can just add another button for exit.
            if (txtInput.Text == "expected value for exit")
            {
                Application.Exit();
            }
            else
            {
                getInput();
            }
        }

        private void getInput()
        {
            string strInput = txtInput.Text;
            //do stuff

            printOutput();
        }

        private void printOutput()
        {
            //display output to multi-line textbox
        }

        private void btnContinue_Click(object sender, EventArgs e)
        {
            giveInstructions();
        }
    }

Upvotes: 1

Related Questions