Glatzemann 2af6bf45b5 - added ContentBuilder and XNB inspector to build files
- some minor tweaking on sample browser
2012-08-22 11:29:03 +00:00

256 lines
8.1 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
namespace AnxSampleBrowser
{
public partial class AnxSampleBrowser : Form
{
//list of all registered samples
private List<SampleData> _sampleAtlas;
public String SamplePath { get { return "../Samples/"; } }
/// <summary>
/// Constructor of the browser
/// parses the xml and set up lists
/// </summary>
public AnxSampleBrowser()
{
InitializeComponent();
//make the form fixed size
this.FormBorderStyle = FormBorderStyle.FixedDialog;
// Set the MaximizeBox to false to remove the maximize box.
this.MaximizeBox = false;
// Set the MinimizeBox to false to remove the minimize box.
this.MinimizeBox = false;
//init sample list
_sampleAtlas = new List<SampleData>();
//add default categorie (everything)...
_dCategories.Items.Add("all");
//...and select it
_dCategories.SelectedIndex = 0;
_dCategories.DropDownStyle = ComboBoxStyle.DropDownList;
//load out Samples.xml
parseXMl();
_cFilter.CheckOnClick = true;
for (int i = 0; i < _cFilter.Items.Count; ++i)
{
_cFilter.SetItemChecked(i, true);
}
this._cFilter.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this._cFilter_ItemCheck);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
private void parseXMl()
{
XmlDocument sampleDescription = new XmlDocument();
try
{
sampleDescription.Load(SamplePath+"SampleCatalog.xml");
}
catch (FileNotFoundException ex)
{
OpenFileDialog openSampleXML = new OpenFileDialog();
openSampleXML.Filter = "xml files (*.xml)|*.xml";
openSampleXML.Title="Pick SampleCatalog.xml";
if (openSampleXML.ShowDialog() == DialogResult.OK)
{
sampleDescription.Load(openSampleXML.FileName);
}
else
{
MessageBox.Show("Samples.xml not found");
this.Close();
}
}
XmlNode sampleRoot = sampleDescription.ChildNodes[1];
List<String> _categorieAtlas = new List<string>();
List<String> _tagAtlas=new List<string>();
foreach (XmlNode sample in sampleRoot.ChildNodes)
{
SampleData data = new SampleData(){
Name = sample["Name"].InnerText,
Description = sample["Description"].InnerText,
ExecPath = sample["ExecPath"].InnerText,
Categorie = sample["Categorie"].InnerText
};
XmlNode imagePath = sample["ImagePath"];
if (imagePath != null)
data.ImagePath = imagePath.InnerText;
else
data.ImagePath = "";
data.Validate();
if (!_categorieAtlas.Contains(sample["Categorie"].InnerText))
_categorieAtlas.Add(sample["Categorie"].InnerText);
XmlNode tags = sample["Tags"];
List<String> dataTags=new List<string>();
foreach (XmlNode tag in tags.ChildNodes)
{
if (!_tagAtlas.Contains(tag.InnerText))
_tagAtlas.Add(tag.InnerText);
dataTags.Add(tag.InnerText);
}
data.Tags = dataTags.ToArray();
_sampleAtlas.Add(data);
addSampleDataVisual(data);
}
_dCategories.Items.AddRange(_categorieAtlas.ToArray());
_cFilter.Items.AddRange(_tagAtlas.ToArray());
}
private void addAll()
{
_pSamples.Controls.Clear();
foreach (SampleData data in _sampleAtlas)
{
addSampleDataVisual(data);
}
}
private void addSampleDataVisual(SampleData data)
{
SampleDataVisual dataV = new SampleDataVisual(data,this);
dataV.Location = new Point(0, this._pSamples.Controls.Count * (dataV.Size.Height + 5));
this._pSamples.Controls.Add(dataV);
}
private void search()
{
String[] phrases=_tSearch.Text.Split(new char[]{' ',',',';'});
this._pSamples.Controls.Clear();
foreach (SampleData data in _sampleAtlas)
{
bool add=false;
foreach (string phrase in phrases)
{
if (data.Name.Contains(phrase, StringComparison.OrdinalIgnoreCase) ||
data.Description.Contains(phrase, StringComparison.OrdinalIgnoreCase) ||
data.Categorie.Contains(phrase, StringComparison.OrdinalIgnoreCase))
{
add = true;
break;
}
foreach (String tag in data.Tags)
{
if (tag.ToLower().Equals(phrase.ToLower()))
{
add = true;
break;
}
}
}
if (add)
addSampleDataVisual(data);
}
}
private void pickCategorie()
{
_pSamples.Controls.Clear();
foreach (SampleData data in _sampleAtlas)
{
if (data.Categorie.Equals(_dCategories.SelectedItem))
addSampleDataVisual(data);
}
}
private void filter()
{
_pSamples.Controls.Clear();
foreach (SampleData data in _sampleAtlas)
{
foreach (String tag in data.Tags)
{
if (_cFilter.CheckedItems.Contains(tag))
{
addSampleDataVisual(data);
break;
}
}
}
}
private void _bSearch_Click(object sender, EventArgs e)
{
search();
}
private void _bClear_Click(object sender, EventArgs e)
{
this._tSearch.Text = "";
addAll();
}
private void _dCategories_SelectedIndexChanged(object sender, EventArgs e)
{
if (_dCategories.Items.Count == 0)
return;
if (_dCategories.SelectedItem.Equals("all"))
addAll();
else
pickCategorie();
}
private void _cFilter_ItemCheck(object sender, ItemCheckEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate { filter(); });
}
private void AnxSampleBrowser_Load(object sender, EventArgs e)
{
this.Text += " v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
static class StringExtender
{
public static bool Contains(this string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
}
}