void MultiListBox::updateOnlyEmpty() { if (nullptr == mWidgetEmpty) return; // кнопка, для заполнения пустоты if (mWidthBar >= mClient->getWidth()) mWidgetEmpty->setVisible(false); else { mWidgetEmpty->setCoord(mWidthBar, 0, mClient->getWidth() - mWidthBar, getButtonHeight()); mWidgetEmpty->setVisible(true); } }
void MultiListBox::updateColumns() { size_t countStars = 0; size_t lastIndexStar = ITEM_NONE; int allColumnsWidth = updateWidthColumns(countStars, lastIndexStar); int clientWidth = mClient->getWidth(); int separatorsWidth = mVectorColumnInfo.empty() ? 0 : (mVectorColumnInfo.size() - 1) * mWidthSeparator; int freeSpace = clientWidth - separatorsWidth - allColumnsWidth; int starWidth = (countStars != 0 && freeSpace > 0) ? (freeSpace / countStars) : 0; mWidthBar = 0; for (size_t index = 0; index < mVectorColumnInfo.size(); ++ index) { ColumnInfo& info = mVectorColumnInfo[index]; int columnWidth = getColumnWidth(index, freeSpace, countStars, lastIndexStar, starWidth); if (mHeaderPlace != nullptr) { info.item->setCoord(mWidthBar, 0, columnWidth, mClient->getHeight()); } else { info.item->setCoord(mWidthBar, mHeightButton, columnWidth, mClient->getHeight() - mHeightButton); } info.button->setCoord(mWidthBar, 0, columnWidth, getButtonHeight()); info.button->_setInternalData(index); mWidthBar += columnWidth; // промежуток между листами Widget* separator = getSeparator(index); if (separator) { separator->setCoord(mWidthBar, 0, mWidthSeparator, mClient->getHeight()); } mWidthBar += mWidthSeparator; } redrawButtons(); updateOnlyEmpty(); }
void MultiListBox::initialiseOverride() { Base::initialiseOverride(); std::string skinButtonEmpty; if (isUserString("SkinButton")) mSkinButton = getUserString("SkinButton"); if (isUserString("SkinList")) mSkinList = getUserString("SkinList"); if (isUserString("SkinSeparator")) mSkinSeparator = getUserString("SkinSeparator"); if (isUserString("WidthSeparator")) mWidthSeparator = utility::parseValue<int>(getUserString("WidthSeparator")); // OBSOLETE if (isUserString("HeightButton")) mHeightButton = utility::parseValue<int>(getUserString("HeightButton")); if (mHeightButton < 0) mHeightButton = 0; assignWidget(mHeaderPlace, "HeaderPlace"); assignWidget(mClient, "Client"); if (mClient != nullptr) setWidgetClient(mClient); if (nullptr == mClient) mClient = this; assignWidget(mWidgetEmpty, "Empty"); if (mWidgetEmpty == nullptr) { if (isUserString("SkinButtonEmpty")) skinButtonEmpty = getUserString("SkinButtonEmpty"); if (!skinButtonEmpty.empty()) mWidgetEmpty = mClient->createWidget<Widget>(skinButtonEmpty, IntCoord(0, 0, mClient->getWidth(), getButtonHeight()), Align::Default); } if (getUpdateByResize()) updateColumns(); }
void MultiListBox::initialiseOverride() { Base::initialiseOverride(); std::string skinButtonEmpty; if (isUserString("SkinButton")) mSkinButton = getUserString("SkinButton"); if (isUserString("SkinList")) mSkinList = getUserString("SkinList"); if (isUserString("SkinSeparator")) mSkinSeparator = getUserString("SkinSeparator"); if (isUserString("WidthSeparator")) mWidthSeparator = utility::parseValue<int>(getUserString("WidthSeparator")); // OBSOLETE if (isUserString("HeightButton")) mHeightButton = utility::parseValue<int>(getUserString("HeightButton")); if (mHeightButton < 0) mHeightButton = 0; ///@wskin_child{MultiListBox, Widget, HeaderPlace} Место для заголовков колонок. assignWidget(mHeaderPlace, "HeaderPlace"); ///@wskin_child{MultiListBox, Widget, Client} Клиентская зона. assignWidget(mClient, "Client"); if (mClient != nullptr) setWidgetClient(mClient); if (nullptr == mClient) mClient = this; ///@wskin_child{MultiListBox, Widget, Empty} Виджет для заголовка в месте где нет списков. assignWidget(mWidgetEmpty, "Empty"); if (mWidgetEmpty == nullptr) { if (isUserString("SkinButtonEmpty")) skinButtonEmpty = getUserString("SkinButtonEmpty"); if (!skinButtonEmpty.empty()) mWidgetEmpty = mClient->createWidget<Widget>(skinButtonEmpty, IntCoord(0, 0, mClient->getWidth(), getButtonHeight()), Align::Default); } if (getUpdateByResize()) updateColumns(); }