nuttx-apps/graphics/nxwidgets
Gregory Nutt 950b4cb604 wm4Nx is a port of twm, Tab Window Manager (or Tom's Window Manager)
version 1.0.10 to NuttX NX windows server.  No, a port is not the right
word.  It is a re-design of TWM from the inside out to work with the NuttX
NX server.  The name Twm4Nx reflects this legacy.  But Twm4Nx is more a
homage to TWM than a port of TWM.

The original TWM was based on X11 which provides a rich set of features.
TWM provided titlebars, shaped windows, several forms of icon management,
user-defined macro functions, click-to-type and pointer-driven keyboard
focus, graphic contexts, and user-specified key and pointer button bindings,
etc.

Twm4Nx, on the other hand is based on the NuttX NX server which provides
comparatively minimal support.  Additional drawing support comes from
the NuttX NxWidgets library (which necessitated the change to C++).

Twm4Nx is greatly stripped down and targeted on small embedded systems
with minimal resources.  For example, no assumption is made about the
availability of a file system; no .twmrc file is used.  Bitmaps are not
used (other than for fonts).

The TWM license is, I believe compatible with the BSD license used by NuttX.
The origin TWM license required notice of copyrights within each file and
a full copy of the original license which you can find in the COPYING file.
within this directory.

STATUS:

This port was brutal.  Much TWM logic was removed because it depending on X11 features (or just because I could not understand how to use it).  The logic is partial.  A lot more needs to be done to have a complete system (hence, it is marked EXPERIMENTAL).  The kinds of things that need to done are:

1. Update some logic that is only fragmentary for how like resizing, and menus.
2. Integrate NxWidgets into the windows:  The resize menu needs a CLabel, the menus are CListBox'es, but not completely integrated, the Icon Manager needs to be a button array.
3. Resit Icons.  They are windows now, but need to be compound widgets lying on the background.
4. Widget events are only partially integrated.  A lot more needs to be done.  A partial change to thoe event system that hints at the redesign is in place but it is far from complete.
2019-04-25 16:54:17 -06:00
..
doc Squashed commit of the following: 2019-04-04 18:53:29 -06:00
Doxygen Squashed commit of the following: 2019-04-04 18:53:29 -06:00
src graphics/nxwidgets and inclu/graphics/nxwidgets: Add support for modal windows. 2019-04-05 09:05:19 -06:00
UnitTests wm4Nx is a port of twm, Tab Window Manager (or Tom's Window Manager) 2019-04-25 16:54:17 -06:00
.gitignore Squashed commit of the following: 2019-04-04 18:53:29 -06:00
ChangeLog.txt Squashed commit of the following: 2019-04-04 18:53:29 -06:00
COPYING Squashed commit of the following: 2019-04-04 18:53:29 -06:00
Kconfig apps/graphics/nxwm: nxwm_main.c is no longer a unit test. Need to remove some dangling dependencies on UNITTEST and also some testing that is inappropriate in its new role. 2019-04-04 20:04:12 -06:00
Make.defs Squashed commit of the following: 2019-04-04 18:53:29 -06:00
Makefile Squashed commit of the following: 2019-04-04 18:53:29 -06:00
README.txt Squashed commit of the following: 2019-04-04 18:53:29 -06:00
ReleaseNotes.txt Squashed commit of the following: 2019-04-04 18:53:29 -06:00
TODO.txt Squashed commit of the following: 2019-04-04 18:53:29 -06:00

NXWidgets
=========

In order to better support NuttX based platforms, a special graphical user
interface has been created called NXWidgets. NXWidgets is written in C++
and integrates seamlessly with the NuttX NX graphics subsystem in order
to provide graphic objects, or "widgets," in the NX Graphics Subsystem

Some of the features of NXWidgets include:

o Conservative C++

  NXWidgets is written entirely in C++ but using only selected “embedded
  friendly” C++ constructs that are fully supported under NuttX. No
  additional C++ support libraries are required.

o NX Integration

  NXWidgets integrate seamlessly with the NX graphics system. Think of the
  X server under Linux … the NX graphics system is like a tiny X server
  that provides windowing under NuttX. By adding NXWidgets, you can support
  graphics objects like buttons and text boxes in the NX windows and toolbars.

o Small Footprint

  NXWidgets is tailored for use MCUs in embedded applications. It is ideally
  suited for mid- and upper-range of most MCU families. A complete NXWidgets
  is possible in as little as 40Kb of FLASH and maybe 4Kb of SRAM.

o Output Devices

  NXWidgets will work on the high-end frame buffer devices as well as on LCDs
  connected via serial or parallel ports to a small MCU.

o Input Devices

  NXWidgets will accept position and selection inputs from a mouse or a
  touchscreen. It will also support character input from a keyboard such as a
  USB keyboard. NXWidgets supports on very special widget called CKeypad that
  will provide keyboard input via an on-screen keypad that can be operated
  via mouse or touchscreen inputs.

o Many Graphic Objects

  Some of the graphic objects supported by NXWidgets include labels, buttons,
  text boxes, button arrays, check boxes, cycle buttons, images, sliders,
  scrollable list boxes, progress bars, and more.

Note:  Many of the fundamental classed in NxWidgets derive from the Antony
Dzeryn's "Woopsi" project: http://woopsi.org/ which also has a BSD style
license.  See the COPYING file for details.

Directory Structure
===================

Kconfig

  This is a Kconfig file that should be provided at apps/NxWidgets/Kconfig.
  When copied to that location, it will be used by the NuttX configuration
  systems to configure settings for NxWidgets and NxWM

nxwidgets

  The source code, header files, and build environment for NxWidgets is
  provided in this directory.

UnitTests

  Provides a collection of unit-level tests for many of the individual
  widgets provided by nxwidgets.