www.pudn.com > Fetion.rar > GroupOptionFrom.cs
namespace Imps.Client.Pc
{
using Imps.Client;
using Imps.Client.Core;
using Imps.Client.Pc.BizControls;
using Imps.Client.Pc.Controls;
using Imps.Client.Resource;
using Imps.Client.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public class GroupOptionFrom : XIMDialog
{
private List _commitableItems;
private IFrameworkWindow _framework;
private GroupOption _option;
private Dictionary _optionItems;
private PersonalGroup _personalGroup;
private XButton btnApply;
private XButton btnCancel;
private XButton btnOK;
private IContainer components;
private listbox_widget_t m_group_options;
private headiconlist_drawer m_headicon_list_drawer;
private Panel pnlBackground;
private Panel pnlContent;
private UPanel pnlOptionTabs;
private XBorderControl xBorderControl1;
public GroupOptionFrom(IFrameworkWindow wnd, PersonalGroup pg)
{
this.m_group_options = new listbox_widget_t();
this.m_headicon_list_drawer = new headiconlist_drawer();
this._framework = wnd;
this._personalGroup = pg;
if (pg == null)
{
base.Close();
}
else
{
if (this.CurrentUser.Status == UserAccountStatus.Logon)
{
this.CurrentUser.PersonalGroupManager.AsyncGetPersonalInfo(pg, new AsyncBizOperation());
}
this.m_headicon_list_drawer.show_focus = false;
this.m_headicon_list_drawer.stretch_textarea = true;
this.m_group_options.Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Top;
this.m_group_options.Location = new System.Drawing.Point(5, 8);
this.m_group_options.Name = "m_group_options";
this.m_group_options.Size = new Size(0x70, 0x114);
this.m_group_options.TabIndex = 4;
this.m_group_options.drawer = this.m_headicon_list_drawer;
this.m_group_options.BorderStyle = BorderStyle.None;
this.m_group_options.SelectedIndexChanged += new EventHandler(this.lbOptionItems_SelectedIndexChanged);
this.m_group_options.SelectedIndexChanging += new listbox_widget.cancel_select_event_handler(this.OnSelectingOptionItem);
this.InitializeComponent();
base.Controls.SetChildIndex(this.pnlBackground, 0);
this.pnlOptionTabs.Controls.Add(this.m_group_options);
this.pnlOptionTabs.Controls.SetChildIndex(this.m_group_options, 0);
this.xBorderControl1.Location = new System.Drawing.Point(4, 7);
this.xBorderControl1.Size = new Size(0x72, 0x116);
this._commitableItems = new List();
this._commitableItems.Add(this._framework.AccountManager.CurrentUser.PersonalGroups[this._personalGroup.Uri].GroupInfo);
this._commitableItems.Add(this._framework.AccountManager.CurrentUser.PersonalGroups[this._personalGroup.Uri].UserInfo);
}
}
public GroupOptionFrom(IFrameworkWindow wnd, PersonalGroup pg, GroupOption option) : this(wnd, pg)
{
this.Option = option;
}
private void btnApply_Click(object sender, EventArgs e)
{
try
{
this.InnerUpdateOptionsControl(true);
}
catch (Exception exception)
{
this._framework.UnifiedMessageBox.ShowError(this, exception.Message);
}
this.btnApply.Enabled = false;
}
private void btnCancel_Click(object sender, EventArgs e)
{
base.Close();
}
private void btnOK_Click(object sender, EventArgs e)
{
try
{
if (this.InnerUpdateOptionsControl(true))
{
base.Close();
}
}
catch (Exception exception)
{
this._framework.UnifiedMessageBox.ShowError(this, exception.Message);
}
}
private void CurrentUser_StatusChanged(object sender, UserSatusChangedEventArgs e)
{
UiErrorHelper.HandEventSafely(this._framework, delegate {
if (this.Visible)
{
switch (e.NewStatus)
{
case UserAccountStatus.Logon:
case UserAccountStatus.Logoff:
this.Close();
return;
case UserAccountStatus.Logouting:
return;
}
}
});
}
protected override void Dispose(bool disposing)
{
if (disposing && (this.components != null))
{
this.components.Dispose();
}
base.Dispose(disposing);
}
private void GroupOptionFrom_Load(object sender, EventArgs e)
{
this.btnApply.Text = StringTable.Common.btnApply;
this.btnOK.Text = StringTable.Common.TitleConfirm;
this.btnCancel.Text = StringTable.Common.btnCancel;
base.Text = StringTable.GroupOptions.OptionFormTitle;
this.CurrentUser.StatusChanged += new EventHandler(this.CurrentUser_StatusChanged);
this.CurrentUser.PersonalGroupManager.GroupDeleted += new EventHandler(this.PersonalGroupManager_GroupDeleted);
this.CurrentUser.PersonalGroupManager.GroupRemoved += new EventHandler(this.PersonalGroupManager_GroupRemoved);
this.CurrentUser.PersonalGroupManager.MeBeDeleted += new EventHandler(this.PersonalGroupManager_MeBeDeleted);
}
private void HandleException(Exception ex)
{
ClientLogger.WriteException(ex);
}
private void InitializeComponent()
{
ComponentResourceManager manager = new ComponentResourceManager(typeof(GroupOptionFrom));
this.pnlBackground = new Panel();
this.pnlContent = new Panel();
this.pnlOptionTabs = new UPanel();
this.xBorderControl1 = new XBorderControl();
this.btnApply = new XButton();
this.btnCancel = new XButton();
this.btnOK = new XButton();
this.pnlBackground.SuspendLayout();
this.pnlOptionTabs.SuspendLayout();
base.SuspendLayout();
this.pnlBackground.BackColor = Color.Transparent;
this.pnlBackground.Controls.Add(this.pnlContent);
this.pnlBackground.Controls.Add(this.pnlOptionTabs);
this.pnlBackground.Location = new System.Drawing.Point(5, 0x12);
this.pnlBackground.Name = "pnlBackground";
this.pnlBackground.Padding = new Padding(3);
this.pnlBackground.Size = new Size(0x1bf, 0x12e);
this.pnlBackground.TabIndex = 0;
this.pnlContent.BackColor = Color.Transparent;
this.pnlContent.Dock = DockStyle.Right;
this.pnlContent.Location = new System.Drawing.Point(0x7c, 3);
this.pnlContent.Name = "pnlContent";
this.pnlContent.Padding = new Padding(3);
this.pnlContent.Size = new Size(320, 0x128);
this.pnlContent.TabIndex = 5;
this.pnlOptionTabs.BackColor = Color.Transparent;
this.pnlOptionTabs.BorderColor = Color.Transparent;
this.pnlOptionTabs.BorderInsideColor = Color.Transparent;
this.pnlOptionTabs.BorderInsideWidth = 1;
this.pnlOptionTabs.BorderWidth = 0;
this.pnlOptionTabs.Controls.Add(this.xBorderControl1);
this.pnlOptionTabs.Dock = DockStyle.Left;
this.pnlOptionTabs.Location = new System.Drawing.Point(3, 3);
this.pnlOptionTabs.Name = "pnlOptionTabs";
this.pnlOptionTabs.Size = new Size(120, 0x128);
this.pnlOptionTabs.TabIndex = 4;
this.xBorderControl1.BorderColor = Color.Silver;
this.xBorderControl1.Location = new System.Drawing.Point(0x1b, 0x3d);
this.xBorderControl1.Name = "xBorderControl1";
this.xBorderControl1.Size = new Size(0x56, 0x62);
this.xBorderControl1.TabIndex = 0;
this.btnApply.AutoArrangementX = true;
this.btnApply.AutoSizeToImage = false;
this.btnApply.BackColor = Color.Transparent;
this.btnApply.BackgroundImageDisable = null;
this.btnApply.BackgroundImageDown = null;
this.btnApply.BackgroundImageHover = null;
this.btnApply.ChangeSkin = true;
this.btnApply.DialogResult = DialogResult.Cancel;
this.btnApply.Location = new System.Drawing.Point(0x14f, 0x143);
this.btnApply.Name = "btnApply";
this.btnApply.Size = new Size(0x4b, 0x19);
this.btnApply.TabIndex = 5;
this.btnApply.Text = "应用";
this.btnApply.UseVisualStyleBackColor = false;
this.btnApply.Click += new EventHandler(this.btnApply_Click);
this.btnCancel.AutoArrangementX = true;
this.btnCancel.AutoSizeToImage = false;
this.btnCancel.BackColor = Color.Transparent;
this.btnCancel.BackgroundImageDisable = null;
this.btnCancel.BackgroundImageDown = null;
this.btnCancel.BackgroundImageHover = null;
this.btnCancel.ChangeSkin = true;
this.btnCancel.DialogResult = DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(0xfe, 0x143);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new Size(0x4b, 0x19);
this.btnCancel.TabIndex = 4;
this.btnCancel.Text = "取消";
this.btnCancel.UseVisualStyleBackColor = false;
this.btnCancel.Click += new EventHandler(this.btnCancel_Click);
this.btnOK.AutoArrangementX = true;
this.btnOK.AutoSizeToImage = false;
this.btnOK.BackColor = Color.Transparent;
this.btnOK.BackgroundImageDisable = null;
this.btnOK.BackgroundImageDown = null;
this.btnOK.BackgroundImageHover = null;
this.btnOK.ChangeSkin = true;
this.btnOK.Location = new System.Drawing.Point(0xad, 0x143);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new Size(0x4b, 0x19);
this.btnOK.TabIndex = 3;
this.btnOK.Text = "确定";
this.btnOK.UseVisualStyleBackColor = false;
this.btnOK.Click += new EventHandler(this.btnOK_Click);
base.AutoScaleDimensions = new SizeF(6f, 13f);
base.AutoScaleMode = AutoScaleMode.Font;
base.BaseHeight = 380;
base.BaseWidth = 0x1da;
base.CancelButton = this.btnCancel;
base.ClientSize = new Size(0x1d4, 0x162);
base.Controls.Add(this.pnlBackground);
base.Controls.Add(this.btnApply);
base.Controls.Add(this.btnCancel);
base.Controls.Add(this.btnOK);
base.DisplayLocation = new System.Drawing.Point(0x12, 0x2c);
base.Icon = (Icon) manager.GetObject("$this.Icon");
base.Name = "GroupOptionFrom";
base.Padding = new Padding(6, 0x22, 0x13, 9);
base.Text = "群设置";
base.Load += new EventHandler(this.GroupOptionFrom_Load);
this.pnlBackground.ResumeLayout(false);
this.pnlOptionTabs.ResumeLayout(false);
base.ResumeLayout(false);
}
private bool InnerUpdateOptionsControl(bool update)
{
if (update)
{
bool flag = false;
bool flag2 = false;
foreach (KeyValuePair pair in this._optionItems)
{
OptionsItem item = pair.Value;
if ((item.ControlAvailable && item.OptionsControl.Modified) && !item.OptionsControl.CheckUserInput())
{
return false;
}
}
List contextForUi = new List();
AsyncBizOperation op = new AsyncBizOperation(contextForUi);
op.ImpsError += new EventHandler(this.opUpdate_ImpsError);
foreach (KeyValuePair pair2 in this._optionItems)
{
OptionsItem item2 = pair2.Value;
if (item2.ControlAvailable && item2.OptionsControl.Modified)
{
if ((item2.OptionsControl as GroupOptionsControlBase).GroupInfoModified)
{
flag = true;
}
if ((item2.OptionsControl as GroupOptionsControlBase).UserInfoModified)
{
flag2 = true;
}
if (!item2.OptionsControl.UpdateData(update))
{
return false;
}
contextForUi.Add(item2.OptionsControl);
}
}
if ((this._optionItems[0].OptionsControl as GroupOptionsControlBase).PortraitModified && ((this._optionItems[0].OptionsControl as BasicInfoControl)._newImage != null))
{
try
{
this._personalGroup.GroupInfo.Portrait.ProposedValue = (this._optionItems[0].OptionsControl as BasicInfoControl)._newImage;
this.CurrentUser.PersonalGroupManager.AsyncUploadGroupPortrait(this._personalGroup, op);
}
catch (Exception exception)
{
ClientLogger.WriteException(exception);
return false;
}
finally
{
(this._optionItems[0].OptionsControl as GroupOptionsControlBase).PortraitModified = false;
(this._optionItems[0].OptionsControl as BasicInfoControl)._newImage = null;
}
}
if (flag)
{
this._commitableItems[0].CommitChanges(op);
}
if (flag2)
{
this._commitableItems[1].CommitChanges(op);
}
}
else
{
foreach (KeyValuePair pair3 in this._optionItems)
{
OptionsItem item3 = pair3.Value;
if (item3.ControlAvailable)
{
item3.OptionsControl.UpdateData(update);
}
}
}
return true;
}
private void lbOptionItems_SelectedIndexChanged(object sender, EventArgs e)
{
if (sender is listbox_widget_t)
{
try
{
OptionsItem item = null;
if (this.m_group_options.Equals(sender))
{
if (-1 == this.m_group_options.get_selected_index())
{
return;
}
item = this._optionItems[this.m_group_options.get_selected_index()];
}
item.OptionsControl.ModifiedChanged += new EventHandler(this.oc_ModifiedStateChanged);
this.pnlContent.SuspendLayout();
this.pnlContent.Controls.Clear();
this.pnlContent.Controls.Add(item.OptionsControl.Control);
item.OptionsControl.Control.Visible = true;
this.pnlContent.ResumeLayout();
}
catch (Exception exception)
{
UiErrorHelper.HandExceptionSafely(this._framework, exception);
}
}
}
private void oc_ModifiedStateChanged(object sender, EventArgs e)
{
try
{
foreach (OptionsItem item in this._optionItems.Values)
{
if (item.ControlAvailable && item.OptionsControl.Modified)
{
this.btnApply.Enabled = true;
return;
}
}
this.btnApply.Enabled = false;
}
catch (Exception exception)
{
this._framework.UnifiedMessageBox.ShowException(this, exception);
}
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
this._framework.AccountManager.CurrentUser.StatusChanged -= new EventHandler(this.CurrentUser_StatusChanged);
this.pnlContent.Controls.Clear();
try
{
foreach (OptionsItem item in this._optionItems.Values)
{
if (item.ControlAvailable)
{
item.OptionsControl.ModifiedChanged -= new EventHandler(this.oc_ModifiedStateChanged);
item.OptionsControl.ControlUnload();
}
}
this.CurrentUser.StatusChanged -= new EventHandler(this.CurrentUser_StatusChanged);
this.CurrentUser.PersonalGroupManager.GroupDeleted -= new EventHandler(this.PersonalGroupManager_GroupDeleted);
this.CurrentUser.PersonalGroupManager.GroupRemoved -= new EventHandler(this.PersonalGroupManager_GroupRemoved);
this.CurrentUser.PersonalGroupManager.MeBeDeleted -= new EventHandler(this.PersonalGroupManager_MeBeDeleted);
}
catch
{
}
base.OnFormClosed(e);
Form owner = base.Owner;
if (owner != null)
{
owner.Activate();
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Reset();
}
private void OnSelectingOptionItem(object sender, listbox_widget.cancel_select_event_args args)
{
try
{
if ((1 == this.pnlContent.Controls.Count) && (this.pnlContent.Controls[0] is IOptionsControl))
{
IOptionsControl control = (IOptionsControl) this.pnlContent.Controls[0];
if (control.Modified && !control.CheckUserInput())
{
args.Cancel = true;
}
}
}
catch (Exception exception)
{
UiErrorHelper.HandExceptionSafely(this._framework, exception);
}
}
private void opUpdate_ImpsError(object sender, ImpsErrorEventArgs e)
{
try
{
if (base.IsHandleCreated)
{
AsyncBizOperation operation = (AsyncBizOperation) sender;
List contextForUi = (List) operation.ContextForUi;
foreach (IOptionsControl control in contextForUi)
{
control.UpdateData(false);
}
if (!operation.IsImpsErrorHandled)
{
this._framework.UnifiedMessageBox.ShowError(this, e.Summary);
}
operation.IsImpsErrorHandled = true;
}
this._framework.UnifiedMessageBox.ShowError(e.Summary);
}
catch
{
}
}
private void PersonalGroupManager_GroupDeleted(object sender, PersonalGroupEventArgs e)
{
try
{
if (e.PersonalGroup.Uri.Raw == this._personalGroup.Uri.Raw)
{
base.Close();
}
}
catch (Exception exception)
{
this.HandleException(exception);
}
}
private void PersonalGroupManager_GroupRemoved(object sender, PersonalGroupEventArgs e)
{
try
{
if (e.PersonalGroup.Uri.Raw == this._personalGroup.Uri.Raw)
{
base.Close();
}
}
catch (Exception exception)
{
this.HandleException(exception);
}
}
private void PersonalGroupManager_MeBeDeleted(object sender, PersonalGroupEventArgs e)
{
try
{
if (e.PersonalGroup.Uri.Raw == this._personalGroup.Uri.Raw)
{
base.Close();
}
}
catch (Exception exception)
{
this.HandleException(exception);
}
}
private void Reset()
{
this._optionItems = new Dictionary();
this.m_group_options.Items.Clear();
this.btnApply.Enabled = false;
OptionsCategory[] categories = ((MainForm) this._framework).InnerGroupOptionsManager.Categories;
if (categories.Length == 1)
{
foreach (OptionsItem item in categories[0].Items)
{
if (item != null)
{
int key = this.m_group_options.add(new headicon(null, item.Text));
(item.OptionsControl.Control as GroupOptionsControlBase)._personalGroup = this._personalGroup;
(item.OptionsControl.Control as GroupOptionsControlBase).UpdateData(false);
this._optionItems.Add(key, item);
if (item.ControlAvailable)
{
item.OptionsControl.Control.Visible = false;
this.pnlOptionTabs.Controls.Add(item.OptionsControl.Control);
}
}
}
this.pnlContent.Controls.Clear();
this.pnlContent.Controls.Add(this._optionItems[0].OptionsControl.Control);
int option = (int) this.Option;
if ((option < 0) || (option > 3))
{
option = 0;
}
this.m_group_options.SelectedIndex = option;
}
}
private Imps.Client.Core.User CurrentUser
{
get
{
return this._framework.AccountManager.CurrentUser;
}
}
public GroupOption Option
{
get
{
return this._option;
}
set
{
this._option = value;
}
}
}
}