Subversion Repositories spk

Rev

Rev 89 | Rev 222 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
88 cycrow 1
//#include "stdafx.h"
2
#include "EditWares.h"
3
 
4
#include "Utils/StringList.h"
5
#include "../../common/spknet.h"
6
#include "EditPrice.h"
7
 
8
namespace PluginManager {
9
 
10
	void EditWares::loadWares()
11
	{
12
		this->listView1->Items->Clear();
13
		this->listView1->Groups->Clear();
14
 
15
		for (CBaseFile *package = _pPackages->FirstPackage(); package; package = _pPackages->NextPackage()) {
16
			if ( !package->IsEnabled() ) continue;
17
 
18
			CLinkList<SWareEntry> list;
19
			if ( package->readWares(_pPackages->GetLanguage(), list, _pPackages->empWaresForGame()) ) {
20
 
170 cycrow 21
				ListViewGroup ^group = gcnew ListViewGroup(_US(package->getFullPackageName(_pPackages->GetLanguage())), HorizontalAlignment::Left);
88 cycrow 22
				this->listView1->Groups->Add(group);
23
 
24
				for(CListNode<SWareEntry> *node = list.Front(); node; node = node->next()) {
25
					ListViewItem ^item = gcnew ListViewItem(_US(node->Data()->name));
26
					item->UseItemStyleForSubItems = false;
27
 
28
					int price = 0;
29
					bool notoOverride = false;
30
					int noto = 0;
31
 
32
					switch(node->Data()->type) {
33
						case Ware_EMP:
34
							price = _pPackages->empOveridePrice(node->Data()->position);
35
							notoOverride = _pPackages->empOverideNoto(node->Data()->position, &noto);
36
							item->SubItems->Add("EMP");
37
							break;
38
 
39
						case Ware_BuiltIn:
40
							item->SubItems->Add("Built-In");
41
							price = _pPackages->builtInWareOveridePrice(node->Data()->position);
42
							notoOverride = _pPackages->builtInWareOverideNoto(node->Data()->position, &noto);
43
							break;
44
 
45
						case Ware_Custom:
46
							price = _pPackages->customWareOveridePrice(node->Data()->id);
47
							notoOverride = _pPackages->customWareOverideNoto(node->Data()->id, &noto);
48
							item->SubItems->Add("Custom");
49
							break;
50
 
51
						default:
52
							item->SubItems->Add("");
53
					}
54
 
55
					bool priceOverride = true;
56
					if ( !price ) {
57
						price = node->Data()->relval;
58
						priceOverride = false;
59
					}
60
					item->SubItems->Add(_price(price));
61
					item->SubItems->Add(_noto((notoOverride) ? noto :  node->Data()->notority));
62
					item->SubItems->Add(_US(node->Data()->description));
63
					item->SubItems->Add(_US(node->Data()->id));
64
					item->SubItems->Add(Convert::ToString(node->Data()->type));
65
					item->SubItems->Add(Convert::ToString(price));
66
					item->ImageIndex = 0;
67
					item->Group = group;
68
					item->Tag = node->Data()->position;
69
					this->listView1->Items->Add(item);
70
 
71
					item->SubItems[2]->ForeColor = (priceOverride) ? Color::Green : Color::Black;
72
					item->SubItems[3]->ForeColor = (notoOverride) ? Color::Green : Color::Black;
73
				}
74
			}
75
		}
76
 
77
		this->listView1->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
78
		this->listView1->Columns[6]->Width = 0;
79
		this->listView1->Columns[7]->Width = 0;
80
	}
81
 
89 cycrow 82
	void EditWares::updateConflicts()
83
	{
84
		this->listView2->Items->Clear();
85
		this->listView2->Groups->Clear();
86
 
87
		CLinkList<SWareEntry> list;
88
 
89
		if ( _pPackages->readWares(0, list) ) {
90
			for(SWareEntry *ware = list.First(); ware; ware = list.Next()) {
91
				System::String ^group = _US(ware->id);
92
				switch(ware->type) {
93
					case Ware_EMP:
94
						group += " (EMP)";
95
						break;
96
					case Ware_BuiltIn:
97
						group += " (BuiltIn)";
98
						break;
99
					case Ware_Custom:
100
						group += " (Custom)";
101
						break;
102
				}
103
 
104
				// find if the group has already been added
105
				ListViewGroup ^g = nullptr;
106
				int c = this->listView2->Groups->Count;
107
				for(int i = 0; i < this->listView2->Groups->Count; i++) {
108
					if ( String::Compare(this->listView2->Groups[i]->ToString(), group) == 0 ) {
109
						g = this->listView2->Groups[i];
110
						for(int j = 0; j < g->Items->Count; j++) {
111
							g->Items[j]->ImageIndex = 3;
112
						}
113
						break;
114
					}
115
				}
116
 
117
				// conflicts!!
118
				bool bConflict = (g != nullptr);
119
				if ( !g ) {
120
					g = gcnew ListViewGroup(group);
121
					this->listView2->Groups->Add(g);
122
				}
123
 
170 cycrow 124
				ListViewItem ^item = gcnew ListViewItem(_US(ware->package->getFullPackageName(_pPackages->GetLanguage())));
89 cycrow 125
				item->SubItems->Add(_US(ware->name));
126
				item->SubItems->Add(_US(ware->description));
127
				item->ImageIndex = (bConflict) ? 3 : 2;
128
				item->Group = g;
129
				this->listView2->Items->Add(item);
130
			}
131
		}
132
 
133
		this->listView2->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
134
	}
135
 
88 cycrow 136
	String ^EditWares::_price(int iPrice)
137
	{
138
		return "€" + String::Format("{0:#,##0}", (iPrice * 28) * 1.00268550164);
139
	}
140
 
141
	String ^EditWares::_noto(int iNoto)
142
	{
143
		return String::Format("{0:#,##0}", iNoto);
144
	}
145
 
146
	void EditWares::editPrice()
147
	{
148
		if ( !this->listView1->SelectedItems->Count ) return;
149
 
150
		ListViewItem ^item = this->listView1->SelectedItems[0];
151
 
152
		EditPrice ^priceDlg = gcnew EditPrice(Convert::ToInt32(item->SubItems[7]->Text));
153
 
154
		if ( priceDlg->ShowDialog(this) == System::Windows::Forms::DialogResult::OK ) {
155
			enum WareTypes type = (enum WareTypes)Convert::ToInt32(item->SubItems[6]->Text);
156
			int position = Convert::ToInt32(item->Tag);
157
 
158
			int price = priceDlg->price();
159
 
160
			switch(type) {
161
				case Ware_EMP:
162
					_pPackages->addEMPPriceOverride(position, price);
163
					break;
164
				case Ware_BuiltIn:
165
					_pPackages->addBuiltInWarePriceOverride(position, price);
166
					break;
167
				case Ware_Custom:
168
					_pPackages->addCustomWarePriceOverride(_S(item->SubItems[5]->Text), price);
169
					break;
170
			}
171
 
172
			item->SubItems[2]->ForeColor = Color::Green;
173
			item->SubItems[2]->Text = _price(price);
174
		}
175
	}
176
 
177
	void EditWares::editNoto(int iNoto)
178
	{
179
		if ( !this->listView1->SelectedItems->Count ) return;
180
 
181
		ListViewItem ^item = this->listView1->SelectedItems[0];
182
 
183
		enum WareTypes type = (enum WareTypes)Convert::ToInt32(item->SubItems[6]->Text);
184
		int position = Convert::ToInt32(item->Tag);
185
 
186
		switch(type) {
187
			case Ware_EMP:
188
				_pPackages->addEMPNotoOverride(position, iNoto);
189
				break;
190
			case Ware_BuiltIn:
191
				_pPackages->addBuiltInWareNotoOverride(position, iNoto);
192
				break;
193
			case Ware_Custom:
194
				_pPackages->addCustomWareNotoOverride(_S(item->SubItems[5]->Text), iNoto);
195
				break;
196
		}
197
 
198
		item->SubItems[3]->ForeColor = Color::Green;
199
		item->SubItems[3]->Text = _noto(iNoto);
200
	}
201
 
202
	void EditWares::reset()
203
	{
204
		if ( !this->listView1->SelectedItems->Count ) return;
205
 
206
		ListViewItem ^item = this->listView1->SelectedItems[0];
207
 
208
		enum WareTypes type = (enum WareTypes)Convert::ToInt32(item->SubItems[6]->Text);
209
		int position = Convert::ToInt32(item->Tag);
210
 
211
		switch(type) {
212
			case Ware_EMP:
213
				_pPackages->removeEmpOverride(position);
214
				break;
215
			case Ware_BuiltIn:
216
				_pPackages->removeBuiltinWareOverride(position);
217
				break;
218
			case Ware_Custom:
219
				_pPackages->removeCustomWareOverride(_S(item->SubItems[5]->Text));
220
				break;
221
		}
222
 
223
		this->loadWares();
224
	}
225
}