public override Brush OnSubItemBrush(DrawListViewSubItemEventArgs e) { Controls.ListViewItemServer listItemServer = e.Item as Controls.ListViewItemServer; if (listItemServer.Info.CanConnect() == false) { return(Form.Skin.ListViewDisabledBackBrush); } return(null); }
public void UpdateList() { lock (this) { //SuspendLayout(); List <ConnectionInfo> serversList; lock (Engine.Instance.Connections) { serversList = Engine.Instance.GetConnections(ShowAll); } Dictionary <string, ConnectionInfo> servers = new Dictionary <string, ConnectionInfo>(); foreach (ConnectionInfo infoServer in serversList) { servers[infoServer.Code] = infoServer; } foreach (ConnectionInfo infoServer in servers.Values) { if (ItemsServers.ContainsKey(infoServer.Code) == false) { Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer(); listItemServer.Info = infoServer; listItemServer.Update(); ItemsServers.Add(infoServer.Code, listItemServer); Items.Add(listItemServer); // TOFIX: Mono impressive slow. 'Show all' took around 5 seconds to add 150 items. } else { Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Code] as ListViewItemServer; listItemServer.Update(); } } List <ListViewItemServer> itemsToRemove = new List <ListViewItemServer>(); foreach (ListViewItemServer viewItem in ItemsServers.Values) { if (servers.ContainsKey(viewItem.Info.Code) == false) { itemsToRemove.Add(viewItem); } } if (itemsToRemove.Count > 0) { if (Platform.IsWindows()) { foreach (ListViewItemServer viewItem in itemsToRemove) { Items.Remove(viewItem); ItemsServers.Remove(viewItem.Info.Code); } } else { // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/ // Reproduce the crash by whitelist some server and switch "Show all" continuosly. List <ListViewItemServer> items = new List <ListViewItemServer>(); foreach (ListViewItemServer itemCurrent in Items) { if (itemsToRemove.Contains(itemCurrent) == false) { items.Add(itemCurrent); } } Items.Clear(); ItemsServers.Clear(); foreach (ListViewItemServer itemCurrent in items) { ItemsServers.Add(itemCurrent.Info.Code, itemCurrent); Items.Add(itemCurrent); } } } Sort(); //ResumeLayout(); } }
public override void OnListViewDrawSubItem(object sender, DrawListViewSubItemEventArgs e) { base.OnListViewDrawSubItem(sender, e); if (Visible == false) { return; } if (e.ColumnIndex == 1) { Controls.ListViewItemServer listItemServer = e.Item as Controls.ListViewItemServer; float part = listItemServer.Info.ScorePerc(); Image imageN = GuiUtils.GetResourceImage("stars_n"); Image imageH = GuiUtils.GetResourceImage("stars_h"); Rectangle sourceH = new Rectangle(0, 0, Convert.ToInt32(Convert.ToDouble(imageH.Width) * part), imageH.Height); Form.DrawImageContain(e.Graphics, imageN, e.Bounds, 0); Form.DrawImageContain(e.Graphics, imageH, e.Bounds, 0, sourceH); } else if (e.ColumnIndex == 4) { Controls.ListViewItemServer listItemServer = e.Item as Controls.ListViewItemServer; Rectangle R1 = e.Bounds; R1.Inflate(-2, -2); /* * Int64 bwCur = 2*(listItemServer.Info.Bandwidth*8)/(1000*1000); // to Mbit/s * Int64 bwMax = listItemServer.Info.BandwidthMax; * * float p = (float)bwCur / (float)bwMax; */ String label = listItemServer.Info.GetLoadForList(); float p = listItemServer.Info.GetLoadPercForList(); string color = listItemServer.Info.GetLoadColorForList(); Brush b = Brushes.LightGreen; if (color == "red") { b = Brushes.LightPink; } else if (color == "yellow") { b = Brushes.LightYellow; } else { b = Brushes.LightGreen; } int W = Convert.ToInt32(p * R1.Width); if (W > R1.Width) { W = R1.Width; } //e.Graphics.FillRectangle(Form.Skin.BarBrush, new Rectangle(R1.Left, R1.Top, W, R1.Height)); Form.FillRectangle(e.Graphics, b, new Rectangle(R1.Left, R1.Top, W, R1.Height)); R1.Height -= 1; //e.Graphics.DrawRectangle(m_loadPen, R1); Form.DrawString(e.Graphics, label, e.Item.Font, Form.Skin.ForeBrush, R1, GuiUtils.StringFormatCenterMiddle); } }
public void UpdateList() { lock (this) { //SuspendLayout(); List <ServerInfo> servers; lock (Engine.Instance.Servers) { servers = Engine.Instance.GetServers(ShowAll); } foreach (ServerInfo infoServer in servers) { if (ItemsServers.ContainsKey(infoServer.Name) == false) { Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer(); listItemServer.Name = infoServer.Name; listItemServer.Info = infoServer; listItemServer.Update(); ItemsServers.Add(infoServer.Name, listItemServer); Items.Add(listItemServer); } else { Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Name] as ListViewItemServer; listItemServer.Update(); } } List <ListViewItemServer> itemsToRemove = new List <ListViewItemServer>(); foreach (ListViewItemServer viewItem in ItemsServers.Values) { if (servers.Contains(viewItem.Info) == false) { itemsToRemove.Add(viewItem); } } if (Platform.IsWindows()) { foreach (ListViewItemServer viewItem in itemsToRemove) { Items.Remove(viewItem); ItemsServers.Remove(viewItem.Info.Name); } } else { // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/ List <ListViewItemServer> items = new List <ListViewItemServer>(); foreach (ListViewItemServer itemCurrent in Items) { if (itemsToRemove.Contains(itemCurrent) == false) { items.Add(itemCurrent); } } Items.Clear(); ItemsServers.Clear(); foreach (ListViewItemServer itemCurrent in items) { ItemsServers.Add(itemCurrent.Info.Name, itemCurrent); Items.Add(itemCurrent); } } Sort(); //ResumeLayout(); } }
public override void OnListViewDrawSubItem(object sender, DrawListViewSubItemEventArgs e) { if (e.ColumnIndex == 1) { e.DrawDefault = false; DrawSubItemBackground(sender, e); Controls.ListViewItemServer listItemServer = e.Item as Controls.ListViewItemServer; //int score = Convert.ToInt32(e.SubItem.Text); float part = listItemServer.Info.ScorePerc(); Image imageN = GuiUtils.GetResourceImage("stars_n"); Image imageH = GuiUtils.GetResourceImage("stars_h"); //Rectangle sourceN = new Rectangle(0, 0, imageN.Width, imageN.Height); // TOCLEAN Rectangle sourceH = new Rectangle(0, 0, Convert.ToInt32(Convert.ToDouble(imageH.Width) * part), imageH.Height); int ODX = imageN.Width; if (e.Bounds.Width < ODX) { ODX = e.Bounds.Width; } int ODY = imageN.Height; int HDX = Convert.ToInt32(Convert.ToDouble(ODX) * part); Rectangle destN = new Rectangle(0, 0, ODX, ODY); destN.Offset(e.Bounds.Width / 2, e.Bounds.Height / 2); destN.Offset(e.Bounds.Left, e.Bounds.Top); destN.Offset(-ODX / 2, -ODY / 2); Rectangle destH = new Rectangle(0, 0, HDX, ODY); destH.Offset(e.Bounds.Width / 2, e.Bounds.Height / 2); destH.Offset(e.Bounds.Left, e.Bounds.Top); destH.Offset(-ODX / 2, -ODY / 2); e.Graphics.DrawImage(imageN, destN); e.Graphics.DrawImage(imageH, destH, sourceH, GraphicsUnit.Pixel); } else if (e.ColumnIndex == 4) { e.DrawDefault = false; DrawSubItemBackground(sender, e); Controls.ListViewItemServer listItemServer = e.Item as Controls.ListViewItemServer; Rectangle R1 = e.Bounds; R1.Inflate(-2, -2); /* * Int64 bwCur = 2*(listItemServer.Info.Bandwidth*8)/(1000*1000); // to Mbit/s * Int64 bwMax = listItemServer.Info.BandwidthMax; * * float p = (float)bwCur / (float)bwMax; */ String label = listItemServer.Info.GetLoadForList(); float p = listItemServer.Info.GetLoadPercForList(); string color = listItemServer.Info.GetLoadColorForList(); Brush b = Brushes.LightGreen; if (color == "red") { b = Brushes.LightPink; } else if (color == "yellow") { b = Brushes.LightYellow; } else { b = Brushes.LightGreen; } int W = Convert.ToInt32(p * R1.Width); if (W > R1.Width) { W = R1.Width; } //e.Graphics.FillRectangle(Form.Skin.BarBrush, new Rectangle(R1.Left, R1.Top, W, R1.Height)); e.Graphics.FillRectangle(b, new Rectangle(R1.Left, R1.Top, W, R1.Height)); R1.Height -= 1; //e.Graphics.DrawRectangle(m_loadPen, R1); e.Graphics.DrawString(label, e.Item.Font, Form.Skin.ForeBrush, R1, GuiUtils.StringFormatCenterMiddle); } else { base.OnListViewDrawSubItem(sender, e); } }
public void UpdateList() { lock (this) { //SuspendLayout(); List<ServerInfo> servers; lock (Engine.Instance.Servers) { servers = Engine.Instance.GetServers(ShowAll); } foreach (ServerInfo infoServer in servers) { if (ItemsServers.ContainsKey(infoServer.Name) == false) { Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer(); listItemServer.Name = infoServer.Name; listItemServer.Info = infoServer; listItemServer.Update(); ItemsServers.Add(infoServer.Name, listItemServer); Items.Add(listItemServer); } else { Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Name] as ListViewItemServer; listItemServer.Update(); } } List<ListViewItemServer> itemsToRemove = new List<ListViewItemServer>(); foreach (ListViewItemServer viewItem in ItemsServers.Values) { if (servers.Contains(viewItem.Info) == false) { itemsToRemove.Add(viewItem); } } if (Platform.IsWindows()) { foreach (ListViewItemServer viewItem in itemsToRemove) { Items.Remove(viewItem); ItemsServers.Remove(viewItem.Info.Name); } } else { // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/ List<ListViewItemServer> items = new List<ListViewItemServer>(); foreach (ListViewItemServer itemCurrent in Items) { if (itemsToRemove.Contains(itemCurrent) == false) items.Add(itemCurrent); } Items.Clear(); ItemsServers.Clear(); foreach (ListViewItemServer itemCurrent in items) { ItemsServers.Add(itemCurrent.Info.Name, itemCurrent); Items.Add(itemCurrent); } } Sort(); //ResumeLayout(); } }
public void UpdateList() { lock (this) { //SuspendLayout(); List<ServerInfo> serversList; lock (Engine.Instance.Servers) { serversList = Engine.Instance.GetServers(ShowAll); } Dictionary<string, ServerInfo> servers = new Dictionary<string, ServerInfo>(); foreach (ServerInfo infoServer in serversList) { servers[infoServer.Code] = infoServer; } foreach (ServerInfo infoServer in servers.Values) { if (ItemsServers.ContainsKey(infoServer.Code) == false) { Controls.ListViewItemServer listItemServer = new Controls.ListViewItemServer(); listItemServer.Info = infoServer; listItemServer.Update(); ItemsServers.Add(infoServer.Code, listItemServer); Items.Add(listItemServer); // TOFIX: Mono impressive slow. 'Show all' took around 5 seconds to add 150 items. } else { Controls.ListViewItemServer listItemServer = ItemsServers[infoServer.Code] as ListViewItemServer; listItemServer.Update(); } } List<ListViewItemServer> itemsToRemove = new List<ListViewItemServer>(); foreach (ListViewItemServer viewItem in ItemsServers.Values) { if (servers.ContainsKey(viewItem.Info.Code) == false) { itemsToRemove.Add(viewItem); } } if (itemsToRemove.Count > 0) { if (Platform.IsWindows()) { foreach (ListViewItemServer viewItem in itemsToRemove) { Items.Remove(viewItem); ItemsServers.Remove(viewItem.Info.Code); } } else { // Mono workaround to avoid a crash, like this: http://sourceforge.net/p/keepass/bugs/1314/ // Reproduce the crash by whitelist some server and switch "Show all" continuosly. List<ListViewItemServer> items = new List<ListViewItemServer>(); foreach (ListViewItemServer itemCurrent in Items) { if (itemsToRemove.Contains(itemCurrent) == false) items.Add(itemCurrent); } Items.Clear(); ItemsServers.Clear(); foreach (ListViewItemServer itemCurrent in items) { ItemsServers.Add(itemCurrent.Info.Code, itemCurrent); Items.Add(itemCurrent); } } } Sort(); //ResumeLayout(); } }