Click here to Skip to main content
Click here to Skip to main content
Articles » Languages » C# » Samples » Downloads
 
Add your own
alternative version

RSS 2.0 Framework

, 19 Jan 2013 LGPL3
RSS 2.0 framework implements the RSS 2.0 specification in strongly typed classes. The framework enables you to create and consume valid RSS 2.0 feeds in your code in just a few minutes.
rssframework_bin.zip
Raccoom.Xml.dll
Raccoom.Xml.Editors.exe
DockingManagerExtender.dll
MagicLibrary.DLL
Raccoom.Windows.Forms.dll
rssframework_demo.zip
Raccoom.Bin
DockingManagerExtender.dll
MagicLibrary.DLL
nunit.framework.dll
Raccoom.Windows.Forms
Windows
Forms
Design
Raccoom.Xml
Properties
Raccoom.Xml.csproj.user
Xml
atom.xsx
Raccoom.Xml.Editors
ActionList
Actions
Design
App.ico
Raccoom.Xml.Editors.csproj.user
Windows
Forms
Raccoom.Xml.Test
Resources
rsschannel.rss
bin
rssframework_help.zip
Raccoom.Xml.chm
rssframework_src.zip
rsschannel.rss
Raccoom.Xml.csproj.user
atom.xsx
setup.zip
setup.exe
// Copyright � 2006 by Christoph Richner. All rights are reserved.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//
// website http://www.raccoom.net, email support@raccoom.net, msn chrisdarebell@msn.com

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Raccoom.Xml;
namespace Raccoom.Windows.Forms
{
	/// <summary>
	///  
	/// </summary>
	public class MdiParent : System.Windows.Forms.Form
	{
		#region fields
		private Raccoom.Windows.Forms.DockingManagerExtender _dockingManager;
		private Actions.ActionList _actionList;
		private System.Windows.Forms.ToolBar toolBar1;
		private System.Windows.Forms.ToolBarButton _tbLoad;
		private System.Windows.Forms.ToolBarButton _tbSave;
		private System.ComponentModel.IContainer components;
		private System.Windows.Forms.ToolBarButton _tbNew;
		private System.Windows.Forms.ToolBarButton _tbAbout;
		private System.Windows.Forms.ToolBarButton _tbPublish;
		private System.Windows.Forms.ToolBarButton _tbRefresh;
		private string _fileDialogFilter = "opml files (*.opml)|*.opml| rss files (*.xml)|*.xml";
		private System.Windows.Forms.MenuItem menuItem8;
		private System.Windows.Forms.MenuItem menuItem11;
		private System.Windows.Forms.MenuItem _mnuFile;
		private System.Windows.Forms.MenuItem _mnuHelp;
		private System.Windows.Forms.MenuItem _mnuHelpAbout;
		private System.Windows.Forms.MenuItem _mnuFileNew;
		private System.Windows.Forms.MenuItem _mnuFileOpen;
		private System.Windows.Forms.MenuItem _mnuFileSave;
		private System.Windows.Forms.MenuItem _mnuFilePublish;
		private System.Windows.Forms.MenuItem _mnuFileExit;
		private System.Windows.Forms.MenuItem _mnuView;
		private System.Windows.Forms.MenuItem _mnuHelpWebSite;
		private System.Windows.Forms.ImageList _imageList;
		private Actions.Action _actNew;
		private Actions.Action _actOpenLocal;
		private Actions.Action _actOpenRemote;
		private Actions.Action _actSaveLocal;
		private Actions.Action _actSaveRemote;
		private Actions.Action _actExit;
		private Actions.Action _actRefresh;
		private Actions.Action _actAbout;
		private System.Windows.Forms.MenuItem _mnuFileOpenRemote;
		private System.Windows.Forms.MenuItem _mnuFileClose;
		private Actions.Action _actClose;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem _mnuViewRefresh;
		private System.Windows.Forms.MainMenu _mainMenu;
		private System.Windows.Forms.ToolBarButton _tbSep3;
		private System.Windows.Forms.ToolBarButton _tbSep4;
		private System.Windows.Forms.MenuItem menuItem2;
		private System.Windows.Forms.MenuItem menuItem3;
		private System.Windows.Forms.MenuItem _mnuFileRecents;
		private FormSettings _settings;
		private System.Windows.Forms.MenuItem menuItem4;
		private System.Windows.Forms.MenuItem _mnuWindowCascade;
		private System.Windows.Forms.MenuItem _mnuWindowHorzAlign;
		private System.Windows.Forms.MenuItem _mnuWindowVertAlign;
		private IChildWindow _activeWindow = null;
		private System.Windows.Forms.ContextMenu _cmNewFile;
		private System.Windows.Forms.MenuItem menuItem5;
		private System.Windows.Forms.ContextMenu _cmOpenFile;
		private System.Windows.Forms.WebBrowser _axWebBrowserHtml;
		private System.Windows.Forms.Panel _panelXmlPreview;
		private System.Windows.Forms.Panel _panelHtmlPreview;
        private System.Windows.Forms.WebBrowser _axWebBrowserXml;
	
		private delegate void LoadChannelDelegate(string location);
		private System.Net.WebProxy _webProxy=null;
		#endregion

		public MdiParent()
		{
			InitializeComponent();				
		}


		#region internal interface
		/// <summary>
		/// Create a new RssChannel and update the UI
		/// </summary>
		private void OpenDocument(string location)
		{
			this.Cursor = Cursors.WaitCursor;
			try
			{
				Uri uri = new Uri(location);
				IChildWindow window = CreateChildWindow(uri.AbsoluteUri);
				//
				window.Open(uri);
				window.Filename= (uri.Host.Length==0) ? location : string.Empty;
				window.Refresh();
				window.Show();
			} 
			catch (System.Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
			this.Cursor = Cursors.Default;
		}
		/// <summary>
		/// Update the UI depending on the current state
		/// </summary>
		private void QueryUIStatus()
		{
			this._actRefresh.Enabled = _activeWindow != null;
			this._actClose.Enabled = _activeWindow != null;
			//
			this._actSaveLocal.Enabled = (_activeWindow!=null) ? _activeWindow.Dirty : false;
			this._actSaveRemote.Enabled = (_activeWindow!=null);
		}
		private void OpenHyperlink(string url)
		{
			System.Diagnostics.Process.Start(url);
		}
		private void NewDocument(WindowKind windowKind)
		{
			IChildWindow window = CreateChildWindow(windowKind);
			//
			this._tbSave.Enabled = false;
			window.Filename = string.Empty;	
			window.Open(null);
			window.Show();
		}
		private IChildWindow CreateChildWindow(string path)
		{
			IChildWindow child= null;
			if(System.IO.Path.GetExtension(path) == ".opml")
			{
				child = CreateChildWindow(WindowKind.Opml);
			}
			else if (System.IO.Path.GetExtension(path) == ".xml")
			{
				child = CreateChildWindow(WindowKind.Rss);
			}
			return child;
		}
		private IChildWindow CreateChildWindow(WindowKind windowKind)
		{
			IChildWindow child = null;
			Cursor.Current = Cursors.WaitCursor;
			try
			{
				switch(windowKind)
				{
					case WindowKind.Opml:
						Raccoom.Windows.Forms.FormWindowKindOpml editorOpml = new Raccoom.Windows.Forms.FormWindowKindOpml();
						editorOpml.MdiParent = this;
						editorOpml.WindowState = FormWindowState.Maximized;
						editorOpml.Closing +=new CancelEventHandler(OnChildClosing);
						child = editorOpml;						
						break;
					case WindowKind.Rss:
						FormWindowKindRss editorRss = new FormWindowKindRss();
						editorRss.MdiParent = this;
						editorRss.WindowState = FormWindowState.Maximized;
						editorRss.Closing +=new CancelEventHandler(OnChildClosing);
						child = editorRss;
						break;
				}
			} 
			catch
			{
				throw;
			}
			finally
			{
				Cursor.Current = Cursors.Default;
			}
			return child;
		}
		private void OpenChannelLocal(string filename)
		{
			try
			{
				if(filename==null)
				{
					OpenFileDialog saveFileDialog1 = new OpenFileDialog(); 
					saveFileDialog1.Filter = _fileDialogFilter;					
					saveFileDialog1.RestoreDirectory = true; 					
					if(saveFileDialog1.ShowDialog() != DialogResult.OK) return;
					filename= saveFileDialog1.FileName;
				}
				try
				{					
					OpenDocument(filename);		
					UpdateRecentFileList(filename);
				} 
				catch (System.Exception ex)
				{
					System.Diagnostics.Debug.Write(ex.Message);
				}
			} 
			catch (System.Exception ex)
			{
				MessageBox.Show(ex.Message);
			}			
		}
		private void SaveChannelLocal()
		{
			if(_activeWindow.Filename== string.Empty)
			{
				SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
				saveFileDialog1.Filter = _fileDialogFilter;					
				saveFileDialog1.RestoreDirectory = true;	
				if(_activeWindow.GetType() == typeof(FormWindowKindOpml))
				{
					saveFileDialog1.FilterIndex = 1;
				} 
				else if (_activeWindow.GetType() == typeof(FormWindowKindRss))
				{
					saveFileDialog1.FilterIndex = 2;
				}
				if(saveFileDialog1.ShowDialog() != DialogResult.OK) return;
				_activeWindow.Filename = saveFileDialog1.FileName;
 
			}
			this._activeWindow.Object.Save(_activeWindow.Filename);
			UpdateRecentFileList(_activeWindow.Filename);
			this._activeWindow.Dirty = false;
			
		}
		private void OpenChannelNet()
		{
			try
			{
				FormOpenUrl f = new FormOpenUrl();
				if(f.ShowDialog() != DialogResult.OK) return;
				this.Cursor = Cursors.WaitCursor;
				//
				IChildWindow window = CreateChildWindow(f.WindowKind);
				//
				window.Open(f.Uri);
				window.Filename= string.Empty;
				window.Refresh();
				window.Show();
			} 
			catch (System.Exception ex)
			{
				System.Diagnostics.Debug.Write(ex.Message);
			}
			finally
			{
				this.Cursor= Cursors.Default;
			}
		}
		private void PublishChannel()
		{
			FormPublish f = new FormPublish();
			if(f.ShowDialog() != DialogResult.OK) return;
			try
			{
				_activeWindow.Object.Publish(f.Uri, null, "POST", f.NetworkCredential);				
			} 
			catch (System.Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}
		private void CloseChannel()
		{
			_activeWindow.Close();
			this.Text = this.ProductName;
		}
		private void ShowAboutDialog()
		{
			new Raccoom.Windows.Forms.FormAbout().ShowDialog();
		}
		private void ExchangeSettings(bool store)
		{
			string filename = this.GetType().Name + "_settings.bin";
			System.IO.Stream stream = null;
			System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
			//
			try
			{
				if(store)
				{				
					stream = System.IO.File.Open(filename, System.IO.FileMode.Create);
					_settings.DesktopBounds = this.DesktopBounds;
					binaryFormatter.Serialize(stream, _settings);
				} 
				else
				{
					stream = System.IO.File.Open(filename, System.IO.FileMode.Open);
					_settings = (FormSettings) binaryFormatter.Deserialize(stream);
					this.DesktopBounds = _settings.DesktopBounds;
					this._webProxy = new System.Net.WebProxy(_settings.ProxySettings.Uri);
					this._webProxy.Credentials = _settings.ProxySettings.NetworkCredential;
				}

			}
			catch (System.Exception)
			{
				this._settings = new FormSettings();
			}
			finally
			{
				if(stream!=null) stream.Close();
			}
		}
		private void UpdateRecentFileList(string path)
		{
			if(path!=null)
			{
				if(_settings.RecentFileList.Contains(path))
				{
					_settings.RecentFileList.Remove(path);
				}
				_settings.RecentFileList.Insert(0, path);
			}
			//
			this._mnuFileRecents.MenuItems.Clear();
			//
			int counter = 0;
			foreach(string s in _settings.RecentFileList)
			{
				System.Windows.Forms.MenuItem menuItem = new System.Windows.Forms.MenuItem(counter +" " + s, new EventHandler(OnRecentMenuItemClick));
				_mnuFileRecents.MenuItems.Add(menuItem);
				counter++;
				//
				if(counter==9) break;
			}
		}
		private void _mnuToolsOptions_Click(object sender, System.EventArgs e)
		{
			FormPublish f = new FormPublish();
			f.Text = "Proxy settings";
			f.NetworkCredential = _settings.ProxySettings.NetworkCredential;
			f.Uri = _settings.ProxySettings.Uri;
			if(f.ShowDialog() != DialogResult.OK) return;	
			// value changed, update
			_settings.ProxySettings.NetworkCredential = f.NetworkCredential;
			_settings.ProxySettings.Uri= f.Uri;
			// update proxy
			if(_webProxy==null) _webProxy = new System.Net.WebProxy(_settings.ProxySettings.Uri);
			this._webProxy.Address = _settings.ProxySettings.Uri;
			this._webProxy.Credentials = _settings.ProxySettings.NetworkCredential;
		}
		private void RefreshView()
		{
			this._actRefresh.Enabled =false;
			System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(RefreshViewImp));			
			this._actRefresh.Enabled =true;
		}
		private void RefreshViewImp(object state)
		{	
			Cursor.Current = Cursors.WaitCursor;
			try
			{
				if(_activeWindow!=null && _activeWindow.Object!=null)
				{
					string fileNameXml = System.IO.Path.GetFullPath("rssfeed.xml");
					string fileNameHtml= System.IO.Path.GetFullPath("rssfeed.html");
					// get embedded xslt file
					using(System.IO.Stream styleSheetStream = this.GetType().Assembly.GetManifestResourceStream(_activeWindow.XsltStyleSheet))
					{	
						_activeWindow.Object.Transform(new System.Xml.XmlTextReader(styleSheetStream), fileNameXml, fileNameHtml);
					}
					//						
					NavigateXml(fileNameXml);
					NavigateHtml(fileNameHtml);	
				} 
				else
				{
					NavigateXml("about:blank");
					NavigateHtml("about:blank");
				}
			} 
			finally
			{	
				Cursor.Current = Cursors.Default;
			}
		}
		private void NavigateXml(string url)
		{			
			this._axWebBrowserXml.Navigate(url);			
		}
		private void NavigateHtml(string url)
		{		
			this._axWebBrowserHtml.Navigate(url);			
		}
		#endregion

		#region events
		protected override void OnLoad(EventArgs e)
		{
			base.OnLoad (e);
			this.Text = this.ProductName;
			//
			ExchangeSettings(false);
			//
			UpdateRecentFileList(null);
			//
			foreach(Actions.Action action in this._actionList.Actions)
			{
				action.Execute += new EventHandler(OnActionExecuted);
			}	
			//			
			foreach(string windowKind in  Enum.GetNames(typeof(WindowKind)))
			{
				MenuItem item = new MenuItem(windowKind, new EventHandler(OnNewDocument));				
				this._mnuFileNew.MenuItems.Add(item);
				this._cmNewFile.MenuItems.Add(item.CloneMenu());				
			}
			this._cmNewFile.MenuItems[0].DefaultItem = true;
			this._cmOpenFile.MenuItems.Add(this._mnuFileOpen.CloneMenu());
			this._cmOpenFile.MenuItems.Add(this._mnuFileOpenRemote.CloneMenu());
			//
			this.QueryUIStatus();
		}
		private void OnNewDocument(object sender, EventArgs e)
		{
			this.NewDocument((WindowKind) Enum.Parse(typeof(WindowKind), ((MenuItem)sender).Text,true));
		}
		protected override void OnClosed(EventArgs e)
		{
			ExchangeSettings(true);
			//
			base.OnClosed (e);
		}
		/// <summary>
		///  Toolbar button click handler
		/// </summary>
		private void OnActionExecuted(object sender, EventArgs e)
		{

			if(sender.Equals(_actNew))
			{	
				// just use the first enum element as default
				NewDocument((WindowKind)Enum.GetValues(typeof(WindowKind)).GetValue(0));
			}
			else if(sender.Equals(_actOpenLocal))
			{
				OpenChannelLocal(null);		
			} 
			else if(sender.Equals(_actSaveLocal))
			{
				SaveChannelLocal();
			}
			else if(sender.Equals(_actOpenRemote))
			{
				OpenChannelNet();
			}
			else if(sender.Equals(_actSaveRemote))
			{
				PublishChannel();
			}
			else if(sender.Equals(_actAbout))
			{
				ShowAboutDialog();
			}
			else if(sender.Equals(_actRefresh))
			{
				RefreshView();				
			}
			else if(sender.Equals(_actExit))
			{
				this.Close();
			}
			else if(sender.Equals(_actClose))
			{
				CloseChannel();
			}
			//
			QueryUIStatus();
		}
				
		private void _mnuHelpWebSite_Click(object sender, System.EventArgs e)
		{
			OpenHyperlink("http://raccoom.sytes.net");
		}
		
		private void _actClose_Update(object sender, System.EventArgs e)
		{
			this._activeWindow.Dirty = false;
			this.QueryUIStatus();
		}
		private void OnRecentMenuItemClick(object sender, EventArgs e)
		{
			string path = ((MenuItem)sender).Text;			
			this.OpenDocument(path.Substring(2, path.Length-2));
			//
			QueryUIStatus();
		}
		protected override void OnMdiChildActivate(EventArgs e)
		{
			bool changed = (this._activeWindow != this.ActiveMdiChild);
			if( changed && _activeWindow!=null)
			{
				this._activeWindow.PropertyChanged -=new PropertyChangedEventHandler(OnPropertyChanged);
			}
			base.OnMdiChildActivate (e);			
			this._activeWindow = this.ActiveMdiChild as IChildWindow;
			if(changed && _activeWindow!=null)
			{
				this._activeWindow.PropertyChanged +=new PropertyChangedEventHandler(OnPropertyChanged);
			}
			RefreshView();
			this.QueryUIStatus();
		}
		private void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
		{
			this.QueryUIStatus();
		}
		private void _mnuWindowCascade_Click(object sender, System.EventArgs e)
		{
			this.LayoutMdi(MdiLayout.Cascade);		
		}

		private void _mnuWindowHorzAlign_Click(object sender, System.EventArgs e)
		{
			this.LayoutMdi(MdiLayout.TileHorizontal);
		}

		private void _mnuWindowVertAlign_Click(object sender, System.EventArgs e)
		{
			this.LayoutMdi(MdiLayout.TileVertical);
		}
        private void _axWebBrowserHtml_BeforeNavigate2(object sender, WebBrowserNavigatingEventArgs e)
		{	
			string url = e.Url.ToString();
			if(url=="about:blank") return;
            //if(!System.IO.Path.IsPathRooted(url))
            //{
            //    e.Cancel = true;
            //    this.OpenHyperlink(e.Url.ToString());
            //}
		}
		private void OnChildClosing(object sender, System.ComponentModel.CancelEventArgs e)
		{
			IChildWindow window = (IChildWindow) sender;
			if(!window.Dirty) return;
			//
			switch(MessageBox.Show("Would you like to save your changes?", "Save", MessageBoxButtons.YesNoCancel))
			{
				case DialogResult.Yes:
					this.SaveChannelLocal();
					break;
				case DialogResult.Cancel:
					e.Cancel = true;
					break;
				case DialogResult.No:
					break;
			}
		}
		#endregion

		#region Windows Form Designer generated code
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
						this.components = new System.ComponentModel.Container();
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(MdiParent));
			this._imageList = new System.Windows.Forms.ImageList(this.components);
			this._actionList = new Actions.ActionList(this.components);
			this._actNew = new Actions.Action(this.components);
			this._actOpenLocal = new Actions.Action(this.components);
			this._actOpenRemote = new Actions.Action(this.components);
			this._actSaveLocal = new Actions.Action(this.components);
			this._actSaveRemote = new Actions.Action(this.components);
			this._actExit = new Actions.Action(this.components);
			this._actRefresh = new Actions.Action(this.components);
			this._actAbout = new Actions.Action(this.components);
			this._actClose = new Actions.Action(this.components);
			this._dockingManager = new Raccoom.Windows.Forms.DockingManagerExtender(this.components);
			this.toolBar1 = new System.Windows.Forms.ToolBar();
			this._tbNew = new System.Windows.Forms.ToolBarButton();
			this._cmNewFile = new System.Windows.Forms.ContextMenu();
			this._tbLoad = new System.Windows.Forms.ToolBarButton();
			this._cmOpenFile = new System.Windows.Forms.ContextMenu();
			this._tbSave = new System.Windows.Forms.ToolBarButton();
			this._tbPublish = new System.Windows.Forms.ToolBarButton();
			this._tbSep3 = new System.Windows.Forms.ToolBarButton();
			this._tbRefresh = new System.Windows.Forms.ToolBarButton();
			this._tbSep4 = new System.Windows.Forms.ToolBarButton();
			this._tbAbout = new System.Windows.Forms.ToolBarButton();
            this._axWebBrowserHtml = new WebBrowser();
			this._panelHtmlPreview = new System.Windows.Forms.Panel();
			this._panelXmlPreview = new System.Windows.Forms.Panel();
            this._axWebBrowserXml = new WebBrowser();
			this._mnuFileNew = new System.Windows.Forms.MenuItem();
			this._mnuFileOpen = new System.Windows.Forms.MenuItem();
			this._mnuFileSave = new System.Windows.Forms.MenuItem();
			this._mnuFilePublish = new System.Windows.Forms.MenuItem();
			this.menuItem11 = new System.Windows.Forms.MenuItem();
			this._mnuFileOpenRemote = new System.Windows.Forms.MenuItem();
			this._mnuFileClose = new System.Windows.Forms.MenuItem();
			this._mnuHelpAbout = new System.Windows.Forms.MenuItem();
			this._mnuViewRefresh = new System.Windows.Forms.MenuItem();
			this.toolBar1 = new System.Windows.Forms.ToolBar();
			this._tbSep3 = new System.Windows.Forms.ToolBarButton();
			this._tbSep4 = new System.Windows.Forms.ToolBarButton();
			this._mainMenu = new System.Windows.Forms.MainMenu();
			this._mnuFile = new System.Windows.Forms.MenuItem();
			this.menuItem5 = new System.Windows.Forms.MenuItem();
			this.menuItem8 = new System.Windows.Forms.MenuItem();
			this.menuItem3 = new System.Windows.Forms.MenuItem();
			this._mnuFileRecents = new System.Windows.Forms.MenuItem();
			this._mnuFileExit = new System.Windows.Forms.MenuItem();
			this._mnuView = new System.Windows.Forms.MenuItem();
			this.menuItem1 = new System.Windows.Forms.MenuItem();
			this.menuItem4 = new System.Windows.Forms.MenuItem();
			this._mnuWindowCascade = new System.Windows.Forms.MenuItem();
			this._mnuWindowHorzAlign = new System.Windows.Forms.MenuItem();
			this._mnuWindowVertAlign = new System.Windows.Forms.MenuItem();
			this._mnuHelp = new System.Windows.Forms.MenuItem();
			this._mnuHelpWebSite = new System.Windows.Forms.MenuItem();
			this.menuItem2 = new System.Windows.Forms.MenuItem();
			this._panelHtmlPreview.SuspendLayout();
			this._panelXmlPreview.SuspendLayout();
			this.SuspendLayout();
			// 
			// _imageList
			// 
			this._imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
			this._imageList.ImageSize = new System.Drawing.Size(16, 16);
			this._imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("_imageList.ImageStream")));
			this._imageList.TransparentColor = System.Drawing.Color.Transparent;
			// 
			// _actionList
			// 
			this._actionList.Actions.AddRange(new Actions.Action[] {
																	   this._actNew,
																	   this._actOpenLocal,
																	   this._actOpenRemote,
																	   this._actSaveLocal,
																	   this._actSaveRemote,
																	   this._actExit,
																	   this._actRefresh,
																	   this._actAbout,
																	   this._actClose});
			this._actionList.Count = 9;
			this._actionList.ImageList = this._imageList;
			this._actionList.ShowTextOnToolBar = false;
			this._actionList.Tag = null;
			// 
			// _actNew
			// 
			this._actNew.Checked = false;
			this._actNew.Enabled = true;
			this._actNew.Hint = "New file";
			this._actNew.ImageIndex = 0;
			this._actNew.Shortcut = System.Windows.Forms.Shortcut.None;
			this._actNew.Tag = null;
			this._actNew.Text = "New";
			this._actNew.Visible = true;
			// 
			// _actOpenLocal
			// 
			this._actOpenLocal.Checked = false;
			this._actOpenLocal.Enabled = true;
			this._actOpenLocal.Hint = "Open file from local storage";
			this._actOpenLocal.ImageIndex = 2;
			this._actOpenLocal.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
			this._actOpenLocal.Tag = null;
			this._actOpenLocal.Text = "File...";
			this._actOpenLocal.Visible = true;
			// 
			// _actOpenRemote
			// 
			this._actOpenRemote.Checked = false;
			this._actOpenRemote.Enabled = true;
			this._actOpenRemote.Hint = "Import file from web";
			this._actOpenRemote.ImageIndex = 1;
			this._actOpenRemote.Shortcut = System.Windows.Forms.Shortcut.None;
			this._actOpenRemote.Tag = null;
			this._actOpenRemote.Text = "File from web...";
			this._actOpenRemote.Visible = true;
			// 
			// _actSaveLocal
			// 
			this._actSaveLocal.Checked = false;
			this._actSaveLocal.Enabled = true;
			this._actSaveLocal.Hint = "Save file to local storage";
			this._actSaveLocal.ImageIndex = 3;
			this._actSaveLocal.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
			this._actSaveLocal.Tag = null;
			this._actSaveLocal.Text = "Save";
			this._actSaveLocal.Visible = true;
			// 
			// _actSaveRemote
			// 
			this._actSaveRemote.Checked = false;
			this._actSaveRemote.Enabled = true;
			this._actSaveRemote.Hint = "Publish file";
			this._actSaveRemote.ImageIndex = 1;
			this._actSaveRemote.Shortcut = System.Windows.Forms.Shortcut.None;
			this._actSaveRemote.Tag = null;
			this._actSaveRemote.Text = "Publish...";
			this._actSaveRemote.Visible = true;
			// 
			// _actExit
			// 
			this._actExit.Checked = false;
			this._actExit.Enabled = true;
			this._actExit.Hint = "Exit the application";
			this._actExit.ImageIndex = 9;
			this._actExit.Shortcut = System.Windows.Forms.Shortcut.None;
			this._actExit.Tag = null;
			this._actExit.Text = "Exit";
			this._actExit.Visible = true;
			// 
			// _actRefresh
			// 
			this._actRefresh.Checked = false;
			this._actRefresh.Enabled = true;
			this._actRefresh.Hint = "Refreshes the display";
			this._actRefresh.ImageIndex = 5;
			this._actRefresh.Shortcut = System.Windows.Forms.Shortcut.F5;
			this._actRefresh.Tag = null;
			this._actRefresh.Text = "Refresh";
			this._actRefresh.Visible = true;
			// 
			// _actAbout
			// 
			this._actAbout.Checked = false;
			this._actAbout.Enabled = true;
			this._actAbout.Hint = "About";
			this._actAbout.ImageIndex = 4;
			this._actAbout.Shortcut = System.Windows.Forms.Shortcut.F1;
			this._actAbout.Tag = null;
			this._actAbout.Text = "About";
			this._actAbout.Visible = true;
			// 
			// _actClose
			// 
			this._actClose.Checked = false;
			this._actClose.Enabled = true;
			this._actClose.Hint = null;
			this._actClose.Shortcut = System.Windows.Forms.Shortcut.None;
			this._actClose.Tag = null;
			this._actClose.Text = "Close";
			this._actClose.Visible = true;
			// _dockingManager
			// 
			this._dockingManager.AutomaticStatePersistence = false;
			this._dockingManager.ContainerControl = this;
			this._dockingManager.InnerControl = null;
			this._dockingManager.OuterControl = this.toolBar1;
			this._dockingManager.PlainTabBorder = false;
			this._dockingManager.VisualStyle = Crownwood.Magic.Common.VisualStyle.IDE;
			// 
			// toolBar1
			// 
			this.toolBar1.Appearance = System.Windows.Forms.ToolBarAppearance.Flat;
			this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] {
																						this._tbNew,
																						this._tbLoad,
																						this._tbSave,
																						this._tbPublish,
																						this._tbSep3,
																						this._tbRefresh,
																						this._tbSep4,
																						this._tbAbout});
			this.toolBar1.DropDownArrows = true;
			this.toolBar1.ImageList = this._imageList;
			this.toolBar1.Location = new System.Drawing.Point(0, 0);
			this.toolBar1.Name = "toolBar1";
			this.toolBar1.ShowToolTips = true;
			this.toolBar1.Size = new System.Drawing.Size(408, 28);
			this.toolBar1.TabIndex = 1;
			// 
			// _tbNew
			// 
			this._actionList.SetAction(this._tbNew, this._actNew);
			this._tbNew.DropDownMenu = this._cmNewFile;
			this._tbNew.ImageIndex = 0;
			this._tbNew.Style = System.Windows.Forms.ToolBarButtonStyle.DropDownButton;
			this._tbNew.ToolTipText = "New file";
			this._tbNew.ToolTipText = "New";
			// 
			// _tbLoad
			// 
			this._actionList.SetAction(this._tbLoad, this._actOpenLocal);
			this._tbLoad.DropDownMenu = this._cmOpenFile;
			this._tbLoad.ImageIndex = 2;
			this._tbLoad.Style = System.Windows.Forms.ToolBarButtonStyle.DropDownButton;
			this._tbLoad.ToolTipText = "Open file from local storage (CtrlO)";
			this._tbLoad.ToolTipText = "File... (CtrlO)";
			// 
			// _tbSave
			// 
			this._actionList.SetAction(this._tbSave, this._actSaveLocal);
			this._tbSave.ImageIndex = 3;
			this._tbSave.ToolTipText = "Save file to local storage (CtrlS)";
			this._tbSave.ToolTipText = "Save (CtrlS)";
			// 
			// _tbPublish
			// 
			this._actionList.SetAction(this._tbPublish, this._actSaveRemote);
			this._tbPublish.ImageIndex = 1;
			this._tbPublish.ToolTipText = "Publish file";
			this._tbPublish.ToolTipText = "Publish...";
			// 
			// _tbSep3
			// 
			this._tbSep3.Style = System.Windows.Forms.ToolBarButtonStyle.Separator;
			// 
			// _tbRefresh
			// 
			this._actionList.SetAction(this._tbRefresh, this._actRefresh);
			this._tbRefresh.ImageIndex = 5;
			this._tbRefresh.ToolTipText = "Refreshes the display (F5)";
			this._tbRefresh.ToolTipText = "Refresh (F5)";
			// 
			// _tbSep4
			// 
			this._tbSep4.Style = System.Windows.Forms.ToolBarButtonStyle.Separator;
			// 
			// _tbAbout
			// 
			this._actionList.SetAction(this._tbAbout, this._actAbout);
			this._tbAbout.ImageIndex = 4;
			this._tbAbout.ToolTipText = "About";
			// 
			// _axWebBrowserHtml
			// 
			this._dockingManager.SetADockingEnable(this._axWebBrowserHtml, false);
			this._dockingManager.SetCloseButton(this._axWebBrowserHtml, false);
			this._dockingManager.SetCloseOnHide(this._axWebBrowserHtml, false);
			
            this._axWebBrowserHtml.Navigating += new WebBrowserNavigatingEventHandler(_axWebBrowserHtml_BeforeNavigate2);
			this._axWebBrowserHtml.Dock = System.Windows.Forms.DockStyle.Fill;
			this._dockingManager.SetDockingStyle(this._axWebBrowserHtml, System.Windows.Forms.DockStyle.Left);
			this._dockingManager.SetFullTitle(this._axWebBrowserHtml, "_axWebBrowserHtml");
			this._dockingManager.SetIcon(this._axWebBrowserHtml, null);
			this._axWebBrowserHtml.Location = new System.Drawing.Point(0, 0);
			this._axWebBrowserHtml.Size = new System.Drawing.Size(112, 56);
			this._dockingManager.SetTabbedMode(this._axWebBrowserHtml, true);
			this._axWebBrowserHtml.TabIndex = 9;
			this._dockingManager.SetTitle(this._axWebBrowserHtml, "_axWebBrowserHtml");
			// 
			// _panelHtmlPreview
			// 
			this._dockingManager.SetADockingEnable(this._panelHtmlPreview, true);
			this._dockingManager.SetCloseButton(this._panelHtmlPreview, false);
			this._dockingManager.SetCloseOnHide(this._panelHtmlPreview, false);
			this._panelHtmlPreview.Controls.Add(this._axWebBrowserHtml);
			this._dockingManager.SetDockingStyle(this._panelHtmlPreview, System.Windows.Forms.DockStyle.Right);
			this._dockingManager.SetFullTitle(this._panelHtmlPreview, "HTML Preview");
			this._dockingManager.SetIcon(this._panelHtmlPreview, ((System.Drawing.Icon)(resources.GetObject("_panelHtmlPreview.Icon"))));
			this._panelHtmlPreview.Location = new System.Drawing.Point(208, 64);
			this._panelHtmlPreview.Name = "_panelHtmlPreview";
			this._panelHtmlPreview.Size = new System.Drawing.Size(112, 56);
			this._dockingManager.SetTabbedMode(this._panelHtmlPreview, true);
			this._panelHtmlPreview.TabIndex = 11;
			this._dockingManager.SetTitle(this._panelHtmlPreview, "HTML Preview");
			// 
			// _panelXmlPreview
			// 
			this._dockingManager.SetADockingEnable(this._panelXmlPreview, true);
			this._dockingManager.SetCloseButton(this._panelXmlPreview, false);
			this._dockingManager.SetCloseOnHide(this._panelXmlPreview, false);
			this._panelXmlPreview.Controls.Add(this._axWebBrowserXml);
			this._dockingManager.SetDockingStyle(this._panelXmlPreview, System.Windows.Forms.DockStyle.Bottom);
			this._dockingManager.SetFullTitle(this._panelXmlPreview, "XML Preview");
			this._dockingManager.SetIcon(this._panelXmlPreview, ((System.Drawing.Icon)(resources.GetObject("_panelXmlPreview.Icon"))));
			this._panelXmlPreview.Location = new System.Drawing.Point(148, 108);
			this._panelXmlPreview.Name = "_panelXmlPreview";
			this._panelXmlPreview.Size = new System.Drawing.Size(112, 56);
			this._dockingManager.SetTabbedMode(this._panelXmlPreview, true);
			this._panelXmlPreview.TabIndex = 13;
			this._dockingManager.SetTitle(this._panelXmlPreview, "XML Preview");
			// 
			// _axWebBrowserXml
			// 
			this._dockingManager.SetADockingEnable(this._axWebBrowserXml, false);
			this._dockingManager.SetCloseButton(this._axWebBrowserXml, false);
			this._dockingManager.SetCloseOnHide(this._axWebBrowserXml, false);
			this._axWebBrowserXml.Dock = System.Windows.Forms.DockStyle.Fill;
			this._dockingManager.SetDockingStyle(this._axWebBrowserXml, System.Windows.Forms.DockStyle.Left);
			this._dockingManager.SetFullTitle(this._axWebBrowserXml, "_axWebBrowserXml");
			this._dockingManager.SetIcon(this._axWebBrowserXml, null);
			this._axWebBrowserXml.Location = new System.Drawing.Point(0, 0);
			this._axWebBrowserXml.Size = new System.Drawing.Size(112, 56);
			this._dockingManager.SetTabbedMode(this._axWebBrowserXml, true);
			this._axWebBrowserXml.TabIndex = 9;
			this._dockingManager.SetTitle(this._axWebBrowserXml, "_axWebBrowserXml");
			// 
			// _mnuFileNew
			// 
			this._actionList.SetAction(this._mnuFileNew, this._actNew);
			this._mnuFileNew.Index = 0;
			this._mnuFileNew.Text = "New";
			// 
			// _mnuFileOpen
			// 
			this._actionList.SetAction(this._mnuFileOpen, this._actOpenLocal);
			this._mnuFileOpen.Index = 0;
			this._mnuFileOpen.Shortcut = System.Windows.Forms.Shortcut.CtrlO;
			this._mnuFileOpen.Text = "File...";
			// 
			// _mnuFileSave
			// 
			this._actionList.SetAction(this._mnuFileSave, this._actSaveLocal);
			this._mnuFileSave.Index = 4;
			this._mnuFileSave.Shortcut = System.Windows.Forms.Shortcut.CtrlS;
			this._mnuFileSave.Text = "Save";
			// 
			// _mnuFilePublish
			// 
			this._actionList.SetAction(this._mnuFilePublish, this._actSaveRemote);
			this._mnuFilePublish.Index = 5;
			this._mnuFilePublish.Text = "Publish...";
			// 
			// menuItem11
			// 
			this._actionList.SetAction(this.menuItem11, this._actExit);
			this.menuItem11.Index = 9;
			this.menuItem11.Text = "Exit";
			// 
			// _mnuFileOpenRemote
			// 
			this._actionList.SetAction(this._mnuFileOpenRemote, this._actOpenRemote);
			this._mnuFileOpenRemote.Index = 1;
			this._mnuFileOpenRemote.Text = "File from web...";
			// 
			// _mnuFileClose
			// 
			this._actionList.SetAction(this._mnuFileClose, this._actClose);
			this._mnuFileClose.Index = 2;
			this._mnuFileClose.Text = "Close";
			// 
			// _mnuHelpAbout
			// 
			this._actionList.SetAction(this._mnuHelpAbout, this._actAbout);
			this._mnuHelpAbout.Index = 2;
			this._mnuHelpAbout.Shortcut = System.Windows.Forms.Shortcut.F1;
			this._mnuHelpAbout.Text = "About";
			// 
			// _mnuViewRefresh
			// 
			this._actionList.SetAction(this._mnuViewRefresh, this._actRefresh);
			this._mnuViewRefresh.Index = 1;
			this._mnuViewRefresh.MergeOrder = 10;
			this._mnuViewRefresh.Shortcut = System.Windows.Forms.Shortcut.F5;
			this._mnuViewRefresh.Text = "Refresh";
			
			// 
			// _tbSep3
			// 
			this._tbSep3.Style = System.Windows.Forms.ToolBarButtonStyle.Separator;
			// 
			// _tbSep4
			// 
			this._tbSep4.Style = System.Windows.Forms.ToolBarButtonStyle.Separator;
			// 
			// _mainMenu
			// 
			this._mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this._mnuFile,
																					  this._mnuView,
																					  this.menuItem4,
																					  this._mnuHelp});
			// 
			// _mnuFile
			// 
			this._mnuFile.Index = 0;
			this._mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					 this._mnuFileNew,
																					 this.menuItem5,
																					 this._mnuFileClose,
																					 this.menuItem8,
																					 this._mnuFileSave,
																					 this._mnuFilePublish,
																					 this.menuItem3,
																					 this._mnuFileRecents,
																					 this._mnuFileExit,
																					 this.menuItem11});
			this._mnuFile.Text = "&File";
			// 
			// menuItem5
			// 
			this.menuItem5.Index = 1;
			this.menuItem5.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this._mnuFileOpen,
																					  this._mnuFileOpenRemote});
			this.menuItem5.Text = "Open";
			// 
			// menuItem8
			// 
			this.menuItem8.Index = 3;
			this.menuItem8.Text = "-";
			// 
			// menuItem3
			// 
			this.menuItem3.Index = 6;
			this.menuItem3.Text = "-";
			// 
			// _mnuFileRecents
			// 
			this._mnuFileRecents.Index = 7;
			this._mnuFileRecents.Text = "&Recent Files";
			// 
			// _mnuFileExit
			// 
			this._mnuFileExit.Index = 8;
			this._mnuFileExit.Text = "-";
			// 
			// _mnuView
			// 
			this._mnuView.Index = 1;
			this._mnuView.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					 this.menuItem1,
																					 this._mnuViewRefresh});
			this._mnuView.MergeType = System.Windows.Forms.MenuMerge.MergeItems;
			this._mnuView.Text = "&View";
			// 
			// menuItem1
			// 
			this.menuItem1.Index = 0;
			this.menuItem1.MergeOrder = 9;
			this.menuItem1.Text = "-";
			// 
			// menuItem4
			// 
			this.menuItem4.Index = 2;
			this.menuItem4.MdiList = true;
			this.menuItem4.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this._mnuWindowCascade,
																					  this._mnuWindowHorzAlign,
																					  this._mnuWindowVertAlign});
			this.menuItem4.Text = "&Window";
			// 
			// _mnuWindowCascade
			// 
			this._mnuWindowCascade.Index = 0;
			this._mnuWindowCascade.Text = "&Cascade";
			this._mnuWindowCascade.Click += new System.EventHandler(this._mnuWindowCascade_Click);
			// 
			// _mnuWindowHorzAlign
			// 
			this._mnuWindowHorzAlign.Index = 1;
			this._mnuWindowHorzAlign.Text = "&Tile Horizontal";
			this._mnuWindowHorzAlign.Click += new System.EventHandler(this._mnuWindowHorzAlign_Click);
			// 
			// _mnuWindowVertAlign
			// 
			this._mnuWindowVertAlign.Index = 2;
			this._mnuWindowVertAlign.Text = "&Tile Vertical";
			this._mnuWindowVertAlign.Click += new System.EventHandler(this._mnuWindowVertAlign_Click);
			// 
			// _mnuHelp
			// 
			this._mnuHelp.Index = 3;
			this._mnuHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					 this._mnuHelpWebSite,
																					 this.menuItem2,
																					 this._mnuHelpAbout});
			this._mnuHelp.Text = "&Help";
			// 
			// _mnuHelpWebSite
			// 
			this._mnuHelpWebSite.Index = 0;
			this._mnuHelpWebSite.Text = "raccoom.net web site";
			this._mnuHelpWebSite.Click += new System.EventHandler(this._mnuHelpWebSite_Click);
			// 
			// menuItem2
			// 
			this.menuItem2.Index = 1;
			this.menuItem2.Text = "-";
			// 
			// MdiParent
			// 
			this.AllowDrop = true;
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(800, 640);
			this.Controls.Add(this._panelXmlPreview);
			this.Controls.Add(this._panelHtmlPreview);
			this.Controls.Add(this.toolBar1);
			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
			this.IsMdiContainer = true;
			this.Menu = this._mainMenu;
			this.Name = "MdiParent";
			this.Text = "raccoom.xml.editors";
			this._panelHtmlPreview.ResumeLayout(false);
			this._panelXmlPreview.ResumeLayout(false);
			this.ResumeLayout(false);


		}
		#endregion							
		
		#region nested class
		public class TreeNodeOpml : System.Windows.Forms.TreeNode
		{
			#region fields
			private OpmlOutline _outline;
			#endregion fiels

			#region constructor
			public TreeNodeOpml()
			{
			}
			public TreeNodeOpml(string text) : base(text)
			{
			}			
			public TreeNodeOpml(string text,int imageIndex,	int selectedImageIndex) : base(text, imageIndex, selectedImageIndex)
			{
			}
			#endregion

			#region public interface
			/// <summary>
			/// Adds a dummy node to the parent node
			/// </summary>		
			public virtual void AddDummyNode()
			{
				Nodes.Add(new TreeNodeOpml("@@Dummy@@"));
			}
			/// <summary>
			/// Removes the dummy node from the parent node.
			/// </summary>		
			public virtual void RemoveDummyNode()
			{
				if ((Nodes.Count == 1 ) & (Nodes[0].Text == "@@Dummy@@"))
				{
					Nodes[0].Remove();
				}
			}			
			public virtual OpmlOutline Outline
			{
				get
				{
					return _outline;
				}
				set
				{
					_outline = value;
				}
			}
			#endregion
		}	
		[Serializable]
			public class FormSettings
		{
			#region fields
			private Rectangle _desktopBounds;
			private System.Collections.Specialized.StringCollection _recentFileList;	
			private NetworkCredentialInfo _proxySettings;
			#endregion

			public FormSettings()
			{
				this._recentFileList = new System.Collections.Specialized.StringCollection();
				this.ProxySettings = new NetworkCredentialInfo();				
			}
			public NetworkCredentialInfo ProxySettings
			{
				get
				{
					return _proxySettings;
				}
				set
				{
					_proxySettings = value;
				}
			}
			public Rectangle DesktopBounds
			{
				get
				{
					return _desktopBounds;
				}
				set
				{
					_desktopBounds = value;
				}
			}
			public System.Collections.Specialized.StringCollection RecentFileList
			{
				get
				{
					return _recentFileList;
				}
				set
				{
					_recentFileList = value;
				}
			}
			
			[Serializable]
				public class NetworkCredentialInfo
			{
				private string _user;
				private string _password;
				private string _domain;
				private Uri _uri;

				public System.Net.NetworkCredential NetworkCredential
				{
					get
					{
						return new System.Net.NetworkCredential(_user, _password, _domain);
					}
					set
					{
						if(value == null)
						{
						} 
						else
						{
							this._user = value.UserName;
							this._password = value.Password;
							this._domain = value.Domain;
						}
					}
				}
				public string Username
				{
					get
					{
						return _user;
					}
					set
					{
						_user = value;
					}
				}
				public string Password
				{
					get
					{
						return _password;
					}
					set
					{
						_password = value;
					}
				}
				public string Domain
				{
					get
					{
						return _domain;
					}
					set
					{
						_domain = value;
					}
				}
				public Uri Uri
				{
					get
					{
						return _uri;
					}
					set
					{
						_uri = value;
					}
				}
			}
		}
		#endregion
	}
	public interface IChildWindow
	{
		event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
		//string Text{get;set;}
		string Filename{get;set;}
		Raccoom.Xml.IPersistentManager Object{get;}
		void Open(Uri uri);
		bool Dirty{get;set;}
		void Refresh();
		void Show();
		void Close();
		string XsltStyleSheet{get;}
	}
	public enum WindowKind
	{
		Rss, Opml
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)

Share

About the Author

Chris Richner
Software Developer (Senior) Zeit AG
Switzerland Switzerland
Biography
  • 1996 - 1998 PC Board PPL, HTML, DHTML, Javascript and ASP
  • 1999 - 2001 coding Centura against Sql Database (SqlBase,MSSQL,Oracle)
  • 2002 - 2004 C# Windows Forms
  • 2005 - 2006 C# ASP.NET, Windows Forms
  • 2006 - 2009 C#, WCF, WF, WPF
  • 2010 - 2012 C#, Dynamics CRM, Sharepoint, Silverlight
  • 2013 - 2013 C#, WCF DS (OData), WF, WPF
  • 2014 - now C#, Azure PaaS, Identity, OWIN, OData, Web Api
Interests
  • family & friends
  • chilaxing ,)
  • coding
Follow on   Twitter   Google+   LinkedIn

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.141223.1 | Last Updated 20 Jan 2013
Article Copyright 2003 by Chris Richner
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid