Changeset 393 for cafu/trunk

Show
Ignore:
Timestamp:
09/23/11 11:24:21 (8 months ago)
Author:
Carsten
Message:

Model Editor: Merged class SkinsListT back into ElementsListT.

Location:
cafu/trunk/CaWE/ModelEditor
Files:
2 removed
4 modified

Legend:

Unmodified
Added
Removed
  • cafu/trunk/CaWE/ModelEditor/ChildFrame.cpp

    r392 r393  
    3131#include "SceneView3D.hpp" 
    3232#include "ScenePropGrid.hpp" 
    33 #include "SkinsList.hpp" 
    3433#include "SubmodelsList.hpp" 
    3534#include "TransformDialog.hpp" 
     
    245244                         Right().Position(1)); 
    246245 
    247     m_SkinsList=new SkinsPanelT(this, wxSize(230, 150), SKIN); 
     246    m_SkinsList=new ElementsPanelT(this, wxSize(230, 150), SKIN); 
    248247    m_AUIManager.AddPane(m_SkinsList, wxAuiPaneInfo(). 
    249248                         Name("SkinsList").Caption("Skins List"). 
  • cafu/trunk/CaWE/ModelEditor/ChildFrame.hpp

    r383 r393  
    4444    class ScenePropGridT; 
    4545    class SceneView3DT; 
    46     class SkinsPanelT; 
    4746    class SubmodelsPanelT; 
    4847    class TransformDialogT; 
     
    110109        ElementsPanelT*    m_AnimsList; 
    111110        AnimInspectorT*    m_AnimInspector; 
    112         SkinsPanelT*       m_SkinsList; 
     111        ElementsPanelT*    m_SkinsList; 
    113112        ElementsPanelT*    m_GuiFixturesList; 
    114113        GuiFixInspectorT*  m_GuiFixtureInspector; 
  • cafu/trunk/CaWE/ModelEditor/ElementsList.cpp

    r392 r393  
    5050    : wxListView(Parent, wxID_ANY, wxDefaultPosition, Size, wxLC_REPORT | wxLC_EDIT_LABELS), 
    5151      m_TYPE(Type), 
     52      m_NUM_DEFAULT_ITEMS(m_TYPE==SKIN ? 1 : 0), 
    5253      m_ModelDoc(MainFrame->GetModelDoc()), 
    5354      m_MainFrame(MainFrame), 
    5455      m_IsRecursiveSelfNotify(false) 
    5556{ 
    56     wxASSERT(m_TYPE==ANIM || m_TYPE==MESH || m_TYPE==GFIX); 
     57    wxASSERT(m_TYPE==MESH || m_TYPE==SKIN || m_TYPE==GFIX || m_TYPE==ANIM); 
    5758 
    5859    // TODO: Make it up to the caller code to call this? 
     
    7677 
    7778 
     79bool ElementsListT::AreDefaultItemsSelected() const 
     80{ 
     81    for (int ItemNr=0; ItemNr<m_NUM_DEFAULT_ITEMS; ItemNr++) 
     82        if (IsSelected(ItemNr)) 
     83            return true; 
     84 
     85    return false; 
     86} 
     87 
     88 
    7889void ElementsListT::Notify_SelectionChanged(SubjectT* Subject, ModelElementTypeT Type, const ArrayT<unsigned int>& OldSel, const ArrayT<unsigned int>& NewSel) 
    7990{ 
     
    89100 
    90101    for (unsigned long SelNr=0; SelNr<NewSel.Size(); SelNr++) 
    91         Select(NewSel[SelNr]); 
     102        Select(NewSel[SelNr] + m_NUM_DEFAULT_ITEMS); 
     103 
     104    if (NewSel.Size()==0 && m_NUM_DEFAULT_ITEMS>0) 
     105        Select(0); 
    92106 
    93107    Thaw(); 
     
    138152    // Update the list of meshes also when a skin changed, as with each 
    139153    // mesh we display the used material in the currently selected skin. 
    140     if (m_TYPE!=MESH) return; 
     154    if (m_TYPE!=SKIN && m_TYPE!=MESH) return; 
    141155 
    142156    InitListItems(); 
     
    208222 
    209223        case SKIN: 
    210             wxASSERT(false); 
     224            InsertItem(0, "default"); 
     225            SetItem(0, 1, "-1"); 
     226            if (Sel.Size()==0) Select(0); 
     227 
     228            for (unsigned long ElemNr=0; ElemNr<m_ModelDoc->GetModel()->GetSkins().Size(); ElemNr++) 
     229            { 
     230                InsertItem(ElemNr+1, m_ModelDoc->GetModel()->GetSkins()[ElemNr].Name); 
     231                SetItem(ElemNr+1, 1, wxString::Format("%lu", ElemNr)); 
     232 
     233                if (Sel.Find(ElemNr)!=-1) Select(ElemNr+1); 
     234            } 
    211235            break; 
    212236 
     
    251275    wxMenu Menu; 
    252276 
    253     Menu.Append(ID_MENU_INSPECT_EDIT, "Inspect / Edit\tEnter"); 
    254     Menu.Append(ID_MENU_RENAME,       "Rename\tF2"); 
    255  
     277    if (m_TYPE!=SKIN) Menu.Append(ID_MENU_INSPECT_EDIT, "Inspect / Edit\tEnter"); 
     278    Menu.Append(ID_MENU_RENAME, "Rename\tF2"); 
    256279    if (m_TYPE==GFIX) Menu.Append(ID_MENU_ADD_NEW, "Add/create new"); 
    257280 
     
    273296            const long SelNr=GetFirstSelected(); 
    274297 
    275             if (SelNr!=-1) EditLabel(SelNr); 
     298            // Only relabel custom elements (not the "default" ones). 
     299            if (SelNr>=m_NUM_DEFAULT_ITEMS) EditLabel(SelNr); 
    276300            break; 
    277301        } 
     
    279303        case ID_MENU_ADD_NEW: 
    280304        { 
    281             if (m_TYPE==GFIX) 
     305            if (m_TYPE==SKIN) 
     306            { 
     307                CafuModelT::SkinT Skin; 
     308 
     309                Skin.Name="New Skin"; 
     310                while (Skin.Materials.Size()       < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.Materials.PushBack(NULL); 
     311                while (Skin.RenderMaterials.Size() < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.RenderMaterials.PushBack(NULL); 
     312 
     313                m_MainFrame->SubmitCommand(new CommandAddT(m_ModelDoc, Skin)); 
     314            } 
     315            else if (m_TYPE==GFIX) 
    282316            { 
    283317                ArrayT<CafuModelT::GuiFixtureT> GuiFixtures; 
     
    302336            const long SelNr=LE.GetIndex(); 
    303337 
    304             if (SelNr!=-1) EditLabel(SelNr); 
     338            // Only relabel custom elements (not the "default" ones). 
     339            if (SelNr>=m_NUM_DEFAULT_ITEMS) EditLabel(SelNr); 
    305340            break; 
    306341        } 
     
    334369 
    335370    for (long SelNr=GetFirstSelected(); SelNr!=-1; SelNr=GetNextSelected(SelNr)) 
    336         NewSel.PushBack(SelNr); 
     371        if (SelNr>=m_NUM_DEFAULT_ITEMS)     // Skip the "default" elements. 
     372            NewSel.PushBack(SelNr - m_NUM_DEFAULT_ITEMS); 
    337373 
    338374    m_MainFrame->SubmitCommand(CommandSelectT::Set(m_ModelDoc, m_TYPE, NewSel)); 
     
    344380void ElementsListT::OnEndLabelEdit(wxListEvent& LE) 
    345381{ 
    346     const unsigned int Index=LE.GetIndex(); 
     382    const long Index=LE.GetIndex(); 
    347383 
    348384    if (LE.IsEditCancelled()) return; 
     385    if (Index < m_NUM_DEFAULT_ITEMS) { LE.Veto(); return; }   // Cannot relabel the "default" elements. 
    349386 
    350387    m_IsRecursiveSelfNotify=true; 
    351     m_MainFrame->SubmitCommand(new CommandRenameT(m_ModelDoc, m_TYPE, Index, LE.GetLabel())); 
     388    m_MainFrame->SubmitCommand(new CommandRenameT(m_ModelDoc, m_TYPE, Index - m_NUM_DEFAULT_ITEMS, LE.GetLabel())); 
    352389    m_IsRecursiveSelfNotify=false; 
    353390} 
     
    409446        case ID_BUTTON_ADD: 
    410447        { 
    411             if (m_TYPE==GFIX) 
     448            if (m_TYPE==SKIN) 
     449            { 
     450                CafuModelT::SkinT Skin; 
     451 
     452                Skin.Name="New Skin"; 
     453                while (Skin.Materials.Size()       < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.Materials.PushBack(NULL); 
     454                while (Skin.RenderMaterials.Size() < m_ModelDoc->GetModel()->GetMeshes().Size()) Skin.RenderMaterials.PushBack(NULL); 
     455 
     456                m_MainFrame->SubmitCommand(new CommandAddT(m_ModelDoc, Skin)); 
     457            } 
     458            else if (m_TYPE==GFIX) 
    412459            { 
    413460                ArrayT<CafuModelT::GuiFixtureT> GuiFixtures; 
     
    440487        case ID_BUTTON_ADD: 
    441488        { 
    442             UE.Enable(m_TYPE==GFIX); 
     489            UE.Enable(m_TYPE==SKIN || m_TYPE==GFIX); 
    443490            break; 
    444491        } 
     
    458505        case ID_BUTTON_DELETE: 
    459506        { 
    460             UE.Enable(m_ModelDoc->GetSelection(m_TYPE).Size()>0); 
     507            // Are some elements but not the "default" elements selected? 
     508            UE.Enable(m_ModelDoc->GetSelection(m_TYPE).Size()>0 && !m_List->AreDefaultItemsSelected()); 
    461509            break; 
    462510        } 
  • cafu/trunk/CaWE/ModelEditor/ElementsList.hpp

    r383 r393  
    3434 
    3535 
    36     /// A control for displaying a list of the elements (meshes or animations) of the model. 
     36    /// A control for displaying a list of the elements of the model. 
    3737    class ElementsListT : public wxListView, public ObserverT 
    3838    { 
     
    4444        /// The destructor. 
    4545        ~ElementsListT(); 
     46 
     47        /// Returns whether one or more "default" elements are selected in the list. 
     48        bool AreDefaultItemsSelected() const; 
    4649 
    4750        // ObserverT implementation. 
     
    7073 
    7174        const ModelElementTypeT m_TYPE; 
     75        const int               m_NUM_DEFAULT_ITEMS; 
    7276        ModelDocumentT*         m_ModelDoc; 
    7377        ChildFrameT*            m_MainFrame;