Subversion Repositories spk

Rev

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

Rev Author Line No. Line
1 cycrow 1
#pragma once
2
 
3
#include <spk.h>
4
 
5
#define VERSION 1.30
6
 
7
#undef GetTempPath
8
 
9
namespace XspConvert {
10
 
11
	using namespace System;
12
	using namespace System::ComponentModel;
13
	using namespace System::Collections;
14
	using namespace System::Windows::Forms;
15
	using namespace System::Data;
16
	using namespace System::Drawing;
17
 
18
	/// <summary>
19
	/// Summary for Form1
20
	///
21
	/// WARNING: If you change the name of this class, you will need to change the
22
	///          'Resource File Name' property for the managed resource compiler tool
23
	///          associated with all .resx files this class depends on.  Otherwise,
24
	///          the designers will not be able to interact properly with localized
25
	///          resources associated with this form.
26
	/// </summary>
27
	public ref class Form1 : public System::Windows::Forms::Form
28
	{
29
	public:
30
		Form1(System::String ^open)
31
		{
32
			InitializeComponent();
33
 
34
			this->UpdateTitle();
35
 
36
			m_bLoading = false;
37
			m_bDontChange = false;
38
			m_bDontUpdate = false;
39
			m_bChanged = false;
40
			m_bReadText = false;
41
			m_pLoadedShip = NULL;
42
			m_pDirList = new CyStringList;
43
			m_pTextList = new CLinkList<CyStringList>;
44
			m_pLaserList = new CLinkList<CyStringList>;
45
			m_pMissileList = new CLinkList<CyStringList>;
46
			m_pCockpit = NULL;
47
			this->PanelMain->Hide();
48
			this->PanelNotLoaded->Show();
49
 
50
			m_iOldGame = -1;
51
 
52
			this->Setup();
53
 
54
			if ( open )
55
				m_sOpenFile = open;
56
		}
57
 
58
	protected:
59
		/// <summary>
60
		/// Clean up any resources being used.
61
		/// </summary>
62
		~Form1()
63
		{
64
			if ( m_pLoadedShip )
65
				delete m_pLoadedShip;
66
			if ( m_pDirList )
67
				delete m_pDirList;
68
			if ( m_pTextList )
69
				delete m_pTextList;
70
			if ( m_pLaserList )
71
				delete m_pLaserList;
72
			if ( m_pMissileList )
73
				delete m_pMissileList;
74
 
75
			if (components)
76
			{
77
				delete components;
78
			}
79
		}
80
	private: System::Windows::Forms::MenuStrip^  menuStrip1;
81
	protected: 
82
	private: System::Windows::Forms::ToolStripMenuItem^  fileToolStripMenuItem;
83
	private: System::Windows::Forms::ToolStripMenuItem^  openToolStripMenuItem;
84
	private: System::Windows::Forms::Panel^  panel1;
85
	private: System::Windows::Forms::Button^  ButExit;
86
	private: System::Windows::Forms::Panel^  PanelMain;
87
 
88
 
89
	private:
90
		bool		m_bLoading;
91
		bool		m_bDontUpdate;
92
		bool		m_bChanged;
93
		bool		m_bReadText;
94
		bool		m_bDontChange;
95
		CyStringList *m_pDirList;
96
		CLinkList<CyStringList> *m_pTextList;
97
		CLinkList<CyStringList> *m_pLaserList;
98
		CLinkList<CyStringList> *m_pMissileList;
99
		CXspFile	*m_pLoadedShip;
100
		int			 m_iOldGame;
101
		array<System::Windows::Forms::ToolStripMenuItem^> ^m_aTools;
102
		System::String ^m_sOpenFile;
103
		SCockpit	*m_pCockpit;
104
 
105
		int			m_iLoadedLaserMask;
106
		int			m_iLoadedMissileMask;
107
		int			m_iLaserMask;
108
		int			m_iMissileMask;
109
 
110
	private: System::Windows::Forms::Panel^  PanelNotLoaded;
111
	private: System::Windows::Forms::Label^  LabelNotLoaded;
112
	private: System::Windows::Forms::ComboBox^  ComboGame;
113
 
114
	private: System::Windows::Forms::Panel^  panel2;
115
	private: System::Windows::Forms::Label^  label1;
116
	private: System::Windows::Forms::ToolStripMenuItem^  saveToolStripMenuItem;
117
	private: System::Windows::Forms::CheckedListBox^  WeaponList;
118
 
119
	private: System::Windows::Forms::ToolStripMenuItem^  settingsToolStripMenuItem;
120
	private: System::Windows::Forms::ToolStripMenuItem^  gamesToolStripMenuItem;
121
	private: System::Windows::Forms::ToolStripSeparator^  toolStripSeparator1;
122
	private: System::Windows::Forms::ToolStripMenuItem^  updateGameDataToolStripMenuItem;
123
	private: System::Windows::Forms::TabControl^  tabControl1;
124
	private: System::Windows::Forms::TabPage^  tabPage1;
125
	private: System::Windows::Forms::TabPage^  tabPage2;
126
	private: System::Windows::Forms::CheckedListBox^  MissileList;
127
	private: System::Windows::Forms::ToolStripMenuItem^  loadGameTextToolStripMenuItem;
128
	private: System::Windows::Forms::ToolStripMenuItem^  saveAsToolStripMenuItem;
129
	private: System::Windows::Forms::TabPage^  tabPage3;
130
	private: System::Windows::Forms::CheckedListBox^  CockpitWeapons;
131
	private: System::Windows::Forms::ComboBox^  ComboCockpits;
132
 
133
 
134
		/// <summary>
135
		/// Required designer variable.
136
		/// </summary>
137
		System::ComponentModel::Container ^components;
138
 
139
#pragma region Windows Form Designer generated code
140
		/// <summary>
141
		/// Required method for Designer support - do not modify
142
		/// the contents of this method with the code editor.
143
		/// </summary>
144
		void Setup()
145
		{
146
			this->Closed += gcnew System::EventHandler(this, &Form1::CloseEvent);
147
			this->CockpitWeapons->ItemCheck += gcnew ItemCheckEventHandler(this, &Form1::Event_Changed);
148
 
149
			// read data file
150
			System::String ^mydoc = Environment::GetFolderPath(Environment::SpecialFolder::Personal );
151
			CFileIO Config;
118 cycrow 152
			if ( Config.open(_S(mydoc) + "/Egosoft/xspconvert.dat") )
1 cycrow 153
			{
160 cycrow 154
				std::vector<Utils::String> *lines = Config.readLines();
1 cycrow 155
				if ( lines )
156
				{
157
					for ( int i = 0; i < (int)lines->size(); i++ )
158
					{
160 cycrow 159
						Utils::String line(lines->at(i));
160
						Utils::String start = line.token(":", 1).toLower();
161
						Utils::String rest = line.tokens(":", 2).removeFirstSpace();
1 cycrow 162
						if ( start.Compare("Dir") )
163
						{
160 cycrow 164
							Utils::String game = rest.token(" ", 1);
165
							Utils::String dir = rest.tokens(" ", 2);
1 cycrow 166
							SStringList *str = m_pDirList->FindData(game);
167
							if ( str )
168
								str->str = dir;
169
							else
160 cycrow 170
								m_pDirList->PushBack(CyString(dir), CyString(game));
1 cycrow 171
						}
172
						else if ( line.Compare("ReadText") )
173
							m_bReadText = true;
174
					}
175
				}
176
			}
177
 
178
			this->UpdateGames();
179
 
180
			this->loadGameTextToolStripMenuItem->Checked = m_bReadText;
181
		}
182
 
183
		void UpdateGames()
184
		{
185
			this->gamesToolStripMenuItem->DropDownItems->Clear();
186
			this->ComboGame->Items->Clear();
187
 
188
			CPackages p;
213 cycrow 189
			p.startup(L".", L".", L".");
1 cycrow 190
			// start at 1 to skip X2
197 cycrow 191
			for ( int i = 1; i < p.GetGameExe()->numGames(); i++ )
1 cycrow 192
			{
193
				bool added = false;
194
				if ( m_pDirList->FindData(CyString::Number(i)) )
195
				{
196
					if ( m_pDirList->FindData(CyString::Number(i))->str != "-1" )
197
						added = true;
198
				}
199
 
197 cycrow 200
				SGameExe *exe = p.GetGameExe()->game(i);
191 cycrow 201
				this->ComboGame->Items->Add(_US(exe->sName));
1 cycrow 202
				System::Windows::Forms::ToolStripMenuItem ^newMenu = gcnew System::Windows::Forms::ToolStripMenuItem;
191 cycrow 203
				newMenu->Text = _US(exe->sName);
1 cycrow 204
				this->gamesToolStripMenuItem->DropDownItems->Add(newMenu);
205
				System::Windows::Forms::ToolStripMenuItem ^newMenuDir = gcnew System::Windows::Forms::ToolStripMenuItem;
206
				if ( added )
191 cycrow 207
					newMenuDir->Text = _US(m_pDirList->FindData(Utils::String::Number(i))->str.ToString());
1 cycrow 208
				else
209
					newMenuDir->Text = "No Directory";
210
				newMenuDir->Enabled = false;
211
				newMenu->DropDownItems->Add(newMenuDir);
212
				newMenu->DropDownItems->Add(gcnew System::Windows::Forms::ToolStripSeparator);
213
				System::Windows::Forms::ToolStripMenuItem ^newMenuChange = gcnew System::Windows::Forms::ToolStripMenuItem;
214
				newMenuChange->Text = "Set Directory";
191 cycrow 215
				newMenuChange->Tag = _US(Utils::String::Number(i)) + " " + _US(exe->sName);
1 cycrow 216
				newMenuChange->Click += gcnew System::EventHandler(this, &Form1::Event_ChangeDirectory);
217
				newMenu->DropDownItems->Add(newMenuChange);
218
 
219
				if ( added )
220
				{
221
					System::Windows::Forms::ToolStripMenuItem ^newMenuRemove = gcnew System::Windows::Forms::ToolStripMenuItem;
222
					newMenu->DropDownItems->Add(newMenuRemove);
223
					newMenuRemove->Text = "Remove Directory";
191 cycrow 224
					newMenuRemove->Tag = _US(Utils::String::Number(i)) + " " + _US(exe->sName);
1 cycrow 225
					newMenuRemove->Click += gcnew System::EventHandler(this, &Form1::Event_RemoveDirectory);
226
				}
227
			}
228
		}
229
 
230
		void UpdateTitle()
231
		{
191 cycrow 232
			System::String ^title = "XSP Convertor V" + _US(Utils::String::FromFloat((float)VERSION, 2));
1 cycrow 233
			if ( m_pLoadedShip )
234
			{
50 cycrow 235
				if ( m_bChanged || m_pLoadedShip->hasChanged() )
236
					this->Text = title + " [*" + _US(m_pLoadedShip->filename()) + "]";
1 cycrow 237
				else
50 cycrow 238
					this->Text = title + " [" + _US(m_pLoadedShip->filename()) + "]";
1 cycrow 239
			}
240
			else
241
				this->Text = title;
242
		}
243
 
244
		void SaveShip()
245
		{
246
			if ( !m_pLoadedShip )
247
				MessageBox::Show(this, "There is currently no ship loaded to convert", "Ship Save", MessageBoxButtons::OK, MessageBoxIcon::Warning);
248
			else
249
			{
250
				this->SaveMasks();
197 cycrow 251
				if ( m_pLoadedShip->writeFile(m_pLoadedShip->filename().toString()) )
1 cycrow 252
				{
50 cycrow 253
					MessageBox::Show(this, "Ship File: " + _US(m_pLoadedShip->filename()) + "\n\nHas been written", "Ship Saved", MessageBoxButtons::OK, MessageBoxIcon::Information);
1 cycrow 254
					m_bChanged = false;
255
				}
256
			}
257
 
258
			this->UpdateTitle();
259
		}
260
 
261
		void SaveShipAs()
262
		{
263
			if ( !m_pLoadedShip )
264
				MessageBox::Show(this, "There is currently no ship loaded to convert", "Ship Save", MessageBoxButtons::OK, MessageBoxIcon::Warning);
265
			else
266
			{
267
				SaveFileDialog ^ofd = gcnew SaveFileDialog();
268
				ofd->Filter = "Ship Files (*.xsp)|*.xsp";
269
				ofd->FilterIndex = 1;
270
				ofd->RestoreDirectory = true;
271
				if ( ofd->ShowDialog() == System::Windows::Forms::DialogResult::OK )
272
				{
273
					this->SaveMasks();
175 cycrow 274
					if ( m_pLoadedShip->writeFile(_S(ofd->FileName)) )
1 cycrow 275
					{
276
						MessageBox::Show(this, "Ship File: " + ofd->FileName + "\n\nHas been written", "Ship Saved", MessageBoxButtons::OK, MessageBoxIcon::Information);
277
						m_bChanged = false;
278
					}
279
				}
280
			}
281
 
282
			this->UpdateTitle();
283
		}
284
 
285
		CyString GetObjectString(int desc, CyString idText)
286
		{
287
			if ( m_bReadText )
288
			{
289
				if ( this->ComboGame->SelectedIndex < m_pMissileList->size() )
290
				{
291
					CyStringList *textList = m_pTextList->Get(this->ComboGame->SelectedIndex);
292
					if ( textList )
293
					{
294
						SStringList *str = textList->FindData(CyString::Number(desc));
295
						if ( str )
296
						{
297
							// perform recursive lookup
298
							CyString s = str->str;
299
							while (s.IsIn("{17,") && s.IsIn("}"))
300
							{
301
								int pos = s.FindPos("{17,");
302
								pos += 4;
303
								CyString check = s.Right(-pos);
304
								check = check.GetToken("}", 1, 1);
305
								int num = check.ToInt();
306
								CyString newDesc = this->GetObjectString(num, CyString("#") + check + "#");
307
								s = s.FindReplace(CyString("{17,") + check + "}", newDesc);
308
							}
309
 
310
							// remove anything in brackets
311
							while(s.IsIn("(") && s.IsIn(")"))
312
							{
313
								int pos = s.FindPos("(");
314
								s.Erase(pos, (s.FindPos(")", pos) + 1) - pos);
315
							}
316
							return s;
317
						}
318
					}
319
				}
320
			}
321
			return idText;
322
		}
323
 
324
		void UpdateNames()
325
		{
326
			this->WeaponList->Items->Clear();
327
			this->MissileList->Items->Clear();
328
			this->CockpitWeapons->Items->Clear();
329
			bool addedLaser = false;
330
			bool addedMissile = false;
331
 
332
			CyStringList missiles;
333
			if ( this->ComboGame->SelectedIndex < m_pMissileList->size() )
334
			{
335
				CyStringList *missileList = m_pMissileList->Get(this->ComboGame->SelectedIndex);
336
				if ( missileList )
337
				{
338
					for ( SStringList *strNode = missileList->Head(); strNode; strNode = strNode->next )
339
					{
340
						CyString id = strNode->str.GetToken(";", 6, 6);
341
						SStringList *found = missiles.FindString(id);
342
						CyString str = this->GetObjectString(strNode->str.GetToken(";", 7, 7).ToInt(), strNode->str.GetToken(";", 37, 37));
343
						if ( found )
344
						{
345
							found->data += ", ";
346
							found->data += str;
347
						}
348
						else
349
							missiles.PushBack(id, str);
350
					}
351
				}
352
			}
353
 
354
			CyStringList lasers;
355
			if ( this->ComboGame->SelectedIndex < m_pLaserList->size() )
356
			{
357
				CyStringList *laserList = m_pLaserList->Get(this->ComboGame->SelectedIndex);
358
				if ( laserList )
359
				{
360
					for ( SStringList *strNode = laserList->Head(); strNode; strNode = strNode->next )
361
					{
362
						CyString id = strNode->str.GetToken(";", 6, 6);
363
						SStringList *found = lasers.FindString(id);
364
						CyString str = this->GetObjectString(strNode->str.GetToken(";", 7, 7).ToInt(), strNode->str.GetToken(";", 23, 23));
365
						if ( found )
366
						{
367
							found->data += ", ";
368
							found->data += str;
369
						}
370
						else
371
							lasers.PushBack(id, str);
372
					}
373
				}
374
			}
375
 
376
			for ( int i = 0; i < 32; i++ )
377
			{
378
				if ( lasers.Count() > i )
379
				{
191 cycrow 380
					this->WeaponList->Items->Add(_US(lasers.GetAt(i)->data.ToString()));
381
					this->CockpitWeapons->Items->Add(_US(lasers.GetAt(i)->data.ToString()));
1 cycrow 382
					addedLaser = true;
383
				}
384
 
385
				if ( missiles.Count() > i )
386
				{
191 cycrow 387
					this->MissileList->Items->Add(_US(missiles.GetAt(i)->data.ToString()));
1 cycrow 388
					addedMissile = true;
389
				}
390
 
391
				if ( !addedLaser )
392
				{
191 cycrow 393
					this->WeaponList->Items->Add(_US(Utils::String::Number(i + 1)));
394
					this->CockpitWeapons->Items->Add(_US(Utils::String::Number(i + 1)));
1 cycrow 395
				}
396
				if ( !addedMissile )
191 cycrow 397
					this->MissileList->Items->Add(_US(Utils::String::Number(i + 1)));
1 cycrow 398
			}
399
		}
400
 
401
		void OpenFile(System::String ^open)
402
		{
403
				CXspFile *shipFile = new CXspFile;
197 cycrow 404
				int check = CSpkFile::CheckFile(_WS(open));
1 cycrow 405
				bool loaded = false;
406
 
407
				m_bChanged = false;
408
 
409
				if ( check == SPKFILE_SINGLESHIP )
218 cycrow 410
					loaded = shipFile->readFile(_WS(open));
1 cycrow 411
				else if ( check == SPKFILE_INVALID )
412
				{
218 cycrow 413
					loaded = shipFile->convertOld(_WS(open));
1 cycrow 414
					if ( loaded )
415
						m_bChanged = true;
416
				}
417
 
418
				this->ComboCockpits->Items->Clear();
419
 
420
				m_pCockpit = NULL;
421
 
422
				if ( loaded )
423
				{
424
					m_bLoading = true;
425
					if ( m_pLoadedShip )
426
						delete m_pLoadedShip;
427
					m_pLoadedShip = shipFile;
218 cycrow 428
					m_pLoadedShip->setFilename(_WS(open));
1 cycrow 429
 
430
					this->PanelMain->Show();
431
					this->PanelNotLoaded->Hide();
432
 
433
					m_iOldGame = -1;
434
 
435
					if ( m_pLoadedShip->AnyCockpits() )
436
					{
437
						for ( SCockpit *c = m_pLoadedShip->GetCockpits()->First(); c; c = m_pLoadedShip->GetCockpits()->Next() )
216 cycrow 438
							this->ComboCockpits->Items->Add(_US(c->sCockpit.token(L";", 19)));
1 cycrow 439
						this->CockpitWeapons->Show();
440
						this->ComboCockpits->Enabled = true;
441
						//m_pCockpit = m_pLoadedShip->GetCockpits()->First();
442
					}
443
					else
444
					{
445
						this->CockpitWeapons->Hide();
446
						this->ComboCockpits->Enabled = false;
447
					}
448
 
449
					this->ComboGame->SelectedIndex = 0;
450
					if ( this->ComboCockpits->Items->Count )
451
						this->ComboCockpits->SelectedIndex = 0;
452
 
453
					m_bChanged = false;
454
					this->UpdateTitle();
455
 
456
					MessageBox::Show(this, "Ship File: " + open + "\nHas been loaded", "Ship Loaded", MessageBoxButtons::OK, MessageBoxIcon::Information);
457
				}
458
				else
459
				{
460
					delete shipFile;
461
					if ( m_pLoadedShip )
462
					{
463
						this->PanelMain->Hide();
464
						this->PanelNotLoaded->Show();
465
					}
466
					else
467
					{
468
						this->PanelMain->Show();
469
						this->PanelNotLoaded->Hide();
470
					}
471
 
472
					MessageBox::Show(this, "Ship File: " + open + "\nHas failed to load", "Ship Failed", MessageBoxButtons::OK, MessageBoxIcon::Information);
473
				}
474
 
475
				m_bLoading = false;
476
		}
477
 
478
		void CheckSave()
479
		{
50 cycrow 480
			 if ( (m_pLoadedShip && m_pLoadedShip->hasChanged()) || m_bChanged )
1 cycrow 481
			 {
482
				 if ( MessageBox::Show(this, "The current ship has been modified, do you wish to save it?", "Save Ship", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::Yes )
483
					 this->SaveShip();				 
484
			 }
485
		}
486
		void OpenFile()
487
		{
488
			// check if we need to save
489
			this->CheckSave();
490
 
491
			OpenFileDialog ^ofd = gcnew OpenFileDialog();
492
			ofd->Filter = "Ship Files (*.xsp)|*.xsp";
493
			ofd->FilterIndex = 1;
494
			ofd->RestoreDirectory = true;
495
 
496
			if ( ofd->ShowDialog(this) == System::Windows::Forms::DialogResult::OK )
497
				this->OpenFile(ofd->FileName);
498
 
499
			this->UpdateTitle();
500
		}
501
 
502
		void LoadGameData()
503
		{
504
			m_pLaserList->MemoryClear();
505
			m_pMissileList->MemoryClear();
506
			m_pTextList->MemoryClear();
507
 
508
			System::String ^tempDir = System::IO::Path::GetTempPath();
182 cycrow 509
			Utils::String sTempDir = _S(tempDir);
1 cycrow 510
 
511
			CPackages p;
512
			bool tcText = false;
513
			for ( SStringList *strNode = m_pDirList->Head(); strNode; strNode = strNode->next )
514
			{
515
				CyStringList *laserList = new CyStringList;
516
				m_pLaserList->push_back(laserList);
517
				CyStringList *missileList = new CyStringList;
518
				m_pMissileList->push_back(missileList);
519
				CyStringList *textList = new CyStringList;
520
				m_pTextList->push_back(textList);
521
 
213 cycrow 522
				if ( p.extractGameFile(L"types/TLaser.pck", sTempDir + L"/TLaser.txt", strNode->str.ToString()) )
1 cycrow 523
				{
524
					CFileIO Open(sTempDir + "/TLaser.txt");
160 cycrow 525
					std::vector<Utils::String> *lines = Open.readLines();
1 cycrow 526
					if ( lines )
527
					{
528
						bool first = false;
529
						for ( int j = 0; j < (int)lines->size(); j++ )
530
						{
160 cycrow 531
							Utils::String line(lines->at(j));			
1 cycrow 532
							if ( line[0] == '/' )
533
								continue;
160 cycrow 534
							line.removeChar('\r');
535
							line = line.removeFirstSpace();
536
							line = line.removeEndSpace();
537
							if ( line.empty() )
1 cycrow 538
								continue;
539
							if ( !first )
540
							{
541
								first = true;
542
								continue;
543
							}
544
 
160 cycrow 545
							laserList->PushBack(CyString(line));
1 cycrow 546
						}
547
					}
548
 
52 cycrow 549
					Open.remove();
1 cycrow 550
				}
551
 
213 cycrow 552
				if ( p.extractGameFile(L"types/TMissiles.pck", sTempDir + L"/TMissiles.txt", strNode->str.ToString()) )
1 cycrow 553
				{
213 cycrow 554
					CFileIO Open(sTempDir + L"/TMissiles.txt");
160 cycrow 555
					std::vector<Utils::String> *lines = Open.readLines();
1 cycrow 556
					if ( lines )
557
					{
558
						bool first = false;
559
						for ( int j = 0; j < (int)lines->size(); j++ )
560
						{
160 cycrow 561
							Utils::String line(lines->at(j));			
1 cycrow 562
							if ( line[0] == '/' )
563
								continue;
160 cycrow 564
							line.removeChar('\r');
565
							line = line.removeFirstSpace();
566
							line = line.removeEndSpace();
567
							if ( line.empty() )
1 cycrow 568
								continue;
569
							if ( !first )
570
							{
571
								first = true;
572
								continue;
573
							}
574
 
160 cycrow 575
							missileList->PushBack(CyString(line));
1 cycrow 576
						}
577
					}
578
 
52 cycrow 579
					Open.remove();
1 cycrow 580
				}
581
 
582
				if ( !m_bReadText )
583
					continue;
584
 
585
				// load the text file
182 cycrow 586
				Utils::String textFormat;
1 cycrow 587
				if ( tcText )
588
					textFormat = "0001-L044";
589
				else
590
					textFormat = "440001";
591
 
182 cycrow 592
				if ( p.extractGameFile("t/" + textFormat + ".pck", sTempDir + "/" + textFormat + ".xml", strNode->str.ToString()) )
1 cycrow 593
				{
594
					CFileIO Open(sTempDir + textFormat + ".xml");
82 cycrow 595
					if ( Open.startRead() )
1 cycrow 596
					{
597
						int donePage = (tcText) ? 3 : 2;
598
						int inPage = 0;
82 cycrow 599
						while ( !Open.atEnd() )
1 cycrow 600
						{
197 cycrow 601
							Utils::String line = Open.readEndOfLineStr();
182 cycrow 602
							if ( line.empty() )
1 cycrow 603
								continue;
182 cycrow 604
							line = line.removeFirstSpace();
605
							line = line.remove('\t');
1 cycrow 606
							if ( !inPage )
607
							{
182 cycrow 608
								if ( line.left(5).Compare("<page") )
1 cycrow 609
								{
182 cycrow 610
									int pos = line.findPos(" id=\"");
1 cycrow 611
									if ( pos != -1 )
612
									{
182 cycrow 613
										int endpos = line.findPos("\"", pos + 5);
1 cycrow 614
										if ( endpos != -1 )
615
										{
182 cycrow 616
											Utils::String check = line.mid(pos + 6, endpos - pos - 5);
617
											int iPage = check.toInt();
1 cycrow 618
											if ( iPage == 17 || iPage == 300017 || iPage == 350017 )
619
												inPage = iPage;
620
										}
621
									}
622
								}
623
							}
624
							else
625
							{
182 cycrow 626
								if ( line.left(6).Compare("</page") )
1 cycrow 627
								{
628
									inPage = 0;
629
									--donePage;
630
 
631
									if ( donePage <= 0 )
632
										break;
633
								}
634
								else
635
								{
182 cycrow 636
									int pos = line.findPos("t id=\"");
1 cycrow 637
									if ( pos != -1 )
638
									{
182 cycrow 639
										int endpos = line.findPos("\"", pos + 6);
1 cycrow 640
										if ( endpos != -1 )
641
										{
182 cycrow 642
											Utils::String check = line.mid(pos + 7, endpos - pos - 6);
1 cycrow 643
 
182 cycrow 644
											Utils::String data;
645
											int pos = line.findPos(">", endpos);
1 cycrow 646
											if ( pos != -1 )
647
											{
182 cycrow 648
												endpos = line.findPos("</", pos);
1 cycrow 649
												if ( endpos != -1 )
182 cycrow 650
													data = line.mid(pos + 2, endpos - pos - 1);
1 cycrow 651
											}
652
											SStringList *str = textList->FindData(check);
653
											if ( str )
654
												str->str = data;
655
											else
182 cycrow 656
												textList->PushBack(CyString(data), CyString(check));
1 cycrow 657
										}
658
									}
659
								}
660
							}
661
						}
662
 
82 cycrow 663
						Open.close();
1 cycrow 664
					}
665
				}
666
 
667
				tcText = true;
668
			}
669
		}
670
 
671
		void LoadGameDirectory()
672
		{
673
			CPackages p;
213 cycrow 674
			p.startup(L".", L".", L".");
1 cycrow 675
 
197 cycrow 676
			for ( int i = 1; i < p.GetGameExe()->numGames(); i++ )
1 cycrow 677
			{
197 cycrow 678
				SGameExe *exe = p.GetGameExe()->game(i);
1 cycrow 679
				if ( !m_pDirList->FindData(CyString::Number(i)) )
680
				{
125 cycrow 681
					if ( MessageBox::Show(this, "You have no directories set for " + _US(exe->sName) + "\n\nWould you like to set it now?", "Game Directory", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::Yes )
1 cycrow 682
					{
683
						FolderBrowserDialog ^fbd = gcnew FolderBrowserDialog;
125 cycrow 684
						fbd->Description = "Select the path for " + _US(exe->sName);
1 cycrow 685
						if ( fbd->ShowDialog(this) == System::Windows::Forms::DialogResult::OK )
686
						{
125 cycrow 687
							CDirIO Dir(_S(fbd->SelectedPath));
688
							if ( !Dir.exists(exe->sExe) )
191 cycrow 689
								MessageBox::Show(this, "Unable to find " + _US(exe->sExe) + " in " + fbd->SelectedPath, "Game Directory", MessageBoxButtons::OK, MessageBoxIcon::Warning);
1 cycrow 690
							else
691
								m_pDirList->PushBack(CyStringFromSystemString(fbd->SelectedPath), CyString::Number(i));
692
						}
693
					}
694
					else
695
						m_pDirList->PushBack("-1", CyString::Number(i));
696
				}
697
			}
698
 
699
			if ( !m_pDirList->Empty() )
700
			{
701
				if ( MessageBox::Show(this, "Would you like to load the game data?", "Load Game Data", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::Yes )
702
					this->LoadGameData();
703
			}
704
 
705
			this->UpdateGames();
706
		}
707
 
708
		void CloseDialog()
709
		{
710
			System::String ^mydoc = Environment::GetFolderPath(Environment::SpecialFolder::Personal );
213 cycrow 711
			CFileIO Config(_WS(mydoc) + L"/Egosoft/xspconvert.dat");
160 cycrow 712
			std::vector<Utils::String> lines;
1 cycrow 713
			for ( SStringList *str = m_pDirList->Head(); str; str = str->next )
160 cycrow 714
				lines.push_back("Dir:" + str->data.ToString() + " " + str->str.ToString());
1 cycrow 715
			if ( m_bReadText )
716
				lines.push_back("ReadText");
160 cycrow 717
			Config.writeFile(&lines);
1 cycrow 718
		}
719
 
720
		void CheckListChanged()
721
		{
722
			if ( m_bDontUpdate )
723
				return;
724
 
725
			if ( m_bDontChange )
726
				return;
727
 
728
			if ( m_pLoadedShip )
729
				m_bChanged = true;
730
 
731
			this->UpdateTitle();
732
		}
733
 
734
		int GetMask(CheckedListBox ^list)
735
		{
736
			int oldMask = 0;
737
			// First show the index and check state of all selected items.
738
			IEnumerator^ myEnum1 = list->CheckedIndices->GetEnumerator();
739
			while ( myEnum1->MoveNext() )
740
			{
741
				int indexChecked =  *safe_cast<int^>(myEnum1->Current);
742
				oldMask |= (1 << indexChecked);
743
			}
744
 
745
			return oldMask;
746
		}
747
 
748
		void SaveMasks()
749
		{
750
			if ( m_pLoadedShip )
751
			{
752
				if ( m_iOldGame != -1 )
753
				{
754
					m_pLoadedShip->SetLaserMask(m_iOldGame, m_iLaserMask);
755
					m_pLoadedShip->SetMissileMask(m_iOldGame, m_iMissileMask);
756
				}
757
				if ( m_pCockpit )
216 cycrow 758
					m_pLoadedShip->addCockpit(m_pCockpit->sCockpit, (m_iOldGame == -1) ? (this->ComboGame->SelectedIndex + 2) : m_iOldGame, this->GetMask(this->CockpitWeapons));
1 cycrow 759
			}
760
		}
761
 
762
		void ChangeGame()
763
		{
764
			if ( !m_pLoadedShip )
765
				return;
766
 
50 cycrow 767
			bool oldChanged = m_pLoadedShip->hasChanged();
1 cycrow 768
			m_bDontUpdate = true;
769
			// save old mask
770
			if ( !m_bLoading )
771
				this->SaveMasks();
772
 
773
			m_iOldGame = this->ComboGame->SelectedIndex + 2;
774
 
775
			this->UpdateNames();
776
 
777
			int mask = m_pLoadedShip->GetLaserMask(this->ComboGame->SelectedIndex + 2, true);
778
			for ( int i = 0; i < this->WeaponList->Items->Count; i++ )
779
				this->WeaponList->SetItemChecked(i, (mask & (1 << i)) ? true : false);
780
			m_iLaserMask = m_iLoadedLaserMask = mask;
781
 
782
			mask = m_pLoadedShip->GetMissileMask(this->ComboGame->SelectedIndex + 2, true);
783
			for ( int i = 0; i < this->MissileList->Items->Count; i++ )
784
				this->MissileList->SetItemChecked(i, (mask & (1 << i)) ? true : false);
785
			m_iMissileMask = m_iLoadedMissileMask = mask;
786
 
787
			if ( this->ComboCockpits->Items->Count )
788
			{
789
				if ( this->ComboCockpits->SelectedIndex < 0 )
790
					this->ComboCockpits->SelectedIndex = 0;
791
				else
792
					this->UpdateCockpitList();
793
			}
794
 
50 cycrow 795
			m_pLoadedShip->adjustChanged(oldChanged);
1 cycrow 796
 
797
			m_bDontUpdate = false;
798
 
799
			this->UpdateTitle();
800
		}
801
 
802
		void Event_RemoveDirectory(System::Object ^sender, System::EventArgs ^E)
803
		{
804
			System::Windows::Forms::ToolStripMenuItem ^item = cli::safe_cast<System::Windows::Forms::ToolStripMenuItem ^>(sender);
805
			if ( item )
806
			{
807
				CyString game = CyStringFromSystemString(cli::safe_cast<System::String ^>(item->Tag));
808
				game = game.GetToken(" ", 1, 1);
809
				if ( m_pDirList->FindData(game) )
810
				{
811
					m_pDirList->FindData(game)->str = "-1";
812
					this->UpdateGames();
813
				}
814
			}
815
		}
816
 
817
		void Event_ChangeDirectory(System::Object ^sender, System::EventArgs ^E)
818
		{
819
			System::Windows::Forms::ToolStripMenuItem ^item = cli::safe_cast<System::Windows::Forms::ToolStripMenuItem ^>(sender);
820
			if ( item )
821
			{
191 cycrow 822
				Utils::String tag = _S(cli::safe_cast<System::String ^>(item->Tag));
823
				Utils::String game = tag.token(" ", 1);
1 cycrow 824
				if ( m_pDirList->FindData(game) )
825
				{
826
					FolderBrowserDialog ^fbd = gcnew FolderBrowserDialog;
191 cycrow 827
					fbd->Description = "Select the path for " + _US(tag.tokens(" ", 2));
1 cycrow 828
					if ( fbd->ShowDialog() == System::Windows::Forms::DialogResult::OK )
829
					{
191 cycrow 830
						m_pDirList->FindData(game)->str = _S(fbd->SelectedPath);
1 cycrow 831
						this->UpdateGames();
832
					}					
833
				}
834
			}
835
		}
836
 
837
		void UpdateCockpitList()
838
		{
839
			if ( !m_pLoadedShip )
840
				return;
841
 
842
			m_bDontChange = true;
843
 
844
			if ( !m_bDontUpdate && m_pCockpit )
216 cycrow 845
				m_pLoadedShip->addCockpit(m_pCockpit->sCockpit, (m_iOldGame == -1) ? (this->ComboGame->SelectedIndex + 2) : m_iOldGame, this->GetMask(this->CockpitWeapons));
1 cycrow 846
 
847
			m_pCockpit = NULL;
848
 
849
			// find the cockpit pointer
850
			m_pCockpit = m_pLoadedShip->GetCockpits()->Get(this->ComboCockpits->SelectedIndex);
851
 
852
			int mask = 0;
853
			if ( m_pCockpit )
854
			{
216 cycrow 855
				mask = m_pCockpit->sCockpit.token(L";", 9);
1 cycrow 856
				for ( SWeaponMask *wm = m_pCockpit->lWeaponMask.First(); wm; wm = m_pCockpit->lWeaponMask.Next() )
857
				{
858
					if ( wm->iGame == (this->ComboGame->SelectedIndex + 2) )
859
					{
860
						mask = wm->iMask;
861
						break;
862
					}
863
				}
864
			}
865
 
866
			for ( int i = 0; i < this->CockpitWeapons->Items->Count; i++ )
867
				this->CockpitWeapons->SetItemChecked(i, (mask & (1 << i)) ? true : false);
868
 
869
			m_bDontChange = false;
870
		}
871
 
872
 
873
		void InitializeComponent(void)
874
		{
875
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
876
			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
877
			this->fileToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
878
			this->openToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
879
			this->saveToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
880
			this->saveAsToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
881
			this->settingsToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
882
			this->gamesToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
883
			this->loadGameTextToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
884
			this->toolStripSeparator1 = (gcnew System::Windows::Forms::ToolStripSeparator());
885
			this->updateGameDataToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
886
			this->panel1 = (gcnew System::Windows::Forms::Panel());
887
			this->ButExit = (gcnew System::Windows::Forms::Button());
888
			this->PanelMain = (gcnew System::Windows::Forms::Panel());
889
			this->tabControl1 = (gcnew System::Windows::Forms::TabControl());
890
			this->tabPage1 = (gcnew System::Windows::Forms::TabPage());
891
			this->WeaponList = (gcnew System::Windows::Forms::CheckedListBox());
892
			this->tabPage2 = (gcnew System::Windows::Forms::TabPage());
893
			this->MissileList = (gcnew System::Windows::Forms::CheckedListBox());
894
			this->tabPage3 = (gcnew System::Windows::Forms::TabPage());
895
			this->CockpitWeapons = (gcnew System::Windows::Forms::CheckedListBox());
896
			this->ComboCockpits = (gcnew System::Windows::Forms::ComboBox());
897
			this->panel2 = (gcnew System::Windows::Forms::Panel());
898
			this->ComboGame = (gcnew System::Windows::Forms::ComboBox());
899
			this->label1 = (gcnew System::Windows::Forms::Label());
900
			this->PanelNotLoaded = (gcnew System::Windows::Forms::Panel());
901
			this->LabelNotLoaded = (gcnew System::Windows::Forms::Label());
902
			this->menuStrip1->SuspendLayout();
903
			this->panel1->SuspendLayout();
904
			this->PanelMain->SuspendLayout();
905
			this->tabControl1->SuspendLayout();
906
			this->tabPage1->SuspendLayout();
907
			this->tabPage2->SuspendLayout();
908
			this->tabPage3->SuspendLayout();
909
			this->panel2->SuspendLayout();
910
			this->PanelNotLoaded->SuspendLayout();
911
			this->SuspendLayout();
912
			// 
913
			// menuStrip1
914
			// 
915
			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->fileToolStripMenuItem, 
916
				this->settingsToolStripMenuItem});
917
			this->menuStrip1->Location = System::Drawing::Point(0, 0);
918
			this->menuStrip1->Name = L"menuStrip1";
919
			this->menuStrip1->Size = System::Drawing::Size(416, 24);
920
			this->menuStrip1->TabIndex = 0;
921
			this->menuStrip1->Text = L"menuStrip1";
922
			// 
923
			// fileToolStripMenuItem
924
			// 
925
			this->fileToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->openToolStripMenuItem, 
926
				this->saveToolStripMenuItem, this->saveAsToolStripMenuItem});
927
			this->fileToolStripMenuItem->Name = L"fileToolStripMenuItem";
928
			this->fileToolStripMenuItem->Size = System::Drawing::Size(37, 20);
929
			this->fileToolStripMenuItem->Text = L"&File";
930
			// 
931
			// openToolStripMenuItem
932
			// 
933
			this->openToolStripMenuItem->Name = L"openToolStripMenuItem";
934
			this->openToolStripMenuItem->Size = System::Drawing::Size(114, 22);
935
			this->openToolStripMenuItem->Text = L"&Open";
936
			this->openToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::openToolStripMenuItem_Click);
937
			// 
938
			// saveToolStripMenuItem
939
			// 
940
			this->saveToolStripMenuItem->Name = L"saveToolStripMenuItem";
941
			this->saveToolStripMenuItem->Size = System::Drawing::Size(114, 22);
942
			this->saveToolStripMenuItem->Text = L"&Save";
943
			this->saveToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::saveToolStripMenuItem_Click);
944
			// 
945
			// saveAsToolStripMenuItem
946
			// 
947
			this->saveAsToolStripMenuItem->Name = L"saveAsToolStripMenuItem";
948
			this->saveAsToolStripMenuItem->Size = System::Drawing::Size(114, 22);
949
			this->saveAsToolStripMenuItem->Text = L"Save &As";
950
			this->saveAsToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::saveAsToolStripMenuItem_Click);
951
			// 
952
			// settingsToolStripMenuItem
953
			// 
954
			this->settingsToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(4) {this->gamesToolStripMenuItem, 
955
				this->loadGameTextToolStripMenuItem, this->toolStripSeparator1, this->updateGameDataToolStripMenuItem});
956
			this->settingsToolStripMenuItem->Name = L"settingsToolStripMenuItem";
957
			this->settingsToolStripMenuItem->Size = System::Drawing::Size(61, 20);
958
			this->settingsToolStripMenuItem->Text = L"Settings";
959
			// 
960
			// gamesToolStripMenuItem
961
			// 
962
			this->gamesToolStripMenuItem->Name = L"gamesToolStripMenuItem";
963
			this->gamesToolStripMenuItem->Size = System::Drawing::Size(173, 22);
964
			this->gamesToolStripMenuItem->Text = L"Games";
965
			// 
966
			// loadGameTextToolStripMenuItem
967
			// 
968
			this->loadGameTextToolStripMenuItem->Name = L"loadGameTextToolStripMenuItem";
969
			this->loadGameTextToolStripMenuItem->Size = System::Drawing::Size(173, 22);
970
			this->loadGameTextToolStripMenuItem->Text = L"Load Game Text";
971
			this->loadGameTextToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::loadGameTextToolStripMenuItem_Click);
972
			// 
973
			// toolStripSeparator1
974
			// 
975
			this->toolStripSeparator1->Name = L"toolStripSeparator1";
976
			this->toolStripSeparator1->Size = System::Drawing::Size(170, 6);
977
			// 
978
			// updateGameDataToolStripMenuItem
979
			// 
980
			this->updateGameDataToolStripMenuItem->Name = L"updateGameDataToolStripMenuItem";
981
			this->updateGameDataToolStripMenuItem->Size = System::Drawing::Size(173, 22);
982
			this->updateGameDataToolStripMenuItem->Text = L"Update Game Data";
983
			this->updateGameDataToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::updateGameDataToolStripMenuItem_Click);
984
			// 
985
			// panel1
986
			// 
987
			this->panel1->Controls->Add(this->ButExit);
988
			this->panel1->Dock = System::Windows::Forms::DockStyle::Bottom;
989
			this->panel1->Location = System::Drawing::Point(0, 376);
990
			this->panel1->Name = L"panel1";
991
			this->panel1->Size = System::Drawing::Size(416, 33);
992
			this->panel1->TabIndex = 1;
993
			// 
994
			// ButExit
995
			// 
996
			this->ButExit->DialogResult = System::Windows::Forms::DialogResult::Cancel;
997
			this->ButExit->Dock = System::Windows::Forms::DockStyle::Right;
998
			this->ButExit->Location = System::Drawing::Point(303, 0);
999
			this->ButExit->Name = L"ButExit";
1000
			this->ButExit->Size = System::Drawing::Size(113, 33);
1001
			this->ButExit->TabIndex = 0;
1002
			this->ButExit->Text = L"Exit";
1003
			this->ButExit->UseVisualStyleBackColor = true;
1004
			this->ButExit->Click += gcnew System::EventHandler(this, &Form1::ButExit_Click);
1005
			// 
1006
			// PanelMain
1007
			// 
1008
			this->PanelMain->Controls->Add(this->tabControl1);
1009
			this->PanelMain->Controls->Add(this->panel2);
1010
			this->PanelMain->Dock = System::Windows::Forms::DockStyle::Fill;
1011
			this->PanelMain->Location = System::Drawing::Point(0, 24);
1012
			this->PanelMain->Name = L"PanelMain";
1013
			this->PanelMain->Size = System::Drawing::Size(416, 352);
1014
			this->PanelMain->TabIndex = 2;
1015
			// 
1016
			// tabControl1
1017
			// 
1018
			this->tabControl1->Controls->Add(this->tabPage1);
1019
			this->tabControl1->Controls->Add(this->tabPage2);
1020
			this->tabControl1->Controls->Add(this->tabPage3);
1021
			this->tabControl1->Dock = System::Windows::Forms::DockStyle::Fill;
1022
			this->tabControl1->Location = System::Drawing::Point(0, 22);
1023
			this->tabControl1->Name = L"tabControl1";
1024
			this->tabControl1->SelectedIndex = 0;
1025
			this->tabControl1->Size = System::Drawing::Size(416, 330);
1026
			this->tabControl1->TabIndex = 2;
1027
			// 
1028
			// tabPage1
1029
			// 
1030
			this->tabPage1->Controls->Add(this->WeaponList);
1031
			this->tabPage1->Location = System::Drawing::Point(4, 22);
1032
			this->tabPage1->Name = L"tabPage1";
1033
			this->tabPage1->Padding = System::Windows::Forms::Padding(3);
1034
			this->tabPage1->Size = System::Drawing::Size(408, 304);
1035
			this->tabPage1->TabIndex = 0;
1036
			this->tabPage1->Text = L"Lasers";
1037
			this->tabPage1->UseVisualStyleBackColor = true;
1038
			// 
1039
			// WeaponList
1040
			// 
1041
			this->WeaponList->CheckOnClick = true;
1042
			this->WeaponList->Dock = System::Windows::Forms::DockStyle::Fill;
1043
			this->WeaponList->FormattingEnabled = true;
1044
			this->WeaponList->HorizontalScrollbar = true;
1045
			this->WeaponList->Location = System::Drawing::Point(3, 3);
1046
			this->WeaponList->Name = L"WeaponList";
1047
			this->WeaponList->Size = System::Drawing::Size(402, 289);
1048
			this->WeaponList->TabIndex = 3;
1049
			this->WeaponList->ItemCheck += gcnew System::Windows::Forms::ItemCheckEventHandler(this, &Form1::WeaponListEvent_Changed);
1050
			// 
1051
			// tabPage2
1052
			// 
1053
			this->tabPage2->Controls->Add(this->MissileList);
1054
			this->tabPage2->Location = System::Drawing::Point(4, 22);
1055
			this->tabPage2->Name = L"tabPage2";
1056
			this->tabPage2->Padding = System::Windows::Forms::Padding(3);
1057
			this->tabPage2->Size = System::Drawing::Size(408, 304);
1058
			this->tabPage2->TabIndex = 1;
1059
			this->tabPage2->Text = L"Missiles";
1060
			this->tabPage2->UseVisualStyleBackColor = true;
1061
			// 
1062
			// MissileList
1063
			// 
1064
			this->MissileList->Dock = System::Windows::Forms::DockStyle::Fill;
1065
			this->MissileList->FormattingEnabled = true;
1066
			this->MissileList->HorizontalScrollbar = true;
1067
			this->MissileList->Location = System::Drawing::Point(3, 3);
1068
			this->MissileList->Name = L"MissileList";
1069
			this->MissileList->Size = System::Drawing::Size(402, 289);
1070
			this->MissileList->TabIndex = 4;
1071
			this->MissileList->ItemCheck += gcnew System::Windows::Forms::ItemCheckEventHandler(this, &Form1::MissileListEvent_Changed);
1072
			// 
1073
			// tabPage3
1074
			// 
1075
			this->tabPage3->Controls->Add(this->CockpitWeapons);
1076
			this->tabPage3->Controls->Add(this->ComboCockpits);
1077
			this->tabPage3->Location = System::Drawing::Point(4, 22);
1078
			this->tabPage3->Name = L"tabPage3";
1079
			this->tabPage3->Padding = System::Windows::Forms::Padding(3);
1080
			this->tabPage3->Size = System::Drawing::Size(408, 304);
1081
			this->tabPage3->TabIndex = 2;
1082
			this->tabPage3->Text = L"Cockpits";
1083
			this->tabPage3->UseVisualStyleBackColor = true;
1084
			// 
1085
			// CockpitWeapons
1086
			// 
1087
			this->CockpitWeapons->CheckOnClick = true;
1088
			this->CockpitWeapons->Dock = System::Windows::Forms::DockStyle::Fill;
1089
			this->CockpitWeapons->FormattingEnabled = true;
1090
			this->CockpitWeapons->HorizontalScrollbar = true;
1091
			this->CockpitWeapons->Location = System::Drawing::Point(3, 24);
1092
			this->CockpitWeapons->Name = L"CockpitWeapons";
1093
			this->CockpitWeapons->Size = System::Drawing::Size(402, 274);
1094
			this->CockpitWeapons->TabIndex = 4;
1095
			// 
1096
			// ComboCockpits
1097
			// 
1098
			this->ComboCockpits->Dock = System::Windows::Forms::DockStyle::Top;
1099
			this->ComboCockpits->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList;
1100
			this->ComboCockpits->FormattingEnabled = true;
1101
			this->ComboCockpits->Location = System::Drawing::Point(3, 3);
1102
			this->ComboCockpits->Name = L"ComboCockpits";
1103
			this->ComboCockpits->Size = System::Drawing::Size(402, 21);
1104
			this->ComboCockpits->TabIndex = 5;
1105
			this->ComboCockpits->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::ComboCockpits_SelectedIndexChanged);
1106
			// 
1107
			// panel2
1108
			// 
1109
			this->panel2->Controls->Add(this->ComboGame);
1110
			this->panel2->Controls->Add(this->label1);
1111
			this->panel2->Dock = System::Windows::Forms::DockStyle::Top;
1112
			this->panel2->Location = System::Drawing::Point(0, 0);
1113
			this->panel2->Name = L"panel2";
1114
			this->panel2->Size = System::Drawing::Size(416, 22);
1115
			this->panel2->TabIndex = 2;
1116
			// 
1117
			// ComboGame
1118
			// 
1119
			this->ComboGame->Dock = System::Windows::Forms::DockStyle::Fill;
1120
			this->ComboGame->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList;
1121
			this->ComboGame->FormattingEnabled = true;
1122
			this->ComboGame->Location = System::Drawing::Point(188, 0);
1123
			this->ComboGame->Name = L"ComboGame";
1124
			this->ComboGame->Size = System::Drawing::Size(228, 21);
1125
			this->ComboGame->TabIndex = 0;
1126
			this->ComboGame->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::ComboGame_SelectedIndexChanged);
1127
			// 
1128
			// label1
1129
			// 
1130
			this->label1->Dock = System::Windows::Forms::DockStyle::Left;
1131
			this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
1132
				static_cast<System::Byte>(0)));
1133
			this->label1->Location = System::Drawing::Point(0, 0);
1134
			this->label1->Name = L"label1";
1135
			this->label1->Size = System::Drawing::Size(188, 22);
1136
			this->label1->TabIndex = 1;
1137
			this->label1->Text = L"X-Universe Game:";
1138
			this->label1->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
1139
			// 
1140
			// PanelNotLoaded
1141
			// 
1142
			this->PanelNotLoaded->Controls->Add(this->LabelNotLoaded);
1143
			this->PanelNotLoaded->Dock = System::Windows::Forms::DockStyle::Fill;
1144
			this->PanelNotLoaded->Location = System::Drawing::Point(0, 24);
1145
			this->PanelNotLoaded->Name = L"PanelNotLoaded";
1146
			this->PanelNotLoaded->Size = System::Drawing::Size(416, 352);
1147
			this->PanelNotLoaded->TabIndex = 3;
1148
			// 
1149
			// LabelNotLoaded
1150
			// 
1151
			this->LabelNotLoaded->Dock = System::Windows::Forms::DockStyle::Fill;
1152
			this->LabelNotLoaded->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, 
1153
				static_cast<System::Byte>(0)));
1154
			this->LabelNotLoaded->Location = System::Drawing::Point(0, 0);
1155
			this->LabelNotLoaded->Name = L"LabelNotLoaded";
1156
			this->LabelNotLoaded->Size = System::Drawing::Size(416, 352);
1157
			this->LabelNotLoaded->TabIndex = 0;
1158
			this->LabelNotLoaded->Text = L"No ship file is currently loaded";
1159
			this->LabelNotLoaded->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
1160
			// 
1161
			// Form1
1162
			// 
1163
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
1164
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
1165
			this->CancelButton = this->ButExit;
1166
			this->ClientSize = System::Drawing::Size(416, 409);
1167
			this->Controls->Add(this->PanelMain);
1168
			this->Controls->Add(this->PanelNotLoaded);
1169
			this->Controls->Add(this->panel1);
1170
			this->Controls->Add(this->menuStrip1);
1171
			this->Icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
1172
			this->MainMenuStrip = this->menuStrip1;
1173
			this->Name = L"Form1";
1174
			this->Text = L"XSP Ship Convertor";
1175
			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
1176
			this->menuStrip1->ResumeLayout(false);
1177
			this->menuStrip1->PerformLayout();
1178
			this->panel1->ResumeLayout(false);
1179
			this->PanelMain->ResumeLayout(false);
1180
			this->tabControl1->ResumeLayout(false);
1181
			this->tabPage1->ResumeLayout(false);
1182
			this->tabPage2->ResumeLayout(false);
1183
			this->tabPage3->ResumeLayout(false);
1184
			this->panel2->ResumeLayout(false);
1185
			this->PanelNotLoaded->ResumeLayout(false);
1186
			this->ResumeLayout(false);
1187
			this->PerformLayout();
1188
 
1189
		}
1190
#pragma endregion
1191
private: System::Void openToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
1192
			 this->OpenFile();
1193
		 }
1194
private: System::Void ButExit_Click(System::Object^  sender, System::EventArgs^  e) {
1195
			 this->Close();
1196
		 }
1197
private: System::Void saveToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
1198
			 this->SaveShip();
1199
		 }
1200
private: System::Void ComboGame_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {
1201
			 this->ChangeGame();
1202
		 }
1203
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
1204
			 this->LoadGameDirectory();
1205
 
1206
			 if ( m_sOpenFile )
1207
				this->OpenFile(m_sOpenFile);
1208
		 }
1209
private: void CloseEvent(System::Object ^Sender, System::EventArgs ^E) {
1210
			 this->CheckSave();
1211
			 this->CloseDialog();
1212
		 }
1213
private: System::Void updateGameDataToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
1214
			 this->LoadGameData();
1215
		 }
1216
private: System::Void loadGameTextToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
1217
			 m_bReadText = !m_bReadText;
1218
			 this->loadGameTextToolStripMenuItem->Checked = m_bReadText;
1219
		 }
1220
private: System::Void WeaponListEvent_Changed(System::Object^  sender, ItemCheckEventArgs^  e) {
1221
			 if ( !m_bLoading )
1222
			 {
1223
				 int index = (1 << e->Index);
1224
				 if ( e->NewValue == CheckState::Checked )
1225
					 m_iLaserMask |= index;
1226
				 else if ( e->NewValue == CheckState::Unchecked )
1227
					 m_iLaserMask &= ~(index);
1228
 
1229
				this->CheckListChanged();
1230
			 }
1231
		 }
1232
private: System::Void MissileListEvent_Changed(System::Object^  sender, ItemCheckEventArgs^  e) {
1233
			 if ( !m_bLoading )
1234
			 {
1235
				 int index = (1 << e->Index);
1236
				 if ( e->NewValue == CheckState::Checked )
1237
					 m_iMissileMask |= index;
1238
				 else if ( e->NewValue == CheckState::Unchecked )
1239
					 m_iMissileMask &= ~(index);
1240
 
1241
				this->CheckListChanged();
1242
			 }
1243
		 }
1244
private: System::Void Event_Changed(System::Object^  sender, ItemCheckEventArgs^  e) {
1245
			 if ( !m_bLoading )
1246
			 {
1247
				this->CheckListChanged();
1248
			 }
1249
		 }
1250
private: System::Void saveAsToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
1251
			 this->SaveShipAs();
1252
		 }
1253
private: System::Void ComboCockpits_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {
1254
			 this->UpdateCockpitList();
1255
		 }
1256
};
1257
}
1258