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 class QY2Settings;
00044 using std::string;
00045 using std::vector;
00046
00047
00048 class YQUI: public QObject, public YUI
00049 {
00050 Q_OBJECT
00051 public:
00052
00056 YQUI( int argc,
00057 char ** argv,
00058 bool with_threads,
00059 const char * macro_file );
00060
00064 ~YQUI();
00065
00069 static YQUI * ui() { return _ui; }
00070
00075 static void setEmbeddingParent( QWidget * p );
00076
00080 const QFont & currentFont();
00081
00085 const QFont & boldFont();
00086
00090 const QFont & headingFont();
00091
00101 void sendEvent( YEvent * event );
00102
00106 bool eventPendingFor( YWidget * widget ) const
00107 { return _event_handler.eventPendingFor( widget ); }
00108
00114 YEvent * pendingEvent() const { return _event_handler.pendingEvent(); }
00115
00120 bool haveWM() const { return _have_wm; }
00121
00125 bool fullscreen() const { return _fullscreen; }
00126
00132 bool decorateToplevelWindow() const { return _decorate_toplevel_window; }
00133
00138 bool fatalError() const { return _fatal_error; }
00139
00145 void raiseFatalError() { _fatal_error = true; }
00146
00150 long defaultSize( YUIDimension dim ) const;
00151
00156 void makeScreenShot( string filename );
00157
00164 YCPValue runPkgSelection( YWidget * packageSelector );
00165
00172 void toggleRecordMacro();
00173
00178 void askPlayMacro();
00179
00185 void internalError( const char * msg );
00186
00187
00191 void blockWmClose() { _wm_close_blocked = true; }
00192
00196 void unblockWmClose() { _wm_close_blocked = false; }
00197
00201 bool autoActivateDialogs() const { return _auto_activate_dialogs; }
00202
00207 bool runningEmbedded() const;
00208
00213 bool debugEmbedding() const { return _debug_embedding; }
00214
00221 virtual void blockEvents( bool block = true )
00222 { _event_handler.blockEvents( block ); }
00223
00229 virtual bool eventsBlocked() const
00230 { return _event_handler.eventsBlocked(); }
00231
00237 QString YQUI::productName() const;
00238
00239
00240 public slots:
00241
00247 void busyCursor();
00248
00254 void normalCursor();
00255
00260 void askSaveLogs();
00261
00266 void askConfigureLogging();
00267
00271 void easterEgg();
00272
00273
00274 signals:
00278 void wmClose();
00279
00280
00281 protected:
00282
00289 void idleLoop( int fd_ycp );
00290
00297 YCPString glyph( const YCPSymbol & glyphSymbol );
00298
00304 YEvent * userInput( unsigned long timeout_millisec = 0 );
00305
00311 YEvent * pollInput();
00312
00318 YDialog * createDialog( YWidgetOpt & opt );
00319
00325 void showDialog( YDialog * dialog );
00326
00332 void closeDialog( YDialog * dialog );
00333
00339 bool eventFilter( QObject * obj, QEvent * ev );
00340
00347 bool showEventFilter( QObject * obj, QEvent * ev );
00348
00353 void loadPredefinedQtTranslations();
00354
00361 void setLangFonts( const YCPString & language );
00362
00372 QString fontKey( const QString & lang );
00373
00378 void setAllFontsDirty();
00379
00385 void pickAutoFonts();
00386
00395 bool autoFonts() const { return _auto_fonts; }
00396
00397
00398
00399
00400 YContainerWidget * createAlignment ( YWidget * parent, YWidgetOpt & opt, YAlignmentType horAlign, YAlignmentType vertAlign );
00401 YContainerWidget * createFrame ( YWidget * parent, YWidgetOpt & opt, const YCPString & label );
00402 YContainerWidget * createRadioButtonGroup ( YWidget * parent, YWidgetOpt & opt);
00403 YContainerWidget * createReplacePoint ( YWidget * parent, YWidgetOpt & opt);
00404 YContainerWidget * createSplit ( YWidget * parent, YWidgetOpt & opt, YUIDimension dimension);
00405 YContainerWidget * createSquash ( YWidget * parent, YWidgetOpt & opt, bool horSquash, bool vertSquash);
00406 YContainerWidget * createWeight ( YWidget * parent, YWidgetOpt & opt, YUIDimension dim, long weight);
00407
00408 YWidget * createCheckBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, bool checked);
00409 YWidget * createComboBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00410 YWidget * createEmpty ( YWidget * parent, YWidgetOpt & opt);
00411 YWidget * createImage ( YWidget * parent, YWidgetOpt & opt, YCPByteblock imageData, YCPString fallbackText );
00412 YWidget * createImage ( YWidget * parent, YWidgetOpt & opt, YCPString fileName, YCPString fallbackText );
00413 YWidget * createIntField ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, int minValue, int maxValue, int initialValue);
00414 YWidget * createLabel ( YWidget * parent, YWidgetOpt & opt, const YCPString & text);
00415 YWidget * createLogView ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, int visibleLines, int maxLines );
00416 YWidget * createMultiLineEdit ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, const YCPString & text);
00417 YWidget * createProgressBar ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, const YCPInteger & maxProgress, const YCPInteger & currentProgress );
00418 YWidget * createPackageSelector ( YWidget * parent, YWidgetOpt & opt, const YCPString & floppyDevice );
00419 YWidget * createPushButton ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00420 YWidget * createMenuButton ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00421 YWidget * createRadioButton ( YWidget * parent, YWidgetOpt & opt, YRadioButtonGroup * rbg, const YCPString & label, bool checked);
00422 YWidget * createRichText ( YWidget * parent, YWidgetOpt & opt, const YCPString & text);
00423 YWidget * createSelectionBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00424 YWidget * createMultiSelectionBox ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00425 YWidget * createSpacing ( YWidget * parent, YWidgetOpt & opt, float size, bool horizontal, bool vertical);
00426 YWidget * createTable ( YWidget * parent, YWidgetOpt & opt, vector<string> header);
00427 YWidget * createTextEntry ( YWidget * parent, YWidgetOpt & opt, const YCPString & label, const YCPString & text);
00428 YWidget * createTree ( YWidget * parent, YWidgetOpt & opt, const YCPString & label);
00429 YWidget * createPkgSpecial ( YWidget * parent, YWidgetOpt & opt, const YCPString & subwidget );
00430
00431
00432
00433
00434 bool hasBarGraph();
00435 YWidget * createBarGraph ( YWidget * parent, YWidgetOpt & opt);
00436
00437
00438 bool hasColoredLabel();
00439 YWidget * createColoredLabel ( YWidget * parent,
00440 YWidgetOpt & opt,
00441 YCPString label,
00442 YColor foreground,
00443 YColor background,
00444 int margin );
00445
00446 bool hasDate();
00447 YWidget * createDate ( YWidget * parent,
00448 YWidgetOpt & opt,
00449 const YCPString & label,
00450 const YCPString & date);
00451
00452 bool hasTime();
00453 YWidget * createTime ( YWidget * parent,
00454 YWidgetOpt & opt,
00455 const YCPString & label,
00456 const YCPString & time);
00457
00458 bool hasDownloadProgress();
00459 YWidget * createDownloadProgress ( YWidget * parent,
00460 YWidgetOpt & opt,
00461 const YCPString & label,
00462 const YCPString & filename,
00463 int expectedSize );
00464
00465 bool hasDumbTab();
00466 YWidget * createDumbTab ( YWidget * parent,
00467 YWidgetOpt & opt );
00468
00469 bool hasMultiProgressMeter();
00470 YWidget * createMultiProgressMeter( YWidget * parent,
00471 YWidgetOpt & opt,
00472 bool horizontal,
00473 const YCPList & maxValues );
00474
00475 bool hasSlider();
00476 YWidget * createSlider ( YWidget * parent,
00477 YWidgetOpt & opt,
00478 const YCPString & label,
00479 int minValue,
00480 int maxValue,
00481 int initialValue );
00482
00483 bool hasPartitionSplitter();
00484 YWidget * createPartitionSplitter( YWidget * parent,
00485 YWidgetOpt & opt,
00486 int usedSize,
00487 int totalFreeSize,
00488 int newPartSize,
00489 int minNewPartSize,
00490 int minFreeSize,
00491 const YCPString & usedLabel,
00492 const YCPString & freeLabel,
00493 const YCPString & newPartLabel,
00494 const YCPString & freeFieldLabel,
00495 const YCPString & newPartFieldLabel );
00496
00497 bool hasWizard();
00498 YWidget * createWizard ( YWidget * parent, YWidgetOpt & opt,
00499 const YCPValue & backButtonId, const YCPString & backButtonLabel,
00500 const YCPValue & abortButtonId, const YCPString & abortButtonLabel,
00501 const YCPValue & nextButtonId, const YCPString & nextButtonLabel );
00502
00503
00504
00505
00506
00507
00508 public:
00509
00523 YCPValue askForExistingDirectory ( const YCPString & startDir,
00524 const YCPString & headline );
00525
00540 YCPValue askForExistingFile ( const YCPString & startWith,
00541 const YCPString & filter,
00542 const YCPString & headline );
00543
00559 YCPValue askForSaveFileName ( const YCPString & startWith,
00560 const YCPString & filter,
00561 const YCPString & headline );
00562
00567 QString askForSaveFileName( const QString & startWith,
00568 const QString & filter,
00569 const QString & headline );
00570
00574 QWidget* mainWidget();
00575
00579 static void setTextdomain( const char * domain );
00580
00584 static QPalette YQUI::visionImpairedPalette();
00585
00589 QPalette normalPalette() const { return _normalPalette; }
00590
00594 void toggleVisionImpairedPalette();
00595
00600 bool usingVisionImpairedPalette() const { return _usingVisionImpairedPalette; }
00601
00609 virtual long deviceUnits( YUIDimension dim, float layout_units );
00610
00618 virtual float layoutUnits( YUIDimension dim, long device_units );
00619
00620
00621 protected:
00622
00627 YCPValue setLanguage( const YCPTerm & term );
00628
00629
00635 int getDisplayWidth();
00636 int getDisplayHeight();
00637 int getDisplayDepth();
00638 long getDisplayColors();
00639 int getDefaultWidth();
00640 int getDefaultHeight();
00641 bool textMode() { return false; }
00642 bool hasImageSupport() { return true; }
00643 bool hasLocalImageSupport() { return true; }
00644 bool hasAnimationSupport() { return true; }
00645 bool hasIconSupport() { return false; }
00646 bool hasFullUtf8Support() { return true; }
00647 bool richTextSupportsTable() { return true; }
00648
00649
00650 QMap<QString, int> screenShotNo;
00651 QString screenShotNameTemplate;
00652
00653
00654 protected slots:
00655
00659 bool close();
00660
00664 void userInputTimeout();
00665
00669 void leaveIdleLoop( int );
00670
00671
00672 protected:
00673
00677 void processCommandLineArgs( int argc, char **argv );
00678
00682 void calcDefaultSize();
00683
00684
00685
00686
00687
00688
00692 bool _have_wm;
00693
00697 bool _fullscreen;
00698
00702 bool _decorate_toplevel_window;
00703
00707 bool _debug_embedding;
00708
00714 QVBox * _main_win;
00715
00719 QWidgetStack * _widget_stack;
00720
00724 vector<QWidget *> _popup_stack;
00725
00729 int _main_dialog_id;
00730
00734 QSize _default_size;
00735
00741 bool _leave_idle_loop;
00742
00748 bool _do_exit_loop;
00749
00750
00754 QString _font_family;
00755
00759 QY2Settings * _lang_fonts;
00760
00764 QFont _current_font;
00765 bool _loaded_current_font;
00766
00770 QFont _bold_font;
00771 bool _loaded_bold_font;
00772
00776 QFont _heading_font;
00777 bool _loaded_heading_font;
00778
00782 bool _auto_fonts;
00783 int _auto_normal_font_size;
00784 int _auto_heading_font_size;
00785
00789 bool _wm_close_blocked;
00790
00795 bool _auto_activate_dialogs;
00796
00800 static YQUI * _ui;
00801
00805 bool _fatal_error;
00806
00810 QTimer _user_input_timer;
00811
00815 QTimer _busy_cursor_timer;
00816
00820 YSimpleEventHandler _event_handler;
00821
00825 QTranslator _qtTranslations;
00826
00827
00831 static QWidget * _embeddingParent;
00832
00836 bool _running_embedded;
00837
00841 QPalette _normalPalette;
00842
00846 bool _usingVisionImpairedPalette;
00847 };
00848
00849
00850 #endif // YQUI_h