Go to most recent revision | 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()).ToString()));
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()).ToString()));
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;
}
}