Esempio n. 1
0
void WidgetListBox::updateVisible() {
	if (_visibleItems.empty())
		return;

	GfxMan.lockFrame();

	for (size_t i = 0; i < _visibleItems.size(); i++)
		_visibleItems[i]->hide();

	float itemHeight = _items.front()->getHeight();
	float itemY      = _contentY;
	for (size_t i = 0; i < _visibleItems.size(); i++) {
		WidgetListItem *item = _items[_startItem + i];

		itemY -= itemHeight;

		item->setPosition(_contentX, itemY, _contentZ - 5.0f);
		_visibleItems[i] = item;

		if (isVisible())
			_visibleItems[i]->show();
	}

	GfxMan.unlockFrame();
}
Esempio n. 2
0
void WidgetGridBox::unlock() {
	assert(_locked);
	_locked = false;

	if (_items.empty()) {
		GfxMan.unlockFrame();
		return;
	}

	_itemsByRow = MIN<uint>(_contentWidth / _items.front()->getWidth(), _items.size());

	uint vCount = MIN<uint>(_contentHeight / _items.front()->getHeight(), _items.size())
	              * _itemsByRow;

	if ((vCount == 0) || (vCount == _visibleItems.size())) {
		GfxMan.unlockFrame();
		return;
	}

	assert(_visibleItems.size() < vCount);
	_visibleItems.reserve(vCount);

	uint start = _startItem + _visibleItems.size();

	float itemHeight = _items.front()->getHeight();
	float itemWidth  = _items.front()->getWidth();
	uint  row        = 0;
	uint  column     = 0;

	// If we reach the last row, compute the items that remains.
	if (_items.size() - _startItem <= _visibleItems.size())
		vCount -= _items.size() % _itemsByRow;

	while (_visibleItems.size() < vCount) {
		WidgetListItem *item = _items[start++];

		// WORKAROUND: The x axis is shifted by 2 pixels in order to correctly render in
		// the charportrait widget.
		float itemY = _contentY - (row + 1) * (itemHeight + _innerVSpace) + _innerVSpace;
		float itemX = _contentX + (column * (itemWidth + _innerHSpace)) - 2.0;
		item->setPosition(itemX, itemY, _contentZ - 5.0);
		_visibleItems.push_back(item);

		if (isVisible())
			_visibleItems.back()->show();

		++column;

		if (column == _itemsByRow) {
			++row;
			column = 0;
		}
	}

	updateScrollbarLength();
	updateScrollbarPosition();

	GfxMan.unlockFrame();
}
void WidgetListEditor::addItem(QWidget *item)
{
  WidgetListItem* widgetListItem = new WidgetListItem(this);
  widgetListItem->setItem(item);
  ui->list->addWidget(widgetListItem);

  connect(widgetListItem, SIGNAL(deleteItem()), this, SLOT(on_deleteItem()));
  connect(widgetListItem, SIGNAL(moveUp()), this, SLOT(on_moveUp()));
  connect(widgetListItem, SIGNAL(moveDown()), this, SLOT(on_moveDown()));
}
Esempio n. 4
0
void WidgetGridBox::updateVisible() {
	if (_visibleItems.empty())
		return;

	GfxMan.lockFrame();

	for (uint i = 0; i < _visibleItems.size(); i++)
		_visibleItems[i]->hide();

	if (_visibleItems.size() > _items.size())
		_visibleItems.resize(_items.size());

	float itemHeight = _items.front()->getHeight() + _innerVSpace;
	float itemWidth  = _items.front()->getWidth() + _innerHSpace;
	float itemY      = _contentY - itemHeight + _innerVSpace;

	uint column = 0;
	int  count  = 0;

	if (_items.size() - _startItem <= _visibleItems.size())
		count = _items.size() % _itemsByRow;

	for (uint i = 0; i < (_visibleItems.size() - count); i++) {
		WidgetListItem *item = _items[_startItem + i];

		if (column == _itemsByRow) {
			itemY -= itemHeight;
			column = 0;
		}

		// WORKAROUND: The x axis is shifted by 2 pixels in order to correctly render in
		// the charportrait widget.
		item->setPosition(_contentX + column * itemWidth - 2.0, itemY, _contentZ - 5.0);
		_visibleItems[i] = item;

		if (isVisible())
			_visibleItems[i]->show();

		++column;
	}

	GfxMan.unlockFrame();
}
Esempio n. 5
0
void WidgetGridBox::subActive(Widget &widget) {
	if (widget.getTag().endsWith("#Up")) {
		scrollUp(1);
		return;
	}

	if (widget.getTag().endsWith("#Down")) {
		scrollDown(1);
		return;
	}

	if (widget.getTag().endsWith("#Bar")) {
		if (_itemsByRow == 0)
			return;

		//                                                     Round up
		const size_t rowCount   = (_items.size()        + (_itemsByRow - 1)) / _itemsByRow;
		const size_t visibleRow = (_visibleItems.size() + (_itemsByRow - 1)) / _itemsByRow;

		const ptrdiff_t maxStartRow = rowCount - visibleRow;
		if (maxStartRow <= 0)
			return;

		const size_t startRow  = _scrollbar->getState() * maxStartRow;
		const size_t startItem = startRow * _itemsByRow;

		if (startItem == _startItem)
			return;

		_startItem = startItem;
		updateVisible();
		return;
	}

	WidgetListItem *listItem = dynamic_cast<WidgetListItem *>(&widget);
	if (listItem) {
		if (_selectedItem != listItem->getItemNumber()) {
			_selectedItem = listItem->getItemNumber();
			setActive(true);
			playSound("gui_button", Sound::kSoundTypeSFX);
		}
	}
}
Esempio n. 6
0
void WidgetListBox::unlock() {
	assert(_locked);
	_locked = false;

	if (_items.empty()) {
		GfxMan.unlockFrame();
		return;
	}

	size_t count = MIN<size_t>(_contentHeight / _items.front()->getHeight(), _items.size());
	if ((count == 0) || (count == _visibleItems.size())) {
		GfxMan.unlockFrame();
		return;
	}

	assert(_visibleItems.size() < count);

	_visibleItems.reserve(count);

	size_t start = _startItem + _visibleItems.size();

	float itemHeight = _items.front()->getHeight();
	while (_visibleItems.size() < count) {
		WidgetListItem *item = _items[start++];

		float itemY = _contentY - (_visibleItems.size() + 1) * itemHeight;
		item->setPosition(_contentX, itemY, _contentZ - 5.0f);

		_visibleItems.push_back(item);
		if (isVisible())
			_visibleItems.back()->show();
	}

	updateScrollbarLength();
	updateScrollbarPosition();

	GfxMan.unlockFrame();
}
Esempio n. 7
0
void WidgetGridBox::subActive(Widget &widget) {
	if (widget.getTag().endsWith("#Up")) {
		scrollUp(1);
		return;
	}

	if (widget.getTag().endsWith("#Down")) {
		scrollDown(1);
		return;
	}

	if (widget.getTag().endsWith("#Bar")) {
		if (_items.size() - _visibleItems.size() == 0)
			return;

		uint maxIfFilled = _items.size() + _itemsByRow - _items.size() % _itemsByRow;
		uint maxVisible  = floor(_contentHeight / _items.front()->getHeight()) * _itemsByRow;

		uint startItem = floor(_scrollbar->getState() * (maxIfFilled - maxVisible)
		                       / _itemsByRow) * _itemsByRow;

		if (startItem == _startItem)
			return;

		_startItem = startItem;
		updateVisible();
		return;
	}

	WidgetListItem *listItem = dynamic_cast<WidgetListItem *>(&widget);
	if (listItem) {
		if (_selectedItem != listItem->getItemNumber()) {
			_selectedItem = listItem->getItemNumber();
			setActive(true);
			playSound("gui_button", Sound::kSoundTypeSFX);
		}
	}
}
QList<QWidget*> WidgetListEditor::items()
{
  QList<QWidget*> list;

  for (int i = 0; i < ui->list->count(); i++)
  {
    QLayoutItem* layoutItem = ui->list->itemAt(i);
    if (layoutItem)
    {
      WidgetListItem* widgetListItem = dynamic_cast<WidgetListItem*>(layoutItem->widget());
      if (widgetListItem)
      {
        QWidget* item = widgetListItem->item();
        if (item != NULL)
        {
          list.append(item);
        }
      }
    }
  }

  return list;
}