forked from 0ad/0ad
Add a list of selected entities, grouped by template.
Patch by trompetin17, fixes #1392 This was SVN commit r16255.
This commit is contained in:
parent
3225e564fe
commit
d71161fe4c
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2014 Wildfire Games.
|
||||
/* Copyright (C) 2015 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -71,6 +71,7 @@ public:
|
||||
|
||||
void OnFirstDisplay();
|
||||
void ShowActorViewer(bool show);
|
||||
void OnSelectedObjectsChange(const std::vector<AtlasMessage::ObjectID>& selectedObjects);
|
||||
|
||||
private:
|
||||
void OnViewerSetting(wxCommandEvent& evt);
|
||||
@ -88,9 +89,9 @@ private:
|
||||
int m_ViewerPropPointsMode; // 0 disabled, 1 for point markers, 2 for point markers + axes
|
||||
|
||||
wxPanel* m_ViewerPanel;
|
||||
wxScrolledWindow* m_TemplateNames;
|
||||
|
||||
ObjectSidebarImpl* p;
|
||||
|
||||
DECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
||||
@ -462,10 +463,68 @@ ObjectBottomBar::ObjectBottomBar(
|
||||
mainSizer->Add(playerVariationSizer, wxSizerFlags().Expand());
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// --- display template name
|
||||
wxSizer* displaySizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Selected entities"));
|
||||
m_TemplateNames = new wxScrolledWindow(this);
|
||||
m_TemplateNames->SetMinSize(wxSize(250, -1));
|
||||
m_TemplateNames->SetScrollRate(0, 5);
|
||||
wxSizer* scrollwindowSizer = new wxBoxSizer(wxVERTICAL);
|
||||
m_TemplateNames->SetSizer(scrollwindowSizer);
|
||||
displaySizer->Add(m_TemplateNames, wxSizerFlags().Proportion(1).Expand());
|
||||
m_TemplateNames->Layout();
|
||||
mainSizer->AddSpacer(3);
|
||||
mainSizer->Add(displaySizer, wxSizerFlags().Proportion(1).Expand());
|
||||
|
||||
g_SelectedObjects.RegisterObserver(0, &ObjectBottomBar::OnSelectedObjectsChange, this);
|
||||
|
||||
SetSizer(mainSizer);
|
||||
}
|
||||
|
||||
static wxControl* CreateTemplateNameObject(wxWindow* parent, const std::string templateName, int counterTemplate)
|
||||
{
|
||||
wxString idTemplate(templateName.c_str());
|
||||
if (counterTemplate > 1)
|
||||
idTemplate.Append(wxString::Format(wxT(" (%i)"), counterTemplate));
|
||||
|
||||
wxStaticText* templateNameObject = new wxStaticText(parent, wxID_ANY, idTemplate);
|
||||
return templateNameObject;
|
||||
}
|
||||
|
||||
void ObjectBottomBar::OnSelectedObjectsChange(const std::vector<AtlasMessage::ObjectID>& selectedObjects)
|
||||
{
|
||||
Freeze();
|
||||
wxSizer* sizer = m_TemplateNames->GetSizer();
|
||||
sizer->Clear(true);
|
||||
|
||||
AtlasMessage::qGetSelectedObjectsTemplateNames objectTemplatesName(selectedObjects);
|
||||
objectTemplatesName.Post();
|
||||
std::vector<std::string> names = *objectTemplatesName.names;
|
||||
|
||||
int counterTemplate = 0;
|
||||
std::string lastTemplateName = "";
|
||||
for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); ++it)
|
||||
{
|
||||
if (lastTemplateName == "")
|
||||
lastTemplateName = (*it);
|
||||
|
||||
if (lastTemplateName == (*it))
|
||||
{
|
||||
++counterTemplate;
|
||||
continue;
|
||||
}
|
||||
|
||||
sizer->Add(CreateTemplateNameObject(m_TemplateNames, lastTemplateName, counterTemplate), wxSizerFlags().Align(wxALIGN_LEFT));
|
||||
|
||||
lastTemplateName = (*it);
|
||||
counterTemplate = 1;
|
||||
}
|
||||
// Add the remaining template
|
||||
sizer->Add(CreateTemplateNameObject(m_TemplateNames, lastTemplateName, counterTemplate), wxSizerFlags().Align(wxALIGN_LEFT));
|
||||
|
||||
Thaw();
|
||||
sizer->FitInside(m_TemplateNames);
|
||||
}
|
||||
|
||||
void ObjectBottomBar::OnFirstDisplay()
|
||||
{
|
||||
// We use messages here because the simulation is not init'd otherwise (causing a crash)
|
||||
|
@ -975,4 +975,22 @@ MESSAGEHANDLER(SetBandbox)
|
||||
AtlasView::GetView_Game()->SetBandbox(msg->show, (float)msg->sx0, (float)msg->sy0, (float)msg->sx1, (float)msg->sy1);
|
||||
}
|
||||
|
||||
QUERYHANDLER(GetSelectedObjectsTemplateNames)
|
||||
{
|
||||
std::vector<entity_id_t> ids = *msg->ids;
|
||||
std::vector<std::string> names;
|
||||
|
||||
CmpPtr<ICmpTemplateManager> cmpTemplateManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY);
|
||||
ENSURE(cmpTemplateManager);
|
||||
|
||||
for (size_t i = 0; i < ids.size(); ++i)
|
||||
{
|
||||
entity_id_t id = (entity_id_t)ids[i];
|
||||
std::string templateName = cmpTemplateManager->GetCurrentTemplateName(id);
|
||||
names.push_back(templateName);
|
||||
}
|
||||
|
||||
std::sort(names.begin(), names.end());
|
||||
msg->names = names;
|
||||
}
|
||||
}
|
||||
|
@ -693,6 +693,12 @@ MESSAGE(TriggerToggleSelector,
|
||||
((Position, position))
|
||||
);
|
||||
|
||||
QUERY(GetSelectedObjectsTemplateNames,
|
||||
((std::vector<ObjectID>, ids))
|
||||
,
|
||||
((std::vector<std::string>, names))
|
||||
);
|
||||
|
||||
|
||||
#ifndef MESSAGES_SKIP_SETUP
|
||||
#include "MessagesSetup.h"
|
||||
|
Loading…
Reference in New Issue
Block a user