2018-09-30 20:07:22 +02:00
![FINAL CUT ](logo/svg/finalcut-logo.svg )
============================================
2016-04-25 21:13:12 +02:00
2015-10-05 01:01:45 +02:00
### Building and code analysis
2018-11-24 02:59:56 +01:00
*Latest release:*< br / >
          [![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) < br / >
2019-01-05 22:58:06 +01:00
*License:*< br / >
          [![license](https://img.shields.io/github/license/gansm/finalcut.svg?colorA=#333)](COPYING) < br / >
2015-10-04 20:17:00 +02:00
*Travis CI:*< br / >
2015-10-05 01:01:45 +02:00
          [![Build Status](https://travis-ci.org/gansm/finalcut.svg?branch=master)](https://travis-ci.org/gansm/finalcut) < br / >
2015-10-04 20:17:00 +02:00
*Coverity Scan:*< br / >
2019-05-17 15:48:09 +02:00
          [![Coverity Scan Status](https://img.shields.io/coverity/scan/6508.svg)](https://scan.coverity.com/projects/6508) < br / >
2018-09-22 03:38:20 +02:00
*LGTM:*< br / >
          [![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/gansm/finalcut.svg?logo=lgtm& logoWidth=18)](https://lgtm.com/projects/g/gansm/finalcut/context:cpp) < br / >
2016-10-15 18:32:54 +02:00
*Class Reference:*< br / >
          [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html)
2015-09-30 22:39:02 +02:00
2018-11-24 02:59:56 +01:00
### Description
2018-11-01 00:49:13 +01:00
The FINAL CUT is a C++ 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 text windows on the screen.
2018-11-04 23:00:06 +01:00
2018-11-03 01:32:51 +01:00
The structure of the Qt framework was originally the inspiration for the C++ class design of FINAL CUT. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
2018-09-30 20:07:22 +02:00
2015-10-05 01:01:45 +02:00
### Installation
2017-11-02 16:05:34 +01:00
```bash
2015-10-05 01:01:45 +02:00
> git clone git://github.com/gansm/finalcut.git
> cd finalcut
2018-09-22 01:11:05 +02:00
> autoreconf --install --force
2016-04-02 18:35:34 +02:00
> ./configure --prefix=/usr
2015-10-05 01:01:45 +02:00
> make
> su -c "make install"
```
2017-12-17 01:06:53 +01:00
### Supported platforms
* Linux
* FreeBSD
* NetBSD
* OpenBSD
* macOS
2018-01-21 16:21:41 +01:00
* Cygwin
2017-12-17 01:06:53 +01:00
* Solaris
2018-09-30 20:07:22 +02:00
### First steps
2018-10-05 05:15:54 +02:00
[How to use the library ](doc/first-steps.md#first-steps-with-the-final-cut-widget-toolkit )
2018-09-30 20:07:22 +02:00
### Screenshots
The FFileDialog widget:
![FFileDialog ](doc/fileopen-dialog.png )
2015-05-23 13:35:12 +02:00
2018-09-30 20:07:22 +02:00
The Final Cut FProgressbar widget:
2015-05-23 13:35:12 +02:00
2018-09-30 20:07:22 +02:00
![FProgressbar ](doc/progress-bar.png )
2015-05-23 13:35:12 +02:00
2018-09-30 20:07:22 +02:00
Scrollable text in the FTextView widget:
![FTextView ](doc/textview.png )
The Mandelbrot set example:
![Mandelbrot set ](doc/Mandelbrot.png )
2015-06-14 13:48:35 +02:00
2015-05-23 13:35:12 +02:00
newfont
-------
2017-11-03 05:04:27 +01:00
A [graphical text font ](fonts/ ) for X11 and the Linux console.
2018-09-30 20:07:22 +02:00
![ui example in newfont mode ](doc/newfont1.png )
2015-05-23 13:35:12 +02:00
2018-09-30 20:07:22 +02:00
Newfont drive symbols:
2015-05-23 13:35:12 +02:00
2018-09-30 20:07:22 +02:00
![drive symbols ](doc/newfont2.png )
The calculator example in newfont mode:
![calculator ](doc/calculator.png )
2015-06-20 16:56:03 +02:00
2015-05-23 13:35:12 +02:00
Virtual terminal
----------------
2017-09-06 02:15:00 +02:00
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.
2015-05-23 13:35:12 +02:00
The update method transmits only the changes to the virtual terminal or the screen.
< pre style = "line-height: 1 !important;" >
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()║
╚═══▼═══════════════════════════════════════════════════════╝
│
2016-12-15 23:11:34 +01:00
│ putVTerm()
└──────────────────► updateTerminalLine(y)
updateTerminal() │
▼
┌───────────────┐
│ output_buffer │
└───────────────┘
│
2017-09-06 02:15:00 +02:00
│ flush_out()
2016-12-15 23:11:34 +01:00
│ +
│ Fputchar(char)
│
▼
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▌ ▐
▌ screen ▐
▌ ───────────── ▐
▌ real terminal ▐
▌ ▐
▀▀▀▀▀▀▀███▀▀▀▀▀▀▀
███
▀▀▀▀▀▀▀▀▀
2015-05-23 13:35:12 +02:00
< / pre >
Class digramm
-------------
2018-11-01 00:49:13 +01:00
2015-05-23 13:35:12 +02:00
< pre style = "line-height: 1 !important;" >
2018-07-22 23:07:49 +02:00
1┌──────────────┐
┌-----------┤ FTermFreeBSD │
: └──────────────┘
2019-07-04 15:26:26 +02:00
: 1┌──────────────┐
┌-----------┤ FTermOpenBSD │
: └──────────────┘
: 1┌────────────────┐ ┌───────────┐
┌-----------┤ FTermDetection │ ┌────┤ FKeyEvent │
: └────────────────┘ │ └───────────┘
2018-10-29 00:45:45 +01:00
: 1┌────────────────┐ │ ┌─────────────┐
2019-07-04 15:26:26 +02:00
┌-----------┤ FTermcapQuirks │ ├────┤ FMouseEvent │
2018-10-29 00:45:45 +01:00
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
2019-07-04 15:26:26 +02:00
┌-----------┤ FTermXTerminal │ ├────┤ FWheelEvent │
2018-10-29 00:45:45 +01:00
: └────────────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐
2019-07-04 15:26:26 +02:00
┌-----------┤ FTermcap │ ├────┤ FFocusEvent │
: └──────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐
┌-----------┤ FTermios │ ├────┤ FAccelEvent │
2018-10-29 00:45:45 +01:00
: └──────────┘ │ └─────────────┘
2019-07-04 15:26:26 +02:00
: 1┌───────────────┐ │ ┌──────────────┐
┌-----------┤ FColorPalette │ ├────┤ FResizeEvent │
: └───────────────┘ │ └──────────────┘
2018-10-29 00:45:45 +01:00
: 1┌───────────┐ │ ┌────────────┐
2019-07-04 15:26:26 +02:00
┌-----------┤ FOptiMove │ ├────┤ FShowEvent │
: └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌────────────┐
┌-----------┤ FOptiAttr │ ├────┤ FHideEvent │
2018-10-29 00:45:45 +01:00
: └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌─────────────┐
2019-07-04 15:26:26 +02:00
┌-----------┤ FKeyboard │ ├────┤ FCloseEvent │
2018-10-29 00:45:45 +01:00
: └───────────┘ │ └─────────────┘
2019-07-04 15:26:26 +02:00
: 1┌───────────────┐ │ ┌─────────────┐
┌-----------┤ FMouseControl │ ├────┤ FTimerEvent │
: └───────────────┘ │ └─────────────┘
: 1┌─────────┐ │
┌-----------┤ FSystem │ │
: └─────────┘ │
: *┌─────────┐ │
: ┌--------┤ FString │ │ ┌──────────────┐
: : └─────────┘ │ ┌────┤ FApplication │
: : *┌────────┐ │ │ └──────────────┘
: ┌--------┤ FPoint │ │ │ ┌─────────┐
: : └────────┘ │ ├────┤ FButton │
: : *┌───────┐ │ │ └─────────┘
: ┌--------┤ FRect │ │ │ ┌────────┐
: : └───────┘ │ ├────┤ FLabel │
2018-10-29 00:45:45 +01:00
: : *┌───────┐ │ │ └────────┘
2019-07-04 15:26:26 +02:00
: ┌--------┤ FSize │ │ │ ┌───────────┐
2018-10-29 00:45:45 +01:00
: : └───────┘ │ ├────┤ FLineEdit │
:1 :1 │ │ └───────────┘
┌─┴──┴──┐ │ │ ┌──────────────┐ ┌──────────────┐
│ FTerm │ │ ├────┤ FButtonGroup │ ┌──┤ FRadioButton │
└───┬───┘ ┌────────┐ │ │ └──────────────┘ │ └──────────────┘
:1 │ FEvent │◄─────┘ │ ┌───────────────┐ │ ┌───────────┐
┌───┴────┐ └────┬───┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
│ FVTerm │◄──┐ :1 │ └───────────────┘ │ └───────────┘
└────────┘ │ ┌────┴────┐ │ ┌──────────────┐ │ ┌─────────┐
├────┤ FWidget │◄───────┼────┤ FProgressbar │ └──┤ FSwitch │
┌─────────┐ │ └─────────┘ │ └──────────────┘ └─────────┘
│ FObject │◄──┘ │ ┌────────────┐
└─────────┘ ├────┤ 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 ├---┘
└────────────────┘
2015-05-23 13:35:12 +02:00
< / pre >
2017-11-03 05:04:27 +01:00
2018-02-17 20:58:07 +01:00
License
-------
2018-10-26 07:43:23 +02:00
GNU Lesser General Public License Version 3
2018-02-17 20:58:07 +01:00
2018-11-01 21:29:54 +01:00
Frequently Asked Questions
--------------------------
If you have any problems, please read the
[FAQ ](doc/faq.md#frequently-asked-questions )
before you give up.
2017-11-03 05:04:27 +01:00
Please send bug reports to
--------------------------
https://github.com/gansm/finalcut/issues