Ticket #1392: 1392.3.diff

File 1392.3.diff, 4.8 KB (added by trompetin17, 9 years ago)
  • source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Object/Object.cpp

     
    1 /* Copyright (C) 2014 Wildfire Games.
     1/* Copyright (C) 2015 Wildfire Games.
    22 * This file is part of 0 A.D.
    33 *
    44 * 0 A.D. is free software: you can redistribute it and/or modify
     
    7172
    7273    void OnFirstDisplay();
    7374    void ShowActorViewer(bool show);
     75    void OnSelectedObjectsChange(const std::vector<AtlasMessage::ObjectID>& selectedObjects);
    7476
    7577private:
    7678    void OnViewerSetting(wxCommandEvent& evt);
     
    8890    int m_ViewerPropPointsMode; // 0 disabled, 1 for point markers, 2 for point markers + axes
    8991
    9092    wxPanel* m_ViewerPanel;
     93    wxScrolledWindow* m_TemplateNames;
    9194
    9295    ObjectSidebarImpl* p;
    93 
    9496    DECLARE_EVENT_TABLE();
    9597};
    9698
     
    462511    mainSizer->Add(playerVariationSizer, wxSizerFlags().Expand());
    463512
    464513    // ----------------------------------------------------------------------------------
     514    // --- display template name
     515    wxSizer* displaySizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Selected entity templates"));
     516    m_TemplateNames = new wxScrolledWindow(this);
     517    m_TemplateNames->SetMinSize(wxSize(250, -1));
     518    m_TemplateNames->SetScrollRate(0, 5);
     519    wxSizer* scrollwindowSizer = new wxBoxSizer(wxVERTICAL);
     520    m_TemplateNames->SetSizer(scrollwindowSizer);
     521    displaySizer->Add(m_TemplateNames, wxSizerFlags().Proportion(1).Expand());
     522    m_TemplateNames->Layout();
     523    mainSizer->AddSpacer(3);
     524    mainSizer->Add(displaySizer, wxSizerFlags().Proportion(1).Expand());
    465525
     526    g_SelectedObjects.RegisterObserver(0, &ObjectBottomBar::OnSelectedObjectsChange, this);
     527
    466528    SetSizer(mainSizer);
    467529}
    468530
     531static wxControl* CreateTemplateNameObject(wxWindow* parent, const std::string templateName, int counterTemplate)
     532{
     533    wxString idTemplate(templateName.c_str());
     534    if (counterTemplate > 1)
     535        idTemplate.Append(wxString::Format(wxT(" (%i)"), counterTemplate));
     536
     537    wxStaticText* templateNameObject= new wxStaticText(parent, wxID_ANY, idTemplate);
     538    return templateNameObject;
     539}
     540void ObjectBottomBar::OnSelectedObjectsChange(const std::vector<AtlasMessage::ObjectID>& selectedObjects)
     541{
     542    Freeze();
     543    wxSizer* sizer = m_TemplateNames->GetSizer();
     544    sizer->Clear(true);
     545    AtlasMessage::qGetSelectedObjectsTemplateNames objectTemplatesName(selectedObjects);
     546    objectTemplatesName.Post();
     547    std::vector<std::string> names = *objectTemplatesName.names;
     548    int counterTemplate = 0;
     549    std::string lastTemplateName = "";
     550    for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); ++it)
     551    {
     552        if (lastTemplateName == "")
     553            lastTemplateName = (*it);
     554
     555        if (lastTemplateName == (*it))
     556        {
     557            ++counterTemplate;
     558            continue;
     559        }
     560
     561        sizer->Add(CreateTemplateNameObject(m_TemplateNames, lastTemplateName, counterTemplate), wxSizerFlags().Align(wxALIGN_LEFT));
     562
     563        lastTemplateName = (*it);
     564        counterTemplate = 1;
     565    }
     566
     567    //add the last template
     568    sizer->Add(CreateTemplateNameObject(m_TemplateNames, lastTemplateName, counterTemplate), wxSizerFlags().Align(wxALIGN_LEFT));
     569
     570    Thaw();
     571    sizer->FitInside(m_TemplateNames);
     572}
     573
    469574void ObjectBottomBar::OnFirstDisplay()
    470575{
    471576    // We use messages here because the simulation is not init'd otherwise (causing a crash)
  • source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp

     
    9751149    AtlasView::GetView_Game()->SetBandbox(msg->show, (float)msg->sx0, (float)msg->sy0, (float)msg->sx1, (float)msg->sy1);
    9761150}
    9771151
     1152QUERYHANDLER(GetSelectedObjectsTemplateNames)
     1153{
     1154    std::vector<entity_id_t> ids = *msg->ids;
     1155    std::vector<std::string> names;
     1156
     1157    CmpPtr<ICmpTemplateManager> cmpTemplateManager(*g_Game->GetSimulation2(), SYSTEM_ENTITY);
     1158    ENSURE(cmpTemplateManager);
     1159
     1160    for (size_t i = 0; i < ids.size(); ++i)
     1161    {
     1162        entity_id_t id = (entity_id_t)ids[i];
     1163        std::string templateName = cmpTemplateManager->GetCurrentTemplateName(id);
     1164        names.push_back(templateName);
     1165    }
     1166
     1167    std::sort(names.begin(), names.end());
     1168    msg->names = names;
    9781169}
     1170}
  • source/tools/atlas/GameInterface/Messages.h

     
    693712        ((Position, position))
    694713        );
    695714
     715QUERY(GetSelectedObjectsTemplateNames,
     716        ((std::vector<ObjectID>, ids))
     717        ,
     718        ((std::vector<std::string>, names))
     719        );
    696720
     721
    697722#ifndef MESSAGES_SKIP_SETUP
    698723#include "MessagesSetup.h"
    699724#endif