OSDN Git Service

a989aadb0f4ddec020ab1443db6454c2333da7ff
[radegast/radegast.git] / Radegast / GUI / Dialogs / GroupInvite.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.ComponentModel;
34 using System.Data;
35 using System.Drawing;
36 using System.Linq;
37 using System.Text;
38 using System.Windows.Forms;
39 using OpenMetaverse;
40
41 namespace Radegast
42 {
43     public partial class GroupInvite : RadegastForm
44     {
45         AvatarPicker picker;
46         RadegastInstance instance;
47         Netcom.RadegastNetcom netcom;
48
49         Group group;
50         Dictionary<UUID, GroupRole> roles;
51
52         public GroupInvite(RadegastInstance instance, Group group, Dictionary<UUID, GroupRole> roles)
53             :base(instance)
54         {
55             InitializeComponent();
56             Disposed += new EventHandler(GroupInvite_Disposed);
57             AutoSavePosition = true;
58
59             this.instance = instance;
60             this.roles = roles;
61             this.group = group;
62             this.netcom = instance.Netcom;
63
64             picker = new AvatarPicker(instance) { Dock = DockStyle.Fill };
65             Controls.Add(picker);
66             picker.SelectionChaged += new EventHandler(picker_SelectionChaged);
67             picker.BringToFront();
68             
69             netcom.ClientDisconnected += new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);
70
71             cmbRoles.Items.Add(roles[UUID.Zero]);
72             cmbRoles.SelectedIndex = 0;
73
74             foreach (KeyValuePair<UUID, GroupRole> role in roles)
75                 if (role.Key != UUID.Zero)
76                     cmbRoles.Items.Add(role.Value);
77         }
78
79         void picker_SelectionChaged(object sender, EventArgs e)
80         {
81             btnIvite.Enabled = picker.SelectedAvatars.Count > 0;
82         }
83
84         void GroupInvite_Disposed(object sender, EventArgs e)
85         {
86             netcom.ClientDisconnected -= new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);
87             netcom = null;
88             instance = null;
89             picker.Dispose();
90             Logger.DebugLog("Group picker disposed");
91         }
92
93         void Netcom_ClientDisconnected(object sender, OpenMetaverse.DisconnectedEventArgs e)
94         {
95             ((Radegast.Netcom.RadegastNetcom)sender).ClientDisconnected -= new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);
96
97             if (!instance.MonoRuntime || IsHandleCreated)
98                 BeginInvoke(new MethodInvoker(() =>
99                 {
100                     Close();
101                 }
102                 ));
103         }
104
105
106         private void GroupInvite_Load(object sender, EventArgs e)
107         {
108             picker.txtSearch.Focus();
109         }
110
111         private void btnIvite_Click(object sender, EventArgs e)
112         {
113             List<UUID> roleID = new List<UUID>();
114             roleID.Add(((GroupRole)cmbRoles.SelectedItem).ID);
115
116             foreach (UUID key in picker.SelectedAvatars.Keys)
117             {
118                 instance.Client.Groups.Invite(group.ID, roleID, key);
119             }
120             Close();
121         }
122     }
123 }