Subversion Repositories spk

Rev

Rev 170 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "../StdAfx.h"
#include "CustomiseGuns.h"

namespace Creator {
        String ^CustomiseGuns::GetPosition(int dir)
        {
                return ((CustomiseShip ^)m_pParent)->GetPosition(dir);
        }

        void CustomiseGuns::SetupControls()
        {
                this->Dock = System::Windows::Forms::DockStyle::Fill;

                // update scene file entries
                if (!_pModels || _pModels->empty())
                {
                        // if no scene file
                        if ( this->PageAuto )
                                delete this->PageAuto;
                        this->PageAuto = nullptr;
                }
                // otherwise, fill in the data
                else
                {
                        int i = 0;
                        this->ComboAutoPrimary->Items->Add("None");
                        this->ComboAutoSecondary->Items->Add("None");
                        for(auto itr = _pModels->begin(); itr != _pModels->end(); itr++)
                        {
                                String ^entry = _US((*itr)->str) + ":" + Convert::ToString(i);
                                this->ComboAutoPrimary->Items->Add(entry);
                                this->ComboAutoSecondary->Items->Add(entry);
                                ++i;
                        }
                }
        }

        void CustomiseGuns::UpdateDisplay()
        {
        }

        void CustomiseGuns::ChangeGunValues()
        {
                if ( m_bUpdatingGunLists )
                        return;
                this->UpdateGunTurrets();
        }

        void CustomiseGuns::UpdateGunEntrys()
        {
                if ( !this->ListTurrets->SelectedItems->Count || !this->ListGuns->SelectedItems->Count )
                        return;

                m_bUpdatingGunLists = true;

                SGunGroup *g = m_pShipData->lGuns.Get(Convert::ToInt32(this->ListTurrets->SelectedItems[0]->Tag));
                SWeaponGroup *w = g->lWeapons.Get(Convert::ToInt32(this->ListGuns->SelectedItems[0]->Tag));

                if ( this->PageAuto )
                {
                        if ( w->iNode1 == -1 || (w->iNode1 == 0 && w->sModel1 == "0") || w->sModel1.empty() )
                                this->ComboAutoPrimary->SelectedIndex = 0;
                        else
                                this->ComboAutoPrimary->SelectedIndex = w->iNode1 + 1;

                        if ( w->iNode2 == -1 || (w->iNode2 == 0 && w->sModel2 == "0") || w->sModel2.empty() )
                                this->ComboAutoSecondary->SelectedIndex = 0;
                        else
                                this->ComboAutoSecondary->SelectedIndex = w->iNode2 + 1;
                }

                if ( w->iNode1 == -1 || w->sModel1.empty() || w->sModel1 == "0" )
                        this->CheckManualPrimary->Checked = false;
                else
                        this->CheckManualPrimary->Checked = true;
                this->NumManualPrimary->Value = w->iNode1;
                this->TextManualPrimary->Text = _US(w->sModel1);

                if ( w->iNode2 == -1 || w->sModel2.empty() || w->sModel2 == "0" )
                        this->CheckManualSecondary->Checked = false;
                else
                        this->CheckManualSecondary->Checked = true;
                this->NumManualSecondary->Value = w->iNode2;
                this->TextManualSecondary->Text = _US(w->sModel2);

                m_bUpdatingGunLists = false;
        }

        void CustomiseGuns::UpdateGunsList()
        {
                m_bUpdatingGunLists = true;

                int selected = -1;
                if ( this->ListTurrets->SelectedItems->Count )
                        selected = Convert::ToInt32(this->ListTurrets->SelectedItems[0]->Tag);

                this->ListGuns->Items->Clear();

                if ( this->ListTurrets->SelectedItems->Count )
                {
                        int pos = Convert::ToInt32(this->ListTurrets->SelectedItems[0]->Tag);
                        SGunGroup *g = m_pShipData->lGuns.Get(pos);
                        STurretEntry *t = m_pShipData->lTurrets.Get(pos);

                        int i = 0;
                        for ( SWeaponGroup *w = g->lWeapons.First(); w; w = g->lWeapons.Next(), i++ )
                        {
                                ListViewItem ^item = this->ListGuns->Items->Add(gcnew ListViewItem(Convert::ToString(i)));
                                item->SubItems->Add(Convert::ToString(w->iGunIndex));
                                item->SubItems->Add(Convert::ToString(w->iLaser));
                                if ( w->iNode1 == -1 || (w->iNode1 == 0 && w->sModel1 == "0") || w->sModel1.empty() )
                                        item->SubItems->Add("None");
                                else
                                        item->SubItems->Add(_US(w->sModel1) + ":" + Convert::ToString(w->iNode1));
                                if ( w->iNode2 == -1 || (w->iNode2 == 0 && w->sModel2 == "0") || w->sModel2.empty() )
                                        item->SubItems->Add("None");
                                else
                                        item->SubItems->Add(_US(w->sModel2) + ":" + Convert::ToString(w->iNode2));
                                item->Tag = i;
                                item->ImageKey = "gun";
                                if ( i == selected )
                                        item->Selected = true;
                        }
                }

                this->ListGuns->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);

                m_bUpdatingGunLists = false;
        }

        void CustomiseGuns::UpdateGunTurrets()
        {
                int selected = -1;
                if ( this->ListTurrets->SelectedItems->Count )
                        selected = Convert::ToInt32(this->ListTurrets->SelectedItems[0]->Tag);

                this->ListTurrets->Items->Clear();
                int i = 0;
                for ( SGunGroup *g = m_pShipData->lGuns.First(); g; g = m_pShipData->lGuns.Next(), i++ )
                {
                        STurretEntry *t = m_pShipData->lTurrets.Get(i);
                        ListViewItem ^item = this->ListTurrets->Items->Add(gcnew ListViewItem(Convert::ToString(g->iIndex)));

                        item->SubItems->Add(Convert::ToString(g->iGunIndex));
                        item->SubItems->Add(Convert::ToString(g->iLaserCount));
                        item->SubItems->Add(Convert::ToString(g->iWeaponCount));
                        // turret position
                        if ( i == 0 ) item->SubItems->Add(this->GetPosition(0));
                        else item->SubItems->Add(this->GetPosition(m_pShipData->cockpits[t->iTurret - 1].iPos));
                        item->ImageKey = "turret";
                        item->Tag = i;

                        if ( i == selected )
                        {
                                item->Selected = true;
                                this->UpdateGunsList();
                        }
                }
                this->ListTurrets->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
        }
};