Subversion Repositories spk

Rev

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

#include "../StdAfx.h"
#include "MultiForm.h"
#include "Form1.h"

#include "SaveDialog.h"

namespace Creator {
        bool MultiForm::LoadPackage(CMultiSpkFile *base, System::String ^filename)
        {
                m_bLoading = true;
                m_sFilename = filename;
                CyString sFile = CyStringFromSystemString(filename);

                if ( !base )
                {
                        m_pPackage = NULL;//m_pP->OpenPackage(sFile, &error);
                        if ( !m_pPackage )
                                return false;
                }
                else
                        m_pPackage = base;
                
                if ( !m_pPackage->GetFilename().Empty() )
                        m_pTabPage->Text = SystemStringFromCyString(CFileIO(m_pPackage->GetFilename()).GetFilename());
                else
                        m_pTabPage->Text = SystemStringFromCyString(CFileIO(sFile).GetFilename());

                m_pPackage->SetChanged(false);

                this->Text = filename;

                this->UpdateView();

                m_pPackage->SetChanged(false);

                m_bLoading = false;

                return true;
        }

        void MultiForm::UpdateView()
        {
                this->textBox1->Text = SystemStringFromCyString(m_pPackage->GetName());

                this->UpdatePackages();
        }

        void MultiForm::UpdatePackages()
        {
                this->listView1->Items->Clear();
                for ( SMultiSpkFile *ms = m_pPackage->GetFileList()->First(); ms; ms = m_pPackage->GetFileList()->Next() )
                {
                        if ( ms->bRemove ) continue;
                        ListViewItem ^item = gcnew ListViewItem();
                        switch (ms->iType)
                        {
                                case TYPE_SPK:
                                        item->ImageKey = "standard";
                                        item->Text = "Package"; 
                                        break;
                                case TYPE_XSP:
                                        item->ImageKey = "ship";
                                        item->Text = "Ship";    
                                        break;
                                default:
                                        item->ImageKey = "normal";
                                        item->Text = "Base";    
                                        break;
                        }
                        this->listView1->Items->Add(item);

                        item->SubItems->Add(SystemStringFromCyString(ms->sScriptName));
                        item->SubItems->Add(SystemStringFromCyString(ms->sScriptAuthor));
                        item->SubItems->Add(SystemStringFromCyString(ms->sScriptVersion));
                        item->SubItems->Add(SystemStringFromCyString(ms->sName));
                        item->SubItems->Add(SystemStringFromCyString(SPK::GetSizeString(ms->lSize)));

                        item->Checked = ms->bOn;
                }
                this->listView1->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
                ((Form1 ^)this->MdiParent)->UpdateStatus();
        }

        void MultiForm::SaveAs()
        {
                if ( !this->CheckSave() )
                        return;
                
                SaveFileDialog ^ofd = gcnew SaveFileDialog();
                ofd->Filter = "Multi Package Files (*.spk)|*.spk";
                ofd->AddExtension = true;

                CyString filename = m_pPackage->GetFilename();
                if ( filename.Empty() )
                        filename = m_pPackage->GetName();
                filename = filename.FindReplace("/", "\\");

                ofd->FileName = SystemStringFromCyString(filename);
                ofd->FilterIndex = 1;
                ofd->RestoreDirectory = true;

                if ( ofd->ShowDialog(this) == System::Windows::Forms::DialogResult::OK )
                {
                        m_pPackage->SetFilename(CyStringFromSystemString(ofd->FileName));
                        m_sFilename = ofd->FileName;
                        m_pTabPage->Text = SystemStringFromCyString(CFileIO(m_pPackage->GetFilename()).GetFilename());
                        m_pMenuItem->Text = m_pTabPage->Text;
                        this->Save();
                }       
        }

        void MultiForm::Save()
        {
                if ( !this->CheckSave() )
                        return;

                if ( m_pPackage->GetFilename().Empty() )
                {
                        this->SaveAs();
                        return;
                }

                SaveDialog ^save = gcnew SaveDialog(m_pPackage, SystemStringFromCyString(m_pPackage->GetFilename()));
                if ( save->ShowDialog(this) == Windows::Forms::DialogResult::Cancel )
                        return;

                m_pPackage->SetChanged(false);
                this->UpdateChanged();

                MessageBox::Show("Package: " + SystemStringFromCyString(m_pPackage->GetFilename()) + "\nHas been saved!", "Saved", MessageBoxButtons::OK, MessageBoxIcon::Information);
        }

        bool MultiForm::CheckSave()
        {
                if ( m_pPackage->GetName().Empty() )
                {
                        MessageBox::Show(this, "You must specify a package name", "Invalid Entry", MessageBoxButtons::OK, MessageBoxIcon::Stop);
                        return false;
                }

                return true;
        }
};