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 "EditWares.h"

#include "../../common/spknet.h"
#include "EditPrice.h"

namespace PluginManager {

        void EditWares::loadWares()
        {
                this->listView1->Items->Clear();
                this->listView1->Groups->Clear();

                for (CBaseFile *package = _pPackages->FirstPackage(); package; package = _pPackages->NextPackage()) {
                        if ( !package->IsEnabled() ) continue;

                        CLinkList<SWareEntry> list;
                        if ( package->readWares(_pPackages->GetLanguage(), list, _pPackages->empWaresForGame()) ) {
        
                                ListViewGroup ^group = gcnew ListViewGroup(_US(package->getFullPackageName(_pPackages->GetLanguage())), HorizontalAlignment::Left);
                                this->listView1->Groups->Add(group);

                                for(CListNode<SWareEntry> *node = list.Front(); node; node = node->next()) {
                                        ListViewItem ^item = gcnew ListViewItem(_US(node->Data()->name));
                                        item->UseItemStyleForSubItems = false;

                                        int price = 0;
                                        bool notoOverride = false;
                                        int noto = 0;

                                        switch(node->Data()->type) {
                                                case Ware_EMP:
                                                        price = _pPackages->empOveridePrice(node->Data()->position);
                                                        notoOverride = _pPackages->empOverideNoto(node->Data()->position, &noto);
                                                        item->SubItems->Add("EMP");
                                                        break;

                                                case Ware_BuiltIn:
                                                        item->SubItems->Add("Built-In");
                                                        price = _pPackages->builtInWareOveridePrice(node->Data()->position);
                                                        notoOverride = _pPackages->builtInWareOverideNoto(node->Data()->position, &noto);
                                                        break;

                                                case Ware_Custom:
                                                        price = _pPackages->customWareOveridePrice(node->Data()->id);
                                                        notoOverride = _pPackages->customWareOverideNoto(node->Data()->id, &noto);
                                                        item->SubItems->Add("Custom");
                                                        break;

                                                default:
                                                        item->SubItems->Add("");
                                        }

                                        bool priceOverride = true;
                                        if ( !price ) {
                                                price = node->Data()->relval;
                                                priceOverride = false;
                                        }
                                        item->SubItems->Add(_price(price));
                                        item->SubItems->Add(_noto((notoOverride) ? noto :  node->Data()->notority));
                                        item->SubItems->Add(_US(node->Data()->description));
                                        item->SubItems->Add(_US(node->Data()->id));
                                        item->SubItems->Add(Convert::ToString(node->Data()->type));
                                        item->SubItems->Add(Convert::ToString(price));
                                        item->ImageIndex = 0;
                                        item->Group = group;
                                        item->Tag = node->Data()->position;
                                        this->listView1->Items->Add(item);

                                        item->SubItems[2]->ForeColor = (priceOverride) ? Color::Green : Color::Black;
                                        item->SubItems[3]->ForeColor = (notoOverride) ? Color::Green : Color::Black;
                                }
                        }
                }

                this->listView1->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
                this->listView1->Columns[6]->Width = 0;
                this->listView1->Columns[7]->Width = 0;
        }

        void EditWares::updateConflicts()
        {
                this->listView2->Items->Clear();
                this->listView2->Groups->Clear();

                CLinkList<SWareEntry> list;

                if ( _pPackages->readWares(0, list) ) {
                        for(SWareEntry *ware = list.First(); ware; ware = list.Next()) {
                                System::String ^group = _US(ware->id);
                                switch(ware->type) {
                                        case Ware_EMP:
                                                group += " (EMP)";
                                                break;
                                        case Ware_BuiltIn:
                                                group += " (BuiltIn)";
                                                break;
                                        case Ware_Custom:
                                                group += " (Custom)";
                                                break;
                                }

                                // find if the group has already been added
                                ListViewGroup ^g = nullptr;
                                int c = this->listView2->Groups->Count;
                                for(int i = 0; i < this->listView2->Groups->Count; i++) {
                                        if ( String::Compare(this->listView2->Groups[i]->ToString(), group) == 0 ) {
                                                g = this->listView2->Groups[i];
                                                for(int j = 0; j < g->Items->Count; j++) {
                                                        g->Items[j]->ImageIndex = 3;
                                                }
                                                break;
                                        }
                                }

                                // conflicts!!
                                bool bConflict = (g != nullptr);
                                if ( !g ) {
                                        g = gcnew ListViewGroup(group);
                                        this->listView2->Groups->Add(g);
                                }

                                ListViewItem ^item = gcnew ListViewItem(_US(ware->package->getFullPackageName(_pPackages->GetLanguage())));
                                item->SubItems->Add(_US(ware->name));
                                item->SubItems->Add(_US(ware->description));
                                item->ImageIndex = (bConflict) ? 3 : 2;
                                item->Group = g;
                                this->listView2->Items->Add(item);
                        }
                }

                this->listView2->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
        }

        String ^EditWares::_price(int iPrice)
        {
                return "€" + String::Format("{0:#,##0}", (iPrice * 28) * 1.00268550164);
        }
        
        String ^EditWares::_noto(int iNoto)
        {
                return String::Format("{0:#,##0}", iNoto);
        }

        void EditWares::editPrice()
        {
                if ( !this->listView1->SelectedItems->Count ) return;

                ListViewItem ^item = this->listView1->SelectedItems[0];

                EditPrice ^priceDlg = gcnew EditPrice(Convert::ToInt32(item->SubItems[7]->Text));

                if ( priceDlg->ShowDialog(this) == System::Windows::Forms::DialogResult::OK ) {
                        enum WareTypes type = (enum WareTypes)Convert::ToInt32(item->SubItems[6]->Text);
                        int position = Convert::ToInt32(item->Tag);

                        int price = priceDlg->price();

                        switch(type) {
                                case Ware_EMP:
                                        _pPackages->addEMPPriceOverride(position, price);
                                        break;
                                case Ware_BuiltIn:
                                        _pPackages->addBuiltInWarePriceOverride(position, price);
                                        break;
                                case Ware_Custom:
                                        _pPackages->addCustomWarePriceOverride(_S(item->SubItems[5]->Text), price);
                                        break;
                        }

                        item->SubItems[2]->ForeColor = Color::Green;
                        item->SubItems[2]->Text = _price(price);
                }
        }

        void EditWares::editNoto(int iNoto)
        {
                if ( !this->listView1->SelectedItems->Count ) return;

                ListViewItem ^item = this->listView1->SelectedItems[0];

                enum WareTypes type = (enum WareTypes)Convert::ToInt32(item->SubItems[6]->Text);
                int position = Convert::ToInt32(item->Tag);

                switch(type) {
                        case Ware_EMP:
                                _pPackages->addEMPNotoOverride(position, iNoto);
                                break;
                        case Ware_BuiltIn:
                                _pPackages->addBuiltInWareNotoOverride(position, iNoto);
                                break;
                        case Ware_Custom:
                                _pPackages->addCustomWareNotoOverride(_S(item->SubItems[5]->Text), iNoto);
                                break;
                }

                item->SubItems[3]->ForeColor = Color::Green;
                item->SubItems[3]->Text = _noto(iNoto);
        }

        void EditWares::reset()
        {
                if ( !this->listView1->SelectedItems->Count ) return;

                ListViewItem ^item = this->listView1->SelectedItems[0];

                enum WareTypes type = (enum WareTypes)Convert::ToInt32(item->SubItems[6]->Text);
                int position = Convert::ToInt32(item->Tag);

                switch(type) {
                        case Ware_EMP:
                                _pPackages->removeEmpOverride(position);
                                break;
                        case Ware_BuiltIn:
                                _pPackages->removeBuiltinWareOverride(position);
                                break;
                        case Ware_Custom:
                                _pPackages->removeCustomWareOverride(_S(item->SubItems[5]->Text));
                                break;
                }

                this->loadWares();
        }
}