~ Pretty ugly PortaPack H1 (+HAVOC) UI widget documentation ~
              by @furrtek - v0.1 - 2017/02/02
           Not approved at all by @Sharebrained

The display is 240 x 320 pixels.

A View is basically a rectangular zone on the screen.
Widgets (aka controls, UI elements...) go into Views.

Views can be pushed to/popped from a stack.
The main menu view is at the bottom of the stack and can't be popped.
The title bar view is a special case, it (normally) can't be hidden by pushed Views.
Since the title bar is 16 pixel high, a regular full-screen view is 240 x 304 pixels.

If the current View can be popped (removed), an arrow shows on the left of the title bar.

Kind of widgets:

==== Rectangle ====

A simple filled or outlined rectangle. No interactivity.

Constructors:
- Empty
- Rectangle(Rect, Color)

Methods:
- set_color(Color)
- set_outline(bool): Default is filled, set to true for outline only

==== Text ====

A simple text label. No interactivity.

Constructors:
- Empty
- Text(Rect)
- Text(Rect, std::string)

Methods:
- set(std::string): Updates text

==== BigFrequency (HAVOC) ====

Displays a big 7-segment style frequency value in the XXXX.xxxMHz format.
If the value is 0, ----.--- is displayed. No leading zeros. No interactivity.

Constructors:
- BigFrequency(Rect, rf::Frequency)

Methods:
- set(rf::Frequency): Updates value

==== ProgressBar (HAVOC) ====

Displays progress as an horizontal progress bar with value and maximum value.
No interactivity.

Constructors:
- ProgressBar(Rect)

Methods:
- set_max(uint32_t): Updates maximum value
- set_value(uint32_t): Updates current value

The maximum value is set by default to 100.

==== Console ====

Displays a scrolling text console. No interactivity.

Constructors:
- Console(Rect)

Methods:
- clear(): Clears text and resets cursor to top-left
- write(std::string): Adds text
- writeln(std::string): Adds text and CR + LF

==== Checkbox (HAVOC) ====

A toggle option shown as a tickable box with a text label.
Interactive: select and touch.

Constructors:
- Empty
- Checkbox(Point, size_t, std::string)
- Checkbox(Point, size_t, std::string, bool)

(Position, length of text label, text, regular size/small)

Methods:
- bool value(): Returns state
- set_text(std::string): Updates text label
- set_value(bool): Sets state

Callbacks:
- on_select: Select key press or touch. Returns state

==== Button ====

A momentary push-button. Interactive: select and touch.

Constructors:
- Empty
- Button(Rect, std::string)

Methods:
- std::string text(): Returns text
- set_text(std::string): Updates text

Callbacks:
- on_select: Select key press or touch
- on_dir: Direction keys press
- on_highlight: Focus get

==== Image ====

Shows a 1-bit bitmap. No interactivity.

Constructors:
- Empty
- Image(Rect, Bitmap*, Color, Color)

(Rect, pointer to bitmap (see bitmap.hpp), foreground, background)

Methods:
- set_bitmap(Bitmap*): Updates bitmap
- set_foreground(Color): Changes foreground color
- set_background(Color): Changes background color
- invert_colors(): Flip foreground color with background

==== ImageButton ====

Same as the Image widget, except interactive (select and touch). No methods.

Constructors:
- Empty
- ImageButton(Rect, Bitmap*, Color, Color)

(Rect, pointer to bitmap (see bitmap.hpp), foreground, background)

Callbacks:
- on_select: Select key press or touch

==== ImageOptionsField (HAVOC) ====

Options list displayed as images.
Interactive: change (jog wheel) and focus.

Constructors:
- Empty
- ImageOptionsField(Rect, options_t)

options_t is a std::vector of std::pair of unsigned char pointers to color bitmap data and an int32_t

Methods:
- set_options(options_t)
- size_t selected_index()
- size_t selected_index_value()
- set_selected_index(size_t)
- set_by_value(value_t)

Callbacks:
- on_change: Option was changed
- on_show_options: Focus get

==== OptionsField ====
==== NumberField ====
==== SymField (HAVOC) ====
==== Waveform (HAVOC) ====
