00001 #ifndef MYTHLISTBUTTON_H_
00002 #define MYTHLISTBUTTON_H_
00003
00004 #include "mythuitype.h"
00005 #include "mythuiimage.h"
00006 #include "mythuitext.h"
00007 #include "mythuibutton.h"
00008 #include "mythgesture.h"
00009
00010 class MythListButtonItem;
00011 class MythFontProperties;
00012 class MythUIStateType;
00013
00014 class MythListButton : public MythUIType
00015 {
00016 Q_OBJECT
00017 public:
00018 MythListButton(MythUIType *parent, const char *name);
00019 MythListButton(MythUIType *parent, const char *name,
00020 const QRect &area, bool showArrow = true,
00021 bool showScrollArrows = false);
00022 ~MythListButton();
00023
00024 virtual bool keyPressEvent(QKeyEvent *);
00025 virtual void gestureEvent(MythUIType *uitype, MythGestureEvent *event);
00026 virtual MythUIType *GetChildAt(const QPoint &p);
00027
00028 void SetFontActive(const MythFontProperties &font);
00029 void SetFontInactive(const MythFontProperties &font);
00030
00031 void SetTextFlags(int flags);
00032
00033 void SetSpacing(int spacing);
00034 void SetMargin(int margin);
00035 void SetDrawFromBottom(bool draw);
00036
00037 void SetActive(bool active);
00038 bool isActive() { return m_active; }
00039 void Reset();
00040
00041 void SetItemCurrent(MythListButtonItem* item);
00042 void SetItemCurrent(int pos);
00043 MythListButtonItem* GetItemCurrent();
00044 MythListButtonItem* GetItemFirst();
00045 MythListButtonItem* GetItemNext(MythListButtonItem *item);
00046 MythListButtonItem* GetItemAt(int pos);
00047
00048 bool MoveItemUpDown(MythListButtonItem *item, bool flag);
00049
00050 QPtrListIterator<MythListButtonItem> GetIterator();
00051
00052 int GetCurrentPos() { return m_selPosition; }
00053 int GetItemPos(MythListButtonItem* item);
00054 int GetCount();
00055 bool IsEmpty();
00056
00057 enum MovementUnit { MoveItem, MoveColumn, MoveRow, MovePage, MoveMax };
00058 enum LayoutType { LayoutVertical, LayoutHorizontal, LayoutGrid };
00059 void MoveDown(MovementUnit unit = MoveItem);
00060 void MoveUp(MovementUnit unit = MoveItem);
00061 bool MoveToNamedPosition(const QString &position_name);
00062
00063 void SetDrawOffset(QPoint off) { m_drawoffset = off; }
00064 QPoint GetDrawOffset(void) { return m_drawoffset; }
00065
00066 public slots:
00067 void Select() { SetActive(true); }
00068 void Deselect() { SetActive(false); }
00069
00070 signals:
00071 void itemSelected(MythListButtonItem* item);
00072 void itemClicked(MythListButtonItem* item);
00073
00074 protected:
00075 void Const();
00076 virtual void Init();
00077 void LoadPixmap(MythImage **pix, QDomElement &element);
00078
00079 void InsertItem(MythListButtonItem *item);
00080 void RemoveItem(MythListButtonItem *item);
00081
00082 void SetPositionArrowStates(void);
00083
00084
00085 virtual uint ItemWidth(void) const { return m_itemWidth; }
00086 virtual QRect CalculateContentsRect(const QRect &arrowsRect) const;
00087 virtual void CalculateVisibleItems(void);
00088 virtual const QRect PlaceArrows(const QSize &arrowSize);
00089 virtual QPoint GetButtonPosition(int column, int row) const;
00090
00091 virtual bool ParseElement(QDomElement &element);
00092 virtual void CopyFrom(MythUIType *base);
00093 virtual void CreateCopy(MythUIType *parent);
00094 virtual void Finalize(void);
00095
00096
00097
00098 LayoutType m_layout;
00099
00100 int m_order;
00101 QRect m_rect;
00102 QRect m_contentsRect;
00103
00104 int m_itemHeight;
00105 int m_itemHorizSpacing;
00106 int m_itemVertSpacing;
00107 int m_itemMargin;
00108 uint m_itemsVisible;
00109 int m_rows;
00110 int m_columns;
00111 int m_itemWidth;
00112
00113 bool m_active;
00114 bool m_showScrollArrows;
00115 bool m_showArrow;
00116
00117 MythUIStateType *m_upArrow;
00118 MythUIStateType *m_downArrow;
00119
00120 QValueVector<MythUIButton *> m_ButtonList;
00121
00122 MythFontProperties *m_fontActive;
00123 MythFontProperties *m_fontInactive;
00124
00125 bool m_initialized;
00126 bool m_clearing;
00127
00128 MythListButtonItem* m_topItem;
00129 MythListButtonItem* m_selItem;
00130
00131 QPtrListIterator<MythListButtonItem> *m_topIterator;
00132 QPtrListIterator<MythListButtonItem> *m_selIterator;
00133
00134 int m_selPosition;
00135 int m_topPosition;
00136 int m_itemCount;
00137
00138 QPtrList<MythListButtonItem> m_itemList;
00139
00140 QPoint m_drawoffset;
00141 bool m_drawFromBottom;
00142
00143 int m_textFlags;
00144
00145 MythImage *arrowPix, *checkNonePix, *checkHalfPix, *checkFullPix;
00146 MythImage *itemRegPix, *itemSelActPix, *itemSelInactPix;
00147
00148 friend class MythListButtonItem;
00149 };
00150
00151 class MythListButtonItem
00152 {
00153 public:
00154 enum CheckState {
00155 CantCheck = -1,
00156 NotChecked = 0,
00157 HalfChecked,
00158 FullChecked
00159 };
00160
00161 MythListButtonItem(MythListButton *lbtype, const QString& text,
00162 MythImage *image = 0, bool checkable = false,
00163 CheckState state = CantCheck, bool showArrow = false);
00164 ~MythListButtonItem();
00165
00166 MythListButton *parent() const;
00167
00168 void setText(const QString &text);
00169 QString text() const;
00170
00171 void setImage(MythImage *image);
00172 const MythImage *image() const;
00173
00174 bool checkable() const;
00175 void setCheckable(bool flag);
00176
00177 CheckState state() const;
00178 void setChecked(CheckState state);
00179
00180 void setDrawArrow(bool flag);
00181
00182 void setData(void *data);
00183 void *getData();
00184
00185 void setOverrideInactive(bool flag);
00186 bool getOverrideInactive(void);
00187
00188 bool moveUpDown(bool flag);
00189
00190 void SetToRealButton(MythUIButton *button, bool active_on);
00191
00192 protected:
00193 MythListButton *m_parent;
00194 QString m_text;
00195 MythImage *m_image;
00196 bool m_checkable;
00197 CheckState m_state;
00198 void *m_data;
00199 bool m_showArrow;
00200 bool m_overrideInactive;
00201
00202 friend class MythListButton;
00203 };
00204
00205 #endif