Add a document that describes how to create user themes
This commit is contained in:
parent
c64b17ac49
commit
219ac28fb7
|
@ -1,3 +1,6 @@
|
||||||
|
2020-07-06 Markus Gans <guru.mail@muenster.de>
|
||||||
|
* Add a document that describes how to create user themes
|
||||||
|
|
||||||
2020-06-11 Markus Gans <guru.mail@muenster.de>
|
2020-06-11 Markus Gans <guru.mail@muenster.de>
|
||||||
* New widget FBusyIndicator to indicate background activity
|
* New widget FBusyIndicator to indicate background activity
|
||||||
* Added example/busy to demonstrate the functionality of this widget
|
* Added example/busy to demonstrate the functionality of this widget
|
||||||
|
|
38
README.md
38
README.md
|
@ -1,11 +1,13 @@
|
||||||
![FINAL CUT](logo/svg/finalcut-logo.svg)
|
![FINAL CUT](logo/svg/finalcut-logo.svg)
|
||||||
|
|
||||||
# Library for creating terminal applications with text-based widgets
|
# Library for creating terminal applications with text-based widgets
|
||||||
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 FINAL CUT is a C++ class library and widget toolkit with full [mouse](doc/mouse-control.md#title-bar-actions-on-mouse-clicks) 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 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.
|
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.
|
||||||
|
|
||||||
## Building and code analysis
|
## Building and code analysis
|
||||||
|
|
||||||
| | Badge |
|
| | Badge |
|
||||||
|-------------------:|:------|
|
|-------------------:|:------|
|
||||||
| *Latest release* | [![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) |
|
| *Latest release* | [![Latest Release](https://img.shields.io/github/release/gansm/finalcut.svg)](https://github.com/gansm/finalcut/releases) |
|
||||||
|
@ -18,6 +20,7 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
|
||||||
| *CodeFactor* | [![CodeFactor](https://www.codefactor.io/repository/github/gansm/finalcut/badge)](https://www.codefactor.io/repository/github/gansm/finalcut) |
|
| *CodeFactor* | [![CodeFactor](https://www.codefactor.io/repository/github/gansm/finalcut/badge)](https://www.codefactor.io/repository/github/gansm/finalcut) |
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
> git clone git://github.com/gansm/finalcut.git
|
> git clone git://github.com/gansm/finalcut.git
|
||||||
> cd finalcut
|
> cd finalcut
|
||||||
|
@ -28,6 +31,7 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
|
||||||
```
|
```
|
||||||
|
|
||||||
## Supported platforms
|
## Supported platforms
|
||||||
|
|
||||||
* Linux
|
* Linux
|
||||||
* FreeBSD
|
* FreeBSD
|
||||||
* NetBSD
|
* NetBSD
|
||||||
|
@ -37,6 +41,7 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
|
||||||
* Solaris
|
* Solaris
|
||||||
|
|
||||||
## First steps
|
## First steps
|
||||||
|
|
||||||
See the [first steps](doc/first-steps.md#first-steps-with-the-final-cut-widget-toolkit) documentation for information on how to use the library.
|
See the [first steps](doc/first-steps.md#first-steps-with-the-final-cut-widget-toolkit) documentation for information on how to use the library.
|
||||||
|
|
||||||
## Some screenshots
|
## Some screenshots
|
||||||
|
@ -45,46 +50,38 @@ The FFileDialog widget with incremental file name search:
|
||||||
|
|
||||||
![FFileDialog](doc/fileopen-dialog.png)
|
![FFileDialog](doc/fileopen-dialog.png)
|
||||||
|
|
||||||
|
|
||||||
The FINAL CUT FProgressbar widget:
|
The FINAL CUT FProgressbar widget:
|
||||||
|
|
||||||
![FProgressbar](doc/progress-bar.png)
|
![FProgressbar](doc/progress-bar.png)
|
||||||
|
|
||||||
|
|
||||||
Scrollable text in the FTextView widget:
|
Scrollable text in the FTextView widget:
|
||||||
|
|
||||||
![FTextView](doc/textview.png)
|
![FTextView](doc/textview.png)
|
||||||
|
|
||||||
|
|
||||||
The Mandelbrot set example:
|
The Mandelbrot set example:
|
||||||
|
|
||||||
![Mandelbrot set](doc/Mandelbrot.png)
|
![Mandelbrot set](doc/Mandelbrot.png)
|
||||||
|
|
||||||
|
## newfont
|
||||||
|
|
||||||
newfont
|
|
||||||
-------
|
|
||||||
A [graphical text font](fonts/) for X11 and the Linux console.
|
A [graphical text font](fonts/) for X11 and the Linux console.
|
||||||
|
|
||||||
![ui example in newfont mode](doc/newfont1.png)
|
![ui example in newfont mode](doc/newfont1.png)
|
||||||
|
|
||||||
|
|
||||||
Newfont drive symbols:
|
Newfont drive symbols:
|
||||||
|
|
||||||
![drive symbols](doc/newfont2.png)
|
![drive symbols](doc/newfont2.png)
|
||||||
|
|
||||||
|
|
||||||
The calculator example in newfont mode:
|
The calculator example in newfont mode:
|
||||||
|
|
||||||
![calculator](doc/calculator.png)
|
![calculator](doc/calculator.png)
|
||||||
|
|
||||||
|
## Benchmark
|
||||||
|
|
||||||
Benchmark
|
|
||||||
---------
|
|
||||||
Here you can find a test for [measuring the character speed](doc/benchmark.md#benchmark) in the terminal.
|
Here you can find a test for [measuring the character speed](doc/benchmark.md#benchmark) in the terminal.
|
||||||
|
|
||||||
|
## Virtual terminal
|
||||||
|
|
||||||
Virtual terminal
|
|
||||||
----------------
|
|
||||||
FINAL CUT uses a virtual terminal to print character via an update method on the screen. It provides (as an overlying layer) virtual windows for the realization of window movements. The update methods only transfer differences to the virtual terminal or physical screen.
|
FINAL CUT uses a virtual terminal to print character via an update method on the screen. It provides (as an overlying layer) virtual windows for the realization of window movements. The update methods only transfer differences to the virtual terminal or physical screen.
|
||||||
|
|
||||||
<pre style="line-height: 1 !important;">
|
<pre style="line-height: 1 !important;">
|
||||||
|
@ -136,9 +133,7 @@ printf(...)
|
||||||
▀▀▀▀▀▀▀▀▀
|
▀▀▀▀▀▀▀▀▀
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
## Class digramm
|
||||||
Class digramm
|
|
||||||
-------------
|
|
||||||
|
|
||||||
<pre style="line-height: 1 !important;">
|
<pre style="line-height: 1 !important;">
|
||||||
1┌──────────────┐
|
1┌──────────────┐
|
||||||
|
@ -254,15 +249,14 @@ Class digramm
|
||||||
└────────────────┘
|
└────────────────┘
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
Frequently Asked Questions
|
## Frequently Asked Questions
|
||||||
--------------------------
|
|
||||||
For general questions about FINAL CUT, likely the answer is already included in the [FAQ](doc/faq.md#frequently-asked-questions).
|
For general questions about FINAL CUT, likely the answer is already included in the [FAQ](doc/faq.md#frequently-asked-questions).
|
||||||
|
|
||||||
Please send bug reports to
|
## Please send bug reports to
|
||||||
--------------------------
|
|
||||||
https://github.com/gansm/finalcut/issues
|
https://github.com/gansm/finalcut/issues
|
||||||
|
|
||||||
License
|
## License
|
||||||
-------
|
|
||||||
GNU Lesser General Public License Version 3 <a href="https://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img width="200" align="right" src="https://camo.githubusercontent.com/726b87cc2ebaf8c40716842ff509c5f874381c8e/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f332f33622f4c47504c76335f4c6f676f2e737667" alt="LGPLv3" data-canonical-src="https://upload.wikimedia.org/wikipedia/commons/3/3b/LGPLv3_Logo.svg"></a>
|
|
||||||
|
|
||||||
|
GNU Lesser General Public License Version 3 <a href="https://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img width="200" align="right" src="https://camo.githubusercontent.com/726b87cc2ebaf8c40716842ff509c5f874381c8e/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f332f33622f4c47504c76335f4c6f676f2e737667" alt="LGPLv3" data-canonical-src="https://upload.wikimedia.org/wikipedia/commons/3/3b/LGPLv3_Logo.svg"></a>
|
||||||
|
|
21
configure.ac
21
configure.ac
|
@ -86,9 +86,9 @@ AX_CHECK_COMPILE_FLAG([[-std=c++11]],,
|
||||||
# use GPM (General Purpose Mouse)
|
# use GPM (General Purpose Mouse)
|
||||||
AC_ARG_WITH([gpm],
|
AC_ARG_WITH([gpm],
|
||||||
[AS_HELP_STRING([--without-gpm], [Disable GPM mouse support])],
|
[AS_HELP_STRING([--without-gpm], [Disable GPM mouse support])],
|
||||||
[with_gpm=no],
|
[],
|
||||||
[with_gpm=yes])
|
[with_gpm=yes])
|
||||||
if test "x$with_gpm" = "xyes"
|
if test "x$with_gpm" != "xno"
|
||||||
then
|
then
|
||||||
AC_CHECK_LIB([gpm],
|
AC_CHECK_LIB([gpm],
|
||||||
[main],
|
[main],
|
||||||
|
@ -99,9 +99,9 @@ fi
|
||||||
# profiling
|
# profiling
|
||||||
AC_ARG_WITH([profiler],
|
AC_ARG_WITH([profiler],
|
||||||
[AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])],
|
[AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])],
|
||||||
[with_profiler=yes],
|
[],
|
||||||
[with_profiler=no])
|
[with_profiler=no])
|
||||||
if test "x$with_profiler" = "xyes"
|
if test "x$with_profiler" != "xno"
|
||||||
then
|
then
|
||||||
AC_CHECK_LIB([profiler],
|
AC_CHECK_LIB([profiler],
|
||||||
[ProfilerFlush],
|
[ProfilerFlush],
|
||||||
|
@ -111,14 +111,13 @@ fi
|
||||||
# unit test
|
# unit test
|
||||||
AC_ARG_WITH([unit-test],
|
AC_ARG_WITH([unit-test],
|
||||||
[AS_HELP_STRING([--with-unit-test], [build unit tests])],
|
[AS_HELP_STRING([--with-unit-test], [build unit tests])],
|
||||||
[with_unit_test=yes],
|
[],
|
||||||
[with_unit_test=no])
|
[with_unit_test=no])
|
||||||
if test "x$with_unit_test" = "xyes"
|
if test "x$with_unit_test" != "xno"
|
||||||
then
|
then
|
||||||
AC_MSG_NOTICE(enabled cppunit test)
|
AC_MSG_NOTICE(enabled cppunit test)
|
||||||
AM_PATH_CPPUNIT([1.12.0],
|
PKG_CHECK_MODULES(CPPUNIT,
|
||||||
[],
|
[cppunit > 1.12.0])
|
||||||
[AC_MSG_ERROR([*** CppUnit not found! ***])])
|
|
||||||
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "1"])
|
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "1"])
|
||||||
else
|
else
|
||||||
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "0"])
|
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "0"])
|
||||||
|
@ -128,9 +127,9 @@ fi
|
||||||
# code coverage
|
# code coverage
|
||||||
AC_ARG_WITH([gcov],
|
AC_ARG_WITH([gcov],
|
||||||
[AS_HELP_STRING([--with-gcov], [build for code coverage testing])],
|
[AS_HELP_STRING([--with-gcov], [build for code coverage testing])],
|
||||||
[with_gcov=yes],
|
[],
|
||||||
[with_gcov=no])
|
[with_gcov=no])
|
||||||
if test "x$with_gcov" = "xyes"
|
if test "x$with_gcov" != "xno"
|
||||||
then
|
then
|
||||||
AC_CHECK_LIB([gcov],
|
AC_CHECK_LIB([gcov],
|
||||||
[main],
|
[main],
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
Title bar actions on mouse clicks
|
||||||
|
=================================
|
||||||
|
|
||||||
|
The FINAL CUT title bar of dialog windows has different behaviors on mouse clicks.
|
||||||
|
|
||||||
|
|
||||||
|
Clicking on the title bar
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
* A left-click activates and raises the window. After that, you can drag the window with the mouse.
|
||||||
|
* A middle-click activates and lower the window.
|
||||||
|
* A right-click activates the window and keeps its current position in the window stack.
|
||||||
|
* A double-click maximizes or restores the window size for a resizable dialog.
|
||||||
|
|
||||||
|
|
||||||
|
Clicking the title bar buttons
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
* Single-clicking on the title bar menu button opens the title bar menu.
|
||||||
|
* Double-clicking on the title bar menu button closes the dialog.
|
||||||
|
* Single-clicking on the zoom button maximizes the window size.
|
||||||
|
* Single-clicking on the unzoom button restores the window size.
|
||||||
|
|
||||||
|
|
||||||
|
Dialog resize corner
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
If you click and drag the left mouse button in the lower right corner of the window, you can change the size of a resizable dialog.
|
||||||
|
|
|
@ -0,0 +1,330 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="43.074867"
|
||||||
|
viewBox="0 0 509.50272 43.074862"
|
||||||
|
width="509.50272"
|
||||||
|
version="1.1"
|
||||||
|
id="user-theme-own-palette"
|
||||||
|
sodipodi:docname="user-theme-own-palette.svg"
|
||||||
|
inkscape:version="0.92.1 r15371">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="1984"
|
||||||
|
id="namedview21"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="8.3138663"
|
||||||
|
inkscape:cx="31.395854"
|
||||||
|
inkscape:cy="8.1120765"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="55"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="user-theme-own-palette"
|
||||||
|
inkscape:snap-object-midpoints="true"
|
||||||
|
inkscape:snap-center="true"
|
||||||
|
inkscape:snap-bbox="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs53" />
|
||||||
|
<rect
|
||||||
|
id="Black"
|
||||||
|
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="0.25" />
|
||||||
|
<rect
|
||||||
|
id="Blue"
|
||||||
|
style="fill:#23212c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="32.380764" />
|
||||||
|
<rect
|
||||||
|
id="Green"
|
||||||
|
style="fill:#26937c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="64.511536" />
|
||||||
|
<rect
|
||||||
|
id="Cyan"
|
||||||
|
style="fill:#cfb3a8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="96.642288" />
|
||||||
|
<rect
|
||||||
|
id="Red"
|
||||||
|
style="fill:#ba1a1a;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="128.77304" />
|
||||||
|
<rect
|
||||||
|
id="Magenta"
|
||||||
|
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="160.90382" />
|
||||||
|
<rect
|
||||||
|
id="Brown"
|
||||||
|
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="193.03458" />
|
||||||
|
<rect
|
||||||
|
id="LightGray"
|
||||||
|
style="fill:#fffbe4;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="225.16534" />
|
||||||
|
<rect
|
||||||
|
id="DarkGray"
|
||||||
|
style="fill:#3a3637;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="257.29608" />
|
||||||
|
<rect
|
||||||
|
id="LightBlue"
|
||||||
|
style="fill:#a5a5b1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="289.42688" />
|
||||||
|
<rect
|
||||||
|
id="LightGreen"
|
||||||
|
style="fill:#5eeb5c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="321.55765" />
|
||||||
|
<rect
|
||||||
|
id="LightCyan"
|
||||||
|
style="fill:#62bff8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="353.68842" />
|
||||||
|
<rect
|
||||||
|
id="LightRed"
|
||||||
|
style="fill:#ee4444;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="385.81915" />
|
||||||
|
<rect
|
||||||
|
id="LightMagenta"
|
||||||
|
style="fill:#e9adff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="417.94992" />
|
||||||
|
<rect
|
||||||
|
id="Yellow"
|
||||||
|
style="fill:#f8efa6;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="450.08069" />
|
||||||
|
<rect
|
||||||
|
id="White"
|
||||||
|
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="482.21146" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538"
|
||||||
|
id="0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4501"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538">0</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036"
|
||||||
|
id="1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4633"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036">1</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036"
|
||||||
|
id="2"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4635"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036">2</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538"
|
||||||
|
id="3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4637"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538">3</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036"
|
||||||
|
id="4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4639"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036">4</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824"
|
||||||
|
id="5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4641"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824">5</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538"
|
||||||
|
id="6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4643"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538">6</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318"
|
||||||
|
id="7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4645"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318">7</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318"
|
||||||
|
id="8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4647"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318">8</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318"
|
||||||
|
id="9"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4649"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318">9</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538"
|
||||||
|
id="10"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4651"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538">10</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036"
|
||||||
|
id="11"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4653"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036">11</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036"
|
||||||
|
id="12"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4663"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036">12</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538"
|
||||||
|
id="13"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4665"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538">13</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036"
|
||||||
|
id="14"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4667"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036">14</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538"
|
||||||
|
id="15"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4669"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538">15</tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,330 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="43.074867"
|
||||||
|
viewBox="0 0 509.50272 43.074862"
|
||||||
|
width="509.50272"
|
||||||
|
version="1.1"
|
||||||
|
id="user-theme-own-palette"
|
||||||
|
sodipodi:docname="user-theme-own-palette.svg"
|
||||||
|
inkscape:version="0.92.1 r15371">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="1984"
|
||||||
|
id="namedview21"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="8.3138663"
|
||||||
|
inkscape:cx="31.395854"
|
||||||
|
inkscape:cy="8.1120765"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="55"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="user-theme-own-palette"
|
||||||
|
inkscape:snap-object-midpoints="true"
|
||||||
|
inkscape:snap-center="true"
|
||||||
|
inkscape:snap-bbox="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs53" />
|
||||||
|
<rect
|
||||||
|
id="Black"
|
||||||
|
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="0.25" />
|
||||||
|
<rect
|
||||||
|
id="Blue"
|
||||||
|
style="fill:#4158b3;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="32.380764" />
|
||||||
|
<rect
|
||||||
|
id="Green"
|
||||||
|
style="fill:#187818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="64.511536" />
|
||||||
|
<rect
|
||||||
|
id="Cyan"
|
||||||
|
style="fill:#4e6672;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="96.642288" />
|
||||||
|
<rect
|
||||||
|
id="Red"
|
||||||
|
style="fill:#a54040;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="128.77304" />
|
||||||
|
<rect
|
||||||
|
id="Magenta"
|
||||||
|
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="160.90382" />
|
||||||
|
<rect
|
||||||
|
id="Brown"
|
||||||
|
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="193.03458" />
|
||||||
|
<rect
|
||||||
|
id="LightGray"
|
||||||
|
style="fill:#dcdcdc;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="225.16534" />
|
||||||
|
<rect
|
||||||
|
id="DarkGray"
|
||||||
|
style="fill:#273339;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="257.29608" />
|
||||||
|
<rect
|
||||||
|
id="LightBlue"
|
||||||
|
style="fill:#b0b0b8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="289.42688" />
|
||||||
|
<rect
|
||||||
|
id="LightGreen"
|
||||||
|
style="fill:#5eeb5c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="321.55765" />
|
||||||
|
<rect
|
||||||
|
id="LightCyan"
|
||||||
|
style="fill:#62bff8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="353.68842" />
|
||||||
|
<rect
|
||||||
|
id="LightRed"
|
||||||
|
style="fill:#dd5145;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="385.81915" />
|
||||||
|
<rect
|
||||||
|
id="LightMagenta"
|
||||||
|
style="fill:#e9adff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="417.94992" />
|
||||||
|
<rect
|
||||||
|
id="Yellow"
|
||||||
|
style="fill:#fbe867;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="450.08069" />
|
||||||
|
<rect
|
||||||
|
id="White"
|
||||||
|
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="482.21146" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538"
|
||||||
|
id="0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4501"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538">0</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036"
|
||||||
|
id="1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4633"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036">1</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036"
|
||||||
|
id="2"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4635"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036">2</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538"
|
||||||
|
id="3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4637"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538">3</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036"
|
||||||
|
id="4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4639"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036">4</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824"
|
||||||
|
id="5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4641"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824">5</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538"
|
||||||
|
id="6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4643"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538">6</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318"
|
||||||
|
id="7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4645"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318">7</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318"
|
||||||
|
id="8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4647"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318">8</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318"
|
||||||
|
id="9"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4649"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318">9</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538"
|
||||||
|
id="10"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4651"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538">10</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036"
|
||||||
|
id="11"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4653"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036">11</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036"
|
||||||
|
id="12"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4663"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036">12</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538"
|
||||||
|
id="13"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4665"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538">13</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036"
|
||||||
|
id="14"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4667"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036">14</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538"
|
||||||
|
id="15"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4669"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538">15</tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,330 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="43.074867"
|
||||||
|
viewBox="0 0 509.50272 43.074862"
|
||||||
|
width="509.50272"
|
||||||
|
version="1.1"
|
||||||
|
id="user-theme-own-palette"
|
||||||
|
sodipodi:docname="user-theme-own-palette.svg"
|
||||||
|
inkscape:version="0.92.1 r15371">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="1984"
|
||||||
|
id="namedview21"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="8.3138663"
|
||||||
|
inkscape:cx="31.395854"
|
||||||
|
inkscape:cy="8.1120765"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="55"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="user-theme-own-palette"
|
||||||
|
inkscape:snap-object-midpoints="true"
|
||||||
|
inkscape:snap-center="true"
|
||||||
|
inkscape:snap-bbox="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs53" />
|
||||||
|
<rect
|
||||||
|
id="Black"
|
||||||
|
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="0.25" />
|
||||||
|
<rect
|
||||||
|
id="Blue"
|
||||||
|
style="fill:#103b9e;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="32.380764" />
|
||||||
|
<rect
|
||||||
|
id="Green"
|
||||||
|
style="fill:#187818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="64.511536" />
|
||||||
|
<rect
|
||||||
|
id="Cyan"
|
||||||
|
style="fill:#556acf;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="96.642288" />
|
||||||
|
<rect
|
||||||
|
id="Red"
|
||||||
|
style="fill:#ba1a1a;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="128.77304" />
|
||||||
|
<rect
|
||||||
|
id="Magenta"
|
||||||
|
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="160.90382" />
|
||||||
|
<rect
|
||||||
|
id="Brown"
|
||||||
|
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="193.03458" />
|
||||||
|
<rect
|
||||||
|
id="LightGray"
|
||||||
|
style="fill:#bcbcbc;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="225.16534" />
|
||||||
|
<rect
|
||||||
|
id="DarkGray"
|
||||||
|
style="fill:#505050;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="257.29608" />
|
||||||
|
<rect
|
||||||
|
id="LightBlue"
|
||||||
|
style="fill:#80a4ec;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="289.42688" />
|
||||||
|
<rect
|
||||||
|
id="LightGreen"
|
||||||
|
style="fill:#5eeb5c;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="321.55765" />
|
||||||
|
<rect
|
||||||
|
id="LightCyan"
|
||||||
|
style="fill:#62bff8;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="353.68842" />
|
||||||
|
<rect
|
||||||
|
id="LightRed"
|
||||||
|
style="fill:#ee4444;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="385.81915" />
|
||||||
|
<rect
|
||||||
|
id="LightMagenta"
|
||||||
|
style="fill:#e9adff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="417.94992" />
|
||||||
|
<rect
|
||||||
|
id="Yellow"
|
||||||
|
style="fill:#fbe867;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="450.08069" />
|
||||||
|
<rect
|
||||||
|
id="White"
|
||||||
|
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="482.21146" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538"
|
||||||
|
id="0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4501"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538">0</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036"
|
||||||
|
id="1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4633"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036">1</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036"
|
||||||
|
id="2"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4635"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036">2</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538"
|
||||||
|
id="3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4637"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538">3</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036"
|
||||||
|
id="4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4639"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036">4</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824"
|
||||||
|
id="5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4641"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824">5</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538"
|
||||||
|
id="6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4643"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538">6</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318"
|
||||||
|
id="7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4645"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318">7</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318"
|
||||||
|
id="8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4647"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318">8</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318"
|
||||||
|
id="9"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4649"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318">9</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538"
|
||||||
|
id="10"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4651"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538">10</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036"
|
||||||
|
id="11"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4653"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036">11</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036"
|
||||||
|
id="12"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4663"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036">12</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538"
|
||||||
|
id="13"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4665"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538">13</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036"
|
||||||
|
id="14"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4667"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036">14</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538"
|
||||||
|
id="15"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4669"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538">15</tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,194 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="43.074867"
|
||||||
|
viewBox="0 0 252.45662 43.074862"
|
||||||
|
width="252.45662"
|
||||||
|
version="1.1"
|
||||||
|
id="user-theme-own-palette"
|
||||||
|
sodipodi:docname="user-theme-fc8-palette.svg"
|
||||||
|
inkscape:version="0.92.1 r15371">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="1984"
|
||||||
|
id="namedview21"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="10.738479"
|
||||||
|
inkscape:cx="126.22831"
|
||||||
|
inkscape:cy="21.537433"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="55"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="user-theme-own-palette"
|
||||||
|
inkscape:snap-object-midpoints="true"
|
||||||
|
inkscape:snap-center="true"
|
||||||
|
inkscape:snap-bbox="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs53" />
|
||||||
|
<rect
|
||||||
|
id="Black"
|
||||||
|
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="0.25" />
|
||||||
|
<rect
|
||||||
|
id="Blue"
|
||||||
|
style="fill:#103b9e;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="32.380764" />
|
||||||
|
<rect
|
||||||
|
id="Green"
|
||||||
|
style="fill:#187818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="64.511536" />
|
||||||
|
<rect
|
||||||
|
id="Cyan"
|
||||||
|
style="fill:#a0b2b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="96.642288" />
|
||||||
|
<rect
|
||||||
|
id="Red"
|
||||||
|
style="fill:#b21818;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="128.77304" />
|
||||||
|
<rect
|
||||||
|
id="Magenta"
|
||||||
|
style="fill:#b218b2;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="160.90382" />
|
||||||
|
<rect
|
||||||
|
id="Brown"
|
||||||
|
style="fill:#e8871f;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="193.03458" />
|
||||||
|
<rect
|
||||||
|
id="LightGray"
|
||||||
|
style="fill:#e0e0e0;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="225.16534" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538"
|
||||||
|
id="0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4501"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538">0</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036"
|
||||||
|
id="1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4633"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036">1</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036"
|
||||||
|
id="2"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4635"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036">2</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538"
|
||||||
|
id="3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4637"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538">3</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036"
|
||||||
|
id="4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4639"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036">4</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824"
|
||||||
|
id="5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4641"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824">5</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538"
|
||||||
|
id="6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4643"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538">6</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318"
|
||||||
|
id="7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4645"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318">7</tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
|
@ -0,0 +1,330 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="43.074867"
|
||||||
|
viewBox="0 0 509.50272 43.074862"
|
||||||
|
width="509.50272"
|
||||||
|
version="1.1"
|
||||||
|
id="user-theme-vga-palette"
|
||||||
|
sodipodi:docname="user-theme-vga-palette.svg"
|
||||||
|
inkscape:version="0.92.1 r15371">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="1984"
|
||||||
|
id="namedview21"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="8.3138663"
|
||||||
|
inkscape:cx="31.395854"
|
||||||
|
inkscape:cy="8.1120765"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="55"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="user-theme-vga-palette"
|
||||||
|
inkscape:snap-object-midpoints="true"
|
||||||
|
inkscape:snap-center="true"
|
||||||
|
inkscape:snap-bbox="true" />
|
||||||
|
<metadata
|
||||||
|
id="metadata">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs53" />
|
||||||
|
<rect
|
||||||
|
id="Black"
|
||||||
|
style="fill:#000000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="0.25" />
|
||||||
|
<rect
|
||||||
|
id="Blue"
|
||||||
|
style="fill:#0000aa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="32.380764" />
|
||||||
|
<rect
|
||||||
|
id="Green"
|
||||||
|
style="fill:#00aa00;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="64.511536" />
|
||||||
|
<rect
|
||||||
|
id="Cyan"
|
||||||
|
style="fill:#00aaaa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="96.642288" />
|
||||||
|
<rect
|
||||||
|
id="Red"
|
||||||
|
style="fill:#aa0000;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="128.77304" />
|
||||||
|
<rect
|
||||||
|
id="Magenta"
|
||||||
|
style="fill:#aa00aa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="160.90382" />
|
||||||
|
<rect
|
||||||
|
id="Brown"
|
||||||
|
style="fill:#aa5500;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="193.03458" />
|
||||||
|
<rect
|
||||||
|
id="LightGray"
|
||||||
|
style="fill:#aaaaaa;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="225.16534" />
|
||||||
|
<rect
|
||||||
|
id="DarkGray"
|
||||||
|
style="fill:#555555;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="257.29608" />
|
||||||
|
<rect
|
||||||
|
id="LightBlue"
|
||||||
|
style="fill:#5555ff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="289.42688" />
|
||||||
|
<rect
|
||||||
|
id="LightGreen"
|
||||||
|
style="fill:#55ff55;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="321.55765" />
|
||||||
|
<rect
|
||||||
|
id="LightCyan"
|
||||||
|
style="fill:#55ffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="353.68842" />
|
||||||
|
<rect
|
||||||
|
id="LightRed"
|
||||||
|
style="fill:#ff5555;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="385.81915" />
|
||||||
|
<rect
|
||||||
|
id="LightMagenta"
|
||||||
|
style="fill:#ff55ff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="417.94992" />
|
||||||
|
<rect
|
||||||
|
id="Yellow"
|
||||||
|
style="fill:#ffff55;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="450.08069" />
|
||||||
|
<rect
|
||||||
|
id="White"
|
||||||
|
style="fill:#ffffff;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
height="27.725"
|
||||||
|
width="27.041273"
|
||||||
|
y="0.25"
|
||||||
|
x="482.21146" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538"
|
||||||
|
id="0"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4501"
|
||||||
|
x="13.822153"
|
||||||
|
y="42.771538">0</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036"
|
||||||
|
id="1"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4633"
|
||||||
|
x="46.455204"
|
||||||
|
y="42.852036">1</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036"
|
||||||
|
id="2"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4635"
|
||||||
|
x="78.20282"
|
||||||
|
y="42.852036">2</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538"
|
||||||
|
id="3"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4637"
|
||||||
|
x="110.20156"
|
||||||
|
y="42.771538">3</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036"
|
||||||
|
id="4"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4639"
|
||||||
|
x="142.32588"
|
||||||
|
y="42.852036">4</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824"
|
||||||
|
id="5"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4641"
|
||||||
|
x="174.3343"
|
||||||
|
y="42.687824">5</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538"
|
||||||
|
id="6"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4643"
|
||||||
|
x="206.51335"
|
||||||
|
y="42.771538">6</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318"
|
||||||
|
id="7"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4645"
|
||||||
|
x="238.70207"
|
||||||
|
y="42.768318">7</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318"
|
||||||
|
id="8"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4647"
|
||||||
|
x="270.84891"
|
||||||
|
y="42.768318">8</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318"
|
||||||
|
id="9"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4649"
|
||||||
|
x="303.04733"
|
||||||
|
y="42.768318">9</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538"
|
||||||
|
id="10"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4651"
|
||||||
|
x="334.8851"
|
||||||
|
y="42.771538">10</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036"
|
||||||
|
id="11"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4653"
|
||||||
|
x="367.76285"
|
||||||
|
y="42.852036">11</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036"
|
||||||
|
id="12"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4663"
|
||||||
|
x="399.15305"
|
||||||
|
y="42.852036">12</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538"
|
||||||
|
id="13"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4665"
|
||||||
|
x="431.2355"
|
||||||
|
y="42.771538">13</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036"
|
||||||
|
id="14"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4667"
|
||||||
|
x="463.23425"
|
||||||
|
y="42.852036">14</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-weight:bold;font-size:13.18826675px;line-height:125%;font-family:FreeSans, Arial, 'Bitstream Vera Sans', 'DejaVu Sans', 'Open Sans', sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538"
|
||||||
|
id="15"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4669"
|
||||||
|
x="495.41333"
|
||||||
|
y="42.771538">15</tspan></text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,436 @@
|
||||||
|
User Themes
|
||||||
|
===========
|
||||||
|
|
||||||
|
FINAL CUT supports color themes. That makes it possible to change the color
|
||||||
|
of all elements of a widget in the program. Also, you can adjust the color
|
||||||
|
palette to your preferences. If you want to switch back to the default
|
||||||
|
themes, you can always call the method `FApplication::setDefaultTheme()`
|
||||||
|
or `FApplication::setDarkTheme()` for the dark theme.
|
||||||
|
|
||||||
|
|
||||||
|
Widget Color Theme
|
||||||
|
------------------
|
||||||
|
|
||||||
|
FINAL CUT uses a default color scheme that the user can override in a
|
||||||
|
derived class of `FWidgetColors`. All widget colors are redefined in the
|
||||||
|
constructor by the method `setColorTheme()`.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class myWidgetColors final : public finalcut::FWidgetColors
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
myWidgetColors()
|
||||||
|
{
|
||||||
|
myWidgetColors::setColorTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
~myWidgetColors() override
|
||||||
|
{ }
|
||||||
|
|
||||||
|
const finalcut::FString getClassName() const override
|
||||||
|
{
|
||||||
|
return "myWidgetColors";
|
||||||
|
}
|
||||||
|
|
||||||
|
void myWidgetColors() override
|
||||||
|
{
|
||||||
|
... // Color definitions
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
For setting the widget colors, it is recommended to call the method
|
||||||
|
`FWidget::setColorTheme()` via the `FApplication` object to create a
|
||||||
|
new instance of the theme and assign it to the application.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
finalcut::FApplication app(argc, argv);
|
||||||
|
app.setColorTheme<myWidgetColors>();
|
||||||
|
```
|
||||||
|
|
||||||
|
In the following example, we will create the `BeeColorTheme`. For this
|
||||||
|
purpose, we will first create an include file that can be easily included
|
||||||
|
later in your application.
|
||||||
|
|
||||||
|
**File:** *widget-color-theme.h*
|
||||||
|
```cpp
|
||||||
|
#ifndef WIDGETCOLORTHEME_H
|
||||||
|
#define WIDGETCOLORTHEME_H
|
||||||
|
|
||||||
|
class BeeColorTheme final : public finalcut::FWidgetColors
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BeeColorTheme()
|
||||||
|
{
|
||||||
|
BeeColorTheme::setColorTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
~BeeColorTheme() override
|
||||||
|
{ }
|
||||||
|
|
||||||
|
const finalcut::FString getClassName() const override
|
||||||
|
{
|
||||||
|
return "BeeColorTheme";
|
||||||
|
}
|
||||||
|
|
||||||
|
void setColorTheme() override
|
||||||
|
{
|
||||||
|
term_fg = finalcut::fc::Black;
|
||||||
|
term_bg = finalcut::fc::LightBlue;
|
||||||
|
list_fg = finalcut::fc::Black;
|
||||||
|
list_bg = finalcut::fc::LightGray;
|
||||||
|
selected_list_fg = finalcut::fc::LightRed;
|
||||||
|
selected_list_bg = finalcut::fc::LightGray;
|
||||||
|
dialog_fg = finalcut::fc::Black;
|
||||||
|
dialog_resize_fg = finalcut::fc::Red;
|
||||||
|
dialog_emphasis_fg = finalcut::fc::Blue;
|
||||||
|
dialog_bg = finalcut::fc::LightGray;
|
||||||
|
error_box_fg = finalcut::fc::Black;
|
||||||
|
error_box_emphasis_fg = finalcut::fc::Red;
|
||||||
|
error_box_bg = finalcut::fc::Yellow;
|
||||||
|
tooltip_fg = finalcut::fc::Black;
|
||||||
|
tooltip_bg = finalcut::fc::Yellow;
|
||||||
|
shadow_fg = finalcut::fc::Black;
|
||||||
|
shadow_bg = finalcut::fc::LightGray;
|
||||||
|
current_element_focus_fg = finalcut::fc::White;
|
||||||
|
current_element_focus_bg = finalcut::fc::Green;
|
||||||
|
current_element_fg = finalcut::fc::LightGray;
|
||||||
|
current_element_bg = finalcut::fc::DarkGray;
|
||||||
|
current_inc_search_element_fg = finalcut::fc::Brown;
|
||||||
|
selected_current_element_focus_fg = finalcut::fc::LightRed;
|
||||||
|
selected_current_element_focus_bg = finalcut::fc::Green;
|
||||||
|
selected_current_element_fg = finalcut::fc::LightRed;
|
||||||
|
selected_current_element_bg = finalcut::fc::DarkGray;
|
||||||
|
label_fg = finalcut::fc::Black;
|
||||||
|
label_bg = finalcut::fc::LightGray;
|
||||||
|
label_inactive_fg = finalcut::fc::LightGray;
|
||||||
|
label_inactive_bg = finalcut::fc::DarkGray;
|
||||||
|
label_hotkey_fg = finalcut::fc::Red;
|
||||||
|
label_hotkey_bg = finalcut::fc::LightGray;
|
||||||
|
label_emphasis_fg = finalcut::fc::Blue;
|
||||||
|
label_ellipsis_fg = finalcut::fc::DarkGray;
|
||||||
|
inputfield_active_focus_fg = finalcut::fc::LightGray;
|
||||||
|
inputfield_active_focus_bg = finalcut::fc::Green;
|
||||||
|
inputfield_active_fg = finalcut::fc::Black;
|
||||||
|
inputfield_active_bg = finalcut::fc::Cyan ;
|
||||||
|
inputfield_inactive_fg = finalcut::fc::Black;
|
||||||
|
inputfield_inactive_bg = finalcut::fc::LightGray;
|
||||||
|
toggle_button_active_focus_fg = finalcut::fc::White;
|
||||||
|
toggle_button_active_focus_bg = finalcut::fc::Green;
|
||||||
|
toggle_button_active_fg = finalcut::fc::Black;
|
||||||
|
toggle_button_active_bg = finalcut::fc::LightGray;
|
||||||
|
toggle_button_inactive_fg = finalcut::fc::DarkGray;
|
||||||
|
toggle_button_inactive_bg = finalcut::fc::LightGray;
|
||||||
|
button_active_focus_fg = finalcut::fc::White;
|
||||||
|
button_active_focus_bg = finalcut::fc::Green;
|
||||||
|
button_active_fg = finalcut::fc::Black;
|
||||||
|
button_active_bg = finalcut::fc::Cyan;
|
||||||
|
button_inactive_fg = finalcut::fc::Cyan;
|
||||||
|
button_inactive_bg = finalcut::fc::LightGray;
|
||||||
|
button_hotkey_fg = finalcut::fc::Red;
|
||||||
|
titlebar_active_fg = finalcut::fc::White;
|
||||||
|
titlebar_active_bg = finalcut::fc::Blue;
|
||||||
|
titlebar_inactive_fg = finalcut::fc::LightGray;
|
||||||
|
titlebar_inactive_bg = finalcut::fc::DarkGray;
|
||||||
|
titlebar_button_fg = finalcut::fc::Black;
|
||||||
|
titlebar_button_bg = finalcut::fc::LightGray;
|
||||||
|
titlebar_button_focus_fg = finalcut::fc::LightGray;
|
||||||
|
titlebar_button_focus_bg = finalcut::fc::Black;
|
||||||
|
menu_active_focus_fg = finalcut::fc::White;
|
||||||
|
menu_active_focus_bg = finalcut::fc::Blue;
|
||||||
|
menu_active_fg = finalcut::fc::Black;
|
||||||
|
menu_active_bg = finalcut::fc::Yellow;
|
||||||
|
menu_inactive_fg = finalcut::fc::Cyan;
|
||||||
|
menu_inactive_bg = finalcut::fc::Yellow;
|
||||||
|
menu_hotkey_fg = finalcut::fc::Red;
|
||||||
|
menu_hotkey_bg = finalcut::fc::Yellow;
|
||||||
|
statusbar_fg = finalcut::fc::White;
|
||||||
|
statusbar_bg = finalcut::fc::DarkGray;
|
||||||
|
statusbar_hotkey_fg = finalcut::fc::LightRed;
|
||||||
|
statusbar_hotkey_bg = finalcut::fc::DarkGray;
|
||||||
|
statusbar_separator_fg = finalcut::fc::Black;
|
||||||
|
statusbar_active_fg = finalcut::fc::White;
|
||||||
|
statusbar_active_bg = finalcut::fc::Green;
|
||||||
|
statusbar_active_hotkey_fg = finalcut::fc::LightRed;
|
||||||
|
statusbar_active_hotkey_bg = finalcut::fc::Green;
|
||||||
|
scrollbar_fg = finalcut::fc::Black;
|
||||||
|
scrollbar_bg = finalcut::fc::Green;
|
||||||
|
scrollbar_button_fg = finalcut::fc::Black;
|
||||||
|
scrollbar_button_bg = finalcut::fc::Green;
|
||||||
|
scrollbar_button_inactive_fg = finalcut::fc::Cyan;
|
||||||
|
scrollbar_button_inactive_bg = finalcut::fc::LightGray;
|
||||||
|
progressbar_fg = finalcut::fc::Green;
|
||||||
|
progressbar_bg = finalcut::fc::DarkGray;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WIDGETCOLORTHEME_H
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Color Palette Theme
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
FINAL CUT has four color tables for the 16 standard colors in the terminal.
|
||||||
|
These are a redefinition of the 16 ANSI colors. You can address the colors
|
||||||
|
via indexes values from 0 to 15. They correspond to the following colors:
|
||||||
|
|
||||||
|
| Index | Color name |
|
||||||
|
|:------:|:---------------------------|
|
||||||
|
| 0 | finalcut::fc::Black |
|
||||||
|
| 1 | finalcut::fc::Blue |
|
||||||
|
| 2 | finalcut::fc::Green |
|
||||||
|
| 3 | finalcut::fc::Cyan |
|
||||||
|
| 4 | finalcut::fc::Red |
|
||||||
|
| 5 | finalcut::fc::Magenta |
|
||||||
|
| 6 | finalcut::fc::Brown |
|
||||||
|
| 7 | finalcut::fc::LightGray |
|
||||||
|
| 8 | finalcut::fc::DarkGray |
|
||||||
|
| 9 | finalcut::fc::LightBlue |
|
||||||
|
| 10 | finalcut::fc::LightGreen |
|
||||||
|
| 11 | finalcut::fc::LightCyan |
|
||||||
|
| 12 | finalcut::fc::LightRed |
|
||||||
|
| 13 | finalcut::fc::LightMagenta |
|
||||||
|
| 14 | finalcut::fc::Yellow |
|
||||||
|
| 15 | finalcut::fc::White |
|
||||||
|
|
||||||
|
You can define your color as an 8-bit value based on its red, green, and
|
||||||
|
blue components. To create a color palette, create a derived class of
|
||||||
|
`FColorPalette`. The constructor gets as argument the function to set
|
||||||
|
a palette color. This function must have the following structure:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
setPalette(finalcut::FColor index, int red, int green, int blue);
|
||||||
|
```
|
||||||
|
|
||||||
|
A possible implementation could look as follows:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class myColorPalette final : public finalcut::FColorPalette
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit myColorPalette (const FSetPalette& f)
|
||||||
|
: FColorPalette(f)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
~myColorPalette()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
const finalcut::FString getClassName() const override
|
||||||
|
{
|
||||||
|
return "myColorPalette";
|
||||||
|
}
|
||||||
|
|
||||||
|
void setColorPalette() override
|
||||||
|
{
|
||||||
|
... // Palette definitions
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetColorPalette() override
|
||||||
|
{
|
||||||
|
setVGAdefaultPalette();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
To set the colors of a palette theme, you should use the method
|
||||||
|
`FTerm::setColorPaletteTheme()`. This method creates a new instance and
|
||||||
|
saves it in the `FTerm` object.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
finalcut::FTerm::setColorPaletteTheme<myColorPalette>();
|
||||||
|
```
|
||||||
|
The standard VGA palette is part of the `FColorPalette` class. To set it,
|
||||||
|
use the method `setVGAdefaultPalette()`. You can use it to reset the color
|
||||||
|
palette of terminals that cannot reset to default values with escape
|
||||||
|
sequences.
|
||||||
|
<figure class="image">
|
||||||
|
<img src="user-theme-vga-palette.svg" alt="VGA palette">
|
||||||
|
<figcaption>Figure 1. VGA palette</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
The FINAL CUT eight-color palette `default8ColorPalette` is optimized for
|
||||||
|
the eight-color widget theme `default8ColorTheme`. It is for terminals
|
||||||
|
that cannot display more than eight colors.
|
||||||
|
<figure class="image">
|
||||||
|
<img src="user-theme-fc8-palette.svg" alt="FINAL CUT 8-color palette">
|
||||||
|
<figcaption>Figure 2. FINAL CUT 8-color palette</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
The FINAL CUT palette `default16ColorPalette` is the default 16-color
|
||||||
|
palette. It is optimized for the widget color theme `default16ColorTheme`.
|
||||||
|
<figure class="image">
|
||||||
|
<img src="user-theme-fc16-palette.svg" alt="FINAL CUT 16-color palette">
|
||||||
|
<figcaption>Figure 3. FINAL CUT 16-color palette</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
The second 16-color palette in FINAL CUT is for the dark theme. It was
|
||||||
|
adjusted for the widget color themes `default8ColorDarkTheme` and
|
||||||
|
`default16ColorDarkTheme`.
|
||||||
|
<figure class="image">
|
||||||
|
<img src="user-theme-fc16-dark-palette.svg" alt="FINAL CUT 16-color dark palette">
|
||||||
|
<figcaption>Figure 4. FINAL CUT 16-color dark palette</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
In the following example, we want to create the palette them
|
||||||
|
`BeeColorPalette`. For this purpose, we generate an include file again,
|
||||||
|
in which we implement the new palette class.
|
||||||
|
<figure class="image">
|
||||||
|
<img src="user-theme-bee-palette.svg" alt="Bee palette">
|
||||||
|
<figcaption>Figure 6. Bee palette</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
**File:** *color-palette-theme.h*
|
||||||
|
```cpp
|
||||||
|
#ifndef BEECOLORPALETTE_H
|
||||||
|
#define BEECOLORPALETTE_H
|
||||||
|
|
||||||
|
class BeeColorPalette final : public finalcut::FColorPalette
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit BeeColorPalette (const FSetPalette& f)
|
||||||
|
: FColorPalette(f)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
~BeeColorPalette()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
const finalcut::FString getClassName() const override
|
||||||
|
{
|
||||||
|
return "BeeColorPalette";
|
||||||
|
}
|
||||||
|
|
||||||
|
void setColorPalette() override
|
||||||
|
{
|
||||||
|
setPalette (finalcut::fc::Black, 0x00, 0x00, 0x00);
|
||||||
|
setPalette (finalcut::fc::Blue, 0x23, 0x21, 0x2c);
|
||||||
|
setPalette (finalcut::fc::Green, 0x26, 0x93, 0x7c);
|
||||||
|
setPalette (finalcut::fc::Cyan, 0xcf, 0xb3, 0xa8);
|
||||||
|
setPalette (finalcut::fc::Red, 0xba, 0x1a, 0x1a);
|
||||||
|
setPalette (finalcut::fc::Magenta, 0xb2, 0x18, 0xb2);
|
||||||
|
setPalette (finalcut::fc::Brown, 0xe8, 0x87, 0x1f);
|
||||||
|
setPalette (finalcut::fc::LightGray, 0xff, 0xfb, 0xe4);
|
||||||
|
setPalette (finalcut::fc::DarkGray, 0x3a, 0x36, 0x37);
|
||||||
|
setPalette (finalcut::fc::LightBlue, 0xa5, 0xa5, 0xb1);
|
||||||
|
setPalette (finalcut::fc::LightGreen, 0x5e, 0xeb, 0x5c);
|
||||||
|
setPalette (finalcut::fc::LightCyan, 0x62, 0xbf, 0xf8);
|
||||||
|
setPalette (finalcut::fc::LightRed, 0xee, 0x44, 0x44);
|
||||||
|
setPalette (finalcut::fc::LightMagenta, 0xe9, 0xad, 0xff);
|
||||||
|
setPalette (finalcut::fc::Yellow, 0xf8, 0xef, 0xa6);
|
||||||
|
setPalette (finalcut::fc::White, 0xff, 0xff, 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetColorPalette() override
|
||||||
|
{
|
||||||
|
setVGAdefaultPalette();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BEECOLORPALETTE_H
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Use of Themes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
If you include the two include files above in your application, you can use
|
||||||
|
the widget color theme and the color palette theme. In the main function of
|
||||||
|
your application, the object instances of both classes are created and set.
|
||||||
|
<figure class="image">
|
||||||
|
<img src="user-theme.png" alt="User theme example">
|
||||||
|
<figcaption>Figure 7. User theme example</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
|
||||||
|
**File:** *theme.cpp*
|
||||||
|
```cpp
|
||||||
|
#include <final/final.h>
|
||||||
|
|
||||||
|
#include "widget-color-theme.h"
|
||||||
|
#include "color-palette-theme.h"
|
||||||
|
|
||||||
|
using namespace finalcut;
|
||||||
|
|
||||||
|
class dialogWidget final : public FDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit dialogWidget (FWidget* parent = nullptr)
|
||||||
|
: FDialog{"Theming test application", parent}
|
||||||
|
{
|
||||||
|
FDialog::setGeometry (FPoint{15, 5}, FSize{50, 9});
|
||||||
|
Input.setGeometry (FPoint{2, 2}, FSize{39, 1});
|
||||||
|
Input.setLabelText("File name:");
|
||||||
|
Input.setLabelOrientation(FLineEdit::label_above);
|
||||||
|
Input.setStatusbarMessage("Enter a file name");
|
||||||
|
Browse.setGeometry (FPoint{43, 2}, FSize{4, 1});
|
||||||
|
Browse.addCallback
|
||||||
|
(
|
||||||
|
"clicked",
|
||||||
|
F_METHOD_CALLBACK (this, &dialogWidget::cb_FileBrowse)
|
||||||
|
);
|
||||||
|
Apply.setGeometry (FPoint{24, 5}, FSize{10, 1});
|
||||||
|
Apply.setStatusbarMessage("Apply settings");
|
||||||
|
Quit.setGeometry (FPoint{37, 5}, FSize{10, 1});
|
||||||
|
Quit.setStatusbarMessage("Exit the program");
|
||||||
|
Quit.addCallback
|
||||||
|
(
|
||||||
|
"clicked",
|
||||||
|
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||||
|
);
|
||||||
|
Open.addCallback
|
||||||
|
(
|
||||||
|
"clicked",
|
||||||
|
F_METHOD_CALLBACK (this, &dialogWidget::cb_FileBrowse)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void cb_FileBrowse (finalcut::FWidget*, FDataPtr)
|
||||||
|
{
|
||||||
|
auto filename = FFileDialog::fileOpenChooser(this);
|
||||||
|
|
||||||
|
if ( ! filename.isEmpty() )
|
||||||
|
{
|
||||||
|
Input.setText(filename);
|
||||||
|
Input.redraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FMenuBar Menubar{this};
|
||||||
|
FMenu File{"&File", &Menubar};
|
||||||
|
FMenuItem New{"&New", &File};
|
||||||
|
FMenuItem Open{"&Open...", &File};
|
||||||
|
FMenu Edit{"&Edit", &Menubar};
|
||||||
|
FMenuItem Undo{"&Undo", &Edit};
|
||||||
|
FMenu Help{"&Help", &Menubar};
|
||||||
|
FMenuItem About{"&About", &Help};
|
||||||
|
FStatusBar Statusbar{this};
|
||||||
|
FLineEdit Input{"input...", this};
|
||||||
|
FButton Browse{"..", this};
|
||||||
|
FButton Apply{"&Apply", this};
|
||||||
|
FButton Quit{"&Quit", this};
|
||||||
|
};
|
||||||
|
|
||||||
|
int main (int argc, char* argv[])
|
||||||
|
{
|
||||||
|
FApplication app(argc, argv);
|
||||||
|
|
||||||
|
// Set the widget color theme
|
||||||
|
app.setColorTheme<BeeColorTheme>();
|
||||||
|
|
||||||
|
// Set the color palette theme
|
||||||
|
FTerm::setColorPaletteTheme<BeeColorPalette>();
|
||||||
|
|
||||||
|
dialogWidget dialog(&app);
|
||||||
|
FWidget::setMainWidget(&dialog);
|
||||||
|
dialog.show();
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
After entering the source code in *theme.cpp* you can compile
|
||||||
|
the above program with gcc:
|
||||||
|
```cpp
|
||||||
|
g++ -O2 -lfinal -std=c++11 theme.cpp -o theme
|
||||||
|
|
||||||
|
```
|
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
|
@ -35,7 +35,7 @@ class Timer final : public finalcut::FWidget
|
||||||
// Constructor
|
// Constructor
|
||||||
explicit Timer (finalcut::FWidget* = nullptr);
|
explicit Timer (finalcut::FWidget* = nullptr);
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
// Method
|
// Method
|
||||||
void draw() override;
|
void draw() override;
|
||||||
|
|
||||||
|
|
|
@ -1,92 +0,0 @@
|
||||||
dnl
|
|
||||||
dnl AM_PATH_CPPUNIT(MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
|
|
||||||
dnl
|
|
||||||
AC_DEFUN([AM_PATH_CPPUNIT],
|
|
||||||
[
|
|
||||||
|
|
||||||
AC_ARG_WITH(cppunit-prefix,[ --with-cppunit-prefix=PFX Prefix where CppUnit is installed (optional)],
|
|
||||||
cppunit_config_prefix="$withval", cppunit_config_prefix="")
|
|
||||||
AC_ARG_WITH(cppunit-exec-prefix,[ --with-cppunit-exec-prefix=PFX Exec prefix where CppUnit is installed (optional)],
|
|
||||||
cppunit_config_exec_prefix="$withval", cppunit_config_exec_prefix="")
|
|
||||||
|
|
||||||
if test x$cppunit_config_exec_prefix != x ; then
|
|
||||||
cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix"
|
|
||||||
if test x${CPPUNIT_CONFIG+set} != xset ; then
|
|
||||||
CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if test x$cppunit_config_prefix != x ; then
|
|
||||||
cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix"
|
|
||||||
if test x${CPPUNIT_CONFIG+set} != xset ; then
|
|
||||||
CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_PATH_PROG(CPPUNIT_CONFIG, cppunit-config, no)
|
|
||||||
cppunit_version_min=$1
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(for Cppunit - version >= $cppunit_version_min)
|
|
||||||
no_cppunit=""
|
|
||||||
if test "$CPPUNIT_CONFIG" = "no" ; then
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
no_cppunit=yes
|
|
||||||
else
|
|
||||||
CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags`
|
|
||||||
CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs`
|
|
||||||
cppunit_version=`$CPPUNIT_CONFIG --version`
|
|
||||||
|
|
||||||
cppunit_major_version=`echo $cppunit_version | \
|
|
||||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
|
||||||
cppunit_minor_version=`echo $cppunit_version | \
|
|
||||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
|
||||||
cppunit_micro_version=`echo $cppunit_version | \
|
|
||||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
|
||||||
|
|
||||||
cppunit_major_min=`echo $cppunit_version_min | \
|
|
||||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
|
||||||
if test "x${cppunit_major_min}" = "x" ; then
|
|
||||||
cppunit_major_min=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cppunit_minor_min=`echo $cppunit_version_min | \
|
|
||||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
|
||||||
if test "x${cppunit_minor_min}" = "x" ; then
|
|
||||||
cppunit_minor_min=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cppunit_micro_min=`echo $cppunit_version_min | \
|
|
||||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
|
||||||
if test "x${cppunit_micro_min}" = "x" ; then
|
|
||||||
cppunit_micro_min=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
cppunit_version_proper=`expr \
|
|
||||||
$cppunit_major_version \> $cppunit_major_min \| \
|
|
||||||
$cppunit_major_version \= $cppunit_major_min \& \
|
|
||||||
$cppunit_minor_version \> $cppunit_minor_min \| \
|
|
||||||
$cppunit_major_version \= $cppunit_major_min \& \
|
|
||||||
$cppunit_minor_version \= $cppunit_minor_min \& \
|
|
||||||
$cppunit_micro_version \>= $cppunit_micro_min `
|
|
||||||
|
|
||||||
if test "$cppunit_version_proper" = "1" ; then
|
|
||||||
AC_MSG_RESULT([$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
no_cppunit=yes
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$no_cppunit" = x ; then
|
|
||||||
ifelse([$2], , :, [$2])
|
|
||||||
else
|
|
||||||
CPPUNIT_CFLAGS=""
|
|
||||||
CPPUNIT_LIBS=""
|
|
||||||
ifelse([$3], , :, [$3])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(CPPUNIT_CFLAGS)
|
|
||||||
AC_SUBST(CPPUNIT_LIBS)
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ FApplication::FApplication (const int& _argc, char* _argv[])
|
||||||
app_argv = reinterpret_cast<char**>(&empty_str);
|
app_argv = reinterpret_cast<char**>(&empty_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
init (key_timeout, dblclick_interval);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -278,14 +278,14 @@ void FApplication::setDefaultTheme()
|
||||||
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
||||||
{
|
{
|
||||||
if ( getStartOptions().color_change )
|
if ( getStartOptions().color_change )
|
||||||
FTerm::setColorPaletteTheme<default8ColorPalette>(&FTerm::setPalette);
|
FTerm::setColorPaletteTheme<default8ColorPalette>();
|
||||||
|
|
||||||
setColorTheme<default8ColorTheme>();
|
setColorTheme<default8ColorTheme>();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( getStartOptions().color_change )
|
if ( getStartOptions().color_change )
|
||||||
FTerm::setColorPaletteTheme<default16ColorPalette>(&FTerm::setPalette);
|
FTerm::setColorPaletteTheme<default16ColorPalette>();
|
||||||
|
|
||||||
setColorTheme<default16ColorTheme>();
|
setColorTheme<default16ColorTheme>();
|
||||||
}
|
}
|
||||||
|
@ -295,7 +295,7 @@ void FApplication::setDefaultTheme()
|
||||||
void FApplication::setDarkTheme()
|
void FApplication::setDarkTheme()
|
||||||
{
|
{
|
||||||
if ( getStartOptions().color_change )
|
if ( getStartOptions().color_change )
|
||||||
FTerm::setColorPaletteTheme<default16DarkColorPalette>(&FTerm::setPalette);
|
FTerm::setColorPaletteTheme<default16DarkColorPalette>();
|
||||||
|
|
||||||
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
||||||
setColorTheme<default8ColorDarkTheme>();
|
setColorTheme<default8ColorDarkTheme>();
|
||||||
|
@ -335,7 +335,7 @@ void FApplication::processExternalUserEvent()
|
||||||
|
|
||||||
// private methods of FApplication
|
// private methods of FApplication
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FApplication::init (uInt64 key_time, uInt64 dblclick_time)
|
void FApplication::init()
|
||||||
{
|
{
|
||||||
// Initialize keyboard
|
// Initialize keyboard
|
||||||
keyboard = FTerm::getFKeyboard();
|
keyboard = FTerm::getFKeyboard();
|
||||||
|
@ -352,7 +352,7 @@ void FApplication::init (uInt64 key_time, uInt64 dblclick_time)
|
||||||
keyboard->setPressCommand (key_cmd1);
|
keyboard->setPressCommand (key_cmd1);
|
||||||
keyboard->setReleaseCommand (key_cmd2);
|
keyboard->setReleaseCommand (key_cmd2);
|
||||||
keyboard->setEscPressedCommand (key_cmd3);
|
keyboard->setEscPressedCommand (key_cmd3);
|
||||||
keyboard->setKeypressTimeout (key_time);
|
keyboard->setKeypressTimeout (key_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize mouse control
|
// Initialize mouse control
|
||||||
|
@ -364,7 +364,7 @@ void FApplication::init (uInt64 key_time, uInt64 dblclick_time)
|
||||||
|
|
||||||
// Set the default double click interval
|
// Set the default double click interval
|
||||||
if ( mouse )
|
if ( mouse )
|
||||||
mouse->setDblclickInterval (dblclick_time);
|
mouse->setDblclickInterval (dblclick_interval);
|
||||||
|
|
||||||
// Initialize logging
|
// Initialize logging
|
||||||
if ( ! getStartOptions().logfile_stream.is_open() )
|
if ( ! getStartOptions().logfile_stream.is_open() )
|
||||||
|
|
|
@ -34,8 +34,7 @@ namespace finalcut
|
||||||
FBusyIndicator::FBusyIndicator (FWidget* parent)
|
FBusyIndicator::FBusyIndicator (FWidget* parent)
|
||||||
: FToolTip{parent}
|
: FToolTip{parent}
|
||||||
{
|
{
|
||||||
FToolTip::hide();
|
init();
|
||||||
createIndicatorText();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -66,6 +65,13 @@ void FBusyIndicator::stop()
|
||||||
|
|
||||||
|
|
||||||
// private methods of FBusyIndicator
|
// private methods of FBusyIndicator
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FBusyIndicator::init()
|
||||||
|
{
|
||||||
|
FToolTip::hide();
|
||||||
|
createIndicatorText();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FBusyIndicator::createIndicatorText()
|
void FBusyIndicator::createIndicatorText()
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,14 +36,14 @@ namespace finalcut
|
||||||
FCheckMenuItem::FCheckMenuItem (FWidget* parent)
|
FCheckMenuItem::FCheckMenuItem (FWidget* parent)
|
||||||
: FMenuItem{parent}
|
: FMenuItem{parent}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FCheckMenuItem::FCheckMenuItem (const FString& txt, FWidget* parent)
|
FCheckMenuItem::FCheckMenuItem (const FString& txt, FWidget* parent)
|
||||||
: FMenuItem{txt, parent}
|
: FMenuItem{txt, parent}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -53,9 +53,10 @@ FCheckMenuItem::~FCheckMenuItem() // destructor
|
||||||
|
|
||||||
// private methods of FCheckMenuItem
|
// private methods of FCheckMenuItem
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FCheckMenuItem::init (FWidget* parent)
|
void FCheckMenuItem::init()
|
||||||
{
|
{
|
||||||
setCheckable();
|
setCheckable();
|
||||||
|
FWidget* parent = getParentWidget();
|
||||||
|
|
||||||
if ( ! parent )
|
if ( ! parent )
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -53,10 +53,10 @@ void FColorPalette::setVGAdefaultPalette()
|
||||||
setPalette (fc::Black, 0x00, 0x00, 0x00);
|
setPalette (fc::Black, 0x00, 0x00, 0x00);
|
||||||
setPalette (fc::Blue, 0x00, 0x00, 0xaa);
|
setPalette (fc::Blue, 0x00, 0x00, 0xaa);
|
||||||
setPalette (fc::Green, 0x00, 0xaa, 0x00);
|
setPalette (fc::Green, 0x00, 0xaa, 0x00);
|
||||||
setPalette (fc::Cyan, 0x00, 0x55, 0xaa);
|
setPalette (fc::Cyan, 0x00, 0xaa, 0xaa);
|
||||||
setPalette (fc::Red, 0xaa, 0x00, 0x00);
|
setPalette (fc::Red, 0xaa, 0x00, 0x00);
|
||||||
setPalette (fc::Magenta, 0xaa, 0x00, 0xaa);
|
setPalette (fc::Magenta, 0xaa, 0x00, 0xaa);
|
||||||
setPalette (fc::Brown, 0xaa, 0xaa, 0x00);
|
setPalette (fc::Brown, 0xaa, 0x55, 0x00);
|
||||||
setPalette (fc::LightGray, 0xaa, 0xaa, 0xaa);
|
setPalette (fc::LightGray, 0xaa, 0xaa, 0xaa);
|
||||||
setPalette (fc::DarkGray, 0x55, 0x55, 0x55);
|
setPalette (fc::DarkGray, 0x55, 0x55, 0x55);
|
||||||
setPalette (fc::LightBlue, 0x55, 0x55, 0xff);
|
setPalette (fc::LightBlue, 0x55, 0x55, 0xff);
|
||||||
|
@ -126,7 +126,7 @@ default16ColorPalette::default16ColorPalette (const FSetPalette& f)
|
||||||
default16ColorPalette::~default16ColorPalette()
|
default16ColorPalette::~default16ColorPalette()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// public methods of default8ColorPalette
|
// public methods of default16ColorPalette
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void default16ColorPalette::setColorPalette()
|
void default16ColorPalette::setColorPalette()
|
||||||
{
|
{
|
||||||
|
@ -169,7 +169,7 @@ default16DarkColorPalette::default16DarkColorPalette (const FSetPalette& f)
|
||||||
default16DarkColorPalette::~default16DarkColorPalette()
|
default16DarkColorPalette::~default16DarkColorPalette()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// public methods of default8ColorPalette
|
// public methods of default16DarkColorPalette
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void default16DarkColorPalette::setColorPalette()
|
void default16DarkColorPalette::setColorPalette()
|
||||||
{
|
{
|
||||||
|
|
|
@ -124,7 +124,7 @@ bool FKeyboard::isKeyPressed() const
|
||||||
FD_ZERO(&ifds);
|
FD_ZERO(&ifds);
|
||||||
FD_SET(stdin_no, &ifds);
|
FD_SET(stdin_no, &ifds);
|
||||||
tv.tv_sec = 0;
|
tv.tv_sec = 0;
|
||||||
tv.tv_usec = suseconds_t(FKeyboard::read_blocking_time); // preset to 100 ms
|
tv.tv_usec = suseconds_t(read_blocking_time); // preset to 100 ms
|
||||||
const int result = select (stdin_no + 1, &ifds, nullptr, nullptr, &tv);
|
const int result = select (stdin_no + 1, &ifds, nullptr, nullptr, &tv);
|
||||||
|
|
||||||
if ( result > 0 && FD_ISSET(stdin_no, &ifds) )
|
if ( result > 0 && FD_ISSET(stdin_no, &ifds) )
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace finalcut
|
||||||
FMenu::FMenu(FWidget* parent)
|
FMenu::FMenu(FWidget* parent)
|
||||||
: FWindow{parent}
|
: FWindow{parent}
|
||||||
{
|
{
|
||||||
init(parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -55,7 +55,7 @@ FMenu::FMenu (const FString& txt, FWidget* parent)
|
||||||
: FWindow{parent}
|
: FWindow{parent}
|
||||||
, menuitem{txt, parent}
|
, menuitem{txt, parent}
|
||||||
{
|
{
|
||||||
init(parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -457,7 +457,7 @@ bool FMenu::isMouseOverMenuBar (const FPoint& termpos)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMenu::init(FWidget* parent)
|
void FMenu::init()
|
||||||
{
|
{
|
||||||
setTopPadding(1);
|
setTopPadding(1);
|
||||||
setLeftPadding(1);
|
setLeftPadding(1);
|
||||||
|
@ -469,6 +469,7 @@ void FMenu::init(FWidget* parent)
|
||||||
hide();
|
hide();
|
||||||
resetColors();
|
resetColors();
|
||||||
menuitem.setMenu(this);
|
menuitem.setMenu(this);
|
||||||
|
FWidget* parent = getParentWidget();
|
||||||
|
|
||||||
if ( parent )
|
if ( parent )
|
||||||
{
|
{
|
||||||
|
@ -1428,16 +1429,17 @@ inline void FMenu::drawAcceleratorKey (std::size_t& startpos, FKey accel_key)
|
||||||
const FString accel_name {FTerm::getKeyName(accel_key)};
|
const FString accel_name {FTerm::getKeyName(accel_key)};
|
||||||
const std::size_t c = ( has_checkable_items ) ? 1 : 0;
|
const std::size_t c = ( has_checkable_items ) ? 1 : 0;
|
||||||
const std::size_t accel_len = accel_name.getLength();
|
const std::size_t accel_len = accel_name.getLength();
|
||||||
const std::size_t len = max_item_width - (startpos + accel_len + c + 2);
|
const std::size_t plain_text_length = startpos + accel_len + c + 2;
|
||||||
|
|
||||||
|
if ( plain_text_length >= max_item_width )
|
||||||
|
return;
|
||||||
|
|
||||||
if ( len > 0 )
|
|
||||||
{
|
|
||||||
// Print filling blank spaces + accelerator key name
|
// Print filling blank spaces + accelerator key name
|
||||||
|
const std::size_t len = max_item_width - plain_text_length;
|
||||||
const FString spaces {len, L' '};
|
const FString spaces {len, L' '};
|
||||||
print (spaces + accel_name);
|
print (spaces + accel_name);
|
||||||
startpos = max_item_width - (c + 2);
|
startpos = max_item_width - (c + 2);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FMenu::drawTrailingSpaces (std::size_t startpos)
|
inline void FMenu::drawTrailingSpaces (std::size_t startpos)
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace finalcut
|
||||||
FMenuItem::FMenuItem (FWidget* parent)
|
FMenuItem::FMenuItem (FWidget* parent)
|
||||||
: FWidget{parent}
|
: FWidget{parent}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -52,7 +52,7 @@ FMenuItem::FMenuItem (const FString& txt, FWidget* parent)
|
||||||
: FWidget{parent}
|
: FWidget{parent}
|
||||||
, text{txt}
|
, text{txt}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -61,7 +61,7 @@ FMenuItem::FMenuItem (FKey k, const FString& txt, FWidget* parent)
|
||||||
, text{txt}
|
, text{txt}
|
||||||
, accel_key{k}
|
, accel_key{k}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -503,7 +503,7 @@ FMenuList* FMenuItem::getFMenuList (FWidget& widget)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMenuItem::init (FWidget* parent)
|
void FMenuItem::init()
|
||||||
{
|
{
|
||||||
text_length = text.getLength();
|
text_length = text.getLength();
|
||||||
text_width = getColumnWidth(text);
|
text_width = getColumnWidth(text);
|
||||||
|
@ -519,6 +519,7 @@ void FMenuItem::init (FWidget* parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
setGeometry (FPoint{1, 1}, FSize{text_width + 2, 1}, false);
|
setGeometry (FPoint{1, 1}, FSize{text_width + 2, 1}, false);
|
||||||
|
FWidget* parent = getParentWidget();
|
||||||
|
|
||||||
if ( ! parent )
|
if ( ! parent )
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -51,9 +51,10 @@ static const char* const button_text[] =
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FMessageBox::FMessageBox (FWidget* parent)
|
FMessageBox::FMessageBox (FWidget* parent)
|
||||||
: FDialog{parent}
|
: FDialog{parent}
|
||||||
|
, button_digit{FMessageBox::Ok, 0, 0}
|
||||||
{
|
{
|
||||||
setTitlebarText("Message for you");
|
setTitlebarText("Message for you");
|
||||||
init(FMessageBox::Ok, 0, 0);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -64,14 +65,15 @@ FMessageBox::FMessageBox (const FMessageBox& mbox)
|
||||||
, text_components{mbox.text_components}
|
, text_components{mbox.text_components}
|
||||||
, max_line_width{mbox.max_line_width}
|
, max_line_width{mbox.max_line_width}
|
||||||
, emphasis_color{mbox.emphasis_color}
|
, emphasis_color{mbox.emphasis_color}
|
||||||
|
, button_digit{mbox.button_digit[0],
|
||||||
|
mbox.button_digit[1],
|
||||||
|
mbox.button_digit[2]}
|
||||||
, num_buttons{mbox.num_buttons}
|
, num_buttons{mbox.num_buttons}
|
||||||
, text_num_lines{mbox.text_num_lines}
|
, text_num_lines{mbox.text_num_lines}
|
||||||
, center_text{mbox.center_text}
|
, center_text{mbox.center_text}
|
||||||
{
|
{
|
||||||
setTitlebarText (mbox.getTitlebarText());
|
setTitlebarText (mbox.getTitlebarText());
|
||||||
init ( mbox.button_digit[0]
|
init();
|
||||||
, mbox.button_digit[1]
|
|
||||||
, mbox.button_digit[2] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -83,9 +85,10 @@ FMessageBox::FMessageBox ( const FString& caption
|
||||||
, FWidget* parent )
|
, FWidget* parent )
|
||||||
: FDialog{parent}
|
: FDialog{parent}
|
||||||
, text{message}
|
, text{message}
|
||||||
|
, button_digit{button0, button1, button2}
|
||||||
{
|
{
|
||||||
setTitlebarText(caption);
|
setTitlebarText(caption);
|
||||||
init(button0, button1, button2);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -111,6 +114,7 @@ FMessageBox& FMessageBox::operator = (const FMessageBox& mbox)
|
||||||
if ( mbox.getParentWidget() )
|
if ( mbox.getParentWidget() )
|
||||||
mbox.getParentWidget()->addChild (this);
|
mbox.getParentWidget()->addChild (this);
|
||||||
|
|
||||||
|
setTitlebarText (mbox.getTitlebarText());
|
||||||
headline_text = mbox.headline_text;
|
headline_text = mbox.headline_text;
|
||||||
text = mbox.text;
|
text = mbox.text;
|
||||||
text_components = mbox.text_components;
|
text_components = mbox.text_components;
|
||||||
|
@ -119,11 +123,10 @@ FMessageBox& FMessageBox::operator = (const FMessageBox& mbox)
|
||||||
emphasis_color = mbox.emphasis_color;
|
emphasis_color = mbox.emphasis_color;
|
||||||
num_buttons = mbox.num_buttons;
|
num_buttons = mbox.num_buttons;
|
||||||
text_num_lines = mbox.text_num_lines;
|
text_num_lines = mbox.text_num_lines;
|
||||||
|
button_digit[0] = mbox.button_digit[0];
|
||||||
setTitlebarText (mbox.getTitlebarText());
|
button_digit[1] = mbox.button_digit[1];
|
||||||
init ( mbox.button_digit[0]
|
button_digit[2] = mbox.button_digit[2];
|
||||||
, mbox.button_digit[1]
|
init();
|
||||||
, mbox.button_digit[2] );
|
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -149,12 +152,14 @@ void FMessageBox::setText (const FString& txt)
|
||||||
{
|
{
|
||||||
text.setString(txt);
|
text.setString(txt);
|
||||||
calculateDimensions();
|
calculateDimensions();
|
||||||
|
|
||||||
|
if ( button[0] )
|
||||||
button[0]->setY (int(getHeight()) - 4, false);
|
button[0]->setY (int(getHeight()) - 4, false);
|
||||||
|
|
||||||
if ( button_digit[1] != 0 )
|
if ( button[1] && button_digit[1] != 0 )
|
||||||
button[1]->setY (int(getHeight()) - 4, false);
|
button[1]->setY (int(getHeight()) - 4, false);
|
||||||
|
|
||||||
if ( button_digit[2] != 0 )
|
if ( button[2] && button_digit[2] != 0 )
|
||||||
button[2]->setY (int(getHeight()) - 4, false);
|
button[2]->setY (int(getHeight()) - 4, false);
|
||||||
|
|
||||||
adjustButtons();
|
adjustButtons();
|
||||||
|
@ -197,30 +202,27 @@ void FMessageBox::cb_processClick (const FWidget*, FDataPtr data)
|
||||||
|
|
||||||
// private methods of FMessageBox
|
// private methods of FMessageBox
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FMessageBox::init (int button0, int button1, int button2)
|
void FMessageBox::init()
|
||||||
{
|
{
|
||||||
calculateDimensions();
|
calculateDimensions();
|
||||||
|
|
||||||
if ( (button2 && ! button1) || (button1 && ! button0) )
|
if ( (button_digit[2] && ! button_digit[1])
|
||||||
|
|| (button_digit[1] && ! button_digit[0]) )
|
||||||
{
|
{
|
||||||
button0 = button1 = button2 = 0;
|
button_digit[0] = button_digit[1] = button_digit[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( button0 == 0 )
|
if ( button_digit[0] == 0 )
|
||||||
button0 = FMessageBox::Ok;
|
button_digit[0] = FMessageBox::Ok;
|
||||||
|
|
||||||
if ( button1 == 0 && button2 == 0 )
|
if ( button_digit[1] == 0 && button_digit[2] == 0 )
|
||||||
num_buttons = 1;
|
num_buttons = 1;
|
||||||
else if ( button2 == 0 )
|
else if ( button_digit[2] == 0 )
|
||||||
num_buttons = 2;
|
num_buttons = 2;
|
||||||
else
|
else
|
||||||
num_buttons = 3;
|
num_buttons = 3;
|
||||||
|
|
||||||
button_digit[0] = button0;
|
allocation();
|
||||||
button_digit[1] = button1;
|
|
||||||
button_digit[2] = button2;
|
|
||||||
|
|
||||||
allocation (button0, button1, button2);
|
|
||||||
resizeButtons();
|
resizeButtons();
|
||||||
adjustButtons();
|
adjustButtons();
|
||||||
initCallbacks();
|
initCallbacks();
|
||||||
|
@ -228,30 +230,30 @@ void FMessageBox::init (int button0, int button1, int button2)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
inline void FMessageBox::allocation (int button0, int button1, int button2)
|
inline void FMessageBox::allocation()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
button[0] = new FButton (this);
|
button[0] = new FButton (this);
|
||||||
button[0]->setText(button_text[button0]);
|
button[0]->setText(button_text[button_digit[0]]);
|
||||||
button[0]->setPos(FPoint{3, int(getHeight()) - 4}, false);
|
button[0]->setPos(FPoint{3, int(getHeight()) - 4}, false);
|
||||||
button[0]->setWidth(1, false);
|
button[0]->setWidth(1, false);
|
||||||
button[0]->setHeight(1, false);
|
button[0]->setHeight(1, false);
|
||||||
button[0]->setFocus();
|
button[0]->setFocus();
|
||||||
|
|
||||||
if ( button1 > 0 )
|
if ( button_digit[1] > 0 )
|
||||||
{
|
{
|
||||||
button[1] = new FButton(this);
|
button[1] = new FButton(this);
|
||||||
button[1]->setText(button_text[button1]);
|
button[1]->setText(button_text[button_digit[1]]);
|
||||||
button[1]->setPos(FPoint{17, int(getHeight()) - 4}, false);
|
button[1]->setPos(FPoint{17, int(getHeight()) - 4}, false);
|
||||||
button[1]->setWidth(0, false);
|
button[1]->setWidth(0, false);
|
||||||
button[1]->setHeight(1, false);
|
button[1]->setHeight(1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( button2 > 0 )
|
if ( button_digit[2] > 0 )
|
||||||
{
|
{
|
||||||
button[2] = new FButton(this);
|
button[2] = new FButton(this);
|
||||||
button[2]->setText(button_text[button2]);
|
button[2]->setText(button_text[button_digit[2]]);
|
||||||
button[2]->setPos(FPoint{32, int(getHeight()) - 4}, false);
|
button[2]->setPos(FPoint{32, int(getHeight()) - 4}, false);
|
||||||
button[2]->setWidth(0, false);
|
button[2]->setWidth(0, false);
|
||||||
button[2]->setHeight(1, false);
|
button[2]->setHeight(1, false);
|
||||||
|
|
|
@ -1501,13 +1501,13 @@ inline void FOptiAttr::change_current_color ( const FChar* const& term
|
||||||
|
|
||||||
if ( term->fg_color != fg || frev )
|
if ( term->fg_color != fg || frev )
|
||||||
{
|
{
|
||||||
color_str = FTermcap::encodeParameter(AF, ansi_fg);
|
color_str = FTermcap::encodeParameter(AF, ansi_fg, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
append_sequence (color_str);
|
append_sequence (color_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( term->bg_color != bg || frev )
|
if ( term->bg_color != bg || frev )
|
||||||
{
|
{
|
||||||
color_str = FTermcap::encodeParameter(AB, ansi_bg);
|
color_str = FTermcap::encodeParameter(AB, ansi_bg, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
append_sequence (color_str);
|
append_sequence (color_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1515,13 +1515,13 @@ inline void FOptiAttr::change_current_color ( const FChar* const& term
|
||||||
{
|
{
|
||||||
if ( term->fg_color != fg || frev )
|
if ( term->fg_color != fg || frev )
|
||||||
{
|
{
|
||||||
color_str = FTermcap::encodeParameter(Sf, fg);
|
color_str = FTermcap::encodeParameter(Sf, fg, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
append_sequence (color_str);
|
append_sequence (color_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( term->bg_color != bg || frev )
|
if ( term->bg_color != bg || frev )
|
||||||
{
|
{
|
||||||
color_str = FTermcap::encodeParameter(Sb, bg);
|
color_str = FTermcap::encodeParameter(Sb, bg, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
append_sequence (color_str);
|
append_sequence (color_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1529,7 +1529,7 @@ inline void FOptiAttr::change_current_color ( const FChar* const& term
|
||||||
{
|
{
|
||||||
fg = vga2ansi(fg);
|
fg = vga2ansi(fg);
|
||||||
bg = vga2ansi(bg);
|
bg = vga2ansi(bg);
|
||||||
color_str = FTermcap::encodeParameter(sp, fg, bg);
|
color_str = FTermcap::encodeParameter(sp, fg, bg, 0, 0, 0, 0, 0, 0, 0);
|
||||||
append_sequence (color_str);
|
append_sequence (color_str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,7 +288,7 @@ void FOptiMove::set_column_address (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_column_address.cap = cap;
|
F_column_address.cap = cap;
|
||||||
F_column_address.duration = capDuration (temp, 1);
|
F_column_address.duration = capDuration (temp, 1);
|
||||||
F_column_address.length = capDurationToLength (F_column_address.duration);
|
F_column_address.length = capDurationToLength (F_column_address.duration);
|
||||||
|
@ -306,7 +306,7 @@ void FOptiMove::set_row_address (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_row_address.cap = cap;
|
F_row_address.cap = cap;
|
||||||
F_row_address.duration = capDuration (temp, 1);
|
F_row_address.duration = capDuration (temp, 1);
|
||||||
F_row_address.length = capDurationToLength (F_row_address.duration);
|
F_row_address.length = capDurationToLength (F_row_address.duration);
|
||||||
|
@ -324,7 +324,7 @@ void FOptiMove::set_parm_up_cursor (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_parm_up_cursor.cap = cap;
|
F_parm_up_cursor.cap = cap;
|
||||||
F_parm_up_cursor.duration = capDuration (temp, 1);
|
F_parm_up_cursor.duration = capDuration (temp, 1);
|
||||||
F_parm_up_cursor.length = capDurationToLength (F_parm_up_cursor.duration);
|
F_parm_up_cursor.length = capDurationToLength (F_parm_up_cursor.duration);
|
||||||
|
@ -342,7 +342,7 @@ void FOptiMove::set_parm_down_cursor (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_parm_down_cursor.cap = cap;
|
F_parm_down_cursor.cap = cap;
|
||||||
F_parm_down_cursor.duration = capDuration (temp, 1);
|
F_parm_down_cursor.duration = capDuration (temp, 1);
|
||||||
F_parm_down_cursor.length = capDurationToLength (F_parm_down_cursor.duration);
|
F_parm_down_cursor.length = capDurationToLength (F_parm_down_cursor.duration);
|
||||||
|
@ -360,7 +360,7 @@ void FOptiMove::set_parm_left_cursor (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_parm_left_cursor.cap = cap;
|
F_parm_left_cursor.cap = cap;
|
||||||
F_parm_left_cursor.duration = capDuration (temp, 1);
|
F_parm_left_cursor.duration = capDuration (temp, 1);
|
||||||
F_parm_left_cursor.length = capDurationToLength (F_parm_left_cursor.duration);
|
F_parm_left_cursor.length = capDurationToLength (F_parm_left_cursor.duration);
|
||||||
|
@ -378,7 +378,7 @@ void FOptiMove::set_parm_right_cursor (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_parm_right_cursor.cap = cap;
|
F_parm_right_cursor.cap = cap;
|
||||||
F_parm_right_cursor.duration = capDuration (temp, 1);
|
F_parm_right_cursor.duration = capDuration (temp, 1);
|
||||||
F_parm_right_cursor.length = capDurationToLength (F_parm_right_cursor.duration);
|
F_parm_right_cursor.length = capDurationToLength (F_parm_right_cursor.duration);
|
||||||
|
@ -396,7 +396,7 @@ void FOptiMove::set_erase_chars (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, 23);
|
const char* temp = FTermcap::encodeParameter(cap, 23, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_erase_chars.cap = cap;
|
F_erase_chars.cap = cap;
|
||||||
F_erase_chars.duration = capDuration (temp, 1);
|
F_erase_chars.duration = capDuration (temp, 1);
|
||||||
F_erase_chars.length = capDurationToLength (F_erase_chars.duration);
|
F_erase_chars.length = capDurationToLength (F_erase_chars.duration);
|
||||||
|
@ -414,7 +414,7 @@ void FOptiMove::set_repeat_char (const char cap[])
|
||||||
{
|
{
|
||||||
if ( cap && FTermcap::isInitialized() )
|
if ( cap && FTermcap::isInitialized() )
|
||||||
{
|
{
|
||||||
const char* temp = FTermcap::encodeParameter(cap, ' ', 23);
|
const char* temp = FTermcap::encodeParameter(cap, ' ', 23, 0, 0, 0, 0, 0, 0, 0);
|
||||||
F_repeat_char.cap = cap;
|
F_repeat_char.cap = cap;
|
||||||
F_repeat_char.duration = capDuration (temp, 1);
|
F_repeat_char.duration = capDuration (temp, 1);
|
||||||
F_repeat_char.length = capDurationToLength (F_repeat_char.duration);
|
F_repeat_char.length = capDurationToLength (F_repeat_char.duration);
|
||||||
|
@ -689,7 +689,7 @@ inline int FOptiMove::verticalMove (char move[], int from_y, int to_y)
|
||||||
if ( move )
|
if ( move )
|
||||||
{
|
{
|
||||||
std::strncpy ( move
|
std::strncpy ( move
|
||||||
, FTermcap::encodeParameter(F_row_address.cap, to_y)
|
, FTermcap::encodeParameter(F_row_address.cap, to_y, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE );
|
, BUF_SIZE );
|
||||||
move[BUF_SIZE - 1] = '\0';
|
move[BUF_SIZE - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -716,7 +716,7 @@ inline void FOptiMove::downMove ( char move[], int& vtime
|
||||||
if ( move )
|
if ( move )
|
||||||
{
|
{
|
||||||
std::strncpy ( move
|
std::strncpy ( move
|
||||||
, FTermcap::encodeParameter(F_parm_down_cursor.cap, num)
|
, FTermcap::encodeParameter(F_parm_down_cursor.cap, num, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE );
|
, BUF_SIZE );
|
||||||
move[BUF_SIZE - 1] = '\0';
|
move[BUF_SIZE - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -744,7 +744,7 @@ inline void FOptiMove::upMove ( char move[], int& vtime
|
||||||
if ( move )
|
if ( move )
|
||||||
{
|
{
|
||||||
std::strncpy ( move
|
std::strncpy ( move
|
||||||
, FTermcap::encodeParameter(F_parm_up_cursor.cap, num)
|
, FTermcap::encodeParameter(F_parm_up_cursor.cap, num, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE );
|
, BUF_SIZE );
|
||||||
move[BUF_SIZE - 1] = '\0';
|
move[BUF_SIZE - 1] = '\0';
|
||||||
}
|
}
|
||||||
|
@ -770,7 +770,7 @@ inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x)
|
||||||
{
|
{
|
||||||
// Move to fixed column position1
|
// Move to fixed column position1
|
||||||
std::strncat ( hmove
|
std::strncat ( hmove
|
||||||
, FTermcap::encodeParameter(F_column_address.cap, to_x)
|
, FTermcap::encodeParameter(F_column_address.cap, to_x, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE - std::strlen(hmove) - 1 );
|
, BUF_SIZE - std::strlen(hmove) - 1 );
|
||||||
hmove[BUF_SIZE - 1] = '\0';
|
hmove[BUF_SIZE - 1] = '\0';
|
||||||
htime = F_column_address.duration;
|
htime = F_column_address.duration;
|
||||||
|
@ -793,7 +793,7 @@ inline void FOptiMove::rightMove ( char hmove[], int& htime
|
||||||
if ( F_parm_right_cursor.cap && F_parm_right_cursor.duration < htime )
|
if ( F_parm_right_cursor.cap && F_parm_right_cursor.duration < htime )
|
||||||
{
|
{
|
||||||
std::strncpy ( hmove
|
std::strncpy ( hmove
|
||||||
, FTermcap::encodeParameter(F_parm_right_cursor.cap, num)
|
, FTermcap::encodeParameter(F_parm_right_cursor.cap, num, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE - 1);
|
, BUF_SIZE - 1);
|
||||||
hmove[BUF_SIZE - 1] = '\0';
|
hmove[BUF_SIZE - 1] = '\0';
|
||||||
htime = F_parm_right_cursor.duration;
|
htime = F_parm_right_cursor.duration;
|
||||||
|
@ -848,7 +848,7 @@ inline void FOptiMove::leftMove ( char hmove[], int& htime
|
||||||
if ( F_parm_left_cursor.cap && F_parm_left_cursor.duration < htime )
|
if ( F_parm_left_cursor.cap && F_parm_left_cursor.duration < htime )
|
||||||
{
|
{
|
||||||
std::strncpy ( hmove
|
std::strncpy ( hmove
|
||||||
, FTermcap::encodeParameter(F_parm_left_cursor.cap, num)
|
, FTermcap::encodeParameter(F_parm_left_cursor.cap, num, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
, BUF_SIZE - 1);
|
, BUF_SIZE - 1);
|
||||||
hmove[BUF_SIZE - 1] = '\0';
|
hmove[BUF_SIZE - 1] = '\0';
|
||||||
htime = F_parm_left_cursor.duration;
|
htime = F_parm_left_cursor.duration;
|
||||||
|
|
|
@ -38,8 +38,7 @@ namespace finalcut
|
||||||
FProgressbar::FProgressbar(FWidget* parent)
|
FProgressbar::FProgressbar(FWidget* parent)
|
||||||
: FWidget{parent}
|
: FWidget{parent}
|
||||||
{
|
{
|
||||||
unsetFocusable();
|
init();
|
||||||
setShadow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -133,6 +132,13 @@ void FProgressbar::reset()
|
||||||
|
|
||||||
|
|
||||||
// private methods of FProgressbar
|
// private methods of FProgressbar
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
void FProgressbar::init()
|
||||||
|
{
|
||||||
|
unsetFocusable();
|
||||||
|
setShadow();
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FProgressbar::draw()
|
void FProgressbar::draw()
|
||||||
{
|
{
|
||||||
|
|
|
@ -36,14 +36,14 @@ namespace finalcut
|
||||||
FRadioMenuItem::FRadioMenuItem (FWidget* parent)
|
FRadioMenuItem::FRadioMenuItem (FWidget* parent)
|
||||||
: FMenuItem{parent}
|
: FMenuItem{parent}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
FRadioMenuItem::FRadioMenuItem (const FString& txt, FWidget* parent)
|
FRadioMenuItem::FRadioMenuItem (const FString& txt, FWidget* parent)
|
||||||
: FMenuItem{txt, parent}
|
: FMenuItem{txt, parent}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -53,10 +53,11 @@ FRadioMenuItem::~FRadioMenuItem() // destructor
|
||||||
|
|
||||||
// private methods of FRadioMenuItem
|
// private methods of FRadioMenuItem
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FRadioMenuItem::init (FWidget* parent)
|
void FRadioMenuItem::init()
|
||||||
{
|
{
|
||||||
setCheckable();
|
setCheckable();
|
||||||
setRadioButton();
|
setRadioButton();
|
||||||
|
FWidget* parent = getParentWidget();
|
||||||
|
|
||||||
if ( ! parent )
|
if ( ! parent )
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace finalcut
|
||||||
FScrollView::FScrollView (FWidget* parent)
|
FScrollView::FScrollView (FWidget* parent)
|
||||||
: FWidget{parent}
|
: FWidget{parent}
|
||||||
{
|
{
|
||||||
init(parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -713,8 +713,10 @@ inline const FPoint FScrollView::getViewportCursorPos()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FScrollView::init (const FWidget* parent)
|
void FScrollView::init()
|
||||||
{
|
{
|
||||||
|
const FWidget* parent = getParentWidget();
|
||||||
|
|
||||||
assert ( parent != nullptr );
|
assert ( parent != nullptr );
|
||||||
assert ( ! parent->isInstanceOf("FScrollView") );
|
assert ( ! parent->isInstanceOf("FScrollView") );
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace finalcut
|
||||||
FStatusKey::FStatusKey(FWidget* parent)
|
FStatusKey::FStatusKey(FWidget* parent)
|
||||||
: FWidget{parent}
|
: FWidget{parent}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -47,7 +47,7 @@ FStatusKey::FStatusKey (FKey k, const FString& txt, FWidget* parent)
|
||||||
, text{txt}
|
, text{txt}
|
||||||
, key{k}
|
, key{k}
|
||||||
{
|
{
|
||||||
init (parent);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -99,9 +99,10 @@ bool FStatusKey::setMouseFocus(bool enable)
|
||||||
|
|
||||||
// private methods of FStatusKey
|
// private methods of FStatusKey
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FStatusKey::init (FWidget* parent)
|
void FStatusKey::init()
|
||||||
{
|
{
|
||||||
setGeometry (FPoint{1, 1}, FSize{1, 1});
|
setGeometry (FPoint{1, 1}, FSize{1, 1});
|
||||||
|
FWidget* parent = getParentWidget();
|
||||||
|
|
||||||
if ( parent && parent->isInstanceOf("FStatusBar") )
|
if ( parent && parent->isInstanceOf("FStatusBar") )
|
||||||
{
|
{
|
||||||
|
|
|
@ -980,13 +980,7 @@ bool FString::operator == (const FString& s) const
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FString::operator != (const FString& s) const
|
bool FString::operator != (const FString& s) const
|
||||||
{
|
{
|
||||||
if ( ! (string || s.string) )
|
return ! ( *this == s );
|
||||||
return false;
|
|
||||||
|
|
||||||
if ( bool(string) != bool(s.string) || length != s.length )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return ( std::wcscmp(string, s.string) != 0 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
|
@ -578,6 +578,12 @@ bool FTerm::isNewFont()
|
||||||
return data->isNewFont();
|
return data->isNewFont();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FTerm::isInitialized()
|
||||||
|
{
|
||||||
|
return term_initialized;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
bool FTerm::isCursorHideable()
|
bool FTerm::isCursorHideable()
|
||||||
{
|
{
|
||||||
|
@ -1021,9 +1027,9 @@ void FTerm::setPalette (FColor index, int r, int g, int b)
|
||||||
const int bb = (b * 1001) / 256;
|
const int bb = (b * 1001) / 256;
|
||||||
|
|
||||||
if ( Ic )
|
if ( Ic )
|
||||||
color_str = FTermcap::encodeParameter(Ic, index, rr, gg, bb);
|
color_str = FTermcap::encodeParameter(Ic, index, rr, gg, bb, 0, 0, 0, 0, 0);
|
||||||
else if ( Ip )
|
else if ( Ip )
|
||||||
color_str = FTermcap::encodeParameter(Ip, index, 0, 0, 0, rr, gg, bb);
|
color_str = FTermcap::encodeParameter(Ip, index, 0, 0, 0, rr, gg, bb, 0, 0);
|
||||||
|
|
||||||
if ( color_str )
|
if ( color_str )
|
||||||
{
|
{
|
||||||
|
@ -1893,6 +1899,26 @@ inline bool FTerm::hasNoFontSettingOption()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline bool FTerm::isDefaultPaletteTheme()
|
||||||
|
{
|
||||||
|
FStringList default_themes
|
||||||
|
{
|
||||||
|
"default8ColorPalette",
|
||||||
|
"default16ColorPalette",
|
||||||
|
"default16DarkColorPalette"
|
||||||
|
};
|
||||||
|
|
||||||
|
auto iter = std::find ( default_themes.begin()
|
||||||
|
, default_themes.end()
|
||||||
|
, getColorPaletteTheme()->getClassName() );
|
||||||
|
|
||||||
|
if ( iter == default_themes.end() ) // No default theme
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::redefineColorPalette()
|
void FTerm::redefineColorPalette()
|
||||||
{
|
{
|
||||||
|
@ -1904,16 +1930,23 @@ void FTerm::redefineColorPalette()
|
||||||
resetColorMap();
|
resetColorMap();
|
||||||
saveColorMap();
|
saveColorMap();
|
||||||
|
|
||||||
|
if ( getColorPaletteTheme().use_count() > 0 && ! isDefaultPaletteTheme() )
|
||||||
|
{
|
||||||
|
// A user color palette theme is in use
|
||||||
|
getColorPaletteTheme()->setColorPalette();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( getStartOptions().dark_theme )
|
if ( getStartOptions().dark_theme )
|
||||||
{
|
{
|
||||||
setColorPaletteTheme<default16DarkColorPalette>(&FTerm::setPalette);
|
setColorPaletteTheme<default16DarkColorPalette>();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( getMaxColor() >= 16 )
|
if ( getMaxColor() >= 16 )
|
||||||
setColorPaletteTheme<default16ColorPalette>(&FTerm::setPalette);
|
setColorPaletteTheme<default16ColorPalette>();
|
||||||
else // 8 colors
|
else // 8 colors
|
||||||
setColorPaletteTheme<default8ColorPalette>(&FTerm::setPalette);
|
setColorPaletteTheme<default8ColorPalette>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2468,7 +2501,7 @@ void FTerm::finish()
|
||||||
// Switch to normal escape key mode
|
// Switch to normal escape key mode
|
||||||
disableApplicationEscKey();
|
disableApplicationEscKey();
|
||||||
|
|
||||||
finishOSspecifics1();
|
finishOSspecifics();
|
||||||
|
|
||||||
if ( isKdeTerminal() )
|
if ( isKdeTerminal() )
|
||||||
setKDECursor(fc::BlockCursor);
|
setKDECursor(fc::BlockCursor);
|
||||||
|
@ -2496,7 +2529,7 @@ void FTerm::finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FTerm::finishOSspecifics1()
|
void FTerm::finishOSspecifics()
|
||||||
{
|
{
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
linux->finish();
|
linux->finish();
|
||||||
|
|
|
@ -247,9 +247,11 @@ bool hasFullWidthSupports()
|
||||||
|
|
||||||
if ( has_fullwidth_support == unknown_fullwidth_support )
|
if ( has_fullwidth_support == unknown_fullwidth_support )
|
||||||
{
|
{
|
||||||
|
if ( ! FTerm::isInitialized() )
|
||||||
|
return true; // Assume that it is a modern terminal with full-width support
|
||||||
|
|
||||||
if ( FTerm::isCygwinTerminal()
|
if ( FTerm::isCygwinTerminal()
|
||||||
|| FTerm::isTeraTerm()
|
|| FTerm::isTeraTerm()
|
||||||
|| FTerm::isRxvtTerminal()
|
|
||||||
|| FTerm::isFreeBSDTerm()
|
|| FTerm::isFreeBSDTerm()
|
||||||
|| FTerm::isNetBSDTerm()
|
|| FTerm::isNetBSDTerm()
|
||||||
|| FTerm::isOpenBSDTerm()
|
|| FTerm::isOpenBSDTerm()
|
||||||
|
|
|
@ -841,10 +841,10 @@ void FTermXTerminal::enableXTermMouse()
|
||||||
fsystem = FTerm::getFSystem();
|
fsystem = FTerm::getFSystem();
|
||||||
|
|
||||||
FTerm::putstring (CSI "?1001s" // save old highlight mouse tracking
|
FTerm::putstring (CSI "?1001s" // save old highlight mouse tracking
|
||||||
CSI "?1000h" // enable x11 mouse tracking
|
CSI "?1000;" // enable x11 mouse tracking
|
||||||
CSI "?1002h" // enable cell motion mouse tracking
|
"1002;" // enable cell motion mouse tracking
|
||||||
CSI "?1015h" // enable urxvt mouse mode
|
"1015;" // enable urxvt mouse mode
|
||||||
CSI "?1006h"); // enable SGR mouse mode
|
"1006h"); // enable SGR mouse mode
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
mouse_support = true;
|
mouse_support = true;
|
||||||
}
|
}
|
||||||
|
@ -857,10 +857,10 @@ void FTermXTerminal::disableXTermMouse()
|
||||||
if ( ! mouse_support )
|
if ( ! mouse_support )
|
||||||
return; // The mouse was already deactivated
|
return; // The mouse was already deactivated
|
||||||
|
|
||||||
FTerm::putstring (CSI "?1006l" // disable SGR mouse mode
|
FTerm::putstring (CSI "?1006;" // disable SGR mouse mode
|
||||||
CSI "?1015l" // disable urxvt mouse mode
|
"1015;" // disable urxvt mouse mode
|
||||||
CSI "?1002l" // disable cell motion mouse tracking
|
"1002;" // disable cell motion mouse tracking
|
||||||
CSI "?1000l" // disable x11 mouse tracking
|
"1000l" // disable x11 mouse tracking
|
||||||
CSI "?1001r"); // restore old highlight mouse tracking
|
CSI "?1001r"); // restore old highlight mouse tracking
|
||||||
std::fflush(stdout);
|
std::fflush(stdout);
|
||||||
mouse_support = false;
|
mouse_support = false;
|
||||||
|
|
|
@ -2502,7 +2502,7 @@ void FVTerm::printFullWidthPaddingCharacter ( uInt& x, uInt y
|
||||||
if ( le )
|
if ( le )
|
||||||
appendOutputBuffer (le);
|
appendOutputBuffer (le);
|
||||||
else if ( RI )
|
else if ( RI )
|
||||||
appendOutputBuffer (FTermcap::encodeParameter(RI, 1));
|
appendOutputBuffer (FTermcap::encodeParameter(RI, 1, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
skipPaddingCharacter (x, y, prev_char);
|
skipPaddingCharacter (x, y, prev_char);
|
||||||
|
@ -2542,7 +2542,7 @@ void FVTerm::printHalfCovertFullWidthCharacter ( uInt& x, uInt y
|
||||||
if ( le )
|
if ( le )
|
||||||
appendOutputBuffer (le);
|
appendOutputBuffer (le);
|
||||||
else if ( RI )
|
else if ( RI )
|
||||||
appendOutputBuffer (FTermcap::encodeParameter(RI, 1));
|
appendOutputBuffer (FTermcap::encodeParameter(RI, 1, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||||
|
|
||||||
if ( le || RI )
|
if ( le || RI )
|
||||||
{
|
{
|
||||||
|
@ -2614,7 +2614,7 @@ FVTerm::exit_state FVTerm::eraseCharacters ( uInt& x, uInt xmax, uInt y
|
||||||
&& (ut || normal) )
|
&& (ut || normal) )
|
||||||
{
|
{
|
||||||
appendAttributes (print_char);
|
appendAttributes (print_char);
|
||||||
appendOutputBuffer (FTermcap::encodeParameter(ec, whitespace));
|
appendOutputBuffer (FTermcap::encodeParameter(ec, whitespace, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||||
|
|
||||||
if ( x + whitespace - 1 < xmax || draw_trailing_ws )
|
if ( x + whitespace - 1 < xmax || draw_trailing_ws )
|
||||||
setTermXY (int(x + whitespace), int(y));
|
setTermXY (int(x + whitespace), int(y));
|
||||||
|
@ -2679,7 +2679,7 @@ FVTerm::exit_state FVTerm::repeatCharacter (uInt& x, uInt xmax, uInt y)
|
||||||
newFontChanges (print_char);
|
newFontChanges (print_char);
|
||||||
charsetChanges (print_char);
|
charsetChanges (print_char);
|
||||||
appendAttributes (print_char);
|
appendAttributes (print_char);
|
||||||
appendOutputBuffer (FTermcap::encodeParameter(rp, print_char->ch, repetitions));
|
appendOutputBuffer (FTermcap::encodeParameter(rp, print_char->ch, repetitions, 0, 0, 0, 0, 0, 0, 0));
|
||||||
term_pos->x_ref() += int(repetitions);
|
term_pos->x_ref() += int(repetitions);
|
||||||
x = x + repetitions - 1;
|
x = x + repetitions - 1;
|
||||||
}
|
}
|
||||||
|
@ -3062,7 +3062,7 @@ int FVTerm::appendLowerRight (FChar*& screen_char)
|
||||||
|
|
||||||
if ( IC )
|
if ( IC )
|
||||||
{
|
{
|
||||||
appendOutputBuffer (FTermcap::encodeParameter(IC, 1));
|
appendOutputBuffer (FTermcap::encodeParameter(IC, 1, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||||
appendChar (screen_char);
|
appendChar (screen_char);
|
||||||
}
|
}
|
||||||
else if ( im && ei )
|
else if ( im && ei )
|
||||||
|
|
|
@ -1257,6 +1257,12 @@ bool FWidget::isChildPrintArea() const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
bool FWidget::isDesktopInitialized() const
|
||||||
|
{
|
||||||
|
return ( root_widget ) ? root_widget->init_desktop : false;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::setStatusBar (FStatusBar* sbar)
|
void FWidget::setStatusBar (FStatusBar* sbar)
|
||||||
{
|
{
|
||||||
|
@ -1774,6 +1780,10 @@ void FWidget::initRootWidget()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize default widget colors
|
||||||
|
// (before terminal detection and root_widget is set)
|
||||||
|
initColorTheme();
|
||||||
|
|
||||||
// Root widget basic initialization
|
// Root widget basic initialization
|
||||||
root_widget = this;
|
root_widget = this;
|
||||||
show_root_widget = nullptr;
|
show_root_widget = nullptr;
|
||||||
|
@ -1783,9 +1793,6 @@ void FWidget::initRootWidget()
|
||||||
|
|
||||||
// Determine width and height of the terminal
|
// Determine width and height of the terminal
|
||||||
determineDesktopSize();
|
determineDesktopSize();
|
||||||
|
|
||||||
// Initialize default widget colors (before terminal detection)
|
|
||||||
initColorTheme();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
@ -2057,11 +2064,35 @@ void FWidget::drawChildren()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline bool FWidget::isDefaultTheme()
|
||||||
|
{
|
||||||
|
FStringList default_themes
|
||||||
|
{
|
||||||
|
"default8ColorTheme",
|
||||||
|
"default16ColorTheme",
|
||||||
|
"default8ColorDarkTheme",
|
||||||
|
"default16ColorDarkTheme"
|
||||||
|
};
|
||||||
|
|
||||||
|
auto iter = std::find ( default_themes.begin()
|
||||||
|
, default_themes.end()
|
||||||
|
, getColorTheme()->getClassName() );
|
||||||
|
|
||||||
|
if ( iter == default_themes.end() ) // No default theme
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
void FWidget::initColorTheme()
|
void FWidget::initColorTheme()
|
||||||
{
|
{
|
||||||
// Sets the default color theme
|
// Sets the default color theme
|
||||||
|
|
||||||
|
if ( getColorTheme().use_count() > 0 && ! isDefaultTheme() )
|
||||||
|
return; // A user theme is in use
|
||||||
|
|
||||||
if ( FStartOptions::getFStartOptions().dark_theme )
|
if ( FStartOptions::getFStartOptions().dark_theme )
|
||||||
{
|
{
|
||||||
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
||||||
|
@ -2069,7 +2100,7 @@ void FWidget::initColorTheme()
|
||||||
else
|
else
|
||||||
setColorTheme<default16ColorDarkTheme>();
|
setColorTheme<default16ColorDarkTheme>();
|
||||||
}
|
}
|
||||||
else
|
else // Default theme
|
||||||
{
|
{
|
||||||
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
||||||
setColorTheme<default8ColorTheme>();
|
setColorTheme<default8ColorTheme>();
|
||||||
|
|
|
@ -150,7 +150,7 @@ void drawShadow (FWidget* w)
|
||||||
|
|
||||||
if ( w->flags.trans_shadow )
|
if ( w->flags.trans_shadow )
|
||||||
drawTransparentShadow (w); // transparent shadow
|
drawTransparentShadow (w); // transparent shadow
|
||||||
else
|
else if ( w->flags.shadow )
|
||||||
drawBlockShadow (w); // non-transparent shadow
|
drawBlockShadow (w); // non-transparent shadow
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ class FApplication : public FWidget
|
||||||
typedef std::deque<EventPair> FEventQueue;
|
typedef std::deque<EventPair> FEventQueue;
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
void init (uInt64, uInt64);
|
void init();
|
||||||
static void setTerminalEncoding (const FString&);
|
static void setTerminalEncoding (const FString&);
|
||||||
static void setLogFile (const FString&);
|
static void setLogFile (const FString&);
|
||||||
static void cmd_options (const int&, char*[]);
|
static void cmd_options (const int&, char*[]);
|
||||||
|
|
|
@ -96,6 +96,7 @@ class FBusyIndicator : public FToolTip
|
||||||
static constexpr std::size_t TIMER = 200;
|
static constexpr std::size_t TIMER = 200;
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
|
void init();
|
||||||
void createIndicatorText();
|
void createIndicatorText();
|
||||||
|
|
||||||
// Event handler
|
// Event handler
|
||||||
|
|
|
@ -82,7 +82,7 @@ class FCheckMenuItem : public FMenuItem
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Methods
|
// Methods
|
||||||
void init (FWidget*);
|
void init();
|
||||||
void processToggle();
|
void processToggle();
|
||||||
void processClicked() override;
|
void processClicked() override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -172,7 +172,7 @@ class FMenu : public FWindow, public FMenuList
|
||||||
bool isMouseOverMenuBar (const FPoint&);
|
bool isMouseOverMenuBar (const FPoint&);
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
void init(FWidget*);
|
void init();
|
||||||
void initCallbacks();
|
void initCallbacks();
|
||||||
void calculateDimensions();
|
void calculateDimensions();
|
||||||
void adjustItems();
|
void adjustItems();
|
||||||
|
|
|
@ -154,7 +154,7 @@ class FMenuItem : public FWidget
|
||||||
FMenuList* getFMenuList (FWidget&);
|
FMenuList* getFMenuList (FWidget&);
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
void init (FWidget*);
|
void init();
|
||||||
void updateSuperMenuDimensions();
|
void updateSuperMenuDimensions();
|
||||||
void processEnable();
|
void processEnable();
|
||||||
void processDisable();
|
void processDisable();
|
||||||
|
|
|
@ -138,8 +138,8 @@ class FMessageBox : public FDialog
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Methods
|
// Methods
|
||||||
void init (int, int, int);
|
void init();
|
||||||
void allocation (int, int, int);
|
void allocation();
|
||||||
void deallocation();
|
void deallocation();
|
||||||
void initCallbacks();
|
void initCallbacks();
|
||||||
void calculateDimensions();
|
void calculateDimensions();
|
||||||
|
|
|
@ -93,6 +93,7 @@ class FProgressbar : public FWidget
|
||||||
static constexpr std::size_t NOT_SET = static_cast<std::size_t>(-1);
|
static constexpr std::size_t NOT_SET = static_cast<std::size_t>(-1);
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
|
void init();
|
||||||
void draw() override;
|
void draw() override;
|
||||||
void drawProgressLabel();
|
void drawProgressLabel();
|
||||||
void drawProgressBar();
|
void drawProgressBar();
|
||||||
|
|
|
@ -82,7 +82,7 @@ class FRadioMenuItem : public FMenuItem
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Methods
|
// Methods
|
||||||
void init (FWidget*);
|
void init();
|
||||||
void processToggle();
|
void processToggle();
|
||||||
void processClicked() override;
|
void processClicked() override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -160,7 +160,7 @@ class FScrollView : public FWidget
|
||||||
const FPoint getViewportCursorPos();
|
const FPoint getViewportCursorPos();
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
void init (const FWidget*);
|
void init();
|
||||||
void mapKeyFunctions();
|
void mapKeyFunctions();
|
||||||
void calculateScrollbarPos();
|
void calculateScrollbarPos();
|
||||||
template<typename Callback>
|
template<typename Callback>
|
||||||
|
|
|
@ -109,7 +109,7 @@ class FStatusKey : public FWidget
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Methods
|
// Methods
|
||||||
void init (FWidget*);
|
void init();
|
||||||
void processActivate();
|
void processActivate();
|
||||||
FStatusBar* getConnectedStatusbar() const;
|
FStatusBar* getConnectedStatusbar() const;
|
||||||
void setConnectedStatusbar (FStatusBar*);
|
void setConnectedStatusbar (FStatusBar*);
|
||||||
|
|
|
@ -241,6 +241,7 @@ class FTerm final
|
||||||
static bool isScreenTerm();
|
static bool isScreenTerm();
|
||||||
static bool isTmuxTerm();
|
static bool isTmuxTerm();
|
||||||
static bool isNewFont();
|
static bool isNewFont();
|
||||||
|
static bool isInitialized();
|
||||||
static bool isCursorHideable();
|
static bool isCursorHideable();
|
||||||
static bool hasChangedTermSize();
|
static bool hasChangedTermSize();
|
||||||
static bool hasShadowCharacter();
|
static bool hasShadowCharacter();
|
||||||
|
@ -277,7 +278,7 @@ class FTerm final
|
||||||
static void resetColorMap();
|
static void resetColorMap();
|
||||||
static void setPalette (FColor, int, int, int);
|
static void setPalette (FColor, int, int, int);
|
||||||
template<typename ClassT>
|
template<typename ClassT>
|
||||||
static void setColorPaletteTheme (const FSetPalette&);
|
static void setColorPaletteTheme (const FSetPalette& = &FTerm::setPalette);
|
||||||
static void setBeep (int, int);
|
static void setBeep (int, int);
|
||||||
static void resetBeep();
|
static void resetBeep();
|
||||||
static void beep();
|
static void beep();
|
||||||
|
@ -332,6 +333,7 @@ class FTerm final
|
||||||
static void init_tab_quirks();
|
static void init_tab_quirks();
|
||||||
static void init_captureFontAndTitle();
|
static void init_captureFontAndTitle();
|
||||||
static bool hasNoFontSettingOption();
|
static bool hasNoFontSettingOption();
|
||||||
|
static bool isDefaultPaletteTheme();
|
||||||
static void redefineColorPalette();
|
static void redefineColorPalette();
|
||||||
static void restoreColorPalette();
|
static void restoreColorPalette();
|
||||||
static void setInsertCursorStyle();
|
static void setInsertCursorStyle();
|
||||||
|
@ -355,7 +357,7 @@ class FTerm final
|
||||||
void initTermspecifics();
|
void initTermspecifics();
|
||||||
void initBaudRate();
|
void initBaudRate();
|
||||||
void finish();
|
void finish();
|
||||||
void finishOSspecifics1();
|
void finishOSspecifics();
|
||||||
void finish_encoding();
|
void finish_encoding();
|
||||||
void destroyColorPaletteTheme();
|
void destroyColorPaletteTheme();
|
||||||
static void printExitMessage();
|
static void printExitMessage();
|
||||||
|
|
|
@ -368,6 +368,7 @@ class FWidget : public FVTerm, public FObject
|
||||||
|
|
||||||
// Inquiry
|
// Inquiry
|
||||||
bool isChildPrintArea() const;
|
bool isChildPrintArea() const;
|
||||||
|
bool isDesktopInitialized() const;
|
||||||
|
|
||||||
// Mutators
|
// Mutators
|
||||||
virtual void setStatusBar (FStatusBar*);
|
virtual void setStatusBar (FStatusBar*);
|
||||||
|
@ -467,6 +468,7 @@ class FWidget : public FVTerm, public FObject
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
void drawWindows();
|
void drawWindows();
|
||||||
void drawChildren();
|
void drawChildren();
|
||||||
|
static bool isDefaultTheme();
|
||||||
static void initColorTheme();
|
static void initColorTheme();
|
||||||
void destroyColorTheme();
|
void destroyColorTheme();
|
||||||
void setStatusbarText (bool);
|
void setStatusbarText (bool);
|
||||||
|
@ -595,6 +597,7 @@ struct FWidget::FCallbackData
|
||||||
// non-member function forward declarations
|
// non-member function forward declarations
|
||||||
// implemented in fwidget_functions.cpp
|
// implemented in fwidget_functions.cpp
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
void initWidget (FWidget*);
|
||||||
void detectTermSize();
|
void detectTermSize();
|
||||||
bool isFocusNextKey (const FKey);
|
bool isFocusNextKey (const FKey);
|
||||||
bool isFocusPrevKey (const FKey);
|
bool isFocusPrevKey (const FKey);
|
||||||
|
|
|
@ -54,6 +54,7 @@ class FWidgetColors
|
||||||
virtual ~FWidgetColors();
|
virtual ~FWidgetColors();
|
||||||
|
|
||||||
// Method
|
// Method
|
||||||
|
virtual const FString getClassName() const;
|
||||||
virtual void setColorTheme() = 0;
|
virtual void setColorTheme() = 0;
|
||||||
|
|
||||||
// Data members
|
// Data members
|
||||||
|
@ -145,6 +146,11 @@ class FWidgetColors
|
||||||
FColor progressbar_bg{fc::Default};
|
FColor progressbar_bg{fc::Default};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// FWidgetColors inline functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString FWidgetColors::getClassName() const
|
||||||
|
{ return "FWidgetColors"; }
|
||||||
|
|
||||||
|
|
||||||
/* Inheritance diagram
|
/* Inheritance diagram
|
||||||
* ═══════════════════
|
* ═══════════════════
|
||||||
|
@ -173,9 +179,15 @@ class default8ColorTheme final : public FWidgetColors
|
||||||
~default8ColorTheme() override;
|
~default8ColorTheme() override;
|
||||||
|
|
||||||
// Method
|
// Method
|
||||||
|
const FString getClassName() const override;
|
||||||
void setColorTheme() override;
|
void setColorTheme() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// default8ColorTheme inline functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString default8ColorTheme::getClassName() const
|
||||||
|
{ return "default8ColorTheme"; }
|
||||||
|
|
||||||
|
|
||||||
/* Inheritance diagram
|
/* Inheritance diagram
|
||||||
* ═══════════════════
|
* ═══════════════════
|
||||||
|
@ -204,9 +216,15 @@ class default16ColorTheme final : public FWidgetColors
|
||||||
~default16ColorTheme() override;
|
~default16ColorTheme() override;
|
||||||
|
|
||||||
// Method
|
// Method
|
||||||
|
const FString getClassName() const override;
|
||||||
void setColorTheme() override;
|
void setColorTheme() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// default16ColorTheme inline functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString default16ColorTheme::getClassName() const
|
||||||
|
{ return "default16ColorTheme"; }
|
||||||
|
|
||||||
|
|
||||||
/* Inheritance diagram
|
/* Inheritance diagram
|
||||||
* ═══════════════════
|
* ═══════════════════
|
||||||
|
@ -235,9 +253,15 @@ class default8ColorDarkTheme final : public FWidgetColors
|
||||||
~default8ColorDarkTheme() override;
|
~default8ColorDarkTheme() override;
|
||||||
|
|
||||||
// Method
|
// Method
|
||||||
|
const FString getClassName() const override;
|
||||||
void setColorTheme() override;
|
void setColorTheme() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// default8ColorDarkTheme inline functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString default8ColorDarkTheme::getClassName() const
|
||||||
|
{ return "default8ColorDarkTheme"; }
|
||||||
|
|
||||||
|
|
||||||
/* Inheritance diagram
|
/* Inheritance diagram
|
||||||
* ═══════════════════
|
* ═══════════════════
|
||||||
|
@ -266,9 +290,15 @@ class default16ColorDarkTheme final : public FWidgetColors
|
||||||
~default16ColorDarkTheme() override;
|
~default16ColorDarkTheme() override;
|
||||||
|
|
||||||
// Method
|
// Method
|
||||||
|
const FString getClassName() const override;
|
||||||
void setColorTheme() override;
|
void setColorTheme() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// default16ColorDarkTheme inline functions
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
inline const FString default16ColorDarkTheme::getClassName() const
|
||||||
|
{ return "default16ColorDarkTheme"; }
|
||||||
|
|
||||||
} // namespace finalcut
|
} // namespace finalcut
|
||||||
|
|
||||||
#endif // FWIDGETCOLORS_H
|
#endif // FWIDGETCOLORS_H
|
||||||
|
|
|
@ -310,7 +310,7 @@ void FTermDetectionTest::rxvtTest()
|
||||||
CPPUNIT_ASSERT ( detect.canDisplay256Colors() );
|
CPPUNIT_ASSERT ( detect.canDisplay256Colors() );
|
||||||
CPPUNIT_ASSERT ( detect.hasTerminalDetection() );
|
CPPUNIT_ASSERT ( detect.hasTerminalDetection() );
|
||||||
CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() );
|
CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() );
|
||||||
CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "rxvt-cygwin-native") ;
|
CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "rxvt-16color") ;
|
||||||
|
|
||||||
printConEmuDebug();
|
printConEmuDebug();
|
||||||
closeConEmuStdStreams();
|
closeConEmuStdStreams();
|
||||||
|
|
Loading…
Reference in New Issue