User Interace Design

Model-View

Functionality is separated from the user interface with so called model-view concept. User interface should implement only user interface specific properties.

  // attach a user interface (mywin) to a model
  R3DoA(model, R3MM_ADDDEPENDENT, mywin);

Model classes should be derived from the oops/r3model.h base class and they should call R3MM_CHANGED method whenever any of their attributes get changed.

When a model attribute is changed, the model base class notifies all connected views with the R3RM_UPDATE method.

Modeless Design

All user interface objects should be designed reusable anywhere in the user interface. Modal dialogs are not reusable, one cannot create a new modal dialog that would consists of two other modal dialogs. Newer use any modal dialogs.

Geometry Managers

Reusability of User Interface objects is based on Geometry Managers. User interface objects are like building blocks from which the application GUI is constructed. Each control and interface object has its own native size and other geometric attributes, and these can vary not only over different controls but also over platforms, language to be used and sizes of the selected icon sets.

[Important] Important
Newer ever set any window or control sizes and positions manually. Let geometry managers do the job for you.

Locale

Realsoft 3D supports localization. English is the built-in language. All built-in strings can be translated into the user's preferred language. The user inteface adapts to the localized strings automatically, so there is no need to worry about string lengths.

Realsoft 3D uses International System of Units (SI) internally. For example, the size of a sphere is internally represented as meters. The unit conversion system maps the SI units to user preferred form in the user inteface.

Multi Selection

The user interace must support multi selection whenever possible. For this controls must support 'Conflict' state. For example, when two spheres are multi selected and they have different radiuses, then the user interface should show the radius of the first selected sphere and it should use Conflict color to indicate that not all the selected objects have this radius.