|
@ -32,12 +32,14 @@ Makefile.in
|
|||
/missing
|
||||
/stamp-h1
|
||||
/test-driver
|
||||
src/.depend
|
||||
src/.deps/
|
||||
src/.libs/
|
||||
examples/.deps/
|
||||
examples/.libs/
|
||||
examples/calculator
|
||||
examples/dialog
|
||||
examples/busy
|
||||
examples/event-log
|
||||
examples/string-operations
|
||||
examples/background-color
|
||||
|
|
45
ChangeLog
|
@ -1,3 +1,48 @@
|
|||
2020-09-11 Markus Gans <guru.mail@muenster.de>
|
||||
* Fixes a problem with mouse input in Cygwin in non-blocking read mode
|
||||
|
||||
2020-09-08 Markus Gans <guru.mail@muenster.de>
|
||||
* Speed up the reaction time of the gpm mouse
|
||||
* FListView now correctly adjusts the size of the scrollbar,
|
||||
when expanding and collapsing by double-clicking
|
||||
|
||||
2020-08-30 Markus Gans <guru.mail@muenster.de>
|
||||
* Adding Windows Terminal detection
|
||||
|
||||
2020-08-15 Markus Gans <guru.mail@muenster.de>
|
||||
* The call of the function setNonBlockingRead() resulted in
|
||||
a high CPU load in idle mode.
|
||||
Thanks to Pavel Stehule for reporting this problem.
|
||||
|
||||
2020-08-11 Markus Gans <guru.mail@muenster.de>
|
||||
* New callback backend was implemented. Callback functions with any
|
||||
number of arguments are now possible.
|
||||
|
||||
2020-07-19 Markus Gans <guru.mail@muenster.de>
|
||||
* API: Some method name changes:
|
||||
FObject::delOwnTimer() -> FObject::delOwnTimers()
|
||||
FObject::delAllTimer() -> FObject::delAllTimers()
|
||||
FWidget::delCallbacks() -> FWidget::delAllCallbacks()
|
||||
|
||||
2020-07-08 Markus Gans <guru.mail@muenster.de>
|
||||
* New data wrapper class FData
|
||||
|
||||
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>
|
||||
* New widget FBusyIndicator to indicate background activity
|
||||
* Added example/busy to demonstrate the functionality of this widget
|
||||
|
||||
2020-06-07 Markus Gans <guru.mail@muenster.de>
|
||||
* The --log-file parameter stores log output to any file. The file
|
||||
can be viewed directly on another terminal with "tail -f".
|
||||
|
||||
2020-06-06 Markus Gans <guru.mail@muenster.de>
|
||||
* Now, the terminal is not initialized before the method show()
|
||||
is called. Or you force it explicitly via the FApplication object.
|
||||
* Simplification of FMouse::createMouseObject()
|
||||
|
||||
2020-05-30 Markus Gans <guru.mail@muenster.de>
|
||||
* With the two new methods FApplication::setDarkTheme() and
|
||||
FApplication::setDefaultTheme() you can now change the theme
|
||||
|
|
|
@ -19,3 +19,7 @@ docdir = ${datadir}/doc/${PACKAGE}
|
|||
doc_DATA = AUTHORS COPYING COPYING.LESSER ChangeLog
|
||||
|
||||
test: check
|
||||
|
||||
uninstall-hook:
|
||||
if test -d ${docdir}; then rmdir ${docdir}; fi
|
||||
|
||||
|
|
64
README.md
|
@ -1,11 +1,13 @@
|
|||
![FINAL CUT](logo/svg/finalcut-logo.svg)
|
||||
|
||||
# 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.
|
||||
|
||||
## Building and code analysis
|
||||
|
||||
| | Badge |
|
||||
|-------------------:|:------|
|
||||
| *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) |
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
> git clone git://github.com/gansm/finalcut.git
|
||||
> cd finalcut
|
||||
|
@ -28,6 +31,7 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
|
|||
```
|
||||
|
||||
## Supported platforms
|
||||
|
||||
* Linux
|
||||
* FreeBSD
|
||||
* NetBSD
|
||||
|
@ -37,6 +41,7 @@ The structure of the Qt framework was originally the inspiration for the C++ cla
|
|||
* Solaris
|
||||
|
||||
## 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.
|
||||
|
||||
## Some screenshots
|
||||
|
@ -45,46 +50,38 @@ The FFileDialog widget with incremental file name search:
|
|||
|
||||
![FFileDialog](doc/fileopen-dialog.png)
|
||||
|
||||
|
||||
The FINAL CUT FProgressbar widget:
|
||||
|
||||
![FProgressbar](doc/progress-bar.png)
|
||||
|
||||
|
||||
Scrollable text in the FTextView widget:
|
||||
|
||||
![FTextView](doc/textview.png)
|
||||
|
||||
|
||||
The Mandelbrot set example:
|
||||
|
||||
![Mandelbrot set](doc/Mandelbrot.png)
|
||||
|
||||
## newfont
|
||||
|
||||
newfont
|
||||
-------
|
||||
A [graphical text font](fonts/) for X11 and the Linux console.
|
||||
|
||||
![ui example in newfont mode](doc/newfont1.png)
|
||||
|
||||
|
||||
Newfont drive symbols:
|
||||
|
||||
![drive symbols](doc/newfont2.png)
|
||||
|
||||
|
||||
The calculator example in newfont mode:
|
||||
|
||||
![calculator](doc/calculator.png)
|
||||
|
||||
## Benchmark
|
||||
|
||||
Benchmark
|
||||
---------
|
||||
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.
|
||||
|
||||
<pre style="line-height: 1 !important;">
|
||||
|
@ -136,9 +133,7 @@ printf(...)
|
|||
▀▀▀▀▀▀▀▀▀
|
||||
</pre>
|
||||
|
||||
|
||||
Class digramm
|
||||
-------------
|
||||
## Class digramm
|
||||
|
||||
<pre style="line-height: 1 !important;">
|
||||
1┌──────────────┐
|
||||
|
@ -177,11 +172,11 @@ Class digramm
|
|||
: 1┌───────────────┐ │ ┌─────────────┐
|
||||
┌-----------┤ FMouseControl │ ├────┤ FTimerEvent │
|
||||
: └───────────────┘ │ └─────────────┘
|
||||
: 1┌─────────┐ │
|
||||
┌-----------┤ FSystem │ │
|
||||
: └─────────┘ │
|
||||
: *┌─────────┐ │
|
||||
: ┌--------┤ FString │ │ ┌──────────────┐
|
||||
: 1┌─────────┐ │ ┌──────┐ ┌─────────┐
|
||||
┌-----------┤ FSystem │ │ │ FLog │◄──┤ FLogger │
|
||||
: └─────────┘ │ └──┬───┘ └─────────┘
|
||||
: *┌─────────┐ │ :1
|
||||
: ┌--------┤ FString │ │ ┌──┴───────────┐
|
||||
: : └─────────┘ │ ┌────┤ FApplication │
|
||||
: : *┌────────┐ │ │ └──────────────┘
|
||||
: ┌--------┤ FPoint │ │ │ ┌────────┐
|
||||
|
@ -201,11 +196,11 @@ Class digramm
|
|||
│ FVTerm │◄──┐ :1 │ └──────────────┘ │ └──────────────┘
|
||||
└────────┘ │ ┌────┴────┐ │ ┌───────────────┐ │ ┌───────────┐
|
||||
├────┤ FWidget │◄───────┼────┤ FToggleButton │◄─┼──┤ FCheckBox │
|
||||
┌─────────┐ │ └─────────┘ │ └───────────────┘ │ └───────────┘
|
||||
│ FObject │◄──┘ │ ┌──────────────┐ │ ┌─────────┐
|
||||
└─────────┘ ├────┤ FProgressbar │ └──┤ FSwitch │
|
||||
│ └──────────────┘ └─────────┘
|
||||
│ ┌────────────┐
|
||||
┌─────────┐ │ └────┬────┘ │ └───────────────┘ │ └───────────┘
|
||||
│ FObject │◄──┘ :1 │ ┌──────────────┐ │ ┌─────────┐
|
||||
└─────────┘ ┌──────┴────────┐ ├────┤ FProgressbar │ └──┤ FSwitch │
|
||||
│ FWidgetColors │ │ └──────────────┘ └─────────┘
|
||||
└───────────────┘ │ ┌────────────┐
|
||||
├────┤ FScrollbar │
|
||||
│ └────────────┘
|
||||
│ ┌───────────┐
|
||||
|
@ -233,9 +228,9 @@ Class digramm
|
|||
└──┬──┬───┘ └─────────┘ │ ┌─────────────┐
|
||||
▲ ▲ └──┤ FMessageBox │
|
||||
│ │ └─────────────┘
|
||||
│ │ ┌──────────┐
|
||||
│ └──────┤ FToolTip │
|
||||
│ └──────────┘
|
||||
│ │ ┌──────────┐ ┌────────────────┐
|
||||
│ └──────┤ FToolTip │◄─┤ FBusyIndicator │
|
||||
│ └──────────┘ └────────────────┘
|
||||
└───────────────┐ ┌──────────┐
|
||||
│ ┌───┤ FMenuBar │
|
||||
┌───────────┐ └──────┤ └──────────┘
|
||||
|
@ -254,15 +249,14 @@ Class digramm
|
|||
└────────────────┘
|
||||
</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).
|
||||
|
||||
Please send bug reports to
|
||||
--------------------------
|
||||
## Please send bug reports to
|
||||
|
||||
https://github.com/gansm/finalcut/issues
|
||||
|
||||
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>
|
||||
## 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>
|
||||
|
|
23
configure.ac
|
@ -86,12 +86,12 @@ AX_CHECK_COMPILE_FLAG([[-std=c++11]],,
|
|||
# use GPM (General Purpose Mouse)
|
||||
AC_ARG_WITH([gpm],
|
||||
[AS_HELP_STRING([--without-gpm], [Disable GPM mouse support])],
|
||||
[with_gpm=no],
|
||||
[],
|
||||
[with_gpm=yes])
|
||||
if test "x$with_gpm" = "xyes"
|
||||
if test "x$with_gpm" != "xno"
|
||||
then
|
||||
AC_CHECK_LIB([gpm],
|
||||
[main],
|
||||
[Gpm_Open],
|
||||
[AC_DEFINE([HAVE_LIBGPM], 1, [Define to 1 if GPM mouse is enabled])
|
||||
LIBS="$LIBS -lgpm"])
|
||||
fi
|
||||
|
@ -99,9 +99,9 @@ fi
|
|||
# profiling
|
||||
AC_ARG_WITH([profiler],
|
||||
[AS_HELP_STRING([--with-profiler], [build extra google profiler binaries])],
|
||||
[with_profiler=yes],
|
||||
[],
|
||||
[with_profiler=no])
|
||||
if test "x$with_profiler" = "xyes"
|
||||
if test "x$with_profiler" != "xno"
|
||||
then
|
||||
AC_CHECK_LIB([profiler],
|
||||
[ProfilerFlush],
|
||||
|
@ -111,14 +111,13 @@ fi
|
|||
# unit test
|
||||
AC_ARG_WITH([unit-test],
|
||||
[AS_HELP_STRING([--with-unit-test], [build unit tests])],
|
||||
[with_unit_test=yes],
|
||||
[],
|
||||
[with_unit_test=no])
|
||||
if test "x$with_unit_test" = "xyes"
|
||||
if test "x$with_unit_test" != "xno"
|
||||
then
|
||||
AC_MSG_NOTICE(enabled cppunit test)
|
||||
AM_PATH_CPPUNIT([1.12.0],
|
||||
[],
|
||||
[AC_MSG_ERROR([*** CppUnit not found! ***])])
|
||||
PKG_CHECK_MODULES(CPPUNIT,
|
||||
[cppunit > 1.12.0])
|
||||
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "1"])
|
||||
else
|
||||
AM_CONDITIONAL(CPPUNIT_TEST, [test "1" = "0"])
|
||||
|
@ -128,9 +127,9 @@ fi
|
|||
# code coverage
|
||||
AC_ARG_WITH([gcov],
|
||||
[AS_HELP_STRING([--with-gcov], [build for code coverage testing])],
|
||||
[with_gcov=yes],
|
||||
[],
|
||||
[with_gcov=no])
|
||||
if test "x$with_gcov" = "xyes"
|
||||
if test "x$with_gcov" != "xno"
|
||||
then
|
||||
AC_CHECK_LIB([gcov],
|
||||
[main],
|
||||
|
|
|
@ -27,7 +27,7 @@ Suggests:
|
|||
, ncurses-term
|
||||
, vim-common
|
||||
Description: Shared library for the final cut widget toolkit
|
||||
The Final Cut is a class library and widget toolkit with full mouse
|
||||
FINAL CUT is a class library and widget toolkit with full mouse
|
||||
support for creating a text-based user interface. The library supports
|
||||
the programmer to develop an application for the text console. It allows
|
||||
the simultaneous handling of multiple windows on the screen.
|
||||
|
@ -50,7 +50,7 @@ Depends:
|
|||
, libtinfo-dev
|
||||
, libncurses5-dev
|
||||
Description: Developer's library for the final cut widget toolkit
|
||||
The Final Cut is a class library and widget toolkit with full mouse
|
||||
FINAL CUT is a class library and widget toolkit with full mouse
|
||||
support for creating a text-based user interface. The library supports
|
||||
the programmer to develop an application for the text console. It allows
|
||||
the simultaneous handling of multiple windows on the screen.
|
||||
|
@ -74,7 +74,7 @@ Depends:
|
|||
, libtinfo-dev
|
||||
, libncurses5-dev
|
||||
Description: Test and example programs for the final cut widget toolkit
|
||||
The Final Cut is a class library and widget toolkit with full mouse
|
||||
FINAL CUT is a class library and widget toolkit with full mouse
|
||||
support for creating a text-based user interface. The library supports
|
||||
the programmer to develop an application for the text console. It allows
|
||||
the simultaneous handling of multiple windows on the screen.
|
||||
|
|
|
@ -7,13 +7,13 @@ Copyright: 2017, Markus Gans <guru.mail@muenster.de>
|
|||
License: LGPL-3
|
||||
|
||||
License: LGPL-3
|
||||
The Final Cut is free software: you can redistribute it and/or modify
|
||||
FINAL CUT is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
The Final Cut is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
FINAL CUT is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
.
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
docdir = ${datadir}/doc/${PACKAGE}
|
||||
|
||||
EXTRA_DIST = \
|
||||
benchmark.md \
|
||||
build_openbsd.txt \
|
||||
build_solaris.txt \
|
||||
calendar-draft.png \
|
||||
|
@ -16,9 +17,21 @@ EXTRA_DIST = \
|
|||
console_ioctl-manual.sh \
|
||||
faq.md \
|
||||
fileopen-dialog.png \
|
||||
final-cut-application-structure.svg \
|
||||
first-steps.md \
|
||||
first-steps_callback-function.cpp.png \
|
||||
first-steps_callback-lambda.cpp.png \
|
||||
first-steps_callback-method.cpp.png \
|
||||
first-steps_dialog.cpp.png \
|
||||
first-steps_emit-signal.cpp.png \
|
||||
first-steps_memory.cpp.png \
|
||||
first-steps_scrollview.cpp.png \
|
||||
first-steps_size-adjustment.cpp.png \
|
||||
first-steps_timer.cpp.png \
|
||||
first-steps_user-event.cpp.png \
|
||||
framebuffer.txt \
|
||||
Mandelbrot.png \
|
||||
mouse-control.md \
|
||||
ncurses.supp \
|
||||
newfont1.png \
|
||||
newfont2.png \
|
||||
|
@ -31,13 +44,24 @@ EXTRA_DIST = \
|
|||
terminfo-manual.sh \
|
||||
textview.png \
|
||||
TODO \
|
||||
user-theme.md \
|
||||
user-theme.png \
|
||||
user-theme-bee-palette.svg \
|
||||
user-theme-fc16-dark-palette.svg \
|
||||
user-theme-fc16-palette.svg \
|
||||
user-theme-fc8-palette.svg \
|
||||
user-theme-vga-palette.svg \
|
||||
vga.txt \
|
||||
vt100_line_drawing_graphics.png \
|
||||
virtual-terminal.txt \
|
||||
widget-coordinates.svg \
|
||||
widget-geometry.svg \
|
||||
widget-lengths.svg \
|
||||
xterm.txt \
|
||||
xgraphics
|
||||
|
||||
doc_DATA = \
|
||||
benchmark.md \
|
||||
build_openbsd.txt \
|
||||
build_solaris.txt \
|
||||
calendar-draft.png \
|
||||
|
@ -49,9 +73,21 @@ doc_DATA = \
|
|||
console_ioctl-manual.sh \
|
||||
faq.md \
|
||||
fileopen-dialog.png \
|
||||
final-cut-application-structure.svg \
|
||||
first-steps.md \
|
||||
first-steps_callback-function.cpp.png \
|
||||
first-steps_callback-lambda.cpp.png \
|
||||
first-steps_callback-method.cpp.png \
|
||||
first-steps_dialog.cpp.png \
|
||||
first-steps_emit-signal.cpp.png \
|
||||
first-steps_memory.cpp.png \
|
||||
first-steps_scrollview.cpp.png \
|
||||
first-steps_size-adjustment.cpp.png \
|
||||
first-steps_timer.cpp.png \
|
||||
first-steps_user-event.cpp.png \
|
||||
framebuffer.txt \
|
||||
Mandelbrot.png \
|
||||
mouse-control.md \
|
||||
ncurses.supp \
|
||||
newfont1.png \
|
||||
newfont2.png \
|
||||
|
@ -64,8 +100,19 @@ doc_DATA = \
|
|||
terminfo-manual.sh \
|
||||
textview.png \
|
||||
TODO \
|
||||
user-theme.md \
|
||||
user-theme.png \
|
||||
user-theme-bee-palette.svg \
|
||||
user-theme-fc16-dark-palette.svg \
|
||||
user-theme-fc16-palette.svg \
|
||||
user-theme-fc8-palette.svg \
|
||||
user-theme-vga-palette.svg \
|
||||
vga.txt \
|
||||
vt100_line_drawing_graphics.png \
|
||||
virtual-terminal.txt \
|
||||
widget-coordinates.svg \
|
||||
widget-geometry.svg \
|
||||
widget-lengths.svg \
|
||||
xterm.txt \
|
||||
xgraphics
|
||||
|
||||
|
|
|
@ -37,11 +37,11 @@
|
|||
: 1┌───────────────┐ │ ┌─────────────┐
|
||||
┌-----------┤ FMouseControl │ ├────┤ FTimerEvent │
|
||||
: └───────────────┘ │ └─────────────┘
|
||||
: 1┌─────────┐ │
|
||||
┌-----------┤ FSystem │ │
|
||||
: └─────────┘ │
|
||||
: *┌─────────┐ │
|
||||
: ┌--------┤ FString │ │ ┌──────────────┐
|
||||
: 1┌─────────┐ │ ┌──────┐ ┌─────────┐
|
||||
┌-----------┤ FSystem │ │ │ FLog │◄──┤ FLogger │
|
||||
: └─────────┘ │ └──┬───┘ └─────────┘
|
||||
: *┌─────────┐ │ :1
|
||||
: ┌--------┤ FString │ │ ┌──┴───────────┐
|
||||
: : └─────────┘ │ ┌────┤ FApplication │
|
||||
: : *┌────────┐ │ │ └──────────────┘
|
||||
: ┌--------┤ FPoint │ │ │ ┌────────┐
|
||||
|
@ -61,11 +61,11 @@
|
|||
│ FVTerm │◄──┐ :1 │ └──────────────┘ │ └──────────────┘
|
||||
└────────┘ │ ┌────┴────┐ │ ┌───────────────┐ │ ┌───────────┐
|
||||
├────┤ FWidget │◄───────┼────┤ FToggleButton │◄─┼──┤ FCheckBox │
|
||||
┌─────────┐ │ └─────────┘ │ └───────────────┘ │ └───────────┘
|
||||
│ FObject │◄──┘ │ ┌──────────────┐ │ ┌─────────┐
|
||||
└─────────┘ ├────┤ FProgressbar │ └──┤ FSwitch │
|
||||
│ └──────────────┘ └─────────┘
|
||||
│ ┌────────────┐
|
||||
┌─────────┐ │ └────┬────┘ │ └───────────────┘ │ └───────────┘
|
||||
│ FObject │◄──┘ :1 │ ┌──────────────┐ │ ┌─────────┐
|
||||
└─────────┘ ┌──────┴────────┐ ├────┤ FProgressbar │ └──┤ FSwitch │
|
||||
│ FWidgetColors │ │ └──────────────┘ └─────────┘
|
||||
└───────────────┘ │ ┌────────────┐
|
||||
├────┤ FScrollbar │
|
||||
│ └────────────┘
|
||||
│ ┌───────────┐
|
||||
|
@ -93,9 +93,9 @@
|
|||
└──┬──┬───┘ └─────────┘ │ ┌─────────────┐
|
||||
▲ ▲ └──┤ FMessageBox │
|
||||
│ │ └─────────────┘
|
||||
│ │ ┌──────────┐
|
||||
│ └──────┤ FToolTip │
|
||||
│ └──────────┘
|
||||
│ │ ┌──────────┐ ┌────────────────┐
|
||||
│ └──────┤ FToolTip │◄─┤ FBusyIndicator │
|
||||
│ └──────────┘ └────────────────┘
|
||||
└───────────────┐ ┌──────────┐
|
||||
│ ┌───┤ FMenuBar │
|
||||
┌───────────┐ └──────┤ └──────────┘
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fclassname.cpp - [brief description] *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright [year] [Maintainer] *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fclassname.h - [brief description] *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright [year] [Maintainer] *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -126,4 +126,3 @@ class FClassName
|
|||
|
||||
#endif // FCLASSNAME_H
|
||||
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ Frequently Asked Questions
|
|||
What is FINAL CUT?
|
||||
------------------
|
||||
|
||||
The FINAL CUT is a [C++](https://en.wikipedia.org/wiki/C%2B%2B) class library
|
||||
FINAL CUT is a [C++](https://en.wikipedia.org/wiki/C%2B%2B) class library
|
||||
and a widget toolkit with full mouse support for creating a text-based user
|
||||
interface. It's based on the Termcap library and has its own cursor
|
||||
optimization and window management.
|
||||
|
|
|
@ -11,6 +11,9 @@ Table of Contents
|
|||
- [Memory Management](#memory-management)
|
||||
- [Event Processing](#event-processing)
|
||||
- [Event handler reimplementation](#event-handler-reimplementation)
|
||||
- [Event types](#available-event-types)
|
||||
- [Timer event](#using-a-timer-event)
|
||||
- [User event](#using-a-user-event)
|
||||
- [Signals and Callbacks](#signals-and-callbacks)
|
||||
- [Default signals](#the-final-cut-widgets-emit-the-following-default-signals)
|
||||
- [Callback function](#example-of-a-callback-function)
|
||||
|
@ -245,16 +248,16 @@ Event Processing
|
|||
----------------
|
||||
|
||||
Calling `FApplication::exec()` starts the FINAL CUT main event loop.
|
||||
While the event loop is running, the system constantly checks whether
|
||||
While the event loop is running, the system checks all the time whether
|
||||
an event has occurred and sends it to the application's currently focused
|
||||
object. The events of the terminal such as keystrokes, mouse actions or
|
||||
resizing the terminal are translated into `FEvent` objects and sent it to
|
||||
object. The events of the terminal, such as keystrokes, mouse actions, or
|
||||
terminal size changing, are translated into `FEvent` objects, and sent them to
|
||||
the active `FObject`. It is also possible to use `FApplication::sendEvent()`
|
||||
or `FApplication::queueEvent()` to send your own events to an object.
|
||||
or `FApplication::queueEvent()` to send a specific event to an object.
|
||||
|
||||
`FObject`-derived objects process incoming events by reimplementing the
|
||||
virtual method `event()`. The `FObject` itself calls only
|
||||
`onTimer()` or `onUserEvent()` and ignores all other events. The
|
||||
virtual method `event()`. The `FObject` itself can only call its own events
|
||||
`onTimer()` and `onUserEvent()` and ignores all other events. The
|
||||
`FObject`-derived class `FWidget` also reimplements the `event()` method
|
||||
to handle further events. `FWidget` calls the `FWidget::onKeyPress` method
|
||||
when you press a key, or the `FWidget::onMouseDown` method when you click
|
||||
|
@ -269,18 +272,18 @@ For example, the method `FEvent::type()` returns the type
|
|||
`fc::MouseDown_Event` when you press down a mouse button.
|
||||
|
||||
Some event types have data that cannot store in an `FEvent` object.
|
||||
For example, a click event of the mouse must store which button it
|
||||
triggered where the mouse pointer was at that time. In classes derived
|
||||
For example, a click event of the mouse must store which button is
|
||||
triggered and where the mouse pointer was at that time. In classes derived
|
||||
from `FEvent`, such as `FMouseEvent()`, we store this data.
|
||||
|
||||
Widgets get their events from the `event()` method inherited from FObject.
|
||||
The implementation of `event()` in `FWidget` forwards the most common event
|
||||
types to specific event handlers such as `FMouseEvent()`, `FKeyEvent()` or
|
||||
`FResizeEvent()`. There are many other event types. It is also possible to
|
||||
create own event types and send them to other objects.
|
||||
`FResizeEvent()`. There are many other event types. You can create own event
|
||||
types and send them to other objects and widgets.
|
||||
|
||||
|
||||
**The FINAL CUT event types:**
|
||||
### Available event types ###
|
||||
```cpp
|
||||
enum events
|
||||
{
|
||||
|
@ -312,6 +315,12 @@ enum events
|
|||
```
|
||||
|
||||
|
||||
### Using a timer event ###
|
||||
|
||||
The following example starts a periodic timer that triggers an `FTimerEvent()`
|
||||
every 100 ms. The virtual method `onTimer()` is then called each time in the
|
||||
same dialog object.
|
||||
|
||||
**File:** *timer.cpp*
|
||||
```cpp
|
||||
#include <final/final.h>
|
||||
|
@ -375,6 +384,120 @@ g++ -O2 -lfinal -std=c++11 timer.cpp -o timer
|
|||
```
|
||||
|
||||
|
||||
### Using a user event ###
|
||||
|
||||
You can use the `FUserEvent()` to create a individual event and send it to a
|
||||
specific object. If you want to create more than one user event, you can
|
||||
specify an identification number (0 in the example below) to identify the
|
||||
different events. This number can get later with `getUserId()`.
|
||||
|
||||
User events should be generated in the main event loop. For this purpose,
|
||||
the class `FApplication` provides the virtual method
|
||||
`processExternalUserEvent()`. This method can be overwritten in a derived
|
||||
class and filled with user code.
|
||||
|
||||
The following example reads the average system load and creates a user event
|
||||
when a value changes. This event sends the current values to an `FLabel`
|
||||
widget and displays them in the terminal.
|
||||
|
||||
|
||||
**File:** *user-event.cpp*
|
||||
```cpp
|
||||
#include <stdlib.h>
|
||||
#include <final/final.h>
|
||||
#define _BSD_SOURCE 1
|
||||
#define _DEFAULT_SOURCE 1
|
||||
|
||||
using LoadAvg = double[3];
|
||||
using namespace finalcut;
|
||||
|
||||
class extendedApplication : public FApplication
|
||||
{
|
||||
public:
|
||||
extendedApplication (const int& argc, char* argv[])
|
||||
: FApplication(argc, argv)
|
||||
{ }
|
||||
|
||||
private:
|
||||
void processExternalUserEvent() override
|
||||
{
|
||||
if ( getMainWidget() )
|
||||
{
|
||||
if ( getloadavg(load_avg, 3) < 0 )
|
||||
FApplication::getLog()->error("Can't get load average values");
|
||||
|
||||
if ( last_avg[0] != load_avg[0]
|
||||
|| last_avg[1] != load_avg[1]
|
||||
|| last_avg[2] != load_avg[2] )
|
||||
{
|
||||
FUserEvent user_event(fc::User_Event, 0);
|
||||
user_event.setData (FDataPtr(&load_avg));
|
||||
FApplication::sendEvent (getMainWidget(), &user_event);
|
||||
}
|
||||
|
||||
for (std::size_t i = 0; i < 3; i++)
|
||||
last_avg[i] = load_avg[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Data member
|
||||
LoadAvg load_avg{}, last_avg{};
|
||||
};
|
||||
|
||||
|
||||
class dialogWidget final : public FDialog
|
||||
{
|
||||
public:
|
||||
explicit dialogWidget (FWidget* parent = nullptr)
|
||||
: FDialog{"User event", parent}
|
||||
{
|
||||
FDialog::setGeometry (FPoint{25, 5}, FSize{40, 6});
|
||||
loadavg_label.setGeometry (FPoint{2, 2}, FSize{36, 1});
|
||||
}
|
||||
|
||||
private:
|
||||
void onUserEvent (FUserEvent* ev) override
|
||||
{
|
||||
FDataPtr dataPtr = ev->getData();
|
||||
auto& lavg = *(reinterpret_cast<LoadAvg*>(dataPtr));
|
||||
std::setlocale(LC_NUMERIC, "C");
|
||||
loadavg_label.clear();
|
||||
loadavg_label << "Load average: " << lavg[0] << ", "
|
||||
<< lavg[1] << ", "
|
||||
<< lavg[2] << " ";
|
||||
loadavg_label.redraw();
|
||||
}
|
||||
|
||||
FLabel loadavg_label{this};
|
||||
};
|
||||
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
extendedApplication app(argc, argv);
|
||||
dialogWidget dialog(&app);
|
||||
FWidget::setMainWidget(&dialog);
|
||||
dialog.show();
|
||||
return app.exec();
|
||||
}
|
||||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_user-event.cpp.png" alt="user-event.cpp">
|
||||
<figcaption>Figure 5. User event generation</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
*(Note: You can close the window with the mouse,
|
||||
<kbd>Shift</kbd>+<kbd>F10</kbd> or <kbd>Ctrl</kbd>+<kbd>^</kbd>)*
|
||||
|
||||
|
||||
After entering the source code in *user-event.cpp* you can compile
|
||||
the above program with gcc:
|
||||
```cpp
|
||||
g++ -O2 -lfinal -std=c++11 user-event.cpp -o user-event
|
||||
```
|
||||
|
||||
|
||||
Signals and Callbacks
|
||||
---------------------
|
||||
|
||||
|
@ -387,46 +510,154 @@ clicked by a keyboard or mouse, it sends the string "clicked". A signal
|
|||
handler explicitly provided by Widget, in the form of a callback function
|
||||
or a callback method, can react to such a signal.
|
||||
|
||||
A callback function is always structured as follows:
|
||||
A callback function has no return value and can have various arguments:
|
||||
|
||||
```cpp
|
||||
void cb_function (FWidget* w, FDataPtr data)
|
||||
void cb_function (FWidget* w, int* i, double* d, ...)
|
||||
{...}
|
||||
```
|
||||
|
||||
The structure of a callback method is the same:
|
||||
|
||||
```cpp
|
||||
void classname::cb_methode (FWidget* w, FDataPtr data)
|
||||
void classname::cb_methode (FWidget* w, int* i, double* d, ...)
|
||||
{...}
|
||||
```
|
||||
|
||||
We use the `addCallback()` method of the `FWidget` class to connect
|
||||
to other widget objects.
|
||||
|
||||
For calling functions and static methods:
|
||||
1. For calling functions or static methods via a pointer:
|
||||
|
||||
```cpp
|
||||
template<typename Function
|
||||
, typename FunctionPointer<Function>::type = nullptr
|
||||
, typename... Args>
|
||||
void FWidget::addCallback ( const FString& cb_signal
|
||||
, FCallback cb_handler
|
||||
, FDataPtr data )
|
||||
, Function&& cb_function
|
||||
, Args&&... args)
|
||||
{...}
|
||||
```
|
||||
|
||||
For calling a member method of a specific instance:
|
||||
2. For calling functions or static methods via a reference:
|
||||
|
||||
```cpp
|
||||
template<typename Function
|
||||
, typename FunctionReference<Function>::type = nullptr
|
||||
, typename... Args>
|
||||
void FWidget::addCallback ( const FString& cb_signal
|
||||
, FWidget* cb_instance
|
||||
, FMemberCallback cb_handler
|
||||
, FDataPtr data )
|
||||
, Function& cb_function
|
||||
, Args&&... args)
|
||||
{...}
|
||||
```
|
||||
|
||||
There are two macros `F_FUNCTION_CALLBACK` and `F_METHOD_CALLBACK` to avoid
|
||||
having to deal with necessary type conversions. With `delCallback()` you can
|
||||
remove a connection to a signal handler or a widget. Alternatively, you can
|
||||
use `delCallbacks()` to remove all existing callbacks from an object.
|
||||
3. For calling a member method of a specific instance:
|
||||
|
||||
```cpp
|
||||
template<typename Object
|
||||
, typename Function
|
||||
, typename ObjectPointer<Object>::type = nullptr
|
||||
, typename MemberFunctionPointer<Function>::type = nullptr
|
||||
, typename... Args>
|
||||
void FWidget::addCallback ( const FString& cb_signal
|
||||
, Object&& cb_instance
|
||||
, Function&& cb_member
|
||||
, Args&&... args)
|
||||
{...}
|
||||
```
|
||||
|
||||
4. For calling a std::bind call wrapper or a lambda expression:
|
||||
```cpp
|
||||
template<typename Function
|
||||
, typename ClassObject<Function>::type = nullptr
|
||||
, typename... Args>
|
||||
void FWidget::addCallback ( const FString& cb_signal
|
||||
, Function&& cb_function
|
||||
, Args&&... args)
|
||||
{...}
|
||||
```
|
||||
|
||||
5. For calling a std::bind call wrapper to a specific instance:
|
||||
|
||||
```cpp
|
||||
template<typename Object
|
||||
, typename Function
|
||||
, typename ObjectPointer<Object>::type = nullptr
|
||||
, typename ClassObject<Function>::type = nullptr
|
||||
, typename... Args>
|
||||
void FWidget::addCallback ( const FString& cb_signal
|
||||
, Object&& cb_instance
|
||||
, Function&& cb_function
|
||||
, Args&&... args)
|
||||
{...}
|
||||
```
|
||||
|
||||
6. For calling a lambda function that has been stored in a variable
|
||||
with the keyword auto:
|
||||
|
||||
```cpp
|
||||
template<typename Function
|
||||
, typename ClassObject<Function>::type = nullptr
|
||||
, typename... Args>
|
||||
void FWidget::addCallback ( const FString& cb_signal
|
||||
, Function& cb_function
|
||||
, Args&&... args)
|
||||
{...}
|
||||
```
|
||||
|
||||
With `delCallback(...)` you can remove a connection to a signal handler
|
||||
or a widget instance. Alternatively, you can use `delCallbacks()` to
|
||||
remove all existing callbacks from an object.
|
||||
|
||||
1. To delete functions or static methods callbacks via a pointer:
|
||||
|
||||
```cpp
|
||||
template<typename FunctionPtr
|
||||
, typename FunctionPointer<FunctionPtr>::type = nullptr>
|
||||
void FWidget::delCallback (FunctionPtr&& cb_func_ptr)
|
||||
{...}
|
||||
```
|
||||
|
||||
2. To delete functions or static methods callbacks via a reference:
|
||||
|
||||
```cpp
|
||||
template<typename Function
|
||||
, typename FunctionReference<Function>::type = nullptr>
|
||||
void FWidget::delCallback (Function& cb_function)
|
||||
{...}
|
||||
```
|
||||
|
||||
3. To delete all callbacks from a specific instance:
|
||||
|
||||
```cpp
|
||||
template<typename Object
|
||||
, typename ObjectPointer<Object>::type = nullptr>
|
||||
void FWidget::delCallback (Object&& cb_instance)
|
||||
{...}
|
||||
```
|
||||
|
||||
4. To delete all callbacks of a signal:
|
||||
|
||||
```cpp
|
||||
void delCallback (const FString& cb_signal)
|
||||
{...}
|
||||
```
|
||||
|
||||
5. To delete all callbacks of a signal and specific instance:
|
||||
|
||||
```cpp
|
||||
template<typename Object
|
||||
, typename ObjectPointer<Object>::type = nullptr>
|
||||
void delCallback (const FString& cb_signal, Object&& cb_instance)
|
||||
{...}
|
||||
```
|
||||
|
||||
6. To delete all callbacks from a widget:
|
||||
|
||||
```cpp
|
||||
void delCallback()
|
||||
{...}
|
||||
```
|
||||
|
||||
|
||||
### The FINAL CUT widgets emit the following default signals ###
|
||||
|
@ -486,10 +717,8 @@ use `delCallbacks()` to remove all existing callbacks from an object.
|
|||
|
||||
using namespace finalcut;
|
||||
|
||||
void cb_changeText (FWidget* w, FDataPtr data)
|
||||
void cb_changeText (const FButton& button, FLabel& label)
|
||||
{
|
||||
FButton& button = *(static_cast<FButton*>(w));
|
||||
FLabel& label = *(static_cast<FLabel*>(data));
|
||||
label.clear();
|
||||
label << "The " << button.getClassName() << " was pressed";
|
||||
label.redraw();
|
||||
|
@ -512,9 +741,10 @@ int main (int argc, char* argv[])
|
|||
// Connect the button signal "clicked" with the callback function
|
||||
button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_FUNCTION_CALLBACK (&cb_changeText),
|
||||
&label
|
||||
"clicked", // Callback signal
|
||||
&cb_changeText, // Function pointer
|
||||
std::cref(button), // First function argument
|
||||
std::ref(label) // Second function argument
|
||||
);
|
||||
|
||||
FWidget::setMainWidget(&dialog);
|
||||
|
@ -524,7 +754,7 @@ int main (int argc, char* argv[])
|
|||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_callback-function.cpp.png" alt="callback-function.cpp">
|
||||
<figcaption>Figure 5. Button with a callback function</figcaption>
|
||||
<figcaption>Figure 6. Button with a callback function</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -560,11 +790,9 @@ int main (int argc, char* argv[])
|
|||
// Connect the button signal "clicked" with the lambda expression
|
||||
button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
[] (FWidget* w, FDataPtr d)
|
||||
"clicked", // Callback signal
|
||||
[] (FButton& button, FDialog& dgl) // Lambda function
|
||||
{
|
||||
FButton& button = *(static_cast<FButton*>(w));
|
||||
|
||||
if ( button.getY() != 2 )
|
||||
{
|
||||
button.setPos (FPoint{15, 2});
|
||||
|
@ -576,9 +804,10 @@ int main (int argc, char* argv[])
|
|||
button.setText("&bottom");
|
||||
}
|
||||
|
||||
static_cast<FDialog*>(d)->redraw();
|
||||
dgl.redraw();
|
||||
},
|
||||
&dialog
|
||||
std::ref(button), // First function argument
|
||||
std::ref(dialog) // Second function argument
|
||||
);
|
||||
|
||||
FWidget::setMainWidget(&dialog);
|
||||
|
@ -588,7 +817,7 @@ int main (int argc, char* argv[])
|
|||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_callback-lambda.cpp.png" alt="callback-lambda.cpp">
|
||||
<figcaption>Figure 6. Button with lambda expression callback.</figcaption>
|
||||
<figcaption>Figure 7. Button with lambda expression callback.</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -625,9 +854,10 @@ class dialogWidget : public FDialog
|
|||
// Connect the button signal "clicked" with the callback method
|
||||
button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FApplication::cb_exitApp),
|
||||
nullptr
|
||||
"clicked", // Callback signal
|
||||
finalcut::getFApplication(), // Class instance
|
||||
&finalcut::FApplication::cb_exitApp, // Method pointer
|
||||
this // Function argument
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -646,7 +876,7 @@ int main (int argc, char* argv[])
|
|||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_callback-method.cpp.png" alt="callback-method.cpp">
|
||||
<figcaption>Figure 7. Button with a callback method</figcaption>
|
||||
<figcaption>Figure 8. Button with a callback method</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -687,45 +917,22 @@ class dialogWidget : public FDialog
|
|||
label.setAlignment (fc::alignRight);
|
||||
label.setForegroundColor (fc::Black);
|
||||
plus.setGeometry (FPoint{3, 3}, size);
|
||||
minus.setGeometry (FPoint{13, 3}, size);
|
||||
minus.setGeometry (FPoint{3, 3} + FPoint{10, 0}, size);
|
||||
plus.setNoUnderline();
|
||||
minus.setNoUnderline();
|
||||
|
||||
// Connect the button signal "clicked" with the callback method
|
||||
plus.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &dialogWidget::cb_plus)
|
||||
);
|
||||
|
||||
minus.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &dialogWidget::cb_minus)
|
||||
);
|
||||
plus.addCallback ("clicked", this, &dialogWidget::cb_plus);
|
||||
minus.addCallback ("clicked", this, &dialogWidget::cb_minus);
|
||||
|
||||
// Connect own signals
|
||||
addCallback
|
||||
(
|
||||
"hot",
|
||||
F_METHOD_CALLBACK (this, &dialogWidget::cb_set_red)
|
||||
);
|
||||
|
||||
addCallback
|
||||
(
|
||||
"regular",
|
||||
F_METHOD_CALLBACK (this, &dialogWidget::cb_set_black)
|
||||
);
|
||||
|
||||
addCallback
|
||||
(
|
||||
"cold",
|
||||
F_METHOD_CALLBACK (this, &dialogWidget::cb_set_blue)
|
||||
);
|
||||
addCallback ("hot", this, &dialogWidget::cb_set_red);
|
||||
addCallback ("regular", this, &dialogWidget::cb_set_black);
|
||||
addCallback ("cold", this, &dialogWidget::cb_set_blue);
|
||||
}
|
||||
|
||||
private:
|
||||
void cb_plus (FWidget*, FDataPtr)
|
||||
void cb_plus()
|
||||
{
|
||||
if ( t < 100 )
|
||||
t++;
|
||||
|
@ -738,7 +945,7 @@ class dialogWidget : public FDialog
|
|||
setTemperature();
|
||||
}
|
||||
|
||||
void cb_minus (FWidget*, FDataPtr)
|
||||
void cb_minus()
|
||||
{
|
||||
if ( t > -99 )
|
||||
t--;
|
||||
|
@ -751,17 +958,17 @@ class dialogWidget : public FDialog
|
|||
setTemperature();
|
||||
}
|
||||
|
||||
void cb_set_blue (FWidget*, FDataPtr)
|
||||
void cb_set_blue()
|
||||
{
|
||||
label.setForegroundColor (fc::Blue);
|
||||
}
|
||||
|
||||
void cb_set_black (FWidget*, FDataPtr)
|
||||
void cb_set_black()
|
||||
{
|
||||
label.setForegroundColor (fc::Black);
|
||||
}
|
||||
|
||||
void cb_set_red (FWidget*, FDataPtr)
|
||||
void cb_set_red()
|
||||
{
|
||||
label.setForegroundColor (fc::Red);
|
||||
}
|
||||
|
@ -790,7 +997,7 @@ int main (int argc, char* argv[])
|
|||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_emit-signal.cpp.png" alt="emit-signal.cpp">
|
||||
<figcaption>Figure 8. Callbacks with custom signals</figcaption>
|
||||
<figcaption>Figure 9. Callbacks with custom signals</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -831,7 +1038,7 @@ If you want to ignore padding spaces, you must force this with the
|
|||
|
||||
<figure class="image">
|
||||
<img src="widget-coordinates.svg" alt="widget coordinates">
|
||||
<figcaption>Figure 9. Widget coordinates</figcaption>
|
||||
<figcaption>Figure 10. Widget coordinates</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -881,7 +1088,7 @@ methods.
|
|||
|
||||
<figure class="image">
|
||||
<img src="widget-lengths.svg" alt="widget lengths">
|
||||
<figcaption>Figure 10. Width and height of a widget</figcaption>
|
||||
<figcaption>Figure 11. Width and height of a widget</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -934,7 +1141,7 @@ absolute geometry values as a `FRect` object, you can call the method
|
|||
|
||||
<figure class="image">
|
||||
<img src="widget-geometry.svg" alt="widget geometry">
|
||||
<figcaption>Figure 11. Geometry of widgets</figcaption>
|
||||
<figcaption>Figure 12. Geometry of widgets</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -994,7 +1201,7 @@ class dialogWidget : public FDialog
|
|||
button.setGeometry (FPoint{1, 1}, FSize{12, 1}, false);
|
||||
input.setGeometry (FPoint{2, 3}, FSize{12, 1}, false);
|
||||
// Set dialog geometry and calling adjustSize()
|
||||
setGeometry (FPoint{25, 5}), FSize{40, 12});
|
||||
setGeometry (FPoint{25, 5}, FSize{40, 12});
|
||||
setMinimumSize (FSize{25, 9});
|
||||
}
|
||||
|
||||
|
@ -1068,7 +1275,7 @@ int main (int argc, char* argv[])
|
|||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_size-adjustment.cpp.png" alt="size-adjustment.cpp">
|
||||
<figcaption>Figure 12. Dynamic layout</figcaption>
|
||||
<figcaption>Figure 13. Dynamic layout</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
@ -1135,12 +1342,13 @@ class dialogWidget : public FDialog
|
|||
setGeometry (FPoint{28, 2}, FSize{24, 21});
|
||||
scrollview.setGeometry(FPoint{1, 1}, FSize{22, 11});
|
||||
scrollview.setScrollSize(FSize{60, 27});
|
||||
const auto& wc = getFWidgetColors();
|
||||
setColor (wc.label_inactive_fg, wc.dialog_bg);
|
||||
// Attention: getColorTheme() requires an initialized terminal
|
||||
const auto& wc = getColorTheme();
|
||||
setColor (wc->label_inactive_fg, wc->dialog_bg);
|
||||
scrollview.clearArea();
|
||||
FColorPair red (fc::LightRed, wc.dialog_bg);
|
||||
FColorPair black (fc::Black, wc.dialog_bg);
|
||||
FColorPair cyan (fc::Cyan, wc.dialog_bg);
|
||||
FColorPair red (fc::LightRed, wc->dialog_bg);
|
||||
FColorPair black (fc::Black, wc->dialog_bg);
|
||||
FColorPair cyan (fc::Cyan, wc->dialog_bg);
|
||||
|
||||
static std::vector<direction> d
|
||||
{
|
||||
|
@ -1167,8 +1375,7 @@ class dialogWidget : public FDialog
|
|||
btn->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &dialogWidget::cb_button),
|
||||
static_cast<FDataPtr>(&std::get<2>(b))
|
||||
this, &dialogWidget::cb_button, std::get<2>(b)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
@ -1176,10 +1383,9 @@ class dialogWidget : public FDialog
|
|||
private:
|
||||
typedef std::tuple<FString, FPoint, FPoint, FColorPair> direction;
|
||||
|
||||
void cb_button (FWidget*, FDataPtr data)
|
||||
void cb_button (const FPoint& p)
|
||||
{
|
||||
FPoint* p = static_cast<FPoint*>(data);
|
||||
scrollview.scrollTo(*p);
|
||||
scrollview.scrollTo(p);
|
||||
}
|
||||
|
||||
FScrollView scrollview{this};
|
||||
|
@ -1188,6 +1394,7 @@ class dialogWidget : public FDialog
|
|||
int main (int argc, char* argv[])
|
||||
{
|
||||
FApplication app(argc, argv);
|
||||
app.initTerminal(); // Terminal initialization
|
||||
dialogWidget dialog(&app);
|
||||
FWidget::setMainWidget(&dialog);
|
||||
dialog.show();
|
||||
|
@ -1196,7 +1403,7 @@ int main (int argc, char* argv[])
|
|||
```
|
||||
<figure class="image">
|
||||
<img src="first-steps_scrollview.cpp.png" alt="scrollview.cpp">
|
||||
<figcaption>Figure 13. Dialog with a scrolling viewport</figcaption>
|
||||
<figcaption>Figure 14. Dialog with a scrolling viewport</figcaption>
|
||||
</figure>
|
||||
<br /><br />
|
||||
|
||||
|
|
After Width: | Height: | Size: 586 B |
|
@ -1,7 +1,7 @@
|
|||
Framebuffer
|
||||
===========
|
||||
|
||||
The Final Cut determines the used number of bits per pixel (bpp)
|
||||
FINAL CUT determines the used number of bits per pixel (bpp)
|
||||
for Linux framebuffer console to determine whether 16 (or more)
|
||||
different background colors can be displayed. Therefore your user
|
||||
needs read-access to the framebuffer device (/dev/fb0 or /dev/fb/0).
|
||||
|
|
|
@ -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,443 @@
|
|||
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>
|
||||
<br /><br />
|
||||
|
||||
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>
|
||||
<br /><br />
|
||||
|
||||
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>
|
||||
<br /><br />
|
||||
|
||||
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>
|
||||
<br /><br />
|
||||
|
||||
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>
|
||||
<br /><br />
|
||||
|
||||
**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>
|
||||
<br /><br />
|
||||
|
||||
**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",
|
||||
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",
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
Open.addCallback
|
||||
(
|
||||
"clicked",
|
||||
this, &dialogWidget::cb_FileBrowse
|
||||
);
|
||||
}
|
||||
|
||||
private:
|
||||
void cb_FileBrowse()
|
||||
{
|
||||
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
|
||||
```
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* 7segment.cpp - Seven-segment display *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -100,18 +100,19 @@ SegmentView::SegmentView (finalcut::FWidget* parent)
|
|||
Input.addCallback
|
||||
(
|
||||
"changed",
|
||||
[] (const finalcut::FWidget*, FDataPtr data)
|
||||
[] (SegmentView& dialog)
|
||||
{
|
||||
auto dialog = static_cast<SegmentView*>(data);
|
||||
dialog->redraw();
|
||||
dialog.redraw();
|
||||
},
|
||||
this
|
||||
std::ref(*this)
|
||||
);
|
||||
|
||||
Exit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#----------------------------------------------------------------------
|
||||
# Makefile.am - The Final Cut example programs
|
||||
# Makefile.am - FINAL CUT example programs
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if ! CPPUNIT_TEST
|
||||
|
@ -15,6 +15,7 @@ noinst_PROGRAMS = \
|
|||
fullwidth-character \
|
||||
7segment \
|
||||
choice \
|
||||
busy \
|
||||
listbox \
|
||||
listview \
|
||||
checklist \
|
||||
|
@ -44,6 +45,7 @@ event_log_SOURCES = event-log.cpp
|
|||
fullwidth_character_SOURCES = fullwidth-character.cpp
|
||||
7segment_SOURCES = 7segment.cpp
|
||||
choice_SOURCES = choice.cpp
|
||||
busy_SOURCES = busy.cpp
|
||||
listbox_SOURCES = listbox.cpp
|
||||
listview_SOURCES = listview.cpp
|
||||
checklist_SOURCES = checklist.cpp
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* background-color.cpp - Sets the background color palette *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2019-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -58,8 +58,8 @@ class Background final : public finalcut::FDialog
|
|||
|
||||
private:
|
||||
// Callback method
|
||||
void cb_changed (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_choice (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_changed();
|
||||
void cb_choice();
|
||||
|
||||
// Data members
|
||||
finalcut::FComboBox color_choice{this};
|
||||
|
@ -148,7 +148,9 @@ Background::Background (finalcut::FWidget* parent)
|
|||
quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
|
||||
for (const auto spinbox : {&red, &green, &blue})
|
||||
|
@ -156,7 +158,7 @@ Background::Background (finalcut::FWidget* parent)
|
|||
spinbox->addCallback
|
||||
(
|
||||
"changed",
|
||||
F_METHOD_CALLBACK (this, &Background::cb_changed)
|
||||
this, &Background::cb_changed
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -165,7 +167,7 @@ Background::Background (finalcut::FWidget* parent)
|
|||
color_choice.addCallback
|
||||
(
|
||||
signal,
|
||||
F_METHOD_CALLBACK (this, &Background::cb_choice)
|
||||
this, &Background::cb_choice
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -175,7 +177,7 @@ Background::~Background() // destructor
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Background::cb_changed (const finalcut::FWidget*, const FDataPtr)
|
||||
void Background::cb_changed()
|
||||
{
|
||||
if ( ! finalcut::FTerm::canChangeColorPalette() )
|
||||
return;
|
||||
|
@ -189,7 +191,7 @@ void Background::cb_changed (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Background::cb_choice (const finalcut::FWidget*, const FDataPtr)
|
||||
void Background::cb_choice()
|
||||
{
|
||||
if ( ! finalcut::FTerm::canChangeColorPalette() )
|
||||
return;
|
||||
|
@ -217,8 +219,13 @@ void Background::cb_choice (const finalcut::FWidget*, const FDataPtr)
|
|||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
// Create the application object
|
||||
finalcut::FApplication app(argc, argv);
|
||||
|
||||
// Force terminal initialization without calling show()
|
||||
app.initTerminal();
|
||||
|
||||
// The following lines require an initialized terminal
|
||||
if ( finalcut::FTerm::canChangeColorPalette() )
|
||||
app.setBackgroundColor(finalcut::fc::LightMagenta);
|
||||
|
||||
|
|
|
@ -0,0 +1,129 @@
|
|||
/***********************************************************************
|
||||
* busy.cpp - Shows the use of the FBusyIndicator *
|
||||
* *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with this program. If not, see *
|
||||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <final/final.h>
|
||||
using finalcut::FPoint;
|
||||
using finalcut::FRect;
|
||||
using finalcut::FSize;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class Dialog
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
class Dialog final : public finalcut::FDialog
|
||||
{
|
||||
public:
|
||||
explicit Dialog (FWidget* parent = nullptr);
|
||||
|
||||
private:
|
||||
void adjustSize() override;
|
||||
|
||||
// Event handler
|
||||
void onTimer (finalcut::FTimerEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_start();
|
||||
|
||||
// Data members
|
||||
finalcut::FSpinBox seconds{this};
|
||||
finalcut::FButton start{"&Start", this};
|
||||
finalcut::FButton quit{"&Quit", this};
|
||||
finalcut::FBusyIndicator busy_indicator{this};
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Dialog::Dialog (FWidget* parent)
|
||||
: finalcut::FDialog{parent}
|
||||
{
|
||||
FDialog::setText ("Dialog");
|
||||
finalcut::FDialog::setGeometry (FPoint{26, 5}, FSize{28, 10});
|
||||
seconds.setGeometry (FPoint{10, 2}, FSize{10, 1});
|
||||
seconds.setLabelText ("Seconds");
|
||||
seconds.setRange (0, 60);
|
||||
seconds.setValue (3);
|
||||
start.setGeometry (FPoint{2, 6}, FSize{10, 1});
|
||||
quit.setGeometry (FPoint{15, 6}, FSize{10, 1});
|
||||
|
||||
// Add button callbacks
|
||||
seconds.addCallback
|
||||
(
|
||||
"activate",
|
||||
this, &Dialog::cb_start
|
||||
);
|
||||
|
||||
start.addCallback
|
||||
(
|
||||
"clicked",
|
||||
this, &Dialog::cb_start
|
||||
);
|
||||
|
||||
quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Dialog::adjustSize()
|
||||
{
|
||||
finalcut::FDialog::adjustSize();
|
||||
int X = int((getDesktopWidth() - getWidth()) / 2);
|
||||
const int Y = 5;
|
||||
|
||||
if ( X < 1 )
|
||||
X = 1;
|
||||
|
||||
setPos (FPoint{X, Y}, false);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Dialog::onTimer (finalcut::FTimerEvent*)
|
||||
{
|
||||
delOwnTimers();
|
||||
busy_indicator.stop();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Dialog::cb_start()
|
||||
{
|
||||
if ( seconds.getValue() < 1 )
|
||||
return;
|
||||
|
||||
busy_indicator.start();
|
||||
addTimer(int(seconds.getValue() * 1000));
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// main part
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
finalcut::FApplication app(argc, argv);
|
||||
Dialog dialog(&app);
|
||||
finalcut::FWidget::setMainWidget(&dialog);
|
||||
dialog.show();
|
||||
return app.exec();
|
||||
}
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* calculator.cpp - A simple calculator with trigonometric functions *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -119,13 +119,6 @@ class Calc final : public finalcut::FDialog
|
|||
// Destructor
|
||||
~Calc() override;
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (finalcut::FKeyEvent*) override;
|
||||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_buttonClicked (const finalcut::FWidget*, FDataPtr);
|
||||
|
||||
private:
|
||||
// Typedef and Enumeration
|
||||
typedef std::function<void(lDouble&)> keyFunction; // Member function
|
||||
|
@ -207,17 +200,24 @@ class Calc final : public finalcut::FDialog
|
|||
void sine (lDouble&);
|
||||
void cosine (lDouble&);
|
||||
void tangent (lDouble&);
|
||||
bool isDataEntryKey (int);
|
||||
bool isOperatorKey (int);
|
||||
bool isDataEntryKey (int) const;
|
||||
bool isOperatorKey (int) const;
|
||||
lDouble& getValue();
|
||||
void setDisplay (lDouble);
|
||||
void setInfixOperator (char);
|
||||
void clearInfixOperator();
|
||||
void calcInfixOperator();
|
||||
void adjustSize() override;
|
||||
const wchar_t* getButtonText (const std::size_t);
|
||||
const wchar_t* getButtonText (const std::size_t) const;
|
||||
void mapKeyFunctions();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (finalcut::FKeyEvent*) override;
|
||||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_buttonClicked (Calc::button);
|
||||
|
||||
// Data members
|
||||
bool error{false};
|
||||
bool arcus_mode{false};
|
||||
|
@ -230,7 +230,7 @@ class Calc final : public finalcut::FDialog
|
|||
char infix_operator{'\0'};
|
||||
char last_infix_operator{'\0'};
|
||||
finalcut::FString input{""};
|
||||
std::size_t button_no[Calc::NUM_OF_BUTTONS]{};
|
||||
button button_no[Calc::NUM_OF_BUTTONS]{};
|
||||
|
||||
struct stack_data
|
||||
{
|
||||
|
@ -257,7 +257,7 @@ Calc::Calc (FWidget* parent)
|
|||
clearInfixOperator();
|
||||
std::setlocale(LC_NUMERIC, "C");
|
||||
|
||||
for (std::size_t key{0}; key < Calc::NUM_OF_BUTTONS; key++)
|
||||
for (button key{Sine}; key < Calc::NUM_OF_BUTTONS; key = button(key + 1))
|
||||
{
|
||||
auto btn = std::make_shared<Button>(this);
|
||||
button_no[key] = key;
|
||||
|
@ -284,8 +284,8 @@ Calc::Calc (FWidget* parent)
|
|||
btn->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Calc::cb_buttonClicked),
|
||||
&button_no[key]
|
||||
this, &Calc::cb_buttonClicked,
|
||||
button_no[key]
|
||||
);
|
||||
|
||||
calculator_buttons[button(key)] = btn;
|
||||
|
@ -364,10 +364,9 @@ void Calc::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Calc::cb_buttonClicked (const finalcut::FWidget*, FDataPtr data)
|
||||
void Calc::cb_buttonClicked (Calc::button key)
|
||||
{
|
||||
lDouble& x = getValue();
|
||||
const Calc::button& key = *(static_cast<Calc::button*>(data));
|
||||
|
||||
// Call the key function
|
||||
key_map[key](x);
|
||||
|
@ -941,7 +940,7 @@ void Calc::draw()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool Calc::isDataEntryKey (int key)
|
||||
bool Calc::isDataEntryKey (int key) const
|
||||
{
|
||||
// Test if key is in {'.', '0'..'9'}
|
||||
const int data_entry_keys[] =
|
||||
|
@ -968,7 +967,7 @@ bool Calc::isDataEntryKey (int key)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool Calc::isOperatorKey(int key)
|
||||
bool Calc::isOperatorKey(int key) const
|
||||
{
|
||||
// Test if key is in {'*', '/', '+', '-', '^', '='}
|
||||
const int operators[] =
|
||||
|
@ -1091,7 +1090,7 @@ void Calc::adjustSize()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
const wchar_t* Calc::getButtonText (const std::size_t key)
|
||||
const wchar_t* Calc::getButtonText (const std::size_t key) const
|
||||
{
|
||||
static const wchar_t* const button_text[Calc::NUM_OF_BUTTONS] =
|
||||
{
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* checklist.cpp - Example for FListView widget with checkboxes *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -64,7 +64,7 @@ class CheckList final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_showList (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_showList();
|
||||
|
||||
// Data members
|
||||
finalcut::FListView listView{this};
|
||||
|
@ -110,7 +110,7 @@ CheckList::CheckList (finalcut::FWidget* parent)
|
|||
listView.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &CheckList::cb_showList)
|
||||
this, &CheckList::cb_showList
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -168,7 +168,7 @@ void CheckList::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void CheckList::cb_showList (const finalcut::FWidget*, const FDataPtr)
|
||||
void CheckList::cb_showList()
|
||||
{
|
||||
auto iter = listView.beginOfList();
|
||||
finalcut::FString shopping_list{};
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* choice.cpp - FButtonGroup with scroll view *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -31,17 +31,16 @@ using finalcut::FSize;
|
|||
typedef std::shared_ptr<finalcut::FRadioButton> FRadioButtonPtr;
|
||||
|
||||
// Function prototypes
|
||||
void cb_quit (const finalcut::FWidget*, FDataPtr);
|
||||
void cb_quit (finalcut::FDialog&);
|
||||
void populateChoice (std::vector<FRadioButtonPtr>&, finalcut::FButtonGroup&);
|
||||
void preset (std::vector<FRadioButtonPtr>&);
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Callback functions
|
||||
//----------------------------------------------------------------------
|
||||
void cb_quit (const finalcut::FWidget*, FDataPtr data)
|
||||
void cb_quit (finalcut::FDialog& dlg)
|
||||
{
|
||||
auto dlg = static_cast<finalcut::FDialog*>(data);
|
||||
dlg->close();
|
||||
dlg.close();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -141,7 +140,7 @@ int main (int argc, char* argv[])
|
|||
(
|
||||
"clicked",
|
||||
&cb_quit,
|
||||
&dgl
|
||||
std::ref(dgl)
|
||||
);
|
||||
|
||||
// Show the dialog
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* dialog.cpp - A FDialog example *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -26,15 +26,14 @@ using finalcut::FPoint;
|
|||
using finalcut::FSize;
|
||||
|
||||
// function prototype
|
||||
void cb_quit (const finalcut::FWidget*, FDataPtr);
|
||||
void cb_quit (const finalcut::FApplication&);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// callback function
|
||||
//----------------------------------------------------------------------
|
||||
void cb_quit (const finalcut::FWidget*, FDataPtr data)
|
||||
void cb_quit (const finalcut::FApplication& app)
|
||||
{
|
||||
auto& app = *(static_cast<finalcut::FApplication*>(data));
|
||||
app.quit();
|
||||
}
|
||||
|
||||
|
@ -77,7 +76,7 @@ int main (int argc, char* argv[])
|
|||
(
|
||||
"clicked",
|
||||
&cb_quit,
|
||||
&app
|
||||
std::ref(app)
|
||||
);
|
||||
|
||||
// Set dialog object as main widget
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* event-log.cpp - Logs events in a dialog box *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -58,7 +58,7 @@ class EventDialog final : public finalcut::FDialog
|
|||
|
||||
private:
|
||||
// Methods
|
||||
finalcut::FString getMouseButtonName (int);
|
||||
finalcut::FString getMouseButtonName (int) const;
|
||||
void logMouseEvent ( const finalcut::FString&
|
||||
, const finalcut::FMouseEvent& );
|
||||
|
||||
|
@ -103,7 +103,7 @@ EventDialog::~EventDialog() // destructor
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
finalcut::FString EventDialog::getMouseButtonName (int btn_state)
|
||||
finalcut::FString EventDialog::getMouseButtonName (int btn_state) const
|
||||
{
|
||||
switch ( btn_state )
|
||||
{
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fullwidth-letter.cpp - Demonstrates use of full-width characters *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2019-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -105,16 +105,14 @@ int main (int argc, char* argv[])
|
|||
|
||||
// Callback lambda expressions
|
||||
auto cb_exit = \
|
||||
[] (const finalcut::FWidget*, FDataPtr data)
|
||||
[] (const finalcut::FApplication& a)
|
||||
{
|
||||
auto a = static_cast<finalcut::FApplication*>(data);
|
||||
a->quit();
|
||||
a.quit();
|
||||
};
|
||||
|
||||
auto cb_tooltip = \
|
||||
[] (const finalcut::FWidget*, FDataPtr data)
|
||||
[] (finalcut::FApplication* a)
|
||||
{
|
||||
auto a = static_cast<finalcut::FApplication*>(data);
|
||||
finalcut::FToolTip tooltip(a);
|
||||
tooltip.setText (full("A tooltip with\ncharacters\n"
|
||||
"in full-width\nfor 3 seconds"));
|
||||
|
@ -123,9 +121,9 @@ int main (int argc, char* argv[])
|
|||
};
|
||||
|
||||
// Connect the signals with the callback lambda expressions
|
||||
btn.addCallback ("clicked", cb_exit, &app);
|
||||
Exit.addCallback ("clicked", cb_exit, &app);
|
||||
Quit.addCallback ("clicked", cb_exit, &app);
|
||||
btn.addCallback ("clicked", cb_exit, std::ref(app));
|
||||
Exit.addCallback ("clicked", cb_exit, std::ref(app));
|
||||
Quit.addCallback ("clicked", cb_exit, std::ref(app));
|
||||
key_F1.addCallback ("activate", cb_tooltip, &app);
|
||||
|
||||
// Set dialog object as main widget
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* hello.cpp - A simple hello world program *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* input-dialog.cpp - An input field example *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -26,33 +26,31 @@ using finalcut::FPoint;
|
|||
using finalcut::FSize;
|
||||
|
||||
// function prototypes
|
||||
void cb_quit (const finalcut::FWidget*, FDataPtr);
|
||||
void cb_publish (finalcut::FWidget*, FDataPtr);
|
||||
void cb_quit (const finalcut::FApplication&);
|
||||
void cb_publish (const finalcut::FCheckBox&, finalcut::FCheckBox&);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// callback functions
|
||||
//----------------------------------------------------------------------
|
||||
void cb_quit (const finalcut::FWidget*, FDataPtr data)
|
||||
void cb_quit (const finalcut::FApplication& app)
|
||||
{
|
||||
auto app = static_cast<finalcut::FApplication*>(data);
|
||||
app->quit();
|
||||
app.quit();
|
||||
}
|
||||
|
||||
void cb_publish (finalcut::FWidget* widget, FDataPtr data)
|
||||
//----------------------------------------------------------------------
|
||||
void cb_publish ( const finalcut::FCheckBox& cbox1
|
||||
, finalcut::FCheckBox& cbox2 )
|
||||
{
|
||||
auto cbox1 = static_cast<finalcut::FCheckBox*>(widget);
|
||||
auto cbox2 = static_cast<finalcut::FCheckBox*>(data);
|
||||
|
||||
if ( cbox1->isChecked() )
|
||||
cbox2->setEnable();
|
||||
if ( cbox1.isChecked() )
|
||||
cbox2.setEnable();
|
||||
else
|
||||
{
|
||||
cbox2->unsetChecked();
|
||||
cbox2->setDisable();
|
||||
cbox2.unsetChecked();
|
||||
cbox2.setDisable();
|
||||
}
|
||||
|
||||
cbox2->redraw();
|
||||
cbox2.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -124,7 +122,8 @@ int main (int argc, char* argv[])
|
|||
(
|
||||
"clicked",
|
||||
&cb_publish,
|
||||
&check2
|
||||
std::ref(check1),
|
||||
std::ref(check2)
|
||||
);
|
||||
|
||||
// Connect the button signal "clicked" with the callback function
|
||||
|
@ -132,7 +131,7 @@ int main (int argc, char* argv[])
|
|||
(
|
||||
"clicked",
|
||||
&cb_quit,
|
||||
&app
|
||||
std::ref(app)
|
||||
);
|
||||
|
||||
// Set dialog object as main widget
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* keyboard.cpp - Shows typed-in key name *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -95,6 +95,9 @@ int main (int argc, char* argv[])
|
|||
{
|
||||
// Create the application object
|
||||
finalcut::FApplication app{argc, argv};
|
||||
|
||||
// Force terminal initialization without calling show()
|
||||
app.initTerminal();
|
||||
app.setForegroundColor(finalcut::fc::Default);
|
||||
app.setBackgroundColor(finalcut::fc::Default);
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* listbox.cpp - Example for using a FListBox widget *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -157,7 +157,9 @@ Listbox::Listbox (FWidget* parent)
|
|||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* listview.cpp - Example for using a multi-column FListView widget *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -59,7 +59,7 @@ class Listview final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_showInMessagebox (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_showInMessagebox();
|
||||
|
||||
// Data members
|
||||
finalcut::FListView listView{this};
|
||||
|
@ -111,13 +111,15 @@ Listview::Listview (finalcut::FWidget* parent)
|
|||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
|
||||
listView.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Listview::cb_showInMessagebox)
|
||||
this, &Listview::cb_showInMessagebox
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -187,7 +189,7 @@ void Listview::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Listview::cb_showInMessagebox (const finalcut::FWidget*, const FDataPtr)
|
||||
void Listview::cb_showInMessagebox()
|
||||
{
|
||||
const auto& item = listView.getCurrentItem();
|
||||
finalcut::FMessageBox info ( "Weather in " + item->getText(1)
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* mandelbrot.cpp - Shows a ASCII based Mandelbrot set *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* menu.cpp - A menu example *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -61,7 +61,7 @@ class Menu final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_message (finalcut::FWidget*, const FDataPtr);
|
||||
void cb_message (const finalcut::FMenuItem*);
|
||||
|
||||
// Data members
|
||||
finalcut::FString line{13, fc::BoxDrawingsHorizontal};
|
||||
|
@ -183,7 +183,9 @@ void Menu::configureFileMenuItems()
|
|||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -275,7 +277,8 @@ void Menu::defaultCallback (const finalcut::FMenuList* mb)
|
|||
item->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Menu::cb_message)
|
||||
this, &Menu::cb_message,
|
||||
item
|
||||
);
|
||||
|
||||
// Call sub-menu
|
||||
|
@ -302,9 +305,8 @@ void Menu::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::cb_message (finalcut::FWidget* widget, const FDataPtr)
|
||||
void Menu::cb_message (const finalcut::FMenuItem* menuitem)
|
||||
{
|
||||
const auto& menuitem = static_cast<finalcut::FMenuItem*>(widget);
|
||||
auto text = menuitem->getText();
|
||||
text = text.replace('&', "");
|
||||
finalcut::FMessageBox::info ( this
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* mouse.cpp - A small mouse-controlled drawing program *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -49,8 +49,8 @@ class ColorChooser final : public finalcut::FWidget
|
|||
ColorChooser& operator = (const ColorChooser&) = delete;
|
||||
|
||||
// Accessors
|
||||
FColor getForeground();
|
||||
FColor getBackground();
|
||||
FColor getForeground() const;
|
||||
FColor getBackground() const;
|
||||
|
||||
private:
|
||||
// Mutator
|
||||
|
@ -78,16 +78,6 @@ ColorChooser::ColorChooser (finalcut::FWidget* parent)
|
|||
setFixedSize (FSize{8, 12});
|
||||
unsetFocusable();
|
||||
|
||||
if ( parent )
|
||||
{
|
||||
const FColor fg = parent->getForegroundColor();
|
||||
const FColor bg = parent->getBackgroundColor();
|
||||
FWidget::setForegroundColor(fg);
|
||||
FWidget::setBackgroundColor(bg);
|
||||
headline.setForegroundColor(fg);
|
||||
headline.setBackgroundColor(bg);
|
||||
}
|
||||
|
||||
// Text label
|
||||
headline.setGeometry (FPoint{1, 1}, FSize{8, 1});
|
||||
headline.setEmphasis();
|
||||
|
@ -100,13 +90,13 @@ ColorChooser::~ColorChooser()
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FColor ColorChooser::getForeground()
|
||||
inline FColor ColorChooser::getForeground() const
|
||||
{
|
||||
return fg_color;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FColor ColorChooser::getBackground()
|
||||
inline FColor ColorChooser::getBackground() const
|
||||
{
|
||||
return bg_color;
|
||||
}
|
||||
|
@ -122,6 +112,8 @@ void ColorChooser::setSize (const FSize& size, bool adjust)
|
|||
//----------------------------------------------------------------------
|
||||
void ColorChooser::draw()
|
||||
{
|
||||
useParentWidgetColor();
|
||||
headline.setBackgroundColor(getBackgroundColor());
|
||||
setColor();
|
||||
drawBorder();
|
||||
|
||||
|
@ -200,7 +192,7 @@ class Brushes final : public finalcut::FWidget
|
|||
Brushes& operator = (const Brushes&) = delete;
|
||||
|
||||
// Accessor
|
||||
wchar_t getBrush();
|
||||
wchar_t getBrush() const;
|
||||
|
||||
// Mutators
|
||||
void setForeground (FColor);
|
||||
|
@ -232,16 +224,6 @@ Brushes::Brushes (finalcut::FWidget* parent)
|
|||
setFixedSize (FSize{8, 4});
|
||||
unsetFocusable();
|
||||
|
||||
if ( parent )
|
||||
{
|
||||
const FColor fg = parent->getForegroundColor();
|
||||
const FColor bg = parent->getBackgroundColor();
|
||||
FWidget::setForegroundColor(fg);
|
||||
FWidget::setBackgroundColor(bg);
|
||||
headline.setForegroundColor(fg);
|
||||
headline.setBackgroundColor(bg);
|
||||
}
|
||||
|
||||
// Text label
|
||||
headline.setGeometry(FPoint{1, 1}, FSize{8, 1});
|
||||
headline.setEmphasis();
|
||||
|
@ -265,6 +247,8 @@ void Brushes::setSize (const FSize& size, bool adjust)
|
|||
void Brushes::draw()
|
||||
{
|
||||
int pos{0};
|
||||
useParentWidgetColor();
|
||||
headline.setBackgroundColor(getBackgroundColor());
|
||||
setColor();
|
||||
drawBorder();
|
||||
print() << FPoint{2, 3}
|
||||
|
@ -309,7 +293,7 @@ void Brushes::onMouseDown (finalcut::FMouseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline wchar_t Brushes::getBrush()
|
||||
inline wchar_t Brushes::getBrush() const
|
||||
{
|
||||
return brush;
|
||||
}
|
||||
|
@ -361,6 +345,7 @@ class MouseDraw final : public finalcut::FDialog
|
|||
void draw() override;
|
||||
void drawBrush (int, int, bool = false);
|
||||
void drawCanvas();
|
||||
void createCanvas();
|
||||
void adjustSize() override;
|
||||
|
||||
// Event handler
|
||||
|
@ -368,7 +353,7 @@ class MouseDraw final : public finalcut::FDialog
|
|||
void onMouseMove (finalcut::FMouseEvent*) override;
|
||||
|
||||
// Callback methods
|
||||
void cb_colorChanged (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_colorChanged();
|
||||
|
||||
// Data members
|
||||
FTermArea* canvas{nullptr};
|
||||
|
@ -386,14 +371,10 @@ MouseDraw::MouseDraw (finalcut::FWidget* parent)
|
|||
c_chooser.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MouseDraw::cb_colorChanged)
|
||||
this, &MouseDraw::cb_colorChanged
|
||||
);
|
||||
|
||||
brush.setPos (FPoint{1, 12});
|
||||
|
||||
FSize no_shadow{0, 0};
|
||||
finalcut::FRect scroll_geometry{0, 0, 1, 1};
|
||||
createArea (scroll_geometry, no_shadow, canvas);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -407,6 +388,10 @@ void MouseDraw::setGeometry ( const FPoint& p, const FSize& s, bool adjust)
|
|||
const std::size_t w = s.getWidth();
|
||||
const std::size_t h = s.getHeight();
|
||||
const finalcut::FRect scroll_geometry (FPoint{0, 0}, FSize{w - 11, h - 3});
|
||||
|
||||
if ( ! canvas )
|
||||
return;
|
||||
|
||||
const FSize no_shadow{0, 0};
|
||||
const int old_w = canvas->width;
|
||||
const int old_h = canvas->height;
|
||||
|
@ -504,6 +489,10 @@ void MouseDraw::drawCanvas()
|
|||
if ( ! hasPrintArea() )
|
||||
finalcut::FVTerm::getPrintArea();
|
||||
|
||||
// Create canvas after initializing the desktop and color theme
|
||||
if ( ! canvas )
|
||||
createCanvas();
|
||||
|
||||
if ( ! (hasPrintArea() && canvas) )
|
||||
return;
|
||||
|
||||
|
@ -534,6 +523,15 @@ void MouseDraw::drawCanvas()
|
|||
printarea->has_changes = true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MouseDraw::createCanvas()
|
||||
{
|
||||
FSize no_shadow{0, 0};
|
||||
finalcut::FRect scroll_geometry{0, 0, 1, 1};
|
||||
createArea (scroll_geometry, no_shadow, canvas);
|
||||
adjustSize();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MouseDraw::adjustSize()
|
||||
{
|
||||
|
@ -574,7 +572,7 @@ void MouseDraw::onMouseMove (finalcut::FMouseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MouseDraw::cb_colorChanged (const finalcut::FWidget*, const FDataPtr)
|
||||
void MouseDraw::cb_colorChanged()
|
||||
{
|
||||
brush.setForeground (c_chooser.getForeground());
|
||||
brush.setBackground (c_chooser.getBackground());
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* opti-move.cpp - Tests the cursor movement optimization *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -21,6 +21,7 @@
|
|||
***********************************************************************/
|
||||
|
||||
#include <iomanip>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <final/final.h>
|
||||
|
@ -133,62 +134,107 @@ void move (int xold, int yold, int xnew, int ynew)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
class DirectLogger : public finalcut::FLog
|
||||
class DirectLogger final : public finalcut::FLog
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
DirectLogger();
|
||||
|
||||
// Destructor
|
||||
~DirectLogger() override;
|
||||
|
||||
void info (const std::string& entry) override
|
||||
{
|
||||
output << entry << "\r" << std::endl;
|
||||
}
|
||||
|
||||
void warn (const std::string&) override
|
||||
{ }
|
||||
{
|
||||
// An implementation is not required in this context
|
||||
}
|
||||
|
||||
void error (const std::string&) override
|
||||
{ }
|
||||
{
|
||||
// An implementation is not required in this context
|
||||
}
|
||||
|
||||
|
||||
void debug (const std::string&) override
|
||||
{ }
|
||||
{
|
||||
// An implementation is not required in this context
|
||||
}
|
||||
|
||||
void flush() override
|
||||
{
|
||||
output.flush();
|
||||
}
|
||||
|
||||
void setOutputStream (const std::ostream& os) override
|
||||
{ output.rdbuf(os.rdbuf()); }
|
||||
|
||||
void setLineEnding (LineEnding) override
|
||||
{ }
|
||||
{
|
||||
// An implementation is not required in this context
|
||||
}
|
||||
|
||||
|
||||
void enableTimestamp() override
|
||||
{ }
|
||||
{
|
||||
// An implementation is not required in this context
|
||||
}
|
||||
|
||||
|
||||
void disableTimestamp() override
|
||||
{ }
|
||||
{
|
||||
// An implementation is not required in this context
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
// Data member
|
||||
std::ostream output{std::cerr.rdbuf()};
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
DirectLogger::DirectLogger() // constructor
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
DirectLogger::~DirectLogger() // destructor
|
||||
{ }
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// main part
|
||||
//----------------------------------------------------------------------
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
// Disable mouse
|
||||
finalcut::FStartOptions::getFStartOptions().mouse_support = false;
|
||||
|
||||
// Create the application object
|
||||
finalcut::FApplication TermApp{argc, argv};
|
||||
finalcut::FApplication term_app{argc, argv};
|
||||
|
||||
// Force terminal initialization without calling show()
|
||||
term_app.initTerminal();
|
||||
|
||||
if ( finalcut::FApplication::isQuit() )
|
||||
return 0;
|
||||
|
||||
// Pointer to the global virtual terminal object
|
||||
app = &TermApp;
|
||||
app = &term_app;
|
||||
|
||||
// Get screen dimension
|
||||
int xmax = int(TermApp.getDesktopWidth() - 1);
|
||||
int ymax = int(TermApp.getDesktopHeight() - 1);
|
||||
int xmax = int(term_app.getDesktopWidth() - 1);
|
||||
int ymax = int(term_app.getDesktopHeight() - 1);
|
||||
finalcut::FString line{std::size_t(xmax) + 1, '-'};
|
||||
|
||||
// Place the cursor in the upper left corner
|
||||
TermApp.setTermXY(0, 0);
|
||||
term_app.setTermXY(0, 0);
|
||||
// Reset all terminal attributes
|
||||
TermApp.setNormal();
|
||||
term_app.setNormal();
|
||||
// Clear the screen
|
||||
TermApp.clearArea();
|
||||
term_app.clearArea();
|
||||
|
||||
// Show the determined terminal name and text resolution
|
||||
std::cout << "Terminal: " << finalcut::FTerm::getTermType() << "\r\n";
|
||||
|
@ -226,12 +272,12 @@ int main (int argc, char* argv[])
|
|||
std::cout << "\r" << line << std::flush;
|
||||
// Generation of a logger in a shared_ptr via a pointer
|
||||
finalcut::FApplication::setLog(std::make_shared<DirectLogger>());
|
||||
// Get the shared_ptr with the base class
|
||||
std::shared_ptr<finalcut::FLog> log = finalcut::FApplication::getLog();
|
||||
const finalcut::FOptiMove& opti_move = *finalcut::FTerm::getFOptiMove();
|
||||
finalcut::printDurations(opti_move);
|
||||
|
||||
// Waiting for keypress
|
||||
keyPressed();
|
||||
app = nullptr; // End of TermApp object scope
|
||||
app = nullptr; // End of term_app object scope
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* rotozoomer.cpp - Rotozoomer effect demo *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -28,7 +28,10 @@
|
|||
#include <final/final.h>
|
||||
|
||||
namespace fc = finalcut::fc;
|
||||
using namespace std::chrono;
|
||||
using std::chrono::duration_cast;
|
||||
using std::chrono::milliseconds;
|
||||
using std::chrono::system_clock;
|
||||
using std::chrono::time_point;
|
||||
using finalcut::FPoint;
|
||||
using finalcut::FSize;
|
||||
|
||||
|
@ -52,7 +55,7 @@ class RotoZoomer final : public finalcut::FDialog
|
|||
~RotoZoomer() override;
|
||||
|
||||
// Accessors
|
||||
finalcut::FString getReport();
|
||||
finalcut::FString getReport() const;
|
||||
|
||||
// Event handlers
|
||||
void onShow (finalcut::FShowEvent*) override;
|
||||
|
@ -187,7 +190,7 @@ void RotoZoomer::generateReport()
|
|||
dimension_str << getDesktopWidth()
|
||||
<< "x" << getDesktopHeight();
|
||||
int elapsed_ms = int(duration_cast<milliseconds>(end - start).count());
|
||||
time_str << double(elapsed_ms) / 1000 << "ms";
|
||||
time_str << double(elapsed_ms) / 1000 << "s";
|
||||
fps_str << double(loops) * 1000.0 / double(elapsed_ms);
|
||||
|
||||
rep << finalcut::FString{55, '-'} << "\n"
|
||||
|
@ -202,7 +205,7 @@ void RotoZoomer::generateReport()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline finalcut::FString RotoZoomer::getReport()
|
||||
inline finalcut::FString RotoZoomer::getReport() const
|
||||
{
|
||||
return report;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* scrollview.cpp - Shows client widgets in a scroll area *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -54,10 +54,10 @@ class Scrollview final : public finalcut::FScrollView
|
|||
void draw() override;
|
||||
|
||||
// Callback methods
|
||||
void cb_goEast (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_goSouth (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_goWest (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_goNorth (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_goEast();
|
||||
void cb_goSouth();
|
||||
void cb_goWest();
|
||||
void cb_goNorth();
|
||||
|
||||
// Data members
|
||||
wchar_t pointer_right{fc::BlackRightPointingPointer};
|
||||
|
@ -88,25 +88,25 @@ Scrollview::Scrollview (finalcut::FWidget* parent)
|
|||
go_east.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_goEast)
|
||||
this, &Scrollview::cb_goEast
|
||||
);
|
||||
|
||||
go_south.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_goSouth)
|
||||
this, &Scrollview::cb_goSouth
|
||||
);
|
||||
|
||||
go_west.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_goWest)
|
||||
this, &Scrollview::cb_goWest
|
||||
);
|
||||
|
||||
go_north.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_goNorth)
|
||||
this, &Scrollview::cb_goNorth
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -150,7 +150,7 @@ void Scrollview::draw()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_goEast (const finalcut::FWidget*, const FDataPtr)
|
||||
void Scrollview::cb_goEast()
|
||||
{
|
||||
scrollToX (int(getScrollWidth() - getViewportWidth()) + 1);
|
||||
go_south.setFocus();
|
||||
|
@ -159,7 +159,7 @@ void Scrollview::cb_goEast (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_goSouth (const finalcut::FWidget*, const FDataPtr)
|
||||
void Scrollview::cb_goSouth()
|
||||
{
|
||||
scrollToY (int(getScrollHeight() - getViewportHeight()) + 1);
|
||||
go_west.setFocus();
|
||||
|
@ -168,7 +168,7 @@ void Scrollview::cb_goSouth (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_goWest (const finalcut::FWidget*, const FDataPtr)
|
||||
void Scrollview::cb_goWest()
|
||||
{
|
||||
scrollToX (1);
|
||||
go_north.setFocus();
|
||||
|
@ -177,7 +177,7 @@ void Scrollview::cb_goWest (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_goNorth (const finalcut::FWidget*, const FDataPtr)
|
||||
void Scrollview::cb_goNorth()
|
||||
{
|
||||
scrollToY (1);
|
||||
go_east.setFocus();
|
||||
|
@ -203,7 +203,7 @@ class Scrollviewdemo final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback method
|
||||
void cb_quit (const finalcut::FWidget* = nullptr, const FDataPtr = nullptr);
|
||||
void cb_quit();
|
||||
|
||||
// Data members
|
||||
Scrollview sview{this};
|
||||
|
@ -230,7 +230,8 @@ Scrollviewdemo::Scrollviewdemo (finalcut::FWidget* parent)
|
|||
quit_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollviewdemo::cb_quit)
|
||||
this,
|
||||
&Scrollviewdemo::cb_quit
|
||||
);
|
||||
|
||||
// Text label
|
||||
|
@ -244,7 +245,7 @@ Scrollviewdemo::~Scrollviewdemo()
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollviewdemo::cb_quit (const finalcut::FWidget*, const FDataPtr)
|
||||
void Scrollviewdemo::cb_quit()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* string-operations.cpp - Demonstrates the functionality of FString *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* term-attributes.cpp - Test the video attributes of the terminal *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -50,7 +50,7 @@ class AttribDlg final : public finalcut::FDialog
|
|||
AttribDlg& operator = (const AttribDlg&) = delete;
|
||||
|
||||
// Methods
|
||||
FColor getBGColor();
|
||||
FColor getBGColor() const;
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (finalcut::FKeyEvent*) override;
|
||||
|
@ -58,15 +58,19 @@ class AttribDlg final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback methods
|
||||
void cb_next (const finalcut::FWidget* = nullptr, const FDataPtr = nullptr);
|
||||
void cb_back (const finalcut::FWidget* = nullptr, const FDataPtr = nullptr);
|
||||
void cb_next();
|
||||
void cb_back();
|
||||
|
||||
private:
|
||||
// Constants
|
||||
static constexpr FColor UNDEFINED = static_cast<FColor>(-2);
|
||||
|
||||
// Method
|
||||
void adjustSize() override;
|
||||
void draw() override;
|
||||
|
||||
// Data members
|
||||
FColor bgcolor{getColorTheme()->label_bg};
|
||||
FColor bgcolor{UNDEFINED};
|
||||
finalcut::FButton next_button{"&Next >", this};
|
||||
finalcut::FButton back_button{"< &Back", this};
|
||||
};
|
||||
|
@ -75,10 +79,6 @@ class AttribDlg final : public finalcut::FDialog
|
|||
AttribDlg::AttribDlg (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog{parent}
|
||||
{
|
||||
FDialog::setText ( "A terminal attributes test ("
|
||||
+ finalcut::FString{finalcut::FTerm::getTermType()}
|
||||
+ ")");
|
||||
|
||||
next_button.setGeometry ( FPoint{int(getWidth()) - 13, int(getHeight()) - 4}
|
||||
, FSize{10, 1} );
|
||||
next_button.addAccelerator (fc::Fkey_right);
|
||||
|
@ -90,13 +90,13 @@ AttribDlg::AttribDlg (finalcut::FWidget* parent)
|
|||
next_button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &AttribDlg::cb_next)
|
||||
this, &AttribDlg::cb_next
|
||||
);
|
||||
|
||||
back_button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &AttribDlg::cb_back)
|
||||
this, &AttribDlg::cb_back
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ AttribDlg::~AttribDlg()
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FColor AttribDlg::getBGColor()
|
||||
FColor AttribDlg::getBGColor() const
|
||||
{
|
||||
return bgcolor;
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ void AttribDlg::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void AttribDlg::cb_next (const finalcut::FWidget*, const FDataPtr)
|
||||
void AttribDlg::cb_next()
|
||||
{
|
||||
if ( finalcut::FTerm::isMonochron() )
|
||||
return;
|
||||
|
@ -159,7 +159,7 @@ void AttribDlg::cb_next (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void AttribDlg::cb_back (const finalcut::FWidget*, const FDataPtr)
|
||||
void AttribDlg::cb_back()
|
||||
{
|
||||
if ( finalcut::FTerm::isMonochron() )
|
||||
return;
|
||||
|
@ -194,6 +194,26 @@ void AttribDlg::adjustSize()
|
|||
finalcut::FDialog::adjustSize();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void AttribDlg::draw()
|
||||
{
|
||||
if ( bgcolor == UNDEFINED )
|
||||
{
|
||||
// Get the color after initializing the color theme in show()
|
||||
if ( finalcut::FTerm::isMonochron() )
|
||||
bgcolor = fc::Default;
|
||||
else
|
||||
bgcolor = getColorTheme()->label_bg;
|
||||
|
||||
// Get the terminal type after the terminal detection in show()
|
||||
FDialog::setText ( "A terminal attributes test ("
|
||||
+ finalcut::FString{finalcut::FTerm::getTermType()}
|
||||
+ ")");
|
||||
}
|
||||
|
||||
FDialog::draw();
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class AttribDemo
|
||||
|
@ -238,18 +258,13 @@ class AttribDemo final : public finalcut::FWidget
|
|||
void draw() override;
|
||||
|
||||
// Data member
|
||||
FColor last_color{FColor(finalcut::FTerm::getMaxColor())};
|
||||
FColor last_color{1};
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
AttribDemo::AttribDemo (finalcut::FWidget* parent)
|
||||
: finalcut::FWidget{parent}
|
||||
{
|
||||
if ( finalcut::FTerm::isMonochron() )
|
||||
last_color = 1;
|
||||
else if ( last_color > 16 )
|
||||
last_color = 16;
|
||||
|
||||
unsetFocusable();
|
||||
}
|
||||
|
||||
|
@ -417,8 +432,15 @@ void AttribDemo::printProtected()
|
|||
//----------------------------------------------------------------------
|
||||
void AttribDemo::draw()
|
||||
{
|
||||
// test alternate character set
|
||||
const auto& wc = getColorTheme();
|
||||
last_color = FColor(finalcut::FTerm::getMaxColor());
|
||||
|
||||
if ( finalcut::FTerm::isMonochron() )
|
||||
last_color = 1;
|
||||
else if ( last_color > 16 )
|
||||
last_color = 16;
|
||||
|
||||
// test alternate character set
|
||||
printAltCharset();
|
||||
|
||||
const std::vector<std::function<void()> > effect
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* termcap.cpp - Show the used termcap variables *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -32,7 +32,7 @@ namespace fc = finalcut::fc;
|
|||
void tcapBoolean (const std::string&, bool);
|
||||
void tcapNumeric (const std::string&, int);
|
||||
void tcapString (const std::string&, const char[]);
|
||||
void debug (finalcut::FApplication&);
|
||||
void debug (const finalcut::FApplication&);
|
||||
void booleans();
|
||||
void numeric();
|
||||
void string();
|
||||
|
@ -207,7 +207,7 @@ void tcapString (const std::string& name, const char cap_str[])
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
#if DEBUG
|
||||
void debug (finalcut::FApplication& TermApp)
|
||||
void debug (const finalcut::FApplication& TermApp)
|
||||
{
|
||||
const auto& fterm = TermApp.getFTerm();
|
||||
auto& debug_data = fterm.getFTermDebugData();
|
||||
|
@ -256,6 +256,8 @@ void booleans()
|
|||
, finalcut::FTermcap::automatic_right_margin );
|
||||
tcapBoolean ( "eat_nl_glitch"
|
||||
, finalcut::FTermcap::eat_nl_glitch );
|
||||
tcapBoolean ( "has_ansi_escape_sequences"
|
||||
, finalcut::FTermcap::has_ansi_escape_sequences );
|
||||
tcapBoolean ( "ansi_default_color"
|
||||
, finalcut::FTermcap::ansi_default_color );
|
||||
tcapBoolean ( "osc_support"
|
||||
|
@ -296,15 +298,30 @@ void string()
|
|||
//----------------------------------------------------------------------
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
const bool disable_alt_screen{true};
|
||||
finalcut::FApplication TermApp {argc, argv, disable_alt_screen};
|
||||
// Disabling the switch to the alternative screen
|
||||
finalcut::FTerm::useAlternateScreen(false);
|
||||
|
||||
// Disable color palette changes and terminal data requests
|
||||
auto& start_options = finalcut::FStartOptions::getFStartOptions();
|
||||
start_options.color_change = false;
|
||||
start_options.terminal_data_request = false;
|
||||
|
||||
// Create the application object as root widget
|
||||
finalcut::FApplication term_app {argc, argv};
|
||||
|
||||
// Force terminal initialization without calling show()
|
||||
term_app.initTerminal();
|
||||
|
||||
if ( finalcut::FApplication::isQuit() )
|
||||
return 0;
|
||||
|
||||
std::cout << "--------\r\nFTermcap\r\n--------\r\n\n";
|
||||
std::cout << "Terminal: " << finalcut::FTerm::getTermType() << "\r\n";
|
||||
|
||||
debug (TermApp);
|
||||
debug (term_app);
|
||||
|
||||
booleans();
|
||||
numeric();
|
||||
string();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* timer.cpp - Using timer events *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -35,7 +35,7 @@ class Timer final : public finalcut::FWidget
|
|||
// Constructor
|
||||
explicit Timer (finalcut::FWidget* = nullptr);
|
||||
|
||||
protected:
|
||||
private:
|
||||
// Method
|
||||
void draw() override;
|
||||
|
||||
|
@ -101,6 +101,9 @@ int main (int argc, char* argv[])
|
|||
{
|
||||
// Create the application object
|
||||
finalcut::FApplication app{argc, argv};
|
||||
|
||||
// Force terminal initialization without calling show()
|
||||
app.initTerminal();
|
||||
app.setForegroundColor(fc::Default);
|
||||
app.setBackgroundColor(fc::Default);
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* transparent.cpp - Demonstrates transparent windows *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* treeview.cpp - Example of a FListView widget with a tree hierarchy *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -386,7 +386,9 @@ Treeview::Treeview (finalcut::FWidget* parent)
|
|||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
|
||||
initialized = true;
|
||||
|
|
228
examples/ui.cpp
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* ui.cpp - Example of a user interface *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2019 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -63,9 +63,9 @@ class ProgressDialog final : public finalcut::FDialog
|
|||
void onTimer (finalcut::FTimerEvent*) override;
|
||||
|
||||
// Callback methods
|
||||
void cb_reset_bar (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_more_bar (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_exit_bar (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_reset_bar();
|
||||
void cb_more_bar();
|
||||
void cb_exit_bar();
|
||||
|
||||
// Data members
|
||||
finalcut::FProgressbar progressBar{this};
|
||||
|
@ -103,30 +103,29 @@ ProgressDialog::ProgressDialog (finalcut::FWidget* parent)
|
|||
progressBar.setGeometry(FPoint{2, 3}, FSize{34, 1}, false);
|
||||
//progressBar.setPercentage(78);
|
||||
|
||||
using namespace std::placeholders;
|
||||
reset.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &ProgressDialog::cb_reset_bar)
|
||||
this, &ProgressDialog::cb_reset_bar
|
||||
);
|
||||
|
||||
more.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &ProgressDialog::cb_more_bar)
|
||||
this, &ProgressDialog::cb_more_bar
|
||||
);
|
||||
|
||||
quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &ProgressDialog::cb_exit_bar)
|
||||
this, &ProgressDialog::cb_exit_bar
|
||||
);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
ProgressDialog::~ProgressDialog() // destructor
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
delCallback(&quit);
|
||||
delCallback(&more);
|
||||
delCallback(&reset);
|
||||
|
@ -149,7 +148,7 @@ void ProgressDialog::onTimer (finalcut::FTimerEvent*)
|
|||
if ( p != 100 )
|
||||
return;
|
||||
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
activateWindow();
|
||||
raiseWindow();
|
||||
reset.setEnable();
|
||||
|
@ -166,13 +165,13 @@ void ProgressDialog::onTimer (finalcut::FTimerEvent*)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void ProgressDialog::cb_reset_bar (const finalcut::FWidget*, const FDataPtr)
|
||||
void ProgressDialog::cb_reset_bar()
|
||||
{
|
||||
progressBar.reset();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void ProgressDialog::cb_more_bar (const finalcut::FWidget*, const FDataPtr)
|
||||
void ProgressDialog::cb_more_bar()
|
||||
{
|
||||
auto p = progressBar.getPercentage();
|
||||
p++;
|
||||
|
@ -180,7 +179,7 @@ void ProgressDialog::cb_more_bar (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void ProgressDialog::cb_exit_bar (const finalcut::FWidget*, const FDataPtr)
|
||||
void ProgressDialog::cb_exit_bar()
|
||||
{
|
||||
close();
|
||||
}
|
||||
|
@ -293,22 +292,25 @@ class MyDialog final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback methods
|
||||
void cb_noFunctionMsg (finalcut::FWidget*, const FDataPtr);
|
||||
void cb_about (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_terminfo (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_drives (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_cutClipboard (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_copyClipboard (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_pasteClipboard (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_clearInput (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_switchTheme (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_input2buttonText (finalcut::FWidget*, FDataPtr);
|
||||
void cb_setTitlebar (finalcut::FWidget*, const FDataPtr);
|
||||
void cb_showProgressBar (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_updateNumber (finalcut::FWidget*, FDataPtr);
|
||||
void cb_activateButton (finalcut::FWidget*, FDataPtr);
|
||||
void cb_view (const finalcut::FWidget*, FDataPtr);
|
||||
void cb_setInput (finalcut::FWidget*, FDataPtr);
|
||||
void cb_noFunctionMsg (const finalcut::FButton&);
|
||||
void cb_about();
|
||||
void cb_terminfo();
|
||||
void cb_drives();
|
||||
void cb_cutClipboard();
|
||||
void cb_copyClipboard();
|
||||
void cb_pasteClipboard();
|
||||
void cb_clearInput();
|
||||
void cb_switchTheme (const finalcut::FCheckMenuItem*) const;
|
||||
void cb_input2buttonText ( finalcut::FButton&
|
||||
, const finalcut::FLineEdit& ) const;
|
||||
void cb_setTitlebar (const finalcut::FLineEdit&);
|
||||
void cb_showProgressBar();
|
||||
void cb_updateNumber ( const finalcut::FListBox&
|
||||
, finalcut::FLabel& ) const;
|
||||
void cb_activateButton ( const finalcut::FRadioButton&
|
||||
, finalcut::FButton& ) const;
|
||||
void cb_view (const finalcut::FMenuItem*);
|
||||
void cb_setInput (const finalcut::FListBox&, finalcut::FLineEdit&) const;
|
||||
|
||||
// Data members
|
||||
bool initialized{false};
|
||||
|
@ -448,35 +450,38 @@ void MyDialog::initFileMenuCallbacks()
|
|||
Open.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view)
|
||||
this, &MyDialog::cb_view,
|
||||
nullptr
|
||||
);
|
||||
|
||||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
|
||||
// System files submenu
|
||||
File1.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view),
|
||||
static_cast<FDataPtr>(&File1)
|
||||
this, &MyDialog::cb_view,
|
||||
&File1
|
||||
);
|
||||
|
||||
File2.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view),
|
||||
static_cast<FDataPtr>(&File2)
|
||||
this, &MyDialog::cb_view,
|
||||
&File2
|
||||
);
|
||||
|
||||
File3.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view),
|
||||
static_cast<FDataPtr>(&File3)
|
||||
this, &MyDialog::cb_view,
|
||||
&File3
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -487,25 +492,25 @@ void MyDialog::initEditMenuCallbacks()
|
|||
Cut.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_cutClipboard)
|
||||
this, &MyDialog::cb_cutClipboard
|
||||
);
|
||||
|
||||
Copy.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_copyClipboard)
|
||||
this, &MyDialog::cb_copyClipboard
|
||||
);
|
||||
|
||||
Paste.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_pasteClipboard)
|
||||
this, &MyDialog::cb_pasteClipboard
|
||||
);
|
||||
|
||||
Clear.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_clearInput)
|
||||
this, &MyDialog::cb_clearInput
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -516,19 +521,20 @@ void MyDialog::initViewMenuCallbacks()
|
|||
Env.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_terminfo)
|
||||
this, &MyDialog::cb_terminfo
|
||||
);
|
||||
|
||||
Drive.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_drives)
|
||||
this, &MyDialog::cb_drives
|
||||
);
|
||||
|
||||
Theme.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_switchTheme)
|
||||
this, &MyDialog::cb_switchTheme,
|
||||
&Theme
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -538,7 +544,7 @@ void MyDialog::initHelpMenuCallback()
|
|||
Help.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_about)
|
||||
this, &MyDialog::cb_about
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -550,19 +556,22 @@ void MyDialog::initStatusBarCallbacks()
|
|||
key_F1.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_about)
|
||||
this, &MyDialog::cb_about
|
||||
);
|
||||
|
||||
key_F2.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view)
|
||||
this, &MyDialog::cb_view,
|
||||
nullptr
|
||||
);
|
||||
|
||||
key_F3.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -627,19 +636,22 @@ void MyDialog::initFlatButtons()
|
|||
MyButton1.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_noFunctionMsg)
|
||||
this, &MyDialog::cb_noFunctionMsg,
|
||||
std::ref(MyButton1)
|
||||
);
|
||||
|
||||
MyButton2.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_noFunctionMsg)
|
||||
this, &MyDialog::cb_noFunctionMsg,
|
||||
std::ref(MyButton2)
|
||||
);
|
||||
|
||||
MyButton3.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_noFunctionMsg)
|
||||
this, &MyDialog::cb_noFunctionMsg,
|
||||
std::ref(MyButton3)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -693,20 +705,22 @@ void MyDialog::initButtons()
|
|||
MyButton4.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_input2buttonText),
|
||||
static_cast<FDataPtr>(&myLineEdit)
|
||||
this, &MyDialog::cb_input2buttonText,
|
||||
std::ref(MyButton4), std::cref(myLineEdit)
|
||||
);
|
||||
|
||||
MyButton5.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_showProgressBar)
|
||||
this, &MyDialog::cb_showProgressBar
|
||||
);
|
||||
|
||||
MyButton6.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -739,28 +753,29 @@ void MyDialog::initWidgetsCallbacks()
|
|||
myLineEdit.addCallback
|
||||
(
|
||||
"activate", // e.g. on <Enter>
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_setTitlebar)
|
||||
this, &MyDialog::cb_setTitlebar,
|
||||
std::ref(myLineEdit)
|
||||
);
|
||||
|
||||
radio1.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_activateButton),
|
||||
static_cast<FDataPtr>(&MyButton5)
|
||||
this, &MyDialog::cb_activateButton,
|
||||
std::ref(radio1), std::ref(MyButton5)
|
||||
);
|
||||
|
||||
myList.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_setInput),
|
||||
static_cast<FDataPtr>(&myLineEdit)
|
||||
this, &MyDialog::cb_setInput,
|
||||
std::ref(myList), std::ref(myLineEdit)
|
||||
);
|
||||
|
||||
myList.addCallback
|
||||
(
|
||||
"row-selected",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_updateNumber),
|
||||
static_cast<FDataPtr>(&tagged_count)
|
||||
this, &MyDialog::cb_updateNumber,
|
||||
std::ref(myList), std::ref(tagged_count)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -789,9 +804,8 @@ void MyDialog::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_noFunctionMsg (finalcut::FWidget* widget, const FDataPtr)
|
||||
void MyDialog::cb_noFunctionMsg (const finalcut::FButton& button)
|
||||
{
|
||||
auto& button = *(static_cast<finalcut::FButton*>(widget));
|
||||
auto text = button.getText();
|
||||
text = text.replace('&', "");
|
||||
finalcut::FMessageBox::error ( this
|
||||
|
@ -800,13 +814,13 @@ void MyDialog::cb_noFunctionMsg (finalcut::FWidget* widget, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_about (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_about()
|
||||
{
|
||||
constexpr char libver[] = F_VERSION;
|
||||
const finalcut::FString line(2, fc::BoxDrawingsHorizontal);
|
||||
|
||||
finalcut::FMessageBox info ( "About"
|
||||
, line + L" The Final Cut " + line + L"\n\n"
|
||||
, line + L" FINAL CUT " + line + L"\n\n"
|
||||
L"Version " + libver + L"\n\n"
|
||||
L"(c) 2020 by Markus Gans"
|
||||
, finalcut::FMessageBox::Ok, 0, 0, this );
|
||||
|
@ -815,7 +829,7 @@ void MyDialog::cb_about (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_terminfo (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_terminfo()
|
||||
{
|
||||
const auto x = getDesktopWidth();
|
||||
const auto y = getDesktopHeight();
|
||||
|
@ -836,7 +850,7 @@ void MyDialog::cb_terminfo (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_drives (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_drives()
|
||||
{
|
||||
finalcut::FMessageBox info2 \
|
||||
(
|
||||
|
@ -887,7 +901,7 @@ void MyDialog::cb_drives (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_cutClipboard (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_cutClipboard()
|
||||
{
|
||||
clipboard = myLineEdit.getText();
|
||||
myLineEdit.clear();
|
||||
|
@ -895,20 +909,20 @@ void MyDialog::cb_cutClipboard (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_copyClipboard (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_copyClipboard()
|
||||
{
|
||||
clipboard = myLineEdit.getText();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_pasteClipboard (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_pasteClipboard()
|
||||
{
|
||||
myLineEdit = clipboard;
|
||||
myLineEdit.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_clearInput (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_clearInput()
|
||||
{
|
||||
clipboard.clear();
|
||||
myLineEdit.clear();
|
||||
|
@ -916,11 +930,9 @@ void MyDialog::cb_clearInput (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_switchTheme (const finalcut::FWidget* widget, const FDataPtr)
|
||||
void MyDialog::cb_switchTheme (const finalcut::FCheckMenuItem* check_menu) const
|
||||
{
|
||||
const auto& check_menu = *(static_cast<const finalcut::FCheckMenuItem*>(widget));
|
||||
|
||||
if ( check_menu.isChecked() )
|
||||
if ( check_menu->isChecked() )
|
||||
finalcut::FApplication::setDarkTheme();
|
||||
else
|
||||
finalcut::FApplication::setDefaultTheme();
|
||||
|
@ -931,18 +943,16 @@ void MyDialog::cb_switchTheme (const finalcut::FWidget* widget, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_input2buttonText (finalcut::FWidget* widget, FDataPtr data)
|
||||
void MyDialog::cb_input2buttonText ( finalcut::FButton& button
|
||||
, const finalcut::FLineEdit& lineedit ) const
|
||||
{
|
||||
auto& button = *(static_cast<finalcut::FButton*>(widget));
|
||||
const auto& lineedit = *(static_cast<finalcut::FLineEdit*>(data));
|
||||
button.setText(lineedit.getText());
|
||||
button.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_setTitlebar (finalcut::FWidget* widget, const FDataPtr)
|
||||
void MyDialog::cb_setTitlebar (const finalcut::FLineEdit& lineedit)
|
||||
{
|
||||
auto& lineedit = *(static_cast<finalcut::FLineEdit*>(widget));
|
||||
finalcut::FString title{};
|
||||
lineedit >> title;
|
||||
finalcut::FTerm::setTermTitle (title);
|
||||
|
@ -951,17 +961,16 @@ void MyDialog::cb_setTitlebar (finalcut::FWidget* widget, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_showProgressBar (const finalcut::FWidget*, const FDataPtr)
|
||||
void MyDialog::cb_showProgressBar()
|
||||
{
|
||||
auto p_dgl = new ProgressDialog(this);
|
||||
p_dgl->show();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_updateNumber (finalcut::FWidget* widget, FDataPtr data)
|
||||
void MyDialog::cb_updateNumber ( const finalcut::FListBox& list
|
||||
, finalcut::FLabel& num) const
|
||||
{
|
||||
const auto& list = *(static_cast<finalcut::FListBox*>(widget));
|
||||
auto& num = *(static_cast<finalcut::FLabel*>(data));
|
||||
const auto count = list.getCount();
|
||||
int select_num = 0;
|
||||
|
||||
|
@ -975,11 +984,9 @@ void MyDialog::cb_updateNumber (finalcut::FWidget* widget, FDataPtr data)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_activateButton (finalcut::FWidget* widget, FDataPtr data)
|
||||
void MyDialog::cb_activateButton ( const finalcut::FRadioButton& rb
|
||||
, finalcut::FButton& button) const
|
||||
{
|
||||
const auto& rb = *(static_cast<finalcut::FRadioButton*>(widget));
|
||||
auto& button = *(static_cast<finalcut::FButton*>(data));
|
||||
|
||||
if ( rb.isChecked() )
|
||||
button.setEnable();
|
||||
else
|
||||
|
@ -989,10 +996,9 @@ void MyDialog::cb_activateButton (finalcut::FWidget* widget, FDataPtr data)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_view (const finalcut::FWidget*, FDataPtr data)
|
||||
void MyDialog::cb_view (const finalcut::FMenuItem* item)
|
||||
{
|
||||
finalcut::FString file{};
|
||||
const auto& item = static_cast<finalcut::FMenuItem*>(data);
|
||||
|
||||
if ( item && ! item->getText().isEmpty() )
|
||||
file = item->getText();
|
||||
|
@ -1026,11 +1032,10 @@ void MyDialog::cb_view (const finalcut::FWidget*, FDataPtr data)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_setInput (finalcut::FWidget* widget, FDataPtr data)
|
||||
void MyDialog::cb_setInput ( const finalcut::FListBox& listbox
|
||||
, finalcut::FLineEdit& lineedit) const
|
||||
{
|
||||
auto& ListBox = *(static_cast<finalcut::FListBox*>(widget));
|
||||
auto& lineedit = *(static_cast<finalcut::FLineEdit*>(data));
|
||||
lineedit = ListBox.getItem(ListBox.currentItem()).getText();
|
||||
lineedit = listbox.getItem(listbox.currentItem()).getText();
|
||||
lineedit.redraw();
|
||||
}
|
||||
|
||||
|
@ -1042,24 +1047,12 @@ void MyDialog::cb_setInput (finalcut::FWidget* widget, FDataPtr data)
|
|||
int main (int argc, char* argv[])
|
||||
{
|
||||
const finalcut::FString ver{F_VERSION}; // Library version
|
||||
const finalcut::FString title { "The FINAL CUT "
|
||||
+ ver
|
||||
const finalcut::FString title { "FINAL CUT " + ver
|
||||
+ " (C) 2020 by Markus Gans" };
|
||||
|
||||
// Create the application object app
|
||||
finalcut::FApplication app{argc, argv};
|
||||
app.setNonBlockingRead();
|
||||
finalcut::FTerm::redefineDefaultColors(true);
|
||||
finalcut::FTerm::setTermTitle (title);
|
||||
|
||||
// Force vt100 encoding
|
||||
//finalcut::FTerm::setEncoding(finalcut::fc::VT100);
|
||||
|
||||
// Sets the terminal size to 94×30
|
||||
//finalcut::FTerm::setTermSize(FSize{94, 30});
|
||||
|
||||
// Enable the final cut graphical font
|
||||
//finalcut::FTerm::setNewFont();
|
||||
|
||||
// Create main dialog object d
|
||||
MyDialog d{&app};
|
||||
|
@ -1075,6 +1068,15 @@ int main (int argc, char* argv[])
|
|||
// Show the dialog d
|
||||
d.show();
|
||||
|
||||
finalcut::FTerm::redefineDefaultColors(true);
|
||||
finalcut::FTerm::setTermTitle (title);
|
||||
|
||||
// Sets the terminal size to 94×30
|
||||
//finalcut::FTerm::setTermSize(FSize{94, 30});
|
||||
|
||||
// Enable the final cut graphical font
|
||||
//finalcut::FTerm::setNewFont();
|
||||
|
||||
// Start the application
|
||||
// and return the result to the operating system
|
||||
return app.exec();
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* watch.cpp - A watch with FSwitch widgets *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -54,8 +54,8 @@ class Watch final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback methods
|
||||
void cb_clock (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_seconds (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_clock();
|
||||
void cb_seconds();
|
||||
|
||||
protected:
|
||||
// Method
|
||||
|
@ -99,21 +99,23 @@ Watch::Watch (FWidget* parent)
|
|||
clock_sw.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &Watch::cb_clock)
|
||||
this, &Watch::cb_clock
|
||||
);
|
||||
|
||||
// Connect switch signal "toggled" with a callback member function
|
||||
seconds_sw.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &Watch::cb_seconds)
|
||||
this, &Watch::cb_seconds
|
||||
);
|
||||
|
||||
// Connect button signal "clicked" with a callback member function
|
||||
quit_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
finalcut::getFApplication(),
|
||||
&finalcut::FApplication::cb_exitApp,
|
||||
this
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -152,7 +154,7 @@ void Watch::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Watch::cb_clock (const finalcut::FWidget*, const FDataPtr)
|
||||
void Watch::cb_clock()
|
||||
{
|
||||
if ( clock_sw.isChecked() )
|
||||
{
|
||||
|
@ -161,14 +163,14 @@ void Watch::cb_clock (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
else
|
||||
{
|
||||
delAllTimer(); // Delete all timers and stop updating the time
|
||||
delAllTimers(); // Delete all timers and stop updating the time
|
||||
time_str = "--:--:--";
|
||||
time_str.redraw();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Watch::cb_seconds (const finalcut::FWidget*, const FDataPtr)
|
||||
void Watch::cb_seconds()
|
||||
{
|
||||
if ( seconds_sw.isChecked() )
|
||||
sec = true;
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* windows.cpp - Shows window handling *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,7 +20,9 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <final/final.h>
|
||||
|
||||
namespace fc = finalcut::fc;
|
||||
|
@ -84,12 +86,12 @@ SmallWindow::SmallWindow (finalcut::FWidget* parent)
|
|||
right_arrow.ignorePadding();
|
||||
right_arrow.setGeometry (FPoint{int(getWidth()) - 1, 2}, FSize{1, 1});
|
||||
|
||||
top_left_label = "menu";
|
||||
top_left_label.setText("menu");
|
||||
top_left_label.setForegroundColor (wc->label_inactive_fg);
|
||||
top_left_label.setEmphasis();
|
||||
top_left_label.setGeometry (FPoint{1, 1}, FSize{6, 1});
|
||||
|
||||
top_right_label = "zoom";
|
||||
top_right_label.setText("zoom");
|
||||
top_right_label.setAlignment (fc::alignRight);
|
||||
top_right_label.setForegroundColor (wc->label_inactive_fg);
|
||||
top_right_label.setEmphasis();
|
||||
|
@ -152,7 +154,7 @@ void SmallWindow::onTimer (finalcut::FTimerEvent*)
|
|||
bottom_label.unsetEmphasis();
|
||||
bottom_label.redraw();
|
||||
updateTerminal();
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
|
||||
|
@ -176,10 +178,6 @@ class Window final : public finalcut::FDialog
|
|||
Window& operator = (const Window&) = delete;
|
||||
|
||||
private:
|
||||
// Typedefs
|
||||
typedef void (Window::*WindowCallback)(const finalcut::FWidget*, const FDataPtr);
|
||||
typedef void (finalcut::FApplication::*FAppCallback)(const finalcut::FWidget*, const FDataPtr);
|
||||
|
||||
struct win_data
|
||||
{
|
||||
// Constructor
|
||||
|
@ -199,10 +197,11 @@ class Window final : public finalcut::FDialog
|
|||
// Method
|
||||
void configureFileMenuItems();
|
||||
void configureDialogButtons();
|
||||
void activateWindow (finalcut::FDialog*);
|
||||
void activateWindow (finalcut::FDialog*) const;
|
||||
void adjustSize() override;
|
||||
template<typename CallbackT>
|
||||
void addClickedCallback (finalcut::FWidget*, CallbackT);
|
||||
template<typename InstanceT, typename CallbackT, typename... Args>
|
||||
void addClickedCallback ( finalcut::FWidget*
|
||||
, InstanceT&&, CallbackT&&, Args&&... );
|
||||
template <typename IteratorT>
|
||||
finalcut::FDialog* getNext (IteratorT);
|
||||
template <typename IteratorT>
|
||||
|
@ -212,11 +211,11 @@ class Window final : public finalcut::FDialog
|
|||
void onClose (finalcut::FCloseEvent*) override;
|
||||
|
||||
// Callback methods
|
||||
void cb_createWindows (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_closeWindows (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_next (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_previous (const finalcut::FWidget*, const FDataPtr);
|
||||
void cb_destroyWindow (const finalcut::FWidget*, FDataPtr);
|
||||
void cb_createWindows();
|
||||
void cb_closeWindows();
|
||||
void cb_next();
|
||||
void cb_previous();
|
||||
void cb_destroyWindow (win_data*) const;
|
||||
|
||||
// Data members
|
||||
std::vector<win_data*> windows{};
|
||||
|
@ -277,7 +276,7 @@ Window::~Window()
|
|||
|
||||
// Remove all callbacks before Window::cb_destroyWindow() will be called
|
||||
if ( win_dat->is_open && win_dat->dgl )
|
||||
win_dat->dgl->delCallbacks();
|
||||
win_dat->dgl->delCallback();
|
||||
|
||||
delete win_dat;
|
||||
iter = windows.erase(iter);
|
||||
|
@ -300,11 +299,14 @@ void Window::configureFileMenuItems()
|
|||
Quit.setStatusbarMessage ("Exit the program");
|
||||
|
||||
// Add menu item callback
|
||||
addClickedCallback (&New, &Window::cb_createWindows);
|
||||
addClickedCallback (&Close, &Window::cb_closeWindows);
|
||||
addClickedCallback (&Next, &Window::cb_next);
|
||||
addClickedCallback (&Previous, &Window::cb_previous);
|
||||
addClickedCallback (&Quit, &finalcut::FApplication::cb_exitApp);
|
||||
addClickedCallback (&New, this, &Window::cb_createWindows);
|
||||
addClickedCallback (&Close, this, &Window::cb_closeWindows);
|
||||
addClickedCallback (&Next, this, &Window::cb_next);
|
||||
addClickedCallback (&Previous, this, &Window::cb_previous);
|
||||
addClickedCallback ( &Quit
|
||||
, finalcut::getFApplication()
|
||||
, &finalcut::FApplication::cb_exitApp
|
||||
, this );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -319,13 +321,16 @@ void Window::configureDialogButtons()
|
|||
QuitButton.setText (L"&Quit");
|
||||
|
||||
// Add button callback
|
||||
addClickedCallback (&CreateButton, &Window::cb_createWindows);
|
||||
addClickedCallback (&CloseButton, &Window::cb_closeWindows);
|
||||
addClickedCallback (&QuitButton, &finalcut::FApplication::cb_exitApp);
|
||||
addClickedCallback (&CreateButton, this, &Window::cb_createWindows);
|
||||
addClickedCallback (&CloseButton, this, &Window::cb_closeWindows);
|
||||
addClickedCallback ( &QuitButton
|
||||
, finalcut::getFApplication()
|
||||
, &finalcut::FApplication::cb_exitApp
|
||||
, this );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::activateWindow (finalcut::FDialog* win)
|
||||
void Window::activateWindow (finalcut::FDialog* win) const
|
||||
{
|
||||
if ( ! win || win->isWindowHidden() || win->isWindowActive() )
|
||||
return;
|
||||
|
@ -373,17 +378,18 @@ void Window::adjustSize()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
template<typename CallbackT>
|
||||
template<typename InstanceT, typename CallbackT, typename... Args>
|
||||
void Window::addClickedCallback ( finalcut::FWidget* widget
|
||||
, CallbackT call )
|
||||
, InstanceT&& instance
|
||||
, CallbackT&& callback
|
||||
, Args&&... args )
|
||||
{
|
||||
FMemberCallback callback
|
||||
= reinterpret_cast<FMemberCallback>(call);
|
||||
|
||||
widget->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, callback)
|
||||
std::bind ( std::forward<CallbackT>(callback)
|
||||
, std::forward<InstanceT>(instance)
|
||||
, std::forward<Args>(args)... )
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -439,7 +445,7 @@ void Window::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::cb_createWindows (const finalcut::FWidget*, const FDataPtr)
|
||||
void Window::cb_createWindows()
|
||||
{
|
||||
const auto& first = windows.begin();
|
||||
auto iter = first;
|
||||
|
@ -468,8 +474,8 @@ void Window::cb_createWindows (const finalcut::FWidget*, const FDataPtr)
|
|||
win->addCallback
|
||||
(
|
||||
"destroy",
|
||||
F_METHOD_CALLBACK (this, &Window::cb_destroyWindow),
|
||||
static_cast<FDataPtr>(win_dat)
|
||||
this, &Window::cb_destroyWindow,
|
||||
win_dat
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -480,7 +486,7 @@ void Window::cb_createWindows (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::cb_closeWindows (const finalcut::FWidget*, const FDataPtr)
|
||||
void Window::cb_closeWindows()
|
||||
{
|
||||
if ( ! getDialogList() || getDialogList()->empty() )
|
||||
return;
|
||||
|
@ -500,7 +506,7 @@ void Window::cb_closeWindows (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::cb_next (const finalcut::FWidget*, const FDataPtr)
|
||||
void Window::cb_next()
|
||||
{
|
||||
if ( ! getDialogList() || getDialogList()->empty() )
|
||||
return;
|
||||
|
@ -520,7 +526,7 @@ void Window::cb_next (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::cb_previous (const finalcut::FWidget*, const FDataPtr)
|
||||
void Window::cb_previous()
|
||||
{
|
||||
if ( ! getDialogList() || getDialogList()->empty() )
|
||||
return;
|
||||
|
@ -542,10 +548,8 @@ void Window::cb_previous (const finalcut::FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::cb_destroyWindow (const finalcut::FWidget*, FDataPtr data)
|
||||
void Window::cb_destroyWindow (win_data* win_dat) const
|
||||
{
|
||||
auto win_dat = static_cast<win_data*>(data);
|
||||
|
||||
if ( win_dat )
|
||||
{
|
||||
win_dat->is_open = false;
|
||||
|
|
|
@ -29,3 +29,7 @@ font_DATA = \
|
|||
8x16graph.pcf.gz \
|
||||
fonts.alias \
|
||||
fonts.dir
|
||||
|
||||
uninstall-hook:
|
||||
if test -d ${fontdir}; then rmdir ${fontdir}; fi
|
||||
|
||||
|
|
|
@ -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)
|
||||
])
|
||||
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#----------------------------------------------------------------------
|
||||
# Makefile.am - The Final Cut library
|
||||
# Makefile.am - FINAL CUT library
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
AM_CPPFLAGS = -Iinclude -Wall -Werror -DCOMPILE_FINAL_CUT -std=c++11
|
||||
|
@ -19,6 +19,7 @@ libfinal_la_SOURCES = \
|
|||
flineedit.cpp \
|
||||
fbutton.cpp \
|
||||
fbuttongroup.cpp \
|
||||
fcallback.cpp \
|
||||
ftogglebutton.cpp \
|
||||
fradiobutton.cpp \
|
||||
fcheckbox.cpp \
|
||||
|
@ -44,6 +45,7 @@ libfinal_la_SOURCES = \
|
|||
fwindow.cpp \
|
||||
fmessagebox.cpp \
|
||||
ftooltip.cpp \
|
||||
fbusyindicator.cpp \
|
||||
ffiledialog.cpp \
|
||||
fkey_map.cpp \
|
||||
fcharmap.cpp \
|
||||
|
@ -84,8 +86,10 @@ finalcutinclude_HEADERS = \
|
|||
include/final/fapplication.h \
|
||||
include/final/fbutton.h \
|
||||
include/final/fbuttongroup.h \
|
||||
include/final/fcallback.h \
|
||||
include/final/fcheckbox.h \
|
||||
include/final/fcolorpair.h \
|
||||
include/final/fdata.h \
|
||||
include/final/fstyle.h \
|
||||
include/final/fconfig.h \
|
||||
include/final/fswitch.h \
|
||||
|
@ -115,6 +119,7 @@ finalcutinclude_HEADERS = \
|
|||
include/final/fmenulist.h \
|
||||
include/final/fmessagebox.h \
|
||||
include/final/ftooltip.h \
|
||||
include/final/fbusyindicator.h \
|
||||
include/final/fobject.h \
|
||||
include/final/fpoint.h \
|
||||
include/final/fsize.h \
|
||||
|
@ -157,5 +162,6 @@ finalcutinclude_HEADERS = \
|
|||
clean-local:
|
||||
-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
|
||||
|
||||
#uninstall:
|
||||
# rm -R -f $(includedir)/final
|
||||
uninstall-hook:
|
||||
if test -d ${finalcutincludedir}; then rmdir ${finalcutincludedir}; fi
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#-----------------------------------------------------------------------------
|
||||
# Makefile for Final Cut
|
||||
# Makefile for FINAL CUT
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# This is where make install will install the library
|
||||
|
@ -12,6 +12,7 @@ INCLUDE_HEADERS = \
|
|||
fapplication.h \
|
||||
fbuttongroup.h \
|
||||
fbutton.h \
|
||||
fcallback.h \
|
||||
fcolorpair.h \
|
||||
fstyle.h \
|
||||
ftogglebutton.h \
|
||||
|
@ -34,6 +35,7 @@ INCLUDE_HEADERS = \
|
|||
fcheckmenuitem.h \
|
||||
fmessagebox.h \
|
||||
ftooltip.h \
|
||||
fbusyindicator.h \
|
||||
sgr_optimizer.h \
|
||||
foptiattr.h \
|
||||
foptimove.h \
|
||||
|
@ -90,6 +92,7 @@ OBJS = \
|
|||
fpoint.o \
|
||||
fsize.o \
|
||||
frect.o \
|
||||
fcallback.o \
|
||||
fscrollbar.o \
|
||||
fprogressbar.o \
|
||||
flineedit.o \
|
||||
|
@ -118,6 +121,7 @@ OBJS = \
|
|||
fcombobox.o \
|
||||
fmessagebox.o \
|
||||
ftooltip.o \
|
||||
fbusyindicator.o \
|
||||
ffiledialog.o \
|
||||
fkey_map.o \
|
||||
fcharmap.o \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#-----------------------------------------------------------------------------
|
||||
# Makefile for Final Cut
|
||||
# Makefile for FINAL CUT
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# This is where make install will install the library
|
||||
|
@ -12,6 +12,7 @@ INCLUDE_HEADERS = \
|
|||
fapplication.h \
|
||||
fbuttongroup.h \
|
||||
fbutton.h \
|
||||
fcallback.h \
|
||||
fcolorpair.h \
|
||||
fstyle.h \
|
||||
ftogglebutton.h \
|
||||
|
@ -34,6 +35,7 @@ INCLUDE_HEADERS = \
|
|||
fcheckmenuitem.h \
|
||||
fmessagebox.h \
|
||||
ftooltip.h \
|
||||
fbusyindicator.h \
|
||||
sgr_optimizer.h \
|
||||
foptiattr.h \
|
||||
foptimove.h \
|
||||
|
@ -90,6 +92,7 @@ OBJS = \
|
|||
fpoint.o \
|
||||
fsize.o \
|
||||
frect.o \
|
||||
fcallback.o \
|
||||
fscrollbar.o \
|
||||
fprogressbar.o \
|
||||
flineedit.o \
|
||||
|
@ -118,6 +121,7 @@ OBJS = \
|
|||
fcombobox.o \
|
||||
fmessagebox.o \
|
||||
ftooltip.o \
|
||||
fbusyindicator.o \
|
||||
ffiledialog.o \
|
||||
fkey_map.o \
|
||||
fcharmap.o \
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fapplication.cpp - Manages the application events *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2013-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,8 +20,11 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <chrono>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
#include "final/fapplication.h"
|
||||
#include "final/fevent.h"
|
||||
|
@ -58,9 +61,10 @@ FWidget* FApplication::keyboard_widget {nullptr}; // has the keyboard foc
|
|||
FKeyboard* FApplication::keyboard {nullptr}; // keyboard access
|
||||
FMouseControl* FApplication::mouse {nullptr}; // mouse control
|
||||
int FApplication::loop_level {0}; // event loop level
|
||||
int FApplication::quit_code {0};
|
||||
int FApplication::quit_code {EXIT_SUCCESS};
|
||||
bool FApplication::quit_now {false};
|
||||
|
||||
uInt64 FApplication::next_event_wait {5000}; // preset to 5 ms /200 Hz
|
||||
struct timeval FApplication::time_last_event{};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FApplication
|
||||
|
@ -68,13 +72,14 @@ bool FApplication::quit_now {false};
|
|||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FApplication::FApplication ( const int& _argc
|
||||
, char* _argv[]
|
||||
, bool disable_alt_screen )
|
||||
: FWidget{processParameters(_argc, _argv), disable_alt_screen}
|
||||
FApplication::FApplication (const int& _argc, char* _argv[])
|
||||
: FWidget{processParameters(_argc, _argv)}
|
||||
, app_argc{_argc}
|
||||
, app_argv{_argv}
|
||||
{
|
||||
if ( quit_now )
|
||||
return;
|
||||
|
||||
if ( app_object )
|
||||
{
|
||||
auto ftermdata = FTerm::getFTermData();
|
||||
|
@ -84,6 +89,7 @@ FApplication::FApplication ( const int& _argc
|
|||
return;
|
||||
}
|
||||
|
||||
// First define the application object
|
||||
app_object = this;
|
||||
|
||||
if ( ! (_argc && _argv) )
|
||||
|
@ -93,7 +99,7 @@ FApplication::FApplication ( const int& _argc
|
|||
app_argv = reinterpret_cast<char**>(&empty_str);
|
||||
}
|
||||
|
||||
init (key_timeout, dblclick_interval);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -145,10 +151,10 @@ int FApplication::exec() // run
|
|||
if ( quit_now )
|
||||
{
|
||||
quit_now = false;
|
||||
return EXIT_FAILURE;
|
||||
return quit_code;
|
||||
}
|
||||
|
||||
quit_code = 0;
|
||||
quit_code = EXIT_SUCCESS;
|
||||
enterLoop();
|
||||
return quit_code;
|
||||
}
|
||||
|
@ -171,7 +177,7 @@ int FApplication::enterLoop() // event loop
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::exitLoop()
|
||||
void FApplication::exitLoop() const
|
||||
{
|
||||
app_exit_loop = true;
|
||||
}
|
||||
|
@ -184,7 +190,7 @@ void FApplication::exit (int retcode)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::quit()
|
||||
void FApplication::quit() const
|
||||
{
|
||||
FApplication::exit(0);
|
||||
}
|
||||
|
@ -228,7 +234,7 @@ void FApplication::sendQueuedEvents()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::eventInQueue()
|
||||
bool FApplication::eventInQueue() const
|
||||
{
|
||||
if ( app_object )
|
||||
return ( ! event_queue.empty() );
|
||||
|
@ -263,23 +269,10 @@ bool FApplication::removeQueuedEvent (const FObject* receiver)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processExternalUserEvent()
|
||||
void FApplication::initTerminal()
|
||||
{
|
||||
// This method can be overloaded and replaced by own code
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FWidget* FApplication::processParameters (const int& argc, char* argv[])
|
||||
{
|
||||
if ( argc > 0 && argv[1] && ( std::strcmp(argv[1], "--help") == 0
|
||||
|| std::strcmp(argv[1], "-h") == 0 ) )
|
||||
{
|
||||
showParameterUsage();
|
||||
}
|
||||
|
||||
getStartOptions().setDefault();
|
||||
cmd_options (argc, argv);
|
||||
return nullptr;
|
||||
if ( ! isQuit() )
|
||||
FWidget::initTerminal();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -288,14 +281,14 @@ void FApplication::setDefaultTheme()
|
|||
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
||||
{
|
||||
if ( getStartOptions().color_change )
|
||||
FTerm::setColorPaletteTheme<default8ColorPalette>(&FTerm::setPalette);
|
||||
FTerm::setColorPaletteTheme<default8ColorPalette>();
|
||||
|
||||
setColorTheme<default8ColorTheme>();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( getStartOptions().color_change )
|
||||
FTerm::setColorPaletteTheme<default16ColorPalette>(&FTerm::setPalette);
|
||||
FTerm::setColorPaletteTheme<default16ColorPalette>();
|
||||
|
||||
setColorTheme<default16ColorTheme>();
|
||||
}
|
||||
|
@ -305,7 +298,7 @@ void FApplication::setDefaultTheme()
|
|||
void FApplication::setDarkTheme()
|
||||
{
|
||||
if ( getStartOptions().color_change )
|
||||
FTerm::setColorPaletteTheme<default16DarkColorPalette>(&FTerm::setPalette);
|
||||
FTerm::setColorPaletteTheme<default16DarkColorPalette>();
|
||||
|
||||
if ( FTerm::getMaxColor() < 16 ) // for 8 color mode
|
||||
setColorTheme<default8ColorDarkTheme>();
|
||||
|
@ -313,56 +306,6 @@ void FApplication::setDarkTheme()
|
|||
setColorTheme<default16ColorDarkTheme>();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::showParameterUsage()
|
||||
{
|
||||
std::cout \
|
||||
<< "Generic options:\n"
|
||||
<< " -h, --help "
|
||||
<< " Display this help and exit\n"
|
||||
<< "\n"
|
||||
<< "The Final Cut options:\n"
|
||||
<< " --encoding <name> "
|
||||
<< " Sets the character encoding mode\n"
|
||||
<< " "
|
||||
<< " {utf8, vt100, pc, ascii}\n"
|
||||
<< " --no-mouse "
|
||||
<< " Disable mouse support\n"
|
||||
<< " --no-optimized-cursor "
|
||||
<< " Disable cursor optimization\n"
|
||||
<< " --no-terminal-detection "
|
||||
<< " Disable terminal detection\n"
|
||||
<< " --no-terminal-data-request"
|
||||
<< " Do not determine terminal font and title\n"
|
||||
<< " --no-color-change "
|
||||
<< " Do not redefine the color palette\n"
|
||||
<< " --no-sgr-optimizer "
|
||||
<< " Do not optimize SGR sequences\n"
|
||||
<< " --vgafont "
|
||||
<< " Set the standard vga 8x16 font\n"
|
||||
<< " --newfont "
|
||||
<< " Enables the graphical font\n"
|
||||
<< " --dark-theme "
|
||||
<< " Enables the dark theme\n"
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
<< "\n"
|
||||
<< "FreeBSD console options:\n"
|
||||
<< " --no-esc-for-alt-meta "
|
||||
<< " Do not send a ESC prefix for the alt/meta key\n"
|
||||
<< " --no-cursorstyle-change "
|
||||
<< " Do not change the current cursor style\n"
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
<< "\n"
|
||||
<< "NetBSD/OpenBSD console options:\n"
|
||||
<< " --no-esc-for-alt-meta "
|
||||
<< " Do not send a ESC prefix for the alt/meta key\n"
|
||||
#endif
|
||||
|
||||
<< std::endl; // newline character + flushes the output stream
|
||||
std::exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::closeConfirmationDialog (FWidget* w, FCloseEvent* ev)
|
||||
{
|
||||
|
@ -384,10 +327,24 @@ void FApplication::closeConfirmationDialog (FWidget* w, FCloseEvent* ev)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// protected methods of FApplication
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processExternalUserEvent()
|
||||
{
|
||||
// This method can be overloaded and replaced by own code
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
}
|
||||
|
||||
|
||||
// private methods of FApplication
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::init (uInt64 key_time, uInt64 dblclick_time)
|
||||
void FApplication::init()
|
||||
{
|
||||
// Initialize the last event time
|
||||
time_last_event.tv_sec = 0;
|
||||
time_last_event.tv_usec = 0;
|
||||
|
||||
// Initialize keyboard
|
||||
keyboard = FTerm::getFKeyboard();
|
||||
|
||||
|
@ -403,7 +360,7 @@ void FApplication::init (uInt64 key_time, uInt64 dblclick_time)
|
|||
keyboard->setPressCommand (key_cmd1);
|
||||
keyboard->setReleaseCommand (key_cmd2);
|
||||
keyboard->setEscPressedCommand (key_cmd3);
|
||||
keyboard->setKeypressTimeout (key_time);
|
||||
keyboard->setKeypressTimeout (key_timeout);
|
||||
}
|
||||
|
||||
// Initialize mouse control
|
||||
|
@ -415,12 +372,61 @@ void FApplication::init (uInt64 key_time, uInt64 dblclick_time)
|
|||
|
||||
// Set the default double click interval
|
||||
if ( mouse )
|
||||
mouse->setDblclickInterval (dblclick_time);
|
||||
mouse->setDblclickInterval (dblclick_interval);
|
||||
|
||||
// Initialize logging
|
||||
if ( ! getStartOptions().logfile_stream.is_open() )
|
||||
getLog()->setLineEnding(FLog::CRLF);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::setTerminalEncoding (const FString& enc_str)
|
||||
{
|
||||
const FString& enc = enc_str.toLower();
|
||||
|
||||
if ( enc.includes("utf8") )
|
||||
getStartOptions().encoding = fc::UTF8;
|
||||
else if ( enc.includes("vt100") )
|
||||
getStartOptions().encoding = fc::VT100;
|
||||
else if ( enc.includes("pc") )
|
||||
getStartOptions().encoding = fc::PC;
|
||||
else if ( enc.includes("ascii") )
|
||||
getStartOptions().encoding = fc::ASCII;
|
||||
else if ( enc.includes("help") )
|
||||
showParameterUsage();
|
||||
else
|
||||
{
|
||||
auto ftermdata = FTerm::getFTermData();
|
||||
ftermdata->setExitMessage ( "Unknown encoding \"" + enc_str
|
||||
+ "\"\n(Valid encodings are utf8, "
|
||||
+ "vt100, pc and ascii)" );
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::setLogFile (const FString& filename)
|
||||
{
|
||||
auto& log_stream = getStartOptions().logfile_stream;
|
||||
log_stream.open(filename, std::ofstream::out);
|
||||
|
||||
if ( log_stream.is_open() )
|
||||
{
|
||||
// Get the global logger object
|
||||
FLog& log = *FApplication::getLog();
|
||||
log.setOutputStream(log_stream);
|
||||
log.enableTimestamp();
|
||||
log.setLineEnding (finalcut::FLog::LF);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto ftermdata = FTerm::getFTermData();
|
||||
ftermdata->setExitMessage ( "Could not open log file \""
|
||||
+ filename + "\"" );
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::cmd_options (const int& argc, char* argv[])
|
||||
{
|
||||
|
@ -431,6 +437,7 @@ void FApplication::cmd_options (const int& argc, char* argv[])
|
|||
static struct option long_options[] =
|
||||
{
|
||||
{"encoding", required_argument, nullptr, 0 },
|
||||
{"log-file", required_argument, nullptr, 0 },
|
||||
{"no-mouse", no_argument, nullptr, 0 },
|
||||
{"no-optimized-cursor", no_argument, nullptr, 0 },
|
||||
{"no-terminal-detection", no_argument, nullptr, 0 },
|
||||
|
@ -461,24 +468,10 @@ void FApplication::cmd_options (const int& argc, char* argv[])
|
|||
if ( c == 0 )
|
||||
{
|
||||
if ( std::strcmp(long_options[idx].name, "encoding") == 0 )
|
||||
{
|
||||
FString encoding{optarg};
|
||||
encoding = encoding.toLower();
|
||||
setTerminalEncoding(FString(optarg));
|
||||
|
||||
if ( encoding.includes("utf8") )
|
||||
getStartOptions().encoding = fc::UTF8;
|
||||
else if ( encoding.includes("vt100") )
|
||||
getStartOptions().encoding = fc::VT100;
|
||||
else if ( encoding.includes("pc") )
|
||||
getStartOptions().encoding = fc::PC;
|
||||
else if ( encoding.includes("ascii") )
|
||||
getStartOptions().encoding = fc::ASCII;
|
||||
else if ( encoding.includes("help") )
|
||||
showParameterUsage();
|
||||
else
|
||||
FTerm::exitWithMessage ( "Unknown encoding "
|
||||
+ std::string(encoding.c_str()) );
|
||||
}
|
||||
if ( std::strcmp(long_options[idx].name, "log-file") == 0 )
|
||||
setLogFile(FString(optarg));
|
||||
|
||||
if ( std::strcmp(long_options[idx].name, "no-mouse") == 0 )
|
||||
getStartOptions().mouse_support = false;
|
||||
|
@ -527,6 +520,57 @@ inline FStartOptions& FApplication::getStartOptions()
|
|||
return FStartOptions::getFStartOptions();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::showParameterUsage()
|
||||
{
|
||||
std::cout \
|
||||
<< "Generic options:\n"
|
||||
<< " -h, --help "
|
||||
<< " Display this help and exit\n"
|
||||
<< "\n"
|
||||
<< "FINAL CUT options:\n"
|
||||
<< " --encoding=<MODE> "
|
||||
<< " Sets the character encoding mode\n"
|
||||
<< " "
|
||||
<< " {utf8, vt100, pc, ascii}\n"
|
||||
<< " --log-file=<FILE> "
|
||||
<< " Writes log output to FILE\n"
|
||||
<< " --no-mouse "
|
||||
<< " Disable mouse support\n"
|
||||
<< " --no-optimized-cursor "
|
||||
<< " Disable cursor optimization\n"
|
||||
<< " --no-terminal-detection "
|
||||
<< " Disable terminal detection\n"
|
||||
<< " --no-terminal-data-request"
|
||||
<< " Do not determine terminal font and title\n"
|
||||
<< " --no-color-change "
|
||||
<< " Do not redefine the color palette\n"
|
||||
<< " --no-sgr-optimizer "
|
||||
<< " Do not optimize SGR sequences\n"
|
||||
<< " --vgafont "
|
||||
<< " Set the standard vga 8x16 font\n"
|
||||
<< " --newfont "
|
||||
<< " Enables the graphical font\n"
|
||||
<< " --dark-theme "
|
||||
<< " Enables the dark theme\n"
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
<< "\n"
|
||||
<< "FreeBSD console options:\n"
|
||||
<< " --no-esc-for-alt-meta "
|
||||
<< " Do not send a ESC prefix for the alt/meta key\n"
|
||||
<< " --no-cursorstyle-change "
|
||||
<< " Do not change the current cursor style\n"
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
<< "\n"
|
||||
<< "NetBSD/OpenBSD console options:\n"
|
||||
<< " --no-esc-for-alt-meta "
|
||||
<< " Do not send a ESC prefix for the alt/meta key\n"
|
||||
#endif
|
||||
|
||||
<< std::endl; // newline character + flushes the output stream
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FApplication::destroyLog()
|
||||
{
|
||||
|
@ -535,7 +579,7 @@ inline void FApplication::destroyLog()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FApplication::findKeyboardWidget()
|
||||
inline void FApplication::findKeyboardWidget() const
|
||||
{
|
||||
// Find the widget that has the keyboard focus
|
||||
|
||||
|
@ -577,13 +621,13 @@ void FApplication::keyPressed()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::keyReleased()
|
||||
void FApplication::keyReleased() const
|
||||
{
|
||||
sendKeyUpEvent (keyboard_widget);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::escapeKeyPressed()
|
||||
void FApplication::escapeKeyPressed() const
|
||||
{
|
||||
sendEscapeKeyPressEvent();
|
||||
}
|
||||
|
@ -639,7 +683,7 @@ inline void FApplication::performKeyboardAction()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FApplication::sendEscapeKeyPressEvent()
|
||||
inline void FApplication::sendEscapeKeyPressEvent() const
|
||||
{
|
||||
// Send an escape key press event
|
||||
FKeyEvent k_press_ev (fc::KeyPress_Event, fc::Fkey_escape);
|
||||
|
@ -647,7 +691,7 @@ inline void FApplication::sendEscapeKeyPressEvent()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FApplication::sendKeyDownEvent (FWidget* widget)
|
||||
inline bool FApplication::sendKeyDownEvent (FWidget* widget) const
|
||||
{
|
||||
// Send key down event
|
||||
FKeyEvent k_down_ev (fc::KeyDown_Event, keyboard->getKey());
|
||||
|
@ -656,7 +700,7 @@ inline bool FApplication::sendKeyDownEvent (FWidget* widget)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FApplication::sendKeyPressEvent (FWidget* widget)
|
||||
inline bool FApplication::sendKeyPressEvent (FWidget* widget) const
|
||||
{
|
||||
// Send key press event
|
||||
FKeyEvent k_press_ev (fc::KeyPress_Event, keyboard->getKey());
|
||||
|
@ -665,7 +709,7 @@ inline bool FApplication::sendKeyPressEvent (FWidget* widget)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FApplication::sendKeyUpEvent (FWidget* widget)
|
||||
inline bool FApplication::sendKeyUpEvent (FWidget* widget) const
|
||||
{
|
||||
// Send key up event
|
||||
FKeyEvent k_up_ev (fc::KeyUp_Event, keyboard->getKey());
|
||||
|
@ -674,7 +718,7 @@ inline bool FApplication::sendKeyUpEvent (FWidget* widget)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FApplication::sendKeyboardAccelerator()
|
||||
inline void FApplication::sendKeyboardAccelerator() const
|
||||
{
|
||||
if ( FWidget::getOpenMenu() )
|
||||
return;
|
||||
|
@ -702,7 +746,7 @@ inline void FApplication::sendKeyboardAccelerator()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processKeyboardEvent()
|
||||
void FApplication::processKeyboardEvent() const
|
||||
{
|
||||
if ( quit_now || app_exit_loop )
|
||||
return;
|
||||
|
@ -717,7 +761,7 @@ void FApplication::processKeyboardEvent()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::processDialogSwitchAccelerator()
|
||||
bool FApplication::processDialogSwitchAccelerator() const
|
||||
{
|
||||
if ( keyboard->getKey() >= fc::Fmkey_1
|
||||
&& keyboard->getKey() <= fc::Fmkey_9 )
|
||||
|
@ -748,7 +792,7 @@ bool FApplication::processDialogSwitchAccelerator()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::processAccelerator (const FWidget* const& widget)
|
||||
bool FApplication::processAccelerator (const FWidget* const& widget) const
|
||||
{
|
||||
bool accpt{false};
|
||||
|
||||
|
@ -786,7 +830,7 @@ bool FApplication::processAccelerator (const FWidget* const& widget)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::getMouseEvent()
|
||||
bool FApplication::getMouseEvent() const
|
||||
{
|
||||
bool mouse_event_occurred{false};
|
||||
|
||||
|
@ -834,7 +878,7 @@ FWidget*& FApplication::determineClickedWidget()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::unsetMoveSizeMode()
|
||||
void FApplication::unsetMoveSizeMode() const
|
||||
{
|
||||
// Unset the move/size mode
|
||||
|
||||
|
@ -849,7 +893,7 @@ void FApplication::unsetMoveSizeMode()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::closeDropDown()
|
||||
void FApplication::closeDropDown() const
|
||||
{
|
||||
// Close the open menu
|
||||
|
||||
|
@ -861,7 +905,7 @@ void FApplication::closeDropDown()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::unselectMenubarItems()
|
||||
void FApplication::unselectMenubarItems() const
|
||||
{
|
||||
// Unselect the menu bar items
|
||||
|
||||
|
@ -897,7 +941,7 @@ void FApplication::unselectMenubarItems()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::sendMouseEvent()
|
||||
void FApplication::sendMouseEvent() const
|
||||
{
|
||||
auto clicked = FWidget::getClickedWidget();
|
||||
|
||||
|
@ -936,7 +980,7 @@ void FApplication::sendMouseEvent()
|
|||
//----------------------------------------------------------------------
|
||||
void FApplication::sendMouseMoveEvent ( const FPoint& widgetMousePos
|
||||
, const FPoint& mouse_position
|
||||
, int key_state )
|
||||
, int key_state ) const
|
||||
{
|
||||
if ( ! mouse )
|
||||
return;
|
||||
|
@ -974,7 +1018,7 @@ void FApplication::sendMouseMoveEvent ( const FPoint& widgetMousePos
|
|||
//----------------------------------------------------------------------
|
||||
void FApplication::sendMouseLeftClickEvent ( const FPoint& widgetMousePos
|
||||
, const FPoint& mouse_position
|
||||
, int key_state )
|
||||
, int key_state ) const
|
||||
{
|
||||
if ( ! mouse )
|
||||
return;
|
||||
|
@ -1016,7 +1060,7 @@ void FApplication::sendMouseLeftClickEvent ( const FPoint& widgetMousePos
|
|||
//----------------------------------------------------------------------
|
||||
void FApplication::sendMouseRightClickEvent ( const FPoint& widgetMousePos
|
||||
, const FPoint& mouse_position
|
||||
, int key_state )
|
||||
, int key_state ) const
|
||||
{
|
||||
if ( ! mouse )
|
||||
return;
|
||||
|
@ -1050,7 +1094,7 @@ void FApplication::sendMouseRightClickEvent ( const FPoint& widgetMousePos
|
|||
//----------------------------------------------------------------------
|
||||
void FApplication::sendMouseMiddleClickEvent ( const FPoint& widgetMousePos
|
||||
, const FPoint& mouse_position
|
||||
, int key_state )
|
||||
, int key_state ) const
|
||||
{
|
||||
if ( ! mouse )
|
||||
return;
|
||||
|
@ -1089,7 +1133,7 @@ void FApplication::sendMouseMiddleClickEvent ( const FPoint& widgetMousePos
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::sendWheelEvent ( const FPoint& widgetMousePos
|
||||
, const FPoint& mouse_position )
|
||||
, const FPoint& mouse_position ) const
|
||||
{
|
||||
if ( ! mouse )
|
||||
return;
|
||||
|
@ -1119,6 +1163,20 @@ void FApplication::sendWheelEvent ( const FPoint& widgetMousePos
|
|||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FWidget* FApplication::processParameters (const int& argc, char* argv[])
|
||||
{
|
||||
if ( argc > 0 && argv[1] && ( std::strcmp(argv[1], "--help") == 0
|
||||
|| std::strcmp(argv[1], "-h") == 0 ) )
|
||||
{
|
||||
showParameterUsage();
|
||||
FApplication::exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
cmd_options (argc, argv);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processMouseEvent()
|
||||
{
|
||||
|
@ -1136,7 +1194,7 @@ void FApplication::processMouseEvent()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processResizeEvent()
|
||||
void FApplication::processResizeEvent() const
|
||||
{
|
||||
if ( ! FTerm::hasChangedTermSize() )
|
||||
return;
|
||||
|
@ -1157,10 +1215,10 @@ void FApplication::processResizeEvent()
|
|||
//----------------------------------------------------------------------
|
||||
void FApplication::processCloseWidget()
|
||||
{
|
||||
setTerminalUpdates (FVTerm::stop_terminal_updates);
|
||||
if ( ! getWidgetCloseList() || getWidgetCloseList()->empty() )
|
||||
return;
|
||||
|
||||
if ( getWidgetCloseList() && ! getWidgetCloseList()->empty() )
|
||||
{
|
||||
setTerminalUpdates (FVTerm::stop_terminal_updates);
|
||||
auto iter = getWidgetCloseList()->begin();
|
||||
|
||||
while ( iter != getWidgetCloseList()->end() && *iter )
|
||||
|
@ -1170,13 +1228,11 @@ void FApplication::processCloseWidget()
|
|||
}
|
||||
|
||||
getWidgetCloseList()->clear();
|
||||
}
|
||||
|
||||
setTerminalUpdates (FVTerm::start_terminal_updates);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processLogger()
|
||||
void FApplication::processLogger() const
|
||||
{
|
||||
// Synchronizing the stream buffer with the logging output
|
||||
|
||||
|
@ -1184,23 +1240,37 @@ void FApplication::processLogger()
|
|||
|
||||
if ( ! logger->str().empty() )
|
||||
logger->pubsync();
|
||||
|
||||
logger->flush();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::processNextEvent()
|
||||
{
|
||||
uInt num_events{0};
|
||||
bool is_timeout = isNextEventTimeout();
|
||||
|
||||
if ( is_timeout )
|
||||
{
|
||||
FObject::getCurrentTime (&time_last_event);
|
||||
processKeyboardEvent();
|
||||
processMouseEvent();
|
||||
processResizeEvent();
|
||||
processTerminalUpdate();
|
||||
processCloseWidget();
|
||||
processLogger();
|
||||
updateTerminal();
|
||||
}
|
||||
|
||||
processExternalUserEvent();
|
||||
|
||||
if ( is_timeout )
|
||||
{
|
||||
sendQueuedEvents();
|
||||
num_events += processTimerEvent();
|
||||
uInt64 wait{next_event_wait / 2};
|
||||
std::this_thread::sleep_for(std::chrono::microseconds(wait));
|
||||
}
|
||||
|
||||
return ( num_events > 0 );
|
||||
}
|
||||
|
@ -1266,4 +1336,10 @@ bool FApplication::isEventProcessable ( const FObject* receiver
|
|||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::isNextEventTimeout()
|
||||
{
|
||||
return FObject::isTimeout (&time_last_event, next_event_wait);
|
||||
}
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
|
@ -0,0 +1,126 @@
|
|||
/***********************************************************************
|
||||
* fbusyindicator.cpp - Shows background activity *
|
||||
* *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with this program. If not, see *
|
||||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include "final/fbusyindicator.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FBusyIndicator
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FBusyIndicator::FBusyIndicator (FWidget* parent)
|
||||
: FToolTip{parent}
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FBusyIndicator::~FBusyIndicator() // destructor
|
||||
{ }
|
||||
|
||||
|
||||
// public methods of FBusyIndicator
|
||||
//----------------------------------------------------------------------
|
||||
void FBusyIndicator::start()
|
||||
{
|
||||
running = true;
|
||||
createIndicatorText();
|
||||
show();
|
||||
updateTerminal();
|
||||
flush();
|
||||
addTimer(TIMER);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FBusyIndicator::stop()
|
||||
{
|
||||
delOwnTimers();
|
||||
running = false;
|
||||
hide();
|
||||
updateTerminal();
|
||||
flush();
|
||||
}
|
||||
|
||||
|
||||
// private methods of FBusyIndicator
|
||||
//----------------------------------------------------------------------
|
||||
void FBusyIndicator::init()
|
||||
{
|
||||
FToolTip::hide();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FBusyIndicator::createIndicatorText()
|
||||
{
|
||||
FString line[4]{};
|
||||
|
||||
if ( FTerm::getEncoding() == fc::UTF8 )
|
||||
{
|
||||
const wchar_t (&p)[8] = uni_pattern;
|
||||
line[0] << " " << p[7] << " " << p[0] << " \n";
|
||||
line[1] << " " << p[6] << " " << p[1] << " \n";
|
||||
line[2] << " " << p[5] << " " << p[2] << " \n";
|
||||
line[3] << " " << p[4] << " " << p[3] << " ";
|
||||
}
|
||||
else
|
||||
{
|
||||
const char (&p)[8] = pattern;
|
||||
line[0] << " " << p[7] << " " << p[0] << " \n";
|
||||
line[1] << " " << p[6] << " " << p[1] << " \n";
|
||||
line[2] << " " << p[5] << " " << p[2] << " \n";
|
||||
line[3] << " " << p[4] << " " << p[3] << " ";
|
||||
}
|
||||
|
||||
FString txt{line[0] + line[1] + line[2] + line[3]};
|
||||
FToolTip::setText(txt);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FBusyIndicator::onTimer (finalcut::FTimerEvent*)
|
||||
{
|
||||
// Rotate pattern
|
||||
if ( FTerm::getEncoding() == fc::UTF8 )
|
||||
{
|
||||
const wchar_t last = uni_pattern[7];
|
||||
std::memmove(uni_pattern + 1, uni_pattern , sizeof(wchar_t) * 7);
|
||||
uni_pattern[0] = last;
|
||||
}
|
||||
else
|
||||
{
|
||||
const char last = pattern[7];
|
||||
std::memmove(pattern + 1, pattern , sizeof(char) * 7);
|
||||
pattern[0] = last;
|
||||
}
|
||||
|
||||
// Redraw the rotated pattern
|
||||
createIndicatorText();
|
||||
redraw();
|
||||
updateTerminal();
|
||||
flush();
|
||||
}
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fbutton.cpp - Widget FButton *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -53,7 +53,7 @@ FButton::FButton (const FString& txt, FWidget* parent)
|
|||
FButton::~FButton() // destructor
|
||||
{
|
||||
delAccelerator();
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
// FButton operator
|
||||
|
@ -353,7 +353,7 @@ void FButton::onAccel (FAccelEvent* ev)
|
|||
|
||||
if ( ! hasFocus() )
|
||||
{
|
||||
auto focused_widget = static_cast<FWidget*>(ev->focusedWidget());
|
||||
auto focused_widget = ev->focusedWidget();
|
||||
|
||||
if ( focused_widget && focused_widget->isWidget() )
|
||||
{
|
||||
|
@ -402,8 +402,9 @@ void FButton::onFocusOut (FFocusEvent*)
|
|||
void FButton::init()
|
||||
{
|
||||
const auto& wc = getColorTheme();
|
||||
setForegroundColor (wc->button_active_fg);
|
||||
setBackgroundColor (wc->button_active_bg);
|
||||
button_fg = wc->button_active_fg;
|
||||
button_bg = wc->button_active_bg;
|
||||
resetColors();
|
||||
setShadow();
|
||||
|
||||
if ( ! text.isEmpty() )
|
||||
|
@ -669,7 +670,7 @@ void FButton::draw()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FButton::updateStatusBar()
|
||||
void FButton::updateStatusBar() const
|
||||
{
|
||||
if ( ! getFlags().focus || ! getStatusBar() )
|
||||
return;
|
||||
|
@ -708,7 +709,7 @@ void FButton::updateButtonColor()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FButton::processClick()
|
||||
void FButton::processClick() const
|
||||
{
|
||||
emitCallback("clicked");
|
||||
}
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
* fbuttongroup.cpp - The FButtonGroup widget organizes FToggleButton *
|
||||
* widgets in a group. *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -240,11 +240,11 @@ void FButtonGroup::insert (FToggleButton* button)
|
|||
button->addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &FButtonGroup::cb_buttonToggled)
|
||||
this, &FButtonGroup::cb_buttonToggled,
|
||||
button
|
||||
);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FButtonGroup::remove (FToggleButton* button)
|
||||
{
|
||||
if ( ! button || buttonlist.empty() )
|
||||
|
@ -542,10 +542,8 @@ void FButtonGroup::directFocus()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FButtonGroup::cb_buttonToggled (FWidget* widget, const FDataPtr)
|
||||
void FButtonGroup::cb_buttonToggled (const FToggleButton* button) const
|
||||
{
|
||||
const auto& button = static_cast<FToggleButton*>(widget);
|
||||
|
||||
if ( (button && ! button->isChecked()) || buttonlist.empty() )
|
||||
return;
|
||||
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
/***********************************************************************
|
||||
* fcallback.cpp - Implements the callback functionality *
|
||||
* *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Lesser General Public *
|
||||
* License along with this program. If not, see *
|
||||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include "final/fcallback.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FCallback
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FCallback::FCallback()
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FCallback::~FCallback() // destructor
|
||||
{ }
|
||||
|
||||
|
||||
// public methods of FCallback
|
||||
//----------------------------------------------------------------------
|
||||
void FCallback::delCallback (const FString& cb_signal)
|
||||
{
|
||||
// Deletes entries with the given signal from the callback list
|
||||
|
||||
if ( callback_objects.empty() )
|
||||
return;
|
||||
|
||||
auto iter = callback_objects.begin();
|
||||
|
||||
while ( iter != callback_objects.end() )
|
||||
{
|
||||
if ( iter->cb_signal == cb_signal )
|
||||
iter = callback_objects.erase(iter);
|
||||
else
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FCallback::delCallback()
|
||||
{
|
||||
// Delete all callbacks from this widget
|
||||
|
||||
callback_objects.clear(); // function pointer
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FCallback::emitCallback (const FString& emit_signal) const
|
||||
{
|
||||
// Initiate callback for the given signal
|
||||
|
||||
if ( callback_objects.empty() )
|
||||
return;
|
||||
|
||||
for (auto&& cback : callback_objects)
|
||||
{
|
||||
if ( cback.cb_signal == emit_signal )
|
||||
{
|
||||
// Calling the stored function pointer
|
||||
cback.cb_function();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fcharmap.cpp - Character mapping and encoding *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2019 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fcheckbox.cpp - Widget FCheckBox *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -74,7 +74,7 @@ void FCheckBox::draw()
|
|||
void FCheckBox::drawCheckButton()
|
||||
{
|
||||
print() << FPoint{1, 1};
|
||||
useParentWidgetColor();
|
||||
setColor();
|
||||
|
||||
if ( FTerm::isMonochron() )
|
||||
{
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fcheckmenuitem.cpp - Widget FCheckMenuItem *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -36,14 +36,14 @@ namespace finalcut
|
|||
FCheckMenuItem::FCheckMenuItem (FWidget* parent)
|
||||
: FMenuItem{parent}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FCheckMenuItem::FCheckMenuItem (const FString& txt, FWidget* parent)
|
||||
: FMenuItem{txt, parent}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -53,9 +53,10 @@ FCheckMenuItem::~FCheckMenuItem() // destructor
|
|||
|
||||
// private methods of FCheckMenuItem
|
||||
//----------------------------------------------------------------------
|
||||
void FCheckMenuItem::init (FWidget* parent)
|
||||
void FCheckMenuItem::init()
|
||||
{
|
||||
setCheckable();
|
||||
FWidget* parent = getParentWidget();
|
||||
|
||||
if ( ! parent )
|
||||
return;
|
||||
|
@ -68,7 +69,7 @@ void FCheckMenuItem::init (FWidget* parent)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FCheckMenuItem::processToggle()
|
||||
void FCheckMenuItem::processToggle() const
|
||||
{
|
||||
emitCallback("toggled");
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fcolorpalette.cpp - Define RGB color value for a palette entry *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -42,21 +42,21 @@ FColorPalette::~FColorPalette() // destructor
|
|||
|
||||
// protected methods of FColorPalette
|
||||
//----------------------------------------------------------------------
|
||||
void FColorPalette::setPalette (FColor index, int r, int g, int b)
|
||||
void FColorPalette::setPalette (FColor index, int r, int g, int b) const
|
||||
{
|
||||
set_palette (index, r, g, b);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FColorPalette::setVGAdefaultPalette()
|
||||
void FColorPalette::setVGAdefaultPalette() const
|
||||
{
|
||||
setPalette (fc::Black, 0x00, 0x00, 0x00);
|
||||
setPalette (fc::Blue, 0x00, 0x00, 0xaa);
|
||||
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::Magenta, 0xaa, 0x00, 0xaa);
|
||||
setPalette (fc::Brown, 0xaa, 0xaa, 0x00);
|
||||
setPalette (fc::Brown, 0xaa, 0x55, 0x00);
|
||||
setPalette (fc::LightGray, 0xaa, 0xaa, 0xaa);
|
||||
setPalette (fc::DarkGray, 0x55, 0x55, 0x55);
|
||||
setPalette (fc::LightBlue, 0x55, 0x55, 0xff);
|
||||
|
@ -126,7 +126,7 @@ default16ColorPalette::default16ColorPalette (const FSetPalette& f)
|
|||
default16ColorPalette::~default16ColorPalette()
|
||||
{ }
|
||||
|
||||
// public methods of default8ColorPalette
|
||||
// public methods of default16ColorPalette
|
||||
//----------------------------------------------------------------------
|
||||
void default16ColorPalette::setColorPalette()
|
||||
{
|
||||
|
@ -169,7 +169,7 @@ default16DarkColorPalette::default16DarkColorPalette (const FSetPalette& f)
|
|||
default16DarkColorPalette::~default16DarkColorPalette()
|
||||
{ }
|
||||
|
||||
// public methods of default8ColorPalette
|
||||
// public methods of default16DarkColorPalette
|
||||
//----------------------------------------------------------------------
|
||||
void default16DarkColorPalette::setColorPalette()
|
||||
{
|
||||
|
@ -180,7 +180,7 @@ void default16DarkColorPalette::setColorPalette()
|
|||
setPalette (fc::Red, 0xa5, 0x40, 0x40);
|
||||
setPalette (fc::Magenta, 0xb2, 0x18, 0xb2);
|
||||
setPalette (fc::Brown, 0xe8, 0x87, 0x1f);
|
||||
setPalette (fc::LightGray, 0xd2, 0xd2, 0xd2);
|
||||
setPalette (fc::LightGray, 0xdc, 0xdc, 0xdc);
|
||||
setPalette (fc::DarkGray, 0x27, 0x33, 0x39);
|
||||
setPalette (fc::LightBlue, 0xb0, 0xb0, 0xb8);
|
||||
setPalette (fc::LightGreen, 0x5e, 0xeb, 0x5c);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fcombobox.cpp - Widget FComboBox *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2019-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,6 +20,8 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "final/fapplication.h"
|
||||
#include "final/fcolorpair.h"
|
||||
#include "final/fcombobox.h"
|
||||
|
@ -124,8 +126,11 @@ void FDropDownListBox::init()
|
|||
void FDropDownListBox::draw()
|
||||
{
|
||||
// Fill the background
|
||||
|
||||
const auto& wc = getColorTheme();
|
||||
setColor (wc->menu_active_fg, wc->menu_active_bg);
|
||||
setForegroundColor (wc->list_fg);
|
||||
setBackgroundColor (wc->list_bg);
|
||||
setColor();
|
||||
|
||||
if ( FTerm::isMonochron() )
|
||||
setReverse(true);
|
||||
|
@ -505,19 +510,19 @@ void FComboBox::initCallbacks()
|
|||
input_field.addCallback
|
||||
(
|
||||
"mouse-press",
|
||||
F_METHOD_CALLBACK (this, &FComboBox::cb_inputFieldSwitch)
|
||||
this, &FComboBox::cb_inputFieldSwitch
|
||||
);
|
||||
|
||||
input_field.addCallback
|
||||
(
|
||||
"mouse-move",
|
||||
F_METHOD_CALLBACK (this, &FComboBox::cb_inputFieldHandOver)
|
||||
this, &FComboBox::cb_inputFieldHandOver
|
||||
);
|
||||
|
||||
list_window.list.addCallback
|
||||
(
|
||||
"row-changed",
|
||||
F_METHOD_CALLBACK (this, &FComboBox::cb_setInputField)
|
||||
this, &FComboBox::cb_setInputField
|
||||
);
|
||||
|
||||
for (const auto& signal : {"row-selected", "clicked"})
|
||||
|
@ -525,7 +530,7 @@ void FComboBox::initCallbacks()
|
|||
list_window.list.addCallback
|
||||
(
|
||||
signal,
|
||||
F_METHOD_CALLBACK (this, &FComboBox::cb_closeComboBox)
|
||||
this, &FComboBox::cb_closeComboBox
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -613,19 +618,19 @@ void FComboBox::passEventToListWindow (FMouseEvent* const& ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FComboBox::processClick()
|
||||
void FComboBox::processClick() const
|
||||
{
|
||||
emitCallback("clicked");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FComboBox::processChanged()
|
||||
void FComboBox::processChanged() const
|
||||
{
|
||||
emitCallback("row-changed");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FComboBox::cb_setInputField (const FWidget*, const FDataPtr)
|
||||
void FComboBox::cb_setInputField()
|
||||
{
|
||||
auto& list = list_window.list;
|
||||
const std::size_t index = list.currentItem();
|
||||
|
@ -635,14 +640,14 @@ void FComboBox::cb_setInputField (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FComboBox::cb_closeComboBox (const FWidget*, const FDataPtr)
|
||||
void FComboBox::cb_closeComboBox()
|
||||
{
|
||||
hideDropDown();
|
||||
processClick();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FComboBox::cb_inputFieldSwitch (const FWidget*, const FDataPtr)
|
||||
void FComboBox::cb_inputFieldSwitch()
|
||||
{
|
||||
const auto& mouse = FTerm::getFMouseControl();
|
||||
|
||||
|
@ -674,7 +679,7 @@ void FComboBox::cb_inputFieldSwitch (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FComboBox::cb_inputFieldHandOver (const FWidget*, const FDataPtr)
|
||||
void FComboBox::cb_inputFieldHandOver()
|
||||
{
|
||||
const auto& mouse = FTerm::getFMouseControl();
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fdialog.cpp - Widget FDialog *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -166,7 +166,7 @@ void FDialog::show()
|
|||
|
||||
FWindow::show();
|
||||
|
||||
if ( isModal() )
|
||||
if ( isModal() && ! FApplication::isQuit() )
|
||||
{
|
||||
auto fapp = FApplication::getApplicationObject();
|
||||
fapp->enterLoop();
|
||||
|
@ -873,7 +873,8 @@ void FDialog::initMoveSizeMenuItem (FMenu* menu)
|
|||
move_size_item->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FDialog::cb_move)
|
||||
this,
|
||||
&FDialog::cb_move
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -896,7 +897,8 @@ void FDialog::initZoomMenuItem (FMenu* menu)
|
|||
zoom_item->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FDialog::cb_zoom)
|
||||
this,
|
||||
&FDialog::cb_zoom
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -918,7 +920,8 @@ void FDialog::initCloseMenuItem (FMenu* menu)
|
|||
close_item->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FDialog::cb_close)
|
||||
this,
|
||||
&FDialog::cb_close
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1270,7 +1273,7 @@ void FDialog::setZoomItem()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline std::size_t FDialog::getZoomButtonWidth()
|
||||
inline std::size_t FDialog::getZoomButtonWidth() const
|
||||
{
|
||||
if ( ! isResizeable() )
|
||||
return 0;
|
||||
|
@ -1632,7 +1635,7 @@ void FDialog::delDialog (const FWidget* obj)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FDialog::cb_move (const FWidget*, const FDataPtr)
|
||||
void FDialog::cb_move()
|
||||
{
|
||||
if ( isZoomed() )
|
||||
return;
|
||||
|
@ -1683,7 +1686,7 @@ void FDialog::cb_move (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FDialog::cb_zoom (const FWidget*, const FDataPtr)
|
||||
void FDialog::cb_zoom()
|
||||
{
|
||||
dialog_menu->unselectItem();
|
||||
dialog_menu->hide();
|
||||
|
@ -1694,7 +1697,7 @@ void FDialog::cb_zoom (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FDialog::cb_close (const FWidget*, const FDataPtr)
|
||||
void FDialog::cb_close()
|
||||
{
|
||||
dialog_menu->unselectItem();
|
||||
dialog_menu->hide();
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fdialoglistmenu.cpp - Widget FDialogListMenu *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fevent.cpp - Base event class of widgets *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -235,7 +235,7 @@ void FFocusEvent::ignore()
|
|||
// class FAccelEvent
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
FAccelEvent::FAccelEvent (fc::events ev_type, void* focused) // constructor
|
||||
FAccelEvent::FAccelEvent (fc::events ev_type, FWidget* focused) // constructor
|
||||
: FEvent{ev_type}
|
||||
, focus_widget{focused}
|
||||
{ }
|
||||
|
@ -245,7 +245,7 @@ FAccelEvent::~FAccelEvent() // destructor
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void* FAccelEvent::focusedWidget() const
|
||||
FWidget* FAccelEvent::focusedWidget() const
|
||||
{ return focus_widget; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* ffiledialog.cpp - Widget FFileDialog (a file chooser dialog) *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -201,7 +201,7 @@ void FFileDialog::setPath (const FString& dir)
|
|||
return;
|
||||
}
|
||||
|
||||
if ( fsystem->realpath(dir.c_str(), resolved_path) != nullptr )
|
||||
if ( fsystem && fsystem->realpath(dir.c_str(), resolved_path) != nullptr )
|
||||
r_dir.setString(resolved_path);
|
||||
else
|
||||
r_dir.setString(dir);
|
||||
|
@ -380,43 +380,43 @@ void FFileDialog::initCallbacks()
|
|||
filename.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processActivate)
|
||||
this, &FFileDialog::cb_processActivate
|
||||
);
|
||||
|
||||
filebrowser.addCallback
|
||||
(
|
||||
"row-changed",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processRowChanged)
|
||||
this, &FFileDialog::cb_processRowChanged
|
||||
);
|
||||
|
||||
filebrowser.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processClicked)
|
||||
this, &FFileDialog::cb_processClicked
|
||||
);
|
||||
|
||||
hidden_check.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processShowHidden)
|
||||
this, &FFileDialog::cb_processShowHidden
|
||||
);
|
||||
|
||||
cancel_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processCancel)
|
||||
this, &FFileDialog::cb_processCancel
|
||||
);
|
||||
|
||||
open_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processOpen)
|
||||
this, &FFileDialog::cb_processOpen
|
||||
);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FFileDialog::pattern_match ( const char* const pattern
|
||||
, const char fname[] )
|
||||
inline bool FFileDialog::patternMatch ( const char* const pattern
|
||||
, const char fname[] ) const
|
||||
{
|
||||
char search[128]{};
|
||||
|
||||
|
@ -583,14 +583,14 @@ void FFileDialog::getEntry (const char* const dir, const struct dirent* d_entry)
|
|||
|
||||
if ( entry.directory )
|
||||
dir_entries.push_back (entry);
|
||||
else if ( pattern_match(filter, entry.name.c_str()) )
|
||||
else if ( patternMatch(filter, entry.name.c_str()) )
|
||||
dir_entries.push_back (entry);
|
||||
else
|
||||
entry.name.clear();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::followSymLink (const char* const dir, FDirEntry& entry)
|
||||
void FFileDialog::followSymLink (const char* const dir, FDirEntry& entry) const
|
||||
{
|
||||
if ( ! entry.symbolic_link )
|
||||
return; // No symbolic link
|
||||
|
@ -754,7 +754,7 @@ const FString FFileDialog::getHomeDir()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processActivate (const FWidget*, const FDataPtr)
|
||||
void FFileDialog::cb_processActivate()
|
||||
{
|
||||
if ( filename.getText().includes('*')
|
||||
|| filename.getText().includes('?') )
|
||||
|
@ -803,7 +803,7 @@ void FFileDialog::cb_processActivate (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processRowChanged (const FWidget*, const FDataPtr)
|
||||
void FFileDialog::cb_processRowChanged()
|
||||
{
|
||||
const std::size_t n = filebrowser.currentItem();
|
||||
|
||||
|
@ -821,7 +821,7 @@ void FFileDialog::cb_processRowChanged (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processClicked (const FWidget*, const FDataPtr)
|
||||
void FFileDialog::cb_processClicked()
|
||||
{
|
||||
const uLong n = uLong(filebrowser.currentItem() - 1);
|
||||
|
||||
|
@ -832,19 +832,19 @@ void FFileDialog::cb_processClicked (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processCancel (const FWidget*, const FDataPtr)
|
||||
void FFileDialog::cb_processCancel()
|
||||
{
|
||||
done (FDialog::Reject);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processOpen (const FWidget*, const FDataPtr)
|
||||
void FFileDialog::cb_processOpen()
|
||||
{
|
||||
done (FDialog::Accept);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processShowHidden (const FWidget*, const FDataPtr)
|
||||
void FFileDialog::cb_processShowHidden()
|
||||
{
|
||||
setShowHiddenFiles(! show_hidden);
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fkey_map.cpp - Key name mapping *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2018-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fkeyboard.cpp - Read keyboard events *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2018-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -42,9 +42,11 @@ namespace finalcut
|
|||
{
|
||||
|
||||
// static class attributes
|
||||
uInt64 FKeyboard::read_blocking_time{100000}; // preset to 100 ms
|
||||
uInt64 FKeyboard::key_timeout{100000}; // preset to 100 ms
|
||||
uInt64 FKeyboard::read_blocking_time{100000}; // preset to 100 ms / 10 Hz
|
||||
uInt64 FKeyboard::key_timeout{100000}; // preset to 100 ms / 10 Hz
|
||||
uInt64 FKeyboard::interval_timeout{75000}; // preset to 75 ms / 13.3 Hz
|
||||
struct timeval FKeyboard::time_keypressed{};
|
||||
struct timeval FKeyboard::time_last_request{};
|
||||
|
||||
#if defined(__linux__)
|
||||
FTermLinux* FKeyboard::linux{nullptr};
|
||||
|
@ -62,6 +64,8 @@ FKeyboard::FKeyboard()
|
|||
// Initialize keyboard values
|
||||
time_keypressed.tv_sec = 0;
|
||||
time_keypressed.tv_usec = 0;
|
||||
time_last_request.tv_sec = 0;
|
||||
time_last_request.tv_usec = 0;
|
||||
|
||||
// Get the stdin file status flags
|
||||
stdin_status_flags = fcntl(FTermios::getStdIn(), F_GETFL);
|
||||
|
@ -82,7 +86,7 @@ void FKeyboard::fetchKeyCode()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
const FString FKeyboard::getKeyName (const FKey keynum)
|
||||
const FString FKeyboard::getKeyName (const FKey keynum) const
|
||||
{
|
||||
for (std::size_t i{0}; fc::fkeyname[i].string[0] != 0; i++)
|
||||
if ( fc::fkeyname[i].num && fc::fkeyname[i].num == keynum )
|
||||
|
@ -117,6 +121,9 @@ bool& FKeyboard::unprocessedInput()
|
|||
//----------------------------------------------------------------------
|
||||
bool FKeyboard::isKeyPressed() const
|
||||
{
|
||||
if ( ! isIntervalTimeout() )
|
||||
return false;
|
||||
|
||||
fd_set ifds{};
|
||||
struct timeval tv{};
|
||||
const int stdin_no = FTermios::getStdIn();
|
||||
|
@ -124,7 +131,8 @@ bool FKeyboard::isKeyPressed() const
|
|||
FD_ZERO(&ifds);
|
||||
FD_SET(stdin_no, &ifds);
|
||||
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
|
||||
FObject::getCurrentTime (&time_last_request);
|
||||
const int result = select (stdin_no + 1, &ifds, nullptr, nullptr, &tv);
|
||||
|
||||
if ( result > 0 && FD_ISSET(stdin_no, &ifds) )
|
||||
|
@ -179,7 +187,7 @@ void FKeyboard::escapeKeyHandling()
|
|||
|
||||
// private methods of FKeyboard
|
||||
//----------------------------------------------------------------------
|
||||
inline FKey FKeyboard::getMouseProtocolKey()
|
||||
inline FKey FKeyboard::getMouseProtocolKey() const
|
||||
{
|
||||
// Looking for mouse string in the key buffer
|
||||
|
||||
|
@ -351,13 +359,19 @@ bool FKeyboard::setNonBlockingInput (bool enable)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FKeyboard::isKeypressTimeout()
|
||||
inline bool FKeyboard::isKeypressTimeout()
|
||||
{
|
||||
return FObject::isTimeout (&time_keypressed, key_timeout);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FKey FKeyboard::UTF8decode (const char utf8[])
|
||||
inline bool FKeyboard::isIntervalTimeout()
|
||||
{
|
||||
return FObject::isTimeout (&time_last_request, interval_timeout);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FKey FKeyboard::UTF8decode (const char utf8[]) const
|
||||
{
|
||||
FKey ucs{0}; // Universal coded character
|
||||
constexpr std::size_t max = 4;
|
||||
|
@ -488,7 +502,7 @@ FKey FKeyboard::parseKeyString()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FKey FKeyboard::keyCorrection (const FKey& keycode)
|
||||
FKey FKeyboard::keyCorrection (const FKey& keycode) const
|
||||
{
|
||||
FKey key_correction;
|
||||
|
||||
|
@ -535,19 +549,19 @@ void FKeyboard::substringKeyHandling()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FKeyboard::keyPressed()
|
||||
void FKeyboard::keyPressed() const
|
||||
{
|
||||
keypressed_cmd.execute();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FKeyboard::keyReleased()
|
||||
void FKeyboard::keyReleased() const
|
||||
{
|
||||
keyreleased_cmd.execute();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FKeyboard::escapeKeyPressed()
|
||||
void FKeyboard::escapeKeyPressed() const
|
||||
{
|
||||
escape_key_cmd.execute();
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* flabel.cpp - Widget FLabel *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -83,7 +83,7 @@ FLabel& FLabel::operator << (const wchar_t c)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
const FLabel& FLabel::operator >> (FString& s)
|
||||
const FLabel& FLabel::operator >> (FString& s) const
|
||||
{
|
||||
s += text;
|
||||
return *this;
|
||||
|
@ -100,7 +100,7 @@ void FLabel::setAccelWidget (FWidget* widget)
|
|||
accel_widget->addCallback
|
||||
(
|
||||
"destroy",
|
||||
F_METHOD_CALLBACK (this, &FLabel::cb_accelWidgetDestroyed)
|
||||
this, &FLabel::cb_accelWidgetDestroyed
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -115,6 +115,15 @@ void FLabel::setAlignment (fc::text_alignment align)
|
|||
alignment = align;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FLabel::resetColors()
|
||||
{
|
||||
useParentWidgetColor();
|
||||
const auto& wc = getColorTheme();
|
||||
emphasis_color = wc->label_emphasis_fg;
|
||||
ellipsis_color = wc->label_ellipsis_fg;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FLabel::setEnable (bool enable)
|
||||
{
|
||||
|
@ -212,7 +221,7 @@ void FLabel::onAccel (FAccelEvent* ev)
|
|||
|
||||
if ( ! accel_widget->hasFocus() )
|
||||
{
|
||||
auto focused_widget = static_cast<FWidget*>(ev->focusedWidget());
|
||||
auto focused_widget = ev->focusedWidget();
|
||||
|
||||
if ( focused_widget && focused_widget->isWidget() )
|
||||
{
|
||||
|
@ -235,7 +244,7 @@ void FLabel::onAccel (FAccelEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FLabel::cb_accelWidgetDestroyed (const FWidget*, const FDataPtr)
|
||||
void FLabel::cb_accelWidgetDestroyed()
|
||||
{
|
||||
accel_widget = nullptr;
|
||||
delAccelerator();
|
||||
|
@ -247,6 +256,7 @@ void FLabel::cb_accelWidgetDestroyed (const FWidget*, const FDataPtr)
|
|||
void FLabel::init()
|
||||
{
|
||||
unsetFocusable();
|
||||
resetColors();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -256,7 +266,7 @@ void FLabel::setHotkeyAccelerator()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
std::size_t FLabel::getAlignOffset (const std::size_t length)
|
||||
std::size_t FLabel::getAlignOffset (const std::size_t length) const
|
||||
{
|
||||
const std::size_t width(getWidth());
|
||||
assert ( alignment == fc::alignLeft
|
||||
|
@ -290,8 +300,6 @@ void FLabel::draw()
|
|||
if ( text.isEmpty() )
|
||||
return;
|
||||
|
||||
useParentWidgetColor();
|
||||
|
||||
if ( FTerm::isMonochron() )
|
||||
{
|
||||
setReverse(true);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* flineedit.cpp - Widget FLineEdit *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -88,7 +88,7 @@ FLineEdit& FLineEdit::operator << (const wchar_t c)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
const FLineEdit& FLineEdit::operator >> (FString& s)
|
||||
const FLineEdit& FLineEdit::operator >> (FString& s) const
|
||||
{
|
||||
s += text;
|
||||
return *this;
|
||||
|
@ -405,7 +405,7 @@ void FLineEdit::onMouseUp (FMouseEvent*)
|
|||
{
|
||||
if ( drag_scroll != FLineEdit::noScroll )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = FLineEdit::noScroll;
|
||||
scroll_timer = false;
|
||||
}
|
||||
|
@ -446,7 +446,7 @@ void FLineEdit::onMouseMove (FMouseEvent* ev)
|
|||
|
||||
if ( text_offset == 0 )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = FLineEdit::noScroll;
|
||||
}
|
||||
}
|
||||
|
@ -462,14 +462,14 @@ void FLineEdit::onMouseMove (FMouseEvent* ev)
|
|||
|
||||
if ( cursor_pos == len )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = FLineEdit::noScroll;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// no dragging
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
scroll_timer = false;
|
||||
drag_scroll = FLineEdit::noScroll;
|
||||
}
|
||||
|
@ -544,7 +544,7 @@ void FLineEdit::onAccel (FAccelEvent* ev)
|
|||
|
||||
if ( ! hasFocus() )
|
||||
{
|
||||
auto focused_widget = static_cast<FWidget*>(ev->focusedWidget());
|
||||
auto focused_widget = ev->focusedWidget();
|
||||
|
||||
if ( focused_widget && focused_widget->isWidget() )
|
||||
{
|
||||
|
@ -661,7 +661,7 @@ void FLineEdit::init()
|
|||
bool FLineEdit::hasHotkey() const
|
||||
{
|
||||
if ( label_text.isEmpty() )
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
return label_text.includes('&');
|
||||
}
|
||||
|
@ -787,7 +787,7 @@ inline std::size_t FLineEdit::printPassword()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline std::size_t FLineEdit::getCursorColumnPos()
|
||||
inline std::size_t FLineEdit::getCursorColumnPos() const
|
||||
{
|
||||
if ( input_type == FLineEdit::textfield )
|
||||
{
|
||||
|
@ -1104,7 +1104,7 @@ inline bool FLineEdit::keyInput (FKey key)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline wchar_t FLineEdit::characterFilter (const wchar_t c)
|
||||
inline wchar_t FLineEdit::characterFilter (const wchar_t c) const
|
||||
{
|
||||
if ( input_filter.empty() )
|
||||
return c;
|
||||
|
@ -1130,7 +1130,7 @@ void FLineEdit::processActivate()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FLineEdit::processChanged()
|
||||
void FLineEdit::processChanged() const
|
||||
{
|
||||
emitCallback("changed");
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* flistbox.cpp - Widget FListBox and FListBoxItem *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -95,7 +95,7 @@ FListBox::FListBox (FWidget* parent)
|
|||
//----------------------------------------------------------------------
|
||||
FListBox::~FListBox() // destructor
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
|
||||
|
@ -572,7 +572,7 @@ void FListBox::onFocusOut (FFocusEvent*)
|
|||
getStatusBar()->drawMessage();
|
||||
}
|
||||
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
inc_search.clear();
|
||||
}
|
||||
|
||||
|
@ -644,7 +644,7 @@ void FListBox::adjustSize()
|
|||
|
||||
// private methods of FListBox
|
||||
//----------------------------------------------------------------------
|
||||
inline FString& FListBox::getString (listBoxItems::iterator iter)
|
||||
inline FString FListBox::getString (listBoxItems::iterator iter)
|
||||
{
|
||||
return iter->getText();
|
||||
}
|
||||
|
@ -721,7 +721,6 @@ void FListBox::draw()
|
|||
|
||||
useParentWidgetColor();
|
||||
|
||||
|
||||
if ( FTerm::isMonochron() )
|
||||
setReverse(true);
|
||||
|
||||
|
@ -767,7 +766,7 @@ void FListBox::drawBorder()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::drawScrollbars()
|
||||
void FListBox::drawScrollbars() const
|
||||
{
|
||||
if ( ! hbar->isShown() && isHorizontallyScrollable() )
|
||||
hbar->show();
|
||||
|
@ -1062,7 +1061,7 @@ inline void FListBox::setLineAttributes ( int y
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FListBox::unsetAttributes()
|
||||
inline void FListBox::unsetAttributes() const
|
||||
{
|
||||
if ( FTerm::isMonochron() ) // unset for the last element
|
||||
setReverse(false);
|
||||
|
@ -1121,7 +1120,7 @@ void FListBox::recalculateHorizontalBar (std::size_t len, bool has_brackets)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::recalculateVerticalBar (std::size_t element_count)
|
||||
void FListBox::recalculateVerticalBar (std::size_t element_count) const
|
||||
{
|
||||
const int vmax = ( element_count + 2 > getHeight() )
|
||||
? int(element_count - getHeight() + 2)
|
||||
|
@ -1307,7 +1306,7 @@ void FListBox::dragUp (int mouse_button)
|
|||
|
||||
if ( current == 1 )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = fc::noScroll;
|
||||
}
|
||||
}
|
||||
|
@ -1332,7 +1331,7 @@ void FListBox::dragDown (int mouse_button)
|
|||
|
||||
if ( current == getCount() )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = fc::noScroll;
|
||||
}
|
||||
}
|
||||
|
@ -1340,7 +1339,7 @@ void FListBox::dragDown (int mouse_button)
|
|||
//----------------------------------------------------------------------
|
||||
void FListBox::stopDragScroll()
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = fc::noScroll;
|
||||
scroll_distance = 1;
|
||||
scroll_timer = false;
|
||||
|
@ -1697,25 +1696,25 @@ inline bool FListBox::keyIncSearchInput (FKey key)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::processClick()
|
||||
void FListBox::processClick() const
|
||||
{
|
||||
emitCallback("clicked");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::processSelect()
|
||||
void FListBox::processSelect() const
|
||||
{
|
||||
emitCallback("row-selected");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::processChanged()
|
||||
void FListBox::processChanged() const
|
||||
{
|
||||
emitCallback("row-changed");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::changeOnResize()
|
||||
void FListBox::changeOnResize() const
|
||||
{
|
||||
if ( FTerm::isNewFont() )
|
||||
{
|
||||
|
@ -1744,7 +1743,7 @@ void FListBox::lazyConvert(listBoxItems::iterator iter, int y)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::cb_vbarChange (const FWidget*, const FDataPtr)
|
||||
void FListBox::cb_vbarChange (const FWidget*)
|
||||
{
|
||||
FScrollbar::sType scrollType;
|
||||
const std::size_t current_before = current;
|
||||
|
@ -1815,7 +1814,7 @@ void FListBox::cb_vbarChange (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListBox::cb_hbarChange (const FWidget*, const FDataPtr)
|
||||
void FListBox::cb_hbarChange (const FWidget*)
|
||||
{
|
||||
static constexpr int padding_space = 2; // 1 leading space + 1 trailing space
|
||||
static constexpr int wheel_distance = 4;
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* flistview.cpp - Widget FListView and FListViewItem *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -24,8 +24,10 @@
|
|||
#include <strings.h> // need for strcasecmp
|
||||
#endif
|
||||
|
||||
#include <limits>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "final/emptyfstring.h"
|
||||
|
@ -310,7 +312,7 @@ FObject::iterator FListViewItem::insert (FListViewItem* child)
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
FObject::iterator FListViewItem::insert ( FListViewItem* child
|
||||
, iterator parent_iter )
|
||||
, iterator parent_iter ) const
|
||||
{
|
||||
if ( parent_iter == FListView::getNullIterator() )
|
||||
return FListView::getNullIterator();
|
||||
|
@ -335,7 +337,7 @@ FObject::iterator FListViewItem::insert ( FListViewItem* child
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListViewItem::remove (FListViewItem* item)
|
||||
void FListViewItem::remove (FListViewItem* item) const
|
||||
{
|
||||
if ( item == nullptr || item == *FListView::getNullIterator() )
|
||||
return;
|
||||
|
@ -691,12 +693,12 @@ FListView::FListView (FWidget* parent)
|
|||
//----------------------------------------------------------------------
|
||||
FListView::~FListView() // destructor
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
// public methods of FListView
|
||||
//----------------------------------------------------------------------
|
||||
std::size_t FListView::getCount()
|
||||
std::size_t FListView::getCount() const
|
||||
{
|
||||
int n{0};
|
||||
|
||||
|
@ -1282,12 +1284,11 @@ void FListView::onMouseDoubleClick (FMouseEvent* ev)
|
|||
|
||||
const int mouse_x = ev->getX();
|
||||
const int mouse_y = ev->getY();
|
||||
const std::size_t element_count = getCount();
|
||||
|
||||
if ( mouse_x > 1 && mouse_x < int(getWidth())
|
||||
&& mouse_y > 1 && mouse_y < int(getHeight()) )
|
||||
{
|
||||
if ( first_visible_line.getPosition() + mouse_y - 1 > int(element_count) )
|
||||
if ( first_visible_line.getPosition() + mouse_y - 1 > int(getCount()) )
|
||||
return;
|
||||
|
||||
if ( itemlist.empty() )
|
||||
|
@ -1302,7 +1303,7 @@ void FListView::onMouseDoubleClick (FMouseEvent* ev)
|
|||
else
|
||||
item->expand();
|
||||
|
||||
adjustScrollbars (element_count);
|
||||
adjustScrollbars (getCount()); // after expand or collapse
|
||||
|
||||
if ( isShown() )
|
||||
draw();
|
||||
|
@ -1408,7 +1409,7 @@ void FListView::onFocusOut (FFocusEvent*)
|
|||
getStatusBar()->drawMessage();
|
||||
}
|
||||
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1454,7 +1455,7 @@ void FListView::adjustViewport (const int element_count)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::adjustScrollbars (const std::size_t element_count)
|
||||
void FListView::adjustScrollbars (const std::size_t element_count) const
|
||||
{
|
||||
const std::size_t width = getClientWidth();
|
||||
const std::size_t height = getClientHeight();
|
||||
|
@ -1585,7 +1586,7 @@ void FListView::sort (Compare cmp)
|
|||
//----------------------------------------------------------------------
|
||||
std::size_t FListView::getAlignOffset ( const fc::text_alignment align
|
||||
, const std::size_t column_width
|
||||
, const std::size_t width )
|
||||
, const std::size_t width ) const
|
||||
{
|
||||
assert ( align == fc::alignLeft
|
||||
|| align == fc::alignCenter
|
||||
|
@ -1681,7 +1682,7 @@ void FListView::drawBorder()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::drawScrollbars()
|
||||
void FListView::drawScrollbars() const
|
||||
{
|
||||
if ( ! hbar->isShown() && isHorizontallyScrollable() )
|
||||
hbar->show();
|
||||
|
@ -1892,7 +1893,7 @@ void FListView::clearList()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FListView::setLineAttributes ( bool is_current
|
||||
, bool is_focus )
|
||||
, bool is_focus ) const
|
||||
{
|
||||
const auto& wc = getColorTheme();
|
||||
setColor (wc->list_fg, wc->list_bg);
|
||||
|
@ -1927,7 +1928,7 @@ inline void FListView::setLineAttributes ( bool is_current
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FString FListView::getCheckBox (const FListViewItem* item)
|
||||
inline FString FListView::getCheckBox (const FListViewItem* item) const
|
||||
{
|
||||
FString checkbox{""};
|
||||
|
||||
|
@ -1958,7 +1959,7 @@ inline FString FListView::getCheckBox (const FListViewItem* item)
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline FString FListView::getLinePrefix ( const FListViewItem* item
|
||||
, std::size_t indent )
|
||||
, std::size_t indent ) const
|
||||
{
|
||||
FString line{""};
|
||||
|
||||
|
@ -2286,7 +2287,7 @@ void FListView::recalculateHorizontalBar (std::size_t len)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::recalculateVerticalBar (std::size_t element_count)
|
||||
void FListView::recalculateVerticalBar (std::size_t element_count) const
|
||||
{
|
||||
const std::size_t height = getClientHeight();
|
||||
const int vmax = ( element_count > height )
|
||||
|
@ -2447,7 +2448,7 @@ void FListView::dragUp (int mouse_button)
|
|||
|
||||
if ( current_iter.getPosition() == 0 )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = fc::noScroll;
|
||||
}
|
||||
}
|
||||
|
@ -2472,7 +2473,7 @@ void FListView::dragDown (int mouse_button)
|
|||
|
||||
if ( current_iter.getPosition() - 1 == int(getCount()) )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
drag_scroll = fc::noScroll;
|
||||
}
|
||||
}
|
||||
|
@ -2480,7 +2481,7 @@ void FListView::dragDown (int mouse_button)
|
|||
//----------------------------------------------------------------------
|
||||
void FListView::stopDragScroll()
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
scroll_timer = false;
|
||||
scroll_distance = 1;
|
||||
drag_scroll = fc::noScroll;
|
||||
|
@ -2496,7 +2497,7 @@ FObject::iterator FListView::appendItem (FListViewItem* item)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::processClick()
|
||||
void FListView::processClick() const
|
||||
{
|
||||
if ( itemlist.empty() )
|
||||
return;
|
||||
|
@ -2505,13 +2506,13 @@ void FListView::processClick()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::processChanged()
|
||||
void FListView::processChanged() const
|
||||
{
|
||||
emitCallback("row-changed");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::changeOnResize()
|
||||
void FListView::changeOnResize() const
|
||||
{
|
||||
if ( FTerm::isNewFont() )
|
||||
{
|
||||
|
@ -2855,7 +2856,7 @@ void FListView::scrollBy (int dx, int dy)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::cb_vbarChange (const FWidget*, const FDataPtr)
|
||||
void FListView::cb_vbarChange (const FWidget*)
|
||||
{
|
||||
FScrollbar::sType scrollType = vbar->getScrollType();
|
||||
static constexpr int wheel_distance = 4;
|
||||
|
@ -2922,7 +2923,7 @@ void FListView::cb_vbarChange (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::cb_hbarChange (const FWidget*, const FDataPtr)
|
||||
void FListView::cb_hbarChange (const FWidget*)
|
||||
{
|
||||
FScrollbar::sType scrollType = hbar->getScrollType();
|
||||
static constexpr int wheel_distance = 4;
|
||||
|
|
14
src/flog.cpp
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* flog.cpp - Interface of the FINAL CUT logger *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -45,7 +45,7 @@ FLog::~FLog() // destructor
|
|||
//----------------------------------------------------------------------
|
||||
FLog& FLog::operator << (LogLevel l)
|
||||
{
|
||||
using namespace std::placeholders;
|
||||
using std::placeholders::_1;
|
||||
sync();
|
||||
|
||||
switch ( l )
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* flogger.cpp - The FINAL CUT text logger *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,6 +20,8 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "final/flogger.h"
|
||||
|
||||
namespace finalcut
|
||||
|
@ -42,7 +44,7 @@ FLogger::~FLogger() // destructor
|
|||
// private methods of FLogger
|
||||
//----------------------------------------------------------------------
|
||||
void FLogger::newlineReplace ( std::string& str
|
||||
, const std::string& replace_str )
|
||||
, const std::string& replace_str ) const
|
||||
{
|
||||
std::size_t pos{0};
|
||||
std::size_t npos{std::string::npos};
|
||||
|
@ -56,7 +58,7 @@ void FLogger::newlineReplace ( std::string& str
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
const std::string FLogger::getTimeString()
|
||||
const std::string FLogger::getTimeString() const
|
||||
{
|
||||
char str[100];
|
||||
const auto& now = std::chrono::system_clock::now();
|
||||
|
@ -69,7 +71,7 @@ const std::string FLogger::getTimeString()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
const std::string FLogger::getEOL()
|
||||
const std::string FLogger::getEOL() const
|
||||
{
|
||||
if ( getEnding() == FLog::LF )
|
||||
return "\n";
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fmenu.cpp - Widget FMenu *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -47,7 +47,7 @@ namespace finalcut
|
|||
FMenu::FMenu(FWidget* parent)
|
||||
: FWindow{parent}
|
||||
{
|
||||
init(parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -55,7 +55,7 @@ FMenu::FMenu (const FString& txt, FWidget* parent)
|
|||
: FWindow{parent}
|
||||
, menuitem{txt, parent}
|
||||
{
|
||||
init(parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -327,26 +327,21 @@ void FMenu::onMouseMove (FMouseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::cb_menuitemEnabled (const FWidget*, const FDataPtr)
|
||||
void FMenu::cb_menuitemEnabled()
|
||||
{
|
||||
setEnable();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::cb_menuitemDisabled (const FWidget*, const FDataPtr)
|
||||
void FMenu::cb_menuitemDisabled()
|
||||
{
|
||||
setDisable();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::cb_menuitemToggled (FWidget* widget, const FDataPtr)
|
||||
void FMenu::cb_menuitemToggled (const FMenuItem* m_item) const
|
||||
{
|
||||
const auto& m_item = static_cast<FMenuItem*>(widget);
|
||||
|
||||
if ( ! has_checkable_items )
|
||||
return;
|
||||
|
||||
if ( ! m_item->isChecked() )
|
||||
if ( ! (has_checkable_items && m_item && m_item->isChecked()) )
|
||||
return;
|
||||
|
||||
auto list = getItemList();
|
||||
|
@ -444,7 +439,7 @@ bool FMenu::isMouseOverSuperMenu (const FPoint& termpos)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FMenu::isMouseOverMenuBar (const FPoint& termpos)
|
||||
bool FMenu::isMouseOverMenuBar (const FPoint& termpos) const
|
||||
{
|
||||
if ( getMenuBar()
|
||||
&& isMenuBar(getMenuBar())
|
||||
|
@ -457,7 +452,7 @@ bool FMenu::isMouseOverMenuBar (const FPoint& termpos)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::init(FWidget* parent)
|
||||
void FMenu::init()
|
||||
{
|
||||
setTopPadding(1);
|
||||
setLeftPadding(1);
|
||||
|
@ -469,6 +464,7 @@ void FMenu::init(FWidget* parent)
|
|||
hide();
|
||||
resetColors();
|
||||
menuitem.setMenu(this);
|
||||
FWidget* parent = getParentWidget();
|
||||
|
||||
if ( parent )
|
||||
{
|
||||
|
@ -496,13 +492,13 @@ void FMenu::initCallbacks()
|
|||
menuitem.addCallback
|
||||
(
|
||||
"enable",
|
||||
F_METHOD_CALLBACK (this, &FMenu::cb_menuitemEnabled)
|
||||
this, &FMenu::cb_menuitemEnabled
|
||||
);
|
||||
|
||||
menuitem.addCallback
|
||||
(
|
||||
"disable",
|
||||
F_METHOD_CALLBACK (this, &FMenu::cb_menuitemEnabled)
|
||||
this, &FMenu::cb_menuitemDisabled
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -562,7 +558,7 @@ void FMenu::calculateDimensions()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::adjustItems()
|
||||
void FMenu::adjustItems() const
|
||||
{
|
||||
for (auto&& item : getItemList())
|
||||
{
|
||||
|
@ -584,7 +580,7 @@ void FMenu::adjustItems()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FMenu::adjustX (int x_pos)
|
||||
int FMenu::adjustX (int x_pos) const
|
||||
{
|
||||
// Is menu outside on the right of the screen?
|
||||
if ( x_pos + int(max_item_width) >= int(getDesktopWidth() - 1) )
|
||||
|
@ -656,7 +652,7 @@ void FMenu::hideSubMenus()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::hideSuperMenus()
|
||||
void FMenu::hideSuperMenus() const
|
||||
{
|
||||
// hide all menus to the top
|
||||
auto super = getSuperMenu();
|
||||
|
@ -911,7 +907,7 @@ void FMenu::mouseUpOverBorder()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::mouseMoveOverBorder (mouseStates& ms)
|
||||
void FMenu::mouseMoveOverBorder (mouseStates& ms) const
|
||||
{
|
||||
// Mouse is moved over border or separator line
|
||||
|
||||
|
@ -979,7 +975,7 @@ void FMenu::passEventToSuperMenu (FMouseEvent* const& ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::passEventToMenuBar (FMouseEvent* const& ev)
|
||||
void FMenu::passEventToMenuBar (FMouseEvent* const& ev) const
|
||||
{
|
||||
// Mouse event handover to the menu bar
|
||||
|
||||
|
@ -1144,7 +1140,7 @@ bool FMenu::selectPrevItem()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::keypressMenuBar (FKeyEvent* ev)
|
||||
void FMenu::keypressMenuBar (FKeyEvent* ev) const
|
||||
{
|
||||
auto mbar = getMenuBar();
|
||||
|
||||
|
@ -1428,16 +1424,17 @@ inline void FMenu::drawAcceleratorKey (std::size_t& startpos, FKey accel_key)
|
|||
const FString accel_name {FTerm::getKeyName(accel_key)};
|
||||
const std::size_t c = ( has_checkable_items ) ? 1 : 0;
|
||||
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
|
||||
const std::size_t len = max_item_width - plain_text_length;
|
||||
const FString spaces {len, L' '};
|
||||
print (spaces + accel_name);
|
||||
startpos = max_item_width - (c + 2);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::drawTrailingSpaces (std::size_t startpos)
|
||||
|
@ -1489,7 +1486,7 @@ inline void FMenu::setLineAttributes (const FMenuItem* m_item, int y)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::setCursorToHotkeyPosition (FMenuItem* m_item)
|
||||
inline void FMenu::setCursorToHotkeyPosition (FMenuItem* m_item) const
|
||||
{
|
||||
const bool is_checkable = m_item->checkable;
|
||||
const bool is_selected = m_item->isSelected();
|
||||
|
@ -1615,7 +1612,7 @@ inline void FMenu::closeMenu()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenu::processActivate()
|
||||
void FMenu::processActivate() const
|
||||
{
|
||||
emitCallback("activate");
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fmenubar.cpp - Widget FMenuBar *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -228,17 +228,15 @@ void FMenuBar::onAccel (FAccelEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::cb_itemDeactivated (FWidget* widget, const FDataPtr)
|
||||
void FMenuBar::cb_itemDeactivated (const FMenuItem* menuitem) const
|
||||
{
|
||||
auto menuitem = static_cast<FMenuItem*>(widget);
|
||||
if ( ! menuitem->hasMenu() )
|
||||
return;
|
||||
|
||||
if ( menuitem->hasMenu() )
|
||||
{
|
||||
auto menu = menuitem->getMenu();
|
||||
menu->hide();
|
||||
menu->hideSubMenus();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// private methods of FMenuBar
|
||||
|
@ -263,7 +261,7 @@ void FMenuBar::init()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::calculateDimensions()
|
||||
void FMenuBar::calculateDimensions() const
|
||||
{
|
||||
FPoint item_pos{1, 1};
|
||||
|
||||
|
@ -400,7 +398,7 @@ bool FMenuBar::selectPrevItem()
|
|||
|
||||
setSelectedItem(prev);
|
||||
redraw();
|
||||
setTerminalUpdates (FVTerm::stop_terminal_updates);
|
||||
setTerminalUpdates (FVTerm::start_terminal_updates);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -577,7 +575,7 @@ inline void FMenuBar::setLineAttributes (const FMenuItem* menuitem)
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenuBar::setCursorToHotkeyPosition ( FMenuItem* menuitem
|
||||
, std::size_t hotkeypos )
|
||||
, std::size_t hotkeypos ) const
|
||||
{
|
||||
if ( ! menuitem->isSelected() )
|
||||
return;
|
||||
|
@ -675,7 +673,7 @@ inline void FMenuBar::drawTrailingSpace (std::size_t& x)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::adjustItems()
|
||||
void FMenuBar::adjustItems() const
|
||||
{
|
||||
int item_X = 1;
|
||||
int item_Y = 1;
|
||||
|
@ -928,7 +926,7 @@ void FMenuBar::mouseMoveOverList (const FMouseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::passEventToMenu (const FMouseEvent* const& ev)
|
||||
void FMenuBar::passEventToMenu (const FMouseEvent* const& ev) const
|
||||
{
|
||||
if ( ! hasSelectedItem() || ! getSelectedItem()->hasMenu() )
|
||||
return;
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fmenuitem.cpp - Widget FMenuItem *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -21,6 +21,7 @@
|
|||
***********************************************************************/
|
||||
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "final/fapplication.h"
|
||||
#include "final/fdialog.h"
|
||||
|
@ -44,7 +45,7 @@ namespace finalcut
|
|||
FMenuItem::FMenuItem (FWidget* parent)
|
||||
: FWidget{parent}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -52,7 +53,7 @@ FMenuItem::FMenuItem (const FString& txt, FWidget* parent)
|
|||
: FWidget{parent}
|
||||
, text{txt}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -61,7 +62,7 @@ FMenuItem::FMenuItem (FKey k, const FString& txt, FWidget* parent)
|
|||
, text{txt}
|
||||
, accel_key{k}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -224,7 +225,7 @@ void FMenuItem::delAccelerator (FWidget* obj)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::openMenu()
|
||||
void FMenuItem::openMenu() const
|
||||
{
|
||||
if ( ! hasMenu() )
|
||||
return;
|
||||
|
@ -401,7 +402,7 @@ void FMenuItem::onAccel (FAccelEvent* ev)
|
|||
setSelected();
|
||||
mbar->setSelectedItem(this);
|
||||
openMenu();
|
||||
auto focused_widget = static_cast<FWidget*>(ev->focusedWidget());
|
||||
auto focused_widget = ev->focusedWidget();
|
||||
menu->unselectItem();
|
||||
menu->selectFirstItem();
|
||||
|
||||
|
@ -503,7 +504,7 @@ FMenuList* FMenuItem::getFMenuList (FWidget& widget)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::init (FWidget* parent)
|
||||
void FMenuItem::init()
|
||||
{
|
||||
text_length = text.getLength();
|
||||
text_width = getColumnWidth(text);
|
||||
|
@ -519,6 +520,7 @@ void FMenuItem::init (FWidget* parent)
|
|||
}
|
||||
|
||||
setGeometry (FPoint{1, 1}, FSize{text_width + 2, 1}, false);
|
||||
FWidget* parent = getParentWidget();
|
||||
|
||||
if ( ! parent )
|
||||
return;
|
||||
|
@ -545,7 +547,8 @@ void FMenuItem::init (FWidget* parent)
|
|||
addCallback // for this element
|
||||
(
|
||||
"deactivate",
|
||||
F_METHOD_CALLBACK (menubar_ptr, &FMenuBar::cb_itemDeactivated)
|
||||
std::move(menubar_ptr), &FMenuBar::cb_itemDeactivated,
|
||||
this
|
||||
);
|
||||
}
|
||||
else if ( isMenu(parent) ) // Parent is menu
|
||||
|
@ -566,31 +569,31 @@ void FMenuItem::updateSuperMenuDimensions()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::processEnable()
|
||||
void FMenuItem::processEnable() const
|
||||
{
|
||||
emitCallback("enable");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::processDisable()
|
||||
void FMenuItem::processDisable() const
|
||||
{
|
||||
emitCallback("disable");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::processActivate()
|
||||
void FMenuItem::processActivate() const
|
||||
{
|
||||
emitCallback("activate");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::processDeactivate()
|
||||
void FMenuItem::processDeactivate() const
|
||||
{
|
||||
emitCallback("deactivate");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::createDialogList (FMenu* winmenu)
|
||||
void FMenuItem::createDialogList (FMenu* winmenu) const
|
||||
{
|
||||
winmenu->clear();
|
||||
|
||||
|
@ -627,14 +630,17 @@ void FMenuItem::createDialogList (FMenu* winmenu)
|
|||
win_item->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (win_item, &FMenuItem::cb_switchToDialog),
|
||||
static_cast<FDataPtr>(win)
|
||||
static_cast<std::remove_reference<decltype(win_item)>::type>(win_item),
|
||||
&FMenuItem::cb_switchToDialog,
|
||||
win
|
||||
);
|
||||
|
||||
win->addCallback
|
||||
(
|
||||
"destroy",
|
||||
F_METHOD_CALLBACK (win_item, &FMenuItem::cb_destroyDialog)
|
||||
static_cast<std::remove_reference<decltype(win_item)>::type>(win_item),
|
||||
&FMenuItem::cb_destroyDialog,
|
||||
win
|
||||
);
|
||||
|
||||
win_item->associated_window = win;
|
||||
|
@ -650,7 +656,7 @@ void FMenuItem::createDialogList (FMenu* winmenu)
|
|||
//----------------------------------------------------------------------
|
||||
template <typename T>
|
||||
void FMenuItem::passMouseEvent ( T widget, const FMouseEvent* ev
|
||||
, fc::events ev_type )
|
||||
, fc::events ev_type ) const
|
||||
{
|
||||
if ( ! widget )
|
||||
return;
|
||||
|
@ -694,28 +700,25 @@ void FMenuItem::passMouseEvent ( T widget, const FMouseEvent* ev
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::cb_switchToDialog (const FWidget*, FDataPtr data)
|
||||
void FMenuItem::cb_switchToDialog (FDialog* win) const
|
||||
{
|
||||
auto win = static_cast<FDialog*>(data);
|
||||
if ( ! win )
|
||||
return;
|
||||
|
||||
if ( win )
|
||||
{
|
||||
auto focus = getFocusWidget();
|
||||
FAccelEvent a_ev (fc::Accelerator_Event, focus);
|
||||
FApplication::sendEvent (win, &a_ev);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuItem::cb_destroyDialog (FWidget* widget, const FDataPtr)
|
||||
void FMenuItem::cb_destroyDialog (FDialog* win)
|
||||
{
|
||||
auto win = static_cast<FDialog*>(widget);
|
||||
const auto& fapp = FApplication::getApplicationObject();
|
||||
|
||||
if ( win && fapp )
|
||||
{
|
||||
delAccelerator(win);
|
||||
delCallback(win);
|
||||
delCallback(std::move(win));
|
||||
associated_window = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fmenulist.cpp - Menu item container base class *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fmessagebox.cpp - Widget FMessageBox (a text message window) *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -51,9 +51,10 @@ static const char* const button_text[] =
|
|||
//----------------------------------------------------------------------
|
||||
FMessageBox::FMessageBox (FWidget* parent)
|
||||
: FDialog{parent}
|
||||
, button_digit{FMessageBox::Ok, 0, 0}
|
||||
{
|
||||
setTitlebarText("Message for you");
|
||||
init(FMessageBox::Ok, 0, 0);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -64,14 +65,15 @@ FMessageBox::FMessageBox (const FMessageBox& mbox)
|
|||
, text_components{mbox.text_components}
|
||||
, max_line_width{mbox.max_line_width}
|
||||
, emphasis_color{mbox.emphasis_color}
|
||||
, button_digit{mbox.button_digit[0],
|
||||
mbox.button_digit[1],
|
||||
mbox.button_digit[2]}
|
||||
, num_buttons{mbox.num_buttons}
|
||||
, text_num_lines{mbox.text_num_lines}
|
||||
, center_text{mbox.center_text}
|
||||
{
|
||||
setTitlebarText (mbox.getTitlebarText());
|
||||
init ( mbox.button_digit[0]
|
||||
, mbox.button_digit[1]
|
||||
, mbox.button_digit[2] );
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -83,9 +85,10 @@ FMessageBox::FMessageBox ( const FString& caption
|
|||
, FWidget* parent )
|
||||
: FDialog{parent}
|
||||
, text{message}
|
||||
, button_digit{button0, button1, button2}
|
||||
{
|
||||
setTitlebarText(caption);
|
||||
init(button0, button1, button2);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -105,12 +108,14 @@ FMessageBox& FMessageBox::operator = (const FMessageBox& mbox)
|
|||
}
|
||||
else
|
||||
{
|
||||
for (uInt n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
if ( button[n] )
|
||||
delete button[n];
|
||||
|
||||
if ( mbox.getParentWidget() )
|
||||
mbox.getParentWidget()->addChild (this);
|
||||
|
||||
setTitlebarText (mbox.getTitlebarText());
|
||||
headline_text = mbox.headline_text;
|
||||
text = mbox.text;
|
||||
text_components = mbox.text_components;
|
||||
|
@ -119,11 +124,10 @@ FMessageBox& FMessageBox::operator = (const FMessageBox& mbox)
|
|||
emphasis_color = mbox.emphasis_color;
|
||||
num_buttons = mbox.num_buttons;
|
||||
text_num_lines = mbox.text_num_lines;
|
||||
|
||||
setTitlebarText (mbox.getTitlebarText());
|
||||
init ( mbox.button_digit[0]
|
||||
, mbox.button_digit[1]
|
||||
, mbox.button_digit[2] );
|
||||
button_digit[0] = mbox.button_digit[0];
|
||||
button_digit[1] = mbox.button_digit[1];
|
||||
button_digit[2] = mbox.button_digit[2];
|
||||
init();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
@ -135,7 +139,8 @@ void FMessageBox::setHeadline (const FString& headline)
|
|||
headline_text.setString(headline);
|
||||
setHeight(getHeight() + 2, true);
|
||||
|
||||
for (uInt n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
if ( button[n] )
|
||||
button[n]->setY (int(getHeight()) - 4, false);
|
||||
|
||||
const std::size_t column_width = getColumnWidth(headline_text);
|
||||
|
@ -149,12 +154,14 @@ void FMessageBox::setText (const FString& txt)
|
|||
{
|
||||
text.setString(txt);
|
||||
calculateDimensions();
|
||||
|
||||
if ( button[0] )
|
||||
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);
|
||||
|
||||
if ( button_digit[2] != 0 )
|
||||
if ( button[2] && button_digit[2] != 0 )
|
||||
button[2]->setY (int(getHeight()) - 4, false);
|
||||
|
||||
adjustButtons();
|
||||
|
@ -188,39 +195,35 @@ void FMessageBox::adjustSize()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMessageBox::cb_processClick (const FWidget*, FDataPtr data)
|
||||
void FMessageBox::cb_processClick (int reply)
|
||||
{
|
||||
const int reply = *(static_cast<int*>(data));
|
||||
done(reply);
|
||||
}
|
||||
|
||||
|
||||
// private methods of FMessageBox
|
||||
//----------------------------------------------------------------------
|
||||
void FMessageBox::init (int button0, int button1, int button2)
|
||||
void FMessageBox::init()
|
||||
{
|
||||
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 )
|
||||
button0 = FMessageBox::Ok;
|
||||
if ( button_digit[0] == 0 )
|
||||
button_digit[0] = FMessageBox::Ok;
|
||||
|
||||
if ( button1 == 0 && button2 == 0 )
|
||||
if ( button_digit[1] == 0 && button_digit[2] == 0 )
|
||||
num_buttons = 1;
|
||||
else if ( button2 == 0 )
|
||||
else if ( button_digit[2] == 0 )
|
||||
num_buttons = 2;
|
||||
else
|
||||
num_buttons = 3;
|
||||
|
||||
button_digit[0] = button0;
|
||||
button_digit[1] = button1;
|
||||
button_digit[2] = button2;
|
||||
|
||||
allocation (button0, button1, button2);
|
||||
allocation();
|
||||
resizeButtons();
|
||||
adjustButtons();
|
||||
initCallbacks();
|
||||
|
@ -228,30 +231,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
|
||||
{
|
||||
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]->setWidth(1, false);
|
||||
button[0]->setHeight(1, false);
|
||||
button[0]->setFocus();
|
||||
|
||||
if ( button1 > 0 )
|
||||
if ( button_digit[1] > 0 )
|
||||
{
|
||||
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]->setWidth(0, false);
|
||||
button[1]->setHeight(1, false);
|
||||
}
|
||||
|
||||
if ( button2 > 0 )
|
||||
if ( button_digit[2] > 0 )
|
||||
{
|
||||
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]->setWidth(0, false);
|
||||
button[2]->setHeight(1, false);
|
||||
|
@ -267,40 +270,41 @@ inline void FMessageBox::allocation (int button0, int button1, int button2)
|
|||
//----------------------------------------------------------------------
|
||||
inline void FMessageBox::deallocation()
|
||||
{
|
||||
for (uInt n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
if ( button[n] )
|
||||
delete button[n];
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMessageBox::initCallbacks()
|
||||
{
|
||||
if ( button_digit[0] != 0 )
|
||||
if ( button[0] && button_digit[0] != 0 )
|
||||
{
|
||||
button[0]->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FMessageBox::cb_processClick),
|
||||
static_cast<FDataPtr>(&button_digit[0])
|
||||
this, &FMessageBox::cb_processClick,
|
||||
button_digit[0]
|
||||
);
|
||||
}
|
||||
|
||||
if ( button_digit[1] != 0 )
|
||||
if ( button[1] && button_digit[1] != 0 )
|
||||
{
|
||||
button[1]->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FMessageBox::cb_processClick),
|
||||
static_cast<FDataPtr>(&button_digit[1])
|
||||
this, &FMessageBox::cb_processClick,
|
||||
button_digit[1]
|
||||
);
|
||||
}
|
||||
|
||||
if ( button_digit[2] != 0 )
|
||||
if ( button[2] && button_digit[2] != 0 )
|
||||
{
|
||||
button[2]->addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FMessageBox::cb_processClick),
|
||||
static_cast<FDataPtr>(&button_digit[2])
|
||||
this, &FMessageBox::cb_processClick,
|
||||
button_digit[2]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -382,13 +386,16 @@ void FMessageBox::draw()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMessageBox::resizeButtons()
|
||||
void FMessageBox::resizeButtons() const
|
||||
{
|
||||
std::size_t len[3]{};
|
||||
std::size_t max_size{};
|
||||
|
||||
for (std::size_t n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
{
|
||||
if ( ! button[n] )
|
||||
continue;
|
||||
|
||||
len[n] = button[n]->getText().getLength();
|
||||
|
||||
if ( button[n]->getText().includes('&') )
|
||||
|
@ -409,7 +416,8 @@ void FMessageBox::resizeButtons()
|
|||
if ( max_size < 7 )
|
||||
max_size = 7;
|
||||
|
||||
for (std::size_t n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
if ( button[n] )
|
||||
button[n]->setWidth(max_size + 3, false);
|
||||
}
|
||||
|
||||
|
@ -419,8 +427,11 @@ void FMessageBox::adjustButtons()
|
|||
static constexpr std::size_t gap = 4;
|
||||
std::size_t btn_width{0};
|
||||
|
||||
for (std::size_t n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
{
|
||||
if ( ! button[n] )
|
||||
continue;
|
||||
|
||||
if ( n == num_buttons - 1 )
|
||||
btn_width += button[n]->getWidth();
|
||||
else
|
||||
|
@ -438,8 +449,11 @@ void FMessageBox::adjustButtons()
|
|||
|
||||
const int btn_x = int((getWidth() - btn_width) / 2);
|
||||
|
||||
for (std::size_t n{0}; n < num_buttons; n++)
|
||||
for (std::size_t n{0}; n < num_buttons && n < MAX_BUTTONS; n++)
|
||||
{
|
||||
if ( ! button[n] )
|
||||
continue;
|
||||
|
||||
if ( n == 0 )
|
||||
button[n]->setX(btn_x);
|
||||
else
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fmouse.cpp - Read mouse events *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2018-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,12 +20,13 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <new>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "final/fconfig.h"
|
||||
#include "final/fkeyboard.h"
|
||||
|
@ -59,7 +60,7 @@ const FString FMouse::getClassName() const
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const FPoint& FMouse::getPos()
|
||||
inline const FPoint& FMouse::getPos() const
|
||||
{
|
||||
return mouse;
|
||||
}
|
||||
|
@ -89,7 +90,7 @@ inline void FMouse::setDblclickInterval (const uInt64 timeout)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMouse::hasEvent()
|
||||
inline bool FMouse::hasEvent() const
|
||||
{
|
||||
return mouse_event_occurred;
|
||||
}
|
||||
|
@ -172,45 +173,11 @@ inline bool FMouse::isMoved()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMouse::isInputDataPending()
|
||||
inline bool FMouse::isInputDataPending() const
|
||||
{
|
||||
return input_data_pending;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FMouse* FMouse::createMouseObject (const mouse_type mt)
|
||||
{
|
||||
assert ( mt == FMouse::none
|
||||
|| mt == FMouse::gpm
|
||||
|| mt == FMouse::x11
|
||||
|| mt == FMouse::sgr
|
||||
|| mt == FMouse::urxvt );
|
||||
|
||||
switch ( mt )
|
||||
{
|
||||
case none:
|
||||
return nullptr;
|
||||
|
||||
case gpm:
|
||||
#ifdef F_HAVE_LIBGPM
|
||||
return new FMouseGPM;
|
||||
#else
|
||||
return nullptr;
|
||||
#endif
|
||||
|
||||
case x11:
|
||||
return new FMouseX11;
|
||||
|
||||
case sgr:
|
||||
return new FMouseSGR;
|
||||
|
||||
case urxvt:
|
||||
return new FMouseUrxvt;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMouse::clearButtonState()
|
||||
{
|
||||
|
@ -227,25 +194,25 @@ inline FMouse::FMouseButton& FMouse::getButtonState()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const FPoint& FMouse::getNewPos()
|
||||
inline const FPoint& FMouse::getNewPos() const
|
||||
{
|
||||
return new_mouse_position;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
uInt16 FMouse::getMaxWidth()
|
||||
uInt16 FMouse::getMaxWidth() const
|
||||
{
|
||||
return max_width;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
uInt16 FMouse::getMaxHeight()
|
||||
uInt16 FMouse::getMaxHeight() const
|
||||
{
|
||||
return max_height;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
uInt64 FMouse::getDblclickInterval()
|
||||
uInt64 FMouse::getDblclickInterval() const
|
||||
{
|
||||
return dblclick_interval;
|
||||
}
|
||||
|
@ -294,7 +261,7 @@ void FMouse::setEvent()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FMouse::isDblclickTimeout (const timeval* time)
|
||||
bool FMouse::isDblclickTimeout (const timeval* time) const
|
||||
{
|
||||
return FObject::isTimeout (time, dblclick_interval);
|
||||
}
|
||||
|
@ -349,10 +316,10 @@ void FMouseGPM::processEvent (struct timeval*)
|
|||
if ( Gpm_GetEvent(&gpm_ev) == 1 )
|
||||
{
|
||||
Gpm_FitEvent (&gpm_ev);
|
||||
GPM_DRAWPOINTER(&gpm_ev);
|
||||
|
||||
if ( ! hasSignificantEvents() )
|
||||
{
|
||||
GPM_DRAWPOINTER(&gpm_ev);
|
||||
has_gpm_mouse_data = false;
|
||||
clearEvent();
|
||||
return;
|
||||
|
@ -376,7 +343,6 @@ void FMouseGPM::processEvent (struct timeval*)
|
|||
case GPM_UP:
|
||||
interpretKeyUp();
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -389,7 +355,6 @@ void FMouseGPM::processEvent (struct timeval*)
|
|||
else
|
||||
setPending(false);
|
||||
|
||||
GPM_DRAWPOINTER(&gpm_ev);
|
||||
has_gpm_mouse_data = false;
|
||||
setEvent();
|
||||
return;
|
||||
|
@ -412,9 +377,9 @@ bool FMouseGPM::gpmMouse (bool enable)
|
|||
if ( enable )
|
||||
{
|
||||
Gpm_Connect conn;
|
||||
conn.eventMask = uInt16(~0); // Get all including wheel event
|
||||
conn.defaultMask = GPM_MOVE;
|
||||
conn.maxMod = uInt16(~0);
|
||||
conn.eventMask = GPM_MOVE | GPM_DRAG | GPM_DOWN | GPM_UP;
|
||||
conn.defaultMask = 0;
|
||||
conn.maxMod = 0;
|
||||
conn.minMod = 0;
|
||||
Gpm_Open(&conn, 0);
|
||||
|
||||
|
@ -431,7 +396,7 @@ bool FMouseGPM::gpmMouse (bool enable)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FMouseGPM::hasSignificantEvents()
|
||||
bool FMouseGPM::hasSignificantEvents() const
|
||||
{
|
||||
return ! (gpm_ev.type & GPM_MOVE)
|
||||
|| gpm_ev.wdy != 0
|
||||
|
@ -510,14 +475,14 @@ bool FMouseGPM::getGpmKeyPressed (bool is_pending)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMouseGPM::drawGpmPointer()
|
||||
void FMouseGPM::drawGpmPointer() const
|
||||
{
|
||||
if ( isGpmMouseEnabled() && gpm_ev.x != -1 )
|
||||
GPM_DRAWPOINTER(&gpm_ev);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FMouseGPM::gpmEvent (bool clear)
|
||||
int FMouseGPM::gpmEvent (bool clear) const
|
||||
{
|
||||
const int max = ( gpm_fd > stdin_no ) ? gpm_fd : stdin_no;
|
||||
fd_set ifds{};
|
||||
|
@ -877,7 +842,8 @@ void FMouseSGR::setMoveState (const FPoint& mouse_position, int btn)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMouseSGR::setPressedButtonState (const int btn, const struct timeval* time)
|
||||
void FMouseSGR::setPressedButtonState ( const int btn
|
||||
, const struct timeval* time )
|
||||
{
|
||||
// Gets the extended x11 mouse mode (SGR) status for pressed buttons
|
||||
|
||||
|
@ -1216,12 +1182,12 @@ void FMouseUrxvt::setButtonState (const int btn, const struct timeval* time)
|
|||
FMouseControl::FMouseControl()
|
||||
{
|
||||
#ifdef F_HAVE_LIBGPM
|
||||
mouse_protocol[FMouse::gpm] = FMouse::createMouseObject(FMouse::gpm);
|
||||
mouse_protocol[FMouse::gpm] = FMouse::createMouseObject<FMouseGPM>();
|
||||
#endif
|
||||
|
||||
mouse_protocol[FMouse::x11] = FMouse::createMouseObject(FMouse::x11);
|
||||
mouse_protocol[FMouse::sgr] = FMouse::createMouseObject(FMouse::sgr);
|
||||
mouse_protocol[FMouse::urxvt] = FMouse::createMouseObject(FMouse::urxvt);
|
||||
mouse_protocol[FMouse::x11] = FMouse::createMouseObject<FMouseX11>();
|
||||
mouse_protocol[FMouse::sgr] = FMouse::createMouseObject<FMouseSGR>();
|
||||
mouse_protocol[FMouse::urxvt] = FMouse::createMouseObject<FMouseUrxvt>();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -1632,7 +1598,7 @@ FMouse* FMouseControl::getMouseWithEvent()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMouseControl::xtermMouse (bool enable)
|
||||
void FMouseControl::xtermMouse (bool enable) const
|
||||
{
|
||||
// activate/deactivate the xterm mouse support
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fobject.cpp - Object container base class of all widget objects *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -72,7 +72,7 @@ FObject::FObject (FObject* parent)
|
|||
//----------------------------------------------------------------------
|
||||
FObject::~FObject() // destructor
|
||||
{
|
||||
delOwnTimer(); // Delete all timers of this object
|
||||
delOwnTimers(); // Delete all timers of this object
|
||||
|
||||
if ( ! has_parent && timer_list )
|
||||
{
|
||||
|
@ -307,7 +307,7 @@ int FObject::addTimer (int interval)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FObject::delTimer (int id)
|
||||
bool FObject::delTimer (int id) const
|
||||
{
|
||||
// Deletes a timer by using the timer identifier number
|
||||
|
||||
|
@ -333,7 +333,7 @@ bool FObject::delTimer (int id)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FObject::delOwnTimer()
|
||||
bool FObject::delOwnTimers() const
|
||||
{
|
||||
// Deletes all timers of this object
|
||||
|
||||
|
@ -359,7 +359,7 @@ bool FObject::delOwnTimer()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FObject::delAllTimer()
|
||||
bool FObject::delAllTimers() const
|
||||
{
|
||||
// Deletes all timers of all objects
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* foptiattr.cpp - Sets video attributes in optimized order *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -1239,7 +1239,7 @@ inline bool FOptiAttr::hasColorChanged ( const FChar* const& term
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiAttr::resetColor (FChar*& attr)
|
||||
inline void FOptiAttr::resetColor (FChar*& attr) const
|
||||
{
|
||||
if ( attr )
|
||||
{
|
||||
|
@ -1501,13 +1501,13 @@ inline void FOptiAttr::change_current_color ( const FChar* const& term
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -1515,13 +1515,13 @@ inline void FOptiAttr::change_current_color ( const FChar* const& term
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -1529,13 +1529,13 @@ inline void FOptiAttr::change_current_color ( const FChar* const& term
|
|||
{
|
||||
fg = vga2ansi(fg);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiAttr::resetAttribute (FChar*& attr)
|
||||
inline void FOptiAttr::resetAttribute (FChar*& attr) const
|
||||
{
|
||||
if ( attr )
|
||||
{
|
||||
|
@ -1545,7 +1545,7 @@ inline void FOptiAttr::resetAttribute (FChar*& attr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiAttr::reset (FChar*& attr)
|
||||
inline void FOptiAttr::reset (FChar*& attr) const
|
||||
{
|
||||
if ( attr )
|
||||
{
|
||||
|
@ -1555,7 +1555,7 @@ inline void FOptiAttr::reset (FChar*& attr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FOptiAttr::caused_reset_attributes (const char cap[], uChar test)
|
||||
bool FOptiAttr::caused_reset_attributes (const char cap[], uChar test) const
|
||||
{
|
||||
// test if "cap" reset all attributes
|
||||
|
||||
|
@ -1648,14 +1648,14 @@ inline void FOptiAttr::detectSwitchOff (const FChar* const& term, const FChar* c
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FOptiAttr::switchOn()
|
||||
inline bool FOptiAttr::switchOn() const
|
||||
{
|
||||
auto on_ptr = &on;
|
||||
return hasAttribute(on_ptr);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FOptiAttr::switchOff()
|
||||
inline bool FOptiAttr::switchOff() const
|
||||
{
|
||||
auto off_ptr = &off;
|
||||
return hasAttribute(off_ptr);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* foptimove.cpp - Cursor movement optimization *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -268,7 +268,7 @@ void FOptiMove::set_cursor_right (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_cursor_address (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
if ( cap && FTermcap::isInitialized() )
|
||||
{
|
||||
const char* temp = FTermcap::encodeMotionParameter(cap, 23, 23);
|
||||
F_cursor_address.cap = cap;
|
||||
|
@ -286,9 +286,9 @@ void FOptiMove::set_cursor_address (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_column_address (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_column_address.length = capDurationToLength (F_column_address.duration);
|
||||
|
@ -304,9 +304,9 @@ void FOptiMove::set_column_address (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_row_address (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_row_address.length = capDurationToLength (F_row_address.duration);
|
||||
|
@ -322,9 +322,9 @@ void FOptiMove::set_row_address (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_parm_up_cursor (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_parm_up_cursor.length = capDurationToLength (F_parm_up_cursor.duration);
|
||||
|
@ -340,9 +340,9 @@ void FOptiMove::set_parm_up_cursor (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_parm_down_cursor (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_parm_down_cursor.length = capDurationToLength (F_parm_down_cursor.duration);
|
||||
|
@ -358,9 +358,9 @@ void FOptiMove::set_parm_down_cursor (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_parm_left_cursor (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_parm_left_cursor.length = capDurationToLength (F_parm_left_cursor.duration);
|
||||
|
@ -376,9 +376,9 @@ void FOptiMove::set_parm_left_cursor (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_parm_right_cursor (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_parm_right_cursor.length = capDurationToLength (F_parm_right_cursor.duration);
|
||||
|
@ -394,9 +394,9 @@ void FOptiMove::set_parm_right_cursor (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_erase_chars (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_erase_chars.length = capDurationToLength (F_erase_chars.duration);
|
||||
|
@ -412,9 +412,9 @@ void FOptiMove::set_erase_chars (const char cap[])
|
|||
//----------------------------------------------------------------------
|
||||
void FOptiMove::set_repeat_char (const char cap[])
|
||||
{
|
||||
if ( cap )
|
||||
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.duration = capDuration (temp, 1);
|
||||
F_repeat_char.length = capDurationToLength (F_repeat_char.duration);
|
||||
|
@ -463,7 +463,7 @@ void FOptiMove::set_clr_eol (const char cap[])
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
void FOptiMove::check_boundaries ( int& xold, int& yold
|
||||
, int& xnew, int& ynew )
|
||||
, int& xnew, int& ynew ) const
|
||||
{
|
||||
if ( xold < 0 || xold >= int(screen_width) )
|
||||
xold = -1;
|
||||
|
@ -549,7 +549,7 @@ void FOptiMove::calculateCharDuration()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FOptiMove::capDuration (const char cap[], int affcnt)
|
||||
int FOptiMove::capDuration (const char cap[], int affcnt) const
|
||||
{
|
||||
// calculate the duration in milliseconds of a given operation
|
||||
// cap - the term capability
|
||||
|
@ -598,7 +598,7 @@ int FOptiMove::capDuration (const char cap[], int affcnt)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FOptiMove::capDurationToLength (int duration)
|
||||
int FOptiMove::capDurationToLength (int duration) const
|
||||
{
|
||||
if ( duration != LONG_DURATION )
|
||||
return (duration + char_duration - 1) / char_duration;
|
||||
|
@ -609,7 +609,7 @@ int FOptiMove::capDurationToLength (int duration)
|
|||
//----------------------------------------------------------------------
|
||||
int FOptiMove::repeatedAppend ( const capability& o
|
||||
, volatile int count
|
||||
, char* dst )
|
||||
, char* dst ) const
|
||||
{
|
||||
const std::size_t src_len = std::strlen(o.cap);
|
||||
const std::size_t dst_len = ( dst != nullptr ) ? std::strlen(dst) : 0;
|
||||
|
@ -641,7 +641,7 @@ int FOptiMove::repeatedAppend ( const capability& o
|
|||
//----------------------------------------------------------------------
|
||||
int FOptiMove::relativeMove ( char move[]
|
||||
, int from_x, int from_y
|
||||
, int to_x, int to_y )
|
||||
, int to_x, int to_y ) const
|
||||
{
|
||||
int vtime{0};
|
||||
int htime{0};
|
||||
|
@ -680,7 +680,7 @@ int FOptiMove::relativeMove ( char move[]
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FOptiMove::verticalMove (char move[], int from_y, int to_y)
|
||||
inline int FOptiMove::verticalMove (char move[], int from_y, int to_y) const
|
||||
{
|
||||
int vtime{LONG_DURATION};
|
||||
|
||||
|
@ -689,7 +689,7 @@ inline int FOptiMove::verticalMove (char move[], int from_y, int to_y)
|
|||
if ( 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 );
|
||||
move[BUF_SIZE - 1] = '\0';
|
||||
}
|
||||
|
@ -707,7 +707,7 @@ inline int FOptiMove::verticalMove (char move[], int from_y, int to_y)
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiMove::downMove ( char move[], int& vtime
|
||||
, int from_y, int to_y )
|
||||
, int from_y, int to_y ) const
|
||||
{
|
||||
const int num = to_y - from_y;
|
||||
|
||||
|
@ -716,7 +716,7 @@ inline void FOptiMove::downMove ( char move[], int& vtime
|
|||
if ( 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 );
|
||||
move[BUF_SIZE - 1] = '\0';
|
||||
}
|
||||
|
@ -735,7 +735,7 @@ inline void FOptiMove::downMove ( char move[], int& vtime
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiMove::upMove ( char move[], int& vtime
|
||||
, int from_y, int to_y )
|
||||
, int from_y, int to_y ) const
|
||||
{
|
||||
const int num = from_y - to_y;
|
||||
|
||||
|
@ -744,7 +744,7 @@ inline void FOptiMove::upMove ( char move[], int& vtime
|
|||
if ( 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 );
|
||||
move[BUF_SIZE - 1] = '\0';
|
||||
}
|
||||
|
@ -762,7 +762,7 @@ inline void FOptiMove::upMove ( char move[], int& vtime
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x)
|
||||
inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x) const
|
||||
{
|
||||
int htime{LONG_DURATION};
|
||||
|
||||
|
@ -770,7 +770,7 @@ inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x)
|
|||
{
|
||||
// Move to fixed column position1
|
||||
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 );
|
||||
hmove[BUF_SIZE - 1] = '\0';
|
||||
htime = F_column_address.duration;
|
||||
|
@ -786,14 +786,14 @@ inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x)
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiMove::rightMove ( char hmove[], int& htime
|
||||
, int from_x, int to_x )
|
||||
, int from_x, int to_x ) const
|
||||
{
|
||||
int num = to_x - from_x;
|
||||
|
||||
if ( F_parm_right_cursor.cap && F_parm_right_cursor.duration < htime )
|
||||
{
|
||||
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);
|
||||
hmove[BUF_SIZE - 1] = '\0';
|
||||
htime = F_parm_right_cursor.duration;
|
||||
|
@ -841,14 +841,14 @@ inline void FOptiMove::rightMove ( char hmove[], int& htime
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FOptiMove::leftMove ( char hmove[], int& htime
|
||||
, int from_x, int to_x )
|
||||
, int from_x, int to_x ) const
|
||||
{
|
||||
int num = from_x - to_x;
|
||||
|
||||
if ( F_parm_left_cursor.cap && F_parm_left_cursor.duration < htime )
|
||||
{
|
||||
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);
|
||||
hmove[BUF_SIZE - 1] = '\0';
|
||||
htime = F_parm_left_cursor.duration;
|
||||
|
@ -927,7 +927,7 @@ inline bool FOptiMove::isMethod0Faster ( int& move_time
|
|||
//----------------------------------------------------------------------
|
||||
inline bool FOptiMove::isMethod1Faster ( int& move_time
|
||||
, int xold, int yold
|
||||
, int xnew, int ynew )
|
||||
, int xnew, int ynew ) const
|
||||
{
|
||||
// Test method 1: local movement
|
||||
|
||||
|
@ -949,7 +949,7 @@ inline bool FOptiMove::isMethod1Faster ( int& move_time
|
|||
//----------------------------------------------------------------------
|
||||
inline bool FOptiMove::isMethod2Faster ( int& move_time
|
||||
, int yold
|
||||
, int xnew, int ynew )
|
||||
, int xnew, int ynew ) const
|
||||
{
|
||||
// Test method 2: carriage-return + local movement
|
||||
|
||||
|
@ -971,7 +971,7 @@ inline bool FOptiMove::isMethod2Faster ( int& move_time
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FOptiMove::isMethod3Faster ( int& move_time
|
||||
, int xnew, int ynew )
|
||||
, int xnew, int ynew ) const
|
||||
{
|
||||
// Test method 3: home-cursor + local movement
|
||||
|
||||
|
@ -993,7 +993,7 @@ inline bool FOptiMove::isMethod3Faster ( int& move_time
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FOptiMove::isMethod4Faster ( int& move_time
|
||||
, int xnew, int ynew )
|
||||
, int xnew, int ynew ) const
|
||||
{
|
||||
// Test method 4: home-down + local movement
|
||||
if ( F_cursor_to_ll.cap )
|
||||
|
@ -1017,7 +1017,7 @@ inline bool FOptiMove::isMethod4Faster ( int& move_time
|
|||
//----------------------------------------------------------------------
|
||||
inline bool FOptiMove::isMethod5Faster ( int& move_time
|
||||
, int yold
|
||||
, int xnew, int ynew )
|
||||
, int xnew, int ynew ) const
|
||||
{
|
||||
// Test method 5: left margin for wrap to right-hand side
|
||||
if ( automatic_left_margin
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fpoint.cpp - Point with an x and y coordinate *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,6 +20,8 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "final/fpoint.h"
|
||||
|
||||
namespace finalcut
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fprogressbar.cpp - Widget FProgressbar *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -38,8 +38,7 @@ namespace finalcut
|
|||
FProgressbar::FProgressbar(FWidget* parent)
|
||||
: FWidget{parent}
|
||||
{
|
||||
unsetFocusable();
|
||||
setShadow();
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -133,6 +132,13 @@ void FProgressbar::reset()
|
|||
|
||||
|
||||
// private methods of FProgressbar
|
||||
//----------------------------------------------------------------------
|
||||
void FProgressbar::init()
|
||||
{
|
||||
unsetFocusable();
|
||||
setShadow();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FProgressbar::draw()
|
||||
{
|
||||
|
@ -198,7 +204,7 @@ std::size_t FProgressbar::drawProgressIndicator()
|
|||
if ( len >= bar_length )
|
||||
return len;
|
||||
|
||||
if ( round(length) > len || FTerm::getMaxColor() < 16 )
|
||||
if ( std::size_t(round(length)) > len || FTerm::getMaxColor() < 16 )
|
||||
{
|
||||
if ( FTerm::isMonochron() )
|
||||
setReverse(false);
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fradiobutton.cpp - Widget FRadioButton *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -74,7 +74,7 @@ void FRadioButton::draw()
|
|||
void FRadioButton::drawRadioButton()
|
||||
{
|
||||
print() << FPoint{1, 1};
|
||||
useParentWidgetColor();
|
||||
setColor();
|
||||
|
||||
if ( FTerm::isMonochron() )
|
||||
{
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fradiomenuitem.cpp - Widget FRadioMenuItem *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -20,6 +20,8 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "final/fc.h"
|
||||
#include "final/fradiomenuitem.h"
|
||||
#include "final/fmenu.h"
|
||||
|
@ -36,14 +38,14 @@ namespace finalcut
|
|||
FRadioMenuItem::FRadioMenuItem (FWidget* parent)
|
||||
: FMenuItem{parent}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FRadioMenuItem::FRadioMenuItem (const FString& txt, FWidget* parent)
|
||||
: FMenuItem{txt, parent}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -53,10 +55,11 @@ FRadioMenuItem::~FRadioMenuItem() // destructor
|
|||
|
||||
// private methods of FRadioMenuItem
|
||||
//----------------------------------------------------------------------
|
||||
void FRadioMenuItem::init (FWidget* parent)
|
||||
void FRadioMenuItem::init()
|
||||
{
|
||||
setCheckable();
|
||||
setRadioButton();
|
||||
FWidget* parent = getParentWidget();
|
||||
|
||||
if ( ! parent )
|
||||
return;
|
||||
|
@ -69,13 +72,14 @@ void FRadioMenuItem::init (FWidget* parent)
|
|||
addCallback // for this element
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (menu_ptr, &FMenu::cb_menuitemToggled)
|
||||
std::move(menu_ptr), &FMenu::cb_menuitemToggled,
|
||||
this
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FRadioMenuItem::processToggle()
|
||||
void FRadioMenuItem::processToggle() const
|
||||
{
|
||||
emitCallback("toggled");
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* frect.cpp - Rectangle with position and size *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -21,6 +21,7 @@
|
|||
***********************************************************************/
|
||||
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
|
||||
#include "final/fpoint.h"
|
||||
#include "final/frect.h"
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fscrollbar.cpp - Widget FScrollbar *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2012-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -55,7 +55,7 @@ FScrollbar::FScrollbar(fc::orientation o, FWidget* parent)
|
|||
//----------------------------------------------------------------------
|
||||
FScrollbar::~FScrollbar() // destructor
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
|
||||
|
@ -305,7 +305,7 @@ void FScrollbar::onMouseUp (FMouseEvent* ev)
|
|||
|
||||
if ( scroll_type != FScrollbar::noScroll )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
scroll_type = FScrollbar::noScroll;
|
||||
}
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ void FScrollbar::onMouseMove (FMouseEvent* ev)
|
|||
if ( mouse_x < 1 || mouse_x > int(getWidth())
|
||||
|| mouse_y < 1 || mouse_y > int(getHeight()) )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
else if ( scroll_type != FScrollbar::scrollJump )
|
||||
{
|
||||
|
@ -369,7 +369,7 @@ void FScrollbar::onMouseMove (FMouseEvent* ev)
|
|||
|
||||
if ( scroll_type != new_scroll_type )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -380,7 +380,7 @@ void FScrollbar::onWheel (FWheelEvent* ev)
|
|||
|
||||
if ( scroll_type != FScrollbar::noScroll )
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
scroll_type = FScrollbar::noScroll;
|
||||
}
|
||||
|
||||
|
@ -401,7 +401,7 @@ void FScrollbar::onTimer (FTimerEvent*)
|
|||
if ( ! threshold_reached )
|
||||
{
|
||||
threshold_reached = true;
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
addTimer(repeat_time);
|
||||
}
|
||||
|
||||
|
@ -426,7 +426,7 @@ void FScrollbar::onTimer (FTimerEvent*)
|
|||
processScroll();
|
||||
}
|
||||
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -453,6 +453,7 @@ void FScrollbar::draw()
|
|||
drawButtons();
|
||||
|
||||
current_slider_pos = -1;
|
||||
max_color = FTerm::getMaxColor();
|
||||
drawBar();
|
||||
}
|
||||
|
||||
|
@ -612,7 +613,7 @@ void FScrollbar::drawButtons()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FScrollbar::sType FScrollbar::getClickedScrollType (int x, int y)
|
||||
FScrollbar::sType FScrollbar::getClickedScrollType (int x, int y) const
|
||||
{
|
||||
if ( bar_orientation == fc::vertical )
|
||||
{
|
||||
|
@ -625,7 +626,7 @@ FScrollbar::sType FScrollbar::getClickedScrollType (int x, int y)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FScrollbar::sType FScrollbar::getVerticalClickedScrollType (int y)
|
||||
FScrollbar::sType FScrollbar::getVerticalClickedScrollType (int y) const
|
||||
{
|
||||
if ( y == 1 )
|
||||
{
|
||||
|
@ -648,7 +649,7 @@ FScrollbar::sType FScrollbar::getVerticalClickedScrollType (int y)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FScrollbar::sType FScrollbar::getHorizontalClickedScrollType (int x)
|
||||
FScrollbar::sType FScrollbar::getHorizontalClickedScrollType (int x) const
|
||||
{
|
||||
if ( FTerm::isNewFont() )
|
||||
{
|
||||
|
@ -695,7 +696,7 @@ FScrollbar::sType FScrollbar::getHorizontalClickedScrollType (int x)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FScrollbar::getSliderClickPos (int mouse_x, int mouse_y)
|
||||
int FScrollbar::getSliderClickPos (int mouse_x, int mouse_y) const
|
||||
{
|
||||
// Get the clicked position on the slider
|
||||
|
||||
|
@ -733,7 +734,7 @@ void FScrollbar::jumpToClickPos (int x, int y)
|
|||
{
|
||||
if ( y > 1 && y < int(getHeight()) )
|
||||
{
|
||||
new_val = int( round ( double(max - min) * (y - 2.0 - (slider_length/2))
|
||||
new_val = int( round ( double(max - min) * (y - 2.0 - double(slider_length/2))
|
||||
/ double(bar_length - slider_length) ) );
|
||||
}
|
||||
else
|
||||
|
@ -745,7 +746,7 @@ void FScrollbar::jumpToClickPos (int x, int y)
|
|||
|
||||
if ( x > 1 + nf && x < int(getWidth()) - nf )
|
||||
{
|
||||
new_val = int( round ( double(max - min) * (x - 2.0 - nf - (slider_length/2))
|
||||
new_val = int( round ( double(max - min) * (x - 2.0 - nf - double(slider_length/2))
|
||||
/ double(bar_length - slider_length) ) );
|
||||
}
|
||||
else
|
||||
|
@ -786,7 +787,7 @@ void FScrollbar::avoidScrollOvershoot()
|
|||
&& slider_pos > slider_click_stop_pos ) )
|
||||
{
|
||||
jumpToClickPos (slider_click_stop_pos);
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
* fscrollview.cpp - Widget FScrollView (a scrolling area with *
|
||||
* on-demand scroll bars) *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2017-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -40,7 +40,7 @@ namespace finalcut
|
|||
FScrollView::FScrollView (FWidget* parent)
|
||||
: FWidget{parent}
|
||||
{
|
||||
init(parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -694,7 +694,7 @@ void FScrollView::copy2area()
|
|||
|
||||
// private methods of FScrollView
|
||||
//----------------------------------------------------------------------
|
||||
inline const FPoint FScrollView::getViewportCursorPos()
|
||||
inline const FPoint FScrollView::getViewportCursorPos() const
|
||||
{
|
||||
const auto& window = FWindow::getWindowWidget(this);
|
||||
|
||||
|
@ -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->isInstanceOf("FScrollView") );
|
||||
|
||||
|
@ -771,7 +773,7 @@ inline void FScrollView::mapKeyFunctions()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FScrollView::calculateScrollbarPos()
|
||||
void FScrollView::calculateScrollbarPos() const
|
||||
{
|
||||
const std::size_t width = getWidth();
|
||||
const std::size_t height = getHeight();
|
||||
|
@ -792,7 +794,7 @@ void FScrollView::calculateScrollbarPos()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FScrollView::setHorizontalScrollBarVisibility()
|
||||
void FScrollView::setHorizontalScrollBarVisibility() const
|
||||
{
|
||||
assert ( v_mode == fc::Auto
|
||||
|| v_mode == fc::Hidden
|
||||
|
@ -818,7 +820,7 @@ void FScrollView::setHorizontalScrollBarVisibility()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FScrollView::setVerticalScrollBarVisibility()
|
||||
void FScrollView::setVerticalScrollBarVisibility() const
|
||||
{
|
||||
assert ( v_mode == fc::Auto
|
||||
|| v_mode == fc::Hidden
|
||||
|
@ -844,7 +846,7 @@ void FScrollView::setVerticalScrollBarVisibility()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FScrollView::setViewportCursor()
|
||||
void FScrollView::setViewportCursor() const
|
||||
{
|
||||
if ( ! isChild(getFocusWidget()) )
|
||||
return;
|
||||
|
@ -864,7 +866,7 @@ void FScrollView::setViewportCursor()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FScrollView::cb_vbarChange (const FWidget*, const FDataPtr)
|
||||
void FScrollView::cb_vbarChange (const FWidget*)
|
||||
{
|
||||
FScrollbar::sType scrollType = vbar->getScrollType();
|
||||
static constexpr int wheel_distance = 4;
|
||||
|
@ -923,7 +925,7 @@ void FScrollView::cb_vbarChange (const FWidget*, const FDataPtr)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FScrollView::cb_hbarChange (const FWidget*, const FDataPtr)
|
||||
void FScrollView::cb_hbarChange (const FWidget*)
|
||||
{
|
||||
FScrollbar::sType scrollType = hbar->getScrollType();
|
||||
static constexpr int wheel_distance = 4;
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fsize.cpp - Height and width of a two-dimensional surface *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -21,6 +21,7 @@
|
|||
***********************************************************************/
|
||||
|
||||
#include <limits>
|
||||
#include <utility>
|
||||
|
||||
#include "final/fpoint.h"
|
||||
#include "final/fsize.h"
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fspinbox.cpp - Widget FSpinBox *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2019-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -235,13 +235,13 @@ void FSpinBox::onMouseDown (FMouseEvent* ev)
|
|||
addTimer(threshold_time);
|
||||
}
|
||||
else
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FSpinBox::onMouseUp (FMouseEvent*)
|
||||
{
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
spining_state = FSpinBox::noSpin;
|
||||
}
|
||||
|
||||
|
@ -250,7 +250,7 @@ void FSpinBox::onWheel (FWheelEvent* ev)
|
|||
{
|
||||
const int wheel = ev->getWheel();
|
||||
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
forceFocus();
|
||||
spining_state = FSpinBox::noSpin;
|
||||
|
||||
|
@ -277,7 +277,7 @@ void FSpinBox::onTimer (FTimerEvent*)
|
|||
if ( ! threshold_reached )
|
||||
{
|
||||
threshold_reached = true;
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
addTimer(repeat_time);
|
||||
}
|
||||
|
||||
|
@ -317,9 +317,15 @@ void FSpinBox::init()
|
|||
input_field.unsetShadow();
|
||||
input_field << value;
|
||||
input_field.addCallback
|
||||
(
|
||||
"activate",
|
||||
this, &FSpinBox::cb_inputFieldActivate
|
||||
);
|
||||
input_field.addCallback
|
||||
(
|
||||
"changed",
|
||||
F_METHOD_CALLBACK (this, &FSpinBox::cb_inputFieldChange)
|
||||
this, &FSpinBox::cb_inputFieldChange,
|
||||
std::cref(input_field)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -377,7 +383,7 @@ inline void FSpinBox::increaseValue()
|
|||
processChanged();
|
||||
}
|
||||
else
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -389,11 +395,17 @@ inline void FSpinBox::decreaseValue()
|
|||
processChanged();
|
||||
}
|
||||
else
|
||||
delOwnTimer();
|
||||
delOwnTimers();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FSpinBox::processChanged()
|
||||
void FSpinBox::processActivate() const
|
||||
{
|
||||
emitCallback("activate");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FSpinBox::processChanged() const
|
||||
{
|
||||
emitCallback("changed");
|
||||
}
|
||||
|
@ -417,17 +429,21 @@ void FSpinBox::forceFocus()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FSpinBox::cb_inputFieldChange (finalcut::FWidget* w, const FDataPtr)
|
||||
void FSpinBox::cb_inputFieldActivate() const
|
||||
{
|
||||
const auto& lineedit = static_cast<FLineEdit*>(w);
|
||||
processActivate();
|
||||
}
|
||||
|
||||
if ( lineedit->getText().isEmpty() )
|
||||
//----------------------------------------------------------------------
|
||||
void FSpinBox::cb_inputFieldChange (const FLineEdit& lineedit)
|
||||
{
|
||||
if ( lineedit.getText().isEmpty() )
|
||||
value = 0;
|
||||
else
|
||||
{
|
||||
std::wregex regex(L"[-]?[[:xdigit:]]+");
|
||||
std::wsmatch match;
|
||||
std::wstring text = lineedit->getText().wc_str();
|
||||
std::wstring text = lineedit.getText().wc_str();
|
||||
|
||||
if ( std::regex_search(text, match, regex) )
|
||||
{
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fstartoptions.cpp - Contains the start options for initialization *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2019-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/***********************************************************************
|
||||
* fstatusbar.cpp - Widget FStatusBar and FStatusKey *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* This file is part of the FINAL CUT widget toolkit *
|
||||
* *
|
||||
* Copyright 2014-2020 Markus Gans *
|
||||
* *
|
||||
* The Final Cut is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Lesser General Public License *
|
||||
* as published by the Free Software Foundation; either version 3 of *
|
||||
* FINAL CUT is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License as *
|
||||
* published by the Free Software Foundation; either version 3 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* The Final Cut is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* FINAL CUT is distributed in the hope that it will be useful, but *
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Lesser General Public License for more details. *
|
||||
* *
|
||||
|
@ -38,7 +38,7 @@ namespace finalcut
|
|||
FStatusKey::FStatusKey(FWidget* parent)
|
||||
: FWidget{parent}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -47,7 +47,7 @@ FStatusKey::FStatusKey (FKey k, const FString& txt, FWidget* parent)
|
|||
, text{txt}
|
||||
, key{k}
|
||||
{
|
||||
init (parent);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -99,9 +99,10 @@ bool FStatusKey::setMouseFocus(bool enable)
|
|||
|
||||
// private methods of FStatusKey
|
||||
//----------------------------------------------------------------------
|
||||
void FStatusKey::init (FWidget* parent)
|
||||
void FStatusKey::init()
|
||||
{
|
||||
setGeometry (FPoint{1, 1}, FSize{1, 1});
|
||||
FWidget* parent = getParentWidget();
|
||||
|
||||
if ( parent && parent->isInstanceOf("FStatusBar") )
|
||||
{
|
||||
|
@ -113,7 +114,7 @@ void FStatusKey::init (FWidget* parent)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FStatusKey::processActivate()
|
||||
void FStatusKey::processActivate() const
|
||||
{
|
||||
emitCallback("activate");
|
||||
}
|
||||
|
@ -272,7 +273,9 @@ void FStatusBar::insert (FStatusKey* skey)
|
|||
skey->addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &FStatusBar::cb_statuskey_activated)
|
||||
this,
|
||||
&FStatusBar::cb_statuskey_activated,
|
||||
skey
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -485,11 +488,13 @@ void FStatusBar::onMouseMove (FMouseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FStatusBar::cb_statuskey_activated (FWidget* widget, const FDataPtr)
|
||||
void FStatusBar::cb_statuskey_activated (const FStatusKey* statuskey)
|
||||
{
|
||||
if ( ! statuskey )
|
||||
return;
|
||||
|
||||
if ( ! key_list.empty() )
|
||||
{
|
||||
const auto& statuskey = static_cast<FStatusKey*>(widget);
|
||||
auto iter = key_list.begin();
|
||||
const auto& last = key_list.end();
|
||||
|
||||
|
@ -527,14 +532,14 @@ void FStatusBar::init()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FStatusBar::getKeyNameWidth (const FStatusKey* key)
|
||||
int FStatusBar::getKeyNameWidth (const FStatusKey* key) const
|
||||
{
|
||||
const FString& key_name = FTerm::getKeyName(key->getKey());
|
||||
return int(getColumnWidth(key_name));
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FStatusBar::getKeyTextWidth (const FStatusKey* key)
|
||||
int FStatusBar::getKeyTextWidth (const FStatusKey* key) const
|
||||
{
|
||||
const FString& key_text = key->getText();
|
||||
return int(getColumnWidth(key_text));
|
||||
|
|