Rev 222 | 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, ¬o);
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, ¬o);
break;
case Ware_Custom:
price = _pPackages->customWareOveridePrice(node->Data()->id);
notoOverride = _pPackages->customWareOverideNoto(node->Data()->id, ¬o);
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(_WS(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(_WS(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(_WS(item->SubItems[5]->Text));
break;
}
this->loadWares();
}
}