MyGUI_ListBox.cpp
Go to the documentation of this file.
/*
* This source file is part of MyGUI. For the latest info, see http://mygui.info/
* Distributed under the MIT License
* (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
*/
#include "MyGUI_Precompiled.h"
#include "MyGUI_ListBox.h"
#include "MyGUI_Button.h"
#include "MyGUI_ScrollBar.h"
#include "MyGUI_ResourceSkin.h"
#include "MyGUI_InputManager.h"
#include "MyGUI_WidgetManager.h"
#include "MyGUI_LanguageManager.h"
namespace MyGUI
{
void ListBox::initialiseOverride()
{
Base::initialiseOverride();
// FIXME нам нужен фокус клавы
setNeedKeyFocus(true);
// парсим свойства
if (isUserString("SkinLine"))
mSkinLine = getUserString("SkinLine");
if (isUserString("HeightLine"))
mHeightLine = utility::parseInt(getUserString("HeightLine"));
if (mHeightLine < 1)
mHeightLine = 1;
if (getClientWidget() != nullptr)
{
getClientWidget()->eventMouseButtonPressed += newDelegate(this, &ListBox::notifyMousePressed);
getClientWidget()->eventMouseButtonReleased += newDelegate(this, &ListBox::notifyMouseButtonReleased);
getClientWidget()->eventKeyButtonPressed += newDelegate(this, &ListBox::notifyKeyButtonPressed);
getClientWidget()->eventKeyButtonReleased += newDelegate(this, &ListBox::notifyKeyButtonReleased);
}
assignWidget(mWidgetScroll, "VScroll");
if (mWidgetScroll != nullptr)
{
mWidgetScroll->eventScrollChangePosition += newDelegate(this, &ListBox::notifyScrollChangePosition);
mWidgetScroll->setScrollPage((size_t)mHeightLine);
}
updateScroll();
updateLine();
}
void ListBox::shutdownOverride()
{
mWidgetScroll = nullptr;
Base::shutdownOverride();
}
void ListBox::onMouseWheel(int _rel)
{
notifyMouseWheel(nullptr, _rel);
Base::onMouseWheel(_rel);
}
void ListBox::onKeyButtonPressed(KeyCode _key, Char _char)
{
if (getItemCount() == 0)
{
Base::onKeyButtonPressed(_key, _char);
eventNotifyItem(this, IBNotifyItemData(ITEM_NONE, IBNotifyItemData::KeyPressed, _key, _char));
return;
}
// очень секретный метод, запатентованный механизм движения курсора
size_t sel = mIndexSelect;
if (_key == KeyCode::ArrowUp)
{
if (sel != 0)
{
if (sel == ITEM_NONE)
sel = 0;
else
sel--;
}
}
else if (_key == KeyCode::ArrowDown)
{
if (sel == ITEM_NONE)
sel = 0;
else
sel++;
if (sel >= getItemCount())
{
// старое значение
sel = mIndexSelect;
}
}
else if (_key == KeyCode::Home)
{
sel = 0;
}
else if (_key == KeyCode::End)
{
sel = getItemCount() - 1;
}
else if (_key == KeyCode::PageUp)
{
if (sel != 0)
{
if (sel == ITEM_NONE)
{
sel = 0;
}
else
{
size_t page = _getClientWidget()->getHeight() / mHeightLine;
if (sel <= page)
sel = 0;
else
sel -= page;
}
}
}
else if (_key == KeyCode::PageDown)
{
if (sel != (getItemCount() - 1))
{
if (sel == ITEM_NONE)
{
sel = 0;
}
else
{
sel += _getClientWidget()->getHeight() / mHeightLine;
if (sel >= getItemCount())
sel = getItemCount() - 1;
}
}
}
else if ((_key == KeyCode::Return) || (_key == KeyCode::NumpadEnter))
{
if (sel != ITEM_NONE)
{
//FIXME нас могут удалить
eventListSelectAccept(this, sel);
Base::onKeyButtonPressed(_key, _char);
eventNotifyItem(this, IBNotifyItemData(ITEM_NONE, IBNotifyItemData::KeyPressed, _key, _char));
// выходим, так как изменили колличество строк
return;
}
}
if (sel != mIndexSelect)
{
_resetContainer(true);
if (!isItemVisibleAt(sel))
{
beginToItemAt(sel);
if (mWidgetScroll != nullptr)
_sendEventChangeScroll(mWidgetScroll->getScrollPosition());
}
setIndexSelected(sel);
// изменилась позиция
// FIXME нас могут удалить
eventListChangePosition(this, mIndexSelect);
}
Base::onKeyButtonPressed(_key, _char);
eventNotifyItem(this, IBNotifyItemData(ITEM_NONE, IBNotifyItemData::KeyPressed, _key, _char));
}
void ListBox::notifyMouseWheel(Widget* _sender, int _rel)
{
if (mRangeIndex <= 0)
return;
if (mWidgetScroll == nullptr)
return;
int offset = (int)mWidgetScroll->getScrollPosition();
if (_rel < 0)
offset += mHeightLine;
else
offset -= mHeightLine;
if (offset >= mRangeIndex)
offset = mRangeIndex;
else if (offset < 0)
offset = 0;
if ((int)mWidgetScroll->getScrollPosition() == offset)
return;
mWidgetScroll->setScrollPosition(offset);
_setScrollView(offset);
_sendEventChangeScroll(offset);
_resetContainer(true);
}
void ListBox::notifyScrollChangePosition(ScrollBar* _sender, size_t _position)
{
_setScrollView(_position);
_sendEventChangeScroll(_position);
}
void ListBox::notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id)
{
if (MouseButton::Left == _id && !mActivateOnClick)
_activateItem(_sender);
eventNotifyItem(
this,
IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MousePressed, _left, _top, _id));
}
void ListBox::notifyMouseClick(MyGUI::Widget* _sender)
{
if (mActivateOnClick)
_activateItem(_sender);
}
void ListBox::notifyMouseDoubleClick(Widget* _sender)
{
if (mIndexSelect != ITEM_NONE)
eventListSelectAccept(this, mIndexSelect);
}
void ListBox::setPosition(const IntPoint& _point)
{
Base::setPosition(_point);
}
void ListBox::setSize(const IntSize& _size)
{
Base::setSize(_size);
updateScroll();
updateLine();
}
void ListBox::setCoord(const IntCoord& _coord)
{
Base::setCoord(_coord);
updateScroll();
updateLine();
}
void ListBox::updateScroll()
{
mRangeIndex = (mHeightLine * (int)mItemsInfo.size()) - _getClientWidget()->getHeight();
if (mWidgetScroll == nullptr)
return;
if ((!mNeedVisibleScroll) || (mRangeIndex < 1) || (mWidgetScroll->getLeft() <= _getClientWidget()->getLeft()))
{
if (mWidgetScroll->getVisible())
{
mWidgetScroll->setVisible(false);
// увеличиваем клиентскую зону на ширину скрола
if (getClientWidget() != nullptr)
getClientWidget()->setSize(
getClientWidget()->getWidth() + mWidgetScroll->getWidth(),
getClientWidget()->getHeight());
}
}
else if (!mWidgetScroll->getVisible())
{
if (getClientWidget() != nullptr)
getClientWidget()->setSize(
getClientWidget()->getWidth() - mWidgetScroll->getWidth(),
getClientWidget()->getHeight());
mWidgetScroll->setVisible(true);
}
mWidgetScroll->setScrollRange(mRangeIndex + 1);
mWidgetScroll->setScrollViewPage(_getClientWidget()->getHeight());
if (!mItemsInfo.empty())
mWidgetScroll->setTrackSize(
mWidgetScroll->getLineSize() * _getClientWidget()->getHeight() / mHeightLine / (int)mItemsInfo.size());
}
void ListBox::updateLine(bool _reset)
{
// сбрасываем
if (_reset)
{
mOldSize.clear();
mLastRedrawLine = 0;
_resetContainer(false);
}
// позиция скролла
int position = mTopIndex * mHeightLine + mOffsetTop;
// если высота увеличивалась то добавляем виджеты
if (mOldSize.height < mCoord.height)
{
int height = (int)mWidgetLines.size() * mHeightLine - mOffsetTop;
// до тех пор, пока не достигнем максимального колличества, и всегда на одну больше
while ((height <= (_getClientWidget()->getHeight() + mHeightLine)) &&
(mWidgetLines.size() < mItemsInfo.size()))
{
// создаем линию
Widget* widget = _getClientWidget()->createWidgetT(
"Button",
mSkinLine,
0,
height,
_getClientWidget()->getWidth(),
mHeightLine,
Align::Top | Align::HStretch);
Button* line = widget->castType<Button>();
// подписываемся на всякие там события
line->eventMouseButtonPressed += newDelegate(this, &ListBox::notifyMousePressed);
line->eventMouseButtonReleased += newDelegate(this, &ListBox::notifyMouseButtonReleased);
line->eventMouseButtonClick += newDelegate(this, &ListBox::notifyMouseClick);
line->eventMouseButtonDoubleClick += newDelegate(this, &ListBox::notifyMouseDoubleClick);
line->eventMouseWheel += newDelegate(this, &ListBox::notifyMouseWheel);
line->eventKeyButtonPressed += newDelegate(this, &ListBox::notifyKeyButtonPressed);
line->eventKeyButtonReleased += newDelegate(this, &ListBox::notifyKeyButtonReleased);
line->eventMouseSetFocus += newDelegate(this, &ListBox::notifyMouseSetFocus);
line->eventMouseLostFocus += newDelegate(this, &ListBox::notifyMouseLostFocus);
line->_setContainer(this);
// присваиваем порядковый номер, для простоты просчета
line->_setInternalData((size_t)mWidgetLines.size());
// и сохраняем
mWidgetLines.push_back(line);
height += mHeightLine;
}
// проверяем на возможность не менять положение списка
if (position >= mRangeIndex)
{
// размер всех помещается в клиент
if (mRangeIndex <= 0)
{
// обнуляем, если надо
if (position || mOffsetTop || mTopIndex)
{
position = 0;
mTopIndex = 0;
mOffsetTop = 0;
mLastRedrawLine = 0; // чтобы все перерисовалось
// выравниваем
int offset = 0;
for (auto& widgetLine : mWidgetLines)
{
widgetLine->setPosition(0, offset);
offset += mHeightLine;
}
}
}
else
{
// прижимаем список к нижней границе
int count = _getClientWidget()->getHeight() / mHeightLine;
mOffsetTop = mHeightLine - (_getClientWidget()->getHeight() % mHeightLine);
if (mOffsetTop == mHeightLine)
{
mOffsetTop = 0;
count--;
}
int top = (int)mItemsInfo.size() - count - 1;
// выравниваем
int offset = 0 - mOffsetTop;
for (auto& widgetLine : mWidgetLines)
{
widgetLine->setPosition(0, offset);
offset += mHeightLine;
}
// высчитываем положение, должно быть максимальным
position = top * mHeightLine + mOffsetTop;
// если индех изменился, то перерисовываем линии
if (top != mTopIndex)
{
mTopIndex = top;
_redrawItemRange();
}
}
}
// увеличился размер, но прокрутки вниз небыло, обновляем линии снизу
_redrawItemRange(mLastRedrawLine);
} // if (old_cy < mCoord.height)
// просчитываем положение скролла
if (mWidgetScroll != nullptr)
mWidgetScroll->setScrollPosition(position);
mOldSize.width = mCoord.width;
mOldSize.height = mCoord.height;
}
void ListBox::_redrawItemRange(size_t _start)
{
// перерисовываем линии, только те, что видны
size_t pos = _start;
for (; pos < mWidgetLines.size(); pos++)
{
// индекс в нашем массиве
size_t index = pos + (size_t)mTopIndex;
// не будем заходить слишком далеко
if (index >= mItemsInfo.size())
{
// запоминаем последнюю перерисованную линию
mLastRedrawLine = pos;
break;
}
if (mWidgetLines[pos]->getTop() > _getClientWidget()->getHeight())
{
// запоминаем последнюю перерисованную линию
mLastRedrawLine = pos;
break;
}
// если был скрыт, то покажем
mWidgetLines[pos]->setVisible(true);
// обновляем текст
mWidgetLines[pos]->setCaption(mItemsInfo[index].first);
// если нужно выделить ,то выделим
static_cast<Button*>(mWidgetLines[pos])->setStateSelected(index == mIndexSelect);
}
// если цикл весь прошли, то ставим максимальную линию
if (pos >= mWidgetLines.size())
{
mLastRedrawLine = pos;
}
else
{
//Widget* focus = InputManager::getInstance().getMouseFocusWidget();
for (; pos < mWidgetLines.size(); pos++)
{
static_cast<Button*>(mWidgetLines[pos])->setStateSelected(false);
static_cast<Button*>(mWidgetLines[pos])->setVisible(false);
//if (focus == mWidgetLines[pos]) InputManager::getInstance()._unlinkWidget(focus);
}
}
}
// перерисовывает индекс
void ListBox::_redrawItem(size_t _index)
{
// невидно
if (_index < (size_t)mTopIndex)
return;
_index -= (size_t)mTopIndex;
// тоже невидно
if (_index >= mLastRedrawLine)
return;
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ListBox::_redrawItem");
// перерисовываем
mWidgetLines[_index]->setCaption(mItemsInfo[_index + mTopIndex].first);
}
void ListBox::insertItemAt(size_t _index, const UString& _name, Any _data)
{
MYGUI_ASSERT_RANGE_INSERT(_index, mItemsInfo.size(), "ListBox::insertItemAt");
if (_index == ITEM_NONE)
_index = mItemsInfo.size();
// вставляем физически
mItemsInfo.insert(mItemsInfo.begin() + _index, PairItem(_name, _data));
// если надо, то меняем выделенный элемент
if ((mIndexSelect != ITEM_NONE) && (_index <= mIndexSelect))
mIndexSelect++;
// строка, до первого видимого элемента
if ((_index <= (size_t)mTopIndex) && (mRangeIndex > 0))
{
mTopIndex++;
// просчитываем положение скролла
if (mWidgetScroll != nullptr)
{
mWidgetScroll->setScrollRange(mWidgetScroll->getScrollRange() + mHeightLine);
if (!mItemsInfo.empty())
mWidgetScroll->setTrackSize(
mWidgetScroll->getLineSize() * _getClientWidget()->getHeight() / mHeightLine /
(int)mItemsInfo.size());
mWidgetScroll->setScrollPosition(mTopIndex * mHeightLine + mOffsetTop);
}
mRangeIndex += mHeightLine;
}
else
{
// высчитывам положение строки
int offset = ((int)_index - mTopIndex) * mHeightLine - mOffsetTop;
// строка, после последнего видимого элемента, плюс одна строка (потому что для прокрутки нужно на одну строчку больше)
if (_getClientWidget()->getHeight() < (offset - mHeightLine))
{
// просчитываем положение скролла
if (mWidgetScroll != nullptr)
{
mWidgetScroll->setScrollRange(mWidgetScroll->getScrollRange() + mHeightLine);
if (!mItemsInfo.empty())
mWidgetScroll->setTrackSize(
mWidgetScroll->getLineSize() * _getClientWidget()->getHeight() / mHeightLine /
(int)mItemsInfo.size());
mWidgetScroll->setScrollPosition(mTopIndex * mHeightLine + mOffsetTop);
}
mRangeIndex += mHeightLine;
// строка в видимой области
}
else
{
// обновляем все
updateScroll();
updateLine(true);
// позже сюда еще оптимизацию по колличеству перерисовок
}
}
}
void ListBox::removeItemAt(size_t _index)
{
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ListBox::removeItemAt");
// удяляем физически строку
mItemsInfo.erase(mItemsInfo.begin() + _index);
// если надо, то меняем выделенный элемент
if (mItemsInfo.empty())
mIndexSelect = ITEM_NONE;
else if (mIndexSelect != ITEM_NONE)
{
if (_index < mIndexSelect)
mIndexSelect--;
else if ((_index == mIndexSelect) && (mIndexSelect == (mItemsInfo.size())))
mIndexSelect--;
}
// если виджетов стало больше , то скрываем крайний
if (mWidgetLines.size() > mItemsInfo.size())
{
mWidgetLines[mItemsInfo.size()]->setVisible(false);
}
// строка, до первого видимого элемента
if (_index < (size_t)mTopIndex)
{
mTopIndex--;
// просчитываем положение скролла
if (mWidgetScroll != nullptr)
{
mWidgetScroll->setScrollRange(mWidgetScroll->getScrollRange() - mHeightLine);
if (!mItemsInfo.empty())
mWidgetScroll->setTrackSize(
mWidgetScroll->getLineSize() * _getClientWidget()->getHeight() / mHeightLine /
(int)mItemsInfo.size());
mWidgetScroll->setScrollPosition(mTopIndex * mHeightLine + mOffsetTop);
}
mRangeIndex -= mHeightLine;
}
else
{
// высчитывам положение удаляемой строки
int offset = ((int)_index - mTopIndex) * mHeightLine - mOffsetTop;
// строка, после последнего видимого элемента
if (_getClientWidget()->getHeight() < offset)
{
// просчитываем положение скролла
if (mWidgetScroll != nullptr)
{
mWidgetScroll->setScrollRange(mWidgetScroll->getScrollRange() - mHeightLine);
if (!mItemsInfo.empty())
mWidgetScroll->setTrackSize(
mWidgetScroll->getLineSize() * _getClientWidget()->getHeight() / mHeightLine /
(int)mItemsInfo.size());
mWidgetScroll->setScrollPosition(mTopIndex * mHeightLine + mOffsetTop);
}
mRangeIndex -= mHeightLine;
// строка в видимой области
}
else
{
// обновляем все
updateScroll();
updateLine(true);
// позже сюда еще оптимизацию по колличеству перерисовок
}
}
}
void ListBox::setIndexSelected(size_t _index)
{
MYGUI_ASSERT_RANGE_AND_NONE(_index, mItemsInfo.size(), "ListBox::setIndexSelected");
if (mIndexSelect != _index)
{
_selectIndex(mIndexSelect, false);
_selectIndex(_index, true);
mIndexSelect = _index;
}
}
void ListBox::_selectIndex(size_t _index, bool _select)
{
if (_index == ITEM_NONE)
return;
// не видно строки
if (_index < (size_t)mTopIndex)
return;
// высчитывам положение строки
int offset = ((int)_index - mTopIndex) * mHeightLine - mOffsetTop;
// строка, после последнего видимого элемента
if (_getClientWidget()->getHeight() < offset)
return;
size_t index = _index - mTopIndex;
if (index < mWidgetLines.size())
static_cast<Button*>(mWidgetLines[index])->setStateSelected(_select);
}
void ListBox::beginToItemAt(size_t _index)
{
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ListBox::beginToItemAt");
if (mRangeIndex <= 0)
return;
int offset = (int)_index * mHeightLine;
if (offset >= mRangeIndex)
offset = mRangeIndex;
if (mWidgetScroll != nullptr)
{
if ((int)mWidgetScroll->getScrollPosition() == offset)
return;
mWidgetScroll->setScrollPosition(offset);
}
notifyScrollChangePosition(nullptr, offset);
}
// видим ли мы элемент, полностью или нет
bool ListBox::isItemVisibleAt(size_t _index, bool _fill)
{
// если элемента нет, то мы его не видим (в том числе когда их вообще нет)
if (_index >= mItemsInfo.size())
return false;
// если скрола нет, то мы палюбак видим
if (mRangeIndex <= 0)
return true;
// строка, до первого видимого элемента
if (_index < (size_t)mTopIndex)
return false;
// строка это верхний выделенный
if (_index == (size_t)mTopIndex)
{
return mOffsetTop == 0 || !_fill;
}
// высчитывам положение строки
int offset = ((int)_index - mTopIndex) * mHeightLine - mOffsetTop;
// строка, после последнего видимого элемента
if (_getClientWidget()->getHeight() < offset)
return false;
// если мы внизу и нам нужен целый
if (_getClientWidget()->getHeight() < (offset + mHeightLine) && _fill)
return false;
return true;
}
void ListBox::removeAllItems()
{
mTopIndex = 0;
mIndexSelect = ITEM_NONE;
mOffsetTop = 0;
mItemsInfo.clear();
int offset = 0;
for (auto& widgetLine : mWidgetLines)
{
widgetLine->setVisible(false);
widgetLine->setPosition(0, offset);
offset += mHeightLine;
}
// обновляем все
updateScroll();
updateLine(true);
}
void ListBox::setItemNameAt(size_t _index, const UString& _name)
{
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ListBox::setItemNameAt");
mItemsInfo[_index].first = _name;
_redrawItem(_index);
}
void ListBox::setItemDataAt(size_t _index, Any _data)
{
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ListBox::setItemDataAt");
mItemsInfo[_index].second = std::move(_data);
_redrawItem(_index);
}
const UString& ListBox::getItemNameAt(size_t _index) const
{
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ListBox::getItemNameAt");
return mItemsInfo[_index].first;
}
void ListBox::notifyMouseSetFocus(Widget* _sender, Widget* _old)
{
#if MYGUI_DEBUG_MODE == 1
MYGUI_ASSERT_RANGE(*_sender->_getInternalData<size_t>(), mWidgetLines.size(), "ListBox::notifyMouseSetFocus");
#endif
mLineActive = *_sender->_getInternalData<size_t>();
eventListMouseItemFocus(this, mLineActive);
}
void ListBox::notifyMouseLostFocus(Widget* _sender, Widget* _new)
{
if ((nullptr == _new) || (_new->getParent() != _getClientWidget()))
{
mLineActive = ITEM_NONE;
eventListMouseItemFocus(this, ITEM_NONE);
}
}
void ListBox::_setItemFocus(size_t _index, bool _focus)
{
MYGUI_ASSERT_RANGE(_index, mWidgetLines.size(), "ListBox::_setItemFocus");
static_cast<Button*>(mWidgetLines[_index])->_setMouseFocus(_focus);
}
void ListBox::setScrollVisible(bool _visible)
{
if (mNeedVisibleScroll == _visible)
return;
mNeedVisibleScroll = _visible;
updateScroll();
}
void ListBox::setScrollPosition(size_t _position)
{
if (mWidgetScroll != nullptr)
{
if (mWidgetScroll->getScrollRange() > _position)
{
mWidgetScroll->setScrollPosition(_position);
_setScrollView(_position);
}
}
}
void ListBox::_setScrollView(size_t _position)
{
mOffsetTop = ((int)_position % mHeightLine);
// смещение с отрицательной стороны
int offset = 0 - mOffsetTop;
for (auto& widgetLine : mWidgetLines)
{
widgetLine->setPosition(IntPoint(0, offset));
offset += mHeightLine;
}
// если индех изменился, то перерисовываем линии
int top = ((int)_position / mHeightLine);
if (top != mTopIndex)
{
mTopIndex = top;
_redrawItemRange();
}
// прорисовываем все нижние строки, если они появились
_redrawItemRange(mLastRedrawLine);
}
void ListBox::_sendEventChangeScroll(size_t _position)
{
eventListChangeScroll(this, _position);
if (ITEM_NONE != mLineActive)
eventListMouseItemFocus(this, mLineActive);
}
void ListBox::swapItemsAt(size_t _index1, size_t _index2)
{
MYGUI_ASSERT_RANGE(_index1, mItemsInfo.size(), "ListBox::swapItemsAt");
MYGUI_ASSERT_RANGE(_index2, mItemsInfo.size(), "ListBox::swapItemsAt");
if (_index1 == _index2)
return;
std::swap(mItemsInfo[_index1], mItemsInfo[_index2]);
_redrawItem(_index1);
_redrawItem(_index2);
}
void ListBox::_checkAlign()
{
// максимальная высота всех строк
int max_height = mItemsInfo.size() * mHeightLine;
// видимая высота
int visible_height = _getClientWidget()->getHeight();
// все строки помещаются
if (visible_height >= max_height)
{
MYGUI_ASSERT(mTopIndex == 0, "mTopIndex == 0");
MYGUI_ASSERT(mOffsetTop == 0, "mOffsetTop == 0");
int height = 0;
for (size_t pos = 0; pos < mWidgetLines.size(); pos++)
{
if (pos >= mItemsInfo.size())
break;
MYGUI_ASSERT(mWidgetLines[pos]->getTop() == height, "mWidgetLines[pos]->getTop() == height");
height += mWidgetLines[pos]->getHeight();
}
}
}
size_t ListBox::findItemIndexWith(const UString& _name)
{
for (size_t pos = 0; pos < mItemsInfo.size(); pos++)
{
if (mItemsInfo[pos].first == _name)
return pos;
}
return ITEM_NONE;
}
int ListBox::getOptimalHeight() const
{
return (int)((mCoord.height - _getClientWidget()->getHeight()) + (mItemsInfo.size() * mHeightLine));
}
size_t ListBox::getItemCount() const
{
return mItemsInfo.size();
}
void ListBox::addItem(const UString& _name, Any _data)
{
insertItemAt(ITEM_NONE, _name, _data);
}
size_t ListBox::getIndexSelected() const
{
return mIndexSelect;
}
void ListBox::clearIndexSelected()
{
setIndexSelected(ITEM_NONE);
}
void ListBox::clearItemDataAt(size_t _index)
{
setItemDataAt(_index, Any::Null);
}
void ListBox::beginToItemFirst()
{
if (getItemCount())
beginToItemAt(0);
}
void ListBox::beginToItemLast()
{
if (getItemCount())
beginToItemAt(getItemCount() - 1);
}
void ListBox::beginToItemSelected()
{
if (getIndexSelected() != ITEM_NONE)
beginToItemAt(getIndexSelected());
}
bool ListBox::isItemSelectedVisible(bool _fill)
{
return isItemVisibleAt(mIndexSelect, _fill);
}
size_t ListBox::_getItemIndex(Widget* _item) const
{
for (const auto& line : mWidgetLines)
{
if (line == _item)
return *line->_getInternalData<size_t>() + mTopIndex;
}
return ITEM_NONE;
}
void ListBox::_resetContainer(bool _update)
{
// обязательно у базового
Base::_resetContainer(_update);
if (!_update)
{
WidgetManager& instance = WidgetManager::getInstance();
for (const auto& line : mWidgetLines)
instance.unlinkFromUnlinkers(line);
}
}
void ListBox::setPropertyOverride(std::string_view _key, std::string_view _value)
{
// не коментировать
if (_key == "AddItem")
addItem(LanguageManager::getInstance().replaceTags(UString(_value)));
else if (_key == "ActivateOnClick")
mActivateOnClick = utility::parseBool(_value);
else
{
Base::setPropertyOverride(_key, _value);
return;
}
eventChangeProperty(this, _key, _value);
}
void ListBox::_activateItem(MyGUI::Widget* _sender)
{
// если выделен клиент, то сбрасываем
if (_sender == _getClientWidget())
{
if (mIndexSelect != ITEM_NONE)
{
_selectIndex(mIndexSelect, false);
mIndexSelect = ITEM_NONE;
eventListChangePosition(this, mIndexSelect);
}
eventListMouseItemActivate(this, mIndexSelect);
// если не клиент, то просчитывам
}
// ячейка может быть скрыта
else if (_sender->getVisible())
{
#if MYGUI_DEBUG_MODE == 1
MYGUI_ASSERT_RANGE(
*_sender->_getInternalData<size_t>(),
mWidgetLines.size(),
"ListBox::notifyMousePressed");
MYGUI_ASSERT_RANGE(
*_sender->_getInternalData<size_t>() + mTopIndex,
mItemsInfo.size(),
"ListBox::notifyMousePressed");
#endif
size_t index = *_sender->_getInternalData<size_t>() + mTopIndex;
if (mIndexSelect != index)
{
_selectIndex(mIndexSelect, false);
_selectIndex(index, true);
mIndexSelect = index;
eventListChangePosition(this, mIndexSelect);
}
eventListMouseItemActivate(this, mIndexSelect);
}
_resetContainer(true);
}
size_t ListBox::_getItemCount() const
{
return getItemCount();
}
void ListBox::_addItem(const MyGUI::UString& _name)
{
addItem(_name);
}
void ListBox::_removeItemAt(size_t _index)
{
removeItemAt(_index);
}
void ListBox::_setItemNameAt(size_t _index, const UString& _name)
{
setItemNameAt(_index, _name);
}
const UString& ListBox::_getItemNameAt(size_t _index) const
{
return getItemNameAt(_index);
}
size_t ListBox::getIndexByWidget(Widget* _widget) const
{
if (_widget == getClientWidget())
return ITEM_NONE;
return *_widget->_getInternalData<size_t>() + mTopIndex;
}
void ListBox::notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char)
{
eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::KeyPressed, _key, _char));
}
void ListBox::notifyKeyButtonReleased(Widget* _sender, KeyCode _key)
{
eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::KeyReleased, _key));
}
void ListBox::notifyMouseButtonReleased(Widget* _sender, int _left, int _top, MouseButton _id)
{
eventNotifyItem(
this,
IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MouseReleased, _left, _top, _id));
}
void ListBox::onKeyButtonReleased(KeyCode _key)
{
Base::onKeyButtonReleased(_key);
eventNotifyItem(this, IBNotifyItemData(ITEM_NONE, IBNotifyItemData::KeyReleased, _key));
}
void ListBox::setActivateOnClick(bool activateOnClick)
{
mActivateOnClick = activateOnClick;
}
Widget* ListBox::getWidgetByIndex(size_t _index)
{
if (_index == MyGUI::ITEM_NONE)
return nullptr;
// индекс в нашем массиве
size_t index = _index - (size_t)mTopIndex;
if (index < mWidgetLines.size())
return mWidgetLines[index];
return nullptr;
}
} // namespace MyGUI
MyGUI_Button.h
MYGUI_ASSERT
#define MYGUI_ASSERT(exp, dest)
Definition MyGUI_Diagnostic.h:31
MYGUI_ASSERT_RANGE_INSERT
#define MYGUI_ASSERT_RANGE_INSERT(index, size, owner)
Definition MyGUI_Diagnostic.h:50
MYGUI_ASSERT_RANGE
#define MYGUI_ASSERT_RANGE(index, size, owner)
Definition MyGUI_Diagnostic.h:44
MYGUI_ASSERT_RANGE_AND_NONE
#define MYGUI_ASSERT_RANGE_AND_NONE(index, size, owner)
Definition MyGUI_Diagnostic.h:46
MyGUI_InputManager.h
MyGUI_LanguageManager.h
MyGUI_ListBox.h
MyGUI_Precompiled.h
MyGUI_ResourceSkin.h
MyGUI_ScrollBar.h
MyGUI_WidgetManager.h
MyGUI::Any
Definition MyGUI_Any.h:56
MyGUI::Any::Null
static const Any Null
Definition MyGUI_Any.h:58
MyGUI::Button
widget description should be here.
Definition MyGUI_Button.h:20
MyGUI::ICroppedRectangle::mCoord
IntCoord mCoord
Definition MyGUI_ICroppedRectangle.h:245
MyGUI::ICroppedRectangle::getTop
int getTop() const
Definition MyGUI_ICroppedRectangle.h:103
MyGUI::ICroppedRectangle::getWidth
int getWidth() const
Definition MyGUI_ICroppedRectangle.h:113
MyGUI::ICroppedRectangle::getHeight
int getHeight() const
Definition MyGUI_ICroppedRectangle.h:118
MyGUI::ICroppedRectangle::getLeft
int getLeft() const
Definition MyGUI_ICroppedRectangle.h:93
MyGUI::IObject::castType
Type * castType(bool _throw=true)
Definition MyGUI_IObject.h:18
MyGUI::LanguageManager::getInstance
static LanguageManager & getInstance()
Definition MyGUI_LanguageManager.cpp:18
MyGUI::ListBox::_setItemNameAt
void _setItemNameAt(size_t _index, const UString &_name) override
Definition MyGUI_ListBox.cpp:1014
MyGUI::ListBox::addItem
void addItem(const UString &_name, Any _data=Any::Null)
Add an item to the end of a array.
Definition MyGUI_ListBox.cpp:873
MyGUI::ListBox::notifyMouseWheel
void notifyMouseWheel(Widget *_sender, int _rel)
Definition MyGUI_ListBox.cpp:183
MyGUI::ListBox::_removeItemAt
void _removeItemAt(size_t _index) override
Definition MyGUI_ListBox.cpp:1009
MyGUI::ListBox::updateLine
void updateLine(bool _reset=false)
Definition MyGUI_ListBox.cpp:296
MyGUI::ListBox::eventNotifyItem
EventHandle_ListBoxPtrCIBNotifyCellDataRef eventNotifyItem
Definition MyGUI_ListBox.h:226
MyGUI::ListBox::beginToItemAt
void beginToItemAt(size_t _index)
Move all elements so specified becomes visible.
Definition MyGUI_ListBox.cpp:645
MyGUI::ListBox::_redrawItem
void _redrawItem(size_t _index)
Definition MyGUI_ListBox.cpp:466
MyGUI::ListBox::_getItemIndex
size_t _getItemIndex(Widget *_item) const override
Definition MyGUI_ListBox.cpp:916
MyGUI::ListBox::_setScrollView
void _setScrollView(size_t _position)
Definition MyGUI_ListBox.cpp:784
MyGUI::ListBox::notifyKeyButtonReleased
void notifyKeyButtonReleased(Widget *_sender, KeyCode _key)
Definition MyGUI_ListBox.cpp:1036
MyGUI::ListBox::notifyMousePressed
void notifyMousePressed(Widget *_sender, int _left, int _top, MouseButton _id)
Definition MyGUI_ListBox.cpp:218
MyGUI::ListBox::_sendEventChangeScroll
void _sendEventChangeScroll(size_t _position)
Definition MyGUI_ListBox.cpp:809
MyGUI::ListBox::setScrollPosition
void setScrollPosition(size_t _position)
Set scroll position.
Definition MyGUI_ListBox.cpp:772
MyGUI::ListBox::notifyMouseButtonReleased
void notifyMouseButtonReleased(Widget *_sender, int _left, int _top, MouseButton _id)
Definition MyGUI_ListBox.cpp:1041
MyGUI::ListBox::setSize
void setSize(const IntSize &_size) override
Definition MyGUI_ListBox.cpp:245
MyGUI::ListBox::_checkAlign
void _checkAlign()
Definition MyGUI_ListBox.cpp:830
MyGUI::ListBox::isItemSelectedVisible
bool isItemSelectedVisible(bool _fill=true)
Same as ListBox::isItemVisibleAt for selected item.
Definition MyGUI_ListBox.cpp:911
MyGUI::ListBox::_resetContainer
void _resetContainer(bool _update) override
Definition MyGUI_ListBox.cpp:926
MyGUI::ListBox::_getItemNameAt
const UString & _getItemNameAt(size_t _index) const override
Definition MyGUI_ListBox.cpp:1019
MyGUI::ListBox::isItemVisibleAt
bool isItemVisibleAt(size_t _index, bool _fill=true)
Definition MyGUI_ListBox.cpp:665
MyGUI::ListBox::getItemNameAt
const UString & getItemNameAt(size_t _index) const
Get item name from specified position.
Definition MyGUI_ListBox.cpp:733
MyGUI::ListBox::notifyMouseClick
void notifyMouseClick(Widget *_sender)
Definition MyGUI_ListBox.cpp:228
MyGUI::ListBox::setActivateOnClick
void setActivateOnClick(bool activateOnClick)
Definition MyGUI_ListBox.cpp:1055
MyGUI::ListBox::clearIndexSelected
void clearIndexSelected()
Definition MyGUI_ListBox.cpp:883
MyGUI::ListBox::_addItem
void _addItem(const MyGUI::UString &_name) override
Definition MyGUI_ListBox.cpp:1004
MyGUI::ListBox::setScrollVisible
void setScrollVisible(bool _visible)
Set scroll visible when it needed.
Definition MyGUI_ListBox.cpp:764
MyGUI::ListBox::_activateItem
void _activateItem(Widget *_sender)
Definition MyGUI_ListBox.cpp:955
MyGUI::ListBox::_redrawItemRange
void _redrawItemRange(size_t _start=0)
Definition MyGUI_ListBox.cpp:416
MyGUI::ListBox::notifyMouseLostFocus
void notifyMouseLostFocus(Widget *_sender, Widget *_new)
Definition MyGUI_ListBox.cpp:749
MyGUI::ListBox::shutdownOverride
void shutdownOverride() override
Definition MyGUI_ListBox.cpp:56
MyGUI::ListBox::getItemCount
size_t getItemCount() const
Get number of items.
Definition MyGUI_ListBox.cpp:868
MyGUI::ListBox::initialiseOverride
void initialiseOverride() override
Definition MyGUI_ListBox.cpp:19
MyGUI::ListBox::notifyScrollChangePosition
void notifyScrollChangePosition(ScrollBar *_sender, size_t _position)
Definition MyGUI_ListBox.cpp:212
MyGUI::ListBox::notifyMouseSetFocus
void notifyMouseSetFocus(Widget *_sender, Widget *_old)
Definition MyGUI_ListBox.cpp:739
MyGUI::ListBox::swapItemsAt
void swapItemsAt(size_t _index1, size_t _index2)
Swap items at a specified positions.
Definition MyGUI_ListBox.cpp:816
MyGUI::ListBox::getOptimalHeight
int getOptimalHeight() const
Return optimal height to fit all items in ListBox.
Definition MyGUI_ListBox.cpp:863
MyGUI::ListBox::onKeyButtonReleased
void onKeyButtonReleased(KeyCode _key) override
Definition MyGUI_ListBox.cpp:1048
MyGUI::ListBox::setCoord
void setCoord(const IntCoord &_coord) override
Definition MyGUI_ListBox.cpp:253
MyGUI::ListBox::insertItemAt
void insertItemAt(size_t _index, const UString &_name, Any _data=Any::Null)
Insert an item into a array at a specified position.
Definition MyGUI_ListBox.cpp:481
MyGUI::ListBox::removeAllItems
void removeAllItems()
Remove all items.
Definition MyGUI_ListBox.cpp:698
MyGUI::ListBox::setPosition
void setPosition(const IntPoint &_point) override
Definition MyGUI_ListBox.cpp:240
MyGUI::ListBox::eventListChangePosition
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListChangePosition
Definition MyGUI_ListBox.h:198
MyGUI::ListBox::onMouseWheel
void onMouseWheel(int _rel) override
Definition MyGUI_ListBox.cpp:63
MyGUI::ListBox::clearItemDataAt
void clearItemDataAt(size_t _index)
Clear an item data at a specified position.
Definition MyGUI_ListBox.cpp:888
MyGUI::ListBox::updateScroll
void updateScroll()
Definition MyGUI_ListBox.cpp:261
MyGUI::ListBox::getIndexSelected
size_t getIndexSelected() const
Definition MyGUI_ListBox.cpp:878
MyGUI::ListBox::_selectIndex
void _selectIndex(size_t _index, bool _select)
Definition MyGUI_ListBox.cpp:627
MyGUI::ListBox::_getItemCount
size_t _getItemCount() const override
Definition MyGUI_ListBox.cpp:999
MyGUI::ListBox::_setItemFocus
void _setItemFocus(size_t _index, bool _focus)
Definition MyGUI_ListBox.cpp:758
MyGUI::ListBox::eventListMouseItemFocus
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListMouseItemFocus
Definition MyGUI_ListBox.h:212
MyGUI::ListBox::setPropertyOverride
void setPropertyOverride(std::string_view _key, std::string_view _value) override
Definition MyGUI_ListBox.cpp:939
MyGUI::ListBox::findItemIndexWith
size_t findItemIndexWith(const UString &_name)
Search item, returns the position of the first occurrence in array or ITEM_NONE if item not found.
Definition MyGUI_ListBox.cpp:853
MyGUI::ListBox::beginToItemFirst
void beginToItemFirst()
Move all elements so first becomes visible.
Definition MyGUI_ListBox.cpp:893
MyGUI::ListBox::eventListChangeScroll
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListChangeScroll
Definition MyGUI_ListBox.h:219
MyGUI::ListBox::notifyKeyButtonPressed
void notifyKeyButtonPressed(Widget *_sender, KeyCode _key, Char _char)
Definition MyGUI_ListBox.cpp:1031
MyGUI::ListBox::onKeyButtonPressed
void onKeyButtonPressed(KeyCode _key, Char _char) override
Definition MyGUI_ListBox.cpp:70
MyGUI::ListBox::setItemDataAt
void setItemDataAt(size_t _index, Any _data)
Replace an item data at a specified position.
Definition MyGUI_ListBox.cpp:726
MyGUI::ListBox::notifyMouseDoubleClick
void notifyMouseDoubleClick(Widget *_sender)
Definition MyGUI_ListBox.cpp:234
MyGUI::ListBox::getWidgetByIndex
Widget * getWidgetByIndex(size_t _index)
Definition MyGUI_ListBox.cpp:1060
MyGUI::ListBox::eventListSelectAccept
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListSelectAccept
Definition MyGUI_ListBox.h:191
MyGUI::ListBox::beginToItemSelected
void beginToItemSelected()
Move all elements so selected becomes visible.
Definition MyGUI_ListBox.cpp:905
MyGUI::ListBox::removeItemAt
void removeItemAt(size_t _index)
Remove item at a specified position.
Definition MyGUI_ListBox.cpp:543
MyGUI::ListBox::setItemNameAt
void setItemNameAt(size_t _index, const UString &_name)
Replace an item name at a specified position.
Definition MyGUI_ListBox.cpp:719
MyGUI::ListBox::setIndexSelected
void setIndexSelected(size_t _index)
Definition MyGUI_ListBox.cpp:616
MyGUI::ListBox::beginToItemLast
void beginToItemLast()
Move all elements so last becomes visible.
Definition MyGUI_ListBox.cpp:899
MyGUI::ListBox::eventListMouseItemActivate
EventPair< EventHandle_WidgetSizeT, EventHandle_ListPtrSizeT > eventListMouseItemActivate
Definition MyGUI_ListBox.h:205
MyGUI::ScrollBar
widget description should be here.
Definition MyGUI_ScrollBar.h:24
MyGUI::UString
A UTF-16 string with implicit conversion to/from std::string and std::wstring.
Definition MyGUI_UString.h:144
MyGUI::UserData::isUserString
bool isUserString(std::string_view _key) const
Definition MyGUI_WidgetUserData.cpp:44
MyGUI::UserData::getUserString
std::string_view getUserString(std::string_view _key) const
Definition MyGUI_WidgetUserData.cpp:20
MyGUI::UserData::_setInternalData
void _setInternalData(Any _data)
Definition MyGUI_WidgetUserData.cpp:59
MyGUI::UserData::_getInternalData
ValueType * _getInternalData(bool _throw=true) const
Definition MyGUI_WidgetUserData.h:54
MyGUI::Widget
widget description should be here.
Definition MyGUI_Widget.h:40
MyGUI::Widget::getParent
Widget * getParent() const
Definition MyGUI_Widget.cpp:1352
MyGUI::Widget::setSize
void setSize(const IntSize &_size) override
Definition MyGUI_Widget.cpp:693
MyGUI::Widget::eventChangeProperty
EventHandle_WidgetStringString eventChangeProperty
Definition MyGUI_Widget.h:324
MyGUI::Widget::setVisible
virtual void setVisible(bool _value)
Definition MyGUI_Widget.cpp:1022
MyGUI::Widget::WidgetManager
friend class WidgetManager
Definition MyGUI_Widget.h:42
MyGUI::Widget::getVisible
bool getVisible() const
Definition MyGUI_Widget.cpp:1327
MyGUI::Widget::createWidgetT
Widget * createWidgetT(std::string_view _type, std::string_view _skin, const IntCoord &_coord, Align _align, std::string_view _name={})
Definition MyGUI_Widget.cpp:944
MyGUI::Widget::getClientWidget
Widget * getClientWidget()
Definition MyGUI_Widget.cpp:1367
MyGUI::Widget::assignWidget
void assignWidget(T *&_widget, std::string_view _name)
Definition MyGUI_Widget.h:413
MyGUI::Widget::_setContainer
void _setContainer(Widget *_value)
Definition MyGUI_Widget.cpp:1387
MyGUI::Widget::_getClientWidget
Widget * _getClientWidget()
If there is client widget return it, otherwise return this.
Definition MyGUI_Widget.cpp:1196
MyGUI::WidgetInput::eventMouseButtonDoubleClick
EventHandle_WidgetVoid eventMouseButtonDoubleClick
Definition MyGUI_WidgetInput.h:174
MyGUI::WidgetInput::eventMouseButtonClick
EventHandle_WidgetVoid eventMouseButtonClick
Definition MyGUI_WidgetInput.h:168
MyGUI::WidgetInput::eventMouseButtonReleased
EventHandle_WidgetIntIntButton eventMouseButtonReleased
Definition MyGUI_WidgetInput.h:162
MyGUI::WidgetInput::setNeedKeyFocus
void setNeedKeyFocus(bool _value)
Definition MyGUI_WidgetInput.cpp:142
MyGUI::WidgetInput::eventMouseButtonPressed
EventHandle_WidgetIntIntButton eventMouseButtonPressed
Definition MyGUI_WidgetInput.h:153
MyGUI::WidgetInput::eventMouseSetFocus
EventHandle_WidgetWidget eventMouseSetFocus
Definition MyGUI_WidgetInput.h:121
MyGUI::WidgetInput::eventKeyButtonPressed
EventHandle_WidgetKeyCodeChar eventKeyButtonPressed
Definition MyGUI_WidgetInput.h:196
MyGUI::WidgetInput::eventMouseLostFocus
EventHandle_WidgetWidget eventMouseLostFocus
Definition MyGUI_WidgetInput.h:114
MyGUI::WidgetInput::eventMouseWheel
EventHandle_WidgetInt eventMouseWheel
Definition MyGUI_WidgetInput.h:144
MyGUI::WidgetInput::eventKeyButtonReleased
EventHandle_WidgetKeyCode eventKeyButtonReleased
Definition MyGUI_WidgetInput.h:203
MyGUI::WidgetManager::getInstance
static WidgetManager & getInstance()
MyGUI::WidgetManager::unlinkFromUnlinkers
void unlinkFromUnlinkers(Widget *_widget)
Definition MyGUI_WidgetManager.cpp:152
MyGUI::utility::parseBool
bool parseBool(std::string_view _value)
Definition MyGUI_StringUtility.h:127
MyGUI::utility::parseInt
int parseInt(std::string_view _value)
Definition MyGUI_StringUtility.h:102
MyGUI
Definition MyGUI_ActionController.h:15
MyGUI::IntPoint
types::TPoint< int > IntPoint
Definition MyGUI_Types.h:27
MyGUI::Char
unsigned int Char
Definition MyGUI_Types.h:50
MyGUI::ITEM_NONE
constexpr size_t ITEM_NONE
Definition MyGUI_Macros.h:19
MyGUI::IntCoord
types::TCoord< int > IntCoord
Definition MyGUI_Types.h:36
MyGUI::IntSize
types::TSize< int > IntSize
Definition MyGUI_Types.h:30
MyGUI::newDelegate
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
Definition MyGUI_Delegate.h:100
MyGUI::Align::HStretch
@ HStretch
Definition MyGUI_Align.h:29
MyGUI::Align::Top
@ Top
Definition MyGUI_Align.h:31
MyGUI::IBNotifyItemData
Definition MyGUI_IBItemInfo.h:68
MyGUI::IBNotifyItemData::KeyReleased
@ KeyReleased
Definition MyGUI_IBItemInfo.h:74
MyGUI::IBNotifyItemData::KeyPressed
@ KeyPressed
Definition MyGUI_IBItemInfo.h:73
MyGUI::IBNotifyItemData::MousePressed
@ MousePressed
Definition MyGUI_IBItemInfo.h:71
MyGUI::IBNotifyItemData::MouseReleased
@ MouseReleased
Definition MyGUI_IBItemInfo.h:72
MyGUI::KeyCode
Definition MyGUI_KeyCode.h:16
MyGUI::KeyCode::Home
@ Home
Definition MyGUI_KeyCode.h:139
MyGUI::KeyCode::PageUp
@ PageUp
Definition MyGUI_KeyCode.h:141
MyGUI::KeyCode::End
@ End
Definition MyGUI_KeyCode.h:144
MyGUI::KeyCode::NumpadEnter
@ NumpadEnter
Definition MyGUI_KeyCode.h:125
MyGUI::KeyCode::ArrowDown
@ ArrowDown
Definition MyGUI_KeyCode.h:145
MyGUI::KeyCode::ArrowUp
@ ArrowUp
Definition MyGUI_KeyCode.h:140
MyGUI::KeyCode::Return
@ Return
Definition MyGUI_KeyCode.h:47
MyGUI::KeyCode::PageDown
@ PageDown
Definition MyGUI_KeyCode.h:146
MyGUI::MouseButton
Definition MyGUI_MouseButton.h:16
MyGUI::MouseButton::Left
@ Left
Definition MyGUI_MouseButton.h:21