Skip to content

Commit

Permalink
Made all files show up.
Browse files Browse the repository at this point in the history
OK, I finally did it, but I had to delete my local copy of this
repository, re-clone it, and then re-download the offending file into
my reset local copy of this repository!  (Sheesh!)
  • Loading branch information
RandomDSdevel committed Jul 31, 2014
1 parent 5f1f717 commit 01b4f86
Showing 1 changed file with 133 additions and 0 deletions.
133 changes: 133 additions & 0 deletions GUI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@

//
// This is a GUI support code to the chapters 12-16 of the book
// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup
//

#ifndef GUI_GUARD
#define GUI_GUARD

#include "Window.h"
#include "Graph.h"

namespace Graph_lib {

//------------------------------------------------------------------------------

typedef void* Address; // Address is a synonym for void*
typedef void(*Callback)(Address, Address); // FLTK's required function type for all callbacks

//------------------------------------------------------------------------------

template<class W> W& reference_to(Address pw)
// treat an address as a reference to a W
{
return *static_cast<W*>(pw);
}

//------------------------------------------------------------------------------

class Widget {
// Widget is a handle to an Fl_widget - it is *not* an Fl_widget
// We try to keep our interface classes at arm's length from FLTK
public:
Widget(Point xy, int w, int h, const string& s, Callback cb)
: loc(xy), width(w), height(h), label(s), do_it(cb)
{}

virtual void move(int dx,int dy) { hide(); pw->position(loc.x+=dx, loc.y+=dy); show(); }
virtual void hide() { pw->hide(); }
virtual void show() { pw->show(); }
virtual void attach(Window&) = 0;

Point loc;
int width;
int height;
string label;
Callback do_it;

virtual ~Widget() { }

protected:
Window* own; // every Widget belongs to a Window
Fl_Widget* pw; // connection to the FLTK Widget
private:
Widget& operator=(const Widget&); // don't copy Widgets
Widget(const Widget&);
};

//------------------------------------------------------------------------------

struct Button : Widget {
Button(Point xy, int w, int h, const string& label, Callback cb)
: Widget(xy,w,h,label,cb)
{}

void attach(Window&);
};

//------------------------------------------------------------------------------

struct In_box : Widget {
In_box(Point xy, int w, int h, const string& s)
:Widget(xy,w,h,s,0) { }
int get_int();
string get_string();

void attach(Window& win);
};

//------------------------------------------------------------------------------

struct Out_box : Widget {
Out_box(Point xy, int w, int h, const string& s)
:Widget(xy,w,h,s,0) { }
void put(int);
void put(const string&);

void attach(Window& win);
};

//------------------------------------------------------------------------------

struct Menu : Widget {
enum Kind { horizontal, vertical };
Menu(Point xy, int w, int h, Kind kk, const string& label)
: Widget(xy,w,h,label,0), k(kk), offset(0)
{}

Vector_ref<Button> selection;
Kind k;
int offset;
int attach(Button& b); // Menu does not delete &b
int attach(Button* p); // Menu deletes p

void show() // show all buttons
{
for (unsigned int i = 0; i<selection.size(); ++i)
selection[i].show();
}
void hide() // hide all buttons
{
for (unsigned int i = 0; i<selection.size(); ++i)
selection[i].hide();
}
void move(int dx, int dy) // move all buttons
{
for (unsigned int i = 0; i<selection.size(); ++i)
selection[i].move(dx,dy);
}

void attach(Window& win) // attach all buttons
{
for (int i=0; i<selection.size(); ++i) win.attach(selection[i]);
own = &win;
}

};

//------------------------------------------------------------------------------

} // of namespace Graph_lib

#endif // GUI_GUARD

0 comments on commit 01b4f86

Please sign in to comment.