void FieldIcon::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { Wnd::SizeMove(ul, lr); GG::Pt middle = GG::Pt(Width() / 2, Height() / 2); const int SEL_IND_WIDTH_HEIGHT = ClientUI::SystemSelectionIndicatorSize() * Value(Width()) / ClientUI::SystemIconSize(); const GG::Pt SEL_IND_SIZE = GG::Pt(GG::X(SEL_IND_WIDTH_HEIGHT), GG::Y(SEL_IND_WIDTH_HEIGHT)); // selection indicator if (m_selected && m_selection_indicator) { GG::Pt sel_ind_ul(static_cast<GG::X>(middle.x - SEL_IND_SIZE.x / 2.0), static_cast<GG::Y>(middle.y - SEL_IND_SIZE.y / 2.0)); m_selection_indicator->SizeMove(sel_ind_ul, sel_ind_ul + SEL_IND_SIZE); AttachChild(m_selection_indicator); m_selection_indicator->Show(); } else if (m_selection_indicator) { DetachChild(m_selection_indicator); m_selection_indicator->Hide(); } // mouseover indicator - attach / detach / show / hide done by MouseEnter and MouseLeave if (m_mouseover_indicator) { GG::Pt mouse_ind_ul(static_cast<GG::X>(middle.x - SEL_IND_SIZE.x / 2.0), static_cast<GG::Y>(middle.y - SEL_IND_SIZE.y / 2.0)); m_mouseover_indicator->SizeMove(mouse_ind_ul, mouse_ind_ul + SEL_IND_SIZE); } else { DetachChild(m_mouseover_indicator); } }
void ModeratorActionsWnd::CreatePlanetClicked() { m_selected_action = MAS_CreatePlanet; CreatePlanetActionSelectedSignal(SelectedPlanetType()); DetachChild(m_star_type_drop); AttachChild(m_planet_type_drop); AttachChild(m_planet_size_drop); DetachChild(m_empire_drop); }
void ModeratorActionsWnd::DeleteObjectClicked() { m_selected_action = MAS_Destroy; DeleteObjectActionSelectedSignal(); DetachChild(m_star_type_drop); DetachChild(m_planet_type_drop); DetachChild(m_planet_size_drop); DetachChild(m_empire_drop); }
void ModeratorActionsWnd::SetOwnerClicked() { m_selected_action = MAS_SetOwner; SetOwnerActionSelectedSignal(SelectedEmpire()); DetachChild(m_star_type_drop); DetachChild(m_planet_type_drop); DetachChild(m_planet_size_drop); AttachChild(m_empire_drop); }
void ModeratorActionsWnd::NoActionClicked() { m_selected_action = MAS_NoAction; NoActionSelectedSignal(); DetachChild(m_star_type_drop); DetachChild(m_planet_type_drop); DetachChild(m_planet_size_drop); DetachChild(m_empire_drop); }
void ModeratorActionsWnd::RemoveStarlane() { m_selected_action = MAS_RemoveStarlane; AddStarlaneActionSelectedSignal(); DetachChild(m_star_type_drop); DetachChild(m_planet_type_drop); DetachChild(m_planet_size_drop); DetachChild(m_empire_drop); }
FleetButton::~FleetButton() { DetachChild(m_selection_indicator); delete m_selection_indicator; if (m_scanline_control) { DetachChild(m_scanline_control); delete m_scanline_control; } }
void ResourcePanel::DoLayout() { AccordionPanel::DoLayout(); for (std::vector<std::pair<MeterType, StatisticIcon*> >::iterator it = m_meter_stats.begin(); it != m_meter_stats.end(); ++it) { DetachChild(it->second); } // detach / hide meter bars and large resource indicators DetachChild(m_multi_meter_status_bar); DetachChild(m_multi_icon_value_indicator); // update size of panel and position and visibility of widgets if (!s_expanded_map[m_rescenter_id]) { // position and reattach icons to be shown int n = 0; for (std::vector<std::pair<MeterType, StatisticIcon*> >::iterator it = m_meter_stats.begin(); it != m_meter_stats.end(); ++it) { GG::X x = MeterIconSize().x*n*7/2; if (x > Width() - m_expand_button->Width() - MeterIconSize().x*5/2) break; // ensure icon doesn't extend past right edge of panel StatisticIcon* icon = it->second; AttachChild(icon); GG::Pt icon_ul(x, GG::Y0); GG::Pt icon_lr = icon_ul + MeterIconSize(); icon->SizeMove(icon_ul, icon_lr); icon->Show(); n++; } Resize(GG::Pt(Width(), std::max(MeterIconSize().y, m_expand_button->Height()))); } else { // attach and show meter bars and large resource indicators GG::Y top = GG::Y0; AttachChild(m_multi_icon_value_indicator); m_multi_icon_value_indicator->MoveTo(GG::Pt(GG::X(EDGE_PAD), top)); m_multi_icon_value_indicator->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_icon_value_indicator->Height())); top += m_multi_icon_value_indicator->Height() + EDGE_PAD; AttachChild(m_multi_meter_status_bar); m_multi_meter_status_bar->MoveTo(GG::Pt(GG::X(EDGE_PAD), top)); m_multi_meter_status_bar->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_meter_status_bar->Height())); top += m_multi_icon_value_indicator->Height() + EDGE_PAD; MoveChildUp(m_expand_button); Resize(GG::Pt(Width(), top)); } m_expand_button->MoveTo(GG::Pt(Width() - m_expand_button->Width(), GG::Y0)); SetCollapsed(!s_expanded_map[m_rescenter_id]); }
void ResourcePanel::DoLayout() { AccordionPanel::DoLayout(); for (auto& meter_stat : m_meter_stats) { DetachChild(meter_stat.second); } // detach / hide meter bars and large resource indicators DetachChild(m_multi_meter_status_bar); DetachChild(m_multi_icon_value_indicator); // update size of panel and position and visibility of widgets if (!s_expanded_map[m_rescenter_id]) { // position and reattach icons to be shown int n = 0; GG::X stride = MeterIconSize().x * 7/2; for (auto& meter_stat : m_meter_stats) { GG::X x = n * stride; auto& icon = meter_stat.second; GG::Pt icon_ul(x, GG::Y0); GG::Pt icon_lr = icon_ul + MeterIconSize(); icon->SizeMove(icon_ul, icon_lr); if (x + icon->MinUsableSize().x >= ClientWidth()) break; AttachChild(icon); icon->Show(); n++; } Resize(GG::Pt(Width(), std::max(MeterIconSize().y, m_expand_button->Height()))); } else { // attach and show meter bars and large resource indicators GG::Y top = Top(); AttachChild(m_multi_icon_value_indicator); m_multi_icon_value_indicator->MoveTo(GG::Pt(GG::X(EDGE_PAD), GG::Y(EDGE_PAD))); m_multi_icon_value_indicator->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_icon_value_indicator->Height())); AttachChild(m_multi_meter_status_bar); m_multi_meter_status_bar->MoveTo(GG::Pt(GG::X(EDGE_PAD), m_multi_icon_value_indicator->Bottom() + EDGE_PAD - top)); m_multi_meter_status_bar->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_meter_status_bar->Height())); MoveChildUp(m_expand_button); Resize(GG::Pt(Width(), m_multi_meter_status_bar->Bottom() + EDGE_PAD - top)); } SetCollapsed(!s_expanded_map[m_rescenter_id]); }
void CUIListWnd::RemoveItem(int index) { if(index<0 || index>=(int)m_ItemList.size()) return; LIST_ITEM_LIST_it it; //выбрать нужный элемент it = m_ItemList.begin(); for(int i=0; i<index;++i, ++it); R_ASSERT(m_ItemList.end() != it); DetachChild(*it); UpdateList(); //обновить полосу прокрутки if(m_ItemList.size()>0) m_ScrollBar->SetRange(0,s16(m_ItemList.size()-1)); else m_ScrollBar->SetRange(0,0); m_ScrollBar->SetPageSize( (m_iRowNum < (int)m_ItemList.size())? m_iRowNum : (int)m_ItemList.size() ); m_ScrollBar->SetScrollPos(s16(m_iFirstShownIndex)); m_ScrollBar->Refresh(); //перенумеровать индексы заново i=0; for(LIST_ITEM_LIST_it it=m_ItemList.begin(); m_ItemList.end() != it; ++it,i++) { (*it)->SetIndex(i); } }
void CUIListWnd::RemoveAll() { if(m_ItemList.empty()) return; LIST_ITEM_LIST_it it; while(!m_ItemList.empty()) { DetachChild(m_ItemList.front()); } m_iFirstShownIndex = 0; UpdateList(); Reset(); //обновить полосу прокрутки m_ScrollBar->SetRange(0,0); m_ScrollBar->SetPageSize(1); m_ScrollBar->SetScrollPos(s16(m_iFirstShownIndex)); UpdateScrollBar(); }
void FieldIcon::MouseLeave() { // un-indicate mouseover if (m_mouseover_indicator) DetachChild(m_mouseover_indicator); MouseLeavingSignal(m_field_id); }
CUIListWnd::~CUIListWnd() { while(!m_ItemList.empty()) DetachChild(m_ItemList.front()); m_ItemList.clear (); xr_delete (m_ActiveBackgroundFrame); }
void FieldIcon::MouseEnter(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { // indicate mouseover if (m_mouseover_indicator) { AttachChild(m_mouseover_indicator); MoveChildUp(m_mouseover_indicator); } else if (m_mouseover_indicator) { DetachChild(m_mouseover_indicator); } MouseEnteringSignal(m_field_id); }
void CUIRankIndicator::SetRank(u8 team, u8 rank) { rank +=team*(max_rank/2); if(m_current==rank) return; if(m_current!=u8(-1)) DetachChild (m_ranks[m_current]); m_current = rank; AttachChild (m_ranks[m_current]); }
void FleetButton::SetSelected(bool selected) { m_selected = selected; if (!m_selected) { DetachChild(m_selection_indicator); m_selection_indicator->Hide(); return; } AttachChild(m_selection_indicator); m_selection_indicator->Show(); MoveChildDown(m_selection_indicator); LayoutIcons(); }
void BuildingsPanel::Update() { //std::cout << "BuildingsPanel::Update" << std::endl; // remove old indicators for (std::vector<BuildingIndicator*>::iterator it = m_building_indicators.begin(); it != m_building_indicators.end(); ++it) { DetachChild(*it); delete (*it); } m_building_indicators.clear(); TemporaryPtr<const Planet> planet = GetPlanet(m_planet_id); if (!planet) { ErrorLogger() << "BuildingsPanel::Update couldn't get planet with id " << m_planet_id; return; } const std::set<int>& buildings = planet->BuildingIDs(); int system_id = planet->SystemID(); const int indicator_size = static_cast<int>(Value(Width() * 1.0 / m_columns)); int this_client_empire_id = HumanClientApp::GetApp()->EmpireID(); const std::set<int>& this_client_known_destroyed_objects = GetUniverse().EmpireKnownDestroyedObjectIDs(this_client_empire_id); const std::set<int>& this_client_stale_object_info = GetUniverse().EmpireStaleKnowledgeObjectIDs(this_client_empire_id); // get existing / finished buildings and use them to create building indicators for (std::set<int>::const_iterator it = buildings.begin(); it != buildings.end(); ++it) { int object_id = *it; // skip known destroyed and stale info objects if (this_client_known_destroyed_objects.find(object_id) != this_client_known_destroyed_objects.end()) continue; if (this_client_stale_object_info.find(object_id) != this_client_stale_object_info.end()) continue; TemporaryPtr<const Building> building = GetBuilding(object_id); if (!building) { ErrorLogger() << "BuildingsPanel::Update couldn't get building with id: " << object_id << " on planet " << planet->Name(); continue; } if (building->SystemID() != system_id || building->PlanetID() != m_planet_id) continue; BuildingIndicator* ind = new BuildingIndicator(GG::X(indicator_size), object_id); m_building_indicators.push_back(ind); GG::Connect(ind->RightClickedSignal, BuildingRightClickedSignal); } // get in-progress buildings const Empire* empire = GetEmpire(planet->Owner()); if (!empire) return; const ProductionQueue& queue = empire->GetProductionQueue(); int queue_index = 0; for (ProductionQueue::const_iterator queue_it = queue.begin(); queue_it != queue.end(); ++queue_it, ++queue_index) { const ProductionQueue::Element elem = *queue_it; if (elem.item.build_type != BT_BUILDING) continue; // don't show in-progress ships in BuildingsPanel... if (elem.location != m_planet_id) continue; // don't show buildings located elsewhere double total_cost; int total_turns; boost::tie(total_cost, total_turns) = empire->ProductionCostAndTime(elem); double progress = std::max(0.0f, empire->ProductionStatus(queue_index)); double turns_completed = total_turns * std::min<double>(1.0, progress / total_cost); BuildingIndicator* ind = new BuildingIndicator(GG::X(indicator_size), elem.item.name, turns_completed, total_turns); m_building_indicators.push_back(ind); } }
void BuildingsPanel::DoLayout() { AccordionPanel::DoLayout(); int row = 0; int column = 0; const int padding = 5; // space around and between adjacent indicators const GG::X effective_width = Width() - padding * (m_columns + 1); // padding on either side and between const int indicator_size = static_cast<int>(Value(effective_width * 1.0 / m_columns)); GG::Y height; // update size of panel and position and visibility of widgets if (!s_expanded_map[m_planet_id]) { int n = 0; for (std::vector<BuildingIndicator*>::iterator it = m_building_indicators.begin(); it != m_building_indicators.end(); ++it) { BuildingIndicator* ind = *it; const GG::Pt ul = GG::Pt(MeterIconSize().x * n, GG::Y0); const GG::Pt lr = ul + MeterIconSize(); if (lr.x < Width() - m_expand_button->Width()) { ind->SizeMove(ul, lr); AttachChild(ind); } else { DetachChild(ind); } ++n; } height = m_expand_button->Height(); } else { for (std::vector<BuildingIndicator*>::iterator it = m_building_indicators.begin(); it != m_building_indicators.end(); ++it) { BuildingIndicator* ind = *it; const GG::Pt ul = GG::Pt(GG::X(padding * (column + 1) + indicator_size * column), GG::Y(padding * (row + 1) + indicator_size * row)); const GG::Pt lr = ul + GG::Pt(GG::X(indicator_size), GG::Y(indicator_size)); ind->SizeMove(ul, lr); AttachChild(ind); ind->Show(); ++column; if (column >= m_columns) { column = 0; ++row; } } if (column == 0) height = GG::Y(padding * (row + 1) + row * indicator_size); // if column is 0, then there are no buildings in the next row else height = GG::Y(padding * (row + 2) + (row + 1) * indicator_size); // if column != 0, there are buildings in the next row, so need to make space } if (m_building_indicators.empty()) { height = GG::Y(0); // hide if empty DetachChild(m_expand_button); } else { AttachChild(m_expand_button); m_expand_button->Show(); if (height < MeterIconSize().y) height = MeterIconSize().y; } Resize(GG::Pt(Width(), height)); Wnd::MoveChildUp(m_expand_button); m_expand_button->MoveTo(GG::Pt(Width() - m_expand_button->Width(), GG::Y0)); SetCollapsed(!s_expanded_map[m_planet_id]); }
cgFlyBox::~cgFlyBox(void) { DetachChild(&m_spModel); }
void CUIWindow::DetachAll() { while( !m_ChildWndList.empty() ){ DetachChild( m_ChildWndList.back() ); } }
void CUIWeaponCellItem::DestroyIcon(eAddonType t) { DetachChild (m_addons[t]); m_addons[t] = NULL; }
U2SpatialPtr U2BspNode::DetachCoplanarChild() { return DetachChild(1); }
U2Node::~U2Node() { for(uint32 i=0; i < m_childArray.Size(); ++i) DetachChild(i); }
U2SpatialPtr U2BspNode::DetachBackChild() { return DetachChild(2); }
U2SpatialPtr U2BspNode::DetachFrontChild() { return DetachChild(0); }
U2SpatialPtr U2ConvexRegionMgr::DetachOutsideScene() { return DetachChild(1); }