UIListView.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  2. // Please see LICENSE.md in repository root for license information
  3. // https://github.com/AtomicGameEngine/AtomicGameEngine
  4. #pragma once
  5. #include "AEWidget.h"
  6. #include <TurboBadger/tb_menu_window.h>
  7. #include <TurboBadger/tb_select.h>
  8. using namespace Atomic;
  9. namespace AtomicEditor
  10. {
  11. class ListViewItemSource;
  12. class ListViewItemWidget;
  13. class ListViewItem : public TBGenericStringItem
  14. {
  15. bool expanded_;
  16. public:
  17. ListViewItem(const char *str, const TBID &id, const char* icon, ListViewItemSource* source)
  18. : TBGenericStringItem(str, id), source_(source), parent_(0),
  19. depth_(0), widget_(0), expanded_(false), icon_(icon)
  20. {
  21. }
  22. ListViewItem* AddChild(const char* text, const char* icon, const TBID &id);
  23. bool GetExpanded() { return expanded_; }
  24. void SetExpanded(bool expanded)
  25. {
  26. expanded_ = expanded;
  27. if (!expanded_)
  28. {
  29. for (unsigned i = 0; i < children_.Size(); i ++)
  30. children_[i]->SetExpanded(expanded);
  31. }
  32. else
  33. {
  34. ListViewItem* p = parent_;
  35. while (p)
  36. {
  37. p->expanded_ = true;
  38. p = p->parent_;
  39. }
  40. }
  41. }
  42. ListViewItemSource* source_;
  43. ListViewItem* parent_;
  44. int depth_;
  45. PODVector<ListViewItem*> children_;
  46. ListViewItemWidget* widget_;
  47. String icon_;
  48. };
  49. class ListViewItemWidget : public TBLayout
  50. {
  51. public:
  52. ListViewItemWidget(ListViewItem *item, ListViewItemSource *source, TBSelectItemViewer *sourceviewer, int index);
  53. virtual bool OnEvent(const TBWidgetEvent &ev);
  54. private:
  55. ListViewItemSource *source_;
  56. TBSelectItemViewer *sourceviewer_;
  57. int index_;
  58. ListViewItem* item_;
  59. };
  60. class ListViewItemSource : public TBSelectItemSourceList<ListViewItem>
  61. {
  62. public:
  63. TBSelectList* list_;
  64. ListViewItemSource(TBSelectList* list) : list_(list) {}
  65. virtual ~ListViewItemSource() {}
  66. virtual bool Filter(int index, const char *filter);
  67. virtual TBWidget *CreateItemWidget(int index, TBSelectItemViewer *viewer);
  68. };
  69. class ListView : public AEWidget
  70. {
  71. OBJECT(ListView);
  72. TBSelectList* rootList_;
  73. ListViewItemSource* source_;
  74. public:
  75. /// Construct.
  76. ListView(Context* context, const TBID& id);
  77. /// Destruct.
  78. virtual ~ListView();
  79. ListViewItem* AddItem(const char* text, const char* icon, const TBID &id)
  80. {
  81. ListViewItem* item = new ListViewItem(text, id, icon, source_);
  82. source_->AddItem(item);
  83. return item;
  84. }
  85. ListViewItem* GetItem(int index)
  86. {
  87. return source_->GetItem(index);
  88. }
  89. int GetNumItems()
  90. {
  91. return source_->GetNumItems();
  92. }
  93. void DeleteAllItems()
  94. {
  95. source_->DeleteAllItems();
  96. }
  97. TBSelectList* GetRootList() { return rootList_; }
  98. void SelectItemByID(const TBID &id);
  99. bool OnEvent(const TBWidgetEvent &ev);
  100. private:
  101. };
  102. }