The Final Cut

Building and code analysis

Travis CI:
     Build Status
Coverity Scan:
     Coverity Scan Status
Class Reference:
     documented

Installation

> git clone git://github.com/gansm/finalcut.git
> cd finalcut
> ./configure --prefix=/usr
> make
> su -c "make install"

The Final Cut

The Final Cut is a class library and widget toolkit with full mouse support for creating a text-based user interface. The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple windows on the screen.
The C++ class design was inspired by the Qt framework. It provides common controls like dialog windows, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.

newfont

A new text font for X11 and the Linux console.

Virtual terminal

It uses a virtual terminal to print the character via an update method on the screen.
The virtual windows are an overlying layer to realizing window movements.
The update method transmits only the changes to the virtual terminal or the screen.

 print(...)
printf(...)
  │
  │           ╔═════════════════════════[ vterm ]═════════════════════════╗
  │           ║createVTerm()                                              ║
  │           ║                                 ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ║
  │           ║                                                           ║
  │           ║                                 │ restoreVTerm(x,y,w,h) │ ║
  │           ║                                                           ║
  │           ║                                 └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ║
  │           ║                                                           ║
  │   ┌───────╨─────[ vwin ]─────────────┐                                ║
  │   │createArea(area)                  │                                ║
  │   │                                  │                                ║
  │   │                                  │                                ║
  └───┼─────────────►     ──────► updateVTerm(area) ────►                 ║
      │                                  │                                ║
      │                           putArea(x,y,area)                       ║
      │                         ────────────────────►                     ║
      │                           getArea(x,y,area)                       ║
      │                        ◄────────────────────                      ║
      │                                  │                                ║
      │                                  │                                ║
      │                  resizeArea(area)│                                ║
      └───────╥──────────────────────────┘                                ║
              ║                                                           ║
              ║                                                           ║
              ║                                                           ║
              ║   │                                          resizeVTerm()║
              ╚═══▼═══════════════════════════════════════════════════════╝
                  │
                  │    putVTerm()
                  └──────────────────► updateTerminalLine(y)
                    updateTerminal()             │
                                                 ▼
                                         ┌───────────────┐
                                         │ output_buffer │
                                         └───────────────┘
                                                 │
                                                 │ flush_out() 
                                                 │     +
                                                 │ Fputchar(char)
                                                 │
                                                 ▼
                                         ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                                         ▌               ▐
                                         ▌    screen     ▐
                                         ▌ ───────────── ▐
                                         ▌ real terminal ▐
                                         ▌               ▐
                                         ▀▀▀▀▀▀▀███▀▀▀▀▀▀▀
                                                ███
                                             ▀▀▀▀▀▀▀▀▀

Class digramm

                                                ┌───────────┐
                                           ┌────┤ FKeyEvent │
                                           │    └───────────┘
                                           │    ┌─────────────┐
                                           ├────┤ FMouseEvent │
                                           │    └─────────────┘
                                           │    ┌─────────────┐
                                           ├────┤ FWheelEvent │
                                           │    └─────────────┘
                                           │    ┌─────────────┐
                                           ├────┤ FFocusEvent │
                                           │    └─────────────┘
                                           │    ┌─────────────┐
                               ┌────────┐  ├────┤ FAccelEvent │
                               │ FEvent │◄─┤    └─────────────┘
                               └────┬───┘  │    ┌──────────────┐
                                    :1     ├────┤ FResizeEvent │
                                    :      │    └──────────────┘
                                    :      │    ┌────────────┐
                                    :      ├────┤ FShowEvent │
                                    :      │    └────────────┘
                                    :      │    ┌────────────┐
                                    :      ├────┤ FHideEvent │
                                    :      │    └────────────┘
                                    :      │    ┌─────────────┐
                                    :      ├────┤ FCloseEvent │
                                    :      │    └─────────────┘
                                    :      │    ┌─────────────┐
                                    :      └────┤ FTimerEvent │
                                    :           └─────────────┘
                                    :
                                    :           ┌──────────────┐
                                    :      ┌────┤ FApplication │
                                    :      │    └──────────────┘
                                    :      │    ┌─────────┐1
                                    :      ├────┤ FButton ├-----------------------------┐
                                    :      │    └─────────┘                             :
                                    :      │    ┌────────┐1                             :
                                    :      ├────┤ FLabel ├------------------------------┐
                                    :      │    └────────┘                              :
                                    :      │    ┌───────────┐1                          :
                                    :      ├────┤ FLineEdit ├---------------------------┐
                                    :      │    └───────────┘                           :
                                    :      │    ┌──────────────┐      ┌──────────────┐1 :
                                    :1     ├────┤ FButtonGroup │   ┌──┤ FRadioButton ├--┐
 ┌─────────┐    ┌────────┐    ┌─────┴───┐  │    └──────────────┘   │  └──────────────┘  :
 │ FObject │◄─┬─┤ FVTerm │◄───┤ FWidget │◄─┤    ┌───────────────┐  │  ┌───────────┐1    :
 └─────────┘  │ └────┬───┘    └───┬─┬───┘  ├────┤ FToggleButton │◄─┼──┤ FCheckBox ├-----┐
              │      :1           :1:1     │    └───────────────┘  │  └───────────┘     :
   ┌───────┐  │      :            : :      │    ┌──────────────┐   │  ┌─────────┐1      :
   │ FTerm │◄─┘      └------------┐ :      ├────┤ FProgressbar │   └──┤ FSwitch ├-------┐
   └─┬───┬─┘                      : :      │    └──────────────┘      └─────────┘       :
     :1  :1                       : :      │    ┌────────────┐                          :  *┌─────────┐
     :   └------------------------┐ :      ├────┤ FScrollbar │                          ├---┤ FString │
     :                            : :      │    └────────────┘                          :   └─────────┘
     :  1┌───────────┐            : :      │    ┌───────────┐1                          :
     └---┤ FOptiAttr │            : :      ├────┤ FTextView ├---------------------------┘
     :   └───────────┘            : :      │    └───────────┘                           :
     :  1┌───────────┐            : :      │    ┌──────────┐1     *┌──────────────┐1    :
     └---┤ FOptiMove │            : :      ├────┤ FListBox ├-------┤ FListBoxItem ├-----┘
         └───────────┘            : :      │    └──────────┘       └──────────────┘     :
                                  : :      │    ┌─────────────┐                         :
                                  : :      ├────┤ FScrollView │                         :
                                  : :      │    └─────────────┘                         :
                                  : :      │    ┌────────────┐1   *┌────────────┐1      :
                                  : :      │ ┌──┤ FStatusBar ├-----┤ FStatusKey ├-------┘
                                  : :      │ │  └────┬───────┘     └────────────┘       :
                                  : :      │ │      1└----------------------------------┘
                                  : :      │ ▼                       ┌─────────────┐1   :
                                  : :  ┌───┴─┴───┐  ┌─────────┐   ┌──┤ FFileDialog ├----┘
                                  : :  │ FWindow │◄─┤ FDialog │◄──┤  └─────────────┘    :
                                  : :  └──┬──┬───┘  └────┬────┘   │  ┌─────────────┐1   :
                                  : :     ▲  ▲          1:        └──┤ FMessageBox ├----┘
                                  : :     │  │           :           └─────────────┘    :
                                  : :     │  │           └------------------------------┘
                                  : :     │  │      ┌──────────┐                        :
                                  : :     │  └──────┤ FToolTip ├------------------------┘
                                  : :     │         └──────────┘                        :
                                  : :     └───────────────┐          ┌──────────┐       :
                                  : :                     │      ┌───┤ FMenuBar │       :
                                  : :    ┌───────────┐    └──────┤   └──────────┘       :
                                  : :    │ FMenuList │◄──────────┤   ┌───────┐          :
                                  : :    └────┬──────┘           └───┤ FMenu │◄──┐      :
                                  : :        1:                      └───────┘   │      :
                                  : :         :            ┌─────────────────┐   │      :
                                  : :         :            │ FDialogListMenu ├───┘      :
                                  : :         :            └─────────────────┘          :
                                  : :         :                    ┌────────────────┐*  :
                                  : :         : *┌───────────┐  ┌──┤ FCheckMenuItem ├-┐ :
                                  : :         ├--┤ FMenuItem │◄─┤  └────────────────┘ : :
                                  : :         :  └───────────┘  │  ┌────────────────┐*: :
                                  : :         :                 └──┤ FRadioMenuItem ├-┤ :
                                  : :         :                    └────────────────┘ : :
                                  : :         └---------------------------------------┘ :
                                  : └---------------------------------------------------┘
                                  :  *┌────────┐
                                  └---┤ FPoint │
                                  :   └────────┘
                                  :  *┌───────┐
                                  └---┤ FRect │
                                      └───────┘

Related Repositories

finalcut

finalcut

A text-based widget toolkit ...