OSDN Git Service

Switch to the new Name api, mark old one obsolete.
[radegast/radegast.git] / Radegast / Core / Types / AgentNameTextBox.cs
1 // 
2 // Radegast Metaverse Client
3 // Copyright (c) 2009-2010, 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.Windows.Forms;
34 using System.ComponentModel;
35 using OpenMetaverse;
36
37 namespace Radegast
38 {
39     public class AgentNameTextBox : System.Windows.Forms.TextBox
40     {
41         private UUID agentID;
42         private GridClient client { get { return RadegastInstance.GlobalInstance.Client; } }
43         private RadegastInstance instance { get { return RadegastInstance.GlobalInstance; } }
44
45         [Browsable(false)]
46         public UUID AgentID
47         {
48             get { return agentID; }
49
50             set
51             {
52                 if (agentID == value) return;
53
54                 agentID = value;
55
56                 if (agentID == UUID.Zero)
57                 {
58                     SetName(string.Empty);
59                 }
60                 else
61                 {
62                     SetupHandlers();
63                     string name = instance.Names.Get(agentID);
64                     SetName(name);
65                 }
66             }
67         }
68
69         public AgentNameTextBox()
70             : base()
71         {
72             SetStyle(ControlStyles.SupportsTransparentBackColor, true);
73             Disposed += new EventHandler(CleanupHandlers);
74         }
75
76         void SetupHandlers()
77         {
78             if (instance == null || instance.Names == null) return;
79             instance.Names.NameUpdated += new EventHandler<UUIDNameReplyEventArgs>(Names_NameUpdated);
80         }
81
82         void CleanupHandlers(object sender, EventArgs e)
83         {
84             instance.Names.NameUpdated -= new EventHandler<UUIDNameReplyEventArgs>(Names_NameUpdated);
85         }
86
87         void Names_NameUpdated(object sender, UUIDNameReplyEventArgs e)
88         {
89             if (e.Names.ContainsKey(agentID))
90             {
91                 SetName(e.Names[agentID]);
92             }
93         }
94
95         void SetName(string name)
96         {
97             if (InvokeRequired)
98             {
99                 BeginInvoke(new MethodInvoker(delegate() { SetName(name); }));
100                 return;
101             }
102
103             base.Text = name;
104         }
105     }
106 }