![The Final Cut](logo/png/finalcut-logo.png) ### Building and code analysis *Travis CI:*
     [![Build Status](https://travis-ci.org/gansm/finalcut.svg?branch=master)](https://travis-ci.org/gansm/finalcut)
*Coverity Scan:*
     [![Coverity Scan Status](https://scan.coverity.com/projects/6508/badge.svg)](https://scan.coverity.com/projects/6508)
*Class Reference:*
     [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html) ### 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](https://en.wikipedia.org/wiki/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. ![](doc/fileopen-dialog.png) ![](doc/progress-bar.png) ![](doc/textview.png) ![](doc/Mandelbrot.png) newfont ------- A new text font for X11 and the Linux console. ![](doc/newfont1.png) ![](doc/newfont2.png) ![](doc/calculator.png) 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 │
                                   :       │    └─────────────┘
              1┌───────────┐       :       │    ┌─────────────┐
   ┌-----------┤ FOptiMove │       :       └────┤ FTimerEvent │
   :           └───────────┘       :            └─────────────┘
   :          1┌───────────┐       :
   ┌-----------┤ FOptiAttr │       :            ┌──────────────┐
   :           └───────────┘       :       ┌────┤ FApplication │
   :          *┌─────────┐         :       │    └──────────────┘
   :  ┌--------┤ FString │         :       │    ┌─────────┐
   :  :        └─────────┘         :       ├────┤ FButton │
   :  :       *┌────────┐          :       │    └─────────┘
   :  ┌--------┤ FPoint │          :       │    ┌────────┐
   :  :        └────────┘          :       ├────┤ FLabel │
   :  :       *┌───────┐           :       │    └────────┘
   :  ┌--------┤ FRect │           :       │    ┌───────────┐
   :  :        └───────┘           :       ├────┤ FLineEdit │
   :1 :1                           :       │    └───────────┘
 ┌─┴──┴──┐                         :       │    ┌──────────────┐      ┌──────────────┐
 │ FTerm │◄────┐                   :1      ├────┤ FButtonGroup │   ┌──┤ FRadioButton │
 └───────┘     │ ┌────────┐   ┌────┴────┐  │    └──────────────┘   │  └──────────────┘
               ├─┤ FVTerm │◄──┤ FWidget │◄─┤    ┌───────────────┐  │  ┌───────────┐
 ┌─────────┐   │ └────────┘   └─────────┘  ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
 │ FObject │◄──┘                           │    └───────────────┘  │  └───────────┘
 └─────────┘                               │    ┌──────────────┐   │  ┌─────────┐
                                           ├────┤ FProgressbar │   └──┤ FSwitch │
                                           │    └──────────────┘      └─────────┘
                                           │    ┌────────────┐
                                           ├────┤ FScrollbar │
                                           │    └────────────┘
                                           │    ┌───────────┐
                                           ├────┤ FTextView │
                                           │    └───────────┘
                                           │    ┌──────────┐1     *┌──────────────┐
                                           ├────┤ FListBox ├-------┤ FListBoxItem │
                                           │    └──────────┘       └──────────────┘
 ┌─────────────┐1                          │   1┌───────────┐1    *┌───────────────┐
 │ FTermBuffer ├---------------------------├────┤ FListView ├------┤ FListViewItem │
 └─────────────┘                           │    └───────────┘      └───────────────┘
                                           │    ┌─────────────┐
                                           ├────┤ FScrollView │
                                           │    └─────────────┘
                                           │    ┌────────────┐1   *┌────────────┐
                                           │ ┌──┤ FStatusBar ├-----┤ FStatusKey │
                                           │ │  └────────────┘     └────────────┘
                                           │ │
                                           │ ▼                       ┌─────────────┐
                                       ┌───┴─┴───┐  ┌─────────┐   ┌──┤ FFileDialog │
                                       │ FWindow │◄─┤ FDialog │◄──┤  └─────────────┘
                                       └──┬──┬───┘  └─────────┘   │  ┌─────────────┐
                                          ▲  ▲                    └──┤ FMessageBox │
                                          │  │                       └─────────────┘
                                          │  │      ┌──────────┐
                                          │  └──────┤ FToolTip │
                                          │         └──────────┘
                                          └───────────────┐          ┌──────────┐
                                                          │      ┌───┤ FMenuBar │
                                         ┌───────────┐    └──────┤   └──────────┘
                                         │ FMenuList │◄──────────┤   ┌───────┐
                                         └────┬──────┘           └───┤ FMenu │◄──┐
                                             1:                      └───────┘   │
                                              :            ┌─────────────────┐   │
                                              :            │ FDialogListMenu ├───┘
                                              :            └─────────────────┘
                                              :                    ┌────────────────┐*
                                              : *┌───────────┐  ┌──┤ FCheckMenuItem ├-┐
                                              ├--┤ FMenuItem │◄─┤  └────────────────┘ :
                                              :  └───────────┘  │  ┌────────────────┐*:
                                              :                 └──┤ FRadioMenuItem ├-┤
                                              :                    └────────────────┘ :
                                              └---------------------------------------┘