| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- // ================================================================================
- // == This file is a part of Turbo Badger. (C) 2011-2014, Emil Segerås ==
- // == See tb_core.h for more information. ==
- // ================================================================================
- #ifndef TB_SELECT_H
- #define TB_SELECT_H
- #include "tb_window.h"
- #include "tb_scroll_container.h"
- #include "tb_select_item.h"
- namespace tb {
- class TBMenuWindow;
- typedef int (*TBSelectListSortCallback)(TBSelectItemSource *source, const int *a, const int *b);
- /** TBSelectList shows a scrollable list of items provided by a TBSelectItemSource. */
- class TBSelectList : public TBWidget, public TBSelectItemViewer
- {
- public:
- // For safe typecasting
- TBOBJECT_SUBCLASS(TBSelectList, TBWidget);
- TBSelectList();
- ~TBSelectList();
- /** Get the default item source for this widget. This source can be used to add
- items of type TBGenericStringItem to this widget.
- It is the item source that is fed from resource files.
- If you need to add other types of items, or if you want to share item sources
- between several TBSelectDropDown/TBSelectList widgets, use SetSource using a
- external item source. */
- TBGenericStringItemSource *GetDefaultSource() { return &m_default_source; }
- /** Set filter string so only matching items will be showed.
- Set nullptr or empty string to remove filter and show all items. */
- void SetFilter(const char *filter);
- const char *GetFilter() const { return m_filter; }
- void SetSortCallback(TBSelectListSortCallback callback) { m_sort_callback = callback; }
- /** Set the language string id for the header. The header is shown
- at the top of the list when only a subset of all items are shown. */
- void SetHeaderString(const TBID& id);
- /** Make the list update its items to reflect the items from the
- in the current source. The update will take place next time
- the list is validated. */
- void InvalidateList();
- /** Make sure the list is reflecting the current items in the source. */
- void ValidateList();
- /** The value is the selected item. In lists with multiple selectable
- items it's the item that is the current focus. */
- virtual void SetValue(int value);
- virtual int GetValue() { return m_value; }
- /** Get the ID of the selected item, or 0 if there is no item selected. */
- TBID GetSelectedItemID();
- /** Change the value to a non disabled item that is visible with the current
- filter. Returns true if it successfully found another item.
- Valid keys:
- TB_KEY_UP - Previous item.
- TB_KEY_DOWN - Next item.
- TB_KEY_HOME - First item.
- TB_KEY_END - Last item. */
- bool ChangeValue(SPECIAL_KEY key);
- /** Set the selected state of the item at the given index. If you want
- to unselect the previously selected item, use SetValue. */
- void SelectItem(int index, bool selected);
- TBWidget *GetItemWidget(int index);
- bool GetItemSelected(int index);
- /** Scroll to the current selected item. The scroll may be delayed until
- the items has been layouted if the layout is currently invalid. */
- void ScrollToSelectedItem();
- /** Return the scrollcontainer used in this list. */
- TBScrollContainer *GetScrollContainer() { return &m_container; }
- TBID GetItemID(int index) const;
- int GetNumItems() const;
- void SetUIListView(bool value) { m_ui_list_view = value; }
- virtual void OnInflate(const INFLATE_INFO &info);
- virtual void OnSkinChanged();
- virtual void OnProcess();
- virtual void OnProcessAfterChildren();
- virtual bool OnEvent(const TBWidgetEvent &ev);
- // == TBSelectItemViewer ==================================================
- virtual void OnSourceChanged();
- virtual void OnItemChanged(int index);
- virtual void OnItemAdded(int index);
- virtual void OnItemRemoved(int index);
- virtual void OnAllItemsRemoved();
- protected:
- TBScrollContainer m_container;
- TBLayout m_layout;
- TBGenericStringItemSource m_default_source;
- int m_value;
- TBStr m_filter;
- bool m_list_is_invalid;
- bool m_scroll_to_current;
- bool m_ui_list_view;
- TBID m_header_lng_string_id;
- private:
- TBSelectListSortCallback m_sort_callback;
- TBWidget *CreateAndAddItemAfter(int index, TBWidget *reference);
- void SelectAllItems(bool select = false);
- };
- /** TBSelectDropdown shows a button that opens a popup with a TBSelectList with items
- provided by a TBSelectItemSource. */
- class TBSelectDropdown : public TBButton, public TBSelectItemViewer
- {
- public:
- // For safe typecasting
- TBOBJECT_SUBCLASS(TBSelectDropdown, TBButton);
- TBSelectDropdown();
- ~TBSelectDropdown();
- /** Get the default item source for this widget. This source can be used to add
- items of type TBGenericStringItem to this widget.
- It is the item source that is fed from resource files.
- If you need to add other types of items, or if you want to share item sources
- between several TBSelectDropDown/TBSelectList widgets, use SetSource using a
- external item source. */
- TBGenericStringItemSource *GetDefaultSource() { return &m_default_source; }
- /** Set the selected item. */
- virtual void SetValue(int value);
- virtual int GetValue() { return m_value; }
- /** Get the ID of the selected item, or 0 if there is no item selected. */
- TBID GetSelectedItemID();
- /** Open the window if the model has items. */
- void OpenWindow();
- /** Close the window if it is open. */
- void CloseWindow();
- /** Return the menu window if it's open, or nullptr. */
- TBMenuWindow *GetMenuIfOpen() const;
- virtual void OnInflate(const INFLATE_INFO &info);
- virtual bool OnEvent(const TBWidgetEvent &ev);
- // == TBSelectItemViewer ==================================================
- virtual void OnSourceChanged();
- virtual void OnItemChanged(int index);
- virtual void OnItemAdded(int index) {}
- virtual void OnItemRemoved(int index) {}
- virtual void OnAllItemsRemoved() {}
- protected:
- TBGenericStringItemSource m_default_source;
- TBSkinImage m_arrow;
- int m_value;
- TBWidgetSafePointer m_window_pointer; ///< Points to the dropdown window if opened
- };
- }; // namespace tb
- #endif // TB_SELECT_H
|