diff --git a/test/Makefile.am b/test/Makefile.am index ec8d5636..7fc03259 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -12,8 +12,9 @@ noinst_PROGRAMS = \ mandelbrot \ calculator \ fstring \ + watch \ timer \ - ui + ui hello_SOURCES = hello.cpp dialog_SOURCES = dialog.cpp @@ -21,6 +22,7 @@ input_dialog_SOURCES = input-dialog.cpp mandelbrot_SOURCES = mandelbrot.cpp calculator_SOURCES = calculator.cpp fstring_SOURCES = fstring.cpp +watch_SOURCES = watch.cpp timer_SOURCES = timer.cpp ui_SOURCES = ui.cpp diff --git a/test/watch.cpp b/test/watch.cpp new file mode 100644 index 00000000..71227856 --- /dev/null +++ b/test/watch.cpp @@ -0,0 +1,218 @@ +// watch.cpp + +#include + +#include "fapp.h" +#include "flabel.h" +#include "fdialog.h" +#include "fmessagebox.h" +#include "fswitch.h" + +//---------------------------------------------------------------------- +// class watch +//---------------------------------------------------------------------- + +#pragma pack(push) +#pragma pack(1) + +class watch : public FDialog +{ + private: + bool sec; + + private: + FLabel* time_label; + FLabel* time_str; + FSwitch* clock_sw; + FSwitch* seconds_sw; + + public: + explicit watch (FWidget* parent=0); // constructor + ~watch(); // destructor + void printTime(); + void onTimer (FTimerEvent*); + void onAccel (FAccelEvent*); + void onClose (FCloseEvent*); + void cb_clock (FWidget*, void*); + void cb_seconds (FWidget*, void*); + void cb_exitApp (FWidget*, void*); + + protected: + void adjustSize(); +}; +#pragma pack(pop) + +//---------------------------------------------------------------------- +watch::watch (FWidget* parent) : FDialog(parent) +{ + setText ("Watch"); + setShadow(); + int pw = parentWidget()->getWidth(); + setGeometry (1+(pw-22)/2, 3, 22, 12); + + // Create labels + time_label = new FLabel(L"Time", this); + time_label->setGeometry(5, 2, 5, 1); + time_label->setEmphasis(); + time_str = new FLabel(L"--:--:--", this); + time_str->setGeometry(10, 2, 8, 1); + + // Create checkbox buttons + clock_sw = new FSwitch(L"Clock", this); + seconds_sw = new FSwitch(L"Seconds", this); + clock_sw->setGeometry(4, 4, 9, 1); + seconds_sw->setGeometry(2, 6, 11, 1); + seconds_sw->setChecked(); + sec = true; + + // Create button + FButton* quit = new FButton(L"&Quit", this); + quit->setGeometry(6, 8, 9, 1); + quit->setShadow(); + quit->setFocus(); + + // Connect switch signal "toggled" with a callback member function + clock_sw->addCallback + ( + "toggled", + this, + reinterpret_cast(&watch::cb_clock), + null + ); + + // Connect switch signal "toggled" with a callback member function + seconds_sw->addCallback + ( + "toggled", + this, + reinterpret_cast(&watch::cb_seconds), + null + ); + + // Connect button signal "clicked" with a callback member function + quit->addCallback + ( + "clicked", + this, + reinterpret_cast(&watch::cb_exitApp), + null + ); +} + +//---------------------------------------------------------------------- +watch::~watch() +{ + delAllTimer(); +} + +//---------------------------------------------------------------------- +void watch::printTime() +{ + FString str; + struct tm* now; + time_t t; + + t = time(0); // get current time + now = localtime(&t); + + if ( sec ) + str.sprintf("%02d:%02d:%02d", now->tm_hour, now->tm_min, now->tm_sec); + else + str.sprintf("%02d:%02d ", now->tm_hour, now->tm_min); + + time_str->setText(str); + time_str->redraw(); +} + +//---------------------------------------------------------------------- +void watch::onTimer (FTimerEvent*) +{ + printTime(); +} + +//---------------------------------------------------------------------- +void watch::onAccel (FAccelEvent* ev) +{ + close(); + ev->accept(); +} + +//---------------------------------------------------------------------- +void watch::onClose (FCloseEvent* event) +{ + int ret = FMessageBox::info ( this, "Quit", + "Do you really want\n" + "to quit the program ?", + FMessageBox::Yes, + FMessageBox::No ); + if ( ret == FMessageBox::Yes ) + event->accept(); + else + event->ignore(); +} + +//---------------------------------------------------------------------- +void watch::cb_clock (FWidget*, void*) +{ + if ( clock_sw->isChecked() ) + { + printTime(); + addTimer(1000); + } + else + { + delAllTimer(); + time_str->setText("--:--:--"); + time_str->redraw(); + } +} + +//---------------------------------------------------------------------- +void watch::cb_seconds (FWidget*, void*) +{ + if ( seconds_sw->isChecked() ) + sec = true; + else + sec = false; + + if ( clock_sw->isChecked() ) + printTime(); + else + { + if ( sec ) + time_str->setText("--:--:--"); + else + time_str->setText("--:-- "); + time_str->redraw(); + } +} + +//---------------------------------------------------------------------- +void watch::cb_exitApp (FWidget*, void*) +{ + close(); +} + +//---------------------------------------------------------------------- +void watch::adjustSize() +{ + int pw = parentWidget()->getWidth(); + setX (1+(pw-22)/2, false); + FDialog::adjustSize(); +} + +//---------------------------------------------------------------------- +// main part +//---------------------------------------------------------------------- +int main (int argc, char* argv[]) +{ + // Create the application object + FApplication app(argc, argv); + + // Create a simple dialog box + watch w(&app); + + app.setMainWidget(&w); + w.show(); + return app.exec(); +}