virtual controller class [fltk]

Bjarne Stroustrup “Programming Principles and Practice Using C++”
Chapter 14 Exercise 16
Using GUI library called FLTK (Fast Light Tool Kit, “full tick”).

Output:

[code language=”cpp”]
// Philipp Siedler
// Bjarne Stroustrup’s PP
// Chapter 14 Exercise 16

#define _USE_MATH_DEFINES
#include "Simple_window.h"
#include "Graph.h"
#include <cmath>

using namespace Graph_lib;

class Controller
{
public:
virtual void set_on() = 0;
virtual void set_off() = 0;
virtual void set_level(int l) = 0;
virtual void show() = 0;
protected:
bool on;
bool off;
int level;
};

class Controller_test : public Controller
{
public:
void set_on();
void set_off();
void set_level(int l);
void show();
};

void Controller_test::set_on()
{
on = true;
off = false;
}

void Controller_test::set_off()
{
on = false;
off = true;
}

void Controller_test::set_level(int l)
{
level = l;
}

void Controller_test::show()
{
cout << "on = " << on << ", off = " << off << ", level = " << level << endl;
}

class Controller_shape : public Controller
{
public:
Controller_shape(Shape& shape) :s(shape) {};
void set_on();
void set_off();
void set_level(int l);
void show();

private:
Shape& s;
};

void Controller_shape::set_on()
{
s.set_color(Color::visible);
on = true;
off = false;
}

void Controller_shape::set_off()
{
s.set_color(Color::invisible);
on = false;
off = true;
}

void Controller_shape::set_level(int l)
{
s.set_style(Line_style(l));
}

void Controller_shape::show()
{
s.set_fill_color(Color::cyan);
}

int main()
try
{
Point tl(100, 100);
Simple_window win(tl, 720, 400, "Simple Window");
Point center(win.x_max() / 2, win.y_max() / 2);

Controller_test ct;
ct.set_on();
ct.set_level(5);
ct.show();

Graph_lib::Rectangle r(Point(200, 200), Point(400, 300));

Controller_shape cs(r);
cs.set_on();
cs.show();
cs.set_level(1);

win.attach(r);
win.wait_for_button();
}
catch (exception& e) {
cout << e.what() << endl;
return 1;
}
catch (…) {
cout << "Exiting" << endl;
return 2;
}
[/code]

Output:
on = 1, off = 0, level = 5

Newsletter Updates

Enter your email address below to subscribe to our newsletter

Leave a Reply

Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124