# pGUI

demo\pGUI\pGUI.e is the Phix Portable Graphical User Interface. It is currently the only GUI for Linux and 64-bit Phix, plus there is a laboriously hand-crafted drop-in replacement in pwa/pGUI.js so the same programs can be run in a browser, via the magic that is pwa/p2js.
Guide/Getting Started
IUP has four important concepts that are implemented in a very different way from other toolkits.

- First is the control creation timeline.
  When a control is created it is not immediately mapped to the native system.
  So some attributes will not work until the control is mapped.
  The mapping is done when the dialog is shown or manually calling IupMap for the dialog.
  You cannot map a control without inserting it into a dialog.
- Second is the attribute system.
  IUP has only a few functions because it uses string attributes to access the properties of each control.
  So get used to IupSetAttribute and IupGetAttribute, because you are going to use them a lot.
- Third is the abstract layout positioning.
  IUP controls are never positioned in a specific (x,y) coordinate inside the dialog.
  The positioning is always calculated dynamically from the abstract layout hierarchy.
  So get used to IupHbox, IupVbox, and IupFill controls as the way to position things in a dialog.
- Fourth is the callback system.
  Use the IupSetCallback function to associate a callback for a control.

Elements, containers, attributes, and callbacks are (slowly being) marked if/when they are supported by pwa/p2js.

Background | - | origin, credits, requirements, and development status
Types | - | pGUI uses a relatively small set of types plus a couple of helper utilities
Attributes | - | attributes control and configure almost everything in pGUI
Elements | - | visible interface elements supported in pGUI
Containers | - | non visible interface elements supported in pGUI
Control | - | startup, shutdown, and everything inbetween
Canvas Draw | - | a vector graphics toolkit with device independent output
OpenGL/WebGL | - | for rendering 2D and 2D vector graphics