void RadioButtonGroup::InsertButton(std::size_t index, const std::string& text, const boost::shared_ptr<Font>& font, Flags<TextFormat> format, Clr color, Clr text_color/* = CLR_BLACK*/, Clr interior/* = CLR_ZERO*/, StateButtonStyle style/* = SBSTYLE_3D_RADIO*/) { assert(index <= m_button_slots.size()); StateButton* button = GetStyleFactory()->NewStateButton(X0, Y0, X1, Y1, text, font, format, color, text_color, interior, style); button->Resize(button->MinUsableSize()); InsertButton(index, button); }
StateButton* StyleFactory::NewTabBarTab(X x, Y y, X w, Y h, const std::string& str, const boost::shared_ptr<Font>& font, Clr color, Clr text_color/* = CLR_BLACK*/, Clr interior/* = CLR_ZERO*/, StateButtonStyle style/* = SBSTYLE_3D_TOP_ATTACHED_TAB*/, Flags<WndFlag> flags/* = INTERACTIVE*/) const { StateButton* retval = NewStateButton(x, y, w, h, str, font, color, text_color, interior, style, flags); retval->Resize(retval->MinUsableSize() + Pt(X(12), Y0)); return retval; }
StateButton* StyleFactory::NewTabBarTab(const std::string& str, const boost::shared_ptr<Font>& font, Flags<TextFormat> format, Clr color, Clr text_color/* = CLR_BLACK*/, Clr interior/* = CLR_ZERO*/, StateButtonStyle style/* = SBSTYLE_3D_TOP_ATTACHED_TAB*/) const { StateButton* retval = new StateButton(str, font, format, color, text_color, interior, style); retval->Resize(retval->MinUsableSize() + Pt(X(12), Y0)); return retval; }
Pt StateButtonRepresenter::MinUsableSize(const StateButton& button) const { Pt bn_ul, bn_lr, tx_ul; DoLayout(button, bn_ul, bn_lr, tx_ul); Pt text_lr = tx_ul + button.GetLabel()->MinUsableSize(); return Pt(std::max(bn_lr.x, text_lr.x) - std::min(bn_ul.x, tx_ul.x), std::max(bn_lr.y, text_lr.y) - std::min(bn_ul.y, tx_ul.y)); }
void TabBar::InsertTab(std::size_t index, const std::string& name) { assert(index <= m_tab_buttons.size()); boost::shared_ptr<StyleFactory> style_factory = GetStyleFactory(); StateButton* button = style_factory->NewTabBarTab(X0, Y0, X1, Y1, name, m_font, FORMAT_CENTER, Color(), m_text_color, CLR_ZERO, m_style == TAB_BAR_ATTACHED ? SBSTYLE_3D_TOP_ATTACHED_TAB : SBSTYLE_3D_TOP_DETACHED_TAB); button->InstallEventFilter(this); m_tab_buttons.insert(m_tab_buttons.begin() + index, button); m_tabs->InsertButton(index, m_tab_buttons[index]); if (Width() < m_tabs->Width()) { m_left_right_button_layout->Show(); m_left_button->Disable(m_first_tab_shown == 0); X right_side = m_left_right_button_layout->Visible() ? m_left_button->UpperLeft().x : LowerRight().x; m_right_button->Disable(m_tab_buttons.back()->LowerRight().x <= right_side); } if (m_tabs->CheckedButton() == RadioButtonGroup::NO_BUTTON) SetCurrentTab(0); }
//////////////////////////////////////////////// // GG::BeveledTabRepresenter //////////////////////////////////////////////// void BeveledTabRepresenter::Render(const StateButton& button) const { const int BEVEL = 2; // draw button Pt cl_ul = button.ClientUpperLeft(); Pt cl_lr = button.ClientLowerRight(); Pt tx_ul = Pt(); Clr color_to_use = button.Checked() ? button.Color() : DarkColor(button.Color()); color_to_use = button.Disabled() ? DisabledColor(color_to_use) : color_to_use; if (!button.Checked()) { cl_ul.y += BEVEL; tx_ul.y = Y(BEVEL / 2); } BeveledRectangle(cl_ul, cl_lr, color_to_use, color_to_use, true, BEVEL, true, true, true, !button.Checked()); button.GetLabel()->OffsetMove(tx_ul); button.GetLabel()->Render(); button.GetLabel()->OffsetMove(-(tx_ul)); }
Pt BeveledTabRepresenter::MinUsableSize(const StateButton& button) const { return button.GetLabel()->MinUsableSize(); }