00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Web.Services.Protocols;
00014 using System.Windows.Forms;
00015 using Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.EventHandlersPlugin.Controls;
00016 using Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.EventHandlersPlugin.Properties;
00017 using Mcs.Epm.MicrosoftProject.mpFx.Client.Shared;
00018 using Mcs.Epm.MicrosoftProject.mpFx.EventsWebService;
00019
00020 namespace Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.EventHandlersPlugin.Forms
00021 {
00022
00023
00024
00025 public partial class EventHandlerManagerForm : Form
00026 {
00027 #region Instance Data
00028
00029 private readonly EventHandlerPlugIn _EventHandlerPlugIn;
00030 private EventHandlersDataSet _EventHandlersDataSet;
00031 private AddEventHandlerControl _AddControl;
00032
00033 #endregion
00034
00035 #region Constructors
00036
00037 public EventHandlerManagerForm(EventHandlerPlugIn eventHandlerPlugIn)
00038 {
00039 InitializeComponent();
00040
00041 if (eventHandlerPlugIn == null)
00042 {
00043 throw new ArgumentNullException("eventHandlerPlugIn");
00044 }
00045
00046 _EventHandlerPlugIn = eventHandlerPlugIn;
00047
00048 detailsViewToolStripMenuItem.Checked = Settings.Default.DetailsVisible;
00049
00050 mainSplitContainer.Panel2Collapsed = !Settings.Default.StatusMessagesVisible;
00051 }
00052
00053 #endregion
00054
00055 #region Private Methods
00056
00057 private void LoadEventHandlerInformation()
00058 {
00059 _EventHandlerPlugIn.DoOnStatusChanged(new OnStatusChangedArgs("Loading event handler information.."));
00060
00061 treeView.Nodes.Clear();
00062 treeView.BeginUpdate();
00063
00064 try
00065 {
00066 _EventHandlersDataSet = _EventHandlerPlugIn.ProjectServer.Events.Read();
00067 }
00068 catch (SoapException exception)
00069 {
00070 MessageBox.Show(this,
00071 Errors.ProcessMSProjectErrors(exception),
00072 Resources.PluginTitle,
00073 MessageBoxButtons.OK,
00074 MessageBoxIcon.Error);
00075
00076 }
00077 catch (Exception exception)
00078 {
00079 MessageBox.Show(this,
00080 exception.Message,
00081 Resources.PluginTitle,
00082 MessageBoxButtons.OK,
00083 MessageBoxIcon.Error);
00084 }
00085
00086 string currentGroup = string.Empty;
00087 TreeNode currentNode = null;
00088
00089
00090
00091 foreach (string eventName in Enum.GetNames(typeof(PSEventID)))
00092 {
00093 string thisGroup = string.Empty;
00094
00095 foreach (char c in eventName)
00096 {
00097 if (char.IsUpper(c))
00098 {
00099 if (thisGroup.Length > 0)
00100 {
00101 break;
00102 }
00103 }
00104
00105 thisGroup = thisGroup + c;
00106 }
00107
00108 if (currentGroup == string.Empty || currentGroup != thisGroup)
00109 {
00110 currentNode = null;
00111
00112 foreach (TreeNode node in treeView.Nodes)
00113 {
00114 if (node.Text == thisGroup)
00115 {
00116 currentNode = node;
00117 break;
00118 }
00119 }
00120
00121 if (currentNode == null)
00122 {
00123 if (!thisGroup.StartsWith("Deprecated"))
00124 {
00125 currentNode = treeView.Nodes.Add(thisGroup);
00126 currentNode.ImageKey = "folder.png";
00127 currentNode.SelectedImageKey = "folder_edit.png";
00128 }
00129 }
00130
00131 currentGroup = thisGroup;
00132 }
00133
00134 if (currentNode != null)
00135 {
00136 AddEvent(eventName, thisGroup, currentNode);
00137 }
00138
00139 _EventHandlerPlugIn.DoOnStatusChanged(new OnStatusChangedArgs(string.Empty));
00140 }
00141
00142 treeView.EndUpdate();
00143 }
00144
00145 private void AddEvent(string name, string thisGroup, TreeNode currentNode)
00146 {
00147 string eventName = name.Replace(thisGroup, "");
00148
00149 TreeNode eventNode = currentNode.Nodes.Add(eventName);
00150
00151 PSEventID thisEvent = (PSEventID)Enum.Parse(typeof(PSEventID), name);
00152
00153 bool isRegisteredEvent = false;
00154 int count = 0;
00155
00156 if (_EventHandlersDataSet != null)
00157 {
00158 foreach (EventHandlersDataSet.EventHandlersRow eventHandler in _EventHandlersDataSet.EventHandlers)
00159 {
00160 if (eventHandler.EventId == (int)thisEvent)
00161 {
00162 isRegisteredEvent = true;
00163 count++;
00164 }
00165 }
00166 }
00167
00168 if (isRegisteredEvent)
00169 {
00170 if (count > 1)
00171 {
00172 eventNode.ImageKey = "shape_group.png";
00173 eventNode.SelectedImageKey = "shape_group.png";
00174 }
00175 else
00176 {
00177 eventNode.ImageKey = "shape_handles.png";
00178 eventNode.SelectedImageKey = "shape_handles.png";
00179 }
00180 }
00181 else
00182 {
00183 eventNode.ImageKey = "bullet_blue.png";
00184 eventNode.SelectedImageKey = "bullet_blue.png";
00185 }
00186
00187 eventNode.Tag = thisEvent;
00188 }
00189
00190 private void LoadEventDetail(PSEventID psEventID)
00191 {
00192 eventsDetailsTabControl.TabPages.Clear();
00193 eventsDetailsTabControl.BringToFront();
00194
00195 foreach (EventHandlersDataSet.EventHandlersRow eventHandler in _EventHandlersDataSet.EventHandlers)
00196 {
00197 if (eventHandler.EventId == (int)psEventID)
00198 {
00199 TabPage tabPage = new TabPage(eventHandler.AssemblyName.Substring(0, eventHandler.AssemblyName.IndexOf(",")));
00200
00201 EventsDetailsControl control = new EventsDetailsControl(eventHandler);
00202
00203 control.Dock = DockStyle.Fill;
00204
00205 tabPage.Controls.Add(control);
00206
00207 eventsDetailsTabControl.TabPages.Add(tabPage);
00208 }
00209 }
00210 }
00211
00212 private void UnloadAddEventHandlerControl()
00213 {
00214 if (_AddControl != null)
00215 {
00216 mainSplitContainer.Panel2.Controls.Remove(_AddControl);
00217 _AddControl.Dispose();
00218 }
00219 }
00220
00221 #endregion
00222
00223 #region Event Handlers
00224
00225 private void detailsViewToolStripMenuItem_Click(object sender, EventArgs e)
00226 {
00227 mainSplitContainer.Panel2Collapsed = !detailsViewToolStripMenuItem.Checked;
00228 }
00229
00230 private void EventHandlerManagerForm_FormClosing(object sender, FormClosingEventArgs e)
00231 {
00232 Settings.Default.StatusMessagesVisible = !mainSplitContainer.Panel2Collapsed;
00233 Settings.Default.Save();
00234
00235 UnloadAddEventHandlerControl();
00236 }
00237
00238 private void EventHandlerManagerForm_Shown(object sender, EventArgs e)
00239 {
00240 Cursor = Cursors.WaitCursor;
00241
00242 LoadEventHandlerInformation();
00243
00244 Cursor = Cursors.Default;
00245 }
00246
00247 private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
00248 {
00249 removeToolStripButton.Enabled = e.Node.ImageKey != "bullet_blue.png";
00250
00251 if (e.Node.Tag == null || !removeToolStripButton.Enabled)
00252 {
00253 noEventsLabel.BringToFront();
00254 return;
00255 }
00256
00257 PSEventID selectedEvent = (PSEventID)e.Node.Tag;
00258
00259 LoadEventDetail(selectedEvent);
00260 }
00261
00262 private void addToolStripButton_Click(object sender, EventArgs e)
00263 {
00264 _AddControl = new AddEventHandlerControl(_EventHandlerPlugIn);
00265
00266 _AddControl.OnCancelClick += addControl_OnCancelClick;
00267 _AddControl.OnOkClick += _AddControl_OnOkClick;
00268
00269 _AddControl.Dock = DockStyle.Fill;
00270
00271 mainSplitContainer.Panel2.Controls.Add(_AddControl);
00272
00273 _AddControl.BringToFront();
00274 }
00275
00276 private void _AddControl_OnOkClick(object sender, EventArgs e)
00277 {
00278 UnloadAddEventHandlerControl();
00279 }
00280
00281 void addControl_OnCancelClick(object sender, EventArgs e)
00282 {
00283 UnloadAddEventHandlerControl();
00284 }
00285
00286 #endregion
00287 }
00288 }