A text-based widget toolkit
Go to file
Markus Gans a6c30bb2b5 Stream and assignment operator support for FLabel 2017-09-20 05:44:41 +02:00
debian All include files were moved to a separate director 2017-09-17 21:32:46 +02:00
doc Streaming support for FString 2017-09-20 02:51:17 +02:00
examples Stream and assignment operator support for FLabel 2017-09-20 05:44:41 +02:00
icon Add finalcut icon 2015-08-16 19:46:18 +02:00
include/final Stream and assignment operator support for FLabel 2017-09-20 05:44:41 +02:00
logo Accelerates text line drawing by clear with CSI sequences 2016-12-11 16:42:50 +01:00
m4 Enable xterm "metaSendsEscape" switch 2017-04-11 00:30:27 +02:00
scripts The command line help text is now available in all applications 2017-09-19 06:18:03 +02:00
src Stream and assignment operator support for FLabel 2017-09-20 05:44:41 +02:00
.codedocs Add Debian files to create packages 2017-02-05 23:55:54 +01: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 Stream and assignment operator support for FLabel 2017-09-20 05:44:41 +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 Streaming support for FString 2017-09-20 02:51:17 +02:00
aclocal.m4 Add the opti-move test program 2016-11-26 15:18:44 +01:00
autogen.sh Makefile update 2015-07-09 02:15:12 +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 All include files were moved to a separate director 2017-09-17 21:32:46 +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 ├-┤
                                              :                    └────────────────┘ :
                                              └---------------------------------------┘