A text-based widget toolkit
Go to file
Markus Gans d1f2de254d A FListView tree branch can now be expand and collapsed with a single click 2017-10-23 16:16:06 +02:00
debian All include files were moved to a separate director 2017-09-17 21:32:46 +02:00
doc Optimized Color palette 2017-10-19 23:20:04 +02:00
examples FObject double free prevention of fc::empty_string 2017-10-15 23:22:13 +02:00
icon Add finalcut icon 2015-08-16 19:46:18 +02:00
include/final A FListView tree branch can now be expand and collapsed with a single click 2017-10-23 16:16:06 +02:00
logo Accelerates text line drawing by clear with CSI sequences 2016-12-11 16:42:50 +01:00
m4 The include guard for fconfig.h no longer has an underscore prefix 2017-10-07 21:57:07 +02:00
scripts The command line help text is now available in all applications 2017-09-19 06:18:03 +02:00
src A FListView tree branch can now be expand and collapsed with a single click 2017-10-23 16:16:06 +02:00
.codedocs Uncaught exception fix 2017-09-20 06:19:27 +02:00
.gitignore All include files were moved to a separate director 2017-09-17 21:32:46 +02:00
.travis.yml Rename fapp.{cpp,h} to fapplication.{cpp,h} 2017-08-24 00:47:35 +02:00
AUTHORS upload 2015-05-23 13:35:12 +02:00
COPYING upload 2015-05-23 13:35:12 +02:00
ChangeLog A FListView tree branch can now be expand and collapsed with a single click 2017-10-23 16:16:06 +02:00
LICENSE upload 2015-05-23 13:35:12 +02:00
Makefile.am All include files were moved to a separate director 2017-09-17 21:32:46 +02:00
Makefile.in All include files were moved to a separate director 2017-09-17 21:32:46 +02:00
README.md Small class diagram improvement 2017-10-07 23:55:01 +02:00
aclocal.m4 Add the opti-move test program 2016-11-26 15:18:44 +01:00
autogen.sh New data type FStringList introduced 2017-09-20 16:56:20 +02:00
build.sh Remap meta key to left alt on FreeBSD console 2017-04-02 13:30:23 +02:00
compile Optimized the terminal clear screen 2016-11-26 18:15:31 +01:00
config.guess Add the opti-move test program 2016-11-26 15:18:44 +01:00
config.h.in config.h.in 2015-09-15 23:07:24 +02:00
config.sub Add the opti-move test program 2016-11-26 15:18:44 +01:00
configure The include guard for fconfig.h no longer has an underscore prefix 2017-10-07 21:57:07 +02:00
configure.ac All include files were moved to a separate director 2017-09-17 21:32:46 +02:00
depcomp upload 2015-05-23 13:35:12 +02:00
finalcut.spec FScrollView provides a scrollable viewport to change area 2017-01-02 08:07:46 +01:00
install-sh Add the opti-move test program 2016-11-26 15:18:44 +01:00
ltmain.sh Add the opti-move test program 2016-11-26 15:18:44 +01:00
missing Add the opti-move test program 2016-11-26 15:18:44 +01:00
stamp-h1 new + delete in the same scope 2017-09-17 21:44:22 +02:00

README.md

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 C++ 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 text windows on the screen. The C++ class design was inspired by the Qt framework. It provides common controls like dialog boxes, 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 │
                                   :       │    └─────────────┘
              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 ├---┘
                                                          └────────────────┘