00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef YQUI_h
00023 #define YQUI_h
00024
00025 #include <qapplication.h>
00026 #include <qmap.h>
00027 #include <qfont.h>
00028 #include <qtimer.h>
00029 #include <qtranslator.h>
00030 #include <vector>
00031
00032 #include "YSimpleEventHandler.h"
00033 #include <YUI.h>
00034
00035 #define YQWidgetMargin 4
00036 #define YQWidgetSpacing 4
00037 #define YQButtonBorder 3
00038
00039 class QVBox;
00040 class QWidgetStack;
00041 class QCursor;
00042 class YEvent;
00043 using std::string;
00044 using std::vector;
00045
00046
00047 class YQUI: public QObject, public YUI
00048 {
00049 Q_OBJECT
00050 public:
00051
00055 YQUI( int argc,
00056 char ** argv,
00057 bool with_threads,
00058 const char * macro_file );
00059
00063 ~YQUI();
00064
00068 static YQUI * ui() { return _ui; }
00069
00074 static void setEmbeddingParent( QWidget * p );
00075
00079 const QFont & currentFont();
00080
00084 const QFont & headingFont();
00085
00095 void sendEvent( YEvent * event );
00096
00100 bool eventPendingFor( YWidget * widget ) const
00101 { return _event_handler.eventPendingFor( widget ); }
00102
00108 YEvent * pendingEvent() const { return _event_handler.pendingEvent(); }
00109
00114 bool haveWM() const { return _have_wm; }
00115
00119 bool fullscreen() const { return _fullscreen; }
00120
00126 bool decorateToplevelWindow() const { return _decorate_toplevel_window; }
00127
00132 bool fatalError() const { return _fatal_error; }
00133
00139 void raiseFatalError() { _fatal_error = true; }
00140
00144 long defaultSize( YUIDimension dim ) const;
00145
00150 void makeScreenShot( string filename );
00151
00158 YCPValue runPkgSelection( YWidget * packageSelector );
00159
00166 void toggleRecordMacro();
00167
00172 void askPlayMacro();
00173
00179 void internalError( const char * msg );
00180
00181
00185 void blockWmClose() { _wm_close_blocked = true; }
00186
00190 void unblockWmClose() { _wm_close_blocked = false; }
00191
00195 bool autoActivateDialogs() const { return _auto_activate_dialogs; }
00196
00201 bool runningEmbedded() const;
00202
00207 bool debugEmbedding() const { return _debug_embedding; }
00208
00215 virtual void blockEvents( bool block = true )
00216 { _event_handler.blockEvents( block ); }
00217
00223 virtual bool eventsBlocked() const
00224 { return _event_handler.eventsBlocked(); }
00225
00231 QString YQUI::productName() const;
00232
00233
00234 public slots:
00235
00241 void busyCursor();
00242
00248 void normalCursor();
00249
00254 void askSaveLogs();
00255
00260 void askConfigureLogging();
00261
00265 void easterEgg();
00266
00267
00268 signals:
00272 void wmClose();
00273
00274
00275 protected:
00276
00283 void idleLoop( int fd_ycp );
00284
00291 YCPString glyph( const YCPSymbol & glyphSymbol );
00292
00298 YEvent * userInput( unsigned long timeout_millisec = 0 );
00299
00305 YEvent * pollInput();
00306
00312 YDialog * createDialog( YWidgetOpt & opt );
00313
00319 void showDialog( YDialog * dialog );
00320
00326 void closeDialog( YDialog * dialog );
00327
00333 bool eventFilter( QObject * obj, QEvent * ev );
00334
00341 bool showEventFilter( QObject * obj, QEvent * ev );
00342
00347 void loadPredefinedQtTranslations();
00348
00354 void pickAutoFonts();
00355
00364 bool autoFonts() const { return _auto_fonts; }
00365
00366
00367
00368
00369 YContainerWidget * createAlignment ( YWidget * parent, YWidgetOpt & opt, YAlignmentType horAlign, YAlignmentType vertAlign );
00370 YContainerWidget * createFrame ( YWidget * parent, YWidgetOpt & opt, const YCPString & label );
00371 YContainerWidget * createRadioButtonGroup ( YWidget * parent, YWidgetOpt & opt);
00372 YContainerWidget * createReplacePoint ( YWidget * parent, YWidgetOpt & opt);
00373 YContainerWidget * createSplit ( YWidget * parent, YWidgetOpt & opt, YUIDimension dimension);
00374 YContainerWidget * createSquash ( YWidget * parent, YWidgetOpt & opt, bool horSquash, bool vertSquash);
00375 YContainerWidget * createWeight ( YWidget * parent, YWidgetOpt & opt, YUIDimension dim, long weight);
00376
00377 YWidget * createCheckBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, bool checked);
00378 YWidget * createComboBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00379 YWidget * createEmpty ( YWidget * parent, YWidgetOpt & opt);
00380 YWidget * createImage ( YWidget * parent, YWidgetOpt & opt, YCPByteblock imageData, YCPString fallbackText );
00381 YWidget * createImage ( YWidget * parent, YWidgetOpt & opt, YCPString fileName, YCPString fallbackText );
00382 YWidget * createIntField ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, int minValue, int maxValue, int initialValue);
00383 YWidget * createLabel ( YWidget * parent, YWidgetOpt & opt, const YCPString & text);
00384 YWidget * createLogView ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, int visibleLines, int maxLines );
00385 YWidget * createMultiLineEdit ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, const YCPString & text);
00386 YWidget * createProgressBar ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, const YCPInteger & maxProgress, const YCPInteger & currentProgress );
00387 YWidget * createPackageSelector ( YWidget * parent, YWidgetOpt & opt, const YCPString & floppyDevice );
00388 YWidget * createPushButton ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00389 YWidget * createMenuButton ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00390 YWidget * createRadioButton ( YWidget * parent, YWidgetOpt & opt, YRadioButtonGroup * rbg, const YCPString & label, bool checked);
00391 YWidget * createRichText ( YWidget * parent, YWidgetOpt & opt, const YCPString & text);
00392 YWidget * createSelectionBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00393 YWidget * createMultiSelectionBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00394 YWidget * createSpacing ( YWidget * parent, YWidgetOpt & opt, float size, bool horizontal, bool vertical);
00395 YWidget * createTable ( YWidget * parent, YWidgetOpt & opt, vector<string> header);
00396 YWidget * createTextEntry ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, const YCPString & text);
00397 YWidget * createTree ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00398 YWidget * createPkgSpecial ( YWidget * parent, YWidgetOpt & opt, const YCPString & subwidget );
00399
00400
00401
00402
00403 bool hasBarGraph();
00404 YWidget * createBarGraph ( YWidget * parent, YWidgetOpt & opt);
00405
00406
00407 bool hasColoredLabel();
00408 YWidget * createColoredLabel ( YWidget * parent,
00409 YWidgetOpt & opt,
00410 YCPString label,
00411 YColor foreground,
00412 YColor background,
00413 int margin );
00414
00415 bool hasDate();
00416 YWidget * createDate ( YWidget * parent,
00417 YWidgetOpt & opt,
00418 const YCPString & label,
00419 const YCPString & date);
00420
00421 bool hasTime();
00422 YWidget * createTime ( YWidget * parent,
00423 YWidgetOpt & opt,
00424 const YCPString & label,
00425 const YCPString & time);
00426
00427 bool hasDownloadProgress();
00428 YWidget * createDownloadProgress ( YWidget * parent,
00429 YWidgetOpt & opt,
00430 const YCPString & label,
00431 const YCPString & filename,
00432 int expectedSize );
00433
00434 bool hasDumbTab();
00435 YWidget * createDumbTab ( YWidget * parent,
00436 YWidgetOpt & opt );
00437
00438 bool hasMultiProgressMeter();
00439 YWidget * createMultiProgressMeter( YWidget * parent,
00440 YWidgetOpt & opt,
00441 bool horizontal,
00442 const YCPList & maxValues );
00443
00444 bool hasSlider();
00445 YWidget * createSlider ( YWidget * parent,
00446 YWidgetOpt & opt,
00447 const YCPString & label,
00448 int minValue,
00449 int maxValue,
00450 int initialValue );
00451
00452 bool hasPartitionSplitter();
00453 YWidget * createPartitionSplitter( YWidget * parent,
00454 YWidgetOpt & opt,
00455 int usedSize,
00456 int totalFreeSize,
00457 int newPartSize,
00458 int minNewPartSize,
00459 int minFreeSize,
00460 const YCPString & usedLabel,
00461 const YCPString & freeLabel,
00462 const YCPString & newPartLabel,
00463 const YCPString & freeFieldLabel,
00464 const YCPString & newPartFieldLabel );
00465
00466 bool hasWizard();
00467 YWidget * createWizard ( YWidget * parent, YWidgetOpt & opt,
00468 const YCPValue & backButtonId, const YCPString & backButtonLabel,
00469 const YCPValue & abortButtonId, const YCPString & abortButtonLabel,
00470 const YCPValue & nextButtonId, const YCPString & nextButtonLabel );
00471
00472
00473
00474
00475
00476
00477 public:
00478
00492 YCPValue askForExistingDirectory ( const YCPString & startDir,
00493 const YCPString & headline );
00494
00509 YCPValue askForExistingFile ( const YCPString & startWith,
00510 const YCPString & filter,
00511 const YCPString & headline );
00512
00528 YCPValue askForSaveFileName ( const YCPString & startWith,
00529 const YCPString & filter,
00530 const YCPString & headline );
00531
00536 QString askForSaveFileName( const QString & startWith,
00537 const QString & filter,
00538 const QString & headline );
00539
00543 QWidget* mainWidget();
00544
00548 static void setTextdomain( const char * domain );
00549
00553 static QPalette YQUI::visionImpairedPalette();
00554
00558 QPalette normalPalette() const { return _normalPalette; }
00559
00563 void toggleVisionImpairedPalette();
00564
00569 bool usingVisionImpairedPalette() const { return _usingVisionImpairedPalette; }
00570
00571
00572 protected:
00573
00578 YCPValue setLanguage( const YCPTerm & term );
00579
00580
00586 int getDisplayWidth();
00587 int getDisplayHeight();
00588 int getDisplayDepth();
00589 long getDisplayColors();
00590 int getDefaultWidth();
00591 int getDefaultHeight();
00592 bool textMode() { return false; }
00593 bool hasImageSupport() { return true; }
00594 bool hasLocalImageSupport() { return true; }
00595 bool hasAnimationSupport() { return true; }
00596 bool hasIconSupport() { return false; }
00597 bool hasFullUtf8Support() { return true; }
00598 bool richTextSupportsTable() { return true; }
00599
00600
00601 QMap<QString, int> screenShotNo;
00602 QString screenShotNameTemplate;
00603
00604
00605 protected slots:
00606
00610 bool close();
00611
00615 void userInputTimeout();
00616
00620 void leaveIdleLoop( int );
00621
00622
00623 protected:
00624
00628 void processCommandLineArgs( int argc, char **argv );
00629
00633 void calcDefaultSize();
00634
00635
00636
00637
00638
00639
00643 bool _have_wm;
00644
00648 bool _fullscreen;
00649
00653 bool _decorate_toplevel_window;
00654
00658 bool _debug_embedding;
00659
00665 QVBox * _main_win;
00666
00670 QWidgetStack * _widget_stack;
00671
00675 vector<QWidget *> _popup_stack;
00676
00680 int _main_dialog_id;
00681
00685 QSize _default_size;
00686
00692 bool _leave_idle_loop;
00693
00699 bool _do_exit_loop;
00700
00704 QFont _current_font;
00705 bool _loaded_current_font;
00706
00707
00711 QFont _heading_font;
00712 bool _loaded_heading_font;
00713
00717 bool _auto_fonts;
00718 int _auto_normal_font_size;
00719 int _auto_heading_font_size;
00720
00724 bool _wm_close_blocked;
00725
00730 bool _auto_activate_dialogs;
00731
00735 static YQUI * _ui;
00736
00740 bool _fatal_error;
00741
00745 QTimer _user_input_timer;
00746
00750 QTimer _busy_cursor_timer;
00751
00755 YSimpleEventHandler _event_handler;
00756
00760 QTranslator _qtTranslations;
00761
00762
00766 static QWidget * _embeddingParent;
00767
00771 bool _running_embedded;
00772
00776 QPalette _normalPalette;
00777
00781 bool _usingVisionImpairedPalette;
00782 };
00783
00784
00785 #endif // YQUI_h