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 │
: └──────────────┘
2018-10-29 00:45:45 +01:00
: 1┌──────────────┐ ┌───────────┐
┌-----------┤ FTermOpenBSD │ ┌────┤ FKeyEvent │
: └──────────────┘ │ └───────────┘
: 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermDetection │ ├────┤ FMouseEvent │
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermcapQuirks │ ├────┤ FWheelEvent │
: └────────────────┘ │ └─────────────┘
: 1┌────────────────┐ │ ┌─────────────┐
┌-----------┤ FTermXTerminal │ ├────┤ FFocusEvent │
: └────────────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌─────────────┐
┌-----------┤ FTermcap │ ├────┤ FAccelEvent │
: └──────────┘ │ └─────────────┘
: 1┌──────────┐ │ ┌──────────────┐
┌-----------┤ FTermios │ ├────┤ FResizeEvent │
: └──────────┘ │ └──────────────┘
: 1┌───────────────┐ │ ┌────────────┐
┌-----------┤ FColorPalette │ ├────┤ FShowEvent │
: └───────────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌────────────┐
┌-----------┤ FOptiMove │ ├────┤ FHideEvent │
: └───────────┘ │ └────────────┘
: 1┌───────────┐ │ ┌─────────────┐
┌-----------┤ FOptiAttr │ ├────┤ FCloseEvent │
: └───────────┘ │ └─────────────┘
: 1┌───────────┐ │ ┌─────────────┐
┌-----------┤ FKeyboard │ ├────┤ FTimerEvent │
: └───────────┘ │ └─────────────┘
: 1┌───────────────┐ │
┌-----------┤ FMouseControl │ │ ┌──────────────┐
: └───────────────┘ │ ┌────┤ FApplication │
: *┌─────────┐ │ │ └──────────────┘
: ┌--------┤ FString │ │ │ ┌─────────┐
: : └─────────┘ │ ├────┤ FButton │
: : *┌────────┐ │ │ └─────────┘
: ┌--------┤ FPoint │ │ │ ┌────────┐
: : └────────┘ │ ├────┤ FLabel │
: : *┌───────┐ │ │ └────────┘
: ┌--------┤ FRect │ │ │ ┌───────────┐
: : └───────┘ │ ├────┤ 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
-------
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