finalcut/README.md

254 lines
18 KiB
Markdown
Raw Normal View History

2018-09-30 20:07:22 +02:00
![FINAL CUT](logo/svg/finalcut-logo.svg)
============================================
2016-04-25 21:13:12 +02:00
### Building and code analysis
2015-10-04 20:17:00 +02:00
*Travis CI:*<br />
&#160;&#160;&#160;&#160;&#160;[![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 />
2016-10-15 18:32:54 +02:00
&#160;&#160;&#160;&#160;&#160;[![Coverity Scan Status](https://scan.coverity.com/projects/6508/badge.svg)](https://scan.coverity.com/projects/6508) <br />
2018-09-22 03:38:20 +02:00
*LGTM:*<br />
&#160;&#160;&#160;&#160;&#160;[![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 />
&#160;&#160;&#160;&#160;&#160;[![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html)
2015-09-30 22:39:02 +02:00
2018-09-30 20:07:22 +02: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.
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.
### Installation
2017-11-02 16:05:34 +01:00
```bash
> 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
> make
> su -c "make install"
```
### Supported platforms
* Linux
* FreeBSD
* NetBSD
* OpenBSD
* macOS
* Cygwin
* Solaris
2018-09-30 20:07:22 +02:00
### First steps
[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()║
╚═══▼═══════════════════════════════════════════════════════╝
│ putVTerm()
└──────────────────► updateTerminalLine(y)
updateTerminal() │
┌───────────────┐
│ output_buffer │
└───────────────┘
2017-09-06 02:15:00 +02:00
│ flush_out()
│ +
│ Fputchar(char)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▌ ▐
▌ screen ▐
▌ ───────────── ▐
▌ real terminal ▐
▌ ▐
▀▀▀▀▀▀▀███▀▀▀▀▀▀▀
███
▀▀▀▀▀▀▀▀▀
2015-05-23 13:35:12 +02:00
</pre>
Class digramm
-------------
<pre style="line-height: 1 !important;">
2018-07-22 23:07:49 +02:00
1┌──────────────┐
┌-----------┤ FTermFreeBSD │
: └──────────────┘
: 1┌──────────────┐ ┌───────────┐
┌-----------┤ FTermOpenBSD │ ┌────┤ FKeyEvent │
: └──────────────┘ │ └───────────┘
: 1┌────────────────┐ │ ┌─────────────┐
2018-07-22 23:07:49 +02:00
┌-----------┤ FTermDetection │ ├────┤ FMouseEvent │
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
2018-07-22 23:07:49 +02:00
┌-----------┤ FTermcapQuirks │ ├────┤ FWheelEvent │
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermXTerminal │ ├────┤ FFocusEvent │
: └────────────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐
┌-----------┤ FTermcap │ ┌────────┐ ├────┤ FAccelEvent │
: └──────────┘ │ FEvent │◄─┤ └─────────────┘
: 1┌──────────┐ └───┬────┘ │ ┌──────────────┐
┌-----------┤ FTermios │ :1 ├────┤ FResizeEvent │
: └──────────┘ : │ └──────────────┘
: 1┌───────────────┐ : │ ┌────────────┐
2018-07-22 23:07:49 +02:00
┌-----------┤ FColorPalette │ : ├────┤ FShowEvent │
: └───────────────┘ : │ └────────────┘
2018-07-22 23:07:49 +02:00
: 1┌───────────┐ : │ ┌────────────┐
┌-----------┤ FOptiMove │ : ├────┤ FHideEvent │
: └───────────┘ : │ └────────────┘
: 1┌───────────┐ : │ ┌─────────────┐
2018-07-22 23:07:49 +02:00
┌-----------┤ FOptiAttr │ : ├────┤ FCloseEvent │
: └───────────┘ : │ └─────────────┘
: 1┌───────────┐ : │ ┌─────────────┐
2018-07-22 23:07:49 +02:00
┌-----------┤ FKeyboard │ : └────┤ FTimerEvent │
2017-09-06 02:15:00 +02:00
: └───────────┘ : └─────────────┘
: 1┌───────────────┐ :
┌-----------┤ FMouseControl │ : ┌──────────────┐
: └───────────────┘ : ┌────┤ FApplication │
2017-09-06 02:15:00 +02:00
: *┌─────────┐ : │ └──────────────┘
: ┌--------┤ FString │ : │ ┌─────────┐
: : └─────────┘ : ├────┤ FButton │
: : *┌────────┐ : │ └─────────┘
: ┌--------┤ FPoint │ : │ ┌────────┐
: : └────────┘ : ├────┤ FLabel │
: : *┌───────┐ : │ └────────┘
: ┌--------┤ FRect │ : │ ┌───────────┐
: : └───────┘ : ├────┤ FLineEdit │
:1 :1 : │ └───────────┘
┌─┴──┴──┐ ┌────────┐ : │ ┌──────────────┐ ┌──────────────┐
│ FTerm │◄───┤ FVTerm │◄──┐ :1 ├────┤ FButtonGroup │ ┌──┤ FRadioButton │
└───────┘ └────────┘ │ ┌────┴────┐ │ └──────────────┘ │ └──────────────┘
├──┤ FWidget │◄─┤ ┌───────────────┐ │ ┌───────────┐
┌─────────┐ │ └─────────┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
│ FObject │◄──┘ │ └───────────────┘ │ └───────────┘
└─────────┘ │ ┌──────────────┐ │ ┌─────────┐
2017-09-06 02:15:00 +02:00
├────┤ 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 ├───┘
: └─────────────────┘
2017-10-07 23:55:01 +02:00
└--------------------------------┐
:* ┌────────────────┐* :
┌─────┴─────┐ ┌──┤ 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
-------
GNU Lesser General Public License Version 3
2018-02-17 20:58:07 +01:00
2017-11-03 05:04:27 +01:00
Please send bug reports to
--------------------------
https://github.com/gansm/finalcut/issues