If you want to develop a desktop PC app today,
there are 3 platforms -- Windows, Linux and OSX.
Each of them offers a different programming language,
although the underlying functionality provided is similar.
C#/C++ for Windows, C++ for Linux and ObjectiveC/Swift for OSX.
All the UI programming toolkits provided on each of these 3 platform
are based on WIMP which means you are straight-jacketed in terms of
UI design choices.
Khitchdee has an in-house IDE for producing apps for desktop PCs.
We have designed this tool to have the minimum features needed
for our own app development,
which is a suite of CAD tools for land-vehicle design.
This IDE has keyboard-only input, no mouse input is used.
So code editing, navigation, building and debugging are all done
using keyboard commands.
It follows an "all in one place" approach to codebase organisation.
We don't break our codebase into separate .cpp with associated headers.
All the functions and classes are declared in a single .cpp file.
This file has in the 10s of Ks of lines of code.
How do we navigate such a large codefile?
We introduce 2 navigational constructs above the language level
The Block and the Sub-block.
These demarcators for these constructs are contained inside comment blocks.
We make it very easy to fold code using a single keyboard command
and blocks and sub-blocks can also be folded.
Large comment blocks can be included in the code
without interfering with code readability
by keeping them folded until they need to be read.
This helps create an efficient process for code documentation.
The entire display area is used to display code in a 3 column format
with a wider active center column and read-only side columns.
This makes it possible to view 120 lines of code on a hi-res screen.
At any given time, only one section of code is kept open (not folded)
and a mechanism is provided to jump to (or back from) the definition of any symbol.
This facilitates keeping only one section of code open at a time.
We have defined our own app GUI paradigm which we called the EngageUI.
An EngageUI is always focused on the user's current activity
as opposed to the object oriented control-panel based approach of WIMP app GUIs.
WIMP stands for Windows, Icons, Menus and Pointers.
While a WIMP GUI is created by spatial layout of familiar controls on a control panel,
An EngageUI is created based on the requirements of
the current activity the user is involved in.
It is a temporal rather than spatial approach to GUI design.
It results in a sequence of simple "activity-handlers"
each of which is designed to handle the needs of a specific user activity.
In most cases, the mouse is not needed in the interaction
making EngageUIs primarily keyboard driven.
EngageUIs lie somewhere in between command line interfaces (CLIs)
amd WIMP paradigm GUIs.
They are keyboard driven like CLIs but they are GUIs.
Our implementation of EngageUI is based on wxWidgets
which is a cross platform toolkit
that enables you to write a single codebase in C++
that can be deployed on all 3 platforms
using the wxWidgets platform-specific library implementations.
wxWidgets provides a relative simple interface for UI programming
and a host a platfrom independent SDK features
to access platform functionality such as file systems, fonts
screen properties and graphic drawing features.
The source code for EngageUI and Khitchdee's IDE is posted on