GUI Handler

by Aiota
A simplified way to handle UI interfaces.
- Bug fix: Under certain circumstances, MouseUp() was not getting properly called when the mouse moved out of bounds or out of the map control causing menus to not have their positions properly saved. This logic has been moved to MouseDrag(). (Marekssj3)
- Feature: Tooltip functionality has been added (demo). Tooltips are stored under Cell objects but function like Menu objects and will follow the same hierarchy of data (Menu/Tooltip > Window > Table > Cell) when accessing the Cell. A new Cell proc NewTooltip() is used to create the Tooltip object, and the new Cell.Tooltip var is used to store the Tooltip object. Afterwards, the normal Menu procs can be used on Cell.Tooltip (NewWindow(), Window.NewTable(), etc.).
*To ensure that the Mouse procs are being called, the Cell object must have a GFX object with an icon that has an alpha of at least 1.
- Feature: Menus are now able to be limited to the screen edges. The Width and Height vars have been moved to /Menu, and client.NewMenu() now takes Width and Height arguments. Both of these have to be defined in order for the Menu to be limited to the screen edges. Two new #defines SCREEN_MAX_WIDTH and SCREEN_MAX_HEIGHT have been added to act as limiters to the Menu.screen_loc - so make sure all of the numbers match up! (Maressj3)
- Feature: Cell.NewTooltip() now accepts Width and Height arguments. When these variables are defined, the tooltip will adjust when it positions itself based if the mouse position and Tooltip.Width/Height exceed SCREEN_MAX_WIDTH or SCREEN_MAX_HEIGHT.
- Feature: Scrolling has been added to the library Table.EnableScroll() has been added in relation to scrolling. It toggles a view range of cells in the table (tracked by Table.inView) and defines the direction of your scroll bars. When defining your icon tags for your scroll bars, please use the preset tags SCROLL_BAR_X, SCROLL_BAR_Y, SCROLL_POS_X, SCROLL_POS_Y, SCROLL_LEFT, SCROLL_RIGHT, SCROLL_UP, and SCROLL_DOWN to have it properly work with calculations in the new Mouse Functions file.
- Feature: Cells will now run procs on-click. Cell.NewCommand() has been added to define call()s on-click. A new variable Cell.Commands will hold a list of defined procs, so multiple procs can be called on-click.
- Bug fix: ShowColumn()/HideColumn() and its counterpart were not properly moving cells into the right positions, resulting in jumbled cells. This has been fixed.
- Bug fix: A lingering mouse_opacity = 0 was preventing click events from executing. This has been removed.
- Bug fix: Corrected the positioning math when creating tables using custom row/column sizes.
v1.5.20190821 (minor update)
- Bug fix: The Cell.ClearCell() proc should now properly remove GFX and commands.
- Fixed some unexpected errors that cropped up in the last update.
- Added the following #defines to easier change the menu/cursor icons: