00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef MMSWIDGET_H_
00033 #define MMSWIDGET_H_
00034
00035 #include "mmstools/mmstafffile.h"
00036 #include "mmstools/mmslogger.h"
00037 #include "mmsgui/theme/mmstheme.h"
00038 #include "mmsgui/mmsguitools.h"
00039
00040
00041 #define searchForWidget findWidget
00042 #define searchForWidgetType findWidgetType
00043
00044
00045 MMS_CREATEERROR(MMSWidgetError);
00046
00047
00048
00049 typedef enum {
00050
00051 MMSWIDGETTYPE_HBOX = 0,
00052
00053 MMSWIDGETTYPE_VBOX,
00054
00055 MMSWIDGETTYPE_BUTTON,
00056
00057 MMSWIDGETTYPE_IMAGE,
00058
00059 MMSWIDGETTYPE_LABEL,
00060
00061 MMSWIDGETTYPE_MENU,
00062
00063 MMSWIDGETTYPE_PROGRESSBAR,
00064
00065 MMSWIDGETTYPE_TEXTBOX,
00066
00067 MMSWIDGETTYPE_ARROW,
00068
00069 MMSWIDGETTYPE_SLIDER,
00070
00071 MMSWIDGETTYPE_INPUT,
00072
00073 MMSWIDGETTYPE_CHECKBOX,
00074
00075 MMSWIDGETTYPE_GAP,
00076
00077 MMSWIDGETTYPE_CANVAS,
00078
00079 } MMSWIDGETTYPE;
00080
00081
00082
00083 class MMSWindow;
00084
00085 extern string MMSWidget_inputmode;
00086
00087
00088 typedef int MMSWIDGET_SCROLL_MODE;
00089
00090 #define MMSWIDGET_SCROLL_MODE_SETSELECTED 0x01
00091 #define MMSWIDGET_SCROLL_MODE_SETPRESSED 0x02
00092 #define MMSWIDGET_SCROLL_MODE_RMPRESSED 0x04
00093
00094
00095
00096
00097
00098
00099
00100
00101 class MMSWidget {
00102 private:
00103
00104 MMSWIDGETTYPE type;
00105
00106
00107 typedef struct {
00108
00109 MMSTheme *theme;
00110
00111 MMSWidgetClass *baseWidgetClass;
00112
00113 MMSWidgetClass *widgetClass;
00114
00115 MMSWidgetClass myWidgetClass;
00116
00117
00118 MMSFBSurface *bgimage;
00119
00120 MMSFBSurface *selbgimage;
00121
00122 MMSFBSurface *bgimage_p;
00123
00124 MMSFBSurface *selbgimage_p;
00125
00126 MMSFBSurface *bgimage_i;
00127
00128 MMSFBSurface *selbgimage_i;
00129
00130
00131 MMSFBSurface *borderimages[MMSBORDER_IMAGE_NUM_SIZE];
00132
00133 MMSFBRectangle bordergeom[MMSBORDER_IMAGE_NUM_SIZE];
00134
00135 bool bordergeomset;
00136
00137
00138 MMSFBSurface *borderselimages[MMSBORDER_IMAGE_NUM_SIZE];
00139
00140 MMSFBRectangle borderselgeom[MMSBORDER_IMAGE_NUM_SIZE];
00141
00142 bool borderselgeomset;
00143
00144
00145 MMSWidget *upArrowWidget;
00146
00147 MMSWidget *downArrowWidget;
00148
00149 MMSWidget *leftArrowWidget;
00150
00151 MMSWidget *rightArrowWidget;
00152
00153 bool initialArrowsDrawn;
00154
00155
00156 MMSWidget *navigateUpWidget;
00157
00158 MMSWidget *navigateDownWidget;
00159
00160 MMSWidget *navigateLeftWidget;
00161
00162 MMSWidget *navigateRightWidget;
00163
00164
00165 MMSWidget *vSliderWidget;
00166
00167 MMSWidget *hSliderWidget;
00168
00169
00170 MMSInputEvent last_inputevent;
00171
00172
00173 MMSFBRectangle pressed_inputrect;
00174
00175
00176 unsigned int scrollPosX;
00177
00178 unsigned int scrollPosY;
00179
00180 unsigned int scrollDX;
00181
00182 unsigned int scrollDY;
00183
00184
00185 MMSWidget *joinedWidget;
00186
00187 } MMSWIDGET_DRAWABLE_ATTRIBUTES;
00188
00189
00190 MMSWIDGET_DRAWABLE_ATTRIBUTES *da;
00191
00192
00193
00194 int id;
00195
00196
00197 string name;
00198
00199
00200 string sizehint;
00201
00202
00203 bool minmax_set;
00204
00205
00206 string min_width;
00207
00208
00209 int min_width_pix;
00210
00211
00212 string min_height;
00213
00214
00215 int min_height_pix;
00216
00217
00218 string max_width;
00219
00220
00221 int max_width_pix;
00222
00223
00224 string max_height;
00225
00226
00227 int max_height_pix;
00228
00229
00230 bool content_size_initialized;
00231
00232
00233 int content_width;
00234
00235
00236 int content_height;
00237
00238
00239 int content_width_child;
00240
00241
00242 int content_height_child;
00243
00244
00245
00246
00247 void *bindata;
00248
00249
00250 MMSWindow *rootwindow;
00251
00252
00253 MMSWindow *parent_rootwindow;
00254
00255
00256 bool drawable;
00257
00258
00259 bool needsparentdraw;
00260
00261
00262 bool focusable_initial;
00263
00264
00265 bool selectable_initial;
00266
00267
00268 bool clickable_initial;
00269
00270
00271 bool canhavechildren;
00272
00273
00274 bool canselectchildren;
00275
00276
00277 bool visible;
00278
00279
00280 bool focused;
00281
00282
00283 bool selected;
00284
00285
00286 bool pressed;
00287
00288
00289 unsigned char brightness;
00290
00291
00292 unsigned char opacity;
00293
00294
00295 bool has_own_surface;
00296
00297
00298
00299 bool skip_refresh;
00300
00301
00302 bool current_bgset;
00303
00304
00305 MMSFBColor current_bgcolor;
00306
00307
00308 MMSFBSurface *current_bgimage;
00309
00310
00311
00312
00313 bool loadArrowWidgets();
00314 virtual void switchArrowWidgets();
00315
00316 bool create(MMSWindow *root, bool drawable, bool needsparentdraw, bool focusable, bool selectable,
00317 bool canhavechildren, bool canselectchildren, bool clickable);
00318
00319 virtual bool init();
00320 virtual bool release();
00321
00322
00323
00324 bool setContentSize(int content_width, int content_height);
00325
00326
00327 virtual void setContentSizeFromChildren();
00328
00329
00330 bool getContentSize(int *content_width, int *content_height);
00331
00332
00333 void initContentSize();
00334
00335
00336 virtual void calcContentSize();
00337
00338
00339 bool recalcContentSize(bool refresh = true);
00340
00341
00342
00343
00344 void getBackground(MMSFBColor *color, MMSFBSurface **image);
00345
00346
00347 virtual bool enableRefresh(bool enable = true);
00348
00349
00350 virtual bool checkRefreshStatus();
00351
00352
00353 virtual bool draw(bool *backgroundFilled = NULL);
00354 void drawMyBorder();
00355 bool drawDebug();
00356
00357
00358 void themeChanged(string &themeName);
00359
00360
00361 virtual bool setSelected(bool set, bool refresh, bool *changed, bool joined);
00362 virtual bool setPressed(bool set, bool refresh, bool joined);
00363
00364 void resetPressed();
00365
00366 public:
00367 MMSWidget();
00368 virtual ~MMSWidget();
00369 MMSWIDGETTYPE getType();
00370 string getTypeString();
00371
00372 void copyWidget(MMSWidget *newWidget);
00373 virtual MMSWidget *copyWidget() = 0;
00374
00375 MMSWidget* getChild(unsigned int atpos = 0);
00376 MMSWidget* disconnectChild(unsigned int atpos = 0);
00377 MMSWidget* findWidget(string name);
00378 MMSWidget* findWidgetType(MMSWIDGETTYPE type);
00379 MMSWidget* getLastWidget();
00380 MMSWidget* operator[](string name);
00381
00382 virtual void add(MMSWidget *widget);
00383 MMSWindow *getRootWindow(MMSWindow **parentroot = NULL);
00384 virtual void setGeometry(MMSFBRectangle geom);
00385 MMSFBRectangle getGeometry();
00386 MMSFBRectangle getRealGeometry();
00387 MMSFBRectangle getInnerGeometry();
00388 MMSFBRectangle getSurfaceGeometry();
00389
00390 MMSFBSurface *getSurface();
00391
00392 int getId();
00393 string getName();
00394 void setName(string name);
00395 void setParent(MMSWidget *parent);
00396 MMSWidget *getParent();
00397
00398 void getJoinedWigdets(MMSWidget **caller_stack);
00399
00400 virtual void setFocus(bool set, bool refresh = true, MMSInputEvent *inputevent = NULL);
00401 bool isFocused();
00402 bool setSelected(bool set, bool refresh = true);
00403 bool isSelected();
00404 void unsetFocusableForAllChildren(bool refresh);
00405
00406 bool isActivated();
00407
00408 bool setPressed(bool set, bool refresh = true);
00409 bool isPressed();
00410
00411 void setASelected(bool set, bool refresh = true);
00412 void setPSelected(bool set, bool refresh = true);
00413 void setISelected(bool set, bool refresh = true);
00414
00415 bool isDrawable();
00416 bool needsParentDraw(bool checkborder = true);
00417 bool canHaveChildren();
00418 bool canSelectChildren();
00419
00420 void setBinData(void *data);
00421 void *getBinData();
00422 string getSizeHint();
00423 bool setSizeHint(string &hint);
00424 string getMinWidth();
00425 int getMinWidthPix();
00426 bool setMinWidth(string &min_width);
00427 string getMinHeight();
00428 int getMinHeightPix();
00429 bool setMinHeight(string &min_height);
00430 string getMaxWidth();
00431 int getMaxWidthPix();
00432 bool setMaxWidth(string &max_width);
00433 string getMaxHeight();
00434 int getMaxHeightPix();
00435 bool setMaxHeight(string &max_height);
00436 bool isGeomSet();
00437 void setGeomSet(bool set);
00438
00439 bool isVisible();
00440 virtual void setVisible(bool visible, bool refresh = true);
00441
00442 unsigned char getBrightness();
00443 void setBrightness(unsigned char brightness, bool refresh = true);
00444
00445 unsigned char getOpacity();
00446 void setOpacity(unsigned char opacity, bool refresh = true);
00447
00448 MMSWidget *getNavigateUpWidget();
00449 MMSWidget *getNavigateDownWidget();
00450 MMSWidget *getNavigateLeftWidget();
00451 MMSWidget *getNavigateRightWidget();
00452 void setNavigateUpWidget(MMSWidget *upwidget);
00453 void setNavigateDownWidget(MMSWidget *downwidget);
00454 void setNavigateRightWidget(MMSWidget *rightwidget);
00455 void setNavigateLeftWidget(MMSWidget *leftwidget);
00456
00457 bool canNavigateUp();
00458 bool canNavigateDown();
00459 bool canNavigateLeft();
00460 bool canNavigateRight();
00461
00462 virtual bool scrollDown(unsigned int count = 1, bool refresh = true, bool test = false, bool leave_selection = false);
00463 virtual bool scrollUp(unsigned int count = 1, bool refresh = true, bool test = false, bool leave_selection = false);
00464 virtual bool scrollRight(unsigned int count = 1, bool refresh = true, bool test = false, bool leave_selection = false);
00465 virtual bool scrollLeft(unsigned int count = 1, bool refresh = true, bool test = false, bool leave_selection = false);
00466 virtual bool scrollTo(int posx, int posy, bool refresh = true, bool *changed = NULL,
00467 MMSWIDGET_SCROLL_MODE mode = MMSWIDGET_SCROLL_MODE_SETSELECTED, MMSFBRectangle *inputrect = NULL);
00468
00469 sigc::signal<void, MMSWidget*> *onSelect;
00470 sigc::signal<void, MMSWidget*, bool> *onFocus;
00471 sigc::signal<void, MMSWidget*> *onReturn;
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491 sigc::signal<void, MMSWidget*, int, int, int, int> *onClick;
00492
00493 protected:
00494 virtual void drawchildren(bool toRedrawOnly = false, bool *backgroundFilled = NULL, MMSFBRectangle *rect2update = NULL);
00495 virtual void setRootWindow(MMSWindow *root, MMSWindow *parentroot = NULL);
00496 virtual void recalculateChildren();
00497 virtual void handleInput(MMSInputEvent *inputevent);
00498
00499 virtual bool callOnReturn();
00500 bool emitOnReturnCallback();
00501
00502 bool geomset;
00503
00504
00505 bool initialized;
00506
00507
00508 bool toRedraw;
00509 bool redrawChildren;
00510 void markChildren2Redraw();
00511 virtual MMSWidget *getDrawableParent(bool mark2Redraw = false, bool markChildren2Redraw = false,
00512 bool checkborder = true, vector<MMSWidget*> *wlist = NULL, bool followpath = false);
00513
00514
00515 MMSFBSurface *windowSurface;
00516
00517 MMSFBSurface *surface;
00518 MMSFBRectangle surfaceGeom;
00519
00520 virtual bool setSurfaceGeometry(unsigned int width = 0, unsigned int height = 0);
00521 virtual void setInnerGeometry();
00522
00523 bool setScrollSize(unsigned int dX = 8, unsigned int dY = 8);
00524 bool setScrollPos(int posX = 0, int posY = 0, bool refresh = true, bool test = false);
00525 MMSFBRectangle getVisibleSurfaceArea();
00526 void updateWindowSurfaceWithSurface(bool useAlphaChannel);
00527
00528 MMSWidget *parent;
00529 vector<MMSWidget *> children;
00530
00531 MMSFBRectangle geom;
00532 MMSFBRectangle innerGeom;
00533
00534 public:
00535 void refresh(bool required = true);
00536
00537
00538 bool getBgColor(MMSFBColor &bgcolor);
00539 bool getSelBgColor(MMSFBColor &selbgcolor);
00540 bool getBgColor_p(MMSFBColor &bgcolor_p);
00541 bool getSelBgColor_p(MMSFBColor &selbgcolor_p);
00542 bool getBgColor_i(MMSFBColor &bgcolor_i);
00543 bool getSelBgColor_i(MMSFBColor &selbgcolor_i);
00544 bool getBgImagePath(string &bgimagepath);
00545 bool getBgImageName(string &bgimagename);
00546 bool getSelBgImagePath(string &selbgimagepath);
00547 bool getSelBgImageName(string &selbgimagename);
00548 bool getBgImagePath_p(string &bgimagepath_p);
00549 bool getBgImageName_p(string &bgimagename_p);
00550 bool getSelBgImagePath_p(string &selbgimagepath_p);
00551 bool getSelBgImageName_p(string &selbgimagename_p);
00552 bool getBgImagePath_i(string &bgimagepath_i);
00553 bool getBgImageName_i(string &bgimagename_i);
00554 bool getSelBgImagePath_i(string &selbgimagepath_i);
00555 bool getSelBgImageName_i(string &selbgimagename_i);
00556 bool getMargin(unsigned int &margin);
00557 bool getFocusable(bool &focusable, bool check_selectable = true);
00558 bool getSelectable(bool &selectable);
00559 bool getUpArrow(string &uparrow);
00560 bool getDownArrow(string &downarrow);
00561 bool getLeftArrow(string &leftarrow);
00562 bool getRightArrow(string &rightarrow);
00563 bool getData(string &data);
00564 bool getNavigateUp(string &navigateup);
00565 bool getNavigateDown(string &navigatedown);
00566 bool getNavigateLeft(string &navigateleft);
00567 bool getNavigateRight(string &navigateright);
00568 bool getVSlider(string &vslider);
00569 bool getHSlider(string &hslider);
00570 bool getImagesOnDemand(bool &imagesondemand);
00571 bool getBlend(unsigned int &blend);
00572 bool getBlendFactor(double &blendfactor);
00573 bool getScrollOnFocus(bool &scrollonfocus);
00574 bool getClickable(bool &clickable);
00575 bool getReturnOnScroll(bool &returnonscroll);
00576 bool getInputMode(string &inputmode);
00577 bool getInputModeEx(string &inputmode);
00578 bool getJoinedWidget(string &joinedwidget);
00579 bool getActivated(bool &activated);
00580
00581 bool getBorderColor(MMSFBColor &color);
00582 bool getBorderSelColor(MMSFBColor &selcolor);
00583 bool getBorderImagePath(string &imagepath);
00584 bool getBorderImageNames(MMSBORDER_IMAGE_NUM num, string &imagename);
00585 bool getBorderSelImagePath(string &selimagepath);
00586 bool getBorderSelImageNames(MMSBORDER_IMAGE_NUM num, string &selimagename);
00587 bool getBorderThickness(unsigned int &thickness);
00588 bool getBorderMargin(unsigned int &margin);
00589 bool getBorderRCorners(bool &rcorners);
00590
00591 bool setBgColor(MMSFBColor bgcolor, bool refresh = true);
00592 bool setSelBgColor(MMSFBColor selbgcolor, bool refresh = true);
00593 bool setBgColor_p(MMSFBColor bgcolor_p, bool refresh = true);
00594 bool setSelBgColor_p(MMSFBColor selbgcolor_p, bool refresh = true);
00595 bool setBgColor_i(MMSFBColor bgcolor_i, bool refresh = true);
00596 bool setSelBgColor_i(MMSFBColor selbgcolor_i, bool refresh = true);
00597 bool setBgImagePath(string bgimagepath, bool load = true, bool refresh = true);
00598 bool setBgImageName(string bgimagename, bool load = true, bool refresh = true);
00599 bool setSelBgImagePath(string selbgimagepath, bool load = true, bool refresh = true);
00600 bool setSelBgImageName(string selbgimagename, bool load = true, bool refresh = true);
00601 bool setBgImagePath_p(string bgimagepath_p, bool load = true, bool refresh = true);
00602 bool setBgImageName_p(string bgimagename_p, bool load = true, bool refresh = true);
00603 bool setSelBgImagePath_p(string selbgimagepath_p, bool load = true, bool refresh = true);
00604 bool setSelBgImageName_p(string selbgimagename_p, bool load = true, bool refresh = true);
00605 bool setBgImagePath_i(string bgimagepath_i, bool load = true, bool refresh = true);
00606 bool setBgImageName_i(string bgimagename_i, bool load = true, bool refresh = true);
00607 bool setSelBgImagePath_i(string selbgimagepath_i, bool load = true, bool refresh = true);
00608 bool setSelBgImageName_i(string selbgimagename_i, bool load = true, bool refresh = true);
00609 bool setMargin(unsigned int margin, bool refresh = true);
00610 bool setFocusable(bool focusable, bool refresh = true);
00611 bool setSelectable(bool selectable, bool refresh = true);
00612 bool setUpArrow(string uparrow, bool refresh = true);
00613 bool setDownArrow(string downarrow, bool refresh = true);
00614 bool setLeftArrow(string leftarrow, bool refresh = true);
00615 bool setRightArrow(string rightarrow, bool refresh = true);
00616 bool setData(string data);
00617 bool setNavigateUp(string navigateup);
00618 bool setNavigateDown(string navigatedown);
00619 bool setNavigateLeft(string navigateleft);
00620 bool setNavigateRight(string navigateright);
00621 bool setVSlider(string vslider);
00622 bool setHSlider(string hslider);
00623 bool setImagesOnDemand(bool imagesondemand);
00624 bool setBlend(unsigned int blend, bool refresh = true);
00625 bool setBlendFactor(double blendfactor, bool refresh = true);
00626 bool setScrollOnFocus(bool scrollonfocus);
00627 bool setClickable(bool clickable);
00628 bool setReturnOnScroll(bool returnonscroll);
00629 bool setInputMode(string inputmode);
00630 bool setJoinedWidget(string joinedwidget);
00631 bool setActivated(bool activated, bool refresh = true);
00632
00633 bool setBorderColor(MMSFBColor bordercolor, bool refresh = true);
00634 bool setBorderSelColor(MMSFBColor borderselcolor, bool refresh = true);
00635 bool setBorderImagePath(string borderimagepath, bool load = true, bool refresh = true);
00636 bool setBorderImageNames(string imagename_1, string imagename_2, string imagename_3, string imagename_4,
00637 string imagename_5, string imagename_6, string imagename_7, string imagename_8,
00638 bool load = true, bool refresh = true);
00639 bool setBorderSelImagePath(string borderselimagepath, bool load = true, bool refresh = true);
00640 bool setBorderSelImageNames(string selimagename_1, string selimagename_2, string selimagename_3, string selimagename_4,
00641 string selimagename_5, string selimagename_6, string selimagename_7, string selimagename_8,
00642 bool load = true, bool refresh = true);
00643 bool setBorderThickness(unsigned int borderthickness, bool refresh = true);
00644 bool setBorderMargin(unsigned int bordermargin, bool refresh = true);
00645 bool setBorderRCorners(bool borderrcorners, bool refresh = true);
00646
00647 void updateFromThemeClass(MMSWidgetClass *themeClass);
00648
00649
00650 friend class MMSDialogManager;
00651 friend class MMSWindow;
00652 friend class MMSHBoxWidget;
00653 friend class MMSVBoxWidget;
00654 friend class MMSLabelWidget;
00655 friend class MMSButtonWidget;
00656 friend class MMSImageWidget;
00657 friend class MMSProgressBarWidget;
00658 friend class MMSMenuWidget;
00659 friend class MMSTextBoxWidget;
00660 friend class MMSArrowWidget;
00661 friend class MMSSliderWidget;
00662 friend class MMSInputWidget;
00663 friend class MMSCheckBoxWidget;
00664 friend class MMSGapWidget;
00665 friend class MMSCanvasWidget;
00666 };
00667
00668 #include "mmswindow.h"
00669
00670 #endif