OSDN Git Service

b8304640a1ac5be05113f291ccfeaa23205c2b87
[radegast/radegast.git] / Radegast / GUI / Consoles / AttachmentTab.cs
1 // 
2 // Radegast Metaverse Client
3 // Copyright (c) 2009-2013, Radegast Development Team
4 // All rights reserved.
5 // 
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 // 
9 //     * Redistributions of source code must retain the above copyright notice,
10 //       this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above copyright
12 //       notice, this list of conditions and the following disclaimer in the
13 //       documentation and/or other materials provided with the distribution.
14 //     * Neither the name of the application "Radegast", nor the names of its
15 //       contributors may be used to endorse or promote products derived from
16 //       this software without specific prior written permission.
17 // 
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 //
29 // $Id$
30 //
31 using System;
32 using System.Collections.Generic;
33 using System.Drawing;
34 using System.Windows.Forms;
35 using OpenMetaverse;
36
37 namespace Radegast
38 {
39     public partial class AttachmentTab : UserControl
40     {
41         private RadegastInstance instance;
42         private GridClient client { get { return instance.Client; } }
43         private Avatar av;
44
45         public AttachmentTab(RadegastInstance instance, Avatar iav)
46         {
47             this.instance = instance;
48             av = iav;
49             InitializeComponent();
50             AutoScrollPosition = new Point(0, 0);
51
52             InitializeComponent();
53         }
54
55         private void AttachmentTab_Load(object sender, EventArgs e)
56         {
57             RefreshList();
58         }
59
60         public void RefreshList()
61         {
62             List<Primitive> attachments = client.Network.CurrentSim.ObjectsPrimitives.FindAll(
63                 delegate(Primitive prim)
64                 {
65                     return (prim.ParentID == av.LocalID);
66                 }
67             );
68
69             List<Control> toRemove = new List<Control>();
70
71             foreach (Control c in Controls)
72             {
73                 if (c is AttachmentDetail)
74                 {
75                     toRemove.Add(c);
76                 }
77             }
78
79             for (int i = 0; i < toRemove.Count; i++)
80             {
81                 Controls.Remove(toRemove[i]);
82                 toRemove[i].Dispose();
83             }
84
85             List<UUID> added = new List<UUID>();
86
87             int n = 0;
88             foreach (Primitive prim in attachments)
89             {
90                 if (!added.Contains(prim.ID))
91                 {
92                     AttachmentDetail ad = new AttachmentDetail(instance, av, prim);
93                     ad.Location = new Point(0, pnlControls.Height + n * ad.Height);
94                     ad.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
95                     ad.Width = ClientSize.Width;
96                     Controls.Add(ad);
97                     added.Add(prim.ID);
98                     n++;
99                 }
100             }
101
102             AutoScrollPosition = new Point(0, 0);
103         }
104
105         private void btnRefresh_Click(object sender, EventArgs e)
106         {
107             RefreshList();
108         }
109     }
110 }