corrade-vassal – Rev 16
?pathlinks?
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2015 - License: GNU GPLv3 //
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
// rights of fair usage, the disclaimer and warranty conditions. //
///////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using OpenMetaverse;
using wasSharp;
namespace Vassal
{
public partial class RegionEditForm : Form
{
private static RegionEditForm mainForm;
public RegionEditForm()
{
InitializeComponent();
mainForm = this;
}
private void LoadRegionsRequested(object sender, EventArgs e)
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
switch (mainForm.LoadRegionsDialog.ShowDialog())
{
case DialogResult.OK:
var file = mainForm.LoadRegionsDialog.FileName;
new Thread(() =>
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
try
{
mainForm.StatusText.Text = @"loading regions...";
mainForm.StatusProgress.Value = 0;
// import CSV regions
Vector3 localPosition;
var ConfiguredRegions = new List
<KeyValuePair<string, Vector3>>(
File.ReadAllLines(file)
.AsParallel()
.Select(o => new List<string>(CSV.ToEnumerable(o)))
.Where(o => o.Count == 2)
.ToDictionary(o => o.First(),
p =>
Vector3.TryParse(p.Last(), out localPosition)
? localPosition
: Vector3.Zero));
Vassal.vassalForm.BeginInvoke((MethodInvoker) (() =>
{
Vassal.vassalForm.LoadedRegionsBox.Items.Clear();
Vassal.vassalForm.LoadedRegionsBox.Items.AddRange(
ConfiguredRegions.Select(
o => (object) new ListViewItem {Text = o.Key, Tag = o.Value})
.ToArray());
// Update batch restart grid view.
Vassal.vassalForm.BatchRestartGridView.Rows.Clear();
foreach (var data in ConfiguredRegions)
{
Vassal.vassalForm.BatchRestartGridView.Rows.Add(data.Key, data.Value);
}
// Update region state grid view.
Vassal.vassalForm.RegionsStateGridView.Rows.Clear();
foreach (var data in ConfiguredRegions)
{
Vassal.vassalForm.RegionsStateGridView.Rows.Add(data.Key, "Check pending...",
DateTime.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP));
}
}));
Regions.Items.Clear();
Regions.Items.AddRange(
ConfiguredRegions.Select(
o =>
(object)
new ListViewItem
{
Text = o.Key + @" " + @"(" + o.Value.ToString() + @")",
Tag = o
})
.ToArray());
mainForm.StatusText.Text = @"regions loaded";
mainForm.StatusProgress.Value = 100;
}
catch (Exception ex)
{
mainForm.StatusText.Text = ex.Message;
}
}));
})
{IsBackground = true, Priority = ThreadPriority.Normal}.Start();
break;
}
}));
}
private void SaveRegionsRequested(object sender, EventArgs e)
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
switch (mainForm.SaveRegionsDialog.ShowDialog())
{
case DialogResult.OK:
var file = mainForm.SaveRegionsDialog.FileName;
new Thread(() =>
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
try
{
mainForm.StatusText.Text = @"saving regions...";
mainForm.StatusProgress.Value = 0;
// Save the regions to CSV.
using (
var streamWriter =
new StreamWriter(file, false,
Encoding.UTF8))
{
foreach (
var region in
Regions.Items.Cast<ListViewItem>()
.Select(o => (KeyValuePair<string, Vector3>) o.Tag))
{
streamWriter.Write(
CSV.FromEnumerable(new[] {region.Key, region.Value.ToString()}));
streamWriter.Write(Environment.NewLine);
}
}
mainForm.StatusText.Text = @"regions saved";
mainForm.StatusProgress.Value = 100;
}
catch (Exception ex)
{
mainForm.StatusText.Text = ex.Message;
}
}));
})
{IsBackground = true, Priority = ThreadPriority.Normal}.Start();
break;
}
}));
}
private void RegionEditShown(object sender, EventArgs e)
{
Regions.Items.Clear();
// Get all the regions if they exist.
if (File.Exists(Vassal.VASSAL_CONSTANTS.VASSAL_REGIONS))
{
Vector3 localPosition;
var ConfiguredRegions = new List<KeyValuePair<string, Vector3>>(
File.ReadAllLines(Vassal.VASSAL_CONSTANTS.VASSAL_REGIONS)
.Select(o => new List<string>(CSV.ToEnumerable(o)))
.Where(o => o.Count == 2)
.ToDictionary(o => o.First(),
p =>
Vector3.TryParse(p.Last(), out localPosition)
? localPosition
: Vector3.Zero).OrderBy(o => o.Key).ToDictionary(o => o.Key, o => o.Value));
Regions.Items.AddRange(
ConfiguredRegions.Select(
o => (object) new ListViewItem {Text = o.Key + @" " + @"(" + o.Value.ToString() + @")", Tag = o})
.ToArray());
}
}
private void RequestAddRegion(object sender, EventArgs e)
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
if (string.IsNullOrEmpty(RegionName.Text))
{
RegionName.BackColor = Color.MistyRose;
return;
}
Vector3 position;
if (!Vector3.TryParse(RegionPosition.Text, out position))
{
RegionPosition.BackColor = Color.MistyRose;
return;
}
RegionName.BackColor = Color.Empty;
RegionPosition.BackColor = Color.Empty;
Regions.Items.Add(new ListViewItem
{
Text = RegionName.Text + @" " + @"(" + position + @")",
Tag = new KeyValuePair<string, Vector3>(RegionName.Text, position)
});
// Update drop down box.
Vassal.vassalForm.BeginInvoke((MethodInvoker) (() =>
{
Vassal.vassalForm.LoadedRegionsBox.Items.Add(new ListViewItem
{
Text = RegionName.Text,
Tag = position
});
// Add the row to the batch restart grid view.
Vassal.vassalForm.BatchRestartGridView.Rows.Add(RegionName.Text, position.ToString());
Vassal.vassalForm.RegionsStateGridView.Rows.Add(RegionName.Text, "Check pending...",
DateTime.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP));
}));
}));
}
private void RequestRemoveRegion(object sender, EventArgs e)
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
var listViewItem = Regions.SelectedItem as ListViewItem;
if (listViewItem == null)
{
Regions.BackColor = Color.MistyRose;
return;
}
var selectedItemIndex = Regions.SelectedIndex;
if (selectedItemIndex == -1)
return;
Regions.BackColor = Color.Empty;
Vassal.vassalForm.BeginInvoke((MethodInvoker) (() =>
{
Vassal.vassalForm.LoadedRegionsBox.Items.RemoveAt(selectedItemIndex);
// Update the batch restart grid view.
Vassal.vassalForm.BatchRestartGridView.Rows.RemoveAt(selectedItemIndex);
Vassal.vassalForm.RegionsStateGridView.Rows.RemoveAt(selectedItemIndex);
}));
Regions.Items.RemoveAt(Regions.SelectedIndex);
}));
}
private void RegionSettingChanged(object sender, EventArgs e)
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
var listViewItem = Regions.SelectedItem as ListViewItem;
if (listViewItem == null)
return;
var selectedItemIndex = Regions.SelectedIndex;
if (selectedItemIndex == -1)
return;
if (string.IsNullOrEmpty(RegionName.Text))
{
RegionName.BackColor = Color.MistyRose;
RegionPosition.BackColor = Color.MistyRose;
return;
}
Vector3 position;
if (!Vector3.TryParse(RegionPosition.Text, out position))
{
RegionPosition.BackColor = Color.MistyRose;
return;
}
RegionName.BackColor = Color.Empty;
RegionPosition.BackColor = Color.Empty;
Vassal.vassalForm.BeginInvoke((MethodInvoker) (() =>
{
if (Vassal.vassalForm.LoadedRegionsBox.Items.Count > selectedItemIndex)
{
Vassal.vassalForm.LoadedRegionsBox.Items[selectedItemIndex] = new ListViewItem
{
Text = RegionName.Text,
Tag = position
};
}
// Update the batch restart grid view.
if (Vassal.vassalForm.BatchRestartGridView.Rows.Count > selectedItemIndex)
{
Vassal.vassalForm.BatchRestartGridView.Rows[selectedItemIndex].Cells["BatchRestartRegionName"]
.Value
= RegionName.Text;
Vassal.vassalForm.BatchRestartGridView.Rows[selectedItemIndex].Cells["BatchRestartPosition"]
.Value
= position.ToString();
}
// Update the region state grid view.
if (Vassal.vassalForm.RegionsStateGridView.Rows.Count > selectedItemIndex)
{
Vassal.vassalForm.RegionsStateGridView.Rows[selectedItemIndex].Cells["RegionsStateRegionName"]
.Value
= RegionName.Text;
Vassal.vassalForm.RegionsStateGridView.Rows[selectedItemIndex].Cells["RegionsStateLastState"]
.Value
= "Check pending...";
Vassal.vassalForm.RegionsStateGridView.Rows[selectedItemIndex].Cells["RegionsStateLastCheck"]
.Value
= DateTime.Now.ToUniversalTime()
.ToString(Vassal.LINDEN_CONSTANTS.LSL.DATE_TIME_STAMP);
}
}));
Regions.Items[selectedItemIndex] = new ListViewItem
{
Text = RegionName.Text + @" " + @"(" + position + @")",
Tag = new KeyValuePair<string, Vector3>(RegionName.Text, position)
};
}));
}
private void RegionSelected(object sender, EventArgs e)
{
mainForm.BeginInvoke((MethodInvoker) (() =>
{
var listViewItem = Regions.SelectedItem as ListViewItem;
if (listViewItem == null)
return;
var selectedItemIndex = Regions.SelectedIndex;
if (selectedItemIndex == -1)
return;
var region = (KeyValuePair<string, Vector3>) listViewItem.Tag;
RegionName.Text = region.Key;
RegionPosition.Text = region.Value.ToString();
}));
}
private void ShowToolTip(object sender, EventArgs e)
{
mainForm.BeginInvoke(
(Action) (() =>
{
var pictureBox = sender as PictureBox;
if (pictureBox != null)
{
toolTip1.Show(toolTip1.GetToolTip(pictureBox), pictureBox);
}
}));
}
}
}
Generated by GNU Enscript 1.6.5.90.