//=========== SCENERY ============ #region Scenery Management /** <summary> Opens a file dialog to add scenery. </summary> */ private void AddScenery(object sender, EventArgs e) { if (this.openFileDialogScenery.ShowDialog(this) == DialogResult.OK) { bool invalid = false; bool invalidType = false; for (int i = 0; i < this.openFileDialogScenery.FileNames.Length; i++) { string file = this.openFileDialogScenery.FileNames[i]; if (File.Exists(file)) { ObjectDataInfo info = ObjectDataInfo.FromFile(file, true); if (!info.Invalid) { if (info.Type != ObjectTypes.SmallScenery && info.Type != ObjectTypes.LargeScenery && info.Type != ObjectTypes.PathAddition && info.Type != ObjectTypes.PathBanner && info.Type != ObjectTypes.Wall) { invalidType = true; } else { ListViewItem item = new ListViewItem(); item.ImageIndex = 1; if (info.Source == SourceTypes.Custom) { item.ImageIndex = 2; } else if (info.Source == SourceTypes.RCT2) { item.ImageIndex = 0; } item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Source.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, Path.GetFileName(file))); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Name)); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Type.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Subtype.ToString())); this.tabGroupScenery.Items.Add(item); this.sceneryGroup.Items.Add(new SceneryGroupItem(info.Flags, info.FileName, info.CheckSum)); } } else { /*ListViewItem item = new ListViewItem(); * item.ForeColor = Color.FromArgb(200, 0, 0); * //item.Font = new Font(item.Font, FontStyle.Bold); * item.ImageIndex = 3; * if (info.Source == SourceTypes.Custom) item.ImageIndex = 2; * else if (info.Source == SourceTypes.RCT2) item.ImageIndex = 0; * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, Path.GetFileName(file))); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * this.tabGroupScenery.Items.Add(item);*/ invalid = true; } } } if (invalid) { ErrorMessageBox.Show(this, "Some items were invalid objects and", "not added."); } if (invalidType) { ErrorMessageBox.Show(this, "Some items were invalid object types", "and not added."); } } }
/** <summary> Called when a dragged object is dropped into the list. </summary> */ private void SceneryListDragDrop(object sender, DragEventArgs e) { Point cp = this.tabGroupScenery.PointToClient(new Point(e.X, e.Y)); ListViewItem dragToItem = this.tabGroupScenery.GetItemAt(cp.X, cp.Y); int dropIndex = (dragToItem != null ? dragToItem.Index : this.tabGroupScenery.Items.Count); if (dragToItem != null) { if (this.tabGroupScenery.GetItemAt(cp.X, cp.Y + 12) != dragToItem) { dropIndex++; } } if (e.Data.GetDataPresent(DataFormats.FileDrop)) { bool invalid = false; bool invalidType = false; string[] fileDrops = (string[])(e.Data.GetData(DataFormats.FileDrop)); for (int i = 0; i < fileDrops.Length; i++) { string file = fileDrops[i]; if (File.Exists(file)) { ObjectDataInfo info = ObjectDataInfo.FromFile(file, true); if (!info.Invalid) { if (info.Type != ObjectTypes.SmallScenery && info.Type != ObjectTypes.LargeScenery && info.Type != ObjectTypes.PathAddition && info.Type != ObjectTypes.PathBanner && info.Type != ObjectTypes.Wall) { invalidType = true; } else { ListViewItem item = new ListViewItem(); item.ImageIndex = 1; if (info.Source == SourceTypes.Custom) { item.ImageIndex = 2; } else if (info.Source == SourceTypes.RCT2) { item.ImageIndex = 0; } item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Source.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, Path.GetFileName(file))); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Name)); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Type.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Subtype.ToString())); this.tabGroupScenery.Items.Insert(dropIndex + i, item); this.sceneryGroup.Items.Insert(dropIndex + i, new SceneryGroupItem(info.Flags, info.FileName, info.CheckSum)); } } else { /*ListViewItem item = new ListViewItem(); * item.ForeColor = Color.FromArgb(200, 0, 0); * //item.Font = new Font(item.Font, FontStyle.Bold); * item.ImageIndex = 3; * if (info.Source == SourceTypes.Custom) item.ImageIndex = 2; * else if (info.Source == SourceTypes.RCT2) item.ImageIndex = 0; * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, Path.GetFileName(file))); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); * this.tabGroupScenery.Items.Insert(dropIndex + i, item);*/ invalid = true; } } } if (invalid) { ErrorMessageBox.Show(this, "Some items were invalid objects and", "not added."); } if (invalidType) { ErrorMessageBox.Show(this, "Some items were invalid object types", "and not added."); } } else { int itemsBefore = 0; int itemsAfter = 0; for (int i = 0; i < this.tabGroupScenery.SelectedItems.Count; i++) { if (this.tabGroupScenery.SelectedItems[i].Index <= dropIndex) { itemsBefore++; } else { itemsAfter++; } } List <ListViewItem> items = new List <ListViewItem>(); List <SceneryGroupItem> sgItems = new List <SceneryGroupItem>(); for (int i = this.tabGroupScenery.SelectedItems.Count - 1; i >= 0; i--) { items.Add(this.tabGroupScenery.SelectedItems[i]); sgItems.Add(this.sceneryGroup.Items[i]); this.sceneryGroup.Items.RemoveAt(this.tabGroupScenery.SelectedItems[i].Index); this.tabGroupScenery.Items.RemoveAt(this.tabGroupScenery.SelectedItems[i].Index); } for (int i = 0; i < items.Count; i++) { this.tabGroupScenery.Items.Insert(Math.Max(0, dropIndex - itemsBefore) + i, items[items.Count - 1 - i]); this.sceneryGroup.Items.Insert(Math.Max(0, dropIndex - itemsBefore) + i, sgItems[items.Count - 1 - i]); } } changed = true; }
/** <summary> Loads objects from the directory every tick. </summary> */ private void LoadObjects(object sender, EventArgs e) { int count = 0; for (int i = fileIndex; i < this.sceneryGroup.Items.Count && count < objectsPerTick; i++, fileIndex++, count++) { string file = Path.Combine(this.directory, this.sceneryGroup.Items[i].FileName + ".DAT"); if (File.Exists(file)) { ObjectDataInfo info = ObjectDataInfo.FromFile(file, true); if (!info.Invalid) { ListViewItem item = new ListViewItem(); item.ImageIndex = 1; if (info.Source == SourceTypes.Custom) { item.ImageIndex = 2; } else if (info.Source == SourceTypes.RCT2) { item.ImageIndex = 0; } item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Source.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, Path.GetFileName(file))); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Name)); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Type.ToString())); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Subtype.ToString())); this.tabGroupScenery.Items.Add(item); } else { ListViewItem item = new ListViewItem(); item.ForeColor = Color.FromArgb(200, 0, 0); //item.Font = new Font(item.Font, FontStyle.Bold); item.ImageIndex = 3; if (info.Source == SourceTypes.Custom) { item.ImageIndex = 2; } else if (info.Source == SourceTypes.RCT2) { item.ImageIndex = 0; } item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, Path.GetFileName(file))); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, "")); this.tabGroupScenery.Items.Add(item); } } } if (fileIndex >= this.sceneryGroup.Items.Count) { this.labelScanProgress.Text = "Scan Finished - Took " + Math.Round((DateTime.Now - this.scanStart).TotalSeconds) + " seconds"; this.timerLoadObjects.Stop(); } else { this.labelScanProgress.Text = "Scanning - " + Math.Round((double)fileIndex / (double)this.sceneryGroup.Items.Count * 100.0) + "%"; } this.labelObjectsScanned.Text = "Objects Scanned: " + fileIndex; this.labelObjectsInGroup.Text = "Scenery" + ": " + this.tabGroupScenery.Items.Count; }