commit
da2bea4268
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
|||
2018-10-03 Markus Gans <guru.mail@muenster.de>
|
||||
* At the end of the lifetime of an FMenuItem object,
|
||||
delete its entry from the object list of the parent object
|
||||
* Reduce the use of the new operators in the examples
|
||||
* Adding a unit test for the FTermData class
|
||||
|
||||
2018-10-01 Markus Gans <guru.mail@muenster.de>
|
||||
* Extract FTerm data members into the data class FTermData
|
||||
|
||||
2018-09-28 Markus Gans <guru.mail@muenster.de>
|
||||
* FListView now has the ability to sort by columns
|
||||
|
||||
2018-09-27 Markus Gans <guru.mail@muenster.de>
|
||||
* Move time event processing from FApplication to FObject
|
||||
|
||||
2018-09-26 Markus Gans <guru.mail@muenster.de>
|
||||
* The FListViewItem class now has a getData() and a setData() method
|
||||
similar to the FListBoxItem class.
|
||||
|
||||
2018-09-24 Markus Gans <guru.mail@muenster.de>
|
||||
* Stricter use of the keyword virtual
|
||||
* Add a first steps document
|
||||
|
||||
2018-09-20 Markus Gans <guru.mail@muenster.de>
|
||||
* Added pkg-config file finalcut.pc
|
||||
* The entire library source code is now encapsulated under
|
||||
|
|
46
README.md
46
README.md
|
@ -1,4 +1,5 @@
|
|||
![The Final Cut](logo/png/finalcut-logo.png)
|
||||
![FINAL CUT](logo/svg/finalcut-logo.svg)
|
||||
============================================
|
||||
|
||||
### Building and code analysis
|
||||
*Travis CI:*<br />
|
||||
|
@ -10,6 +11,9 @@
|
|||
*Class Reference:*<br />
|
||||
     [![documented](https://codedocs.xyz/gansm/finalcut.svg)](https://codedocs.xyz/gansm/finalcut/hierarchy.html)
|
||||
|
||||
The Final Cut is a C++ class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen.
|
||||
The C++ class design was inspired by the Qt framework. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
|
||||
|
||||
### Installation
|
||||
```bash
|
||||
> git clone git://github.com/gansm/finalcut.git
|
||||
|
@ -29,29 +33,47 @@
|
|||
* Cygwin
|
||||
* Solaris
|
||||
|
||||
The Final Cut
|
||||
=============
|
||||
The Final Cut is a C++ class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple text windows on the screen.
|
||||
The C++ class design was inspired by the Qt framework. It provides common controls like dialog boxes, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
|
||||
### First steps
|
||||
|
||||
![](doc/fileopen-dialog.png)
|
||||
[How to use the library](doc/first-steps.md)
|
||||
|
||||
![](doc/progress-bar.png)
|
||||
### Screenshots
|
||||
|
||||
![](doc/textview.png)
|
||||
The FFileDialog widget:
|
||||
|
||||
![](doc/Mandelbrot.png)
|
||||
![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
|
||||
-------
|
||||
A [graphical text font](fonts/) for X11 and the Linux console.
|
||||
|
||||
![](doc/newfont1.png)
|
||||
![ui example in newfont mode](doc/newfont1.png)
|
||||
|
||||
![](doc/newfont2.png)
|
||||
|
||||
![](doc/calculator.png)
|
||||
Newfont drive symbols:
|
||||
|
||||
![drive symbols](doc/newfont2.png)
|
||||
|
||||
|
||||
The calculator example in newfont mode:
|
||||
|
||||
![calculator](doc/calculator.png)
|
||||
|
||||
|
||||
Virtual terminal
|
||||
|
|
|
@ -3,7 +3,13 @@
|
|||
if test "$1" = "update"
|
||||
then
|
||||
# Update generated configuration files
|
||||
if which autoreconf >/dev/null
|
||||
then
|
||||
autoreconf --force --install --verbose --warnings=all
|
||||
else
|
||||
echo "Update failed, please install autoconf first"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# Set up an m4 environment
|
||||
aclocal
|
||||
|
|
11
build.sh
11
build.sh
|
@ -28,7 +28,16 @@ test "$CPU_COUNT" -eq 0 && CPU_COUNT=1
|
|||
|
||||
if [ -n "$1" ]
|
||||
then
|
||||
test ! -f ./configure && autoreconf --install --force
|
||||
if [ ! -f ./configure ]
|
||||
then
|
||||
if which autoreconf >/dev/null
|
||||
then
|
||||
autoreconf --install --force
|
||||
else
|
||||
echo "Build failed, please install autoconf first"
|
||||
exit -1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Build commands
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
|
||||
First steps with the Final Cut widget toolkit
|
||||
=============================================
|
||||
|
||||
|
||||
How to use the library
|
||||
----------------------
|
||||
|
||||
At the beginning of this introduction to the Final Cut
|
||||
we will start with a small example.
|
||||
|
||||
It creates an empty 30×10 character dialog.
|
||||
|
||||
**File:** *dialog.cpp*
|
||||
```cpp
|
||||
#include <final/final.h>
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
finalcut::FApplication app(argc, argv);
|
||||
finalcut::FDialog dialog(&app);
|
||||
dialog.setText ("A dialog");
|
||||
dialog.setGeometry (25, 5, 30, 10);
|
||||
app.setMainWidget(&dialog);
|
||||
dialog.show();
|
||||
return app.exec();
|
||||
}
|
||||
```
|
||||
*(Note: Use mouse or <kbd>Shift</kbd>+<kbd>F10</kbd> or
|
||||
<kbd>Ctrl</kbd>+<kbd>^</kbd> to close the dialog)*
|
||||
|
||||
|
||||
After entering the source code in *dialog.cpp* you can compile
|
||||
the above program with gcc:
|
||||
```cpp
|
||||
g++ -O2 -lfinal dialog.cpp -o dialog
|
||||
```
|
||||
|
||||
|
||||
How it works
|
||||
------------
|
||||
|
||||
|
||||
```cpp
|
||||
#include <final/final.h>
|
||||
```
|
||||
All final cut programs must include the *final.h* header.
|
||||
|
||||
```cpp
|
||||
finalcut::FApplication app(argc, argv);
|
||||
```
|
||||
In this line creates the `finalcut::FApplication` object `app` with
|
||||
the command line arguments `argc` and `argv`. This object manages
|
||||
the application main event loop. It receives keyboard and mouse events
|
||||
and sends them to the target widgets. Before widgets can be created,
|
||||
an application object must be created! Only one `finalcut::FApplication`
|
||||
object should be created.
|
||||
|
||||
The next line
|
||||
```cpp
|
||||
finalcut::FDialog dialog(&app);
|
||||
```
|
||||
creates the `finalcut::FDialog` object `dialog` with the object `app`
|
||||
as parent object. The `finalcut::FDialog` class is the base class for
|
||||
creating dialog windows.
|
||||
|
||||
```cpp
|
||||
dialog.setText ("A dialog");
|
||||
```
|
||||
The title bar of the dialog box gets the text "A dialog".
|
||||
|
||||
```cpp
|
||||
dialog.setGeometry (25, 5, 30, 10);
|
||||
```
|
||||
The dialog window geometry is set to a width of 30 characters and
|
||||
a height of 10 characters. The window in the terminal is positioned
|
||||
at the positions x=25 and y=5 (note: x=1 and y=1 represents the upper
|
||||
left corner).
|
||||
|
||||
```cpp
|
||||
app.setMainWidget(&dialog);
|
||||
```
|
||||
The `dialog` object is selected as the main widget for the application.
|
||||
When the user closes a main widget, the application will be closed.
|
||||
|
||||
```cpp
|
||||
dialog.show();
|
||||
```
|
||||
A window or widget is not visible directly after its creation.
|
||||
Only the call of `show()` makes it (and its child objects,
|
||||
if available) visible.
|
||||
|
||||
```cpp
|
||||
return app.exec();
|
||||
```
|
||||
The last line calls `exec()` to start the application and return
|
||||
the result to the operating system. When the application starts,
|
||||
it enters the main event loop. This loop doesn't end until the
|
||||
window/application is closed.
|
||||
|
|
@ -16,7 +16,7 @@ INCLUDES = -I../src/include -I/usr/include/final
|
|||
RM = rm -f
|
||||
|
||||
ifdef DEBUG
|
||||
OPTIMIZE = -O0 -fsanitize=undefined
|
||||
OPTIMIZE = -O0 -fsanitize=bool,bounds,enum,float-cast-overflow,function,null
|
||||
else
|
||||
OPTIMIZE = -O2
|
||||
endif
|
||||
|
|
|
@ -49,7 +49,7 @@ class Button : public finalcut::FButton
|
|||
void setChecked(bool);
|
||||
|
||||
// Event handler
|
||||
void onKeyPress (finalcut::FKeyEvent*);
|
||||
virtual void onKeyPress (finalcut::FKeyEvent*);
|
||||
|
||||
private:
|
||||
// Data Member
|
||||
|
@ -118,9 +118,9 @@ class Calc : public finalcut::FDialog
|
|||
~Calc();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (finalcut::FKeyEvent*);
|
||||
void onAccel (finalcut::FAccelEvent*);
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onKeyPress (finalcut::FKeyEvent*);
|
||||
virtual void onAccel (finalcut::FAccelEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_buttonClicked (finalcut::FWidget*, data_ptr);
|
||||
|
@ -212,7 +212,7 @@ class Calc : public finalcut::FDialog
|
|||
void setInfixOperator (char);
|
||||
void clearInfixOperator();
|
||||
void calcInfixOperator();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
const wchar_t* getButtonText (int);
|
||||
void mapKeyFunctions();
|
||||
|
||||
|
|
|
@ -96,26 +96,26 @@ int main (int argc, char* argv[])
|
|||
// Create the application object
|
||||
finalcut::FApplication app(argc, argv);
|
||||
|
||||
// Create a simple modal dialog box
|
||||
finalcut::FDialog* dgl = new finalcut::FDialog(&app);
|
||||
dgl->setModal();
|
||||
dgl->setText ("UNIX select");
|
||||
{ // Create a simple modal dialog box in this scope
|
||||
finalcut::FDialog dgl(&app);
|
||||
dgl.setModal();
|
||||
dgl.setText ("UNIX select");
|
||||
w = 20;
|
||||
h = 13;
|
||||
x = (app.getDesktopWidth() - w) / 2;
|
||||
y = (app.getDesktopHeight() - h) / 2;
|
||||
dgl->setGeometry (x, y, w, h);
|
||||
dgl.setGeometry (x, y, w, h);
|
||||
|
||||
// Create a button group
|
||||
finalcut::FButtonGroup* checkButtonGroup = new finalcut::FButtonGroup("choice", dgl);
|
||||
checkButtonGroup->setGeometry (2, 1, 16, 7);
|
||||
finalcut::FButtonGroup checkButtonGroup("choice", &dgl);
|
||||
checkButtonGroup.setGeometry (2, 1, 16, 7);
|
||||
|
||||
// Create radio buttons
|
||||
std::vector<finalcut::FRadioButton*> os (9);
|
||||
populateChoice (os, checkButtonGroup);
|
||||
populateChoice (os, &checkButtonGroup);
|
||||
|
||||
// Set the radio button geometry
|
||||
// => checkButtonGroup->setScrollSize(...) is not required
|
||||
// => checkButtonGroup.setScrollSize(...) is not required
|
||||
// because a FButtonGroup is self-adjusting
|
||||
for (uInt i = 0; i < os.size(); i++)
|
||||
os[i]->setGeometry(1, int(1 + i), 12, 1);
|
||||
|
@ -124,40 +124,38 @@ int main (int argc, char* argv[])
|
|||
|
||||
// Scroll to the focused child element
|
||||
finalcut::FFocusEvent cfi (finalcut::fc::ChildFocusIn_Event);
|
||||
finalcut::FApplication::sendEvent(checkButtonGroup, &cfi);
|
||||
finalcut::FApplication::sendEvent(&checkButtonGroup, &cfi);
|
||||
|
||||
// Create a OK button
|
||||
finalcut::FButton* ok = new finalcut::FButton("&OK", dgl);
|
||||
ok->setGeometry (10, 9, 8, 1);
|
||||
finalcut::FButton ok("&OK", &dgl);
|
||||
ok.setGeometry (10, 9, 8, 1);
|
||||
|
||||
// Connect the button signal "clicked" with the callback function
|
||||
ok->addCallback
|
||||
ok.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_FUNCTION_CALLBACK (&cb_quit),
|
||||
dgl
|
||||
&dgl
|
||||
);
|
||||
|
||||
// Show the dialog
|
||||
dgl->show();
|
||||
dgl.show();
|
||||
|
||||
// Get the checked radio button text
|
||||
for (int n = 1; n <= int(checkButtonGroup->getCount()); n++)
|
||||
for (int n = 1; n <= int(checkButtonGroup.getCount()); n++)
|
||||
{
|
||||
if ( checkButtonGroup->isChecked(n) )
|
||||
if ( checkButtonGroup.isChecked(n) )
|
||||
{
|
||||
label_text = checkButtonGroup->getButton(n)->getText();
|
||||
label_text = checkButtonGroup.getButton(n)->getText();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // Hide and destroy the dialog object
|
||||
|
||||
// Hide and destroy the dialog object
|
||||
delete dgl;
|
||||
|
||||
// Create and show tooltip for two seconds
|
||||
finalcut::FToolTip* tooltip = new finalcut::FToolTip(&app);
|
||||
tooltip->setText ("You have chosen " + label_text);
|
||||
tooltip->show();
|
||||
finalcut::FToolTip tooltip(&app);
|
||||
tooltip.setText ("You have chosen " + label_text);
|
||||
tooltip.show();
|
||||
sleep(2);
|
||||
delete tooltip;
|
||||
}
|
||||
|
|
|
@ -66,64 +66,58 @@ int main (int argc, char* argv[])
|
|||
dgl.setShadow();
|
||||
|
||||
// Create input fields
|
||||
finalcut::FLineEdit* name_field = new finalcut::FLineEdit(&dgl);
|
||||
finalcut::FLineEdit* email_field = new finalcut::FLineEdit(&dgl);
|
||||
finalcut::FLineEdit* org_field = new finalcut::FLineEdit(&dgl);
|
||||
finalcut::FLineEdit* city_field = new finalcut::FLineEdit(&dgl);
|
||||
finalcut::FLineEdit* st_field = new finalcut::FLineEdit(&dgl);
|
||||
finalcut::FLineEdit* c_field = new finalcut::FLineEdit(&dgl);
|
||||
finalcut::FLineEdit name_field (&dgl);
|
||||
finalcut::FLineEdit email_field (&dgl);
|
||||
finalcut::FLineEdit org_field (&dgl);
|
||||
finalcut::FLineEdit city_field (&dgl);
|
||||
finalcut::FLineEdit st_field (&dgl);
|
||||
finalcut::FLineEdit c_field (&dgl);
|
||||
|
||||
name_field->setLabelText(L"&Name");
|
||||
email_field->setLabelText(L"&Email");
|
||||
org_field->setLabelText(L"Or&ganization");
|
||||
city_field->setLabelText(L"&City");
|
||||
st_field->setLabelText(L"&State");
|
||||
c_field->setLabelText(L"&Country");
|
||||
name_field.setLabelText (L"&Name");
|
||||
email_field.setLabelText (L"&Email");
|
||||
org_field.setLabelText (L"Or&ganization");
|
||||
city_field.setLabelText (L"&City");
|
||||
st_field.setLabelText (L"&State");
|
||||
c_field.setLabelText (L"&Country");
|
||||
|
||||
name_field->setGeometry(15, 1, 19, 1);
|
||||
email_field->setGeometry(15, 3, 19, 1);
|
||||
org_field->setGeometry(15, 5, 19, 1);
|
||||
city_field->setGeometry(15, 7, 19, 1);
|
||||
st_field->setGeometry(15, 9, 19, 1);
|
||||
c_field->setGeometry(15, 11, 4, 1);
|
||||
name_field.setGeometry (15, 1, 19, 1);
|
||||
email_field.setGeometry (15, 3, 19, 1);
|
||||
org_field.setGeometry (15, 5, 19, 1);
|
||||
city_field.setGeometry (15, 7, 19, 1);
|
||||
st_field.setGeometry (15, 9, 19, 1);
|
||||
c_field.setGeometry (15, 11, 4, 1);
|
||||
|
||||
// Create the button group
|
||||
finalcut::FButtonGroup* radioButtonGroup = \
|
||||
new finalcut::FButtonGroup("Sex", &dgl);
|
||||
radioButtonGroup->setGeometry(2, 13, 13, 4);
|
||||
finalcut::FButtonGroup radioButtonGroup ("Sex", &dgl);
|
||||
radioButtonGroup.setGeometry(2, 13, 13, 4);
|
||||
|
||||
// Create radio buttons
|
||||
finalcut::FRadioButton* male = \
|
||||
new finalcut::FRadioButton("&Male", radioButtonGroup);
|
||||
finalcut::FRadioButton* female = \
|
||||
new finalcut::FRadioButton("&Female", radioButtonGroup);
|
||||
male->setGeometry(1, 1, 8, 1);
|
||||
female->setGeometry(1, 2, 10, 1);
|
||||
finalcut::FRadioButton male ("&Male", &radioButtonGroup);
|
||||
finalcut::FRadioButton female ("&Female", &radioButtonGroup);
|
||||
male.setGeometry (1, 1, 8, 1);
|
||||
female.setGeometry (1, 2, 10, 1);
|
||||
|
||||
// Create another button group
|
||||
finalcut::FButtonGroup* checkButtonGroup = \
|
||||
new finalcut::FButtonGroup("&Data options", &dgl);
|
||||
checkButtonGroup->setGeometry(16, 13, 19, 4);
|
||||
finalcut::FButtonGroup checkButtonGroup ("&Data options", &dgl);
|
||||
checkButtonGroup.setGeometry(16, 13, 19, 4);
|
||||
|
||||
// Create checkbox buttons
|
||||
finalcut::FCheckBox* check1 = \
|
||||
new finalcut::FCheckBox("Save data", checkButtonGroup);
|
||||
finalcut::FCheckBox* check2 = \
|
||||
new finalcut::FCheckBox("Encrypt data", checkButtonGroup);
|
||||
check1->setGeometry(1, 1, 13, 1);
|
||||
check2->setGeometry(1, 2, 16, 1);
|
||||
check2->setDisable();
|
||||
finalcut::FCheckBox check1 ("Save data", &checkButtonGroup);
|
||||
finalcut::FCheckBox check2 ("Encrypt data", &checkButtonGroup);
|
||||
check1.setGeometry (1, 1, 13, 1);
|
||||
check2.setGeometry (1, 2, 16, 1);
|
||||
check2.setDisable();
|
||||
|
||||
// Create a OK button
|
||||
finalcut::FButton btn("&OK", &dgl);
|
||||
btn.setGeometry (24, 18, 10, 1);
|
||||
|
||||
// Connect checkbox signal "clicked" with a callback function
|
||||
check1->addCallback
|
||||
check1.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_FUNCTION_CALLBACK (&cb_publish),
|
||||
check2
|
||||
&check2
|
||||
);
|
||||
|
||||
// Connect the button signal "clicked" with the callback function
|
||||
|
|
|
@ -34,10 +34,12 @@ class Keyboard : public finalcut::FWidget
|
|||
|
||||
protected:
|
||||
// Event handlers
|
||||
void onKeyPress (finalcut::FKeyEvent*);
|
||||
void onAccel (finalcut::FAccelEvent*);
|
||||
virtual void onKeyPress (finalcut::FKeyEvent*);
|
||||
virtual void onAccel (finalcut::FAccelEvent*);
|
||||
|
||||
void draw();
|
||||
private:
|
||||
// Methods
|
||||
virtual void draw();
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -88,10 +88,14 @@ class Listbox : public finalcut::FDialog
|
|||
Listbox& operator = (const Listbox&);
|
||||
|
||||
// Event handlers
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Data Member
|
||||
std::list<double>* double_list;
|
||||
std::list<double> double_list;
|
||||
finalcut::FListBox list1;
|
||||
finalcut::FListBox list2;
|
||||
finalcut::FListBox list3;
|
||||
finalcut::FButton Quit;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -99,38 +103,41 @@ class Listbox : public finalcut::FDialog
|
|||
Listbox::Listbox (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, double_list()
|
||||
, list1(this)
|
||||
, list2(this)
|
||||
, list3(this)
|
||||
, Quit(this)
|
||||
{
|
||||
temp_str = new finalcut::FString;
|
||||
|
||||
// listbox 1
|
||||
finalcut::FListBox* list1 = new finalcut::FListBox (this);
|
||||
list1->setGeometry(2, 1, 18, 10);
|
||||
list1->setText ("FListBoxItem");
|
||||
//----------
|
||||
list1.setGeometry(2, 1, 18, 10);
|
||||
list1.setText ("FListBoxItem");
|
||||
|
||||
for (int i = 1; i < 30; i++)
|
||||
list1->insert (L"----- " + (finalcut::FString() << i) + L" -----");
|
||||
list1.insert (L"----- " + (finalcut::FString() << i) + L" -----");
|
||||
|
||||
// listbox 2
|
||||
double_list = new std::list<double>;
|
||||
|
||||
//----------
|
||||
for (double i = 1; i<=15; i++)
|
||||
double_list->push_back(2 * i + (i / 100));
|
||||
double_list.push_back(2 * i + (i / 100));
|
||||
|
||||
finalcut::FListBox* list2 = new finalcut::FListBox (this);
|
||||
list2->setGeometry(21, 1, 10, 10);
|
||||
list2->setText ("double");
|
||||
list2.setGeometry(21, 1, 10, 10);
|
||||
list2.setText ("double");
|
||||
|
||||
//
|
||||
// Import via lazy conversion on print
|
||||
//
|
||||
list2->insert (double_list, doubleToItem);
|
||||
list2.insert (&double_list, doubleToItem);
|
||||
|
||||
//
|
||||
// Direct import of the complete list
|
||||
//
|
||||
//list2->insert (double_list->begin(), double_list->end(), doubleToString);
|
||||
//list2.insert (double_list.begin(), double_list.end(), doubleToString);
|
||||
|
||||
// listbox 3
|
||||
//----------
|
||||
std::map<finalcut::FString, finalcut::FString> TLD;
|
||||
TLD["com"] = "Commercial";
|
||||
TLD["org"] = "Organization";
|
||||
|
@ -138,18 +145,16 @@ Listbox::Listbox (finalcut::FWidget* parent)
|
|||
TLD["edu"] = "Education";
|
||||
TLD["gov"] = "Government";
|
||||
|
||||
finalcut::FListBox* list3;
|
||||
list3 = new finalcut::FListBox (TLD.begin(), TLD.end(), mapToString, this);
|
||||
list3->setGeometry(32, 1, 21, 10);
|
||||
list3->setText ("key: value");
|
||||
list3.insert (TLD.begin(), TLD.end(), mapToString);
|
||||
list3.setGeometry(32, 1, 21, 10);
|
||||
list3.setText ("key: value");
|
||||
|
||||
// Quit button
|
||||
finalcut::FButton* Quit = new finalcut::FButton (this);
|
||||
Quit->setGeometry(42, 12, 10, 1);
|
||||
Quit->setText (L"&Quit");
|
||||
Quit.setGeometry(42, 12, 10, 1);
|
||||
Quit.setText (L"&Quit");
|
||||
|
||||
// Add quit button function callback
|
||||
Quit->addCallback
|
||||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
|
@ -160,7 +165,6 @@ Listbox::Listbox (finalcut::FWidget* parent)
|
|||
Listbox::~Listbox() // destructor
|
||||
{
|
||||
delete temp_str;
|
||||
delete double_list;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -50,52 +50,68 @@ class Listview : public finalcut::FDialog
|
|||
Listview& operator = (const Listview&);
|
||||
|
||||
// Method
|
||||
void populate (finalcut::FListView*);
|
||||
void populate();
|
||||
|
||||
// Event handlers
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_showInMessagebox (finalcut::FWidget*, data_ptr);
|
||||
|
||||
// Data Members
|
||||
finalcut::FListView listView;
|
||||
finalcut::FButton Quit;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Listview::Listview (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, listView(this)
|
||||
, Quit(this)
|
||||
{
|
||||
// Create FListView object
|
||||
finalcut::FListView* listView = new finalcut::FListView (this);
|
||||
listView->setGeometry(2, 1, 33, 14);
|
||||
listView.setGeometry(2, 1, 33, 14);
|
||||
|
||||
// Add columns to the view
|
||||
listView->addColumn ("City");
|
||||
listView->addColumn ("Condition");
|
||||
listView->addColumn ("Temp.");
|
||||
listView->addColumn ("Humidity");
|
||||
listView->addColumn ("Pressure", 10);
|
||||
listView.addColumn ("City");
|
||||
listView.addColumn ("Condition");
|
||||
listView.addColumn ("Temp.");
|
||||
listView.addColumn ("Humidity");
|
||||
listView.addColumn ("Pressure", 10);
|
||||
|
||||
// Set right alignment for the third, fourth, and fifth column
|
||||
listView->setColumnAlignment (3, finalcut::fc::alignRight);
|
||||
listView->setColumnAlignment (4, finalcut::fc::alignRight);
|
||||
listView->setColumnAlignment (5, finalcut::fc::alignRight);
|
||||
listView.setColumnAlignment (3, finalcut::fc::alignRight);
|
||||
listView.setColumnAlignment (4, finalcut::fc::alignRight);
|
||||
listView.setColumnAlignment (5, finalcut::fc::alignRight);
|
||||
|
||||
// Set the type of sorting
|
||||
listView.setColumnSortType (1, finalcut::fc::by_name);
|
||||
listView.setColumnSortType (2, finalcut::fc::by_name);
|
||||
listView.setColumnSortType (3, finalcut::fc::by_number);
|
||||
listView.setColumnSortType (4, finalcut::fc::by_number);
|
||||
listView.setColumnSortType (5, finalcut::fc::by_number);
|
||||
|
||||
// Sort in ascending order by the 1st column
|
||||
listView.setColumnSort (1, finalcut::fc::ascending);
|
||||
// The sorting occurs later automatically at insert().
|
||||
// Otherwise you could start the sorting directly with sort()
|
||||
|
||||
// Populate FListView with a list of items
|
||||
populate (listView);
|
||||
populate();
|
||||
|
||||
// Quit button
|
||||
finalcut::FButton* Quit = new finalcut::FButton (this);
|
||||
Quit->setGeometry(24, 16, 10, 1);
|
||||
Quit->setText (L"&Quit");
|
||||
Quit.setGeometry(24, 16, 10, 1);
|
||||
Quit.setText (L"&Quit");
|
||||
|
||||
// Add some function callbacks
|
||||
Quit->addCallback
|
||||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
);
|
||||
|
||||
listView->addCallback
|
||||
listView.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Listview::cb_showInMessagebox)
|
||||
|
@ -107,7 +123,7 @@ Listview::~Listview() // destructor
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Listview::populate (finalcut::FListView* listView)
|
||||
void Listview::populate()
|
||||
{
|
||||
std::string weather[][5] =
|
||||
{
|
||||
|
@ -159,7 +175,7 @@ void Listview::populate (finalcut::FListView* listView)
|
|||
for (int i = 0; i <= lastItem; i++)
|
||||
{
|
||||
finalcut::FStringList line (&weather[i][0], &weather[i][0] + 5);
|
||||
listView->insert (line);
|
||||
listView.insert (line);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -170,10 +186,9 @@ void Listview::onClose (finalcut::FCloseEvent* ev)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Listview::cb_showInMessagebox (finalcut::FWidget* widget, data_ptr)
|
||||
void Listview::cb_showInMessagebox (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
finalcut::FListView* listView = static_cast<finalcut::FListView*>(widget);
|
||||
finalcut::FListViewItem* item = listView->getCurrentItem();
|
||||
finalcut::FListViewItem* item = listView.getCurrentItem();
|
||||
finalcut::FMessageBox info ( "Weather in " + item->getText(1)
|
||||
, " Condition: " + item->getText(2) + "\n"
|
||||
"Temperature: " + item->getText(3) + "\n"
|
||||
|
|
|
@ -40,13 +40,13 @@ class Mandelbrot : public finalcut::FDialog
|
|||
~Mandelbrot();
|
||||
|
||||
// Event handlers
|
||||
void onAccel (finalcut::FAccelEvent*);
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onAccel (finalcut::FAccelEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
private:
|
||||
// Methods
|
||||
virtual void draw();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
|
|
@ -47,81 +47,161 @@ class Menu : public finalcut::FDialog
|
|||
Menu& operator = (const Menu&);
|
||||
|
||||
// Methods
|
||||
void createFileMenuItems (finalcut::FMenu*);
|
||||
void createEditMenuItems (finalcut::FMenu*);
|
||||
void createChoiceMenuItems (finalcut::FMenu*);
|
||||
void createColorMenuItems (finalcut::FMenu*);
|
||||
void createStyleMenuItems (finalcut::FMenu*);
|
||||
void createBorderMenuItems (finalcut::FMenu*);
|
||||
void createBorderColorMenuItems (finalcut::FMenu*);
|
||||
void createBorderStyleMenuItems (finalcut::FMenu*);
|
||||
void configureFileMenuItems();
|
||||
void configureEditMenuItems();
|
||||
void configureChoiceMenuItems();
|
||||
void configureColorMenuItems();
|
||||
void configureStyleMenuItems();
|
||||
void configureBorderMenuItems();
|
||||
void defaultCallback (finalcut::FMenuList*);
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handler
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_message (finalcut::FWidget*, data_ptr);
|
||||
|
||||
// Data Members
|
||||
finalcut::FString line;
|
||||
finalcut::FMenuBar Menubar;
|
||||
finalcut::FMenu File;
|
||||
finalcut::FMenu Edit;
|
||||
finalcut::FMenu Choice;
|
||||
finalcut::FMenuItem Window;
|
||||
finalcut::FMenuItem Help;
|
||||
finalcut::FMenuItem New;
|
||||
finalcut::FMenuItem Open;
|
||||
finalcut::FMenuItem Save;
|
||||
finalcut::FMenuItem SaveAs;
|
||||
finalcut::FMenuItem Close;
|
||||
finalcut::FMenuItem Line1;
|
||||
finalcut::FMenuItem Print;
|
||||
finalcut::FMenuItem Line2;
|
||||
finalcut::FMenuItem Quit;
|
||||
finalcut::FMenuItem Undo;
|
||||
finalcut::FMenuItem Redo;
|
||||
finalcut::FMenuItem Line3;
|
||||
finalcut::FMenuItem Cut;
|
||||
finalcut::FMenuItem Copy;
|
||||
finalcut::FMenuItem Paste;
|
||||
finalcut::FMenuItem Line4;
|
||||
finalcut::FMenuItem Search;
|
||||
finalcut::FMenuItem Next;
|
||||
finalcut::FMenuItem Line5;
|
||||
finalcut::FMenuItem SelectAll;
|
||||
finalcut::FMenu Color;
|
||||
finalcut::FMenu Style;
|
||||
finalcut::FMenu Border;
|
||||
finalcut::FRadioMenuItem Color1;
|
||||
finalcut::FRadioMenuItem Color2;
|
||||
finalcut::FRadioMenuItem Color3;
|
||||
finalcut::FRadioMenuItem Color4;
|
||||
finalcut::FRadioMenuItem Color5;
|
||||
finalcut::FCheckMenuItem Bold;
|
||||
finalcut::FCheckMenuItem Italic;
|
||||
finalcut::FMenu BColor;
|
||||
finalcut::FMenu BStyle;
|
||||
finalcut::FRadioMenuItem BColor1;
|
||||
finalcut::FRadioMenuItem BColor2;
|
||||
finalcut::FRadioMenuItem BStyle1;
|
||||
finalcut::FRadioMenuItem BStyle2;
|
||||
finalcut::FRadioMenuItem BStyle3;
|
||||
finalcut::FRadioMenuItem BStyle4;
|
||||
finalcut::FStatusBar Statusbar;
|
||||
finalcut::FLabel Headline1;
|
||||
finalcut::FLabel Headline2;
|
||||
finalcut::FLabel Info;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Menu::Menu (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, line(13, wchar_t(finalcut::fc::BoxDrawingsHorizontal))
|
||||
, Menubar(this)
|
||||
, File("&File", &Menubar)
|
||||
, Edit("&Edit", &Menubar)
|
||||
, Choice("&Choice", &Menubar)
|
||||
, Window("&Window", &Menubar)
|
||||
, Help("&Help", &Menubar)
|
||||
, New("&New", &File)
|
||||
, Open("&Open...", &File)
|
||||
, Save("&Save", &File)
|
||||
, SaveAs("&Save as...", &File)
|
||||
, Close("&Close", &File)
|
||||
, Line1(&File)
|
||||
, Print("&Print", &File)
|
||||
, Line2(&File)
|
||||
, Quit("&Quit", &File)
|
||||
, Undo(finalcut::fc::Fckey_z, "&Undo", &Edit)
|
||||
, Redo(finalcut::fc::Fckey_y, "&Redo", &Edit)
|
||||
, Line3(&Edit)
|
||||
, Cut(finalcut::fc::Fckey_x, "Cu&t", &Edit)
|
||||
, Copy(finalcut::fc::Fckey_c, "&Copy", &Edit)
|
||||
, Paste(finalcut::fc::Fckey_v, "&Paste", &Edit)
|
||||
, Line4(&Edit)
|
||||
, Search(finalcut::fc::Fckey_f, "&Search", &Edit)
|
||||
, Next(finalcut::fc::Fkey_f3, "Search &next", &Edit)
|
||||
, Line5(&Edit)
|
||||
, SelectAll(finalcut::fc::Fckey_a, "Select &all", &Edit)
|
||||
, Color("&Color", &Choice)
|
||||
, Style("&Style", &Choice)
|
||||
, Border("&Border", &Choice)
|
||||
, Color1("Red", &Color)
|
||||
, Color2("Green", &Color)
|
||||
, Color3("Yellow", &Color)
|
||||
, Color4("Brue", &Color)
|
||||
, Color5("Black", &Color)
|
||||
, Bold("Bold", &Style)
|
||||
, Italic("Italic", &Style)
|
||||
, BColor("&Color", &Border)
|
||||
, BStyle("&Style", &Border)
|
||||
, BColor1("Red", &BColor)
|
||||
, BColor2("Blue", &BColor)
|
||||
, BStyle1(line, &BStyle)
|
||||
, BStyle2("-------------", &BStyle)
|
||||
, BStyle3("- - - - - - -", &BStyle)
|
||||
, BStyle4("- - - - -", &BStyle)
|
||||
, Statusbar(this)
|
||||
, Headline1(this)
|
||||
, Headline2(this)
|
||||
, Info(this)
|
||||
{
|
||||
// Menu bar
|
||||
finalcut::FMenuBar* Menubar = new finalcut::FMenuBar(this);
|
||||
|
||||
// Menu bar items
|
||||
finalcut::FMenu* File = \
|
||||
new finalcut::FMenu ("&File", Menubar);
|
||||
File->setStatusbarMessage ("File management commands");
|
||||
finalcut::FMenu* Edit = \
|
||||
new finalcut::FMenu ("&Edit", Menubar);
|
||||
Edit->setStatusbarMessage ("Cut-and-paste editing commands");
|
||||
finalcut::FMenu* Choice = \
|
||||
new finalcut::FMenu ("&Choice", Menubar);
|
||||
Choice->setStatusbarMessage ("Choice menu");
|
||||
finalcut::FMenuItem* Window = \
|
||||
new finalcut::FMenuItem ("&Window", Menubar);
|
||||
Window->setDisable();
|
||||
finalcut::FMenuItem* Help = \
|
||||
new finalcut::FMenuItem ("&Help", Menubar);
|
||||
Help->setStatusbarMessage ("Show version and copyright information");
|
||||
// Menu bar itms
|
||||
File.setStatusbarMessage ("File management commands");
|
||||
Edit.setStatusbarMessage ("Cut-and-paste editing commands");
|
||||
Choice.setStatusbarMessage ("Choice menu");
|
||||
Window.setDisable();
|
||||
Help.setStatusbarMessage ("Show version and copyright information");
|
||||
|
||||
// Menu items
|
||||
createFileMenuItems (File);
|
||||
createEditMenuItems (Edit);
|
||||
createChoiceMenuItems (Choice);
|
||||
configureFileMenuItems();
|
||||
configureEditMenuItems();
|
||||
configureChoiceMenuItems();
|
||||
|
||||
// Add default menu item callback
|
||||
defaultCallback (Menubar);
|
||||
defaultCallback (&Menubar);
|
||||
|
||||
// Statusbar at the bottom
|
||||
finalcut::FStatusBar* Statusbar = \
|
||||
new finalcut::FStatusBar (this);
|
||||
Statusbar->setMessage("Status bar message");
|
||||
Statusbar.setMessage("Status bar message");
|
||||
|
||||
// Headline labels
|
||||
finalcut::FLabel* Headline1 = \
|
||||
new finalcut::FLabel(" Key ", this);
|
||||
Headline1->ignorePadding();
|
||||
Headline1->setGeometry(3, 2, 5, 1);
|
||||
Headline1->setEmphasis();
|
||||
Headline1 << " Key ";
|
||||
Headline1.ignorePadding();
|
||||
Headline1.setGeometry(3, 2, 5, 1);
|
||||
Headline1.setEmphasis();
|
||||
|
||||
finalcut::FLabel* Headline2 = \
|
||||
new finalcut::FLabel(" Function ", this);
|
||||
Headline2->ignorePadding();
|
||||
Headline2->setGeometry(19, 2, 10, 1);
|
||||
Headline2->setEmphasis();
|
||||
Headline2 << " Function ";
|
||||
Headline2.ignorePadding();
|
||||
Headline2.setGeometry(19, 2, 10, 1);
|
||||
Headline2.setEmphasis();
|
||||
|
||||
// Info label
|
||||
finalcut::FLabel* Info = \
|
||||
new finalcut::FLabel( "<F10> Activate menu bar\n"
|
||||
"<Ctrl>+<Space> Activate menu bar\n"
|
||||
"<Meta>+<X> Exit", this );
|
||||
Info->setGeometry(2, 1, 36, 3);
|
||||
Info << "<F10> Activate menu bar\n"
|
||||
<< "<Ctrl>+<Space> Activate menu bar\n"
|
||||
<< "<Meta>+<X> Exit";
|
||||
Info.setGeometry(2, 1, 36, 3);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -129,45 +209,27 @@ Menu::~Menu()
|
|||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createFileMenuItems (finalcut::FMenu* File)
|
||||
void Menu::configureFileMenuItems()
|
||||
{
|
||||
// "File" menu items
|
||||
finalcut::FMenuItem* New = \
|
||||
new finalcut::FMenuItem ("&New", File);
|
||||
New->addAccelerator (finalcut::fc::Fckey_n); // Ctrl + N
|
||||
New->setStatusbarMessage ("Create a new file");
|
||||
finalcut::FMenuItem* Open = \
|
||||
new finalcut::FMenuItem ("&Open...", File);
|
||||
Open->addAccelerator (finalcut::fc::Fckey_o); // Ctrl + O
|
||||
Open->setStatusbarMessage ("Locate and open a text file");
|
||||
finalcut::FMenuItem* Save = \
|
||||
new finalcut::FMenuItem ("&Save", File);
|
||||
Save->addAccelerator (finalcut::fc::Fckey_s); // Ctrl + S
|
||||
Save->setStatusbarMessage ("Save the file");
|
||||
finalcut::FMenuItem* SaveAs = \
|
||||
new finalcut::FMenuItem ("&Save as...", File);
|
||||
SaveAs->setStatusbarMessage ("Save the current file under a different name");
|
||||
finalcut::FMenuItem* Close = \
|
||||
new finalcut::FMenuItem ("&Close", File);
|
||||
Close->addAccelerator (finalcut::fc::Fckey_w); // Ctrl + W
|
||||
Close->setStatusbarMessage ("Close the current file");
|
||||
finalcut::FMenuItem* Line1 = \
|
||||
new finalcut::FMenuItem (File);
|
||||
Line1->setSeparator();
|
||||
finalcut::FMenuItem* Print = \
|
||||
new finalcut::FMenuItem ("&Print", File);
|
||||
Print->addAccelerator (finalcut::fc::Fckey_p); // Ctrl + P
|
||||
Print->setStatusbarMessage ("Print the current file");
|
||||
finalcut::FMenuItem* Line2 = \
|
||||
new finalcut::FMenuItem (File);
|
||||
Line2->setSeparator();
|
||||
finalcut::FMenuItem* Quit = \
|
||||
new finalcut::FMenuItem ("&Quit", File);
|
||||
Quit->addAccelerator (finalcut::fc::Fmkey_x); // Meta/Alt + X
|
||||
Quit->setStatusbarMessage ("Exit the program");
|
||||
New.addAccelerator (finalcut::fc::Fckey_n); // Ctrl + N
|
||||
New.setStatusbarMessage ("Create a new file");
|
||||
Open.addAccelerator (finalcut::fc::Fckey_o); // Ctrl + O
|
||||
Open.setStatusbarMessage ("Locate and open a text file");
|
||||
Save.addAccelerator (finalcut::fc::Fckey_s); // Ctrl + S
|
||||
Save.setStatusbarMessage ("Save the file");
|
||||
SaveAs.setStatusbarMessage ("Save the current file under a different name");
|
||||
Close.addAccelerator (finalcut::fc::Fckey_w); // Ctrl + W
|
||||
Close.setStatusbarMessage ("Close the current file");
|
||||
Line1.setSeparator();
|
||||
Print.addAccelerator (finalcut::fc::Fckey_p); // Ctrl + P
|
||||
Print.setStatusbarMessage ("Print the current file");
|
||||
Line2.setSeparator();
|
||||
Quit.addAccelerator (finalcut::fc::Fmkey_x); // Meta/Alt + X
|
||||
Quit.setStatusbarMessage ("Exit the program");
|
||||
|
||||
// Add quit menu item callback
|
||||
Quit->addCallback
|
||||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
|
@ -175,138 +237,73 @@ void Menu::createFileMenuItems (finalcut::FMenu* File)
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createEditMenuItems (finalcut::FMenu* Edit)
|
||||
void Menu::configureEditMenuItems()
|
||||
{
|
||||
// "Edit" menu items
|
||||
finalcut::FMenuItem* Undo = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_z, "&Undo", Edit);
|
||||
Undo->setStatusbarMessage ("Undo the previous operation");
|
||||
finalcut::FMenuItem* Redo = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_y, "&Redo", Edit);
|
||||
Redo->setDisable();
|
||||
finalcut::FMenuItem* Line3 = \
|
||||
new finalcut::FMenuItem (Edit);
|
||||
Line3->setSeparator();
|
||||
finalcut::FMenuItem* Cut = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_x, "Cu&t", Edit);
|
||||
Cut->setStatusbarMessage ( "Remove the input text "
|
||||
Undo.setStatusbarMessage ("Undo the previous operation");
|
||||
Redo.setDisable();
|
||||
Line3.setSeparator();
|
||||
Cut.setStatusbarMessage ( "Remove the input text "
|
||||
"and put it in the clipboard" );
|
||||
finalcut::FMenuItem* Copy = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_c, "&Copy", Edit);
|
||||
Copy->setStatusbarMessage ("Copy the input text into the clipboad");
|
||||
finalcut::FMenuItem* Paste = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_v, "&Paste", Edit);
|
||||
Paste->setStatusbarMessage ("Insert text form clipboard");
|
||||
finalcut::FMenuItem* Line4 = \
|
||||
new finalcut::FMenuItem (Edit);
|
||||
Line4->setSeparator();
|
||||
finalcut::FMenuItem* Search = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_f, "&Search", Edit);
|
||||
Search->setStatusbarMessage ("Search for text");
|
||||
finalcut::FMenuItem* Next = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fkey_f3, "Search &next", Edit);
|
||||
Next->setStatusbarMessage ("Repeat the last search command");
|
||||
finalcut::FMenuItem* Line5 = \
|
||||
new finalcut::FMenuItem (Edit);
|
||||
Line5->setSeparator();
|
||||
finalcut::FMenuItem* SelectAll = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_a, "Select &all", Edit);
|
||||
SelectAll->setStatusbarMessage ("Select the whole text");
|
||||
Copy.setStatusbarMessage ("Copy the input text into the clipboad");
|
||||
Paste.setStatusbarMessage ("Insert text form clipboard");
|
||||
Line4.setSeparator();
|
||||
Search.setStatusbarMessage ("Search for text");
|
||||
Next.setStatusbarMessage ("Repeat the last search command");
|
||||
Line5.setSeparator();
|
||||
SelectAll.setStatusbarMessage ("Select the whole text");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createChoiceMenuItems (finalcut::FMenu* Choice)
|
||||
void Menu::configureChoiceMenuItems()
|
||||
{
|
||||
// "Choice" menu items
|
||||
finalcut::FMenu* Color = new finalcut::FMenu ("&Color", Choice);
|
||||
Color->setStatusbarMessage ("Choose a color");
|
||||
finalcut::FMenu* Style = new finalcut::FMenu ("&Style", Choice);
|
||||
Style->setStatusbarMessage ("Choose a Style");
|
||||
finalcut::FMenu* Border = new finalcut::FMenu ("&Border", Choice);
|
||||
Border->setStatusbarMessage ("Choose Border");
|
||||
Color.setStatusbarMessage ("Choose a color");
|
||||
Style.setStatusbarMessage ("Choose a Style");
|
||||
Border.setStatusbarMessage ("Choose Border");
|
||||
|
||||
createColorMenuItems (Color);
|
||||
createStyleMenuItems (Style);
|
||||
createBorderMenuItems (Border);
|
||||
configureColorMenuItems();
|
||||
configureStyleMenuItems();
|
||||
configureBorderMenuItems();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createColorMenuItems (finalcut::FMenu* Color)
|
||||
void Menu::configureColorMenuItems()
|
||||
{
|
||||
// "Color" menu items
|
||||
finalcut::FRadioMenuItem* Color1 = \
|
||||
new finalcut::FRadioMenuItem ("Red", Color);
|
||||
Color1->setStatusbarMessage ("Set text red");
|
||||
finalcut::FRadioMenuItem* Color2 = \
|
||||
new finalcut::FRadioMenuItem ("Green", Color);
|
||||
Color2->setStatusbarMessage ("Set text green");
|
||||
finalcut::FRadioMenuItem* Color3 = \
|
||||
new finalcut::FRadioMenuItem ("Yellow", Color);
|
||||
Color3->setStatusbarMessage ("Set text yellow");
|
||||
finalcut::FRadioMenuItem* Color4 = \
|
||||
new finalcut::FRadioMenuItem ("Brue", Color);
|
||||
Color4->setStatusbarMessage ("Set text brue");
|
||||
finalcut::FRadioMenuItem* Color5 = \
|
||||
new finalcut::FRadioMenuItem ("Black", Color);
|
||||
Color5->setStatusbarMessage ("Set text black");
|
||||
Color5->setChecked();
|
||||
Color1.setStatusbarMessage ("Set text red");
|
||||
Color2.setStatusbarMessage ("Set text green");
|
||||
Color3.setStatusbarMessage ("Set text yellow");
|
||||
Color4.setStatusbarMessage ("Set text brue");
|
||||
Color5.setStatusbarMessage ("Set text black");
|
||||
Color5.setChecked();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createStyleMenuItems (finalcut::FMenu* Style)
|
||||
void Menu::configureStyleMenuItems()
|
||||
{
|
||||
// "Style" menu items
|
||||
finalcut::FCheckMenuItem* Bold = \
|
||||
new finalcut::FCheckMenuItem ("Bold", Style);
|
||||
Bold->setStatusbarMessage ("Set text bold");
|
||||
finalcut::FCheckMenuItem* Italic = \
|
||||
new finalcut::FCheckMenuItem ("Italic", Style);
|
||||
Italic->setStatusbarMessage ("Set text italic");
|
||||
Bold.setStatusbarMessage ("Set text bold");
|
||||
Italic.setStatusbarMessage ("Set text italic");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createBorderMenuItems (finalcut::FMenu* Border)
|
||||
void Menu::configureBorderMenuItems()
|
||||
{
|
||||
// "Border" menu items
|
||||
finalcut::FMenu* BColor = new finalcut::FMenu ("&Color", Border);
|
||||
BColor->setStatusbarMessage ("Choose the border color");
|
||||
finalcut::FMenu* BStyle = new finalcut::FMenu ("&Style", Border);
|
||||
BStyle->setStatusbarMessage ("Choose the border Style");
|
||||
BColor.setStatusbarMessage ("Choose the border color");
|
||||
BStyle.setStatusbarMessage ("Choose the border Style");
|
||||
|
||||
createBorderColorMenuItems (BColor);
|
||||
createBorderStyleMenuItems (BStyle);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createBorderColorMenuItems (finalcut::FMenu* BColor)
|
||||
{
|
||||
// "BColor" menu items
|
||||
finalcut::FRadioMenuItem* BColor1 = \
|
||||
new finalcut::FRadioMenuItem ("Red", BColor);
|
||||
BColor1->setStatusbarMessage ("Set red border");
|
||||
finalcut::FRadioMenuItem* BColor2 = \
|
||||
new finalcut::FRadioMenuItem ("Blue", BColor);
|
||||
BColor2->setStatusbarMessage ("Set blue border");
|
||||
}
|
||||
BColor1.setStatusbarMessage ("Set red border");
|
||||
BColor2.setStatusbarMessage ("Set blue border");
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Menu::createBorderStyleMenuItems (finalcut::FMenu* BStyle)
|
||||
{
|
||||
// "BStyle" menu items
|
||||
finalcut::FString line(13, wchar_t(finalcut::fc::BoxDrawingsHorizontal));
|
||||
finalcut::FRadioMenuItem* BStyle1 = \
|
||||
new finalcut::FRadioMenuItem (line, BStyle);
|
||||
BStyle1->setChecked();
|
||||
BStyle1->setStatusbarMessage ("Set border 1");
|
||||
finalcut::FRadioMenuItem* BStyle2 = \
|
||||
new finalcut::FRadioMenuItem ("-------------", BStyle);
|
||||
BStyle2->setStatusbarMessage ("Set border 2");
|
||||
finalcut::FRadioMenuItem* BStyle3 = \
|
||||
new finalcut::FRadioMenuItem ("- - - - - - -", BStyle);
|
||||
BStyle3->setStatusbarMessage ("Set border 3");
|
||||
finalcut::FRadioMenuItem* BStyle4 = \
|
||||
new finalcut::FRadioMenuItem ("- - - - -", BStyle);
|
||||
BStyle4->setStatusbarMessage ("Set border 4");
|
||||
BStyle1.setChecked();
|
||||
BStyle1.setStatusbarMessage ("Set border 1");
|
||||
BStyle2.setStatusbarMessage ("Set border 2");
|
||||
BStyle3.setStatusbarMessage ("Set border 3");
|
||||
BStyle4.setStatusbarMessage ("Set border 4");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -50,14 +50,15 @@ class ColorChooser : public finalcut::FWidget
|
|||
ColorChooser& operator = (const ColorChooser&);
|
||||
|
||||
// Method
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Event handler
|
||||
void onMouseDown (finalcut::FMouseEvent*);
|
||||
virtual void onMouseDown (finalcut::FMouseEvent*);
|
||||
|
||||
// Data Members
|
||||
short fg_color;
|
||||
short bg_color;
|
||||
finalcut::FLabel headline;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -66,6 +67,7 @@ ColorChooser::ColorChooser (finalcut::FWidget* parent)
|
|||
: FWidget(parent)
|
||||
, fg_color(finalcut::fc::White)
|
||||
, bg_color(finalcut::fc::Black)
|
||||
, headline(this)
|
||||
{
|
||||
setSize (8, 12);
|
||||
setFixedSize (8, 12);
|
||||
|
@ -73,16 +75,19 @@ ColorChooser::ColorChooser (finalcut::FWidget* parent)
|
|||
|
||||
if ( parent )
|
||||
{
|
||||
setForegroundColor(parent->getForegroundColor());
|
||||
setBackgroundColor(parent->getBackgroundColor());
|
||||
short fg = parent->getForegroundColor();
|
||||
short bg = parent->getBackgroundColor();
|
||||
setForegroundColor(fg);
|
||||
setBackgroundColor(bg);
|
||||
headline.setForegroundColor(fg);
|
||||
headline.setBackgroundColor(bg);
|
||||
}
|
||||
|
||||
// Text label
|
||||
finalcut::FLabel* headline = new finalcut::FLabel (this);
|
||||
headline->setGeometry(1, 1, 8, 1);
|
||||
headline->setEmphasis();
|
||||
headline->setAlignment (finalcut::fc::alignCenter);
|
||||
*headline << "Color";
|
||||
headline.setGeometry (1, 1, 8, 1);
|
||||
headline.setEmphasis();
|
||||
headline.setAlignment (finalcut::fc::alignCenter);
|
||||
headline << "Color";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -188,15 +193,16 @@ class Brushes : public finalcut::FWidget
|
|||
Brushes& operator = (const Brushes&);
|
||||
|
||||
// Method
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Event handler
|
||||
void onMouseDown (finalcut::FMouseEvent*);
|
||||
virtual void onMouseDown (finalcut::FMouseEvent*);
|
||||
|
||||
// Data Members
|
||||
wchar_t brush;
|
||||
short fg_color;
|
||||
short bg_color;
|
||||
finalcut::FLabel headline;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -206,6 +212,7 @@ Brushes::Brushes (finalcut::FWidget* parent)
|
|||
, brush(L' ')
|
||||
, fg_color(finalcut::fc::White)
|
||||
, bg_color(finalcut::fc::Black)
|
||||
, headline(this)
|
||||
{
|
||||
setSize (8, 4);
|
||||
setFixedSize (8, 4);
|
||||
|
@ -213,16 +220,19 @@ Brushes::Brushes (finalcut::FWidget* parent)
|
|||
|
||||
if ( parent )
|
||||
{
|
||||
setForegroundColor(parent->getForegroundColor());
|
||||
setBackgroundColor(parent->getBackgroundColor());
|
||||
short fg = parent->getForegroundColor();
|
||||
short bg = parent->getBackgroundColor();
|
||||
setForegroundColor(fg);
|
||||
setBackgroundColor(bg);
|
||||
headline.setForegroundColor(fg);
|
||||
headline.setBackgroundColor(bg);
|
||||
}
|
||||
|
||||
// Text label
|
||||
finalcut::FLabel* headline = new finalcut::FLabel (this);
|
||||
headline->setGeometry(1, 1, 8, 1);
|
||||
headline->setEmphasis();
|
||||
headline->setAlignment (finalcut::fc::alignCenter);
|
||||
*headline << "Brush";
|
||||
headline.setGeometry(1, 1, 8, 1);
|
||||
headline.setEmphasis();
|
||||
headline.setAlignment (finalcut::fc::alignCenter);
|
||||
headline << "Brush";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -316,8 +326,8 @@ class MouseDraw : public finalcut::FDialog
|
|||
void setGeometry (int, int, int, int, bool = true);
|
||||
|
||||
// Event handlers
|
||||
void onAccel (finalcut::FAccelEvent*);
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onAccel (finalcut::FAccelEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -329,19 +339,19 @@ class MouseDraw : public finalcut::FDialog
|
|||
virtual void draw();
|
||||
void drawBrush (int, int, bool = false);
|
||||
void drawCanvas();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handler
|
||||
void onMouseDown (finalcut::FMouseEvent*);
|
||||
void onMouseMove (finalcut::FMouseEvent*);
|
||||
virtual void onMouseDown (finalcut::FMouseEvent*);
|
||||
virtual void onMouseMove (finalcut::FMouseEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_colorChanged (finalcut::FWidget*, data_ptr);
|
||||
|
||||
// Data Members
|
||||
term_area* canvas;
|
||||
ColorChooser* c_chooser;
|
||||
Brushes* brush;
|
||||
ColorChooser c_chooser;
|
||||
Brushes brush;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -349,20 +359,18 @@ class MouseDraw : public finalcut::FDialog
|
|||
MouseDraw::MouseDraw (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, canvas(0)
|
||||
, c_chooser()
|
||||
, brush()
|
||||
, c_chooser(this)
|
||||
, brush(this)
|
||||
{
|
||||
setText ("Drawing with the mouse");
|
||||
c_chooser = new ColorChooser(this);
|
||||
c_chooser->setPos (1, 1);
|
||||
c_chooser->addCallback
|
||||
c_chooser.setPos (1, 1);
|
||||
c_chooser.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MouseDraw::cb_colorChanged)
|
||||
);
|
||||
|
||||
brush = new Brushes(this);
|
||||
brush->setPos (1, 12);
|
||||
brush.setPos (1, 12);
|
||||
|
||||
finalcut::FPoint no_shadow(0,0);
|
||||
finalcut::FRect scroll_geometry(0, 0, 1, 1);
|
||||
|
@ -450,15 +458,15 @@ void MouseDraw::drawBrush (int x, int y, bool swap_color)
|
|||
if ( x > 10 && x < Cols && y > 2 && y < Lines )
|
||||
{
|
||||
if ( swap_color )
|
||||
setColor (c_chooser->getBackground(), c_chooser->getForeground());
|
||||
setColor (c_chooser.getBackground(), c_chooser.getForeground());
|
||||
else
|
||||
setColor (c_chooser->getForeground(), c_chooser->getBackground());
|
||||
setColor (c_chooser.getForeground(), c_chooser.getBackground());
|
||||
|
||||
// set canvas print cursor position
|
||||
canvas->cursor_x = x - canvas->offset_left - 10;
|
||||
canvas->cursor_y = y - canvas->offset_top - 2;
|
||||
// print on canvas
|
||||
print (canvas, brush->getBrush());
|
||||
print (canvas, brush.getBrush());
|
||||
// copy canvas to the dialog
|
||||
drawCanvas();
|
||||
}
|
||||
|
@ -539,9 +547,9 @@ void MouseDraw::onMouseMove (finalcut::FMouseEvent* ev)
|
|||
//----------------------------------------------------------------------
|
||||
void MouseDraw::cb_colorChanged (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
brush->setForeground (c_chooser->getForeground());
|
||||
brush->setBackground (c_chooser->getBackground());
|
||||
brush->redraw();
|
||||
brush.setForeground (c_chooser.getForeground());
|
||||
brush.setBackground (c_chooser.getBackground());
|
||||
brush.redraw();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ class Scrollview : public finalcut::FScrollView
|
|||
Scrollview& operator = (const Scrollview&);
|
||||
|
||||
// Method
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Callback methods
|
||||
void cb_go_east (finalcut::FWidget*, data_ptr);
|
||||
|
@ -58,58 +58,55 @@ class Scrollview : public finalcut::FScrollView
|
|||
void cb_go_north (finalcut::FWidget*, data_ptr);
|
||||
|
||||
// Data Members
|
||||
finalcut::FButton* go_east;
|
||||
finalcut::FButton* go_south;
|
||||
finalcut::FButton* go_west;
|
||||
finalcut::FButton* go_north;
|
||||
wchar_t pointer_right;
|
||||
wchar_t pointer_down;
|
||||
wchar_t pointer_left;
|
||||
wchar_t pointer_up;
|
||||
finalcut::FButton go_east;
|
||||
finalcut::FButton go_south;
|
||||
finalcut::FButton go_west;
|
||||
finalcut::FButton go_north;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Scrollview::Scrollview (finalcut::FWidget* parent)
|
||||
: finalcut::FScrollView(parent)
|
||||
, go_east()
|
||||
, go_south()
|
||||
, go_west()
|
||||
, go_north()
|
||||
, pointer_right(wchar_t(finalcut::fc::BlackRightPointingPointer))
|
||||
, pointer_down(wchar_t(finalcut::fc::BlackDownPointingTriangle))
|
||||
, pointer_left(wchar_t(finalcut::fc::BlackLeftPointingPointer))
|
||||
, pointer_up(wchar_t(finalcut::fc::BlackUpPointingTriangle))
|
||||
, go_east(pointer_right, this)
|
||||
, go_south(pointer_down, this)
|
||||
, go_west(pointer_left, this)
|
||||
, go_north(pointer_up, this)
|
||||
{
|
||||
// Create the four navigation buttons
|
||||
wchar_t pointer_right = wchar_t(finalcut::fc::BlackRightPointingPointer);
|
||||
go_east = new finalcut::FButton(pointer_right, this);
|
||||
go_east->setGeometry (1, 1, 5, 1);
|
||||
|
||||
wchar_t pointer_down = wchar_t(finalcut::fc::BlackDownPointingTriangle);
|
||||
go_south = new finalcut::FButton(pointer_down, this);
|
||||
go_south->setGeometry (getScrollWidth() - 5, 1, 5, 1);
|
||||
|
||||
wchar_t pointer_left = wchar_t(finalcut::fc::BlackLeftPointingPointer);
|
||||
go_west = new finalcut::FButton(pointer_left, this);
|
||||
go_west->setGeometry (getScrollWidth() - 5, getScrollHeight() - 2, 5, 1);
|
||||
|
||||
wchar_t pointer_up = wchar_t(finalcut::fc::BlackUpPointingTriangle);
|
||||
go_north = new finalcut::FButton(pointer_up, this);
|
||||
go_north->setGeometry (1, getScrollHeight() - 2, 5, 1);
|
||||
// Sets the navigation button geometry
|
||||
go_east.setGeometry (1, 1, 5, 1);
|
||||
go_south.setGeometry (getScrollWidth() - 5, 1, 5, 1);
|
||||
go_west.setGeometry (getScrollWidth() - 5, getScrollHeight() - 2, 5, 1);
|
||||
go_north.setGeometry (1, getScrollHeight() - 2, 5, 1);
|
||||
|
||||
// Add scroll function callbacks to the buttons
|
||||
go_east->addCallback
|
||||
go_east.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_go_east)
|
||||
);
|
||||
|
||||
go_south->addCallback
|
||||
go_south.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_go_south)
|
||||
);
|
||||
|
||||
go_west->addCallback
|
||||
go_west.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_go_west)
|
||||
);
|
||||
|
||||
go_north->addCallback
|
||||
go_north.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollview::cb_go_north)
|
||||
|
@ -124,9 +121,9 @@ Scrollview::~Scrollview()
|
|||
void Scrollview::setScrollSize (int width, int height)
|
||||
{
|
||||
FScrollView::setScrollSize (width, height);
|
||||
go_south->setPos (width - 5, 1);
|
||||
go_west->setPos (width - 5, height - 1);
|
||||
go_north->setPos (1, height - 1);
|
||||
go_south.setPos (width - 5, 1);
|
||||
go_west.setPos (width - 5, height - 1);
|
||||
go_north.setPos (1, height - 1);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -156,36 +153,36 @@ void Scrollview::draw()
|
|||
void Scrollview::cb_go_east (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
scrollToX (getScrollWidth() - getViewportWidth() + 1);
|
||||
go_south->setFocus();
|
||||
go_east->redraw();
|
||||
go_south->redraw();
|
||||
go_south.setFocus();
|
||||
go_east.redraw();
|
||||
go_south.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_go_south (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
scrollToY (getScrollHeight() - getViewportHeight() + 1);
|
||||
go_west->setFocus();
|
||||
go_south->redraw();
|
||||
go_west->redraw();
|
||||
go_west.setFocus();
|
||||
go_south.redraw();
|
||||
go_west.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_go_west (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
scrollToX (1);
|
||||
go_north->setFocus();
|
||||
go_west->redraw();
|
||||
go_north->redraw();
|
||||
go_north.setFocus();
|
||||
go_west.redraw();
|
||||
go_north.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Scrollview::cb_go_north (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
scrollToY (1);
|
||||
go_east->setFocus();
|
||||
go_north->redraw();
|
||||
go_east->redraw();
|
||||
go_east.setFocus();
|
||||
go_north.redraw();
|
||||
go_east.redraw();
|
||||
}
|
||||
|
||||
|
||||
|
@ -206,10 +203,15 @@ class Scrollviewdemo : public finalcut::FDialog
|
|||
~Scrollviewdemo();
|
||||
|
||||
// Event handler
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_quit (finalcut::FWidget* = 0, data_ptr = 0);
|
||||
|
||||
// Data Members
|
||||
Scrollview sview;
|
||||
finalcut::FButton quit_btn;
|
||||
finalcut::FLabel label;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -217,31 +219,31 @@ class Scrollviewdemo : public finalcut::FDialog
|
|||
//----------------------------------------------------------------------
|
||||
Scrollviewdemo::Scrollviewdemo (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, sview(this)
|
||||
, quit_btn("&Quit", this)
|
||||
, label(this)
|
||||
{
|
||||
setGeometry (16, 3, 50, 19);
|
||||
setText ("Scrolling viewport example");
|
||||
|
||||
// The scrolling viewport widget
|
||||
Scrollview* sview = new Scrollview (this);
|
||||
sview->setGeometry(3, 2, 44, 12);
|
||||
sview->setScrollSize(188, 124);
|
||||
sview.setGeometry(3, 2, 44, 12);
|
||||
sview.setScrollSize(188, 124);
|
||||
|
||||
// Quit button
|
||||
finalcut::FButton* button = new finalcut::FButton("&Quit", this);
|
||||
button->setGeometry(37, 15, 10, 1);
|
||||
quit_btn.setGeometry(37, 15, 10, 1);
|
||||
|
||||
// Add function callback
|
||||
button->addCallback
|
||||
quit_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &Scrollviewdemo::cb_quit)
|
||||
);
|
||||
|
||||
// Text label
|
||||
finalcut::FLabel* label = new finalcut::FLabel (this);
|
||||
label->setGeometry(2, 1, 46, 1);
|
||||
label->setEmphasis();
|
||||
*label << L"Use scrollbars to change the viewport position";
|
||||
label.setGeometry(2, 1, 46, 1);
|
||||
label.setEmphasis();
|
||||
label << L"Use scrollbars to change the viewport position";
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -40,9 +40,9 @@ class AttribDlg : public finalcut::FDialog
|
|||
~AttribDlg();
|
||||
|
||||
// Event handlers
|
||||
void onAccel (finalcut::FAccelEvent*);
|
||||
void onWheel (finalcut::FWheelEvent*);
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onAccel (finalcut::FAccelEvent*);
|
||||
virtual void onWheel (finalcut::FWheelEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_next (finalcut::FWidget* = 0, data_ptr = 0);
|
||||
|
@ -58,11 +58,11 @@ class AttribDlg : public finalcut::FDialog
|
|||
AttribDlg& operator = (const AttribDlg&);
|
||||
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Data Members
|
||||
finalcut::FButton* next_button;
|
||||
finalcut::FButton* back_button;
|
||||
finalcut::FButton next_button;
|
||||
finalcut::FButton back_button;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -70,28 +70,26 @@ class AttribDlg : public finalcut::FDialog
|
|||
AttribDlg::AttribDlg (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, bgcolor(wc.label_bg)
|
||||
, next_button()
|
||||
, back_button()
|
||||
, next_button("&Next >", this)
|
||||
, back_button("< &Back", this)
|
||||
{
|
||||
setText ( "A terminal attributes test ("
|
||||
+ finalcut::FString(getTermType())
|
||||
+ ")");
|
||||
|
||||
next_button = new finalcut::FButton("&Next >", this);
|
||||
next_button->setGeometry(getWidth() - 13, getHeight() - 4, 10, 1);
|
||||
next_button->addAccelerator(finalcut::fc::Fkey_right);
|
||||
back_button = new finalcut::FButton("< &Back", this);
|
||||
back_button->setGeometry(getWidth() - 25, getHeight() - 4, 10, 1);
|
||||
back_button->addAccelerator(finalcut::fc::Fkey_left);
|
||||
next_button.setGeometry(getWidth() - 13, getHeight() - 4, 10, 1);
|
||||
next_button.addAccelerator(finalcut::fc::Fkey_right);
|
||||
back_button.setGeometry(getWidth() - 25, getHeight() - 4, 10, 1);
|
||||
back_button.addAccelerator(finalcut::fc::Fkey_left);
|
||||
|
||||
// Add function callbacks
|
||||
next_button->addCallback
|
||||
next_button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &AttribDlg::cb_next)
|
||||
);
|
||||
|
||||
back_button->addCallback
|
||||
back_button.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &AttribDlg::cb_back)
|
||||
|
@ -167,8 +165,8 @@ void AttribDlg::adjustSize()
|
|||
y = 1;
|
||||
|
||||
setGeometry(x, y, 69, 21, false);
|
||||
next_button->setGeometry(getWidth() - 13, getHeight() - 4, 10, 1, false);
|
||||
back_button->setGeometry(getWidth() - 25, getHeight() - 4, 10, 1, false);
|
||||
next_button.setGeometry(getWidth() - 13, getHeight() - 4, 10, 1, false);
|
||||
back_button.setGeometry(getWidth() - 25, getHeight() - 4, 10, 1, false);
|
||||
finalcut::FDialog::adjustSize();
|
||||
}
|
||||
|
||||
|
@ -191,7 +189,7 @@ class AttribDemo : public finalcut::FWidget
|
|||
{ }
|
||||
|
||||
// Event handler
|
||||
void onWheel (finalcut::FWheelEvent* ev)
|
||||
virtual void onWheel (finalcut::FWheelEvent* ev)
|
||||
{
|
||||
AttribDlg* p = static_cast<AttribDlg*>(getParentWidget());
|
||||
|
||||
|
@ -216,7 +214,7 @@ class AttribDemo : public finalcut::FWidget
|
|||
void printStandout();
|
||||
void printInvisible();
|
||||
void printProtected();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Data Member
|
||||
int colors;
|
||||
|
@ -492,20 +490,20 @@ int main (int argc, char* argv[])
|
|||
// Create a dialog box object.
|
||||
// This object will be automatically deleted by
|
||||
// the parent object "app" (FObject destructor).
|
||||
AttribDlg* dialog = new AttribDlg(&app);
|
||||
AttribDlg dialog(&app);
|
||||
|
||||
dialog->setGeometry (6, 2, 69, 21);
|
||||
dialog->addAccelerator('q'); // press 'q' to quit
|
||||
dialog->setShadow();
|
||||
dialog.setGeometry (6, 2, 69, 21);
|
||||
dialog.addAccelerator('q'); // press 'q' to quit
|
||||
dialog.setShadow();
|
||||
|
||||
// Create the attribute demo widget as a child object from the dialog
|
||||
AttribDemo* demo = new AttribDemo(dialog);
|
||||
demo->setGeometry (1, 1, 67, 19);
|
||||
AttribDemo demo(&dialog);
|
||||
demo.setGeometry (1, 1, 67, 19);
|
||||
|
||||
// Set the dialog object as main widget
|
||||
app.setMainWidget(dialog);
|
||||
app.setMainWidget(&dialog);
|
||||
|
||||
// Show and start the application
|
||||
dialog->show();
|
||||
dialog.show();
|
||||
return app.exec();
|
||||
}
|
||||
|
|
|
@ -39,18 +39,32 @@ void booleans();
|
|||
void numeric();
|
||||
void string(finalcut::FTermcap::tcap_map*&);
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// struct data
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
struct data
|
||||
{
|
||||
static int getNumberOfItems();
|
||||
|
||||
struct termcap_string
|
||||
{
|
||||
const std::string name;
|
||||
const finalcut::fc::termcaps cap;
|
||||
};
|
||||
|
||||
static termcap_string strings[];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
// String data array
|
||||
static const termcap_string strings[] =
|
||||
//----------------------------------------------------------------------
|
||||
// struct data - string data array
|
||||
//----------------------------------------------------------------------
|
||||
data::termcap_string data::strings[] =
|
||||
{
|
||||
{ "t_bell", finalcut::fc::t_bell },
|
||||
{ "t_erase_chars", finalcut::fc::t_erase_chars },
|
||||
|
@ -136,7 +150,12 @@ static const termcap_string strings[] =
|
|||
{ "t_key_mouse", finalcut::fc::t_key_mouse }
|
||||
};
|
||||
|
||||
const int last_item = int ( sizeof(strings) / sizeof(strings[0]) ) - 1;
|
||||
// data inline functions
|
||||
//----------------------------------------------------------------------
|
||||
inline int data::getNumberOfItems()
|
||||
{
|
||||
return int ( sizeof(strings) / sizeof(strings[0]) ) - 1;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -272,10 +291,10 @@ void string(finalcut::FTermcap::tcap_map*& tcap)
|
|||
{
|
||||
std::cout << "\r\n[String]\r\n";
|
||||
|
||||
for (int n = 0; n <= last_item; n++ )
|
||||
for (int n = 0; n <= data::getNumberOfItems(); n++ )
|
||||
{
|
||||
const std::string name = strings[n].name;
|
||||
const finalcut::fc::termcaps cap = strings[n].cap;
|
||||
const std::string name = data::strings[n].name;
|
||||
const finalcut::fc::termcaps cap = data::strings[n].cap;
|
||||
tcapString (name, tcap[cap].string);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,11 +35,11 @@ class Timer : public finalcut::FWidget
|
|||
|
||||
protected:
|
||||
// Method
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Event handlers
|
||||
void onTimer (finalcut::FTimerEvent*);
|
||||
void onAccel (finalcut::FAccelEvent*);
|
||||
virtual void onTimer (finalcut::FTimerEvent*);
|
||||
virtual void onAccel (finalcut::FAccelEvent*);
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -41,7 +41,6 @@ class Transparent : public finalcut::FDialog
|
|||
inherit_background = 2
|
||||
} trans_type;
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
explicit Transparent (finalcut::FWidget* = 0, trans_type = transparent);
|
||||
|
||||
|
@ -56,10 +55,10 @@ class Transparent : public finalcut::FDialog
|
|||
Transparent& operator = (const Transparent&);
|
||||
|
||||
// Method
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (finalcut::FKeyEvent* ev);
|
||||
virtual void onKeyPress (finalcut::FKeyEvent* ev);
|
||||
|
||||
// Data Members
|
||||
trans_type type;
|
||||
|
@ -150,9 +149,11 @@ void Transparent::onKeyPress (finalcut::FKeyEvent* ev)
|
|||
|
||||
class MainWindow : public finalcut::FDialog
|
||||
{
|
||||
private:
|
||||
finalcut::FString line1;
|
||||
finalcut::FString line2;
|
||||
public:
|
||||
// Constructor
|
||||
explicit MainWindow (finalcut::FWidget* = 0);
|
||||
// Destructor
|
||||
~MainWindow();
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -160,13 +161,13 @@ class MainWindow : public finalcut::FDialog
|
|||
// Disable assignment operator (=)
|
||||
MainWindow& operator = (const MainWindow&);
|
||||
|
||||
void draw();
|
||||
virtual void draw();
|
||||
|
||||
// Event handlers
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
void onShow (finalcut::FShowEvent*);
|
||||
void onTimer (finalcut::FTimerEvent*);
|
||||
void onKeyPress (finalcut::FKeyEvent* ev)
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onShow (finalcut::FShowEvent*);
|
||||
virtual void onTimer (finalcut::FTimerEvent*);
|
||||
virtual void onKeyPress (finalcut::FKeyEvent* ev)
|
||||
{
|
||||
if ( ! ev )
|
||||
return;
|
||||
|
@ -180,11 +181,13 @@ class MainWindow : public finalcut::FDialog
|
|||
finalcut::FDialog::onKeyPress(ev);
|
||||
}
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
explicit MainWindow (finalcut::FWidget* = 0);
|
||||
// Destructor
|
||||
~MainWindow();
|
||||
// Data Members
|
||||
finalcut::FString line1;
|
||||
finalcut::FString line2;
|
||||
Transparent transpwin;
|
||||
Transparent shadowwin;
|
||||
Transparent ibg;
|
||||
finalcut::FStatusBar status_bar;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -193,28 +196,28 @@ MainWindow::MainWindow (finalcut::FWidget* parent)
|
|||
: FDialog(parent)
|
||||
, line1()
|
||||
, line2()
|
||||
, transpwin(this)
|
||||
, shadowwin(this, Transparent::shadow)
|
||||
, ibg(this, Transparent::inherit_background)
|
||||
, status_bar(this)
|
||||
{
|
||||
line1 = " .-. .-. .-.";
|
||||
line2 = "`._.' `._.' `._.' ";
|
||||
|
||||
Transparent* transpwin = new Transparent(this);
|
||||
transpwin->setText("transparent");
|
||||
transpwin->setGeometry (6, 3, 29, 12);
|
||||
transpwin->unsetTransparentShadow();
|
||||
transpwin.setText("transparent");
|
||||
transpwin.setGeometry (6, 3, 29, 12);
|
||||
transpwin.unsetTransparentShadow();
|
||||
|
||||
Transparent* shadowwin = new Transparent(this, Transparent::shadow);
|
||||
shadowwin->setText("shadow");
|
||||
shadowwin->setGeometry (46, 11, 29, 12);
|
||||
shadowwin->unsetTransparentShadow();
|
||||
shadowwin.setText("shadow");
|
||||
shadowwin.setGeometry (46, 11, 29, 12);
|
||||
shadowwin.unsetTransparentShadow();
|
||||
|
||||
Transparent* ibg = new Transparent(this, Transparent::inherit_background);
|
||||
ibg->setText("inherit background");
|
||||
ibg->setGeometry (42, 3, 29, 7);
|
||||
ibg->unsetTransparentShadow();
|
||||
ibg.setText("inherit background");
|
||||
ibg.setGeometry (42, 3, 29, 7);
|
||||
ibg.unsetTransparentShadow();
|
||||
|
||||
// Statusbar at the bottom
|
||||
finalcut::FStatusBar* status_bar = new finalcut::FStatusBar (this);
|
||||
status_bar->setMessage("Press Q to quit");
|
||||
status_bar.setMessage("Press Q to quit");
|
||||
|
||||
addAccelerator('q');
|
||||
unsetTransparentShadow();
|
||||
|
|
|
@ -53,20 +53,21 @@ class Treeview : public finalcut::FDialog
|
|||
Treeview& operator = (const Treeview&);
|
||||
|
||||
// Methods
|
||||
void adjustSize();
|
||||
TreeItem* getAfrica();
|
||||
TreeItem* getAsia();
|
||||
TreeItem* getEurope();
|
||||
TreeItem* getNorthAmerica();
|
||||
TreeItem* getSouthAmerica();
|
||||
TreeItem* getOceania();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handlers
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Data Members
|
||||
finalcut::FListView* listView;
|
||||
finalcut::FButton* Quit;
|
||||
bool initialized;
|
||||
finalcut::FListView listView;
|
||||
finalcut::FButton Quit;
|
||||
static TreeItem africa[];
|
||||
static TreeItem asia[];
|
||||
static TreeItem europe[];
|
||||
static TreeItem north_america[];
|
||||
static TreeItem south_america[];
|
||||
static TreeItem oceania[];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -94,9 +95,9 @@ struct Treeview::TreeItem
|
|||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem* Treeview::getAfrica()
|
||||
{
|
||||
static TreeItem africa[] =
|
||||
// class Treeview - array data
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem Treeview::africa[] =
|
||||
{
|
||||
{ "Algeria", "40,400,000", "15.9", 0 },
|
||||
{ "Angola", "25,789,024", "20.69", 0 },
|
||||
|
@ -123,13 +124,7 @@ Treeview::TreeItem* Treeview::getAfrica()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
return africa;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem* Treeview::getAsia()
|
||||
{
|
||||
static TreeItem asia[] =
|
||||
Treeview::TreeItem Treeview::asia[] =
|
||||
{
|
||||
{ "Afghanistan", "34,656,032", "49.88", 0 },
|
||||
{ "China", "1,403,500,365", "145.0", 0 },
|
||||
|
@ -153,13 +148,7 @@ Treeview::TreeItem* Treeview::getAsia()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
return asia;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem* Treeview::getEurope()
|
||||
{
|
||||
static TreeItem europe[] =
|
||||
Treeview::TreeItem Treeview::europe[] =
|
||||
{
|
||||
{ "Austria", "8,794,267", "104.0", 0 },
|
||||
{ "Belarus", "9,498,700", "45.8", 0 },
|
||||
|
@ -183,13 +172,8 @@ Treeview::TreeItem* Treeview::getEurope()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
return europe;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem* Treeview::getNorthAmerica()
|
||||
{
|
||||
static TreeItem north_america[] =
|
||||
Treeview::TreeItem Treeview::north_america[] =
|
||||
{
|
||||
{ "Canada", "35,151,728", "3.92", 0 },
|
||||
{ "Cuba", "11,239,224", "102.3", 0 },
|
||||
|
@ -202,13 +186,7 @@ Treeview::TreeItem* Treeview::getNorthAmerica()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
return north_america;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem* Treeview::getSouthAmerica()
|
||||
{
|
||||
static TreeItem south_america[] =
|
||||
Treeview::TreeItem Treeview::south_america[] =
|
||||
{
|
||||
{ "Argentina", "43,847,430", "14.4", 0 },
|
||||
{ "Bolivia", "11,410,651", "10.4", 0 },
|
||||
|
@ -223,13 +201,7 @@ Treeview::TreeItem* Treeview::getSouthAmerica()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
return south_america;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::TreeItem* Treeview::getOceania()
|
||||
{
|
||||
static TreeItem oceania[] =
|
||||
Treeview::TreeItem Treeview::oceania[] =
|
||||
{
|
||||
{ "Australia", "24,675,900", "3.2", 0 },
|
||||
{ "Papua New Guinea", "7,059,653", "15.0", 0 },
|
||||
|
@ -247,39 +219,30 @@ Treeview::TreeItem* Treeview::getOceania()
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
return oceania;
|
||||
}
|
||||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
Treeview::Treeview (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, listView()
|
||||
, Quit()
|
||||
, initialized(false)
|
||||
, listView(this)
|
||||
, Quit(this)
|
||||
{
|
||||
// Create FListView object
|
||||
listView = new finalcut::FListView (this);
|
||||
listView->setGeometry(2, 1, 53, 14);
|
||||
listView.setGeometry(2, 1, 53, 14);
|
||||
|
||||
// Add columns to the view
|
||||
listView->addColumn ("Name", 23);
|
||||
listView->addColumn ("Population");
|
||||
listView->addColumn ("Density/km²");
|
||||
listView.addColumn ("Name", 23);
|
||||
listView.addColumn ("Population");
|
||||
listView.addColumn ("Density/km²");
|
||||
|
||||
// Set right alignment for the second and third column
|
||||
listView->setColumnAlignment (2, finalcut::fc::alignRight);
|
||||
listView->setColumnAlignment (3, finalcut::fc::alignRight);
|
||||
listView.setColumnAlignment (2, finalcut::fc::alignRight);
|
||||
listView.setColumnAlignment (3, finalcut::fc::alignRight);
|
||||
|
||||
// Activate tree view
|
||||
listView->setTreeView();
|
||||
listView.setTreeView();
|
||||
|
||||
// Populate FListView with a list of items
|
||||
TreeItem* africa = getAfrica();
|
||||
TreeItem* asia = getAsia();
|
||||
TreeItem* europe = getEurope();
|
||||
TreeItem* north_america = getNorthAmerica();
|
||||
TreeItem* south_america = getSouthAmerica();
|
||||
TreeItem* oceania = getOceania();
|
||||
|
||||
static TreeItem continent[] =
|
||||
{
|
||||
{ "Africa", "944,000,000", "31.2", africa },
|
||||
|
@ -300,13 +263,13 @@ Treeview::Treeview (finalcut::FWidget* parent)
|
|||
finalcut::FStringList continent_line ( continent_list->begin()
|
||||
, continent_list->end() );
|
||||
finalcut::FListViewIterator::FObjectIterator iter = \
|
||||
listView->insert (continent_line);
|
||||
listView.insert (continent_line);
|
||||
|
||||
while ( country_list && country_list->name )
|
||||
{
|
||||
finalcut::FStringList country_line ( country_list->begin()
|
||||
, country_list->end() );
|
||||
listView->insert (country_line, iter);
|
||||
listView.insert (country_line, iter);
|
||||
country_list++;
|
||||
}
|
||||
|
||||
|
@ -314,16 +277,17 @@ Treeview::Treeview (finalcut::FWidget* parent)
|
|||
}
|
||||
|
||||
// Quit button
|
||||
Quit = new finalcut::FButton (this);
|
||||
Quit->setGeometry(24, 16, 10, 1);
|
||||
Quit->setText (L"&Quit");
|
||||
Quit.setGeometry(24, 16, 10, 1);
|
||||
Quit.setText (L"&Quit");
|
||||
|
||||
// Add some function callbacks
|
||||
Quit->addCallback
|
||||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
);
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -342,11 +306,11 @@ void Treeview::adjustSize()
|
|||
|
||||
setX (X, false);
|
||||
|
||||
if ( listView )
|
||||
listView->setHeight (getHeight() - 6, false);
|
||||
|
||||
if ( Quit )
|
||||
Quit->setY(getHeight() - 4);
|
||||
if ( initialized )
|
||||
{
|
||||
listView.setHeight (getHeight() - 6, false);
|
||||
Quit.setY(getHeight() - 4);
|
||||
}
|
||||
|
||||
finalcut::FDialog::adjustSize();
|
||||
}
|
||||
|
|
593
examples/ui.cpp
593
examples/ui.cpp
|
@ -50,8 +50,8 @@ class ProgressDialog : public finalcut::FDialog
|
|||
ProgressDialog& operator = (const ProgressDialog&);
|
||||
|
||||
// Event handlers
|
||||
void onShow (finalcut::FShowEvent*);
|
||||
void onTimer (finalcut::FTimerEvent*);
|
||||
virtual void onShow (finalcut::FShowEvent*);
|
||||
virtual void onTimer (finalcut::FTimerEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_reset_bar (finalcut::FWidget*, data_ptr);
|
||||
|
@ -59,59 +59,55 @@ class ProgressDialog : public finalcut::FDialog
|
|||
void cb_exit_bar (finalcut::FWidget*, data_ptr);
|
||||
|
||||
// Data Members
|
||||
finalcut::FProgressbar* progressBar;
|
||||
finalcut::FButton* reset;
|
||||
finalcut::FButton* more;
|
||||
finalcut::FButton* quit;
|
||||
finalcut::FProgressbar progressBar;
|
||||
finalcut::FButton reset;
|
||||
finalcut::FButton more;
|
||||
finalcut::FButton quit;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
ProgressDialog::ProgressDialog (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, progressBar()
|
||||
, reset()
|
||||
, more()
|
||||
, quit()
|
||||
, progressBar(this)
|
||||
, reset(this)
|
||||
, more(this)
|
||||
, quit(this)
|
||||
{
|
||||
setGeometry (int((getParentWidget()->getWidth() - 40) / 2), 7, 40, 10);
|
||||
setText("Progress bar");
|
||||
//setModal();
|
||||
|
||||
reset = new finalcut::FButton(this);
|
||||
reset->setText("&Reset");
|
||||
reset->setStatusbarMessage ("Reset the progress bar");
|
||||
reset->setGeometry(2, 6, 8, 1, false);
|
||||
reset->setDisable();
|
||||
reset.setText("&Reset");
|
||||
reset.setStatusbarMessage ("Reset the progress bar");
|
||||
reset.setGeometry(2, 6, 8, 1, false);
|
||||
reset.setDisable();
|
||||
|
||||
more = new finalcut::FButton(this);
|
||||
more->setText("&More");
|
||||
more->setStatusbarMessage ("Increases the progress bar position");
|
||||
more->setGeometry(15, 6, 8, 1, false);
|
||||
more->setDisable();
|
||||
more.setText("&More");
|
||||
more.setStatusbarMessage ("Increases the progress bar position");
|
||||
more.setGeometry(15, 6, 8, 1, false);
|
||||
more.setDisable();
|
||||
|
||||
quit = new finalcut::FButton(this);
|
||||
quit->setText("E&xit");
|
||||
quit->setGeometry(28, 6, 8, 1, false);
|
||||
quit->setDisable();
|
||||
quit.setText("E&xit");
|
||||
quit.setGeometry(28, 6, 8, 1, false);
|
||||
quit.setDisable();
|
||||
|
||||
progressBar = new finalcut::FProgressbar(this);
|
||||
progressBar->setGeometry(2, 3, 34, 1, false);
|
||||
//progressBar->setPercentage(78);
|
||||
progressBar.setGeometry(2, 3, 34, 1, false);
|
||||
//progressBar.setPercentage(78);
|
||||
|
||||
reset->addCallback
|
||||
reset.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &ProgressDialog::cb_reset_bar)
|
||||
);
|
||||
|
||||
more->addCallback
|
||||
more.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &ProgressDialog::cb_more_bar)
|
||||
);
|
||||
|
||||
quit->addCallback
|
||||
quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &ProgressDialog::cb_exit_bar)
|
||||
|
@ -122,13 +118,9 @@ ProgressDialog::ProgressDialog (finalcut::FWidget* parent)
|
|||
ProgressDialog::~ProgressDialog() // destructor
|
||||
{
|
||||
delOwnTimer();
|
||||
delCallback(quit);
|
||||
delCallback(more);
|
||||
delCallback(reset);
|
||||
delete(progressBar);
|
||||
delete(quit);
|
||||
delete(more);
|
||||
delete(reset);
|
||||
delCallback(&quit);
|
||||
delCallback(&more);
|
||||
delCallback(&reset);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -140,8 +132,8 @@ void ProgressDialog::onShow (finalcut::FShowEvent*)
|
|||
//----------------------------------------------------------------------
|
||||
void ProgressDialog::onTimer (finalcut::FTimerEvent*)
|
||||
{
|
||||
int p = progressBar->getPercentage();
|
||||
progressBar->setPercentage(++p);
|
||||
int p = progressBar.getPercentage();
|
||||
progressBar.setPercentage(++p);
|
||||
flush_out();
|
||||
|
||||
if ( p != 100 )
|
||||
|
@ -150,10 +142,10 @@ void ProgressDialog::onTimer (finalcut::FTimerEvent*)
|
|||
delOwnTimer();
|
||||
activateWindow();
|
||||
raiseWindow();
|
||||
reset->setEnable();
|
||||
reset->setFocus();
|
||||
more->setEnable();
|
||||
quit->setEnable();
|
||||
reset.setEnable();
|
||||
reset.setFocus();
|
||||
more.setEnable();
|
||||
quit.setEnable();
|
||||
redraw();
|
||||
|
||||
if ( getStatusBar() )
|
||||
|
@ -166,14 +158,14 @@ void ProgressDialog::onTimer (finalcut::FTimerEvent*)
|
|||
//----------------------------------------------------------------------
|
||||
void ProgressDialog::cb_reset_bar (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
progressBar->reset();
|
||||
progressBar.reset();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void ProgressDialog::cb_more_bar (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
int p = progressBar->getPercentage();
|
||||
progressBar->setPercentage(++p);
|
||||
int p = progressBar.getPercentage();
|
||||
progressBar.setPercentage(++p);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -208,31 +200,30 @@ class TextWindow : public finalcut::FDialog
|
|||
TextWindow& operator = (const TextWindow&);
|
||||
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Data Members
|
||||
finalcut::FTextView* scrollText;
|
||||
finalcut::FTextView scrollText;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
TextWindow::TextWindow (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, scrollText()
|
||||
, scrollText(this)
|
||||
{
|
||||
scrollText = new finalcut::FTextView(this);
|
||||
scrollText->ignorePadding();
|
||||
scrollText->setGeometry (1, 2, getWidth(), getHeight() - 1);
|
||||
scrollText.ignorePadding();
|
||||
scrollText.setGeometry (1, 2, getWidth(), getHeight() - 1);
|
||||
setMinimumSize (51, 6);
|
||||
scrollText->setFocus();
|
||||
scrollText->insert(" -----------------------------------------------\n"
|
||||
scrollText.setFocus();
|
||||
scrollText.insert(" -----------------------------------------------\n"
|
||||
" line 1\n"
|
||||
" -----------------------------------------------\n"
|
||||
" line 3\n"
|
||||
" line 4"
|
||||
, -1);
|
||||
scrollText->replaceRange(" File viewer", 1, 1);
|
||||
scrollText->deleteRange(3, 4);
|
||||
scrollText.replaceRange(" File viewer", 1, 1);
|
||||
scrollText.deleteRange(3, 4);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -242,14 +233,14 @@ TextWindow::~TextWindow() // destructor
|
|||
//----------------------------------------------------------------------
|
||||
void TextWindow::append (const finalcut::FString& str)
|
||||
{
|
||||
scrollText->append(str);
|
||||
scrollText.append(str);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void TextWindow::adjustSize()
|
||||
{
|
||||
finalcut::FDialog::adjustSize();
|
||||
scrollText->setGeometry (1, 2, getWidth(), getHeight() - 1);
|
||||
scrollText.setGeometry (1, 2, getWidth(), getHeight() - 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -281,7 +272,6 @@ class MyDialog : public finalcut::FDialog
|
|||
void initEditMenuCallbacks();
|
||||
void initViewMenuCallbacks();
|
||||
void initHelpMenuCallback();
|
||||
void initStatusBar();
|
||||
void initStatusBarCallbacks();
|
||||
void initWidgets();
|
||||
void initFlatButtons();
|
||||
|
@ -289,10 +279,10 @@ class MyDialog : public finalcut::FDialog
|
|||
void initButtons();
|
||||
void initLabels();
|
||||
void initWidgetsCallbacks();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handlers
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_noFunctionMsg (finalcut::FWidget*, data_ptr);
|
||||
|
@ -312,31 +302,53 @@ class MyDialog : public finalcut::FDialog
|
|||
void cb_setInput (finalcut::FWidget*, data_ptr);
|
||||
|
||||
// Data Members
|
||||
finalcut::FMenuItem* Open;
|
||||
finalcut::FMenuItem* Quit;
|
||||
finalcut::FMenuItem* File1;
|
||||
finalcut::FMenuItem* File2;
|
||||
finalcut::FMenuItem* File3;
|
||||
finalcut::FMenuItem* Cut;
|
||||
finalcut::FMenuItem* Copy;
|
||||
finalcut::FMenuItem* Paste;
|
||||
finalcut::FMenuItem* Clear;
|
||||
finalcut::FMenuItem* Env;
|
||||
finalcut::FMenuItem* Drive;
|
||||
finalcut::FMenuItem* Help;
|
||||
finalcut::FStatusKey* key_F1;
|
||||
finalcut::FStatusKey* key_F2;
|
||||
finalcut::FStatusKey* key_F3;
|
||||
finalcut::FButton* MyButton1;
|
||||
finalcut::FButton* MyButton2;
|
||||
finalcut::FButton* MyButton3;
|
||||
finalcut::FButton* MyButton4;
|
||||
finalcut::FButton* MyButton5;
|
||||
finalcut::FButton* MyButton6;
|
||||
finalcut::FRadioButton* radio1;
|
||||
finalcut::FLabel* tagged_count;
|
||||
finalcut::FLineEdit* myLineEdit;
|
||||
finalcut::FListBox* myList;
|
||||
bool initialized;
|
||||
finalcut::FMenuBar Menubar;
|
||||
finalcut::FMenu File; // Menu bar items
|
||||
finalcut::FMenu Edit;
|
||||
finalcut::FMenu View;
|
||||
finalcut::FMenuItem Options;
|
||||
finalcut::FDialogListMenu Window;
|
||||
finalcut::FMenuItem Help;
|
||||
finalcut::FMenuItem Open; // "File" menu items
|
||||
finalcut::FMenu Recent;
|
||||
finalcut::FMenuItem Line1;
|
||||
finalcut::FMenuItem Quit;
|
||||
finalcut::FMenuItem File1; // "Recent" menu items
|
||||
finalcut::FMenuItem File2;
|
||||
finalcut::FMenuItem File3;
|
||||
finalcut::FMenuItem Undo;
|
||||
finalcut::FMenuItem Redo;
|
||||
finalcut::FMenuItem Line2;
|
||||
finalcut::FMenuItem Cut;
|
||||
finalcut::FMenuItem Copy;
|
||||
finalcut::FMenuItem Paste;
|
||||
finalcut::FMenuItem Clear;
|
||||
finalcut::FMenuItem Env;
|
||||
finalcut::FMenuItem Drive;
|
||||
finalcut::FStatusBar Statusbar;
|
||||
finalcut::FStatusKey key_F1;
|
||||
finalcut::FStatusKey key_F2;
|
||||
finalcut::FStatusKey key_F3;
|
||||
finalcut::FButton MyButton1;
|
||||
finalcut::FButton MyButton2;
|
||||
finalcut::FButton MyButton3;
|
||||
finalcut::FButtonGroup radioButtonGroup;
|
||||
finalcut::FRadioButton radio1;
|
||||
finalcut::FRadioButton radio2;
|
||||
finalcut::FButtonGroup checkButtonGroup;
|
||||
finalcut::FCheckBox check1;
|
||||
finalcut::FCheckBox check2;
|
||||
finalcut::FLineEdit myLineEdit;
|
||||
finalcut::FButton MyButton4;
|
||||
finalcut::FButton MyButton5;
|
||||
finalcut::FButton MyButton6;
|
||||
finalcut::FListBox myList;
|
||||
finalcut::FLabel headline;
|
||||
finalcut::FLabel tagged;
|
||||
finalcut::FLabel tagged_count;
|
||||
finalcut::FLabel sum;
|
||||
finalcut::FLabel sum_count;
|
||||
finalcut::FString clipboard;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
@ -344,39 +356,61 @@ class MyDialog : public finalcut::FDialog
|
|||
//----------------------------------------------------------------------
|
||||
MyDialog::MyDialog (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, Open()
|
||||
, Quit()
|
||||
, File1()
|
||||
, File2()
|
||||
, File3()
|
||||
, Cut()
|
||||
, Copy()
|
||||
, Paste()
|
||||
, Clear()
|
||||
, Env()
|
||||
, Drive()
|
||||
, Help()
|
||||
, key_F1()
|
||||
, key_F2()
|
||||
, key_F3()
|
||||
, MyButton1()
|
||||
, MyButton2()
|
||||
, MyButton3()
|
||||
, MyButton4()
|
||||
, MyButton5()
|
||||
, MyButton6()
|
||||
, radio1()
|
||||
, tagged_count()
|
||||
, myLineEdit()
|
||||
, myList()
|
||||
, initialized(false)
|
||||
, Menubar(this)
|
||||
, File("&File", &Menubar)
|
||||
, Edit("&Edit", &Menubar)
|
||||
, View("&View", &Menubar)
|
||||
, Options("&Options", &Menubar)
|
||||
, Window("&Window", &Menubar)
|
||||
, Help("&Help", &Menubar)
|
||||
, Open("&Open...", &File)
|
||||
, Recent("&System files", &File)
|
||||
, Line1(&File)
|
||||
, Quit("&Quit", &File)
|
||||
, File1("/etc/services", &Recent)
|
||||
, File2("/etc/fstab", &Recent)
|
||||
, File3("/etc/passwd", &Recent)
|
||||
, Undo(finalcut::fc::Fckey_z, "Undo", &Edit)
|
||||
, Redo(finalcut::fc::Fckey_y, "Redo", &Edit)
|
||||
, Line2(&Edit)
|
||||
, Cut(finalcut::fc::Fckey_x, "Cu&t", &Edit)
|
||||
, Copy(finalcut::fc::Fckey_c, "&Copy", &Edit)
|
||||
, Paste(finalcut::fc::Fckey_v, "&Paste", &Edit)
|
||||
, Clear(finalcut::fc::Fkey_dc, "C&lear", &Edit)
|
||||
, Env("&Terminal...", &View)
|
||||
, Drive("&Drive symbols...", &View)
|
||||
, Statusbar(this)
|
||||
, key_F1(finalcut::fc::Fkey_f1, "About", &Statusbar)
|
||||
, key_F2(finalcut::fc::Fkey_f2, "View", &Statusbar)
|
||||
, key_F3(finalcut::fc::Fkey_f3, "Quit", &Statusbar)
|
||||
, MyButton1(this)
|
||||
, MyButton2(this)
|
||||
, MyButton3(this)
|
||||
, radioButtonGroup("Button", this)
|
||||
, radio1("E&nable", &radioButtonGroup)
|
||||
, radio2(&radioButtonGroup)
|
||||
, checkButtonGroup("Options", this)
|
||||
, check1("&Bitmode", &checkButtonGroup)
|
||||
, check2("&8-Bit", &checkButtonGroup)
|
||||
, myLineEdit(this)
|
||||
, MyButton4(this)
|
||||
, MyButton5(this)
|
||||
, MyButton6(this)
|
||||
, myList(this)
|
||||
, headline(this)
|
||||
, tagged(L"Tagged:", this)
|
||||
, tagged_count(this)
|
||||
, sum(L"Sum:", this)
|
||||
, sum_count(this)
|
||||
, clipboard()
|
||||
{
|
||||
initMenu(); // Initialize the program menu
|
||||
initMenuCallbacks(); // Initialize program menu callbacks
|
||||
initStatusBar(); // Initialize the status bar
|
||||
initStatusBarCallbacks(); // Initialize status bar callbacks
|
||||
initWidgets(); // Initialize the dialog widgets
|
||||
initWidgetsCallbacks(); // Initialize dialog widget callbacks
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -386,69 +420,36 @@ MyDialog::~MyDialog() // destructor
|
|||
//----------------------------------------------------------------------
|
||||
void MyDialog::initMenu()
|
||||
{
|
||||
// Menu bar
|
||||
finalcut::FMenuBar* Menubar = new finalcut::FMenuBar (this);
|
||||
|
||||
// Menu bar items
|
||||
finalcut::FMenu* File = new finalcut::FMenu ("&File", Menubar);
|
||||
File->setStatusbarMessage ("File management commands");
|
||||
finalcut::FMenu* Edit = new finalcut::FMenu ("&Edit", Menubar);
|
||||
Edit->setStatusbarMessage ("Cut-and-paste editing commands");
|
||||
finalcut::FMenu* View = new finalcut::FMenu ("&View", Menubar);
|
||||
View->setStatusbarMessage ("Show internal informations");
|
||||
finalcut::FMenuItem* Options = \
|
||||
new finalcut::FMenuItem ("&Options", Menubar);
|
||||
Options->setStatusbarMessage ("Set program defaults");
|
||||
Options->setDisable();
|
||||
finalcut::FDialogListMenu* Window = \
|
||||
new finalcut::FDialogListMenu ("&Window", Menubar);
|
||||
Window->setStatusbarMessage ("List of all the active dialogs");
|
||||
Help = new finalcut::FMenuItem ("&Help", Menubar);
|
||||
Help->setStatusbarMessage ("Show version and copyright information");
|
||||
File.setStatusbarMessage ("File management commands");
|
||||
Edit.setStatusbarMessage ("Cut-and-paste editing commands");
|
||||
View.setStatusbarMessage ("Show internal informations");
|
||||
Options.setStatusbarMessage ("Set program defaults");
|
||||
Options.setDisable();
|
||||
Window.setStatusbarMessage ("List of all the active dialogs");
|
||||
Help.setStatusbarMessage ("Show version and copyright information");
|
||||
|
||||
// "File" menu items
|
||||
Open = new finalcut::FMenuItem ("&Open...", File);
|
||||
Open->addAccelerator (finalcut::fc::Fckey_o); // Ctrl + O
|
||||
Open->setStatusbarMessage ("Locate and open a text file");
|
||||
finalcut::FMenu* Recent = new finalcut::FMenu ("&System files", File);
|
||||
Recent->setStatusbarMessage ("View text file");
|
||||
|
||||
finalcut::FMenuItem* Line1 = new finalcut::FMenuItem (File);
|
||||
Line1->setSeparator();
|
||||
Quit = new finalcut::FMenuItem ("&Quit", File);
|
||||
Quit->addAccelerator (finalcut::fc::Fmkey_x); // Meta/Alt + X
|
||||
Quit->setStatusbarMessage ("Exit the program");
|
||||
|
||||
// "Recent" menu items
|
||||
File1 = new finalcut::FMenuItem ("/etc/services", Recent);
|
||||
File2 = new finalcut::FMenuItem ("/etc/fstab", Recent);
|
||||
File3 = new finalcut::FMenuItem ("/etc/passwd", Recent);
|
||||
Open.addAccelerator (finalcut::fc::Fckey_o); // Ctrl + O
|
||||
Open.setStatusbarMessage ("Locate and open a text file");
|
||||
Recent.setStatusbarMessage ("View text file");
|
||||
Line1.setSeparator();
|
||||
Quit.addAccelerator (finalcut::fc::Fmkey_x); // Meta/Alt + X
|
||||
Quit.setStatusbarMessage ("Exit the program");
|
||||
|
||||
// "Edit" menu items
|
||||
finalcut::FMenuItem* Undo = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_z, "Undo", Edit);
|
||||
Undo->setDisable();
|
||||
finalcut::FMenuItem* Redo = \
|
||||
new finalcut::FMenuItem (finalcut::fc::Fckey_y, "Redo", Edit);
|
||||
Redo->setDisable();
|
||||
finalcut::FMenuItem* Line2 = \
|
||||
new finalcut::FMenuItem (Edit);
|
||||
Line2->setSeparator();
|
||||
Cut = new finalcut::FMenuItem (finalcut::fc::Fckey_x, "Cu&t", Edit);
|
||||
Cut->setStatusbarMessage ( "Remove the input text"
|
||||
Undo.setDisable();
|
||||
Redo.setDisable();
|
||||
Line2.setSeparator();
|
||||
Cut.setStatusbarMessage ( "Remove the input text"
|
||||
" and put it in the clipboard" );
|
||||
Copy= new finalcut::FMenuItem (finalcut::fc::Fckey_c, "&Copy", Edit);
|
||||
Copy->setStatusbarMessage ("Copy the input text into the clipboad");
|
||||
Paste = new finalcut::FMenuItem (finalcut::fc::Fckey_v, "&Paste", Edit);
|
||||
Paste->setStatusbarMessage ("Insert text form clipboard");
|
||||
Clear = new finalcut::FMenuItem (finalcut::fc::Fkey_dc, "C&lear", Edit);
|
||||
Clear->setStatusbarMessage ("Delete input text");
|
||||
Copy.setStatusbarMessage ("Copy the input text into the clipboad");
|
||||
Paste.setStatusbarMessage ("Insert text form clipboard");
|
||||
Clear.setStatusbarMessage ("Delete input text");
|
||||
|
||||
// "View" menu items
|
||||
Env = new finalcut::FMenuItem ("&Terminal...", View);
|
||||
Env->setStatusbarMessage ("Informations about this terminal");
|
||||
Drive = new finalcut::FMenuItem ("&Drive symbols...", View);
|
||||
Drive->setStatusbarMessage ("Show drive symbols");
|
||||
Env.setStatusbarMessage ("Informations about this terminal");
|
||||
Drive.setStatusbarMessage ("Show drive symbols");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -465,38 +466,38 @@ void MyDialog::initMenuCallbacks()
|
|||
void MyDialog::initFileMenuCallbacks()
|
||||
{
|
||||
// File menu
|
||||
Open->addCallback
|
||||
Open.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view)
|
||||
);
|
||||
|
||||
Quit->addCallback
|
||||
Quit.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
);
|
||||
|
||||
// System files submenu
|
||||
File1->addCallback
|
||||
File1.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view),
|
||||
static_cast<finalcut::FWidget::data_ptr>(File1)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&File1)
|
||||
);
|
||||
|
||||
File2->addCallback
|
||||
File2.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view),
|
||||
static_cast<finalcut::FWidget::data_ptr>(File2)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&File2)
|
||||
);
|
||||
|
||||
File3->addCallback
|
||||
File3.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view),
|
||||
static_cast<finalcut::FWidget::data_ptr>(File3)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&File3)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -504,25 +505,25 @@ void MyDialog::initFileMenuCallbacks()
|
|||
void MyDialog::initEditMenuCallbacks()
|
||||
{
|
||||
// Edit menu
|
||||
Cut->addCallback
|
||||
Cut.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_cutClipboard)
|
||||
);
|
||||
|
||||
Copy->addCallback
|
||||
Copy.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_copyClipboard)
|
||||
);
|
||||
|
||||
Paste->addCallback
|
||||
Paste.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_pasteClipboard)
|
||||
);
|
||||
|
||||
Clear->addCallback
|
||||
Clear.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_clearInput)
|
||||
|
@ -533,13 +534,13 @@ void MyDialog::initEditMenuCallbacks()
|
|||
void MyDialog::initViewMenuCallbacks()
|
||||
{
|
||||
// View menu
|
||||
Env->addCallback
|
||||
Env.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_terminfo)
|
||||
);
|
||||
|
||||
Drive->addCallback
|
||||
Drive.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_drives)
|
||||
|
@ -549,43 +550,31 @@ void MyDialog::initViewMenuCallbacks()
|
|||
//----------------------------------------------------------------------
|
||||
void MyDialog::initHelpMenuCallback()
|
||||
{
|
||||
Help->addCallback
|
||||
Help.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_about)
|
||||
);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::initStatusBar()
|
||||
{
|
||||
// Statusbar at the bottom
|
||||
finalcut::FStatusBar* Statusbar = new finalcut::FStatusBar (this);
|
||||
|
||||
// Statusbar keys
|
||||
key_F1 = new finalcut::FStatusKey (finalcut::fc::Fkey_f1, "About", Statusbar);
|
||||
key_F2 = new finalcut::FStatusKey (finalcut::fc::Fkey_f2, "View", Statusbar);
|
||||
key_F3 = new finalcut::FStatusKey (finalcut::fc::Fkey_f3, "Quit", Statusbar);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::initStatusBarCallbacks()
|
||||
{
|
||||
// Add statusbar function callbacks
|
||||
|
||||
key_F1->addCallback
|
||||
key_F1.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_about)
|
||||
);
|
||||
|
||||
key_F2->addCallback
|
||||
key_F2.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_view)
|
||||
);
|
||||
|
||||
key_F3->addCallback
|
||||
key_F3.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
|
@ -602,24 +591,22 @@ void MyDialog::initWidgets()
|
|||
initToggleButtons();
|
||||
|
||||
// A text input field
|
||||
myLineEdit = new finalcut::FLineEdit (this);
|
||||
myLineEdit->setGeometry(22, 1, 10, 1);
|
||||
myLineEdit->setLabelText (L"&Input");
|
||||
myLineEdit->setStatusbarMessage ("Press Enter to set the title");
|
||||
*myLineEdit << finalcut::FString("EnTry").toLower();
|
||||
myLineEdit.setGeometry(22, 1, 10, 1);
|
||||
myLineEdit.setLabelText (L"&Input");
|
||||
myLineEdit.setStatusbarMessage ("Press Enter to set the title");
|
||||
myLineEdit << finalcut::FString("EnTry").toLower();
|
||||
|
||||
// Buttons
|
||||
initButtons();
|
||||
|
||||
// A multiple selection listbox
|
||||
myList = new finalcut::FListBox (this);
|
||||
myList->setGeometry(38, 1, 14, 17);
|
||||
myList->setText ("Items");
|
||||
myList->setStatusbarMessage ("99 items in a list");
|
||||
myList->setMultiSelection();
|
||||
myList.setGeometry(38, 1, 14, 17);
|
||||
myList.setText ("Items");
|
||||
myList.setStatusbarMessage ("99 items in a list");
|
||||
myList.setMultiSelection();
|
||||
|
||||
for (int z = 1; z < 100; z++)
|
||||
myList->insert (finalcut::FString() << z << L" placeholder");
|
||||
myList.insert (finalcut::FString() << z << L" placeholder");
|
||||
|
||||
// Text labels
|
||||
initLabels();
|
||||
|
@ -629,43 +616,40 @@ void MyDialog::initWidgets()
|
|||
void MyDialog::initFlatButtons()
|
||||
{
|
||||
// Flat buttons
|
||||
MyButton1 = new finalcut::FButton (this);
|
||||
MyButton1->setGeometry(3, 3, 5, 1);
|
||||
MyButton1->setText (L"&SIN");
|
||||
MyButton1->setStatusbarMessage ("Sine function");
|
||||
MyButton1->setNoUnderline();
|
||||
MyButton1->setFlat();
|
||||
MyButton1->setDoubleFlatLine (finalcut::fc::bottom);
|
||||
MyButton1.setGeometry(3, 3, 5, 1);
|
||||
MyButton1.setText (L"&SIN");
|
||||
MyButton1.setStatusbarMessage ("Sine function");
|
||||
MyButton1.setNoUnderline();
|
||||
MyButton1.setFlat();
|
||||
MyButton1.setDoubleFlatLine (finalcut::fc::bottom);
|
||||
|
||||
MyButton2 = new finalcut::FButton (this);
|
||||
MyButton2->setGeometry(3, 5, 5, 1);
|
||||
MyButton2->setText (L"&COS");
|
||||
MyButton2->setStatusbarMessage ("Cosine function");
|
||||
MyButton2->setNoUnderline();
|
||||
MyButton2->setFlat();
|
||||
MyButton2->setDoubleFlatLine (finalcut::fc::top);
|
||||
MyButton2.setGeometry(3, 5, 5, 1);
|
||||
MyButton2.setText (L"&COS");
|
||||
MyButton2.setStatusbarMessage ("Cosine function");
|
||||
MyButton2.setNoUnderline();
|
||||
MyButton2.setFlat();
|
||||
MyButton2.setDoubleFlatLine (finalcut::fc::top);
|
||||
|
||||
MyButton3 = new finalcut::FButton (this);
|
||||
MyButton3->setGeometry(10, 3, 5, 3);
|
||||
MyButton3->setText (L"&=");
|
||||
MyButton3->setStatusbarMessage ("Equal");
|
||||
MyButton3->setNoUnderline();
|
||||
MyButton3->setFlat();
|
||||
MyButton3.setGeometry(10, 3, 5, 3);
|
||||
MyButton3.setText (L"&=");
|
||||
MyButton3.setStatusbarMessage ("Equal");
|
||||
MyButton3.setNoUnderline();
|
||||
MyButton3.setFlat();
|
||||
|
||||
// Add button callback functions
|
||||
MyButton1->addCallback
|
||||
MyButton1.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_noFunctionMsg)
|
||||
);
|
||||
|
||||
MyButton2->addCallback
|
||||
MyButton2.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_noFunctionMsg)
|
||||
);
|
||||
|
||||
MyButton3->addCallback
|
||||
MyButton3.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_noFunctionMsg)
|
||||
|
@ -676,77 +660,63 @@ void MyDialog::initFlatButtons()
|
|||
void MyDialog::initToggleButtons()
|
||||
{
|
||||
// Radio buttons in a group
|
||||
finalcut::FButtonGroup* radioButtonGroup = \
|
||||
new finalcut::FButtonGroup ("Button", this);
|
||||
radioButtonGroup->setGeometry(3, 8, 14, 4);
|
||||
radioButtonGroup.setGeometry(3, 8, 14, 4);
|
||||
//radioButtonGroup->unsetBorder();
|
||||
|
||||
radio1 = new finalcut::FRadioButton ("E&nable", radioButtonGroup);
|
||||
radio1->setGeometry(1, 1, 10, 1);
|
||||
radio1->setStatusbarMessage ("Enable button Test");
|
||||
radio1.setGeometry(1, 1, 10, 1);
|
||||
radio1.setStatusbarMessage ("Enable button Test");
|
||||
|
||||
finalcut::FRadioButton* radio2 = \
|
||||
new finalcut::FRadioButton (radioButtonGroup);
|
||||
radio2->setGeometry(1, 2, 11, 1);
|
||||
radio2->setText ("&Disable");
|
||||
radio2->setStatusbarMessage ("Disable button Test");
|
||||
radio2->setChecked();
|
||||
//radio2->setDisable();
|
||||
radio2.setGeometry(1, 2, 11, 1);
|
||||
radio2.setText ("&Disable");
|
||||
radio2.setStatusbarMessage ("Disable button Test");
|
||||
radio2.setChecked();
|
||||
//radio2.setDisable();
|
||||
|
||||
// Checkboxes in a group
|
||||
finalcut::FButtonGroup* checkButtonGroup = \
|
||||
new finalcut::FButtonGroup ("Options", this);
|
||||
checkButtonGroup->setGeometry(3, 12, 14, 4);
|
||||
checkButtonGroup.setGeometry(3, 12, 14, 4);
|
||||
|
||||
finalcut::FCheckBox* check1 = \
|
||||
new finalcut::FCheckBox ("&Bitmode", checkButtonGroup);
|
||||
check1->setGeometry(1, 1, 11, 1);
|
||||
check1->setNoUnderline();
|
||||
check1.setGeometry(1, 1, 11, 1);
|
||||
check1.setNoUnderline();
|
||||
|
||||
finalcut::FCheckBox* check2 = \
|
||||
new finalcut::FCheckBox ("&8-Bit", checkButtonGroup);
|
||||
check2->setGeometry(1, 2, 9, 1);
|
||||
check2->setChecked();
|
||||
check2->setNoUnderline();
|
||||
check2.setGeometry(1, 2, 9, 1);
|
||||
check2.setChecked();
|
||||
check2.setNoUnderline();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::initButtons()
|
||||
{
|
||||
// Buttons
|
||||
MyButton4 = new finalcut::FButton (this);
|
||||
MyButton4->setGeometry(20, 8, 12, 1);
|
||||
MyButton4->setText (L"&Get input");
|
||||
MyButton4->setStatusbarMessage ("Take text from input field");
|
||||
MyButton4->setFocus();
|
||||
MyButton4.setGeometry(20, 8, 12, 1);
|
||||
MyButton4.setText (L"&Get input");
|
||||
MyButton4.setStatusbarMessage ("Take text from input field");
|
||||
MyButton4.setFocus();
|
||||
|
||||
MyButton5 = new finalcut::FButton (this);
|
||||
MyButton5->setGeometry(20, 11, 12, 1);
|
||||
MyButton5->setText (L"&Test");
|
||||
MyButton5->setStatusbarMessage ("Progressbar testing dialog");
|
||||
MyButton5->setDisable();
|
||||
MyButton5.setGeometry(20, 11, 12, 1);
|
||||
MyButton5.setText (L"&Test");
|
||||
MyButton5.setStatusbarMessage ("Progressbar testing dialog");
|
||||
MyButton5.setDisable();
|
||||
|
||||
MyButton6 = new finalcut::FButton (this);
|
||||
MyButton6->setGeometry(20, 14, 12, 1);
|
||||
MyButton6->setText (L"&Quit");
|
||||
MyButton6->setStatusbarMessage ("Exit the program");
|
||||
MyButton6->addAccelerator('x');
|
||||
MyButton6.setGeometry(20, 14, 12, 1);
|
||||
MyButton6.setText (L"&Quit");
|
||||
MyButton6.setStatusbarMessage ("Exit the program");
|
||||
MyButton6.addAccelerator('x');
|
||||
|
||||
// Add button callback functions
|
||||
MyButton4->addCallback
|
||||
MyButton4.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_input2buttonText),
|
||||
static_cast<finalcut::FWidget::data_ptr>(myLineEdit)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&myLineEdit)
|
||||
);
|
||||
|
||||
MyButton5->addCallback
|
||||
MyButton5.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_ProgressBar)
|
||||
);
|
||||
|
||||
MyButton6->addCallback
|
||||
MyButton6.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
|
@ -757,26 +727,21 @@ void MyDialog::initButtons()
|
|||
void MyDialog::initLabels()
|
||||
{
|
||||
// Text labels
|
||||
finalcut::FLabel* headline = new finalcut::FLabel (this);
|
||||
headline->setGeometry(21, 3, 10, 1);
|
||||
headline->setEmphasis();
|
||||
headline->setAlignment (finalcut::fc::alignCenter);
|
||||
*headline = L"List items";
|
||||
headline.setGeometry(21, 3, 10, 1);
|
||||
headline.setEmphasis();
|
||||
headline.setAlignment (finalcut::fc::alignCenter);
|
||||
headline = L"List items";
|
||||
|
||||
finalcut::FLabel* tagged = new finalcut::FLabel (L"Tagged:", this);
|
||||
tagged->setGeometry(21, 4, 7, 1);
|
||||
tagged.setGeometry(21, 4, 7, 1);
|
||||
|
||||
tagged_count = new finalcut::FLabel(this);
|
||||
tagged_count->setGeometry(29, 4, 5, 1);
|
||||
*tagged_count << 0;
|
||||
tagged_count.setGeometry(29, 4, 5, 1);
|
||||
tagged_count << 0;
|
||||
|
||||
finalcut::FLabel* sum = new finalcut::FLabel (L"Sum:", this);
|
||||
sum->setGeometry(21, 5, 7, 3);
|
||||
sum->setAlignment (finalcut::fc::alignRight);
|
||||
sum.setGeometry(21, 5, 7, 3);
|
||||
sum.setAlignment (finalcut::fc::alignRight);
|
||||
|
||||
finalcut::FLabel* sum_count = new finalcut::FLabel (this);
|
||||
sum_count->setGeometry(29, 5, 5, 3);
|
||||
*sum_count << myList->getCount();
|
||||
sum_count.setGeometry(29, 5, 5, 3);
|
||||
sum_count << myList.getCount();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -784,31 +749,31 @@ void MyDialog::initWidgetsCallbacks()
|
|||
{
|
||||
// Add some function callbacks
|
||||
|
||||
myLineEdit->addCallback
|
||||
myLineEdit.addCallback
|
||||
(
|
||||
"activate", // e.g. on <Enter>
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_setTitlebar)
|
||||
);
|
||||
|
||||
radio1->addCallback
|
||||
radio1.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_activateButton),
|
||||
static_cast<finalcut::FWidget::data_ptr>(MyButton5)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&MyButton5)
|
||||
);
|
||||
|
||||
myList->addCallback
|
||||
myList.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_setInput),
|
||||
static_cast<finalcut::FWidget::data_ptr>(myLineEdit)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&myLineEdit)
|
||||
);
|
||||
|
||||
myList->addCallback
|
||||
myList.addCallback
|
||||
(
|
||||
"row-selected",
|
||||
F_METHOD_CALLBACK (this, &MyDialog::cb_updateNumber),
|
||||
static_cast<finalcut::FWidget::data_ptr>(tagged_count)
|
||||
static_cast<finalcut::FWidget::data_ptr>(&tagged_count)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -824,8 +789,8 @@ void MyDialog::adjustSize()
|
|||
|
||||
setX (X, false);
|
||||
|
||||
if ( myList )
|
||||
myList->setHeight (getHeight() - 3, false);
|
||||
if ( initialized )
|
||||
myList.setHeight (getHeight() - 3, false);
|
||||
|
||||
finalcut::FDialog::adjustSize();
|
||||
}
|
||||
|
@ -937,42 +902,30 @@ void MyDialog::cb_drives (finalcut::FWidget*, data_ptr)
|
|||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_cutClipboard (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
if ( ! myLineEdit )
|
||||
return;
|
||||
|
||||
clipboard = myLineEdit->getText();
|
||||
myLineEdit->clear();
|
||||
myLineEdit->redraw();
|
||||
clipboard = myLineEdit.getText();
|
||||
myLineEdit.clear();
|
||||
myLineEdit.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_copyClipboard (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
if ( ! myLineEdit )
|
||||
return;
|
||||
|
||||
clipboard = myLineEdit->getText();
|
||||
clipboard = myLineEdit.getText();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_pasteClipboard (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
if ( ! myLineEdit )
|
||||
return;
|
||||
|
||||
*myLineEdit = clipboard;
|
||||
myLineEdit->redraw();
|
||||
myLineEdit = clipboard;
|
||||
myLineEdit.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void MyDialog::cb_clearInput (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
if ( ! myLineEdit )
|
||||
return;
|
||||
|
||||
clipboard.clear();
|
||||
myLineEdit->clear();
|
||||
myLineEdit->redraw();
|
||||
myLineEdit.clear();
|
||||
myLineEdit.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -44,8 +44,8 @@ class Watch : public finalcut::FDialog
|
|||
void printTime();
|
||||
|
||||
// Event handlers
|
||||
void onTimer (finalcut::FTimerEvent*);
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onTimer (finalcut::FTimerEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_clock (finalcut::FWidget*, data_ptr);
|
||||
|
@ -53,7 +53,7 @@ class Watch : public finalcut::FDialog
|
|||
|
||||
protected:
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -64,10 +64,11 @@ class Watch : public finalcut::FDialog
|
|||
|
||||
// Data Members
|
||||
bool sec;
|
||||
finalcut::FLabel* time_label;
|
||||
finalcut::FLabel* time_str;
|
||||
finalcut::FSwitch* clock_sw;
|
||||
finalcut::FSwitch* seconds_sw;
|
||||
finalcut::FLabel time_label;
|
||||
finalcut::FLabel time_str;
|
||||
finalcut::FSwitch clock_sw;
|
||||
finalcut::FSwitch seconds_sw;
|
||||
finalcut::FButton quit_btn;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -75,49 +76,45 @@ class Watch : public finalcut::FDialog
|
|||
Watch::Watch (FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, sec(true)
|
||||
, time_label(0)
|
||||
, time_str(0)
|
||||
, clock_sw(0)
|
||||
, seconds_sw(0)
|
||||
, time_label(L"Time", this)
|
||||
, time_str(L"--:--:--", this)
|
||||
, clock_sw(L"Clock", this)
|
||||
, seconds_sw(L"Seconds", this)
|
||||
, quit_btn(L"&Quit", this)
|
||||
{
|
||||
setText ("Watch");
|
||||
int pw = getParentWidget()->getWidth();
|
||||
setGeometry (1 + (pw - 22) / 2, 3, 22, 13);
|
||||
|
||||
// Create labels
|
||||
time_label = new finalcut::FLabel(L"Time", this);
|
||||
time_label->setGeometry(5, 2, 5, 1);
|
||||
time_label->setEmphasis();
|
||||
time_str = new finalcut::FLabel(L"--:--:--", this);
|
||||
time_str->setGeometry(10, 2, 8, 1);
|
||||
// Labels
|
||||
time_label.setGeometry(5, 2, 5, 1);
|
||||
time_label.setEmphasis();
|
||||
time_str.setGeometry(10, 2, 8, 1);
|
||||
|
||||
// Create checkbox buttons
|
||||
clock_sw = new finalcut::FSwitch(L"Clock", this);
|
||||
seconds_sw = new finalcut::FSwitch(L"Seconds", this);
|
||||
clock_sw->setGeometry(4, 4, 9, 1);
|
||||
seconds_sw->setGeometry(2, 6, 11, 1);
|
||||
sec = seconds_sw->setChecked();
|
||||
// Checkbox buttons
|
||||
clock_sw.setGeometry(4, 4, 9, 1);
|
||||
seconds_sw.setGeometry(2, 6, 11, 1);
|
||||
sec = seconds_sw.setChecked();
|
||||
|
||||
// Create button
|
||||
finalcut::FButton* quit_btn = new finalcut::FButton(L"&Quit", this);
|
||||
quit_btn->setGeometry(6, 9, 9, 1);
|
||||
// Quit button
|
||||
quit_btn.setGeometry(6, 9, 9, 1);
|
||||
|
||||
// Connect switch signal "toggled" with a callback member function
|
||||
clock_sw->addCallback
|
||||
clock_sw.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &Watch::cb_clock)
|
||||
);
|
||||
|
||||
// Connect switch signal "toggled" with a callback member function
|
||||
seconds_sw->addCallback
|
||||
seconds_sw.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &Watch::cb_seconds)
|
||||
);
|
||||
|
||||
// Connect button signal "clicked" with a callback member function
|
||||
quit_btn->addCallback
|
||||
quit_btn.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &finalcut::FApplication::cb_exitApp)
|
||||
|
@ -145,8 +142,8 @@ void Watch::printTime()
|
|||
else
|
||||
str.sprintf("%02d:%02d ", now.tm_hour, now.tm_min);
|
||||
|
||||
*time_str = str;
|
||||
time_str->redraw();
|
||||
time_str = str;
|
||||
time_str.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -164,7 +161,7 @@ void Watch::onClose (finalcut::FCloseEvent* ev)
|
|||
//----------------------------------------------------------------------
|
||||
void Watch::cb_clock (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
if ( clock_sw->isChecked() )
|
||||
if ( clock_sw.isChecked() )
|
||||
{
|
||||
printTime();
|
||||
addTimer(1000);
|
||||
|
@ -172,29 +169,29 @@ void Watch::cb_clock (finalcut::FWidget*, data_ptr)
|
|||
else
|
||||
{
|
||||
delAllTimer();
|
||||
*time_str = "--:--:--";
|
||||
time_str->redraw();
|
||||
time_str = "--:--:--";
|
||||
time_str.redraw();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Watch::cb_seconds (finalcut::FWidget*, data_ptr)
|
||||
{
|
||||
if ( seconds_sw->isChecked() )
|
||||
if ( seconds_sw.isChecked() )
|
||||
sec = true;
|
||||
else
|
||||
sec = false;
|
||||
|
||||
if ( clock_sw->isChecked() )
|
||||
if ( clock_sw.isChecked() )
|
||||
printTime();
|
||||
else
|
||||
{
|
||||
if ( sec )
|
||||
*time_str = "--:--:--";
|
||||
time_str = "--:--:--";
|
||||
else
|
||||
*time_str = "--:-- ";
|
||||
time_str = "--:-- ";
|
||||
|
||||
time_str->redraw();
|
||||
time_str.redraw();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,68 +48,65 @@ class SmallWindow : public finalcut::FDialog
|
|||
SmallWindow& operator = (const SmallWindow&);
|
||||
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handlers
|
||||
void onShow (finalcut::FShowEvent*);
|
||||
void onTimer (finalcut::FTimerEvent*);
|
||||
virtual void onShow (finalcut::FShowEvent*);
|
||||
virtual void onTimer (finalcut::FTimerEvent*);
|
||||
|
||||
// Data Members
|
||||
finalcut::FLabel* left_arrow;
|
||||
finalcut::FLabel* right_arrow;
|
||||
finalcut::FLabel* top_left_label;
|
||||
finalcut::FLabel* top_right_label;
|
||||
finalcut::FLabel* bottom_label;
|
||||
finalcut::FLabel left_arrow;
|
||||
finalcut::FLabel right_arrow;
|
||||
finalcut::FLabel top_left_label;
|
||||
finalcut::FLabel top_right_label;
|
||||
finalcut::FLabel bottom_label;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
SmallWindow::SmallWindow (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, left_arrow()
|
||||
, right_arrow()
|
||||
, top_left_label()
|
||||
, top_right_label()
|
||||
, bottom_label()
|
||||
, left_arrow(this)
|
||||
, right_arrow(this)
|
||||
, top_left_label(this)
|
||||
, top_right_label(this)
|
||||
, bottom_label(this)
|
||||
{
|
||||
wchar_t arrow_up, arrow_down;
|
||||
|
||||
arrow_up = finalcut::fc::BlackUpPointingTriangle;
|
||||
arrow_down = finalcut::fc::BlackDownPointingTriangle;
|
||||
|
||||
left_arrow = new finalcut::FLabel (arrow_up, this);
|
||||
left_arrow->setForegroundColor (wc.label_inactive_fg);
|
||||
left_arrow->setEmphasis();
|
||||
left_arrow->ignorePadding();
|
||||
left_arrow->setGeometry (2, 2, 1, 1);
|
||||
left_arrow = arrow_up;
|
||||
left_arrow.setForegroundColor (wc.label_inactive_fg);
|
||||
left_arrow.setEmphasis();
|
||||
left_arrow.ignorePadding();
|
||||
left_arrow.setGeometry (2, 2, 1, 1);
|
||||
|
||||
right_arrow = new finalcut::FLabel (arrow_up, this);
|
||||
right_arrow->setForegroundColor (wc.label_inactive_fg);
|
||||
right_arrow->setEmphasis();
|
||||
right_arrow->ignorePadding();
|
||||
right_arrow->setGeometry (getWidth() - 1, 2, 1, 1);
|
||||
right_arrow = arrow_up;
|
||||
right_arrow.setForegroundColor (wc.label_inactive_fg);
|
||||
right_arrow.setEmphasis();
|
||||
right_arrow.ignorePadding();
|
||||
right_arrow.setGeometry (getWidth() - 1, 2, 1, 1);
|
||||
|
||||
const finalcut::FString& top_left_label_text = "menu";
|
||||
top_left_label = new finalcut::FLabel (top_left_label_text, this);
|
||||
top_left_label->setForegroundColor (wc.label_inactive_fg);
|
||||
top_left_label->setEmphasis();
|
||||
top_left_label->setGeometry (1, 1, 6, 1);
|
||||
top_left_label = "menu";
|
||||
top_left_label.setForegroundColor (wc.label_inactive_fg);
|
||||
top_left_label.setEmphasis();
|
||||
top_left_label.setGeometry (1, 1, 6, 1);
|
||||
|
||||
const finalcut::FString& top_right_label_text = "zoom";
|
||||
top_right_label = new finalcut::FLabel (top_right_label_text, this);
|
||||
top_right_label->setAlignment (finalcut::fc::alignRight);
|
||||
top_right_label->setForegroundColor (wc.label_inactive_fg);
|
||||
top_right_label->setEmphasis();
|
||||
top_right_label->setGeometry (getClientWidth() - 5, 1, 6, 1);
|
||||
top_right_label = "zoom";
|
||||
top_right_label.setAlignment (finalcut::fc::alignRight);
|
||||
top_right_label.setForegroundColor (wc.label_inactive_fg);
|
||||
top_right_label.setEmphasis();
|
||||
top_right_label.setGeometry (getClientWidth() - 5, 1, 6, 1);
|
||||
|
||||
finalcut::FString bottom_label_text = "resize\n"
|
||||
"corner\n";
|
||||
bottom_label_text += arrow_down;
|
||||
bottom_label = new finalcut::FLabel (bottom_label_text, this);
|
||||
bottom_label->setAlignment (finalcut::fc::alignRight);
|
||||
bottom_label->setForegroundColor (wc.label_inactive_fg);
|
||||
bottom_label->setEmphasis();
|
||||
bottom_label->setGeometry (13, 3, 6, 3);
|
||||
bottom_label = bottom_label_text;
|
||||
bottom_label.setAlignment (finalcut::fc::alignRight);
|
||||
bottom_label.setForegroundColor (wc.label_inactive_fg);
|
||||
bottom_label.setEmphasis();
|
||||
bottom_label.setGeometry (13, 3, 6, 3);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -124,19 +121,19 @@ void SmallWindow::adjustSize()
|
|||
{
|
||||
if ( isZoomed() )
|
||||
{
|
||||
*top_right_label = "unzoom";
|
||||
bottom_label->hide();
|
||||
top_right_label = "unzoom";
|
||||
bottom_label.hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
*top_right_label = "zoom";
|
||||
bottom_label->setVisible();
|
||||
top_right_label = "zoom";
|
||||
bottom_label.setVisible();
|
||||
}
|
||||
|
||||
finalcut::FDialog::adjustSize();
|
||||
right_arrow->setGeometry (getWidth() - 1, 2, 1, 1);
|
||||
top_right_label->setGeometry (getClientWidth() - 5, 1, 6, 1);
|
||||
bottom_label->setGeometry (1, getClientHeight() - 2, getClientWidth(), 3);
|
||||
right_arrow.setGeometry (getWidth() - 1, 2, 1, 1);
|
||||
top_right_label.setGeometry (getClientWidth() - 5, 1, 6, 1);
|
||||
bottom_label.setGeometry (1, getClientHeight() - 2, getClientWidth(), 3);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -148,16 +145,16 @@ void SmallWindow::onShow (finalcut::FShowEvent*)
|
|||
//----------------------------------------------------------------------
|
||||
void SmallWindow::onTimer (finalcut::FTimerEvent*)
|
||||
{
|
||||
left_arrow->unsetEmphasis();
|
||||
left_arrow->redraw();
|
||||
right_arrow->unsetEmphasis();
|
||||
right_arrow->redraw();
|
||||
top_left_label->unsetEmphasis();
|
||||
top_left_label->redraw();
|
||||
top_right_label->unsetEmphasis();
|
||||
top_right_label->redraw();
|
||||
bottom_label->unsetEmphasis();
|
||||
bottom_label->redraw();
|
||||
left_arrow.unsetEmphasis();
|
||||
left_arrow.redraw();
|
||||
right_arrow.unsetEmphasis();
|
||||
right_arrow.redraw();
|
||||
top_left_label.unsetEmphasis();
|
||||
top_left_label.redraw();
|
||||
top_right_label.unsetEmphasis();
|
||||
top_right_label.redraw();
|
||||
bottom_label.unsetEmphasis();
|
||||
bottom_label.redraw();
|
||||
updateTerminal();
|
||||
delOwnTimer();
|
||||
}
|
||||
|
@ -183,13 +180,27 @@ class Window : public finalcut::FDialog
|
|||
// Typedefs
|
||||
typedef void (Window::*WindowCallback)(finalcut::FWidget*, data_ptr);
|
||||
typedef void (finalcut::FApplication::*FAppCallback)(finalcut::FWidget*, data_ptr);
|
||||
typedef struct
|
||||
|
||||
class win_data
|
||||
{
|
||||
public:
|
||||
win_data()
|
||||
: is_open(false)
|
||||
, title()
|
||||
, dgl(0)
|
||||
{ }
|
||||
|
||||
// Data Members
|
||||
bool is_open;
|
||||
finalcut::FString* title;
|
||||
finalcut::FString title;
|
||||
SmallWindow* dgl;
|
||||
}
|
||||
win_data;
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
win_data (const win_data&);
|
||||
// Disable assignment operator (=)
|
||||
win_data& operator = (const win_data&);
|
||||
};
|
||||
|
||||
// Disable copy constructor
|
||||
Window (const Window&);
|
||||
|
@ -198,15 +209,15 @@ class Window : public finalcut::FDialog
|
|||
Window& operator = (const Window&);
|
||||
|
||||
// Method
|
||||
void createFileMenuItems (finalcut::FMenu*);
|
||||
void createDialogButtons();
|
||||
void configureFileMenuItems();
|
||||
void configureDialogButtons();
|
||||
void activateWindow (finalcut::FDialog*);
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
void addClickedCallback (finalcut::FWidget*, WindowCallback);
|
||||
void addClickedCallback (finalcut::FWidget*, FAppCallback);
|
||||
|
||||
// Event handlers
|
||||
void onClose (finalcut::FCloseEvent*);
|
||||
virtual void onClose (finalcut::FCloseEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_createWindows (finalcut::FWidget*, data_ptr);
|
||||
|
@ -217,6 +228,21 @@ class Window : public finalcut::FDialog
|
|||
|
||||
// Data Members
|
||||
std::vector<win_data*> windows;
|
||||
finalcut::FString drop_down_symbol;
|
||||
finalcut::FMenuBar Menubar;
|
||||
finalcut::FMenu File;
|
||||
finalcut::FDialogListMenu DglList;
|
||||
finalcut::FStatusBar Statusbar;
|
||||
finalcut::FMenuItem New;
|
||||
finalcut::FMenuItem Close;
|
||||
finalcut::FMenuItem Line1;
|
||||
finalcut::FMenuItem Next;
|
||||
finalcut::FMenuItem Previous;
|
||||
finalcut::FMenuItem Line2;
|
||||
finalcut::FMenuItem Quit;
|
||||
finalcut::FButton CreateButton;
|
||||
finalcut::FButton CloseButton;
|
||||
finalcut::FButton QuitButton;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -224,42 +250,42 @@ class Window : public finalcut::FDialog
|
|||
Window::Window (finalcut::FWidget* parent)
|
||||
: finalcut::FDialog(parent)
|
||||
, windows()
|
||||
, drop_down_symbol(wchar_t(finalcut::fc::BlackDownPointingTriangle))
|
||||
, Menubar(this)
|
||||
, File("&File", &Menubar)
|
||||
, DglList(drop_down_symbol, &Menubar)
|
||||
, Statusbar(this)
|
||||
, New("&New", &File)
|
||||
, Close("&Close", &File)
|
||||
, Line1(&File)
|
||||
, Next("Ne&xt window", &File)
|
||||
, Previous("&Previous window", &File)
|
||||
, Line2(&File)
|
||||
, Quit("&Quit", &File)
|
||||
, CreateButton(this)
|
||||
, CloseButton(this)
|
||||
, QuitButton(this)
|
||||
{
|
||||
finalcut::FMenu* File;
|
||||
finalcut::FDialogListMenu* DglList;
|
||||
finalcut::FString drop_down_symbol;
|
||||
finalcut::FMenuBar* Menubar;
|
||||
finalcut::FStatusBar* Statusbar;
|
||||
|
||||
// Menu bar
|
||||
Menubar = new finalcut::FMenuBar (this);
|
||||
|
||||
// Menu bar item
|
||||
File = new finalcut::FMenu ("&File", Menubar);
|
||||
File->setStatusbarMessage ("File management commands");
|
||||
File.setStatusbarMessage ("File management commands");
|
||||
|
||||
// Dialog list menu item
|
||||
drop_down_symbol = wchar_t(finalcut::fc::BlackDownPointingTriangle);
|
||||
DglList = new finalcut::FDialogListMenu (drop_down_symbol, Menubar);
|
||||
DglList->setStatusbarMessage ("List of all the active dialogs");
|
||||
DglList.setStatusbarMessage ("List of all the active dialogs");
|
||||
|
||||
// File menu items
|
||||
createFileMenuItems (File);
|
||||
configureFileMenuItems();
|
||||
|
||||
// Dialog buttons
|
||||
createDialogButtons();
|
||||
configureDialogButtons();
|
||||
|
||||
// Statusbar at the bottom
|
||||
Statusbar = new finalcut::FStatusBar (this);
|
||||
Statusbar->setMessage("Status bar message");
|
||||
Statusbar.setMessage("Status bar message");
|
||||
|
||||
// Generate data vector for the windows
|
||||
for (int n = 1; n <= 6; n++)
|
||||
{
|
||||
win_data* win_dat = new win_data;
|
||||
win_dat->is_open = false;
|
||||
win_dat->title = new finalcut::FString();
|
||||
win_dat->title->sprintf("Window %d", n);
|
||||
win_dat->title.sprintf("Window %d", n);
|
||||
windows.push_back(win_dat);
|
||||
}
|
||||
}
|
||||
|
@ -278,68 +304,49 @@ Window::~Window()
|
|||
if ( win_dat->is_open && win_dat->dgl )
|
||||
win_dat->dgl->delCallbacks();
|
||||
|
||||
delete win_dat->title;
|
||||
delete win_dat;
|
||||
iter = windows.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::createFileMenuItems (finalcut::FMenu* File)
|
||||
void Window::configureFileMenuItems()
|
||||
{
|
||||
// "File" menu item
|
||||
finalcut::FMenuItem* New = new finalcut::FMenuItem ("&New", File);
|
||||
New->setStatusbarMessage ("Create the windows");
|
||||
|
||||
finalcut::FMenuItem* Close = new finalcut::FMenuItem ("&Close", File);
|
||||
Close->setStatusbarMessage ("Close the windows");
|
||||
|
||||
finalcut::FMenuItem* Line1 = new finalcut::FMenuItem (File);
|
||||
Line1->setSeparator();
|
||||
|
||||
finalcut::FMenuItem* Next = new finalcut::FMenuItem ("Ne&xt window", File);
|
||||
Next->addAccelerator (finalcut::fc::Fmkey_npage); // Meta/Alt + PgDn
|
||||
Next->setStatusbarMessage ("Switch to the next window");
|
||||
|
||||
finalcut::FMenuItem* Previous = new finalcut::FMenuItem ("&Previous window", File);
|
||||
Previous->addAccelerator (finalcut::fc::Fmkey_ppage); // Meta/Alt + PgUp
|
||||
Previous->setStatusbarMessage ("Switch to the previous window");
|
||||
|
||||
finalcut::FMenuItem* Line2 = new finalcut::FMenuItem (File);
|
||||
Line2->setSeparator();
|
||||
|
||||
finalcut::FMenuItem* Quit = new finalcut::FMenuItem ("&Quit", File);
|
||||
Quit->addAccelerator (finalcut::fc::Fmkey_x); // Meta/Alt + X
|
||||
Quit->setStatusbarMessage ("Exit the program");
|
||||
// "File" menu item setting
|
||||
New.setStatusbarMessage ("Create the windows");
|
||||
Close.setStatusbarMessage ("Close the windows");
|
||||
Line1.setSeparator();
|
||||
Next.addAccelerator (finalcut::fc::Fmkey_npage); // Meta/Alt + PgDn
|
||||
Next.setStatusbarMessage ("Switch to the next window");
|
||||
Previous.addAccelerator (finalcut::fc::Fmkey_ppage); // Meta/Alt + PgUp
|
||||
Previous.setStatusbarMessage ("Switch to the previous window");
|
||||
Line2.setSeparator();
|
||||
Quit.addAccelerator (finalcut::fc::Fmkey_x); // Meta/Alt + X
|
||||
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, &Window::cb_createWindows);
|
||||
addClickedCallback (&Close, &Window::cb_closeWindows);
|
||||
addClickedCallback (&Next, &Window::cb_next);
|
||||
addClickedCallback (&Previous, &Window::cb_previous);
|
||||
addClickedCallback (&Quit, &finalcut::FApplication::cb_exitApp);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void Window::createDialogButtons()
|
||||
void Window::configureDialogButtons()
|
||||
{
|
||||
// Dialog buttons
|
||||
finalcut::FButton* CreateButton = new finalcut::FButton (this);
|
||||
CreateButton->setGeometry(2, 2, 9, 1);
|
||||
CreateButton->setText (L"&Create");
|
||||
|
||||
finalcut::FButton* CloseButton = new finalcut::FButton (this);
|
||||
CloseButton->setGeometry(15, 2, 9, 1);
|
||||
CloseButton->setText (L"C&lose");
|
||||
|
||||
finalcut::FButton* QuitButton = new finalcut::FButton (this);
|
||||
QuitButton->setGeometry(28, 2, 9, 1);
|
||||
QuitButton->setText (L"&Quit");
|
||||
CreateButton.setGeometry (2, 2, 9, 1);
|
||||
CreateButton.setText (L"&Create");
|
||||
CloseButton.setGeometry (15, 2, 9, 1);
|
||||
CloseButton.setText (L"C&lose");
|
||||
QuitButton.setGeometry (28, 2, 9, 1);
|
||||
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, &Window::cb_createWindows);
|
||||
addClickedCallback (&CloseButton, &Window::cb_closeWindows);
|
||||
addClickedCallback (&QuitButton, &finalcut::FApplication::cb_exitApp);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -442,7 +449,7 @@ void Window::cb_createWindows (finalcut::FWidget*, data_ptr)
|
|||
SmallWindow* win = new SmallWindow(this);
|
||||
win_dat->dgl = win;
|
||||
win_dat->is_open = true;
|
||||
win->setText(*(win_dat)->title);
|
||||
win->setText(win_dat->title);
|
||||
int n = int(std::distance(first, iter))
|
||||
, x = dx + 5 + (n % 3) * 25 + int(n / 3) * 3
|
||||
, y = dy + 11 + int(n / 3) * 3;
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
@ -11,7 +11,7 @@
|
|||
version="1.1"
|
||||
width="100%"
|
||||
height="100%"
|
||||
viewBox="0 0 750 128"
|
||||
viewBox="0 0 650 128"
|
||||
id="svg2"
|
||||
style="fill-rule:evenodd">
|
||||
<metadata
|
||||
|
@ -27,7 +27,142 @@
|
|||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs43" />
|
||||
id="defs43">
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3784"
|
||||
xlink:href="#a"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3792"
|
||||
xlink:href="#a"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3792-9"
|
||||
xlink:href="#a-8"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
cx="134.06599"
|
||||
cy="79.788696"
|
||||
r="40.1213"
|
||||
fx="134.06599"
|
||||
fy="79.788696"
|
||||
id="a-8"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
id="stop5-1"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop7-0"
|
||||
style="stop-color:#999999;stop-opacity:1"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3808"
|
||||
xlink:href="#a-8"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
cx="134.06599"
|
||||
cy="79.788696"
|
||||
r="40.1213"
|
||||
fx="134.06599"
|
||||
fy="79.788696"
|
||||
id="radialGradient3810"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
id="stop3812"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3814"
|
||||
style="stop-color:#999999;stop-opacity:1"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3818"
|
||||
xlink:href="#a-8"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-153.08409,-173.48831)" />
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3792-0"
|
||||
xlink:href="#a-1"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
cx="134.06599"
|
||||
cy="79.788696"
|
||||
r="40.1213"
|
||||
fx="134.06599"
|
||||
fy="79.788696"
|
||||
id="a-1"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
id="stop5-0"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop7-2"
|
||||
style="stop-color:#999999;stop-opacity:1"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3861"
|
||||
xlink:href="#a-1"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
cx="134.06599"
|
||||
cy="79.788696"
|
||||
r="40.1213"
|
||||
fx="134.06599"
|
||||
fy="79.788696"
|
||||
id="radialGradient3863"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
id="stop3865"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3867"
|
||||
style="stop-color:#999999;stop-opacity:1"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
x1="165.74928"
|
||||
y1="57.311855"
|
||||
x2="674.01331"
|
||||
y2="57.311855"
|
||||
id="linearGradient3871"
|
||||
xlink:href="#a-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0.378418,-0.44196145)" />
|
||||
</defs>
|
||||
<radialGradient
|
||||
cx="134.06599"
|
||||
cy="79.788696"
|
||||
|
@ -107,6 +242,18 @@
|
|||
xlink:href="#e"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.9999964,0,0,1,-39.981171,-27.394473)" />
|
||||
<text
|
||||
x="160.94762"
|
||||
y="93.333893"
|
||||
transform="scale(0.95126779,1.0512287)"
|
||||
id="text37-5"
|
||||
style="font-size:96px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0;word-spacing:0;writing-mode:lr-tb;text-anchor:start;fill:#9f9f9f;fill-opacity:0.6206896;fill-rule:evenodd;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Semi-Bold">
|
||||
<tspan
|
||||
x="160.94762"
|
||||
y="93.333893"
|
||||
id="tspan3006-1"
|
||||
style="font-size:96px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#9f9f9f;fill-opacity:0.6206896;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Semi-Bold">FINAL CUT</tspan>
|
||||
</text>
|
||||
<g
|
||||
id="g23"
|
||||
style="stroke:#000000;stroke-width:0.70560098">
|
||||
|
@ -142,15 +289,15 @@
|
|||
id="path35"
|
||||
style="fill:url(#f);stroke:#000000;stroke-width:0.70560002" />
|
||||
<text
|
||||
x="471.83469"
|
||||
x="158.56929"
|
||||
y="91.775856"
|
||||
transform="scale(0.95126779,1.0512287)"
|
||||
id="text37"
|
||||
style="font-size:96px;font-weight:600;letter-spacing:0;word-spacing:0;writing-mode:lr-tb;text-anchor:middle;fill:#083c99;fill-rule:evenodd;stroke:#00173d;font-family:FreeSans">
|
||||
style="font-size:96px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0;word-spacing:0;writing-mode:lr-tb;text-anchor:start;fill:#083c99;fill-opacity:0.88747732;fill-rule:evenodd;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Semi-Bold">
|
||||
<tspan
|
||||
x="471.83469"
|
||||
x="158.56929"
|
||||
y="91.775856"
|
||||
id="tspan39"
|
||||
style="font-size:96px;font-weight:600;writing-mode:lr-tb;text-anchor:middle;fill:#083c99;stroke:#00173d;font-family:FreeSans">The Final Cut</tspan>
|
||||
id="tspan3006"
|
||||
style="font-size:96px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#083c99;fill-opacity:0.88747732;stroke:none;font-family:FreeSans;-inkscape-font-specification:FreeSans Semi-Bold">FINAL CUT</tspan>
|
||||
</text>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 9.7 KiB |
|
@ -2,8 +2,8 @@
|
|||
|
||||
if [ $# -gt 0 ]
|
||||
then
|
||||
eval cppcheck --force --enable=all -I../include/ "$@"
|
||||
eval cppcheck --force --enable=all -I../src/include/ "$@"
|
||||
else
|
||||
eval cppcheck --force --enable=all -I../include/ ../src/ ../examples/
|
||||
eval cppcheck --force --enable=all -I../src/include/ ../src/ ../examples/
|
||||
fi
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
find ../src/ \
|
||||
../include/final/ \
|
||||
../src/include/final/ \
|
||||
../examples/ \
|
||||
../test/ \
|
||||
-regextype posix-egrep \
|
||||
-regex ".*\\.(cpp|h)$" \
|
||||
-exec sed -i 's/ *$//' "{}" \;
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/sh
|
||||
strace -c ../examples/.libs/ui
|
||||
LD_LIBRARY_PATH=../src/.libs strace -c ../examples/.libs/ui
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ libfinal_la_SOURCES = \
|
|||
fkey_map.cpp \
|
||||
ftextview.cpp \
|
||||
fstatusbar.cpp \
|
||||
ftermcap.cpp \
|
||||
ftermcapquirks.cpp \
|
||||
ftermxterminal.cpp \
|
||||
ftermfreebsd.cpp \
|
||||
|
@ -108,7 +109,6 @@ finalcutinclude_HEADERS = \
|
|||
include/final/fscrollview.h \
|
||||
include/final/fstatusbar.h \
|
||||
include/final/fstring.h \
|
||||
include/final/ftcap_map.h \
|
||||
include/final/ftermcap.h \
|
||||
include/final/ftermcapquirks.h \
|
||||
include/final/ftermxterminal.h \
|
||||
|
|
|
@ -12,10 +12,11 @@ INCLUDE_HEADERS = \
|
|||
fapplication.h \
|
||||
fbuttongroup.h \
|
||||
fbutton.h \
|
||||
ftogglebutton.h \
|
||||
fcheckbox.h \
|
||||
fswitch.h \
|
||||
fdialog.h \
|
||||
fevent.h \
|
||||
fwindow.h \
|
||||
ffiledialog.h \
|
||||
final.h \
|
||||
flabel.h \
|
||||
|
@ -23,15 +24,12 @@ INCLUDE_HEADERS = \
|
|||
flistbox.h \
|
||||
flistview.h \
|
||||
fmenu.h \
|
||||
fmouse.h \
|
||||
fkeyboard.h \
|
||||
fdialoglistmenu.h \
|
||||
fmenubar.h \
|
||||
fradiomenuitem.h \
|
||||
fcheckmenuitem.h \
|
||||
fmessagebox.h \
|
||||
ftooltip.h \
|
||||
fobject.h \
|
||||
foptiattr.h \
|
||||
foptimove.h \
|
||||
ftermbuffer.h \
|
||||
|
@ -43,6 +41,8 @@ INCLUDE_HEADERS = \
|
|||
fscrollview.h \
|
||||
fstatusbar.h \
|
||||
fstring.h \
|
||||
fmouse.h \
|
||||
fkeyboard.h \
|
||||
ftermcap.h \
|
||||
fterm.h \
|
||||
ftermios.h \
|
||||
|
@ -54,11 +54,11 @@ INCLUDE_HEADERS = \
|
|||
ftermlinux.h \
|
||||
fvterm.h \
|
||||
ftextview.h \
|
||||
ftogglebutton.h \
|
||||
fcolorpalette.h \
|
||||
fwidgetcolors.h \
|
||||
fwidget.h \
|
||||
fwindow.h
|
||||
fevent.h \
|
||||
fobject.h \
|
||||
|
||||
# compiler parameter
|
||||
CXX = clang++
|
||||
|
@ -87,8 +87,6 @@ OBJS = \
|
|||
flistbox.o \
|
||||
flistview.o \
|
||||
fmenu.o \
|
||||
fmouse.o \
|
||||
fkeyboard.o \
|
||||
fdialoglistmenu.o \
|
||||
fmenubar.o \
|
||||
fmenuitem.o \
|
||||
|
@ -96,14 +94,17 @@ OBJS = \
|
|||
fcheckmenuitem.o \
|
||||
fmenulist.o \
|
||||
fdialog.o \
|
||||
fscrollview.o \
|
||||
fwindow.o \
|
||||
fscrollview.o \
|
||||
fmessagebox.o \
|
||||
ftooltip.o \
|
||||
ffiledialog.o \
|
||||
fkey_map.o \
|
||||
ftextview.o \
|
||||
fstatusbar.o \
|
||||
fmouse.o \
|
||||
fkeyboard.o \
|
||||
ftermcap.o \
|
||||
fterm.o \
|
||||
ftermios.o \
|
||||
ftermdetection.o \
|
||||
|
@ -113,7 +114,6 @@ OBJS = \
|
|||
ftermopenbsd.o \
|
||||
ftermlinux.o \
|
||||
fvterm.o \
|
||||
fevent.o \
|
||||
foptiattr.o \
|
||||
foptimove.o \
|
||||
ftermbuffer.o \
|
||||
|
@ -121,12 +121,14 @@ OBJS = \
|
|||
fcolorpalette.o \
|
||||
fwidgetcolors.o \
|
||||
fwidget.o \
|
||||
fevent.o \
|
||||
fobject.o
|
||||
|
||||
TERMCAP := $(shell test -n "$$(ldd {/usr,}/lib64/libncursesw.so.5 2>/dev/null | grep libtinfo)" && echo "-ltinfo" || echo "-lncurses")
|
||||
|
||||
ifdef DEBUG
|
||||
OPTIMIZE = -O0 -fsanitize=undefined
|
||||
OPTIMIZE = -O0 -fsanitize=bool,bounds,enum,float-cast-overflow,function,null
|
||||
# OPTIMIZE = -O0 -fsanitize=undefined
|
||||
else
|
||||
OPTIMIZE = -O2
|
||||
endif
|
||||
|
|
|
@ -12,10 +12,11 @@ INCLUDE_HEADERS = \
|
|||
fapplication.h \
|
||||
fbuttongroup.h \
|
||||
fbutton.h \
|
||||
ftogglebutton.h \
|
||||
fcheckbox.h \
|
||||
fswitch.h \
|
||||
fdialog.h \
|
||||
fevent.h \
|
||||
fwindow.h \
|
||||
ffiledialog.h \
|
||||
final.h \
|
||||
flabel.h \
|
||||
|
@ -23,15 +24,12 @@ INCLUDE_HEADERS = \
|
|||
flistbox.h \
|
||||
flistview.h \
|
||||
fmenu.h \
|
||||
fmouse.h \
|
||||
fkeyboard.h \
|
||||
fdialoglistmenu.h \
|
||||
fmenubar.h \
|
||||
fradiomenuitem.h \
|
||||
fcheckmenuitem.h \
|
||||
fmessagebox.h \
|
||||
ftooltip.h \
|
||||
fobject.h \
|
||||
foptiattr.h \
|
||||
foptimove.h \
|
||||
ftermbuffer.h \
|
||||
|
@ -43,6 +41,8 @@ INCLUDE_HEADERS = \
|
|||
fscrollview.h \
|
||||
fstatusbar.h \
|
||||
fstring.h \
|
||||
fmouse.h \
|
||||
fkeyboard.h \
|
||||
ftermcap.h \
|
||||
fterm.h \
|
||||
ftermios.h \
|
||||
|
@ -54,11 +54,11 @@ INCLUDE_HEADERS = \
|
|||
ftermlinux.h \
|
||||
fvterm.h \
|
||||
ftextview.h \
|
||||
ftogglebutton.h \
|
||||
fcolorpalette.h \
|
||||
fwidgetcolors.h \
|
||||
fwidget.h \
|
||||
fwindow.h
|
||||
fevent.h \
|
||||
fobject.h
|
||||
|
||||
# compiler parameter
|
||||
CXX = g++
|
||||
|
@ -87,8 +87,6 @@ OBJS = \
|
|||
flistbox.o \
|
||||
flistview.o \
|
||||
fmenu.o \
|
||||
fmouse.o \
|
||||
fkeyboard.o \
|
||||
fdialoglistmenu.o \
|
||||
fmenubar.o \
|
||||
fmenuitem.o \
|
||||
|
@ -96,14 +94,17 @@ OBJS = \
|
|||
fcheckmenuitem.o \
|
||||
fmenulist.o \
|
||||
fdialog.o \
|
||||
fscrollview.o \
|
||||
fwindow.o \
|
||||
fscrollview.o \
|
||||
fmessagebox.o \
|
||||
ftooltip.o \
|
||||
ffiledialog.o \
|
||||
fkey_map.o \
|
||||
ftextview.o \
|
||||
fstatusbar.o \
|
||||
fmouse.o \
|
||||
fkeyboard.o \
|
||||
ftermcap.o \
|
||||
fterm.o \
|
||||
ftermios.o \
|
||||
ftermdetection.o \
|
||||
|
@ -113,7 +114,6 @@ OBJS = \
|
|||
ftermopenbsd.o \
|
||||
ftermlinux.o \
|
||||
fvterm.o \
|
||||
fevent.o \
|
||||
foptiattr.o \
|
||||
foptimove.o \
|
||||
ftermbuffer.o \
|
||||
|
@ -121,6 +121,7 @@ OBJS = \
|
|||
fcolorpalette.o \
|
||||
fwidgetcolors.o \
|
||||
fwidget.o \
|
||||
fevent.o \
|
||||
fobject.o
|
||||
|
||||
TERMCAP := $(shell test -n "$$(ldd {/usr,}/lib64/libncursesw.so.5 2>/dev/null | grep libtinfo)" && echo "-ltinfo" || echo "-lncurses")
|
||||
|
|
|
@ -1149,51 +1149,6 @@ void FApplication::processResizeEvent()
|
|||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FApplication::processTimerEvent()
|
||||
{
|
||||
FObject::TimerList::iterator iter, last;
|
||||
timeval currentTime;
|
||||
int activated = 0;
|
||||
|
||||
getCurrentTime (¤tTime);
|
||||
|
||||
if ( isTimerInUpdating() )
|
||||
return 0;
|
||||
|
||||
if ( ! timer_list )
|
||||
return 0;
|
||||
|
||||
if ( timer_list->empty() )
|
||||
return 0;
|
||||
|
||||
iter = timer_list->begin();
|
||||
last = timer_list->end();
|
||||
|
||||
while ( iter != last )
|
||||
{
|
||||
if ( ! iter->id
|
||||
|| ! iter->object
|
||||
|| currentTime < iter->timeout ) // no timer expired
|
||||
break;
|
||||
|
||||
iter->timeout += iter->interval;
|
||||
|
||||
if ( iter->timeout < currentTime )
|
||||
iter->timeout = currentTime + iter->interval;
|
||||
|
||||
if ( iter->interval.tv_usec > 0 || iter->interval.tv_sec > 0 )
|
||||
activated++;
|
||||
|
||||
FTimerEvent t_ev(fc::Timer_Event, iter->id);
|
||||
sendEvent(iter->object, &t_ev);
|
||||
|
||||
++iter;
|
||||
}
|
||||
|
||||
return activated;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::processCloseWidget()
|
||||
{
|
||||
|
@ -1219,7 +1174,7 @@ void FApplication::processCloseWidget()
|
|||
//----------------------------------------------------------------------
|
||||
bool FApplication::processNextEvent()
|
||||
{
|
||||
int num_events = 0;
|
||||
uInt num_events = 0;
|
||||
|
||||
processKeyboardEvent();
|
||||
processMouseEvent();
|
||||
|
@ -1233,4 +1188,11 @@ bool FApplication::processNextEvent()
|
|||
return ( num_events > 0 );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FApplication::performTimerAction ( const FObject* receiver
|
||||
, const FEvent* event )
|
||||
{
|
||||
sendEvent(receiver, event);
|
||||
}
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
|
@ -1548,15 +1548,31 @@ inline void FDialog::lowerActivateDialog()
|
|||
updateTerminal();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FDialog::isLowerRightResizeCorner (mouseStates& ms)
|
||||
{
|
||||
// 3 characters in the lower right corner |
|
||||
// x
|
||||
// -----xx
|
||||
|
||||
if ( (ms.mouse_x == getWidth() && ms.mouse_y == getHeight() - 1)
|
||||
|| ( ( ms.mouse_x == getWidth() - 1
|
||||
|| ms.mouse_x == getWidth() ) && ms.mouse_y == getHeight() ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FDialog::resizeMouseDown (mouseStates& ms)
|
||||
{
|
||||
// Click on the lower right resize corner
|
||||
|
||||
if ( isResizeable()
|
||||
&& ( (ms.mouse_x == getWidth() && ms.mouse_y == getHeight())
|
||||
|| (ms.mouse_x == getWidth() - 1 && ms.mouse_y == getHeight())
|
||||
|| (ms.mouse_x == getWidth() && ms.mouse_y == getHeight() - 1) ) )
|
||||
if ( isResizeable() && isLowerRightResizeCorner(ms) )
|
||||
{
|
||||
resize_click_pos = ms.termPos;
|
||||
FPoint lower_right_pos = getTermGeometry().getLowerRightPos();
|
||||
|
|
|
@ -60,8 +60,8 @@ FFileDialog::FFileDialog (FWidget* parent)
|
|||
, dir_entries()
|
||||
, directory()
|
||||
, filter_pattern()
|
||||
, filebrowser()
|
||||
, filename()
|
||||
, filebrowser()
|
||||
, hidden()
|
||||
, cancel()
|
||||
, open()
|
||||
|
@ -78,8 +78,8 @@ FFileDialog::FFileDialog (const FFileDialog& fdlg)
|
|||
, dir_entries()
|
||||
, directory(fdlg.directory)
|
||||
, filter_pattern(fdlg.filter_pattern)
|
||||
, filebrowser()
|
||||
, filename()
|
||||
, filebrowser()
|
||||
, hidden()
|
||||
, cancel()
|
||||
, open()
|
||||
|
@ -102,11 +102,11 @@ FFileDialog::FFileDialog ( const FString& dirname
|
|||
, dir_entries()
|
||||
, directory()
|
||||
, filter_pattern(filter)
|
||||
, filebrowser()
|
||||
, filename()
|
||||
, hidden()
|
||||
, cancel()
|
||||
, open()
|
||||
, filename(this)
|
||||
, filebrowser(this)
|
||||
, hidden(this)
|
||||
, cancel(this)
|
||||
, open(this)
|
||||
, dlg_type(type)
|
||||
, show_hidden(false)
|
||||
{
|
||||
|
@ -119,7 +119,6 @@ FFileDialog::FFileDialog ( const FString& dirname
|
|||
//----------------------------------------------------------------------
|
||||
FFileDialog::~FFileDialog() // destructor
|
||||
{
|
||||
deallocation();
|
||||
clear();
|
||||
}
|
||||
|
||||
|
@ -134,11 +133,6 @@ FFileDialog& FFileDialog::operator = (const FFileDialog& fdlg)
|
|||
}
|
||||
else
|
||||
{
|
||||
delete open;
|
||||
delete cancel;
|
||||
delete hidden;
|
||||
delete filebrowser;
|
||||
delete filename;
|
||||
clear();
|
||||
|
||||
if ( fdlg.getParentWidget() )
|
||||
|
@ -160,7 +154,7 @@ FFileDialog& FFileDialog::operator = (const FFileDialog& fdlg)
|
|||
//----------------------------------------------------------------------
|
||||
const FString FFileDialog::getSelectedFile() const
|
||||
{
|
||||
uLong n = uLong(filebrowser->currentItem() - 1);
|
||||
uLong n = uLong(filebrowser.currentItem() - 1);
|
||||
|
||||
if ( dir_entries[n].directory )
|
||||
return FString("");
|
||||
|
@ -222,7 +216,7 @@ bool FFileDialog::setShowHiddenFiles (bool on)
|
|||
|
||||
show_hidden = on;
|
||||
readDir();
|
||||
filebrowser->redraw();
|
||||
filebrowser.redraw();
|
||||
return show_hidden;
|
||||
}
|
||||
|
||||
|
@ -234,7 +228,7 @@ void FFileDialog::onKeyPress (FKeyEvent* ev)
|
|||
|
||||
FDialog::onKeyPress (ev);
|
||||
|
||||
if ( ! filebrowser->hasFocus() )
|
||||
if ( ! filebrowser.hasFocus() )
|
||||
return;
|
||||
|
||||
int key = ev->key();
|
||||
|
@ -374,10 +368,10 @@ void FFileDialog::adjustSize()
|
|||
X = 1 + int((max_width - getWidth()) / 2);
|
||||
Y = 1 + int((max_height - getHeight()) / 3);
|
||||
setPos(X, Y, false);
|
||||
filebrowser->setHeight (h - 8, false);
|
||||
hidden->setY (h - 4, false);
|
||||
cancel->setY (h - 4, false);
|
||||
open->setY (h - 4, false);
|
||||
filebrowser.setHeight (h - 8, false);
|
||||
hidden.setY (h - 4, false);
|
||||
cancel.setY (h - 4, false);
|
||||
open.setY (h - 4, false);
|
||||
FDialog::adjustSize();
|
||||
printPath(directory);
|
||||
}
|
||||
|
@ -408,92 +402,72 @@ void FFileDialog::init()
|
|||
else
|
||||
FDialog::setText("Open file");
|
||||
|
||||
allocation (x, y); // Create widgets
|
||||
widgetSettings (x, y); // Create widgets
|
||||
initCallbacks();
|
||||
setModal();
|
||||
readDir();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FFileDialog::allocation (int x, int y)
|
||||
inline void FFileDialog::widgetSettings (int x, int y)
|
||||
{
|
||||
try
|
||||
{
|
||||
filename = new FLineEdit(this);
|
||||
filename->setLabelText("File&name");
|
||||
filename->setText(filter_pattern);
|
||||
filename->setGeometry(11, 1, 28, 1);
|
||||
filename->setFocus();
|
||||
filename.setLabelText ("File&name");
|
||||
filename.setText (filter_pattern);
|
||||
filename.setGeometry (11, 1, 28, 1);
|
||||
filename.setFocus();
|
||||
|
||||
filebrowser = new FListBox(this);
|
||||
filebrowser->setGeometry(2, 3, 38, 6);
|
||||
filebrowser.setGeometry (2, 3, 38, 6);
|
||||
printPath (directory);
|
||||
|
||||
hidden = new FCheckBox("&hidden files", this);
|
||||
hidden->setGeometry(2, 10, 16, 1);
|
||||
hidden.setText ("&hidden files");
|
||||
hidden.setGeometry (2, 10, 16, 1);
|
||||
|
||||
cancel = new FButton("&Cancel", this);
|
||||
cancel->setGeometry(19, 10, 9, 1);
|
||||
cancel.setText ("&Cancel");
|
||||
cancel.setGeometry(19, 10, 9, 1);
|
||||
|
||||
if ( dlg_type == FFileDialog::Save )
|
||||
open = new FButton("&Save", this);
|
||||
open.setText ("&Save");
|
||||
else
|
||||
open = new FButton("&Open", this);
|
||||
open.setText ("&Open");
|
||||
|
||||
open->setGeometry(30, 10, 9, 1);
|
||||
open.setGeometry(30, 10, 9, 1);
|
||||
setGeometry (x, y, getWidth(), getHeight());
|
||||
}
|
||||
catch (const std::bad_alloc& ex)
|
||||
{
|
||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FFileDialog::deallocation()
|
||||
{
|
||||
delete open;
|
||||
delete cancel;
|
||||
delete hidden;
|
||||
delete filebrowser;
|
||||
delete filename;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::initCallbacks()
|
||||
{
|
||||
filename->addCallback
|
||||
filename.addCallback
|
||||
(
|
||||
"activate",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processActivate)
|
||||
);
|
||||
|
||||
filebrowser->addCallback
|
||||
filebrowser.addCallback
|
||||
(
|
||||
"row-changed",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processRowChanged)
|
||||
);
|
||||
|
||||
filebrowser->addCallback
|
||||
filebrowser.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processClicked)
|
||||
);
|
||||
|
||||
hidden->addCallback
|
||||
hidden.addCallback
|
||||
(
|
||||
"toggled",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processShowHidden)
|
||||
);
|
||||
|
||||
cancel->addCallback
|
||||
cancel.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processCancel)
|
||||
);
|
||||
|
||||
open->addCallback
|
||||
open.addCallback
|
||||
(
|
||||
"clicked",
|
||||
F_METHOD_CALLBACK (this, &FFileDialog::cb_processOpen)
|
||||
|
@ -725,7 +699,7 @@ void FFileDialog::dirEntriesToList()
|
|||
{
|
||||
// Fill list with directory entries
|
||||
|
||||
filebrowser->clear();
|
||||
filebrowser.clear();
|
||||
|
||||
if ( dir_entries.empty() )
|
||||
return;
|
||||
|
@ -737,9 +711,9 @@ void FFileDialog::dirEntriesToList()
|
|||
while ( iter != last )
|
||||
{
|
||||
if ( iter->directory )
|
||||
filebrowser->insert(FString(iter->name), fc::SquareBrackets);
|
||||
filebrowser.insert(FString(iter->name), fc::SquareBrackets);
|
||||
else
|
||||
filebrowser->insert(FString(iter->name));
|
||||
filebrowser.insert(FString(iter->name));
|
||||
|
||||
++iter;
|
||||
}
|
||||
|
@ -774,7 +748,7 @@ int FFileDialog::changeDir (const FString& dirname)
|
|||
if ( newdir == FString("..") )
|
||||
{
|
||||
if ( lastdir == FString('/') )
|
||||
filename->setText('/');
|
||||
filename.setText('/');
|
||||
else if ( ! dir_entries.empty() )
|
||||
{
|
||||
int i = 1;
|
||||
|
@ -788,8 +762,8 @@ int FFileDialog::changeDir (const FString& dirname)
|
|||
{
|
||||
if ( std::strcmp(iter->name, baseName) == 0 )
|
||||
{
|
||||
filebrowser->setCurrentItem(i);
|
||||
filename->setText(FString(baseName) + '/');
|
||||
filebrowser.setCurrentItem(i);
|
||||
filename.setText(FString(baseName) + '/');
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -803,14 +777,14 @@ int FFileDialog::changeDir (const FString& dirname)
|
|||
FString firstname = dir_entries[0].name;
|
||||
|
||||
if ( dir_entries[0].directory )
|
||||
filename->setText(firstname + '/');
|
||||
filename.setText(firstname + '/');
|
||||
else
|
||||
filename->setText(firstname);
|
||||
filename.setText(firstname);
|
||||
}
|
||||
|
||||
printPath(directory);
|
||||
filename->redraw();
|
||||
filebrowser->redraw();
|
||||
filename.redraw();
|
||||
filebrowser.redraw();
|
||||
// fall through
|
||||
default:
|
||||
return 0;
|
||||
|
@ -821,12 +795,12 @@ int FFileDialog::changeDir (const FString& dirname)
|
|||
void FFileDialog::printPath (const FString& txt)
|
||||
{
|
||||
const FString& path = txt;
|
||||
const uInt max_width = uInt(filebrowser->getWidth()) - 4;
|
||||
const uInt max_width = uInt(filebrowser.getWidth()) - 4;
|
||||
|
||||
if ( path.getLength() > max_width )
|
||||
filebrowser->setText(".." + path.right(max_width - 2));
|
||||
filebrowser.setText(".." + path.right(max_width - 2));
|
||||
else
|
||||
filebrowser->setText(path);
|
||||
filebrowser.setText(path);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -845,24 +819,24 @@ const FString FFileDialog::getHomeDir()
|
|||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processActivate (FWidget*, data_ptr)
|
||||
{
|
||||
if ( filename->getText().includes('*')
|
||||
|| filename->getText().includes('?') )
|
||||
if ( filename.getText().includes('*')
|
||||
|| filename.getText().includes('?') )
|
||||
{
|
||||
setFilter(filename->getText());
|
||||
setFilter(filename.getText());
|
||||
readDir();
|
||||
filebrowser->redraw();
|
||||
filebrowser.redraw();
|
||||
}
|
||||
else if ( filename->getText().getLength() == 0 )
|
||||
else if ( filename.getText().getLength() == 0 )
|
||||
{
|
||||
setFilter("*");
|
||||
readDir();
|
||||
filebrowser->redraw();
|
||||
filebrowser.redraw();
|
||||
}
|
||||
else if ( filename->getText().trim() == FString("..")
|
||||
|| filename->getText().includes('/')
|
||||
|| filename->getText().includes('~') )
|
||||
else if ( filename.getText().trim() == FString("..")
|
||||
|| filename.getText().includes('/')
|
||||
|| filename.getText().includes('~') )
|
||||
{
|
||||
changeDir(filename->getText().trim());
|
||||
changeDir(filename.getText().trim());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -871,7 +845,7 @@ void FFileDialog::cb_processActivate (FWidget*, data_ptr)
|
|||
if ( ! dir_entries.empty() )
|
||||
{
|
||||
std::vector<dir_entry>::const_iterator iter, last;
|
||||
const FString& input = filename->getText().trim();
|
||||
const FString& input = filename.getText().trim();
|
||||
iter = dir_entries.begin();
|
||||
last = dir_entries.end();
|
||||
|
||||
|
@ -898,7 +872,7 @@ void FFileDialog::cb_processActivate (FWidget*, data_ptr)
|
|||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processRowChanged (FWidget*, data_ptr)
|
||||
{
|
||||
const int n = filebrowser->currentItem();
|
||||
const int n = filebrowser.currentItem();
|
||||
|
||||
if ( n == 0 )
|
||||
return;
|
||||
|
@ -906,17 +880,17 @@ void FFileDialog::cb_processRowChanged (FWidget*, data_ptr)
|
|||
const FString& name = dir_entries[uLong(n - 1)].name;
|
||||
|
||||
if ( dir_entries[uLong(n - 1)].directory )
|
||||
filename->setText( name + '/' );
|
||||
filename.setText( name + '/' );
|
||||
else
|
||||
filename->setText( name );
|
||||
filename.setText( name );
|
||||
|
||||
filename->redraw();
|
||||
filename.redraw();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FFileDialog::cb_processClicked (FWidget*, data_ptr)
|
||||
{
|
||||
const uLong n = uLong(filebrowser->currentItem() - 1);
|
||||
const uLong n = uLong(filebrowser.currentItem() - 1);
|
||||
|
||||
if ( dir_entries[n].directory )
|
||||
changeDir(dir_entries[n].name);
|
||||
|
|
|
@ -79,7 +79,7 @@ FKeyboard::FKeyboard()
|
|||
, keypressed_cmd()
|
||||
, keyreleased_cmd()
|
||||
, escape_key_cmd()
|
||||
, termcap_map(0)
|
||||
, key_map(0)
|
||||
{
|
||||
// Initialize keyboard values
|
||||
time_keypressed.tv_sec = 0;
|
||||
|
@ -123,7 +123,7 @@ const FString FKeyboard::getKeyName (int keynum)
|
|||
//----------------------------------------------------------------------
|
||||
void FKeyboard::setTermcapMap (fc::fkeymap* keymap)
|
||||
{
|
||||
termcap_map = keymap;
|
||||
key_map = keymap;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -232,10 +232,10 @@ inline int FKeyboard::getTermcapKey()
|
|||
|
||||
assert ( fifo_buf_size > 0 );
|
||||
|
||||
if ( ! termcap_map )
|
||||
if ( ! key_map )
|
||||
return -1;
|
||||
|
||||
fc::fkeymap* keymap = reinterpret_cast<fc::fkeymap*>(termcap_map);
|
||||
fc::fkeymap* keymap = reinterpret_cast<fc::fkeymap*>(key_map);
|
||||
for (int i = 0; keymap[i].tname[0] != 0; i++)
|
||||
{
|
||||
char* k = keymap[i].string;
|
||||
|
@ -515,9 +515,9 @@ int FKeyboard::keyCorrection (const int& keycode)
|
|||
if ( linux )
|
||||
key_correction = linux->modifierKeyCorrection(keycode);
|
||||
else
|
||||
key_correction = key;
|
||||
key_correction = keycode;
|
||||
#else
|
||||
key_correction = key;
|
||||
key_correction = keycode;
|
||||
#endif
|
||||
|
||||
return key_correction;
|
||||
|
|
|
@ -34,6 +34,123 @@ namespace finalcut
|
|||
// Static class attribute
|
||||
FObject::FObjectIterator FListView::null_iter;
|
||||
|
||||
// Function prototypes
|
||||
long firstNumberFromString (const FString&);
|
||||
bool sortAscendingByName (const FObject*, const FObject*);
|
||||
bool sortDescendingByName (const FObject*, const FObject*);
|
||||
bool sortAscendingByNumber (const FObject*, const FObject*);
|
||||
bool sortDescendingByNumber (const FObject*, const FObject*);
|
||||
|
||||
// non-member functions
|
||||
//----------------------------------------------------------------------
|
||||
long firstNumberFromString (const FString& str)
|
||||
{
|
||||
const FString::iterator last = str.end();
|
||||
FString::iterator iter = str.begin();
|
||||
FString::iterator first_pos;
|
||||
FString::iterator last_pos;
|
||||
long number;
|
||||
|
||||
while ( iter != last )
|
||||
{
|
||||
if ( wchar_t(*iter) >= L'0' && wchar_t(*iter) <= L'9' )
|
||||
{
|
||||
if ( wchar_t(*(iter - 1)) == L'-' )
|
||||
--iter;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
++iter;
|
||||
}
|
||||
|
||||
first_pos = iter;
|
||||
|
||||
if ( first_pos == last )
|
||||
return 0;
|
||||
|
||||
while ( iter != last )
|
||||
{
|
||||
if ( wchar_t(*iter) < L'0' || wchar_t(*iter) > L'9' )
|
||||
break;
|
||||
|
||||
++iter;
|
||||
}
|
||||
|
||||
last_pos = iter;
|
||||
|
||||
if ( last_pos == last )
|
||||
return 0;
|
||||
|
||||
uInt pos = uInt(std::distance(str.begin(), first_pos)) + 1;
|
||||
uInt length = uInt(std::distance(first_pos, last_pos));
|
||||
const FString num_str = str.mid(pos, length);
|
||||
|
||||
try
|
||||
{
|
||||
number = num_str.toLong();
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool sortAscendingByName (const FObject* lhs, const FObject* rhs)
|
||||
{
|
||||
const FListViewItem* l_item = static_cast<const FListViewItem*>(lhs);
|
||||
const FListViewItem* r_item = static_cast<const FListViewItem*>(rhs);
|
||||
const int column = l_item->getSortColumn();
|
||||
const FString l_string = l_item->getText(column);
|
||||
const FString r_string = r_item->getText(column);
|
||||
|
||||
// lhs < rhs
|
||||
return bool( strcasecmp(l_string.c_str(), r_string.c_str()) < 0 );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool sortDescendingByName (const FObject* lhs, const FObject* rhs)
|
||||
{
|
||||
const FListViewItem* l_item = static_cast<const FListViewItem*>(lhs);
|
||||
const FListViewItem* r_item = static_cast<const FListViewItem*>(rhs);
|
||||
const int column = l_item->getSortColumn();
|
||||
const FString l_string = l_item->getText(column);
|
||||
const FString r_string = r_item->getText(column);
|
||||
|
||||
// lhs > rhs
|
||||
return bool( strcasecmp(l_string.c_str(), r_string.c_str()) > 0 );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool sortAscendingByNumber (const FObject* lhs, const FObject* rhs)
|
||||
{
|
||||
const FListViewItem* l_item = static_cast<const FListViewItem*>(lhs);
|
||||
const FListViewItem* r_item = static_cast<const FListViewItem*>(rhs);
|
||||
const int column = l_item->getSortColumn();
|
||||
const long l_number = firstNumberFromString(l_item->getText(column));
|
||||
const long r_number = firstNumberFromString(r_item->getText(column));
|
||||
|
||||
// lhs < rhs
|
||||
return bool( l_number < r_number );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool sortDescendingByNumber (const FObject* lhs, const FObject* rhs)
|
||||
{
|
||||
const FListViewItem* l_item = static_cast<const FListViewItem*>(lhs);
|
||||
const FListViewItem* r_item = static_cast<const FListViewItem*>(rhs);
|
||||
const int column = l_item->getSortColumn();
|
||||
const long l_number = firstNumberFromString(l_item->getText(column));
|
||||
const long r_number = firstNumberFromString(r_item->getText(column));
|
||||
|
||||
// lhs > rhs
|
||||
return bool( l_number > r_number );
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FListViewItem
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -44,6 +161,7 @@ FListViewItem::FListViewItem (const FListViewItem& item)
|
|||
: FObject(item.getParent())
|
||||
, column_list(item.column_list)
|
||||
, data_pointer(item.data_pointer)
|
||||
, root()
|
||||
, visible_lines(1)
|
||||
, expandable(false)
|
||||
, is_expand(false)
|
||||
|
@ -68,6 +186,7 @@ FListViewItem::FListViewItem (FObjectIterator parent_iter)
|
|||
: FObject((*parent_iter)->getParent())
|
||||
, column_list()
|
||||
, data_pointer(0)
|
||||
, root()
|
||||
, visible_lines(1)
|
||||
, expandable(false)
|
||||
, is_expand(false)
|
||||
|
@ -82,6 +201,7 @@ FListViewItem::FListViewItem ( const FStringList& cols
|
|||
: FObject(0)
|
||||
, column_list(cols)
|
||||
, data_pointer(data)
|
||||
, root()
|
||||
, visible_lines(1)
|
||||
, expandable(false)
|
||||
, is_expand(false)
|
||||
|
@ -99,6 +219,16 @@ FListViewItem::~FListViewItem() // destructor
|
|||
|
||||
|
||||
// public methods of FListViewItem
|
||||
//----------------------------------------------------------------------
|
||||
int FListViewItem::getSortColumn() const
|
||||
{
|
||||
if ( ! *root )
|
||||
return -1;
|
||||
|
||||
FListView* root_obj = static_cast<FListView*>(*root);
|
||||
return root_obj->getSortColumn();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FString FListViewItem::getText (int column) const
|
||||
{
|
||||
|
@ -208,11 +338,40 @@ void FListViewItem::collapse()
|
|||
}
|
||||
|
||||
// private methods of FListView
|
||||
//----------------------------------------------------------------------
|
||||
template<typename Compare>
|
||||
void FListViewItem::sort (Compare cmp)
|
||||
{
|
||||
if ( ! expandable )
|
||||
return;
|
||||
|
||||
// Sort the top level
|
||||
FObject::FObjectList& children_list = getChildren();
|
||||
|
||||
if ( ! children_list.empty() )
|
||||
children_list.sort(cmp);
|
||||
|
||||
// Sort the sublevels
|
||||
FListViewIterator iter = children_list.begin();
|
||||
|
||||
while ( iter != children_list.end() )
|
||||
{
|
||||
if ( *iter )
|
||||
{
|
||||
FListViewItem* item = static_cast<FListViewItem*>(*iter);
|
||||
item->sort(cmp);
|
||||
}
|
||||
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FObject::FObjectIterator FListViewItem::appendItem (FListViewItem* child)
|
||||
{
|
||||
expandable = true;
|
||||
resetVisibleLineCounter();
|
||||
child->root = root;
|
||||
addChild (child);
|
||||
// Return iterator to child/last element
|
||||
return --FObject::end();
|
||||
|
@ -288,9 +447,6 @@ FListViewIterator::FListViewIterator (FObjectIterator iter)
|
|||
, position(0)
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FListViewIterator::~FListViewIterator() // destructor
|
||||
{ }
|
||||
|
||||
// FListViewIterator operators
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -454,6 +610,11 @@ FListView::FListView (FWidget* parent)
|
|||
, xoffset(0)
|
||||
, nf_offset(0)
|
||||
, max_line_width(1)
|
||||
, sort_column(-1)
|
||||
, sort_type()
|
||||
, sort_order(fc::unsorted)
|
||||
, user_defined_ascending(0)
|
||||
, user_defined_descending(0)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
@ -507,6 +668,24 @@ FString FListView::getColumnText (int column) const
|
|||
return header[uInt(column)].name;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
fc::sorting_type FListView::getColumnSortType (int column) const
|
||||
{
|
||||
fc::sorting_type type;
|
||||
std::size_t size = uInt(column);
|
||||
|
||||
try
|
||||
{
|
||||
type = sort_type.at(size);
|
||||
}
|
||||
catch (const std::out_of_range&)
|
||||
{
|
||||
type = fc::unknown;
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::setGeometry (int x, int y, int w, int h, bool adjust)
|
||||
{
|
||||
|
@ -559,6 +738,34 @@ void FListView::setColumnText (int column, const FString& label)
|
|||
header[uInt(column)].name = label;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::setColumnSortType (int column, fc::sorting_type type)
|
||||
{
|
||||
// Sets the sort type by which the list is to be sorted
|
||||
|
||||
if ( column < 1 || header.empty() || column > int(header.size()) )
|
||||
return;
|
||||
|
||||
std::size_t size = uInt(column + 1);
|
||||
|
||||
if ( sort_type.empty() || sort_type.size() < size )
|
||||
sort_type.resize(size);
|
||||
|
||||
sort_type[uInt(column)] = type;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::setColumnSort (int column, fc::sorting_order order)
|
||||
{
|
||||
// Sets the column to sort by + the sorting order
|
||||
|
||||
if ( column < 1 || header.empty() || column > int(header.size()) )
|
||||
column = -1;
|
||||
|
||||
sort_column = column;
|
||||
sort_order = order;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FListView::addColumn (const FString& label, int width)
|
||||
{
|
||||
|
@ -582,42 +789,14 @@ int FListView::addColumn (const FString& label, int width)
|
|||
FObject::FObjectIterator FListView::insert ( FListViewItem* item
|
||||
, FObjectIterator parent_iter )
|
||||
{
|
||||
static const int padding_space = 1;
|
||||
int line_width = padding_space; // leading space
|
||||
uInt column_idx = 0;
|
||||
uInt entries = uInt(item->column_list.size());
|
||||
FObjectIterator item_iter;
|
||||
headerItems::iterator header_iter;
|
||||
int line_width;
|
||||
int element_count;
|
||||
|
||||
if ( parent_iter == FListView::null_iter )
|
||||
return FListView::null_iter;
|
||||
|
||||
// Determine the line width
|
||||
header_iter = header.begin();
|
||||
|
||||
while ( header_iter != header.end() )
|
||||
{
|
||||
int width = header_iter->width;
|
||||
bool fixed_width = header_iter->fixed_width;
|
||||
|
||||
if ( ! fixed_width )
|
||||
{
|
||||
int len;
|
||||
|
||||
if ( column_idx < entries )
|
||||
len = int(item->column_list[column_idx].getLength());
|
||||
else
|
||||
len = 0;
|
||||
|
||||
if ( len > width )
|
||||
header_iter->width = len;
|
||||
}
|
||||
|
||||
line_width += header_iter->width + padding_space; // width + trailing space
|
||||
column_idx++;
|
||||
++header_iter;
|
||||
}
|
||||
|
||||
line_width = determineLineWidth (item);
|
||||
recalculateHorizontalBar (line_width);
|
||||
|
||||
if ( parent_iter == root )
|
||||
|
@ -652,7 +831,10 @@ FObject::FObjectIterator FListView::insert ( FListViewItem* item
|
|||
first_visible_line = itemlist.begin();
|
||||
}
|
||||
|
||||
int element_count = int(getCount());
|
||||
// Sort list by a column (only if activated)
|
||||
sort();
|
||||
|
||||
element_count = int(getCount());
|
||||
recalculateVerticalBar (element_count);
|
||||
return item_iter;
|
||||
}
|
||||
|
@ -703,6 +885,55 @@ FObject::FObjectIterator FListView::insert ( const std::vector<long>& cols
|
|||
return item_iter;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::sort()
|
||||
{
|
||||
// Sorts the list view according to the specified setting
|
||||
|
||||
if ( sort_column < 1 && sort_column > int(header.size()) )
|
||||
return;
|
||||
|
||||
switch ( getColumnSortType(sort_column) )
|
||||
{
|
||||
case fc::unknown:
|
||||
case fc::by_name:
|
||||
if ( sort_order == fc::ascending )
|
||||
{
|
||||
sort (sortAscendingByName);
|
||||
}
|
||||
else if ( sort_order == fc::descending )
|
||||
{
|
||||
sort (sortDescendingByName);
|
||||
}
|
||||
break;
|
||||
|
||||
case fc::by_number:
|
||||
if ( sort_order == fc::ascending )
|
||||
{
|
||||
sort (sortAscendingByNumber);
|
||||
}
|
||||
else if ( sort_order == fc::descending )
|
||||
{
|
||||
sort (sortDescendingByNumber);
|
||||
}
|
||||
break;
|
||||
|
||||
case fc::user_defined:
|
||||
if ( sort_order == fc::ascending && user_defined_ascending )
|
||||
{
|
||||
sort (user_defined_ascending);
|
||||
}
|
||||
else if ( sort_order == fc::descending && user_defined_descending )
|
||||
{
|
||||
sort (user_defined_descending);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
current_iter = itemlist.begin();
|
||||
first_visible_line = itemlist.begin();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::onKeyPress (FKeyEvent* ev)
|
||||
{
|
||||
|
@ -1189,6 +1420,28 @@ void FListView::init()
|
|||
setRightPadding(1 + nf_offset);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
template<typename Compare>
|
||||
void FListView::sort (Compare cmp)
|
||||
{
|
||||
// Sort the top level
|
||||
itemlist.sort(cmp);
|
||||
|
||||
// Sort the sublevels
|
||||
FListViewIterator iter = itemlist.begin();
|
||||
|
||||
while ( iter != itemlist.end() )
|
||||
{
|
||||
if ( *iter )
|
||||
{
|
||||
FListViewItem* item = static_cast<FListViewItem*>(*iter);
|
||||
item->sort(cmp);
|
||||
}
|
||||
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
uInt FListView::getAlignOffset ( fc::text_alignment align
|
||||
, uInt txt_length
|
||||
|
@ -1581,6 +1834,42 @@ void FListView::updateDrawing (bool draw_vbar, bool draw_hbar)
|
|||
flush_out();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
int FListView::determineLineWidth (FListViewItem* item)
|
||||
{
|
||||
static const int padding_space = 1;
|
||||
int line_width = padding_space; // leading space
|
||||
uInt column_idx = 0;
|
||||
uInt entries = uInt(item->column_list.size());
|
||||
headerItems::iterator header_iter;
|
||||
header_iter = header.begin();
|
||||
|
||||
while ( header_iter != header.end() )
|
||||
{
|
||||
int width = header_iter->width;
|
||||
bool fixed_width = header_iter->fixed_width;
|
||||
|
||||
if ( ! fixed_width )
|
||||
{
|
||||
int len;
|
||||
|
||||
if ( column_idx < entries )
|
||||
len = int(item->column_list[column_idx].getLength());
|
||||
else
|
||||
len = 0;
|
||||
|
||||
if ( len > width )
|
||||
header_iter->width = len;
|
||||
}
|
||||
|
||||
line_width += header_iter->width + padding_space; // width + trailing space
|
||||
column_idx++;
|
||||
++header_iter;
|
||||
}
|
||||
|
||||
return line_width;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FListView::recalculateHorizontalBar (int len)
|
||||
{
|
||||
|
@ -1751,6 +2040,7 @@ void FListView::stopDragScroll()
|
|||
//----------------------------------------------------------------------
|
||||
FObject::FObjectIterator FListView::appendItem (FListViewItem* item)
|
||||
{
|
||||
item->root = root;
|
||||
addChild (item);
|
||||
itemlist.push_back (item);
|
||||
return --itemlist.end();
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace finalcut
|
|||
//----------------------------------------------------------------------
|
||||
FMenu::FMenu(FWidget* parent)
|
||||
: FWindow(parent)
|
||||
, item(0)
|
||||
, item()
|
||||
, super_menu(0)
|
||||
, opened_sub_menu(0)
|
||||
, shown_sub_menu(0)
|
||||
|
@ -53,7 +53,7 @@ FMenu::FMenu(FWidget* parent)
|
|||
//----------------------------------------------------------------------
|
||||
FMenu::FMenu (const FString& txt, FWidget* parent)
|
||||
: FWindow(parent)
|
||||
, item(0)
|
||||
, item(txt, parent)
|
||||
, super_menu(0)
|
||||
, opened_sub_menu(0)
|
||||
, shown_sub_menu(0)
|
||||
|
@ -62,16 +62,6 @@ FMenu::FMenu (const FString& txt, FWidget* parent)
|
|||
, mouse_down(false)
|
||||
, has_checkable_items(false)
|
||||
{
|
||||
try
|
||||
{
|
||||
item = new FMenuItem(txt, parent);
|
||||
}
|
||||
catch (const std::bad_alloc& ex)
|
||||
{
|
||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
init(parent);
|
||||
}
|
||||
|
||||
|
@ -104,9 +94,7 @@ bool FMenu::setMenuWidget (bool on)
|
|||
void FMenu::setStatusbarMessage (const FString& msg)
|
||||
{
|
||||
FWidget::setStatusbarMessage(msg);
|
||||
|
||||
if ( item )
|
||||
item->setStatusbarMessage(msg);
|
||||
item.setStatusbarMessage(msg);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -474,9 +462,7 @@ void FMenu::init(FWidget* parent)
|
|||
|
||||
setForegroundColor (wc.menu_active_fg);
|
||||
setBackgroundColor (wc.menu_active_bg);
|
||||
|
||||
if ( item )
|
||||
item->setMenu(this);
|
||||
item.setMenu(this);
|
||||
|
||||
if ( parent )
|
||||
{
|
||||
|
@ -500,9 +486,7 @@ void FMenu::init(FWidget* parent)
|
|||
//----------------------------------------------------------------------
|
||||
void FMenu::calculateDimensions()
|
||||
{
|
||||
int item_X
|
||||
, item_Y
|
||||
, adjust_X;
|
||||
int item_X, item_Y, adjust_X;
|
||||
std::vector<FMenuItem*>::const_iterator iter, last;
|
||||
iter = item_list.begin();
|
||||
last = item_list.end();
|
||||
|
@ -1038,7 +1022,7 @@ bool FMenu::containsMenuStructure (int x, int y)
|
|||
return true;
|
||||
else if ( si && si->hasMenu() && opened_sub_menu )
|
||||
return si->getMenu()->containsMenuStructure(x, y);
|
||||
else if ( item && item->getTermGeometry().contains(x, y) )
|
||||
else if ( item.getTermGeometry().contains(x, y) )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
|
|
@ -53,6 +53,13 @@ FMenuBar::~FMenuBar() // destructor
|
|||
|
||||
|
||||
// public methods of FMenuBar
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::resetMenu()
|
||||
{
|
||||
unselectItem();
|
||||
drop_down = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::hide()
|
||||
{
|
||||
|
@ -85,13 +92,6 @@ void FMenuBar::hide()
|
|||
delete[] blank;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::resetMenu()
|
||||
{
|
||||
unselectItem();
|
||||
drop_down = false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FMenuBar::adjustSize()
|
||||
{
|
||||
|
|
|
@ -99,6 +99,14 @@ FMenuItem::FMenuItem (int k, const FString& txt, FWidget* parent)
|
|||
//----------------------------------------------------------------------
|
||||
FMenuItem::~FMenuItem() // destructor
|
||||
{
|
||||
if ( super_menu && (isMenu(super_menu) || isMenuBar(super_menu)) )
|
||||
{
|
||||
FMenuList* menu_list = dynamic_cast<FMenuList*>(super_menu);
|
||||
|
||||
if ( menu_list )
|
||||
menu_list->remove(this);
|
||||
}
|
||||
|
||||
delAccelerator();
|
||||
|
||||
// remove dialog list item callback from the dialog
|
||||
|
|
|
@ -240,22 +240,8 @@ int FObject::addTimer (int interval)
|
|||
timeval time_interval;
|
||||
timeval currentTime;
|
||||
int id = 1;
|
||||
|
||||
timer_modify_lock = true;
|
||||
|
||||
if ( ! timer_list )
|
||||
{
|
||||
try
|
||||
{
|
||||
timer_list = new TimerList();
|
||||
}
|
||||
catch (const std::bad_alloc& ex)
|
||||
{
|
||||
std::cerr << "not enough memory to alloc " << ex.what() << std::endl;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// find an unused timer id
|
||||
if ( ! timer_list->empty() )
|
||||
{
|
||||
|
@ -389,4 +375,52 @@ bool FObject::event (FEvent* ev)
|
|||
void FObject::onTimer (FTimerEvent*)
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
uInt FObject::processTimerEvent()
|
||||
{
|
||||
FObject::TimerList::iterator iter, last;
|
||||
timeval currentTime;
|
||||
uInt activated = 0;
|
||||
|
||||
getCurrentTime (¤tTime);
|
||||
|
||||
if ( isTimerInUpdating() )
|
||||
return 0;
|
||||
|
||||
if ( ! timer_list )
|
||||
return 0;
|
||||
|
||||
if ( timer_list->empty() )
|
||||
return 0;
|
||||
|
||||
iter = timer_list->begin();
|
||||
last = timer_list->end();
|
||||
|
||||
while ( iter != last )
|
||||
{
|
||||
if ( ! iter->id
|
||||
|| ! iter->object
|
||||
|| currentTime < iter->timeout ) // no timer expired
|
||||
break;
|
||||
|
||||
iter->timeout += iter->interval;
|
||||
|
||||
if ( iter->timeout < currentTime )
|
||||
iter->timeout = currentTime + iter->interval;
|
||||
|
||||
if ( iter->interval.tv_usec > 0 || iter->interval.tv_sec > 0 )
|
||||
activated++;
|
||||
|
||||
FTimerEvent t_ev(fc::Timer_Event, iter->id);
|
||||
performTimerAction (iter->object, &t_ev);
|
||||
++iter;
|
||||
}
|
||||
|
||||
return activated;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FObject::performTimerAction (const FObject*, const FEvent*)
|
||||
{ }
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
|
@ -57,6 +57,7 @@ FOptiMove::FOptiMove (int baud)
|
|||
, F_clr_eol()
|
||||
, automatic_left_margin(false)
|
||||
, eat_nl_glitch(false)
|
||||
, move_buf()
|
||||
, char_duration(1)
|
||||
, baudrate(baud)
|
||||
, tabstop(0)
|
||||
|
@ -64,7 +65,10 @@ FOptiMove::FOptiMove (int baud)
|
|||
, screen_height(24)
|
||||
{
|
||||
assert ( baud >= 0 );
|
||||
move_buf[0] = '\0';
|
||||
|
||||
// Initialize arrays with '\0'
|
||||
std::fill_n (move_buf, sizeof(move_buf), '\0');
|
||||
|
||||
calculateCharDuration();
|
||||
|
||||
// ANSI set cursor address preset for undefined terminals
|
||||
|
@ -830,7 +834,7 @@ inline int FOptiMove::horizontalMove (char hmove[], int from_x, int to_x)
|
|||
// Move to fixed column position1
|
||||
std::strncat ( hmove
|
||||
, tparm(F_column_address.cap, to_x, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
, BUF_SIZE - std::strlen(hmove) );
|
||||
, BUF_SIZE - std::strlen(hmove) - 1);
|
||||
hmove[BUF_SIZE - 1] = '\0';
|
||||
htime = F_column_address.duration;
|
||||
}
|
||||
|
@ -853,7 +857,7 @@ inline void FOptiMove::rightMove ( char hmove[], int& htime
|
|||
{
|
||||
std::strncpy ( hmove
|
||||
, tparm(F_parm_right_cursor.cap, num, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
, BUF_SIZE );
|
||||
, BUF_SIZE - 1);
|
||||
hmove[BUF_SIZE - 1] = '\0';
|
||||
htime = F_parm_right_cursor.duration;
|
||||
}
|
||||
|
@ -908,7 +912,7 @@ inline void FOptiMove::leftMove ( char hmove[], int& htime
|
|||
{
|
||||
std::strncpy ( hmove
|
||||
, tparm(F_parm_left_cursor.cap, num, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
, BUF_SIZE );
|
||||
, BUF_SIZE - 1);
|
||||
hmove[BUF_SIZE - 1] = '\0';
|
||||
htime = F_parm_left_cursor.duration;
|
||||
}
|
||||
|
@ -973,7 +977,7 @@ inline bool FOptiMove::isMethod0Faster ( int& move_time
|
|||
if ( move_xy )
|
||||
{
|
||||
char* move_ptr = move_buf;
|
||||
std::strncpy (move_ptr, move_xy, BUF_SIZE);
|
||||
std::strncpy (move_ptr, move_xy, BUF_SIZE - 1);
|
||||
move_ptr[BUF_SIZE - 1] = '\0';
|
||||
move_time = F_cursor_address.duration;
|
||||
return true;
|
||||
|
@ -1123,7 +1127,7 @@ void FOptiMove::moveByMethod ( int method
|
|||
case 2:
|
||||
if ( F_carriage_return.cap )
|
||||
{
|
||||
std::strncpy (move_ptr, F_carriage_return.cap, BUF_SIZE);
|
||||
std::strncpy (move_ptr, F_carriage_return.cap, BUF_SIZE - 1);
|
||||
move_ptr[BUF_SIZE - 1] ='\0';
|
||||
move_ptr += F_carriage_return.length;
|
||||
relativeMove (move_ptr, 0, yold, xnew, ynew);
|
||||
|
@ -1131,14 +1135,14 @@ void FOptiMove::moveByMethod ( int method
|
|||
break;
|
||||
|
||||
case 3:
|
||||
std::strncpy (move_ptr, F_cursor_home.cap, BUF_SIZE);
|
||||
std::strncpy (move_ptr, F_cursor_home.cap, BUF_SIZE - 1);
|
||||
move_ptr[BUF_SIZE - 1] ='\0';
|
||||
move_ptr += F_cursor_home.length;
|
||||
relativeMove (move_ptr, 0, 0, xnew, ynew);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
std::strncpy (move_ptr, F_cursor_to_ll.cap, BUF_SIZE);
|
||||
std::strncpy (move_ptr, F_cursor_to_ll.cap, BUF_SIZE - 1);
|
||||
move_ptr[BUF_SIZE - 1] ='\0';
|
||||
move_ptr += F_cursor_to_ll.length;
|
||||
relativeMove (move_ptr, 0, screen_height - 1, xnew, ynew);
|
||||
|
|
|
@ -99,7 +99,7 @@ bool FStatusKey::setMouseFocus(bool on)
|
|||
if ( on == mouse_focus )
|
||||
return true;
|
||||
|
||||
return mouse_focus = ( on ) ? true : false;
|
||||
return mouse_focus = on;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2676,14 +2676,13 @@ inline void FString::_assign (const wchar_t s[])
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FString::_insert (uInt pos, uInt len, const wchar_t s[])
|
||||
inline void FString::_insert (uInt len, const wchar_t s[])
|
||||
{
|
||||
if ( len == 0 ) // String s is a null or a empty string
|
||||
return;
|
||||
|
||||
if ( ! string )
|
||||
{
|
||||
// string is null
|
||||
if ( string )
|
||||
delete[](string);
|
||||
|
||||
length = len;
|
||||
bufsize = FWDBUFFER + length + 1;
|
||||
|
@ -2700,7 +2699,17 @@ inline void FString::_insert (uInt pos, uInt len, const wchar_t s[])
|
|||
|
||||
std::wcsncpy (string, s, bufsize);
|
||||
string[bufsize - 1] = L'\0';
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FString::_insert (uInt pos, uInt len, const wchar_t s[])
|
||||
{
|
||||
if ( len == 0 ) // String s is a null or a empty string
|
||||
return;
|
||||
|
||||
if ( ! string ) // string is null
|
||||
{
|
||||
_insert (len, s);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
604
src/fterm.cpp
604
src/fterm.cpp
File diff suppressed because it is too large
Load Diff
|
@ -1,9 +1,9 @@
|
|||
/***********************************************************************
|
||||
* ftcap_map.h - Internally used termcap capabilities *
|
||||
* ftermcap.cpp - Provides access to terminal capabilities *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2015-2017 Markus Gans *
|
||||
* Copyright 2015-2018 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 *
|
||||
|
@ -20,22 +20,41 @@
|
|||
* <http://www.gnu.org/licenses/>. *
|
||||
***********************************************************************/
|
||||
|
||||
#ifndef FTCAPMAP_H
|
||||
#define FTCAPMAP_H
|
||||
|
||||
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||
#error "Only <final/final.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include "final/ftermcap.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
namespace fc
|
||||
{
|
||||
// static class attributes
|
||||
bool FTermcap::background_color_erase = false;
|
||||
bool FTermcap::automatic_left_margin = false;
|
||||
bool FTermcap::automatic_right_margin = false;
|
||||
bool FTermcap::eat_nl_glitch = false;
|
||||
bool FTermcap::ansi_default_color = false;
|
||||
bool FTermcap::osc_support = false;
|
||||
bool FTermcap::no_utf8_acs_chars = false;
|
||||
int FTermcap::max_color = 1;
|
||||
int FTermcap::tabstop = 8;
|
||||
int FTermcap::attr_without_color = 0;
|
||||
|
||||
static FTermcap::tcap_map term_caps[] =
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FTermcap
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FTermcap::FTermcap()
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FTermcap::~FTermcap() // destructor
|
||||
{ }
|
||||
|
||||
|
||||
// private Data Member of FTermcap - termcap capabilities
|
||||
//----------------------------------------------------------------------
|
||||
FTermcap::tcap_map FTermcap::tcap[] =
|
||||
{
|
||||
// .------------- term string
|
||||
// | .-------- Tcap-code
|
||||
|
@ -140,8 +159,4 @@ static FTermcap::tcap_map term_caps[] =
|
|||
* "XX", "Us" and "Ue" are unofficial and they are only used here.
|
||||
*/
|
||||
|
||||
} // namespace fc
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
#endif // FTCAPMAP_H
|
|
@ -26,8 +26,8 @@ namespace finalcut
|
|||
{
|
||||
|
||||
// static class attributes
|
||||
char FTermcapQuirks::termtype[256] = { };
|
||||
FTermcap::tcap_map* FTermcapQuirks::tcap = 0;
|
||||
FTermData* FTermcapQuirks::fterm_data = 0;
|
||||
FTermDetection* FTermcapQuirks::term_detection = 0;
|
||||
|
||||
|
||||
|
@ -38,7 +38,9 @@ FTermDetection* FTermcapQuirks::term_detection = 0;
|
|||
// constructors and destructor
|
||||
//----------------------------------------------------------------------
|
||||
FTermcapQuirks::FTermcapQuirks()
|
||||
{ }
|
||||
{
|
||||
tcap = FTermcap::getTermcapMap();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
FTermcapQuirks::~FTermcapQuirks() // destructor
|
||||
|
@ -47,16 +49,9 @@ FTermcapQuirks::~FTermcapQuirks() // destructor
|
|||
|
||||
// public methods of FTermcapQuirks
|
||||
//----------------------------------------------------------------------
|
||||
void FTermcapQuirks::setTerminalType (const char tt[])
|
||||
void FTermcapQuirks::setTermData (FTermData* data)
|
||||
{
|
||||
std::strncpy (termtype, tt, sizeof(termtype));
|
||||
termtype[sizeof(termtype) - 1] = '\0';
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermcapQuirks::setTermcapMap (FTermcap::tcap_map* tc)
|
||||
{
|
||||
tcap = tc;
|
||||
fterm_data = data;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -255,6 +250,8 @@ void FTermcapQuirks::init_termcap_xterm_quirks()
|
|||
void FTermcapQuirks::init_termcap_rxvt_quirks()
|
||||
{
|
||||
// Set enter/exit alternative charset mode for rxvt terminal
|
||||
const char* termtype = fterm_data->getTermType();
|
||||
|
||||
if ( std::strncmp(termtype, "rxvt-16color", 12) == 0 )
|
||||
{
|
||||
TCAP(fc::t_enter_alt_charset_mode) = \
|
||||
|
|
|
@ -31,8 +31,8 @@ FTermDetection::terminalType FTermDetection::terminal_type = \
|
|||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
FTermDetection::colorEnv FTermDetection::color_env;
|
||||
FTermDetection::secondaryDA FTermDetection::secondary_da;
|
||||
FTermData* FTermDetection::fterm_data = 0;
|
||||
char FTermDetection::termtype[256] = { };
|
||||
char FTermDetection::termfilename[256] = { };
|
||||
char FTermDetection::ttytypename[256] = { };
|
||||
bool FTermDetection::decscusr_support;
|
||||
bool FTermDetection::terminal_detection;
|
||||
|
@ -89,13 +89,9 @@ FTermDetection::~FTermDetection() // destructor
|
|||
|
||||
// public methods of FTermDetection
|
||||
//----------------------------------------------------------------------
|
||||
void FTermDetection::setTermFileName (char term_filename[])
|
||||
void FTermDetection::setTermData (FTermData* data)
|
||||
{
|
||||
if ( ! term_filename )
|
||||
return;
|
||||
|
||||
std::strncpy (termfilename, term_filename, sizeof(termfilename));
|
||||
termfilename[sizeof(termfilename) - 1] = '\0';
|
||||
fterm_data = data;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -128,6 +124,7 @@ void FTermDetection::getSystemTermType()
|
|||
{
|
||||
// Import the untrusted environment variable TERM
|
||||
const char* const& term_env = std::getenv(C_STR("TERM"));
|
||||
const char* termfilename = fterm_data->getTermFileName();
|
||||
|
||||
if ( term_env )
|
||||
{
|
||||
|
@ -164,6 +161,7 @@ bool FTermDetection::getTTYtype()
|
|||
// vt100 ttys0
|
||||
|
||||
// Get term basename
|
||||
const char* termfilename = fterm_data->getTermFileName();
|
||||
const char* term_basename = std::strrchr(termfilename, '/');
|
||||
|
||||
if ( term_basename == 0 )
|
||||
|
@ -221,6 +219,7 @@ bool FTermDetection::getTTYSFileEntry()
|
|||
// Analyse /etc/ttys and get the term name
|
||||
|
||||
// get term basename
|
||||
const char* termfilename = fterm_data->getTermFileName();
|
||||
const char* term_basename = std::strrchr(termfilename, '/');
|
||||
|
||||
if ( term_basename == 0 )
|
||||
|
|
|
@ -38,8 +38,8 @@ namespace finalcut
|
|||
console_font_op FTermLinux::screen_font;
|
||||
unimapdesc FTermLinux::screen_unicode_map;
|
||||
|
||||
bool FTermLinux::NewFont;
|
||||
bool FTermLinux::VGAFont;
|
||||
bool FTermLinux::new_font;
|
||||
bool FTermLinux::vga_font;
|
||||
bool FTermLinux::shadow_character = true;
|
||||
bool FTermLinux::half_block_character = true;
|
||||
bool FTermLinux::has_saved_palette = false;
|
||||
|
@ -194,7 +194,7 @@ void FTermLinux::initCharMap (uInt char_map[][fc::NUM_OF_ENCODINGS])
|
|||
{
|
||||
uInt c1, c2, c3, c4, c5;
|
||||
|
||||
if ( NewFont || VGAFont )
|
||||
if ( new_font || vga_font )
|
||||
return;
|
||||
|
||||
if ( screen_unicode_map.entry_ct != 0 )
|
||||
|
@ -255,7 +255,7 @@ void FTermLinux::finish()
|
|||
//----------------------------------------------------------------------
|
||||
bool FTermLinux::loadVGAFont()
|
||||
{
|
||||
VGAFont = true;
|
||||
vga_font = true;
|
||||
|
||||
if ( FTerm::openConsole() == 0 )
|
||||
{
|
||||
|
@ -265,7 +265,7 @@ bool FTermLinux::loadVGAFont()
|
|||
int ret = setScreenFont(fc::__8x16std, 256, 8, 16);
|
||||
|
||||
if ( ret != 0 )
|
||||
VGAFont = false;
|
||||
vga_font = false;
|
||||
|
||||
// unicode character mapping
|
||||
struct unimapdesc unimap;
|
||||
|
@ -275,24 +275,24 @@ bool FTermLinux::loadVGAFont()
|
|||
setUnicodeMap(&unimap);
|
||||
}
|
||||
else
|
||||
VGAFont = false;
|
||||
vga_font = false;
|
||||
|
||||
FTerm::detectTermSize();
|
||||
FTerm::closeConsole();
|
||||
}
|
||||
else
|
||||
VGAFont = false;
|
||||
vga_font = false;
|
||||
|
||||
if ( VGAFont )
|
||||
if ( vga_font )
|
||||
shadow_character = half_block_character = true;
|
||||
|
||||
return VGAFont;
|
||||
return vga_font;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FTermLinux::loadNewFont()
|
||||
{
|
||||
NewFont = true;
|
||||
new_font = true;
|
||||
|
||||
if ( FTerm::openConsole() == 0 )
|
||||
{
|
||||
|
@ -302,7 +302,7 @@ bool FTermLinux::loadNewFont()
|
|||
int ret = setScreenFont(fc::__8x16graph, 256, 8, 16);
|
||||
|
||||
if ( ret != 0 )
|
||||
NewFont = false;
|
||||
new_font = false;
|
||||
|
||||
// unicode character mapping
|
||||
struct unimapdesc unimap;
|
||||
|
@ -312,18 +312,18 @@ bool FTermLinux::loadNewFont()
|
|||
setUnicodeMap(&unimap);
|
||||
}
|
||||
else
|
||||
NewFont = false;
|
||||
new_font = false;
|
||||
|
||||
FTerm::detectTermSize();
|
||||
FTerm::closeConsole();
|
||||
}
|
||||
else
|
||||
NewFont = false;
|
||||
new_font = false;
|
||||
|
||||
if ( VGAFont )
|
||||
if ( vga_font )
|
||||
shadow_character = half_block_character = true;
|
||||
|
||||
return NewFont;
|
||||
return new_font;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -363,7 +363,7 @@ bool FTermLinux::loadOldFont (uInt char_map[][fc::NUM_OF_ENCODINGS])
|
|||
}
|
||||
|
||||
if ( retval )
|
||||
VGAFont = NewFont = false;
|
||||
vga_font = new_font = false;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -31,9 +31,8 @@ namespace finalcut
|
|||
bool FTermXTerminal::mouse_support;
|
||||
bool FTermXTerminal::meta_sends_esc;
|
||||
bool FTermXTerminal::xterm_default_colors;
|
||||
FTermcap::tcap_map* FTermXTerminal::tcap = 0;
|
||||
FTermDetection* FTermXTerminal::term_detection = 0;
|
||||
fc::xtermCursorStyle FTermXTerminal::cursor_style = fc::unknown_cursor_style;
|
||||
int FTermXTerminal::term_width = 80;
|
||||
int FTermXTerminal::term_height = 24;
|
||||
const FString* FTermXTerminal::xterm_font = 0;
|
||||
const FString* FTermXTerminal::xterm_title = 0;
|
||||
const FString* FTermXTerminal::foreground_color = 0;
|
||||
|
@ -42,6 +41,9 @@ const FString* FTermXTerminal::cursor_color = 0;
|
|||
const FString* FTermXTerminal::mouse_foreground_color = 0;
|
||||
const FString* FTermXTerminal::mouse_background_color = 0;
|
||||
const FString* FTermXTerminal::highlight_background_color = 0;
|
||||
FTermcap::tcap_map* FTermXTerminal::tcap = 0;
|
||||
FTermDetection* FTermXTerminal::term_detection = 0;
|
||||
fc::xtermCursorStyle FTermXTerminal::cursor_style = fc::unknown_cursor_style;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -56,6 +58,8 @@ FTermXTerminal::FTermXTerminal()
|
|||
mouse_support = \
|
||||
meta_sends_esc = \
|
||||
xterm_default_colors = false;
|
||||
|
||||
tcap = FTermcap::getTermcapMap();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -121,6 +125,16 @@ void FTermXTerminal::setTitle (const FString& title)
|
|||
setXTermTitle();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermXTerminal::setTermSize (int width, int height)
|
||||
{
|
||||
// Set xterm size to {term_width} x {term_height}
|
||||
|
||||
term_width = width;
|
||||
term_height = height;
|
||||
setXTermSize();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermXTerminal::setForeground (const FString& fg)
|
||||
{
|
||||
|
@ -398,6 +412,16 @@ void FTermXTerminal::setXTermTitle()
|
|||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermXTerminal::setXTermSize()
|
||||
{
|
||||
if ( term_detection->isXTerminal() )
|
||||
{
|
||||
FTerm::putstringf (CSI "8;%d;%dt", term_height, term_width);
|
||||
std::fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FTermXTerminal::setXTermFont()
|
||||
{
|
||||
|
|
|
@ -64,7 +64,8 @@ FToggleButton::FToggleButton (const FString& txt, FWidget* parent)
|
|||
, focus_inside_group(true)
|
||||
, text()
|
||||
{
|
||||
init(txt);
|
||||
FToggleButton::setText(txt); // call own method
|
||||
init();
|
||||
|
||||
if ( parent && parent->isInstanceOf("FButtonGroup") )
|
||||
{
|
||||
|
@ -611,13 +612,6 @@ void FToggleButton::setGroup (FButtonGroup* btngroup)
|
|||
button_group = btngroup;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FToggleButton::init (const FString& txt)
|
||||
{
|
||||
setText(txt);
|
||||
init();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FToggleButton::init()
|
||||
{
|
||||
|
|
|
@ -51,8 +51,7 @@ FPoint* FVTerm::term_pos = 0;
|
|||
FVTerm::term_area* FVTerm::vterm = 0;
|
||||
FVTerm::term_area* FVTerm::vdesktop = 0;
|
||||
FVTerm::term_area* FVTerm::active_area = 0;
|
||||
FVTerm::termcap_map* FVTerm::tcap = 0;
|
||||
FTermcap::tcap_map* FTermcap::tcap = 0;
|
||||
FTermcap::tcap_map* FVTerm::tcap = 0;
|
||||
FKeyboard* FVTerm::keyboard = 0;
|
||||
FVTerm::charData FVTerm::term_attribute;
|
||||
FVTerm::charData FVTerm::next_attribute;
|
||||
|
@ -2099,7 +2098,7 @@ void FVTerm::init()
|
|||
std::memcpy (&next_attribute, &term_attribute, sizeof(charData));
|
||||
|
||||
// Receive the terminal capabilities
|
||||
tcap = FTermcap().getTermcapMap();
|
||||
tcap = FTermcap::getTermcapMap();
|
||||
|
||||
// Create virtual terminal
|
||||
FRect term_geometry (0, 0, getColumnNumber(), getLineNumber());
|
||||
|
|
|
@ -361,7 +361,7 @@ bool FWidget::setEnable (bool on)
|
|||
else
|
||||
flags &= ~fc::active;
|
||||
|
||||
return enable = ( on ) ? true : false;
|
||||
return enable = on;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -414,7 +414,7 @@ bool FWidget::setFocus (bool on)
|
|||
window->setWindowFocusWidget(this);
|
||||
}
|
||||
|
||||
return focus = ( on ) ? true : false;
|
||||
return focus = on;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -174,7 +174,7 @@ bool FWindow::activateWindow (bool on)
|
|||
active_area = getVWin();
|
||||
}
|
||||
|
||||
return window_active = ( on ) ? true : false;
|
||||
return window_active = on;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -93,7 +93,7 @@ class FApplication : public FWidget
|
|||
int getArgc() const;
|
||||
char** getArgv() const;
|
||||
FWidget* getMainWidget() const;
|
||||
FWidget* getFocusWidget() const;
|
||||
virtual FWidget* getFocusWidget() const;
|
||||
|
||||
// Mutator
|
||||
void setMainWidget (FWidget*);
|
||||
|
@ -175,9 +175,10 @@ class FApplication : public FWidget
|
|||
void sendWheelEvent (const FPoint&, const FPoint&);
|
||||
void processMouseEvent();
|
||||
void processResizeEvent();
|
||||
int processTimerEvent();
|
||||
void processCloseWidget();
|
||||
bool processNextEvent();
|
||||
virtual void performTimerAction ( const FObject*
|
||||
, const FEvent* );
|
||||
|
||||
// Data Members
|
||||
int app_argc;
|
||||
|
|
|
@ -89,13 +89,13 @@ class FButton : public FWidget
|
|||
bool setNoUnderline(bool);
|
||||
bool setNoUnderline();
|
||||
bool unsetNoUnderline();
|
||||
bool setEnable(bool);
|
||||
bool setEnable();
|
||||
bool unsetEnable();
|
||||
bool setDisable();
|
||||
bool setFocus(bool);
|
||||
bool setFocus();
|
||||
bool unsetFocus();
|
||||
virtual bool setEnable(bool);
|
||||
virtual bool setEnable();
|
||||
virtual bool unsetEnable();
|
||||
virtual bool setDisable();
|
||||
virtual bool setFocus(bool);
|
||||
virtual bool setFocus();
|
||||
virtual bool unsetFocus();
|
||||
bool setFlat(bool);
|
||||
bool setFlat();
|
||||
bool unsetFlat();
|
||||
|
@ -117,17 +117,17 @@ class FButton : public FWidget
|
|||
bool hasClickAnimation();
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onTimer (FTimerEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onTimer (FTimerEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -149,7 +149,7 @@ class FButton : public FWidget
|
|||
void drawMarginRight();
|
||||
void drawTopBottomBackground();
|
||||
void drawButtonTextLine (wchar_t[]);
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void updateStatusBar();
|
||||
void updateButtonColor();
|
||||
void processClick();
|
||||
|
|
|
@ -87,10 +87,10 @@ class FButtonGroup : public FScrollView
|
|||
FString& getText();
|
||||
|
||||
// Mutator
|
||||
bool setEnable(bool);
|
||||
bool setEnable();
|
||||
bool unsetEnable();
|
||||
bool setDisable();
|
||||
virtual bool setEnable(bool);
|
||||
virtual bool setEnable();
|
||||
virtual bool unsetEnable();
|
||||
virtual bool setDisable();
|
||||
void setText (const FString&);
|
||||
|
||||
// Inquiries
|
||||
|
@ -99,16 +99,16 @@ class FButtonGroup : public FScrollView
|
|||
bool hasCheckedButton() const;
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
void insert (FToggleButton*);
|
||||
void remove (FToggleButton*);
|
||||
void checkScrollSize (FToggleButton*);
|
||||
void checkScrollSize (const FRect&);
|
||||
|
||||
// Event handlers
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_buttonToggled (FWidget*, data_ptr);
|
||||
|
|
|
@ -79,7 +79,7 @@ enum events
|
|||
Timer_Event // timer event occur
|
||||
};
|
||||
|
||||
// Properties of a widget
|
||||
// Properties of a widget ⚑
|
||||
enum widget_flags
|
||||
{
|
||||
shadow = 0x00000001,
|
||||
|
@ -1039,6 +1039,21 @@ enum sides
|
|||
left = 3
|
||||
};
|
||||
|
||||
enum sorting_type
|
||||
{
|
||||
by_name,
|
||||
by_number,
|
||||
user_defined,
|
||||
unknown
|
||||
};
|
||||
|
||||
enum sorting_order
|
||||
{
|
||||
ascending,
|
||||
descending,
|
||||
unsorted
|
||||
};
|
||||
|
||||
enum brackets_type
|
||||
{
|
||||
NoBrackets = 0,
|
||||
|
|
|
@ -91,7 +91,7 @@ class FCheckBox : public FToggleButton
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawCheckButton();
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
|
|
@ -104,7 +104,7 @@ class FDialog : public FWindow
|
|||
bool setModal (bool);
|
||||
bool setModal();
|
||||
bool unsetModal();
|
||||
bool setResizeable (bool);
|
||||
virtual bool setResizeable (bool);
|
||||
bool setScrollable (bool);
|
||||
bool setScrollable();
|
||||
bool unsetScrollable();
|
||||
|
@ -115,16 +115,16 @@ class FDialog : public FWindow
|
|||
bool isScrollable();
|
||||
|
||||
// Methods
|
||||
void show();
|
||||
void hide();
|
||||
virtual void show();
|
||||
virtual void hide();
|
||||
int exec();
|
||||
void setPos (int, int, bool = true);
|
||||
void move (int, int);
|
||||
virtual void setPos (int, int, bool = true);
|
||||
virtual void move (int, int);
|
||||
bool moveUp (int);
|
||||
bool moveDown (int);
|
||||
bool moveLeft (int);
|
||||
bool moveRight (int);
|
||||
void setSize (int, int, bool = true);
|
||||
virtual void setSize (int, int, bool = true);
|
||||
bool reduceHeight (int);
|
||||
bool expandHeight (int);
|
||||
bool reduceWidth (int);
|
||||
|
@ -132,16 +132,16 @@ class FDialog : public FWindow
|
|||
void activateDialog();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onMouseDoubleClick (FMouseEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
void onWindowActive (FEvent*);
|
||||
void onWindowInactive (FEvent*);
|
||||
void onWindowRaised (FEvent*);
|
||||
void onWindowLowered (FEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onMouseDoubleClick (FMouseEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
virtual void onWindowActive (FEvent*);
|
||||
virtual void onWindowInactive (FEvent*);
|
||||
virtual void onWindowRaised (FEvent*);
|
||||
virtual void onWindowLowered (FEvent*);
|
||||
|
||||
protected:
|
||||
// Methods
|
||||
|
@ -207,6 +207,7 @@ class FDialog : public FWindow
|
|||
void moveSizeKey (FKeyEvent*);
|
||||
void raiseActivateDialog();
|
||||
void lowerActivateDialog();
|
||||
bool isLowerRightResizeCorner (mouseStates&);
|
||||
void resizeMouseDown (mouseStates&);
|
||||
void resizeMouseUpMove (mouseStates&, bool = false);
|
||||
void cancelMouseResize();
|
||||
|
|
|
@ -109,7 +109,7 @@ class FFileDialog : public FDialog
|
|||
, DialogType = FFileDialog::Open
|
||||
, FWidget* = 0 );
|
||||
// Destructor
|
||||
~FFileDialog();
|
||||
virtual ~FFileDialog();
|
||||
|
||||
// Assignment operator (=)
|
||||
FFileDialog& operator = (const FFileDialog&);
|
||||
|
@ -129,7 +129,7 @@ class FFileDialog : public FDialog
|
|||
bool unsetShowHiddenFiles();
|
||||
|
||||
// Event handler
|
||||
void onKeyPress (FKeyEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
|
||||
// Methods
|
||||
static const FString fileOpenChooser ( FWidget*
|
||||
|
@ -141,7 +141,7 @@ class FFileDialog : public FDialog
|
|||
|
||||
protected:
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
private:
|
||||
// Typedef
|
||||
|
@ -163,10 +163,9 @@ class FFileDialog : public FDialog
|
|||
|
||||
// Method
|
||||
void init();
|
||||
void allocation (int, int);
|
||||
void deallocation();
|
||||
void widgetSettings (int, int);
|
||||
void initCallbacks();
|
||||
inline bool pattern_match (const char* const, char[]);
|
||||
bool pattern_match (const char* const, char[]);
|
||||
void clear();
|
||||
int numOfDirs();
|
||||
void sortDir();
|
||||
|
@ -191,11 +190,11 @@ class FFileDialog : public FDialog
|
|||
dirEntries dir_entries;
|
||||
FString directory;
|
||||
FString filter_pattern;
|
||||
FListBox* filebrowser;
|
||||
FLineEdit* filename;
|
||||
FCheckBox* hidden;
|
||||
FButton* cancel;
|
||||
FButton* open;
|
||||
FLineEdit filename;
|
||||
FListBox filebrowser;
|
||||
FCheckBox hidden;
|
||||
FButton cancel;
|
||||
FButton open;
|
||||
DialogType dlg_type;
|
||||
bool show_hidden;
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ class FKeyboard
|
|||
FKeyboardCommand escape_key_cmd;
|
||||
|
||||
static timeval time_keypressed;
|
||||
fc::fkeymap* termcap_map;
|
||||
fc::fkeymap* key_map;
|
||||
|
||||
#if defined(__linux__)
|
||||
#undef linux
|
||||
|
|
|
@ -107,7 +107,7 @@ class FLabel : public FWidget
|
|||
bool setReverseMode(bool);
|
||||
bool setReverseMode();
|
||||
bool unsetReverseMode();
|
||||
bool setEnable (bool);
|
||||
virtual bool setEnable (bool);
|
||||
void setNumber (uLong);
|
||||
void setNumber (long);
|
||||
void setNumber (float, int = FLT_DIG);
|
||||
|
@ -120,12 +120,12 @@ class FLabel : public FWidget
|
|||
bool hasReverseMode();
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
void clear();
|
||||
|
||||
// Event handlers
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_accel_widget_destroyed (FWidget*, data_ptr);
|
||||
|
@ -143,7 +143,7 @@ class FLabel : public FWidget
|
|||
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
||||
void setHotkeyAccelerator();
|
||||
int getAlignOffset (int);
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawMultiLine();
|
||||
void drawSingleLine();
|
||||
void printLine (wchar_t[], uInt, int, int = 0);
|
||||
|
|
|
@ -104,13 +104,13 @@ class FLineEdit : public FWidget
|
|||
void setText (const FString&);
|
||||
void setLabelText (const FString&);
|
||||
void setLabelOrientation(const label_o);
|
||||
bool setEnable(bool);
|
||||
bool setEnable();
|
||||
bool unsetEnable();
|
||||
bool setDisable();
|
||||
bool setFocus(bool);
|
||||
bool setFocus();
|
||||
bool unsetFocus();
|
||||
virtual bool setEnable(bool);
|
||||
virtual bool setEnable();
|
||||
virtual bool unsetEnable();
|
||||
virtual bool setDisable();
|
||||
virtual bool setFocus(bool);
|
||||
virtual bool setFocus();
|
||||
virtual bool unsetFocus();
|
||||
bool setShadow(bool);
|
||||
bool setShadow();
|
||||
bool unsetShadow();
|
||||
|
@ -119,23 +119,23 @@ class FLineEdit : public FWidget
|
|||
bool hasShadow();
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
void clear();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onTimer (FTimerEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
void onHide (FHideEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onTimer (FTimerEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
virtual void onHide (FHideEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
protected:
|
||||
void adjustLabel();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
private:
|
||||
// Enumeration
|
||||
|
@ -155,7 +155,7 @@ class FLineEdit : public FWidget
|
|||
// Methods
|
||||
void init();
|
||||
bool hasHotkey();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawInputField();
|
||||
void keyLeft();
|
||||
void keyRight();
|
||||
|
|
|
@ -153,7 +153,7 @@ class FListBox : public FWidget
|
|||
FListBox (Container, LazyConverter, FWidget* = 0);
|
||||
|
||||
// Destructor
|
||||
~FListBox();
|
||||
virtual ~FListBox();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
@ -173,14 +173,14 @@ class FListBox : public FWidget
|
|||
void showInsideBrackets (int, fc::brackets_type);
|
||||
void showNoBrackets (int);
|
||||
void showNoBrackets (listBoxItems::iterator);
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
void setMultiSelection (bool);
|
||||
void setMultiSelection ();
|
||||
void unsetMultiSelection ();
|
||||
bool setDisable();
|
||||
bool setFocus (bool);
|
||||
bool setFocus();
|
||||
bool unsetFocus();
|
||||
virtual bool setDisable();
|
||||
virtual bool setFocus (bool);
|
||||
virtual bool setFocus();
|
||||
virtual bool unsetFocus();
|
||||
void setText (const FString&);
|
||||
|
||||
// Inquiries
|
||||
|
@ -191,7 +191,7 @@ class FListBox : public FWidget
|
|||
bool hasBrackets (listBoxItems::iterator) const;
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
template <class Iterator, class InsertConverter>
|
||||
void insert (Iterator, Iterator, InsertConverter);
|
||||
template <class Container, class LazyConverter>
|
||||
|
@ -209,21 +209,20 @@ class FListBox : public FWidget
|
|||
void clear();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onMouseDoubleClick (FMouseEvent*);
|
||||
void onWheel (FWheelEvent*);
|
||||
void onTimer (FTimerEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onMouseDoubleClick (FMouseEvent*);
|
||||
virtual void onWheel (FWheelEvent*);
|
||||
virtual void onTimer (FTimerEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
protected:
|
||||
// Methods
|
||||
void adjustYOffset();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
private:
|
||||
// Enumeration
|
||||
|
@ -245,7 +244,7 @@ class FListBox : public FWidget
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawLabel();
|
||||
void drawList();
|
||||
void drawListLine (int, listBoxItems::iterator, bool);
|
||||
|
|
|
@ -84,7 +84,7 @@ class FListViewItem : public FObject
|
|||
, FObjectIterator );
|
||||
|
||||
// Destructor
|
||||
~FListViewItem();
|
||||
virtual ~FListViewItem();
|
||||
|
||||
// Assignment operator (=)
|
||||
FListViewItem& operator = (const FListViewItem&);
|
||||
|
@ -92,12 +92,14 @@ class FListViewItem : public FObject
|
|||
// Accessors
|
||||
const char* getClassName() const;
|
||||
uInt getColumnCount() const;
|
||||
int getSortColumn() const;
|
||||
FString getText (int) const;
|
||||
FWidget::data_ptr getData() const;
|
||||
uInt getDepth() const;
|
||||
|
||||
// Mutator
|
||||
void setText (int, const FString&);
|
||||
|
||||
void setData (FWidget::data_ptr);
|
||||
|
||||
// Inquiry
|
||||
bool isExpand() const;
|
||||
|
@ -113,6 +115,8 @@ class FListViewItem : public FObject
|
|||
bool isExpandable() const;
|
||||
|
||||
// Methods
|
||||
template<typename Compare>
|
||||
void sort (Compare);
|
||||
FObjectIterator appendItem (FListViewItem*);
|
||||
void replaceControlCodes();
|
||||
int getVisibleLines();
|
||||
|
@ -121,6 +125,7 @@ class FListViewItem : public FObject
|
|||
// Data Members
|
||||
FStringList column_list;
|
||||
FWidget::data_ptr data_pointer;
|
||||
FObjectIterator root;
|
||||
int visible_lines;
|
||||
bool expandable;
|
||||
bool is_expand;
|
||||
|
@ -141,6 +146,14 @@ inline const char* FListViewItem::getClassName() const
|
|||
inline uInt FListViewItem::getColumnCount() const
|
||||
{ return uInt(column_list.size()); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FWidget::data_ptr FListViewItem::getData() const
|
||||
{ return data_pointer; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FListViewItem::setData (FWidget::data_ptr data)
|
||||
{ data_pointer = data; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FListViewItem::isExpand() const
|
||||
{ return is_expand; }
|
||||
|
@ -166,12 +179,9 @@ class FListViewIterator
|
|||
typedef std::stack<FObjectIterator> FObjectIteratorStack;
|
||||
|
||||
// Constructor
|
||||
FListViewIterator ();
|
||||
explicit FListViewIterator ();
|
||||
FListViewIterator (FObjectIterator);
|
||||
|
||||
// Destructor
|
||||
~FListViewIterator();
|
||||
|
||||
// Overloaded operators
|
||||
FListViewIterator& operator ++ (); // prefix
|
||||
FListViewIterator operator ++ (int); // postfix
|
||||
|
@ -246,19 +256,30 @@ class FListView : public FWidget
|
|||
explicit FListView (FWidget* = 0);
|
||||
|
||||
// Destructor
|
||||
~FListView();
|
||||
virtual ~FListView();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
uInt getCount();
|
||||
fc::text_alignment getColumnAlignment (int) const;
|
||||
FString getColumnText (int) const;
|
||||
fc::sorting_type getColumnSortType (int) const;
|
||||
fc::sorting_order getSortOrder() const;
|
||||
int getSortColumn() const;
|
||||
FListViewItem* getCurrentItem();
|
||||
|
||||
// Mutators
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
void setColumnAlignment (int, fc::text_alignment);
|
||||
void setColumnText (int, const FString&);
|
||||
void setColumnSortType (int,fc::sorting_type \
|
||||
= fc::by_name);
|
||||
void setColumnSort (int, fc::sorting_order \
|
||||
= fc::ascending);
|
||||
template<typename Compare>
|
||||
void setUserAscendingCompare (Compare);
|
||||
template<typename Compare>
|
||||
void setUserDescendingCompare (Compare);
|
||||
bool setTreeView (bool);
|
||||
bool setTreeView();
|
||||
bool unsetTreeView();
|
||||
|
@ -283,17 +304,18 @@ class FListView : public FWidget
|
|||
, FObjectIterator );
|
||||
FObjectIterator beginOfList();
|
||||
FObjectIterator endOfList();
|
||||
virtual void sort();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onMouseDoubleClick (FMouseEvent*);
|
||||
void onWheel (FWheelEvent*);
|
||||
void onTimer (FTimerEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onMouseDoubleClick (FMouseEvent*);
|
||||
virtual void onWheel (FWheelEvent*);
|
||||
virtual void onTimer (FTimerEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
// Data Members
|
||||
static FObjectIterator null_iter;
|
||||
|
@ -301,12 +323,13 @@ class FListView : public FWidget
|
|||
protected:
|
||||
// Methods
|
||||
void adjustViewport();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
private:
|
||||
// Typedef
|
||||
struct Header; // forward declaration
|
||||
typedef std::vector<Header> headerItems;
|
||||
typedef std::vector<fc::sorting_type> sortTypes;
|
||||
|
||||
// Constants
|
||||
static const int USE_MAX_SIZE = -1;
|
||||
|
@ -319,8 +342,10 @@ class FListView : public FWidget
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
template<typename Compare>
|
||||
void sort (Compare);
|
||||
uInt getAlignOffset (fc::text_alignment, uInt, uInt);
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawColumnLabels();
|
||||
void drawList();
|
||||
void drawListLine (const FListViewItem*, bool, bool);
|
||||
|
@ -330,6 +355,7 @@ class FListView : public FWidget
|
|||
void drawColumnEllipsis ( headerItems::const_iterator&
|
||||
, const FString& );
|
||||
void updateDrawing (bool, bool);
|
||||
int determineLineWidth (FListViewItem* item);
|
||||
void recalculateHorizontalBar (int);
|
||||
void recalculateVerticalBar (int);
|
||||
void wheelUp (int);
|
||||
|
@ -383,6 +409,11 @@ class FListView : public FWidget
|
|||
int xoffset;
|
||||
int nf_offset;
|
||||
int max_line_width;
|
||||
int sort_column;
|
||||
sortTypes sort_type;
|
||||
fc::sorting_order sort_order;
|
||||
bool (*user_defined_ascending) (const FObject*, const FObject*);
|
||||
bool (*user_defined_descending) (const FObject*, const FObject*);
|
||||
|
||||
// Friend class
|
||||
friend class FListViewItem;
|
||||
|
@ -399,16 +430,13 @@ class FListView : public FWidget
|
|||
struct FListView::Header
|
||||
{
|
||||
public:
|
||||
Header()
|
||||
explicit Header()
|
||||
: name()
|
||||
, width (0)
|
||||
, fixed_width (false)
|
||||
, alignment (fc::alignLeft)
|
||||
{ }
|
||||
|
||||
~Header()
|
||||
{ }
|
||||
|
||||
FString name;
|
||||
int width;
|
||||
bool fixed_width;
|
||||
|
@ -422,13 +450,31 @@ struct FListView::Header
|
|||
inline const char* FListView::getClassName() const
|
||||
{ return "FListView"; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline fc::sorting_order FListView::getSortOrder() const
|
||||
{ return sort_order; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FListView::getSortColumn() const
|
||||
{ return sort_column; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FListViewItem* FListView::getCurrentItem()
|
||||
{ return static_cast<FListViewItem*>(*current_iter); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
template<typename Compare>
|
||||
inline void FListView::setUserAscendingCompare (Compare cmp)
|
||||
{ user_defined_ascending = cmp; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
template<typename Compare>
|
||||
inline void FListView::setUserDescendingCompare (Compare cmp)
|
||||
{ user_defined_descending = cmp; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FListView::setTreeView (bool on)
|
||||
{ return tree_view = ( on ) ? true : false; }
|
||||
{ return tree_view = on; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FListView::setTreeView()
|
||||
|
|
|
@ -87,19 +87,19 @@ class FMenu : public FWindow, public FMenuList
|
|||
// Accessors
|
||||
virtual const char* getClassName() const;
|
||||
FString getText() const;
|
||||
FMenuItem* getItem() const;
|
||||
FMenuItem* getItem();
|
||||
|
||||
// Mutators
|
||||
bool setEnable(bool);
|
||||
bool setEnable();
|
||||
bool unsetEnable();
|
||||
bool setDisable();
|
||||
virtual bool setEnable(bool);
|
||||
virtual bool setEnable();
|
||||
virtual bool unsetEnable();
|
||||
virtual bool setDisable();
|
||||
void setSelected();
|
||||
void unsetSelected();
|
||||
bool setMenuWidget (bool);
|
||||
bool setMenuWidget();
|
||||
bool unsetMenuWidget();
|
||||
void setStatusbarMessage (const FString&);
|
||||
virtual void setStatusbarMessage (const FString&);
|
||||
void setMenu (FMenu*);
|
||||
void setText (const FString&);
|
||||
|
||||
|
@ -110,15 +110,15 @@ class FMenu : public FWindow, public FMenuList
|
|||
bool hasMenu() const;
|
||||
|
||||
// Methods
|
||||
void show();
|
||||
void hide();
|
||||
virtual void show();
|
||||
virtual void hide();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_menuitem_toggled (FWidget*, data_ptr);
|
||||
|
@ -200,7 +200,7 @@ class FMenu : public FWindow, public FMenuList
|
|||
void keypressMenuBar (FKeyEvent*);
|
||||
bool hotkeyMenu (FKeyEvent*);
|
||||
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawItems();
|
||||
void drawSeparator (int);
|
||||
void drawMenuLine (FMenuItem*, int);
|
||||
|
@ -228,7 +228,7 @@ class FMenu : public FWindow, public FMenuList
|
|||
friend class FRadioMenuItem;
|
||||
|
||||
// Data Members
|
||||
FMenuItem* item;
|
||||
FMenuItem item;
|
||||
FWidget* super_menu;
|
||||
FMenu* opened_sub_menu;
|
||||
FMenu* shown_sub_menu;
|
||||
|
@ -247,35 +247,35 @@ inline const char* FMenu::getClassName() const
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline FString FMenu::getText() const
|
||||
{ return item->getText(); }
|
||||
{ return item.getText(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FMenuItem* FMenu::getItem() const
|
||||
{ return item; }
|
||||
inline FMenuItem* FMenu::getItem()
|
||||
{ return &item; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::setEnable(bool on)
|
||||
{ return item->setEnable(on); }
|
||||
{ return item.setEnable(on); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::setEnable()
|
||||
{ return item->setEnable(); }
|
||||
{ return item.setEnable(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::unsetEnable()
|
||||
{ return item->unsetEnable(); }
|
||||
{ return item.unsetEnable(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::setDisable()
|
||||
{ return item->setDisable(); }
|
||||
{ return item.setDisable(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::setSelected()
|
||||
{ item->setSelected(); }
|
||||
{ item.setSelected(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::unsetSelected()
|
||||
{ item->unsetSelected(); }
|
||||
{ item.unsetSelected(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::setMenuWidget()
|
||||
|
@ -287,27 +287,27 @@ inline bool FMenu::unsetMenuWidget()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::setMenu (FMenu* m)
|
||||
{ item->setMenu(m); }
|
||||
{ item.setMenu(m); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::setText (const FString& txt)
|
||||
{ item->setText(txt); }
|
||||
{ item.setText(txt); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::isEnabled() const
|
||||
{ return item->isEnabled(); }
|
||||
{ return item.isEnabled(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::isSelected() const
|
||||
{ return item->isSelected(); }
|
||||
{ return item.isSelected(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::hasHotkey() const
|
||||
{ return item->hasHotkey(); }
|
||||
{ return item.hasHotkey(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FMenu::hasMenu() const
|
||||
{ return item->hasMenu(); }
|
||||
{ return item.hasMenu(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FWidget* FMenu::getSuperMenu() const
|
||||
|
@ -327,7 +327,7 @@ inline FMenu* FMenu::superMenuAt (const FPoint& p)
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FMenu::onAccel (FAccelEvent* ev)
|
||||
{ item->onAccel(ev); }
|
||||
{ item.onAccel(ev); }
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
|
|
|
@ -86,16 +86,16 @@ class FMenuBar : public FWindow, public FMenuList
|
|||
virtual const char* getClassName() const;
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
void resetMenu();
|
||||
void adjustSize();
|
||||
virtual void hide();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
|
||||
// Callback methods
|
||||
void cb_item_deactivated (FWidget*, data_ptr);
|
||||
|
@ -127,7 +127,7 @@ class FMenuBar : public FWindow, public FMenuList
|
|||
bool selectPrevItem();
|
||||
bool hotkeyMenu (FKeyEvent*&);
|
||||
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawItems();
|
||||
void drawItem (FMenuItem*, int&);
|
||||
void setLineAttributes (FMenuItem*);
|
||||
|
|
|
@ -97,10 +97,10 @@ class FMenuItem : public FWidget
|
|||
FString getText() const;
|
||||
|
||||
// Mutators
|
||||
bool setEnable (bool);
|
||||
bool setFocus (bool);
|
||||
bool setFocus();
|
||||
bool unsetFocus();
|
||||
virtual bool setEnable (bool);
|
||||
virtual bool setFocus (bool);
|
||||
virtual bool setFocus();
|
||||
virtual bool unsetFocus();
|
||||
void setSelected();
|
||||
void unsetSelected();
|
||||
void setSeparator();
|
||||
|
@ -118,19 +118,19 @@ class FMenuItem : public FWidget
|
|||
bool hasMenu() const;
|
||||
|
||||
// Methods
|
||||
void addAccelerator (int, FWidget*);
|
||||
void delAccelerator (FWidget*);
|
||||
virtual void addAccelerator (int, FWidget*);
|
||||
virtual void delAccelerator (FWidget*);
|
||||
void openMenu();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDoubleClick (FMouseEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDoubleClick (FMouseEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
protected:
|
||||
// Accessor
|
||||
|
|
|
@ -101,7 +101,7 @@ class FMessageBox : public FDialog
|
|||
, int, int, int
|
||||
, FWidget* = 0 );
|
||||
// Destructor
|
||||
~FMessageBox();
|
||||
virtual ~FMessageBox();
|
||||
|
||||
// Assignment operator (=)
|
||||
FMessageBox& operator = (const FMessageBox&);
|
||||
|
@ -142,7 +142,7 @@ class FMessageBox : public FDialog
|
|||
, int = 0 );
|
||||
protected:
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Callback method
|
||||
void cb_processClick (FWidget*, data_ptr);
|
||||
|
|
|
@ -74,6 +74,7 @@ class FObject
|
|||
virtual const char* getClassName() const;
|
||||
FObject* getParent() const;
|
||||
FObject* getChild (int) const;
|
||||
FObjectList& getChildren();
|
||||
const FObjectList& getChildren() const;
|
||||
int numOfChildren() const;
|
||||
FObjectIterator begin();
|
||||
|
@ -115,12 +116,17 @@ class FObject
|
|||
// Typedef
|
||||
typedef std::vector<timer_data> TimerList;
|
||||
|
||||
// Accessor
|
||||
TimerList* getTimerList() const;
|
||||
|
||||
// Method
|
||||
uInt processTimerEvent();
|
||||
|
||||
// Event handler
|
||||
virtual bool event (FEvent*);
|
||||
virtual void onTimer (FTimerEvent*);
|
||||
|
||||
// Data Members
|
||||
static TimerList* timer_list;
|
||||
// Data Member
|
||||
bool widget_object;
|
||||
|
||||
private:
|
||||
|
@ -130,11 +136,15 @@ class FObject
|
|||
// Disable assignment operator (=)
|
||||
FObject& operator = (const FObject&);
|
||||
|
||||
// Method
|
||||
virtual void performTimerAction (const FObject*, const FEvent*);
|
||||
|
||||
// Data Members
|
||||
FObject* parent_obj;
|
||||
FObjectList children_list;
|
||||
bool has_parent;
|
||||
static bool timer_modify_lock;
|
||||
static TimerList* timer_list;
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
@ -147,6 +157,10 @@ inline const char* FObject::getClassName() const
|
|||
inline FObject* FObject::getParent() const
|
||||
{ return parent_obj; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FObject::FObjectList& FObject::getChildren()
|
||||
{ return children_list; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const FObject::FObjectList& FObject::getChildren() const
|
||||
{ return children_list; }
|
||||
|
@ -195,7 +209,9 @@ inline bool FObject::isInstanceOf (const char classname[]) const
|
|||
inline bool FObject::isTimerInUpdating() const
|
||||
{ return timer_modify_lock; }
|
||||
|
||||
} // namespace finalcut
|
||||
//----------------------------------------------------------------------
|
||||
inline FObject::TimerList* FObject::getTimerList() const
|
||||
{ return timer_list; }
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -252,4 +268,6 @@ static inline bool operator < (const timeval& t1, const timeval& t2)
|
|||
|| (t1.tv_sec == t2.tv_sec && t1.tv_usec < t2.tv_usec);
|
||||
}
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
#endif // FOBJECT_H
|
||||
|
|
|
@ -159,7 +159,7 @@ class FOptiAttr
|
|||
explicit FOptiAttr();
|
||||
|
||||
// Destructor
|
||||
~FOptiAttr();
|
||||
virtual ~FOptiAttr();
|
||||
|
||||
// Friend operator functions
|
||||
friend bool operator == (const charData&, const charData&);
|
||||
|
|
|
@ -110,7 +110,7 @@ class FOptiMove
|
|||
explicit FOptiMove (int = 0);
|
||||
|
||||
// Destructor
|
||||
~FOptiMove();
|
||||
virtual ~FOptiMove();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
|
|
@ -82,7 +82,7 @@ class FProgressbar : public FWidget
|
|||
|
||||
// Mutators
|
||||
void setPercentage (int);
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
bool setShadow (bool);
|
||||
bool setShadow();
|
||||
bool unsetShadow();
|
||||
|
@ -91,7 +91,7 @@ class FProgressbar : public FWidget
|
|||
bool hasShadow();
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
void reset();
|
||||
|
||||
private:
|
||||
|
|
|
@ -91,7 +91,7 @@ class FRadioButton : public FToggleButton
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawRadioButton();
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
|
|
@ -103,22 +103,22 @@ class FScrollbar : public FWidget
|
|||
void setSteps (double);
|
||||
void setPageSize (int, int);
|
||||
void setOrientation (int);
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
|
||||
// Methods
|
||||
void resize();
|
||||
void redraw();
|
||||
virtual void resize();
|
||||
virtual void redraw();
|
||||
void calculateSliderValues();
|
||||
void drawVerticalBar();
|
||||
void drawHorizontalBar();
|
||||
void drawBar();
|
||||
|
||||
// Event handlers
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onWheel (FWheelEvent*);
|
||||
void onTimer (FTimerEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onWheel (FWheelEvent*);
|
||||
virtual void onTimer (FTimerEvent*);
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -129,7 +129,7 @@ class FScrollbar : public FWidget
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawButtons();
|
||||
sType getClickedScrollType (int, int);
|
||||
sType getVerticalClickedScrollType (int);
|
||||
|
|
|
@ -100,7 +100,7 @@ class FScrollView : public FWidget
|
|||
virtual void setWidth (int, bool = true);
|
||||
virtual void setHeight (int, bool = true);
|
||||
virtual void setSize (int, int, bool = true);
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
void setCursorPos (int, int);
|
||||
void setPrintPos (int, int);
|
||||
bool setViewportPrint (bool);
|
||||
|
@ -126,11 +126,11 @@ class FScrollView : public FWidget
|
|||
virtual void draw();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onWheel (FWheelEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onChildFocusIn (FFocusEvent*);
|
||||
void onChildFocusOut (FFocusEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onWheel (FWheelEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onChildFocusIn (FFocusEvent*);
|
||||
virtual void onChildFocusOut (FFocusEvent*);
|
||||
|
||||
protected:
|
||||
// Using-declaration
|
||||
|
@ -140,7 +140,7 @@ class FScrollView : public FWidget
|
|||
term_area* getPrintArea();
|
||||
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
void copy2area();
|
||||
|
||||
private:
|
||||
|
|
|
@ -92,6 +92,8 @@ class FStatusKey : public FWidget
|
|||
virtual FString getText() const;
|
||||
|
||||
// Mutators
|
||||
void setKey (int);
|
||||
void setText (const FString&);
|
||||
void setActive();
|
||||
void unsetActive();
|
||||
bool setMouseFocus(bool);
|
||||
|
@ -103,12 +105,7 @@ class FStatusKey : public FWidget
|
|||
bool hasMouseFocus() const;
|
||||
|
||||
// Event handler
|
||||
void onAccel (FAccelEvent*);
|
||||
|
||||
protected:
|
||||
// Mutators
|
||||
void setKey (int);
|
||||
void setText (const FString&);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -149,6 +146,14 @@ inline int FStatusKey::getKey() const
|
|||
inline FString FStatusKey::getText() const
|
||||
{ return text; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FStatusKey::setKey (int k)
|
||||
{ key = k; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FStatusKey::setText (const FString& txt)
|
||||
{ text = txt; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FStatusKey::unsetActive()
|
||||
{ active = false; }
|
||||
|
@ -169,14 +174,6 @@ inline bool FStatusKey::isActivated() const
|
|||
inline bool FStatusKey::hasMouseFocus() const
|
||||
{ return mouse_focus; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FStatusKey::setKey (int k)
|
||||
{ key = k; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FStatusKey::setText (const FString& txt)
|
||||
{ text = txt; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FStatusBar* FStatusKey::getConnectedStatusbar() const
|
||||
{ return bar; }
|
||||
|
@ -218,19 +215,19 @@ class FStatusBar : public FWindow
|
|||
bool hasActivatedKey();
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
void drawMessage();
|
||||
void clearMessage();
|
||||
void insert (FStatusKey*);
|
||||
void remove (FStatusKey*);
|
||||
void remove (int);
|
||||
void clear();
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
// Event handlers
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
|
||||
// Callback method
|
||||
void cb_statuskey_activated (FWidget*, data_ptr);
|
||||
|
@ -247,7 +244,7 @@ class FStatusBar : public FWindow
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawKeys();
|
||||
void drawKey (keyList::const_iterator);
|
||||
void drawActiveKey (keyList::const_iterator);
|
||||
|
|
|
@ -382,6 +382,7 @@ class FString
|
|||
// Methods
|
||||
void initLength (uInt);
|
||||
void _assign (const wchar_t[]);
|
||||
void _insert (uInt, const wchar_t[]);
|
||||
void _insert (uInt, uInt, const wchar_t[]);
|
||||
void _remove (uInt, uInt);
|
||||
char* wc_to_c_str (const wchar_t[]) const;
|
||||
|
|
|
@ -83,12 +83,12 @@ class FSwitch : public FToggleButton
|
|||
const char* getClassName() const;
|
||||
|
||||
// Mutator
|
||||
void setText (const FString&);
|
||||
virtual void setText (const FString&);
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -98,7 +98,7 @@ class FSwitch : public FToggleButton
|
|||
FSwitch& operator = (const FSwitch&);
|
||||
|
||||
// Methods
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawCheckButton();
|
||||
void drawChecked();
|
||||
void drawUnchecked();
|
||||
|
|
|
@ -139,7 +139,6 @@
|
|||
#include "final/fkey_map.h"
|
||||
#include "final/fkeyboard.h"
|
||||
#include "final/fmouse.h"
|
||||
#include "final/fobject.h"
|
||||
#include "final/foptiattr.h"
|
||||
#include "final/foptimove.h"
|
||||
#include "final/fpoint.h"
|
||||
|
@ -147,6 +146,7 @@
|
|||
#include "final/fstring.h"
|
||||
#include "final/ftermcap.h"
|
||||
#include "final/ftermcapquirks.h"
|
||||
#include "final/ftermdata.h"
|
||||
#include "final/ftermdetection.h"
|
||||
|
||||
#if defined(__linux__)
|
||||
|
@ -210,10 +210,8 @@ class FTerm
|
|||
#endif // DEBUG
|
||||
|
||||
// Inquiries
|
||||
static bool isCursorHidden();
|
||||
static bool isNormal (charData*&);
|
||||
static bool isRaw();
|
||||
static bool hasPCcharset();
|
||||
static bool hasUTF8();
|
||||
static bool hasVT100();
|
||||
static bool hasASCII();
|
||||
|
@ -238,17 +236,14 @@ class FTerm
|
|||
static bool isScreenTerm();
|
||||
static bool isTmuxTerm();
|
||||
static bool isNewFont();
|
||||
static bool isUTF8();
|
||||
|
||||
// Mutators
|
||||
static void setTermType (const char[]);
|
||||
static void setInsertCursor (bool on);
|
||||
static void setInsertCursor();
|
||||
static void unsetInsertCursor();
|
||||
static bool setCursorOptimisation (bool);
|
||||
static void redefineDefaultColors (bool);
|
||||
static void setDblclickInterval (const long);
|
||||
static void disableAltScreen();
|
||||
static bool setUTF8 (bool);
|
||||
static bool setUTF8();
|
||||
static bool unsetUTF8();
|
||||
|
@ -304,10 +299,6 @@ class FTerm
|
|||
static int putchar_ASCII (int);
|
||||
static int putchar_UTF8 (int);
|
||||
|
||||
#if DEBUG
|
||||
static int framebuffer_bpp;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
// Inquiries
|
||||
static bool hasChangedTermSize();
|
||||
|
@ -323,7 +314,7 @@ class FTerm
|
|||
static char* changeAttribute ( charData*&
|
||||
, charData*& );
|
||||
static void changeTermSizeFinished();
|
||||
static void exitWithMessage (std::string)
|
||||
static void exitWithMessage (const FString&)
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
__attribute__((noreturn))
|
||||
#endif
|
||||
|
@ -374,16 +365,14 @@ class FTerm
|
|||
} init_values;
|
||||
|
||||
private:
|
||||
// Typedefs
|
||||
typedef FTermcap::tcap_map termcap_map;
|
||||
|
||||
// Disable copy constructor
|
||||
FTerm (const FTerm&);
|
||||
// Disable assignment operator (=)
|
||||
FTerm& operator = (const FTerm&);
|
||||
|
||||
// Methods
|
||||
static void init_global_values();
|
||||
static void init_global_values (bool);
|
||||
static void init_terminal_device_path();
|
||||
static void oscPrefix();
|
||||
static void oscPostfix();
|
||||
static void init_alt_charset();
|
||||
|
@ -398,6 +387,7 @@ class FTerm
|
|||
static void init_termcap_booleans();
|
||||
static void init_termcap_numerics();
|
||||
static void init_termcap_strings (char*&);
|
||||
static void init_termcap_keys_vt100 (char*&);
|
||||
static void init_termcap_keys (char*&);
|
||||
static void init_OptiMove();
|
||||
static void init_OptiAttr();
|
||||
|
@ -407,7 +397,7 @@ class FTerm
|
|||
static void init_encoding_set();
|
||||
static void init_term_encoding();
|
||||
static void init_individual_term_encoding();
|
||||
static bool init_force_vt100_encoding();
|
||||
static void init_force_vt100_encoding();
|
||||
static void init_utf8_without_alt_charset();
|
||||
static void init_tab_quirks();
|
||||
static void init_captureFontAndTitle();
|
||||
|
@ -421,8 +411,9 @@ class FTerm
|
|||
static void useNormalScreenBuffer();
|
||||
void allocationValues();
|
||||
void deallocationValues();
|
||||
void init();
|
||||
void init (bool);
|
||||
void initOSspecifics();
|
||||
void initTermspecifics();
|
||||
void finish();
|
||||
void finishOSspecifics1();
|
||||
void finish_encoding();
|
||||
|
@ -432,49 +423,14 @@ class FTerm
|
|||
static void signal_handler (int);
|
||||
|
||||
// Data Members
|
||||
static std::map <uChar,uChar>* vt100_alt_char;
|
||||
static std::map <std::string,fc::encoding>* encoding_set;
|
||||
static FTermData* data;
|
||||
static FTermcap::tcap_map* tcap;
|
||||
static fc::encoding term_encoding;
|
||||
|
||||
static bool shadow_character;
|
||||
static bool half_block_character;
|
||||
static bool cursor_optimisation;
|
||||
static bool hidden_cursor;
|
||||
static bool use_alternate_screen;
|
||||
static bool pc_charset_console;
|
||||
static bool utf8_state;
|
||||
static bool utf8_console;
|
||||
static bool utf8_linux_terminal;
|
||||
static bool force_vt100;
|
||||
static bool vt100_console;
|
||||
static bool ascii_console;
|
||||
static bool NewFont;
|
||||
static bool VGAFont;
|
||||
static bool monochron;
|
||||
static char termtype[256];
|
||||
static char termfilename[256];
|
||||
static char exit_message[8192];
|
||||
static char* locale_name;
|
||||
static char* locale_xterm;
|
||||
static FRect* term; // current terminal geometry
|
||||
|
||||
static int fd_tty;
|
||||
static uInt baudrate;
|
||||
static bool resize_term;
|
||||
|
||||
static fc::linuxConsoleCursorStyle \
|
||||
linux_console_cursor_style;
|
||||
static struct console_font_op \
|
||||
screen_font;
|
||||
static struct unimapdesc \
|
||||
screen_unicode_map;
|
||||
|
||||
static FOptiMove* opti_move;
|
||||
static FOptiAttr* opti_attr;
|
||||
static FTermDetection* term_detection;
|
||||
static FTermXTerminal* xterm;
|
||||
static FKeyboard* keyboard;
|
||||
static FMouseControl* mouse;
|
||||
|
||||
#if defined(__linux__)
|
||||
#undef linux
|
||||
|
@ -488,10 +444,6 @@ class FTerm
|
|||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
static FTermOpenBSD* openbsd;
|
||||
#endif
|
||||
|
||||
static FMouseControl* mouse;
|
||||
static const FString* save_xterm_font;
|
||||
static const FString* save_xterm_title;
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
@ -511,15 +463,15 @@ inline FMouseControl* FTerm::getMouseControl()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FTerm::getTTYFileDescriptor()
|
||||
{ return fd_tty; }
|
||||
{ return data->getTTYFileDescriptor(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline char* FTerm::getTermType()
|
||||
{ return termtype; }
|
||||
{ return data->getTermType(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline char* FTerm::getTermFileName()
|
||||
{ return termfilename; }
|
||||
{ return data->getTermFileName(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FTerm::getTabstop()
|
||||
|
@ -552,32 +504,16 @@ inline const char* FTerm::getTermType_SecDA()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FTerm::getFramebufferBpp()
|
||||
{ return framebuffer_bpp; }
|
||||
{ return data->getFramebufferBpp(); }
|
||||
#endif // DEBUG
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::isCursorHidden()
|
||||
{ return hidden_cursor; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasPCcharset()
|
||||
{ return pc_charset_console; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasUTF8()
|
||||
{ return utf8_console; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasVT100()
|
||||
{ return vt100_console; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasASCII()
|
||||
{ return ascii_console; }
|
||||
{ return data->hasUTF8Console(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::isMonochron()
|
||||
{ return monochron; }
|
||||
{ return data->isMonochron(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::isXTerminal()
|
||||
|
@ -657,11 +593,7 @@ inline bool FTerm::isTmuxTerm()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::isNewFont()
|
||||
{ return NewFont; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::isUTF8()
|
||||
{ return utf8_state; }
|
||||
{ return data->isNewFont(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTerm::setInsertCursor()
|
||||
|
@ -671,14 +603,6 @@ inline void FTerm::setInsertCursor()
|
|||
inline void FTerm::unsetInsertCursor()
|
||||
{ setInsertCursor(false); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::setCursorOptimisation (bool on)
|
||||
{ return cursor_optimisation = ( on ) ? true : false; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTerm::disableAltScreen()
|
||||
{ use_alternate_screen = false; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::setUTF8()
|
||||
{ return setUTF8(true); }
|
||||
|
@ -689,19 +613,19 @@ inline bool FTerm::unsetUTF8()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasChangedTermSize()
|
||||
{ return resize_term; }
|
||||
{ return data->hasTermResized(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasShadowCharacter()
|
||||
{ return shadow_character; }
|
||||
{ return data->hasShadowCharacter(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasHalfBlockCharacter()
|
||||
{ return half_block_character; }
|
||||
{ return data->hasHalfBlockCharacter(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTerm::hasAlternateScreen()
|
||||
{ return use_alternate_screen; }
|
||||
{ return data->hasAlternateScreen(); }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FOptiMove* FTerm::getFOptiMove()
|
||||
|
@ -709,7 +633,7 @@ inline FOptiMove* FTerm::getFOptiMove()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTerm::changeTermSizeFinished()
|
||||
{ resize_term = false; }
|
||||
{ data->setTermResized(false); }
|
||||
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2016-2017 Markus Gans *
|
||||
* Copyright 2016-2018 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 *
|
||||
|
@ -61,12 +61,10 @@ class FTermcap
|
|||
tcap_map;
|
||||
|
||||
// Constructors
|
||||
FTermcap()
|
||||
{ }
|
||||
FTermcap();
|
||||
|
||||
// Destructor
|
||||
~FTermcap()
|
||||
{ }
|
||||
~FTermcap();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
@ -76,12 +74,6 @@ class FTermcap
|
|||
return tcap;
|
||||
}
|
||||
|
||||
// Mutator
|
||||
static void setTermcapMap (tcap_map* t)
|
||||
{
|
||||
tcap = t;
|
||||
}
|
||||
|
||||
// Data Members
|
||||
static bool background_color_erase;
|
||||
static bool automatic_left_margin;
|
||||
|
@ -95,16 +87,17 @@ class FTermcap
|
|||
static int attr_without_color;
|
||||
|
||||
private:
|
||||
// Data Members
|
||||
static tcap_map* tcap;
|
||||
// Data Member
|
||||
static tcap_map tcap[];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
// FOptiMove inline functions
|
||||
// FTermcap inline functions
|
||||
//----------------------------------------------------------------------
|
||||
inline const char* FTermcap::getClassName() const
|
||||
{ return "FTermcap"; }
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
|
||||
#endif // FTERMCAP_H
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "final/fc.h"
|
||||
#include "final/fterm.h"
|
||||
#include "final/ftermcap.h"
|
||||
#include "final/ftermdata.h"
|
||||
#include "final/ftermdetection.h"
|
||||
|
||||
namespace finalcut
|
||||
|
@ -57,14 +58,13 @@ class FTermcapQuirks
|
|||
FTermcapQuirks();
|
||||
|
||||
// Destructor
|
||||
~FTermcapQuirks();
|
||||
virtual ~FTermcapQuirks();
|
||||
|
||||
// Accessor
|
||||
const char* getClassName() const;
|
||||
|
||||
// Mutator
|
||||
static void setTerminalType (const char[]);
|
||||
static void setTermcapMap (FTermcap::tcap_map*);
|
||||
static void setTermData (FTermData*);
|
||||
static void setFTermDetection (FTermDetection*);
|
||||
|
||||
// Methods
|
||||
|
@ -87,8 +87,8 @@ class FTermcapQuirks
|
|||
static void init_termcap_general_quirks();
|
||||
|
||||
// Data Members
|
||||
static char termtype[256];
|
||||
static FTermcap::tcap_map* tcap;
|
||||
static FTermData* fterm_data;
|
||||
static FTermDetection* term_detection;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
|
|
@ -0,0 +1,397 @@
|
|||
/***********************************************************************
|
||||
* ftermdata.h - Data class for FTerm *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
* Copyright 2018 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 *
|
||||
* 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 *
|
||||
* 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/>. *
|
||||
***********************************************************************/
|
||||
|
||||
/* Standalone class
|
||||
* ════════════════
|
||||
*
|
||||
* ▕▔▔▔▔▔▔▔▔▔▔▔▏
|
||||
* ▕ FTermData ▏
|
||||
* ▕▁▁▁▁▁▁▁▁▁▁▁▏
|
||||
*/
|
||||
|
||||
#ifndef FTERMDATA_H
|
||||
#define FTERMDATA_H
|
||||
|
||||
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
||||
#error "Only <final/final.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "final/fc.h"
|
||||
#include "final/frect.h"
|
||||
#include "final/fstring.h"
|
||||
#include "final/ftypes.h"
|
||||
|
||||
namespace finalcut
|
||||
{
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// class FTermData
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
|
||||
class FTermData
|
||||
{
|
||||
public:
|
||||
// Typedefs
|
||||
typedef std::map<std::string,fc::encoding> encodingMap;
|
||||
|
||||
// Constructors
|
||||
FTermData();
|
||||
|
||||
// Destructor
|
||||
~FTermData();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
encodingMap& getEncodingList();
|
||||
fc::encoding getTermEncoding() const;
|
||||
FRect& getTermGeometry();
|
||||
int getTTYFileDescriptor() const;
|
||||
uInt getBaudrate() const;
|
||||
char* getTermType();
|
||||
char* getTermFileName();
|
||||
const FString& getXtermFont() const;
|
||||
const FString& getXtermTitle() const;
|
||||
#if DEBUG
|
||||
int getFramebufferBpp() const;
|
||||
#endif
|
||||
|
||||
// Inquiries
|
||||
bool hasShadowCharacter() const;
|
||||
bool hasHalfBlockCharacter() const;
|
||||
bool hasCursorOptimisation() const;
|
||||
bool isCursorHidden() const;
|
||||
bool hasAlternateScreen() const;
|
||||
bool hasASCIIConsole() const;
|
||||
bool hasVT100Console() const;
|
||||
bool hasUTF8Console() const;
|
||||
bool isUTF8() const;
|
||||
bool isNewFont() const;
|
||||
bool isVGAFont() const;
|
||||
bool isMonochron() const;
|
||||
bool hasTermResized() const;
|
||||
|
||||
// Mutators
|
||||
void setTermEncoding(fc::encoding);
|
||||
void setTTYFileDescriptor (int);
|
||||
void setBaudrate (uInt);
|
||||
void supportShadowCharacter (bool);
|
||||
void supportHalfBlockCharacter (bool);
|
||||
void supportCursorOptimisation (bool);
|
||||
void setCursorHidden (bool);
|
||||
void useAlternateScreen (bool);
|
||||
void setASCIIConsole (bool);
|
||||
void setVT100Console (bool);
|
||||
void setUTF8Console (bool);
|
||||
void setUTF8 (bool);
|
||||
void setNewFont (bool);
|
||||
void setVGAFont (bool);
|
||||
void setMonochron (bool);
|
||||
void setTermResized (bool);
|
||||
void setTermType (const char[]);
|
||||
void setTermFileName (const char[]);
|
||||
void setXtermFont (const FString&);
|
||||
void setXtermTitle (const FString&);
|
||||
#if DEBUG
|
||||
void setFramebufferBpp (int);
|
||||
#endif
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
FTermData (const FTermData&);
|
||||
|
||||
// Disable assignment operator (=)
|
||||
FTermData& operator = (const FTermData&);
|
||||
|
||||
// Data Members
|
||||
encodingMap encoding_list;
|
||||
fc::encoding term_encoding;
|
||||
FRect term_geometry; // current terminal geometry
|
||||
int fd_tty;
|
||||
uInt baudrate;
|
||||
bool shadow_character;
|
||||
bool half_block_character;
|
||||
bool cursor_optimisation;
|
||||
bool hidden_cursor;
|
||||
bool use_alternate_screen;
|
||||
bool ascii_console;
|
||||
bool vt100_console;
|
||||
bool utf8_console;
|
||||
bool utf8_state;
|
||||
bool new_font;
|
||||
bool vga_font;
|
||||
bool monochron;
|
||||
bool resize_term;
|
||||
char termtype[256];
|
||||
char termfilename[256];
|
||||
FString xterm_font;
|
||||
FString xterm_title;
|
||||
|
||||
#if DEBUG
|
||||
int framebuffer_bpp;
|
||||
#endif
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
// FTermData inline functions
|
||||
//----------------------------------------------------------------------
|
||||
inline FTermData::FTermData()
|
||||
: encoding_list()
|
||||
, term_encoding(fc::UNKNOWN)
|
||||
, term_geometry()
|
||||
, fd_tty(-1) // Teletype (tty) file descriptor is still undefined
|
||||
, baudrate(0)
|
||||
, shadow_character(true)
|
||||
, half_block_character(true)
|
||||
, cursor_optimisation(true)
|
||||
, hidden_cursor(false) // Global cursor hidden state
|
||||
, use_alternate_screen(true)
|
||||
, ascii_console(false)
|
||||
, vt100_console(false)
|
||||
, utf8_console(false)
|
||||
, utf8_state(false)
|
||||
, new_font(false)
|
||||
, vga_font(false)
|
||||
, monochron(false)
|
||||
, resize_term(false)
|
||||
, termtype()
|
||||
, termfilename()
|
||||
, xterm_font()
|
||||
, xterm_title()
|
||||
#if DEBUG
|
||||
, framebuffer_bpp(-1)
|
||||
#endif
|
||||
{
|
||||
// Initialize arrays with '\0'
|
||||
std::fill_n (termtype, sizeof(termtype), '\0');
|
||||
std::fill_n (termfilename, sizeof(termfilename), '\0');
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FTermData::~FTermData()
|
||||
{ }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const char* FTermData::getClassName() const
|
||||
{ return "FTermData"; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FTermData::encodingMap& FTermData::getEncodingList()
|
||||
{ return encoding_list; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline fc::encoding FTermData::getTermEncoding() const
|
||||
{ return term_encoding; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FRect& FTermData::getTermGeometry()
|
||||
{ return term_geometry; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FTermData::getTTYFileDescriptor() const
|
||||
{ return fd_tty; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline uInt FTermData::getBaudrate() const
|
||||
{ return baudrate; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline char* FTermData::getTermType()
|
||||
{ return termtype; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline char* FTermData::getTermFileName()
|
||||
{ return termfilename; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const FString& FTermData::getXtermFont() const
|
||||
{ return xterm_font; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const FString& FTermData::getXtermTitle() const
|
||||
{ return xterm_title; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
#if DEBUG
|
||||
inline int FTermData::getFramebufferBpp() const
|
||||
{ return framebuffer_bpp; }
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasShadowCharacter() const
|
||||
{ return shadow_character; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasHalfBlockCharacter() const
|
||||
{ return half_block_character; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasCursorOptimisation() const
|
||||
{ return cursor_optimisation; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::isCursorHidden() const
|
||||
{ return hidden_cursor; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasAlternateScreen() const
|
||||
{ return use_alternate_screen; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasASCIIConsole() const
|
||||
{ return ascii_console; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasVT100Console() const
|
||||
{ return vt100_console; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasUTF8Console() const
|
||||
{ return utf8_console; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::isUTF8() const
|
||||
{ return utf8_state; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::isNewFont() const
|
||||
{ return new_font; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::isVGAFont() const
|
||||
{ return vga_font; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::isMonochron() const
|
||||
{ return monochron; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermData::hasTermResized() const
|
||||
{ return resize_term; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setTermEncoding (fc::encoding enc)
|
||||
{ term_encoding = enc; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setTTYFileDescriptor (int fd)
|
||||
{ fd_tty = fd; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setBaudrate (uInt baud)
|
||||
{ baudrate = baud; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::supportShadowCharacter (bool available)
|
||||
{ shadow_character = available; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::supportHalfBlockCharacter (bool available)
|
||||
{ half_block_character = available; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::supportCursorOptimisation (bool available)
|
||||
{ cursor_optimisation = available; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setCursorHidden (bool hidden_state)
|
||||
{ hidden_cursor = hidden_state; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::useAlternateScreen (bool use)
|
||||
{ use_alternate_screen = use; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setASCIIConsole (bool ascii)
|
||||
{ ascii_console = ascii; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setVT100Console (bool vt100)
|
||||
{ vt100_console = vt100; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setUTF8Console (bool utf8)
|
||||
{ utf8_console = utf8; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setUTF8 (bool utf8)
|
||||
{ utf8_state = utf8; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setNewFont (bool nfont)
|
||||
{ new_font = nfont; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setVGAFont (bool vga)
|
||||
{ vga_font = vga; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setMonochron (bool mono)
|
||||
{ monochron = mono; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setTermResized (bool resize)
|
||||
{ resize_term = resize; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setTermType (const char name[])
|
||||
{
|
||||
if ( ! name )
|
||||
return;
|
||||
|
||||
std::strncpy (termtype, name, sizeof(termtype));
|
||||
termtype[sizeof(termtype) - 1] = '\0';
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setTermFileName (const char file_name[])
|
||||
{
|
||||
if ( ! file_name )
|
||||
return;
|
||||
|
||||
std::strncpy (termfilename, file_name, sizeof(termfilename));
|
||||
termfilename[sizeof(termfilename) - 1] = '\0';
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setXtermFont (const FString& font)
|
||||
{ xterm_font = font; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermData::setXtermTitle (const FString& title)
|
||||
{ xterm_title = title; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
#if DEBUG
|
||||
inline void FTermData::setFramebufferBpp (int bpp)
|
||||
{ framebuffer_bpp = bpp; }
|
||||
#endif
|
||||
|
||||
} // namespace finalcut
|
||||
|
||||
#endif // FTERMDATA_H
|
||||
|
||||
|
|
@ -43,6 +43,7 @@
|
|||
|
||||
#include "final/fc.h"
|
||||
#include "final/fconfig.h"
|
||||
#include "final/ftermdata.h"
|
||||
#include "final/ftermios.h"
|
||||
#include "final/ftypes.h"
|
||||
|
||||
|
@ -91,12 +92,11 @@ class FTermDetection
|
|||
FTermDetection();
|
||||
|
||||
// Destructor
|
||||
~FTermDetection();
|
||||
virtual ~FTermDetection();
|
||||
|
||||
// Accessor
|
||||
const char* getClassName() const;
|
||||
static char* getTermType();
|
||||
static char* getTermFileName();
|
||||
static int getGnomeTerminalID();
|
||||
terminalType& getTermTypeStruct();
|
||||
|
||||
|
@ -153,7 +153,7 @@ class FTermDetection
|
|||
static void setScreenTerm (bool);
|
||||
static void setTmuxTerm (bool);
|
||||
static void setTerminalDetection (bool);
|
||||
static void setTermFileName (char[]);
|
||||
static void setTermData (FTermData*);
|
||||
static void setTtyTypeFileName (char[]);
|
||||
|
||||
// Methods
|
||||
|
@ -199,7 +199,6 @@ class FTermDetection
|
|||
|
||||
// Data Members
|
||||
static char termtype[256];
|
||||
static char termfilename[256];
|
||||
static char ttytypename[256];
|
||||
static bool decscusr_support;
|
||||
static bool terminal_detection;
|
||||
|
@ -207,6 +206,7 @@ class FTermDetection
|
|||
static int gnome_terminal_id;
|
||||
static const FString* answer_back;
|
||||
static const FString* sec_da;
|
||||
static FTermData* fterm_data;
|
||||
static terminalType terminal_type;
|
||||
|
||||
static struct colorEnv
|
||||
|
@ -256,10 +256,6 @@ inline const char* FTermDetection::getClassName() const
|
|||
inline char* FTermDetection::getTermType()
|
||||
{ return termtype; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline char* FTermDetection::getTermFileName()
|
||||
{ return termfilename; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline int FTermDetection::getGnomeTerminalID()
|
||||
{ return gnome_terminal_id; }
|
||||
|
|
|
@ -66,7 +66,7 @@ class FTermFreeBSD
|
|||
FTermFreeBSD();
|
||||
|
||||
// Destructor
|
||||
~FTermFreeBSD();
|
||||
virtual ~FTermFreeBSD();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
|
|
@ -57,7 +57,7 @@ class FTermios
|
|||
FTermios();
|
||||
|
||||
// Destructor
|
||||
~FTermios();
|
||||
virtual ~FTermios();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
|
|
@ -73,7 +73,7 @@ class FTermLinux
|
|||
FTermLinux();
|
||||
|
||||
// Destructor
|
||||
~FTermLinux();
|
||||
virtual ~FTermLinux();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
@ -169,8 +169,8 @@ class FTermLinux
|
|||
|
||||
// Data Members
|
||||
#if defined(__linux__)
|
||||
static bool VGAFont;
|
||||
static bool NewFont;
|
||||
static bool vga_font;
|
||||
static bool new_font;
|
||||
static bool shadow_character;
|
||||
static bool half_block_character;
|
||||
static bool has_saved_palette;
|
||||
|
@ -210,11 +210,11 @@ inline bool FTermLinux::hasHalfBlockCharacter()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermLinux::isVGAFontUsed()
|
||||
{ return VGAFont; }
|
||||
{ return vga_font; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline bool FTermLinux::isNewFontUsed()
|
||||
{ return NewFont; }
|
||||
{ return new_font; }
|
||||
#endif // defined(__linux__)
|
||||
|
||||
} // namespace finalcut
|
||||
|
|
|
@ -59,7 +59,7 @@ class FTermOpenBSD
|
|||
FTermOpenBSD();
|
||||
|
||||
// Destructor
|
||||
~FTermOpenBSD();
|
||||
virtual ~FTermOpenBSD();
|
||||
|
||||
// Accessor
|
||||
const char* getClassName() const;
|
||||
|
|
|
@ -57,15 +57,15 @@ class FTermXTerminal
|
|||
FTermXTerminal();
|
||||
|
||||
// Destructor
|
||||
~FTermXTerminal();
|
||||
virtual ~FTermXTerminal();
|
||||
|
||||
// Mutators
|
||||
static void setTermcapMap (FTermcap::tcap_map*);
|
||||
static void setFTermDetection (FTermDetection*);
|
||||
static void redefineDefaultColors (bool);
|
||||
static void setCursorStyle (fc::xtermCursorStyle);
|
||||
static void setFont (const FString&);
|
||||
static void setTitle (const FString&);
|
||||
static void setTermSize (int, int);
|
||||
static void setForeground (const FString&);
|
||||
static void setBackground (const FString&);
|
||||
static void setCursorColor (const FString&);
|
||||
|
@ -110,6 +110,7 @@ class FTermXTerminal
|
|||
static void setXTermCursorStyle();
|
||||
static void setXTermFont();
|
||||
static void setXTermTitle();
|
||||
static void setXTermSize();
|
||||
static void setXTermForeground();
|
||||
static void setXTermBackground();
|
||||
static void setXTermCursorColor();
|
||||
|
@ -135,9 +136,11 @@ class FTermXTerminal
|
|||
static void disableXTermMetaSendsESC();
|
||||
|
||||
// Data Members
|
||||
static FTermcap::tcap_map* tcap;
|
||||
static FTermDetection* term_detection;
|
||||
static fc::xtermCursorStyle cursor_style;
|
||||
static bool mouse_support;
|
||||
static bool meta_sends_esc;
|
||||
static bool xterm_default_colors;
|
||||
static int term_width;
|
||||
static int term_height;
|
||||
static const FString* xterm_font;
|
||||
static const FString* xterm_title;
|
||||
static const FString* foreground_color;
|
||||
|
@ -146,9 +149,9 @@ class FTermXTerminal
|
|||
static const FString* mouse_foreground_color;
|
||||
static const FString* mouse_background_color;
|
||||
static const FString* highlight_background_color;
|
||||
static bool mouse_support;
|
||||
static bool meta_sends_esc;
|
||||
static bool xterm_default_colors;
|
||||
static FTermcap::tcap_map* tcap;
|
||||
static FTermDetection* term_detection;
|
||||
static fc::xtermCursorStyle cursor_style;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -157,10 +160,6 @@ class FTermXTerminal
|
|||
inline const char* FTermXTerminal::getClassName() const
|
||||
{ return "FTermXTerminal"; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermXTerminal::setTermcapMap (FTermcap::tcap_map* tc)
|
||||
{ tcap = tc; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FTermXTerminal::setFTermDetection (FTermDetection* td)
|
||||
{ term_detection = td; }
|
||||
|
|
|
@ -80,7 +80,7 @@ class FTextView : public FWidget
|
|||
explicit FTextView (FWidget* = 0);
|
||||
|
||||
// Destructor
|
||||
~FTextView();
|
||||
virtual ~FTextView();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
@ -90,7 +90,7 @@ class FTextView : public FWidget
|
|||
const FStringList& getLines() const;
|
||||
|
||||
// Mutators
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
void setText (const FString&);
|
||||
void scrollToX (int);
|
||||
void scrollToY (int);
|
||||
|
@ -99,7 +99,7 @@ class FTextView : public FWidget
|
|||
void scrollBy (int, int);
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
void append (const FString&);
|
||||
void insert (const FString&, int);
|
||||
void replaceRange (const FString&, int, int);
|
||||
|
@ -108,17 +108,17 @@ class FTextView : public FWidget
|
|||
void clear();
|
||||
|
||||
// Event handlers
|
||||
void onKeyPress (FKeyEvent*);
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onMouseMove (FMouseEvent*);
|
||||
void onWheel (FWheelEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onMouseMove (FMouseEvent*);
|
||||
virtual void onWheel (FWheelEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
protected:
|
||||
// Method
|
||||
void adjustSize();
|
||||
virtual void adjustSize();
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
@ -133,7 +133,7 @@ class FTextView : public FWidget
|
|||
|
||||
// Methods
|
||||
void init();
|
||||
void draw();
|
||||
virtual void draw();
|
||||
void drawText();
|
||||
void processChanged();
|
||||
void drawHBar();
|
||||
|
|
|
@ -85,17 +85,17 @@ class FToggleButton : public FWidget
|
|||
FString& getText();
|
||||
|
||||
// Mutators
|
||||
void setGeometry (int, int, int, int, bool = true);
|
||||
virtual void setGeometry (int, int, int, int, bool = true);
|
||||
bool setNoUnderline (bool);
|
||||
bool setNoUnderline();
|
||||
bool unsetNoUnderline();
|
||||
bool setEnable (bool);
|
||||
bool setEnable();
|
||||
bool unsetEnable();
|
||||
bool setDisable();
|
||||
bool setFocus (bool);
|
||||
bool setFocus();
|
||||
bool unsetFocus();
|
||||
virtual bool setEnable (bool);
|
||||
virtual bool setEnable();
|
||||
virtual bool unsetEnable();
|
||||
virtual bool setDisable();
|
||||
virtual bool setFocus (bool);
|
||||
virtual bool setFocus();
|
||||
virtual bool unsetFocus();
|
||||
bool setChecked (bool);
|
||||
bool setChecked();
|
||||
bool unsetChecked();
|
||||
|
@ -105,15 +105,15 @@ class FToggleButton : public FWidget
|
|||
bool isChecked();
|
||||
|
||||
// Methods
|
||||
void hide();
|
||||
virtual void hide();
|
||||
|
||||
// Event handlers
|
||||
void onMouseDown (FMouseEvent*);
|
||||
void onMouseUp (FMouseEvent*);
|
||||
void onWheel (FWheelEvent*);
|
||||
void onAccel (FAccelEvent*);
|
||||
void onFocusIn (FFocusEvent*);
|
||||
void onFocusOut (FFocusEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseUp (FMouseEvent*);
|
||||
virtual void onWheel (FWheelEvent*);
|
||||
virtual void onAccel (FAccelEvent*);
|
||||
virtual void onFocusIn (FFocusEvent*);
|
||||
virtual void onFocusOut (FFocusEvent*);
|
||||
|
||||
protected:
|
||||
// Accessor
|
||||
|
@ -153,7 +153,6 @@ class FToggleButton : public FWidget
|
|||
void setGroup (FButtonGroup*);
|
||||
|
||||
// Methods
|
||||
void init (const FString&);
|
||||
void init();
|
||||
int getHotkeyPos (wchar_t[], wchar_t[], uInt);
|
||||
void drawText (wchar_t[], int, uInt);
|
||||
|
|
|
@ -90,11 +90,11 @@ class FToolTip : public FWindow
|
|||
|
||||
// Methods
|
||||
virtual void draw();
|
||||
void show();
|
||||
void hide();
|
||||
virtual void show();
|
||||
virtual void hide();
|
||||
|
||||
// Event handler
|
||||
void onMouseDown (FMouseEvent*);
|
||||
virtual void onMouseDown (FMouseEvent*);
|
||||
|
||||
private:
|
||||
// Disable copy constructor
|
||||
|
|
|
@ -116,7 +116,7 @@ class FVTerm : public FTerm
|
|||
explicit FVTerm (bool, bool = false);
|
||||
|
||||
// Destructor
|
||||
~FVTerm();
|
||||
virtual ~FVTerm();
|
||||
|
||||
// Overloaded operators
|
||||
template<class type> FVTerm& operator << (const type&);
|
||||
|
@ -440,7 +440,7 @@ class FVTerm : public FTerm
|
|||
static charData s_ch; // shadow character
|
||||
static charData i_ch; // inherit background character
|
||||
static FPoint* term_pos; // terminal cursor position
|
||||
static termcap_map* tcap;
|
||||
static FTermcap::tcap_map* tcap;
|
||||
static FKeyboard* keyboard;
|
||||
static bool terminal_update_complete;
|
||||
static bool terminal_update_pending;
|
||||
|
|
|
@ -146,7 +146,7 @@ class FWidget : public FVTerm, public FObject
|
|||
explicit FWidget (FWidget* = 0, bool = false);
|
||||
|
||||
// Destructor
|
||||
~FWidget();
|
||||
virtual ~FWidget();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
@ -349,7 +349,7 @@ class FWidget : public FVTerm, public FObject
|
|||
virtual bool focusPrevChild(); // ...focus
|
||||
|
||||
// Event handlers
|
||||
bool event (FEvent*);
|
||||
virtual bool event (FEvent*);
|
||||
virtual void onKeyPress (FKeyEvent*);
|
||||
virtual void onKeyUp (FKeyEvent*);
|
||||
virtual void onKeyDown (FKeyEvent*);
|
||||
|
|
|
@ -85,7 +85,7 @@ class FWindow : public FWidget
|
|||
explicit FWindow (FWidget* = 0);
|
||||
|
||||
// Destructor
|
||||
~FWindow ();
|
||||
virtual ~FWindow ();
|
||||
|
||||
// Accessors
|
||||
const char* getClassName() const;
|
||||
|
@ -157,7 +157,7 @@ class FWindow : public FWidget
|
|||
virtual void adjustSize();
|
||||
|
||||
// Event handlers
|
||||
bool event (FEvent*);
|
||||
virtual bool event (FEvent*);
|
||||
virtual void onWindowActive (FEvent*);
|
||||
virtual void onWindowInactive (FEvent*);
|
||||
virtual void onWindowRaised (FEvent*);
|
||||
|
|
|
@ -10,6 +10,7 @@ noinst_PROGRAMS = \
|
|||
fobject_test \
|
||||
fmouse_test \
|
||||
fkeyboard_test \
|
||||
ftermdata_test \
|
||||
ftermdetection_test \
|
||||
ftermcapquirks_test \
|
||||
foptimove_test \
|
||||
|
@ -21,6 +22,7 @@ noinst_PROGRAMS = \
|
|||
fobject_test_SOURCES = fobject-test.cpp
|
||||
fmouse_test_SOURCES = fmouse-test.cpp
|
||||
fkeyboard_test_SOURCES = fkeyboard-test.cpp
|
||||
ftermdata_test_SOURCES = ftermdata-test.cpp
|
||||
ftermdetection_test_SOURCES = ftermdetection-test.cpp
|
||||
ftermcapquirks_test_SOURCES = ftermcapquirks-test.cpp
|
||||
foptimove_test_SOURCES = foptimove-test.cpp
|
||||
|
@ -32,6 +34,7 @@ frect_test_SOURCES = frect-test.cpp
|
|||
TESTS = fobject_test \
|
||||
fmouse_test \
|
||||
fkeyboard_test \
|
||||
ftermdata_test \
|
||||
ftermdetection_test \
|
||||
ftermcapquirks_test \
|
||||
foptimove_test \
|
||||
|
|
|
@ -356,7 +356,8 @@ void FKeyboardTest::escapeKeyTest()
|
|||
// Normal escape (needs a timeout)
|
||||
input("\033");
|
||||
processInput();
|
||||
usleep(100000);
|
||||
// Wait 100 ms (= 100,000,000 ns)
|
||||
nanosleep ((const struct timespec[]){{0, 100000000L}}, NULL);
|
||||
keyboard->escapeKeyHandling();
|
||||
std::cout << " - Key: " << keyboard->getKeyName(key_pressed) << std::endl;
|
||||
CPPUNIT_ASSERT ( key_pressed == finalcut::fc::Fkey_escape );
|
||||
|
@ -2085,7 +2086,8 @@ void FKeyboardTest::metaKeyTest()
|
|||
// shifted meta-O
|
||||
input("\033O");
|
||||
processInput();
|
||||
usleep(100000); // Substring keys needs a timeout
|
||||
// Wait 100 ms - Substring keys needs a timeout
|
||||
nanosleep ((const struct timespec[]){{0, 100000000L}}, NULL);
|
||||
keyboard->escapeKeyHandling();
|
||||
std::cout << " - Key: " << keyboard->getKeyName(key_pressed) << std::endl;
|
||||
CPPUNIT_ASSERT ( key_pressed == finalcut::fc::Fmkey_O );
|
||||
|
@ -2171,7 +2173,8 @@ void FKeyboardTest::metaKeyTest()
|
|||
// meta-[
|
||||
input("\033[");
|
||||
processInput();
|
||||
usleep(100000); // Substring keys needs a timeout
|
||||
// Wait 100 ms - Substring keys needs a timeout
|
||||
nanosleep ((const struct timespec[]){{0, 100000000L}}, NULL);
|
||||
keyboard->escapeKeyHandling();
|
||||
std::cout << " - Key: " << keyboard->getKeyName(key_pressed) << std::endl;
|
||||
CPPUNIT_ASSERT ( key_pressed == finalcut::fc::Fmkey_left_square_bracket );
|
||||
|
@ -2187,7 +2190,8 @@ void FKeyboardTest::metaKeyTest()
|
|||
// meta-]
|
||||
input("\033]");
|
||||
processInput();
|
||||
usleep(100000); // Substring keys needs a timeout
|
||||
// Wait 100 ms - Substring keys needs a timeout
|
||||
nanosleep ((const struct timespec[]){{0, 100000000L}}, NULL);
|
||||
keyboard->escapeKeyHandling();
|
||||
std::cout << " - Key: " << keyboard->getKeyName(key_pressed) << std::endl;
|
||||
CPPUNIT_ASSERT ( key_pressed == finalcut::fc::Fmkey_right_square_bracket );
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/***********************************************************************
|
||||
* fmouse-test.cpp - finalcut::FMouse unit tests *
|
||||
* fmouse-test.cpp - FMouse unit tests *
|
||||
* *
|
||||
* This file is part of the Final Cut widget toolkit *
|
||||
* *
|
||||
|
@ -199,6 +199,8 @@ void FMouseTest::noArgumentTest()
|
|||
//----------------------------------------------------------------------
|
||||
void FMouseTest::doubleClickTest()
|
||||
{
|
||||
using finalcut::operator -;
|
||||
|
||||
FMouse_protected mouse;
|
||||
CPPUNIT_ASSERT ( mouse.getDblclickInterval() == 500000 ); // 500 ms
|
||||
timeval tv = { 0, 0 };
|
||||
|
|
|
@ -41,15 +41,34 @@
|
|||
class FObject_protected : public finalcut::FObject
|
||||
{
|
||||
public:
|
||||
FObject_protected()
|
||||
: count(0)
|
||||
{ }
|
||||
|
||||
bool event (finalcut::FEvent* ev)
|
||||
{
|
||||
return finalcut::FObject::event(ev);
|
||||
}
|
||||
|
||||
finalcut::FObject::TimerList* getTimerList() const
|
||||
TimerList* getTimerList() const
|
||||
{
|
||||
return timer_list;
|
||||
return finalcut::FObject::getTimerList();
|
||||
}
|
||||
|
||||
uInt processEvent()
|
||||
{
|
||||
return processTimerEvent();
|
||||
}
|
||||
|
||||
virtual void performTimerAction (const FObject*, const finalcut::FEvent*)
|
||||
{
|
||||
std::cout << ".";
|
||||
fflush(stdout);
|
||||
count++;
|
||||
}
|
||||
|
||||
// Data Member
|
||||
uInt count;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
@ -77,6 +96,7 @@ class FObjectTest : public CPPUNIT_NS::TestFixture
|
|||
void iteratorTest();
|
||||
void timeTest();
|
||||
void timerTest();
|
||||
void performTimerActionTest();
|
||||
|
||||
private:
|
||||
// Adds code needed to register the test suite
|
||||
|
@ -92,6 +112,7 @@ class FObjectTest : public CPPUNIT_NS::TestFixture
|
|||
CPPUNIT_TEST (iteratorTest);
|
||||
CPPUNIT_TEST (timeTest);
|
||||
CPPUNIT_TEST (timerTest);
|
||||
CPPUNIT_TEST (performTimerActionTest);
|
||||
|
||||
// End of test suite definition
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
@ -116,7 +137,7 @@ void FObjectTest::noArgumentTest()
|
|||
CPPUNIT_ASSERT ( o1.getChild(0) == 0 );
|
||||
CPPUNIT_ASSERT ( o1.getChild(1) == 0 );
|
||||
CPPUNIT_ASSERT ( o1.numOfChildren() == 0 );
|
||||
const finalcut::FObject::FObjectList& children_list = o1.getChildren();
|
||||
finalcut::FObject::FObjectList& children_list = o1.getChildren();
|
||||
CPPUNIT_ASSERT ( children_list.begin() == o1.begin() );
|
||||
CPPUNIT_ASSERT ( children_list.begin() == o1.end() );
|
||||
CPPUNIT_ASSERT ( children_list.end() == o1.begin() );
|
||||
|
@ -258,6 +279,7 @@ void FObjectTest::delTest()
|
|||
*/
|
||||
finalcut::FObject* obj = new finalcut::FObject();
|
||||
finalcut::FObject* child = new finalcut::FObject(obj);
|
||||
|
||||
CPPUNIT_ASSERT ( obj->hasChildren() );
|
||||
CPPUNIT_ASSERT ( obj->numOfChildren() == 1 );
|
||||
CPPUNIT_ASSERT ( obj->isChild(child) );
|
||||
|
@ -333,11 +355,19 @@ void FObjectTest::timeTest()
|
|||
CPPUNIT_ASSERT ( ! finalcut::FObject::isTimeout (&time1, timeout) );
|
||||
sleep(1);
|
||||
CPPUNIT_ASSERT ( finalcut::FObject::isTimeout (&time1, timeout) );
|
||||
time1.tv_sec = 300;
|
||||
time1.tv_usec = 2000000; // > 1000000 µs to test diff underflow
|
||||
CPPUNIT_ASSERT ( finalcut::FObject::isTimeout (&time1, timeout) );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FObjectTest::timerTest()
|
||||
{
|
||||
using finalcut::operator +;
|
||||
using finalcut::operator -;
|
||||
using finalcut::operator +=;
|
||||
using finalcut::operator <;
|
||||
|
||||
FObject_protected t1;
|
||||
FObject_protected t2;
|
||||
int id1, id2;
|
||||
|
@ -436,6 +466,27 @@ void FObjectTest::timerTest()
|
|||
CPPUNIT_ASSERT ( ! t1.delTimer(-1) );
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FObjectTest::performTimerActionTest()
|
||||
{
|
||||
FObject_protected t;
|
||||
uInt num_events = 0;
|
||||
uInt loop = 0;
|
||||
t.addTimer(100);
|
||||
|
||||
while ( loop < 10 )
|
||||
{
|
||||
num_events += t.processEvent();
|
||||
// Wait 100 ms
|
||||
nanosleep ((const struct timespec[]){{0, 100000000L}}, NULL);
|
||||
loop++;
|
||||
}
|
||||
|
||||
CPPUNIT_ASSERT ( loop == 10 );
|
||||
CPPUNIT_ASSERT ( num_events == 9 );
|
||||
CPPUNIT_ASSERT ( t.count == 9 );
|
||||
}
|
||||
|
||||
// Put the test suite in the registry
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION (FObjectTest);
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue