Subversion Repositories spk

Rev

Rev 89 | Blame | Compare with Previous | Last modification | View Log | RSS feed

//#include "stdafx.h"
#include "CommandSlots.h"
#include "../../common/spknet.h"

namespace PluginManager {

        void CommandSlots::updateCommands()
        {
                this->listView1->Items->Clear();
                this->listView1->Groups->Clear();

                CLinkList<SCommandSlot> list;

                if ( _pPackages->readCommands(0, list) ) {
                        _updateCommands(list, this->listView1);
                        _updateCommandConflicts(list, false);
                }

                list.clear(true);
                if ( _pPackages->readWingCommands(0, list) ) {
                        _updateCommands(list, this->listView2);
                        _updateCommandConflicts(list, true);
                }

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

        void CommandSlots::_updateCommands(CLinkList<SCommandSlot> &list, ListView ^listView)
        {
                for(SCommandSlot *slot = list.First(); slot; slot = list.Next()) {
                        System::String ^group = _commandType(slot->slot);

                        ListViewGroup ^g = nullptr;
                        for(int i = 0; i < listView->Groups->Count; i++) {
                                if ( String::Compare(listView->Groups[i]->ToString(), group) == 0 ) {
                                        g = listView->Groups[i];
                                        break;
                                }
                        }

                        if ( !g ) { 
                                g = gcnew ListViewGroup(group);
                        }

                        listView->Groups->Add(g);

                        ListViewItem ^item = gcnew ListViewItem(Convert::ToString(slot->slot));
                        item->SubItems->Add(_US(slot->name));
                        item->SubItems->Add(_US(slot->package->getFullPackageName(_pPackages->GetLanguage())));
                        item->SubItems->Add(_US(slot->shortName));
                        item->SubItems->Add(_US(slot->info));
                        item->SubItems->Add(_US(slot->id));
                        item->Group = g;
                        item->ImageIndex = _commandIcon(slot->slot);

                        listView->Items->Add(item);
                }
        }

        void CommandSlots::_updateCommandConflicts(CLinkList<SCommandSlot> &list, bool bWing)
        {
                for(SCommandSlot *slot = list.First(); slot; slot = list.Next()) {
                        System::String ^group = _commandSlot(slot->slot, bWing);

                        ListViewGroup ^g = nullptr;
                        int c = this->listView3->Groups->Count;
                        for(int i = 0; i < this->listView3->Groups->Count; i++) {
                                if ( String::Compare(this->listView3->Groups[i]->ToString(), group) == 0 ) {
                                        g = this->listView3->Groups[i];
                                        for(int j = 0; j < g->Items->Count; j++) {
                                                g->Items[j]->ImageIndex = 14;
                                        }
                                        break;
                                }
                        }

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

                        ListViewItem ^item = gcnew ListViewItem(_US(slot->package->getFullPackageName(_pPackages->GetLanguage())));
                        item->SubItems->Add(_US(slot->name));
                        item->SubItems->Add(_US(slot->info));
                        item->ImageIndex = (bConflict) ? 14 : 13;
                        item->Group = g;
                        this->listView3->Items->Add(item);
                }
        }

        System::String ^CommandSlots::_commandSlot(int id, bool bWing)
        {
                int type = id / 100;
                int s = id % 100;

                System::String ^slot = "COMMAND_";
                if ( bWing ) slot += "WING_";
                slot += _commandType(id)->ToUpper();
                slot += "_";
                if ( id >= 1400 )
                        slot += Convert::ToString(id - 1400);
                else
                        slot += Convert::ToString(s);

                return slot;
        }

        System::String ^CommandSlots::_commandType(int id)
        {
                int type = id / 100;
                switch(type) {
                        case  2: return "Navigation";
                        case  3: return "Fight";
                        case  4: return "Trade";
                        case  5: return "Special";
                        case  6: return "Priacy";
                        case  7: return "Custom";
                        case  8: return "General";
                        case  9: return "Turret";
                        case 11: return "Station";
                        case 12: return "Ship";
                        case 13: return "Fleet";
                }

                return "Additional";
        }

        int CommandSlots::_commandIcon(int id)
        {
                int type = id / 100;

                if ( type <= 13 ) return type - 2;

                return 12;
        }
}