www.pudn.com > lphant-v1.00-src.zip > downloadsListView.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.Drawing;
using System.IO;
using Microsoft.Win32;
using eLePhant.eDonkey;
using eLePhant.Interface;
using eLePhant.Types;
namespace eLePhant.Client
{
///
/// Summary description for downloadsListView.
///
public class downloadsListView : eLePhantListView
{
///
/// Required designer variable.
///
private CkernelGateway krnGateway;
private System.ComponentModel.Container components = null;
public ContextMenu ContextMenuDownloads;
private ColumnSorter TheColumnSorter;
private byte m_filter;
private uint m_CategoryFilter;
private bool m_ClearingCompleted;
private string[] m_States;
private string[] m_Priorities;
private MenuItem PriorityMenu;
private MenuItem MenuItemInfo;
public CMenuInfo MenuInfo;
private MenuItem CategoryMenu;
public downloadsListView(System.ComponentModel.IContainer container,CInterfaceGateway in_krnGateway)
{
///
/// Required for Windows.Forms Class Composition Designer support
///
if (container!=null) container.Add(this);
InitializeComponent();
//m_InitControls();
}
public downloadsListView()
{
///
/// Required for Windows.Forms Class Composition Designer support
///
InitializeComponent();
m_InitControls();
}
private void m_InitControls()
{
Name = "downloadList";
Columns.Add("File Name",190,false);
Columns.Add("Size",60,false);
Columns.Add("Speed",60,false);
Columns.Add("Completed",60,false);
Columns.Add("Remaining",60,false);
Columns.Add("Sources",60,false);
Columns.Add("Usefull sources",60,false);
Columns.Add("Transfers",60,false);
Columns.Add("Status",60,false);
Columns.Add("Progress",190,true);
Columns.Add("Priority",60,false);
Columns.Add("Estimated",70,false);
Columns.Add("Category",70,false);
ContextMenuDownloads = new ContextMenu();
ContextMenuDownloads.MenuItems.Add("Start",new EventHandler(OnStartFile));
ContextMenuDownloads.MenuItems.Add("Stop",new EventHandler(OnStopFile));
ContextMenuDownloads.MenuItems.Add("Cancel",new EventHandler(OnCancelFile));
ContextMenuDownloads.MenuItems.Add("-");
ContextMenuDownloads.MenuItems.Add("Preview",new EventHandler(OnPreviewFile));
ContextMenuDownloads.MenuItems.Add("Open File",new EventHandler(OnOpenFile));
ContextMenuDownloads.MenuItems.Add("-");
ContextMenuDownloads.MenuItems.Add("Copy eLink to clipboard", new EventHandler(OnCopyLink));
ContextMenuDownloads.MenuItems.Add("Copy eLink to clipboard (HTML)", new EventHandler(OnCopyLinkHTML));
ContextMenuDownloads.MenuItems.Add("-");
PriorityMenu = new MenuItem( "&Priority");
ContextMenuDownloads.MenuItems.Add(PriorityMenu);
PriorityMenu.MenuItems.Add("High",new EventHandler(OnHighPriority));
PriorityMenu.MenuItems.Add("Normal",new EventHandler(OnNormalPriority));
PriorityMenu.MenuItems.Add("Low",new EventHandler(OnLowPriority));
CategoryMenu=new MenuItem("Category");
ContextMenuDownloads.MenuItems.Add(CategoryMenu);
ContextMenuDownloads.MenuItems.Add("-");
ContextMenuDownloads.MenuItems.Add("Show details");
ContextMenuDownloads.MenuItems.Add("-");
MenuItemInfo=new MenuItem("Search more info");
ContextMenuDownloads.MenuItems.Add(MenuItemInfo);
MenuInfo=new CMenuInfo(MenuItemInfo);
//MenuInfo.DisplayAllMenuItem.Click+=new EventHandler(m_DisplayAllMenuItem_Click);
//
ContextMenuDownloads.MenuItems.Add("-");
ContextMenuDownloads.MenuItems.Add("Clear completed", new EventHandler(OnClearCompleted));
TheColumnSorter=new ColumnSorter();
TheColumnSorter.CurrentColumn=3;
sortColumn=3;
sortOrder=-1;
TheColumnSorter.sortOrder=-1;
this.ClickHeader+=new HeaderEventHandler(myColumnClick);
this.KeyDown+=new KeyEventHandler(OnKeyDown);
ContextMenu=ContextMenuDownloads;
ContextMenuDownloads.Popup+=new System.EventHandler(myContextMenuPopup);
m_DefaultWidths=new int[] {190,60,60,60,60,60,60,60,60,190,60,70,70};
m_LoadWidths();
SmallImageList=eLePhantForm.SystemIconsList.list;
m_Globalize();
}
private void m_Globalize()
{
Columns[0].Text=eLePhantForm.Globalization["LBL_FILENAME"];
Columns[1].Text=eLePhantForm.Globalization["LBL_SIZE"];
Columns[2].Text=eLePhantForm.Globalization["LBL_SPEED"];
Columns[3].Text=eLePhantForm.Globalization["LBL_COMPLETED"];
Columns[4].Text=eLePhantForm.Globalization["LBL_REMAINING"];
Columns[5].Text=eLePhantForm.Globalization["LBL_SOURCES"];
Columns[6].Text=eLePhantForm.Globalization["LBL_USEFULLSOURCES"];
Columns[7].Text=eLePhantForm.Globalization["LBL_TRANSFERS"];
Columns[8].Text=eLePhantForm.Globalization["LBL_STATUS"];
Columns[9].Text=eLePhantForm.Globalization["LBL_PROGRESS"];
Columns[10].Text=eLePhantForm.Globalization["LBL_PRIORITY"];
Columns[11].Text=eLePhantForm.Globalization["LBL_ESTIMATED"];
Columns[12].Text=eLePhantForm.Globalization["LBL_CATEGORY"];
ContextMenuDownloads.MenuItems[0].Text=eLePhantForm.Globalization["LBL_START"];
ContextMenuDownloads.MenuItems[1].Text=eLePhantForm.Globalization["LBL_STOP"];
ContextMenuDownloads.MenuItems[2].Text=eLePhantForm.Globalization["LBL_CANCEL"];
ContextMenuDownloads.MenuItems[4].Text=eLePhantForm.Globalization["LBL_PREVIEW"];
ContextMenuDownloads.MenuItems[5].Text=eLePhantForm.Globalization["LBL_OPENFILE"];
ContextMenuDownloads.MenuItems[7].Text=eLePhantForm.Globalization["LBL_COPYLINK"];
ContextMenuDownloads.MenuItems[8].Text=eLePhantForm.Globalization["LBL_COPYLINK"]+" (HTML)";
ContextMenuDownloads.MenuItems[10].Text=eLePhantForm.Globalization["LBL_PRIORITY"];
ContextMenuDownloads.MenuItems[11].Text=eLePhantForm.Globalization["LBL_CATEGORY"];
ContextMenuDownloads.MenuItems[13].Text=eLePhantForm.Globalization["LBL_SHOWHIDEDETAILS"];
ContextMenuDownloads.MenuItems[15].Text=eLePhantForm.Globalization["LBL_SEARCHINFO"];
ContextMenuDownloads.MenuItems[17].Text=eLePhantForm.Globalization["LBL_CLEARCOMPLETED"];
PriorityMenu.MenuItems[0].Text=eLePhantForm.Globalization["LBL_HIGH"];
PriorityMenu.MenuItems[1].Text=eLePhantForm.Globalization["LBL_NORMAL"];
PriorityMenu.MenuItems[2].Text=eLePhantForm.Globalization["LBL_LOW"];
m_States=new string[] {
eLePhantForm.Globalization["LBL_READY"],
eLePhantForm.Globalization["LBL_PAUSED"],
eLePhantForm.Globalization["LBL_STOPPED"],
"","","","","",
eLePhantForm.Globalization["LBL_COMPLETING"],
eLePhantForm.Globalization["LBL_COMPLETE"],
};
m_Priorities=new string[] {
eLePhantForm.Globalization["LBL_LOW"],
eLePhantForm.Globalization["LBL_NORMAL"],
eLePhantForm.Globalization["LBL_HIGH"],
eLePhantForm.Globalization["LBL_AUTO"],
};
}
public void Globalize()
{
m_Globalize();
this.Refresh();
}
public void Initilize(CkernelGateway in_krnGateway)
{
krnGateway=in_krnGateway;
krnGateway.OnNewFile+=new FileEvent(m_InvokeOnNewFile);
krnGateway.OnRefreshDownloads+=new RefreshEvent(m_InvokeRefreshList);
m_ClearingCompleted=false;
m_filter=0;
ReloadList();
}
~downloadsListView()
{
}
private void OnKeyDown(object sender, KeyEventArgs e)
{
switch(e.KeyCode)
{
case Keys.Delete:
m_OnCancelFile();
break;
case Keys.Space:
m_OnClearCompleted();
break;
}
}
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 myContextMenuPopup(object sender, System.EventArgs e)
{
try //to fix a not able to reproduce exception reported
{
ContextMenuDownloads.MenuItems[12].DefaultItem = true;
MenuInfo.OnMenuInfoChange();
m_CheckPriority();
m_CheckCategories();
if (SelectedItems.Count==0)
{
ContextMenuDownloads.MenuItems[0].Enabled=false;
ContextMenuDownloads.MenuItems[1].Enabled=false;
ContextMenuDownloads.MenuItems[2].Enabled=false;
ContextMenuDownloads.MenuItems[4].Enabled=false;
ContextMenuDownloads.MenuItems[5].Enabled=false;
ContextMenuDownloads.MenuItems[7].Enabled=false;
ContextMenuDownloads.MenuItems[8].Enabled=false;
ContextMenuDownloads.MenuItems[10].Enabled=false;
ContextMenuDownloads.MenuItems[12].Enabled=false;
ContextMenuDownloads.MenuItems[14].Enabled=false;
}
if (SelectedItems.Count==1)
{
ContextMenuDownloads.MenuItems[0].Enabled=(!IsCompleted()&&!m_IsStarted());
ContextMenuDownloads.MenuItems[1].Enabled=(!IsCompleted()&& m_IsStarted());
ContextMenuDownloads.MenuItems[2].Enabled=!IsCompleted();
ContextMenuDownloads.MenuItems[4].Enabled=!IsCompleted();
ContextMenuDownloads.MenuItems[5].Enabled=IsCompleted();
ContextMenuDownloads.MenuItems[7].Enabled=true;
ContextMenuDownloads.MenuItems[8].Enabled=true;
ContextMenuDownloads.MenuItems[10].Enabled=!IsCompleted();
ContextMenuDownloads.MenuItems[12].Enabled=true;
ContextMenuDownloads.MenuItems[14].Enabled=true;
}
if (SelectedItems.Count>1)
{
ContextMenuDownloads.MenuItems[0].Enabled=true;
ContextMenuDownloads.MenuItems[1].Enabled=true;
ContextMenuDownloads.MenuItems[2].Enabled=true;
ContextMenuDownloads.MenuItems[4].Enabled=false;
ContextMenuDownloads.MenuItems[5].Enabled=false;
ContextMenuDownloads.MenuItems[7].Enabled=false;
ContextMenuDownloads.MenuItems[8].Enabled=false;
ContextMenuDownloads.MenuItems[10].Enabled=true;
ContextMenuDownloads.MenuItems[12].Enabled=false;
ContextMenuDownloads.MenuItems[14].Enabled=false;
}
if (!krnGateway.IsLocal) ContextMenuDownloads.MenuItems[4].Enabled=false;
}
catch
{}
}
private void OnPreviewFile(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
sFileDetails FileInfo = (sFileDetails)krnGateway.GetFileDetails(((InterfaceFile)SelectedItems[0].Tag).strHash);
string fileExtension=CUtils.GetExtension(FileInfo.FileName);
if (CUtils.IsVideo(FileInfo.FileName))
{
string player=eLePhantForm.preferences.GetString("PreviewPlayer");
if ((player==null)||(player==""))
{
MessageBox.Show(eLePhantForm.Globalization["LBL_NOPLAYER"],"lphant",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
try
{
Process.Start("\""+player+"\"","\""+FileInfo.DiskFileName+"\"");
}
catch{}
}
else //not a video file, try to open the default application for the extension
{
try
{
RegistryKey key=Registry.ClassesRoot.OpenSubKey(fileExtension);
if (key==null) return;
string type=(string)key.GetValue("");
if (type.Length==0) return;
key=Registry.ClassesRoot.OpenSubKey(type+"\\shell\\open\\command");
if (key==null) return;
string command=(string)key.GetValue("");
if (command.Length==0) return;
string exeCommand;
if (command.IndexOf("%1")>0)
exeCommand=command.Replace("%1",FileInfo.DiskFileName);
else
exeCommand=command.Replace("%L",FileInfo.DiskFileName);
string parameters;
if (exeCommand.StartsWith("\""))
{
parameters=exeCommand.Substring(exeCommand.IndexOf("\"",2)+2);
exeCommand=exeCommand.Substring(0,exeCommand.IndexOf("\"",2)+1);
}
else
{
parameters=exeCommand.Substring(exeCommand.IndexOf(" ",2)+2);
exeCommand=exeCommand.Substring(0,exeCommand.IndexOf(" ",2)+1);
}
if (!parameters.StartsWith("\""))
parameters="\""+parameters+"\"";
Debug.WriteLine(exeCommand);
Debug.WriteLine(parameters);
Process.Start(exeCommand,parameters);
}
catch(Exception ex)
{
Debug.WriteLine(ex);
}
}
}
private void OnStartFile(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
for(int i=0;i!=SelectedItems.Count;i++)
{
krnGateway.ResumeFile(((InterfaceFile)SelectedItems[i].Tag).strHash);
}
}
private void m_OnClearCompleted()
{
m_ClearingCompleted=true;
m_RefreshList(krnGateway);
m_ClearingCompleted=false;
krnGateway.CalculateFilterSummary();
}
private void OnClearCompleted(object sender, System.EventArgs e)
{
m_OnClearCompleted();
}
private void OnStopFile(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
for(int i=0;i!=SelectedItems.Count;i++)
{
krnGateway.StopFile(((InterfaceFile)SelectedItems[i].Tag).strHash);
}
}
private void OnCancelFile(object sender, System.EventArgs e)
{
m_OnCancelFile();
}
private void m_OnCancelFile()
{
if (SelectedItems.Count==0) return;
try
{
int SelectedItem = SelectedItems.Count;
InterfaceFile[] Items= new InterfaceFile[SelectedItem];
for(int i=0;i!=SelectedItem;i++)
{
Items[i] = (InterfaceFile)SelectedItems[i].Tag;
}
for(int i=0;i!=SelectedItem;i++)
{
string message = String.Format(eLePhantForm.Globalization["MSG_DELETEFILE"],(Items[i].Name));
if (MessageBox.Show(message,"lphant",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
{
krnGateway.CancelFile(Items[i].strHash);
}
}
}
catch(Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
private void OnOpenFile(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
InterfaceFile file=(InterfaceFile)SelectedItems[0].Tag;
try
{
System.Diagnostics.Process.Start(file.CompleteName);
}
catch{}
}
private void OnCopyLink(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
InterfaceFile file=(InterfaceFile)SelectedItems[0].Tag;
Clipboard.SetDataObject("ed2k://|file|"+file.Name+"|"+file.Size.ToString()+"|"+file.strHash+"|/");
}
private void OnCopyLinkHTML(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
InterfaceFile file=(InterfaceFile)SelectedItems[0].Tag;
Clipboard.SetDataObject(""+file.Name+"");
}
private void OnHighPriority(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
for(int i=0;i!=SelectedItems.Count;i++)
{
krnGateway.SetFileDownloadPrioriry(((InterfaceFile)SelectedItems[i].Tag).strHash,Types.Constants.Priority.High);
}
}
private void OnNormalPriority(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
for(int i=0;i!=SelectedItems.Count;i++)
{
krnGateway.SetFileDownloadPrioriry(((InterfaceFile)SelectedItems[i].Tag).strHash,Types.Constants.Priority.Normal);
}
}
private void OnLowPriority(object sender, System.EventArgs e)
{
if (SelectedItems.Count==0) return;
for(int i=0;i!=SelectedItems.Count;i++)
{
krnGateway.SetFileDownloadPrioriry(((InterfaceFile)SelectedItems[i].Tag).strHash,Types.Constants.Priority.Low);
}
}
protected override void OnDrawItem(int item,int column,Graphics g,Rectangle rec)
{
try
{
InterfaceFile file = (InterfaceFile)(Items[item].Tag);
Bitmap bar=new Bitmap(rec.Width,rec.Height,g);
Graphics g2=Graphics.FromImage(bar);
eLePhantInspector.DrawBar(file, g2, new Rectangle(0,0,rec.Width,rec.Height), true, true);
g2.FillRectangle(new SolidBrush(this.BackColor),0,rec.Height-1,rec.Width,1);
g.DrawImageUnscaled(bar, rec.Left, rec.Top);
bar.Dispose();
//draw a backcolor margin
//g.FillRectangle(new SolidBrush(this.BackColor),rec.X,rec.Bottom-1,rec.Width,1);
}
catch
{
Debug.WriteLine ("GDI Error: drawing element bar");
}
}
private string StatusToString(byte status)
{
if (status>m_States.Length) return "Unknown";
return m_States[status];
}
private void FileToItem(InterfaceFile file,ListViewItem itemFile)
{
if (file==null) return;
if (itemFile.SubItems[0].Text!=file.Name) itemFile.SubItems[0].Text=file.Name;
//CNameCleaner.Clean(file.Name);
if (itemFile.SubItems[1].Text!=SizeToString(file.Size)) itemFile.SubItems[1].Text=SizeToString(file.Size);
if (itemFile.SubItems[2].Text!=SpeedToString(file.DownSpeed)) itemFile.SubItems[2].Text=SpeedToString(file.DownSpeed);
if (itemFile.SubItems[3].Text!=SizeToString(file.BytesDownloaded)) itemFile.SubItems[3].Text=SizeToString(file.BytesDownloaded);
if (itemFile.SubItems[4].Text!=SizeToString(file.RemainingBytes)) itemFile.SubItems[4].Text=SizeToString(file.RemainingBytes);
if (itemFile.SubItems[5].Text!=Convert.ToString(file.nSources)) itemFile.SubItems[5].Text=Convert.ToString(file.nSources);
if (itemFile.SubItems[6].Text!=Convert.ToString(file.nValidSources)) itemFile.SubItems[6].Text=Convert.ToString(file.nValidSources);
if (itemFile.SubItems[7].Text!=Convert.ToString(file.nTransferringSources)) itemFile.SubItems[7].Text=Convert.ToString(file.nTransferringSources);
if (itemFile.SubItems[8].Text!=StatusToString(file.Status)) itemFile.SubItems[8].Text=StatusToString(file.Status);
if (itemFile.SubItems[9].Text!="") itemFile.SubItems[9].Text="";
if (itemFile.SubItems[10].Text!=PriorityToString(file.DownloadPriority)) itemFile.SubItems[10].Text=PriorityToString(file.DownloadPriority);
string estimatedTime="?";
if (file.DownSpeed>0.3F)
{
TimeSpan ts=TimeSpan.FromSeconds(file.RemainingBytes/1024/file.DownSpeed);//new TimeSpan(0,0,file.RemainingBytes*1024/file.DownSpeed);
if (ts.Days<=99)
{
if (ts.Days>0)
estimatedTime=ts.Days+"d ";
else
estimatedTime="";
estimatedTime+=ts.Hours+"h "+ts.Minutes+"m";
}
}
if (itemFile.SubItems[11].Text!=estimatedTime) itemFile.SubItems[11].Text=estimatedTime;
if (itemFile.SubItems[12].Text!=file.Category) itemFile.SubItems[12].Text=file.Category;
itemFile.ImageIndex=eLePhantForm.SystemIconsList.GetIconIndexOf(file.Name);
itemFile.Tag=file;
}
private void m_InvokeOnNewFile(InterfaceFile file)
{
if (this.InvokeRequired)
this.BeginInvoke(new FileEvent(m_OnNewFile),new object[] {file});
else
m_OnNewFile(file);
}
private void m_OnNewFile(InterfaceFile file)
{
ListViewItem itemFile=new ListViewItem(new string[]{"","","","","","","","","","","","",""});
itemFile.Tag=file;
FileToItem(file,itemFile);
lock(this)
{
if ((!IsFiltered(file.Status))&&
(!IsCategoryFiltered(file.CategoryID,file.Name))) Items.Add(itemFile);
}
}
/*private void m_DisplayAllMenuItem_Click(object sender, EventArgs e)
{
MenuInfo.DisplayAll = !MenuInfo.DisplayAllMenuItem.Checked;
MenuInfo.DisplayAllMenuItem.Checked = !MenuInfo.DisplayAllMenuItem.Checked;
MenuInfo=new CMenuInfo(MenuItemInfo,"fr-FR",MenuInfo.DisplayAll);
}*/
private void m_InvokeRefreshList(CkernelGateway in_krnGateway)
{
this.Invoke(new RefreshEvent(m_RefreshList),new object[] {in_krnGateway});
}
private void m_RefreshList(CkernelGateway in_krnGateway)
{
foreach (ListViewItem Item in Items)
{
InterfaceFile file=in_krnGateway.GetDownloadFile(((InterfaceFile)Item.Tag).strHash);
if ((file==null)||((m_ClearingCompleted)&&(((InterfaceFile)Item.Tag).Status==9))) Items.Remove(Item);
else FileToItem(file,Item);
}
//enable this to autosort the list
if (eLePhantForm.preferences.GetBool("AutoSort"))
{
this.ListViewItemSorter = TheColumnSorter;
this.Sort();
this.ListViewItemSorter = null;
}
}
private void ReloadList()
{
InterfaceFile[] files=krnGateway.GetDownloadFileList();
Items.Clear();
if (files==null) return;
lock(this)
{
foreach (InterfaceFile file in files)
{
if (file!=null)
{
m_OnNewFile(file);
}
}
}
this.ListViewItemSorter = TheColumnSorter;
this.Sort();
this.ListViewItemSorter = null;
}
public void SetCategoryFilter(string category)
{
uint antFilter=m_CategoryFilter;
if (category.Length==0)
m_CategoryFilter=0;
else if (category=="LBL_VIDEO")
m_CategoryFilter=uint.MaxValue-1;
else if (category=="LBL_AUDIO")
m_CategoryFilter=uint.MaxValue-2;
else if (category=="LBL_FILE")
m_CategoryFilter=uint.MaxValue-3;
else
{
CCategory cat=krnGateway.GetCategoryByName(category);
if (cat!=null)
m_CategoryFilter=cat.ID;
}
if (m_CategoryFilter!=antFilter) ReloadList();
}
public void SetFilter(byte filter)
{
if (m_filter!=filter)
{
m_filter=filter;
ReloadList();
}
}
private bool IsFiltered(byte status)
{
if (m_filter==1) return ((status==1)||(status==2));
if (m_filter==2) return ((status!=1)&&(status!=2));
return false;
}
private bool IsCategoryFiltered(uint catID,string fileName)
{
if (m_CategoryFilter==uint.MaxValue-1)
return (!CUtils.IsVideo(fileName));
if (m_CategoryFilter==uint.MaxValue-2)
return (!CUtils.IsAudio(fileName));
if (m_CategoryFilter==uint.MaxValue-3)
return (!CUtils.IsFile(fileName));
return ((m_CategoryFilter!=0)&&(m_CategoryFilter!=catID));
}
private bool IsCompleted()
{
if (SelectedItems.Count==0) return false;
InterfaceFile file=(InterfaceFile)SelectedItems[0].Tag;
//status = 9 -> completed
if(file.Status==9)
return true;
else
return false;
}
private bool m_IsStarted()
{
if (SelectedItems.Count==0) return false;
InterfaceFile file=(InterfaceFile)SelectedItems[0].Tag;
//status = 9 -> completed
if (file.Status==0)
return true;
else
return false;
}
private void m_CheckPriority()
{
PriorityMenu.MenuItems[0].Checked=false;
PriorityMenu.MenuItems[1].Checked=false;
PriorityMenu.MenuItems[2].Checked=false;
if (SelectedItems.Count==0) return;
if (SelectedItems.Count>1) return;
InterfaceFile file=(InterfaceFile)SelectedItems[0].Tag;
byte index=1;
switch(file.DownloadPriority)
{
case Constants.Priority.High:index=0;
break;
case Constants.Priority.Normal:index=1;
break;
case Constants.Priority.Low:index=2;
break;
default: index=1;
break;
}
PriorityMenu.MenuItems[index].Checked=true;
}
private void m_CheckCategories()
{
ArrayList categories=krnGateway.GetCategories();
CategoryMenu.MenuItems.Clear();
MenuItem noneItem=CategoryMenu.MenuItems.Add(eLePhantForm.Globalization["LBL_NONE"], new EventHandler(OnSelectCategory));
CategoryMenu.MenuItems.Add("-");
MenuItem catItem;
InterfaceFile file=null;
if (SelectedItems.Count>0)
file=(InterfaceFile)SelectedItems[0].Tag;
if ((file!=null)&&(file.CategoryID==0))
noneItem.Checked=true;
foreach (CCategory category in categories)
{
catItem=CategoryMenu.MenuItems.Add(category.Name, new EventHandler(OnSelectCategory));
if ((file!=null)&&(file.CategoryID==category.ID)) catItem.Checked=true;
}
if (categories.Count>0) CategoryMenu.MenuItems.Add("-");
CategoryMenu.MenuItems.Add(eLePhantForm.Globalization["LBL_MANAGECATEGORIES"], new EventHandler(OnAddCategory));
}
private void OnSelectCategory(object sender, System.EventArgs e)
{
MenuItem item=(MenuItem)sender;
if (SelectedItems.Count==0) return;
for(int i=0;i!=SelectedItems.Count;i++)
{
krnGateway.SetFileCategory(((InterfaceFile)SelectedItems[i].Tag).strHash,item.Text);
}
}
private void OnAddCategory(object sender, System.EventArgs e)
{
FormCategory form=new FormCategory();
form.Initilize(krnGateway);
form.ShowDialog();
}
#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
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 ((((InterfaceFile)rowA.Tag).Size)>(((InterfaceFile)rowB.Tag).Size))
return sortOrder;
else
return -sortOrder;
case 2:
if (((((InterfaceFile)rowA.Tag).DownSpeed)>(((InterfaceFile)rowB.Tag).DownSpeed)))
return -sortOrder;
else
return sortOrder;
case 3:
if ((((InterfaceFile)rowA.Tag).BytesDownloaded)>(((InterfaceFile)rowB.Tag).BytesDownloaded))
return sortOrder;
else
return -sortOrder;
case 4:
if ((((InterfaceFile)rowA.Tag).RemainingBytes)>(((InterfaceFile)rowB.Tag).RemainingBytes))
return sortOrder;
else
return -sortOrder;
case 5:
if ((((InterfaceFile)rowA.Tag).nSources)>(((InterfaceFile)rowB.Tag).nSources))
return sortOrder;
else
return -sortOrder;
case 6:
if ((((InterfaceFile)rowA.Tag).nValidSources)>(((InterfaceFile)rowB.Tag).nValidSources))
return sortOrder;
else
return -sortOrder;
case 7:
if ((((InterfaceFile)rowA.Tag).nTransferringSources)>(((InterfaceFile)rowB.Tag).nTransferringSources))
return sortOrder;
else
return -sortOrder;
case 9:
if (((InterfaceFile)rowA.Tag).PercentCompleted>((InterfaceFile)rowB.Tag).PercentCompleted)
return sortOrder;
else
return -sortOrder;
case 10:
byte prioA=(byte)((byte)((InterfaceFile)rowA.Tag).DownloadPriority);
byte prioB=(byte)((byte)((InterfaceFile)rowB.Tag).DownloadPriority);
if (prioAprioB)
return sortOrder;
else
return String.Compare(rowA.Text,rowB.Text);
default:
return sortOrder*String.Compare(rowA.SubItems[CurrentColumn].Text,
rowB.SubItems[CurrentColumn].Text);
}
}
public ColumnSorter()
{
}
}
}
}