| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
- // Please see LICENSE.md in repository root for license information
- // https://github.com/AtomicGameEngine/AtomicGameEngine
- #include "AtomicEditor.h"
- #include <Atomic/UI/UI.h>
- #include <Atomic/IO/Log.h>
- #include "UIListView.h"
- using namespace tb;
- namespace AtomicEditor
- {
- ListViewItem* ListViewItem::AddChild(const char *text, const char* icon, const TBID &id)
- {
- ListViewItem* child = new ListViewItem(text, id, icon, source_);
- child->parent_ = this;
- child->depth_ = depth_ + 1;
- source_->AddItem(child);
- children_.Push(child);
- return child;
- }
- ListViewItemWidget::ListViewItemWidget(ListViewItem *item, ListViewItemSource *source,
- TBSelectItemViewer *sourceviewer, int index)
- : source_(source)
- , sourceviewer_(sourceviewer)
- , index_(index)
- , item_(item)
- {
- SetLayoutDistribution(LAYOUT_DISTRIBUTION_GRAVITY);
- SetLayoutDistributionPosition(LAYOUT_DISTRIBUTION_POSITION_LEFT_TOP);
- SetPaintOverflowFadeout(false);
- item_->widget_ = this;
- for (int i = 0; i < item->depth_; i++)
- {
- LayoutParams lp;
- lp.SetWidth(6);
- lp.SetHeight(4);
- TBWidget* spacer = new TBWidget();
- spacer->SetLayoutParams(lp);
- GetContentRoot()->AddChild(spacer);
- }
- if (item->icon_.Length())
- {
- TBSkinImage* skinImage = new TBSkinImage(TBIDC(item->icon_.CString()));
- skinImage->SetIgnoreInput(true);
- GetContentRoot()->AddChild(skinImage);
- }
- TBFontDescription fd;
- fd.SetID(TBIDC("Vera"));
- fd.SetSize(11);
- TBTextField* tfield = new TBTextField();
- tfield->SetIgnoreInput(true);
- tfield->SetSkinBg(TBIDC("Folder"));
- tfield->SetText(item->str);
- tfield->SetFontDescription(fd);
- SetSkinBg(TBIDC("TBSelectItem"));
- GetContentRoot()->AddChild(tfield);
- SetID(item->id);
- }
- bool ListViewItemWidget::OnEvent(const TBWidgetEvent &ev)
- {
- if (ev.type == EVENT_TYPE_WHEEL)
- {
- return false;
- }
- // get clicks this way, not sure we want to
- if (ev.type == EVENT_TYPE_CLICK && ev.target->GetID() == item_->id)
- {
- item_->SetExpanded(!item_->GetExpanded());
- source_->list_->InvalidateList();
- // want to bubble
- return false;
- }
- return TBLayout::OnEvent(ev);
- }
- bool ListViewItemSource::Filter(int index, const char *filter)
- {
- ListViewItem* item = GetItem(index);
- if (!item->parent_)
- return true;
- if (item->parent_->GetExpanded())
- return true;
- return false;
- }
- TBWidget *ListViewItemSource::CreateItemWidget(int index, TBSelectItemViewer *viewer)
- {
- ListViewItem* item = GetItem(index);
- if (TBLayout *layout = new ListViewItemWidget(item, this, viewer, index))
- return layout;
- return nullptr;
- }
- ListView::ListView(Context* context, const TBID& id) :
- AEWidget(context),
- rootList_(0),
- source_(0)
- {
- rootList_ = new TBSelectList();
- rootList_->SetID(id);
- // dummy filter so filter is called
- rootList_->SetFilter(" ");
- delegate_->SetGravity(WIDGET_GRAVITY_ALL);
- rootList_->SetGravity(WIDGET_GRAVITY_ALL);
- source_ = new ListViewItemSource(rootList_);
- rootList_->SetSource(source_);
- delegate_->AddChild(rootList_);
- }
- ListView::~ListView()
- {
- }
- void ListView::SelectItemByID(const TBID &id)
- {
- for (int i = 0; i < source_->GetNumItems(); i++)
- {
- ListViewItem* item = source_->GetItem(i);
- if (id == item->id)
- {
- item->SetExpanded(true);
- rootList_->SetValue(i);
- rootList_->InvalidateList();
- return;
- }
- }
- }
- bool ListView::OnEvent(const TBWidgetEvent &ev)
- {
- return false;
- }
- }
|