www.pudn.com > lphant-v1.00-src.zip > fileNamesListView.cs


#region Copyright (c)2003 Juanjo < http://lphant.sourceforge.net > 
/* 
* This file is part of eLePhant 
* Copyright (C)2003 Juanjo < j_u_a_n_j_o@users.sourceforge.net / http://lphant.sourceforge.net > 
*  
* 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., 675 Mass Ave, Cambridge, MA 02139, USA. 
*/ 
#endregion 
 
using System; 
using System.ComponentModel; 
using System.Collections; 
using System.Diagnostics; 
using System.Windows.Forms; 
using System.Threading; 
using System.Drawing; 
using eLePhant.eDonkey; 
 
namespace eLePhant.Client 
{ 
	///  
	/// Summary description for fileNamesListView. 
	///  
	///  
	 
	public class fileNamesListView : eLePhantListView 
	{ 
		///  
		/// Required designer variable. 
		///  
		///  
		private CkernelGateway krnGateway; 
		private System.ComponentModel.Container components = null; 
		private ColumnSorter TheColumnSorter; 
		private string m_strFileHash; 
		 
		public void Initialize(CkernelGateway in_krnGateway) 
		{ 
			Name = "listViewNames"; 
			krnGateway=in_krnGateway; 
			Columns.Add("File Name",190,false); 
			Columns.Add("Sources",60,false); 
			krnGateway.OnRefreshFileNames+=new RefreshEvent(m_InvokeRefreshList); 
			TheColumnSorter=new ColumnSorter(); 
			TheColumnSorter.CurrentColumn=1; 
			TheColumnSorter.sortOrder=-1; 
			sortColumn=1; 
			sortOrder=-1; 
			this.ClickHeader+=new HeaderEventHandler(myColumnClick); 
			 
			m_DefaultWidths=new int[] {190,60}; 
			m_Globalize(); 
			m_LoadWidths(); 
		} 
 
		private void m_Globalize() 
		{ 
			Columns[0].Text=eLePhantForm.Globalization["LBL_FILENAME"]; 
			Columns[1].Text=eLePhantForm.Globalization["LBL_SOURCES"]; 
		} 
 
		public void Globalize() 
		{ 
			m_Globalize(); 
			this.Refresh(); 
		} 
 
		private void myColumnClick(object sender, HeaderEventArgs e) 
		{ 
			TheColumnSorter.CurrentColumn = e.ColumnIndex; 
			TheColumnSorter.sortOrder=this.sortOrder; 
			this.ListViewItemSorter = TheColumnSorter;	 
			this.Sort(); 
			this.ListViewItemSorter = null;			 
		} 
 
		private void FileNameToItem(InterfaceFileNames fileName,ListViewItem itemFileName) 
		{ 
			/*if (fileName==null) return; 
			if (itemFileName.SubItems[0].Text!=fileName.FileName) itemFileName.SubItems[0].Text=fileName.FileName; 
			if (itemFileName.SubItems[1].Text!=fileName.nClients.ToString()) itemFileName.SubItems[1].Text=fileName.nClients.ToString(); 
			*/ 
			itemFileName.Tag=fileName; 
			if (itemFileName.SubItems[0].Text!=fileName.FileName) itemFileName.SubItems[0].Text=fileName.FileName; 
			if (itemFileName.SubItems[1].Text!=fileName.nClients.ToString()) itemFileName.SubItems[1].Text=fileName.nClients.ToString(); 
 
		} 
 
		private void OnNewFileName(InterfaceFileNames fileName) 
		{ 
			ListViewItem itemFileName=new ListViewItem(new string[]{"",""}); 
			 
			FileNameToItem(fileName,itemFileName); 
			Items.Add(itemFileName); 
		} 
		private void m_UpdateOrAddFilename(InterfaceFileNames fileName) 
		{ 
			bool updated=false; 
			foreach (ListViewItem itemFileName in this.Items) 
			{ 
				if (itemFileName.Text==fileName.FileName) 
				{ 
					if (itemFileName.SubItems[1].Text!=fileName.nClients.ToString()) itemFileName.SubItems[1].Text=fileName.nClients.ToString(); 
					itemFileName.Tag=fileName; 
					updated=true; 
					break; 
				} 
			} 
			if (!updated) OnNewFileName(fileName); 
		} 
		private void m_InvokeRefreshList(CkernelGateway in_krnGateway) 
		{ 
			this.BeginInvoke(new RefreshEvent(m_RefreshList),new object[] {in_krnGateway}); 
		} 
//		private void m_RefreshList(CkernelGateway in_krnGateway) 
//		{ 
//			if (m_strFileHash==null) return; 
//			ReloadList(m_strFileHash); 
//		} 
		private void m_RefreshList(CkernelGateway in_krnGateway) 
		{ 
			if (m_strFileHash==null)  
			{	 
				Items.Clear();	 
				return; 
			 } 
			InterfaceFileNames[] files=krnGateway.GetFileNamesList(m_strFileHash); 
			if (files==null) 
			{ 
				Items.Clear();	 
				return; 
			} 
			foreach (InterfaceFileNames fileName in files) 
			{ 
				m_UpdateOrAddFilename(fileName); 
			} 
			this.ListViewItemSorter = TheColumnSorter;	 
			this.Sort(); 
			this.ListViewItemSorter = null; 
			//clear from list old names 
			/*ArrayList toDelete=new ArrayList(); 
			foreach (ListViewItem itemFileName in this.Items) 
			{ 
				if ((uint)itemFileName.Tag!=refreshID) 
					toDelete.Add(itemFileName); 
			} 
			foreach (ListViewItem itemFileName in toDelete) 
			{ 
				this.Items.Remove(itemFileName); 
			} 
			toDelete.Clear();*/ 
		} 
		public void ReloadList(string in_strFileHash) 
		{ 
			m_strFileHash=in_strFileHash; 
			InterfaceFileNames[] files=krnGateway.GetFileNamesList(m_strFileHash);				 
			Items.Clear(); 
			if (files==null) return; 
			foreach (InterfaceFileNames fileName in files) 
			{ 
				if (fileName!=null) OnNewFileName(fileName); 
			} 
			this.ListViewItemSorter = TheColumnSorter;	 
			this.Sort(); 
			this.ListViewItemSorter = null; 
		} 
		public fileNamesListView(System.ComponentModel.IContainer container) 
		{ 
			///  
			/// Required for Windows.Forms Class Composition Designer support 
			///  
			container.Add(this); 
			InitializeComponent(); 
 
			// 
			// TODO: Add any constructor code after InitializeComponent call 
			// 
		} 
 
		public fileNamesListView() 
		{ 
			///  
			/// Required for Windows.Forms Class Composition Designer support 
			///  
			InitializeComponent(); 
 
			// 
			// TODO: Add any constructor code after InitializeComponent call 
			// 
		} 
 
		public class ColumnSorter : IComparer 
		{ 
			public int CurrentColumn = -1; 
			public int sortOrder; 
			public int Compare(object x, object y) 
			{ 
				if ((x==null)||(y==null)) return 0; 
				ListViewItem rowA = (ListViewItem)x; 
				ListViewItem rowB = (ListViewItem)y; 
					 
				switch(CurrentColumn) 
				{ 
					case 1: 
						if ((((InterfaceFileNames)rowA.Tag).nClients)>(((InterfaceFileNames)rowB.Tag).nClients)) 
							return sortOrder; 
						else 
							return -sortOrder; 
														 
					default: 
						return sortOrder*String.Compare(rowA.SubItems[CurrentColumn].Text, 
							rowB.SubItems[CurrentColumn].Text); 
				} 
			} 
		} 
 
		#region Component Designer generated code 
		///  
		/// Required method for Designer support - do not modify 
		/// the contents of this method with the code editor. 
		///  
		private void InitializeComponent() 
		{ 
			components = new System.ComponentModel.Container(); 
		} 
		#endregion 
	} 
}