// File: transparent.cpp #include "fapp.h" #include "fdialog.h" #include "flabel.h" #include "fmessagebox.h" #include "fstatusbar.h" #include "fstring.h" //---------------------------------------------------------------------- // class Transparent //---------------------------------------------------------------------- #pragma pack(push) #pragma pack(1) class Transparent : public FDialog { private: bool shadow_win; private: Transparent (const Transparent&); // Disabled copy constructor Transparent& operator = (const Transparent&); // and operator '=' void draw(); void onAccel (FAccelEvent* ev) { if ( getParentWidget() ) { if ( getParentWidget()->close() ) ev->accept(); else ev->ignore(); } } public: explicit Transparent (FWidget* = 0, bool = false); // constructor ~Transparent(); // destructor }; #pragma pack(pop) //---------------------------------------------------------------------- Transparent::Transparent (FWidget* parent, bool s) : FDialog(parent) , shadow_win(s) { setStatusbarMessage("Press Q to quit"); addAccelerator('q'); } //---------------------------------------------------------------------- Transparent::~Transparent() { } //---------------------------------------------------------------------- void Transparent::draw() { FDialog::draw(); updateVTerm(false); if ( isMonochron() ) setReverse(true); if ( shadow_win ) { setColor(wc.shadow_bg, wc.shadow_fg); setTransShadow(); } else setTransparent(); FString line(getClientWidth(), wchar_t(' ')); for (int n=1; n <= getClientHeight(); n++) { gotoxy(xpos+xmin, ypos+ymin+n); print(line); } if ( shadow_win ) unsetTransShadow(); else unsetTransparent(); if ( isMonochron() ) setReverse(false); updateVTerm(true); } //---------------------------------------------------------------------- // class MainWindow //---------------------------------------------------------------------- #pragma pack(push) #pragma pack(1) class MainWindow : public FDialog { private: FString line1; FString line2; private: MainWindow (const MainWindow&); // Disabled copy constructor MainWindow& operator = (const MainWindow&); // and operator '=' void draw(); void onClose (FCloseEvent*); void onShow (FShowEvent*); void onTimer (FTimerEvent*); void onAccel (FAccelEvent* ev) { close(); ev->accept(); } public: explicit MainWindow (FWidget* = 0); // constructor ~MainWindow(); // destructor }; #pragma pack(pop) //---------------------------------------------------------------------- MainWindow::MainWindow (FWidget* parent) : FDialog(parent) , line1() , line2() { line1 = " .-. .-. .-."; line2 = "`._.' `._.' `._.' "; Transparent* transpwin = new Transparent(this); transpwin->setText("transparent"); transpwin->setGeometry (6, 11, 29, 12); transpwin->show(); Transparent* shadowwin = new Transparent(this, true); shadowwin->setText("shadow"); shadowwin->setGeometry (47, 11, 29, 12); shadowwin->show(); // Statusbar at the bottom FStatusBar* statusbar = new FStatusBar (this); statusbar->setMessage("Press Q to quit"); addAccelerator('q'); } //---------------------------------------------------------------------- MainWindow::~MainWindow() { } //---------------------------------------------------------------------- void MainWindow::draw() { FDialog::draw(); updateVTerm(false); if ( isMonochron() ) setReverse(true); setColor(foregroundColor, backgroundColor); gotoxy(xpos+xmin, ypos+ymin+2); print(line1); gotoxy(xpos+xmin, ypos+ymin+3); print(line2); if ( isMonochron() ) setReverse(false); updateVTerm(true); } //---------------------------------------------------------------------- void MainWindow::onClose (FCloseEvent* ev) { int ret = FMessageBox::info ( this, "Quit" , "Do you really want\n" "to quit the program ?" , FMessageBox::Yes , FMessageBox::No ); if ( ret == FMessageBox::Yes ) ev->accept(); else ev->ignore(); } //---------------------------------------------------------------------- void MainWindow::onShow (FShowEvent*) { addTimer(100); } //---------------------------------------------------------------------- void MainWindow::onTimer (FTimerEvent*) { wchar_t first_Char[2]; uInt length = line1.getLength(); first_Char[0] = line1[0]; first_Char[1] = line2[0]; line1 = line1.right(length - 1) + first_Char[0]; line2 = line2.right(length - 1) + first_Char[1]; redraw(); flush_out(); } //---------------------------------------------------------------------- // main part //---------------------------------------------------------------------- int main (int argc, char* argv[]) { if ( argv[1] && ( strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ) ) { std::cout << "Generic options:" << std::endl << " -h, --help " << "Display this help and exit" << std::endl; FApplication::print_cmd_Options(); exit(EXIT_SUCCESS); } FApplication app (argc, argv); MainWindow main_dlg (&app); main_dlg.setText ("non-transparent"); main_dlg.setGeometry (27, 3, 26, 7); app.setMainWidget (&main_dlg); main_dlg.show(); return app.exec(); }