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; 
            } 
        } 
    } 
}