ProjectView.cs

00001 using System;
00002 using System.Collections.Generic;
00003 using System.ComponentModel;
00004 using System.Data;
00005 using System.Drawing;
00006 using System.Text;
00007 using System.Windows.Forms;
00008 using Shared;
00009 using System.IO;
00010 
00011 namespace Client
00012 {
00016     public partial class ProjectView : Form
00017     {
00019         private IAccessHandler accessHandler;
00021         private ProjectInfo projectinfo;
00023         private bool created = false;
00025         private bool dirty = false;
00027         private RoleInfo currentRole;
00028 
00030         public ProjectInfo Projectinfo
00031         {
00032             get { return projectinfo; }
00033             set { projectinfo = value; }
00034         }
00036         public bool Saved
00037         {
00038             get { return created; }
00039         }
00040 
00045         public ProjectView(IAccessHandler accessHandler)
00046         {
00047             this.accessHandler = accessHandler;
00048             this.created = false;
00049             InitializeComponent();
00050             tagContainer1.Enabled = false;
00051             btnSave.Text = "Create project";
00052             lnkSubmit.Enabled = false;
00053             txtPITitle.Focus();
00054         }
00055 
00062         public ProjectView(IAccessHandler accessHandler, ProjectInfo projectinfo)
00063         {
00064             this.accessHandler = accessHandler;
00065             this.projectinfo = projectinfo;
00066             this.created = true;
00067             InitializeComponent();
00068             // Fill the supplied projectinfo into the textboxes. 
00069             txtPITitle.Text = projectinfo.Title;
00070             txtPISubject.Text = projectinfo.subject;
00071             txtPIDepartment.Text = projectinfo.department;
00072             datePIStartDate.Value = projectinfo.startDate;
00073             txtPISynopsis.Text = projectinfo.synopsis;
00074             dirty = false;
00075             UpdateTagContainer();
00076             theDisAndEnabler(projectinfo.submitted);
00077             txtPITitle.Focus();
00078 
00079             RoleInfo[] roles = accessHandler.GetRoles(this.projectinfo.id);
00080             foreach (RoleInfo role in roles)
00081                 if (accessHandler.WhoAmI == role.UserName)
00082                     this.currentRole = role;
00083                     
00084             // If the person does not have a role in the project or 
00085             // if he is either supervisor or member the following is executed      
00086             if (String.IsNullOrEmpty(this.currentRole.UserName) || this.currentRole.Type != RoleType.Creator) 
00087             {                                                                                                 
00088                 lnkSubmit.Enabled = false;
00089                 btnAddMember.Visible = btnRemoveMember.Visible = false;
00090                 panLayout.Height = 0;
00091                 if (String.IsNullOrEmpty(this.currentRole.UserName) || this.currentRole.Type != RoleType.Member)
00092                 {
00093                     txtPITitle.ReadOnly = true;
00094                     txtPISubject.ReadOnly = true;
00095                     txtPIDepartment.ReadOnly = true;
00096                     datePIStartDate.Enabled = false;
00097                     txtPISynopsis.ReadOnly = true;
00098                     btnSave.Hide();
00099                     txtPISynopsis.Height += 29; //size of btnSave
00100                     btnAddReference.Enabled = false;
00101                     btnReview.Enabled = false;
00102                 }
00103             }
00104 
00105             if (this.currentRole.Type == RoleType.Supervisor)
00106             {
00107                 btnAddReference.Image = null;
00108                 btnAddReference.Text = "    Add Suggestion";
00109                 btnAddReference.Enabled = true;
00110                 btnAddReference.Image = global::Client.Properties.Resources.suggestion;
00111             }
00112             if(this.currentRole.Type == RoleType.Supervisor || string.IsNullOrEmpty(currentRole.UserName)) 
00113             {
00114                 btnRemoveSelectedBib.Hide();
00115                 btnReview.Hide();
00116             }
00117 
00118         }
00119 
00120         #region Tab controle
00121 
00127         private void tabControl1_Selected(object sender, TabControlEventArgs e)
00128         {
00129             if (tabControl1.SelectedTab == tabPage3)
00130             {
00131                 UpdateRoleTable();
00132             }
00133             else if (tabControl1.SelectedTab == tabPage4)
00134             {
00135                 UpdateReferenceTable();
00136             }
00137         }
00138 
00144         private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e)
00145         {
00146             if (e.TabPage == tabPage1 && !created)
00147             {
00148                 e.Cancel = !Save();
00149             }
00150         }
00151         #endregion
00152 
00153         #region Open and Save
00154 
00160         private void setDirty(object sender, EventArgs e)
00161         {
00162             dirty = true;
00163             btnSave.Enabled = true;
00164         }
00165 
00170         private bool Save()
00171         {
00172             string title = txtPITitle.Text;
00173             string subject = txtPISubject.Text;
00174             string department = txtPIDepartment.Text;
00175             string synopsis = txtPISynopsis.Text;
00176             DateTime start = datePIStartDate.Value;
00177             Messages em;
00178 
00179             if (title.Trim().Length < 1)
00180             {
00181                 MessageBox.Show("Please fill in the \"Title\" field", "Missing information", MessageBoxButtons.OK, MessageBoxIcon.Error);
00182                 return false;
00183             }
00184             if (subject.Trim().Length < 1)
00185             {
00186                 MessageBox.Show("Please fill in the \"Subject\" field", "Missing information", MessageBoxButtons.OK, MessageBoxIcon.Error);
00187                 return false;
00188             }
00189             if (department.Trim().Length < 1)
00190             {
00191                 MessageBox.Show("Please fill in the \"Department\" field", "Missing information", MessageBoxButtons.OK, MessageBoxIcon.Error);
00192                 return false;
00193             }
00194             ProjectInfo newInfo;
00195             if (!created)
00196             {
00197                 newInfo = new ProjectInfo(0, start, DateTime.MinValue, subject, title, department, synopsis, false);
00198                 int id;
00199                 em = accessHandler.CreateProject(newInfo, out id);
00200                 newInfo.id = id;
00201             }
00202             else
00203             {
00204                 newInfo = new ProjectInfo(projectinfo.id, start, new DateTime(), subject, title, department, synopsis, false);
00205                 em = accessHandler.UpdateProject(newInfo);
00206             }
00207             if (em == Messages.OK)
00208             {
00209                 projectinfo = newInfo;
00210                 created = true;
00211                 dirty = false;
00212                 btnSave.Enabled = false;
00213                 btnSave.Text = "Save details"; // Put this here... just to be safe - we might end up with a wrongly titled button otherwise
00214                 tagContainer1.Enabled = true;
00215  
00216             } else 
00217             {
00218                 MessageBox.Show("Something went wrong.\r\n" + em, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
00219                 return false;
00220             }
00221             return true;
00222 
00223         }
00224 
00225         private void btnClose_Click(object sender, EventArgs e)
00226         {
00227             this.Close();
00228         }
00229 
00230         private void btnSave_Click(object sender, EventArgs e)
00231         {
00232             Save();
00233         }
00234 
00235         private void ProjectView_FormClosing(object sender, FormClosingEventArgs e)
00236         {
00237             if (dirty)
00238             {
00239                 DialogResult result = MessageBox.Show("You have unsaved changes. Do you wish to save before closing the project window?", "Unsaved changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
00240                 if (result == DialogResult.Cancel)
00241                     e.Cancel = true;
00242                 else if (result == DialogResult.Yes)
00243                     if (!Save())
00244                         e.Cancel = true;
00245             }
00246         }
00247 
00248         #endregion
00249 
00250         #region Tags
00251 
00257         private void tagContainer1_TagAdded(object sender, TagControls.TagContainerEventArgs e)
00258         {
00259             accessHandler.AddTag(tagContainer1.AddedTag.Name, Projectinfo.id);
00260         }
00261 
00267         private void tagContainer1_TagRemoved(object sender, TagControls.TagContainerEventArgs e)
00268         {
00269             this.accessHandler.RemoveTag(tagContainer1.RemovedTag.Name, Projectinfo.id);
00270         }
00271 
00275         private void UpdateTagContainer()
00276         {
00277             int i;
00278             List<TagInfo> tags = new List<TagInfo>();
00279             TagInfo[] TagsFromHandler;
00280 
00281             TagsFromHandler = accessHandler.GetTags(null,projectinfo.id,null);
00282             
00283             for (i = 0; i < TagsFromHandler.Length; i++)
00284             {
00285                 tags.Add(TagsFromHandler[i]);
00286             }
00287             tagContainer1.Username = this.accessHandler.WhoAmI;
00288             tagContainer1.Tags = tags;
00289         }
00290 
00291         #endregion
00292 
00293         #region Reference
00294 
00298         private void UpdateReferenceTable()
00299         {
00300             DataTable literature = new DataTable();
00301             literature.Columns.Add(" ", typeof(bool)); // Is it used?
00302             literature.Columns.Add("Title", typeof(string)); // What's it called?
00303             literature.Columns.Add("Type", typeof(string)); // When was it written?
00304             literature.Columns.Add("Author", typeof(string)); // Who wrote this stuff?!
00305             literature.Columns.Add("Rating", typeof(string)); // Rating...
00306             literature.Columns.Add("object", typeof(object));
00307 
00308             ReferenceInfo[] references = accessHandler.ListReferences(projectinfo.id);
00309             foreach (ReferenceInfo reference in references)
00310             {
00311                 LiteratureInfo thisLiterature = accessHandler.GetLiteratureInfo(reference.literature);
00312                 literature.Rows.Add(reference.used, thisLiterature.title, "Reference", thisLiterature.author, "N/A", reference);
00313             }
00314 
00315             ReviewInfo[] reviews = accessHandler.ListReviews(projectinfo.id);
00316             foreach (ReviewInfo review in reviews)
00317             {
00318                 LiteratureInfo thisReview = accessHandler.GetLiteratureInfo(review.literature);
00319                 literature.Rows.Add(review.used, thisReview.title, "Review", thisReview.author, review.rating, review);
00320             }
00321             
00322             SuggestionInfo[] suggestions = accessHandler.ListSuggestions(projectinfo.id);
00323             foreach (SuggestionInfo suggestion in suggestions)
00324             {
00325                 LiteratureInfo thisSuggestion = accessHandler.GetLiteratureInfo(suggestion.literature);
00326                 literature.Rows.Add(suggestion.used, thisSuggestion.title, "Suggestion", thisSuggestion.author, "N/A", suggestion);
00327             }
00328 
00329             
00330             dgvLiterature.DataSource = literature;
00331 
00332             dgvLiterature.Columns[0].Width = 20;
00333             dgvLiterature.Columns[2].Width = 75;
00334             dgvLiterature.Columns[3].Width = 150;
00335             dgvLiterature.Columns[4].Width = 75;
00336             dgvLiterature.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
00337             dgvLiterature.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
00338             dgvLiterature.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
00339             dgvLiterature.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
00340             dgvLiterature.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
00341             dgvLiterature.Columns[0].Resizable = DataGridViewTriState.False;
00342             dgvLiterature.Columns[0].ReadOnly = false;
00343             dgvLiterature.Columns[1].ReadOnly = true;
00344             dgvLiterature.Columns[2].ReadOnly = true;
00345             dgvLiterature.Columns[3].ReadOnly = true;
00346             dgvLiterature.Columns[4].ReadOnly = true;
00347             dgvLiterature.Columns[5].Visible = false;
00348 
00349             // Set the information panel visible or not, as applicable
00350             if (references.Length < 1 && reviews.Length < 1)
00351                 panInfoLiterature.Visible = true;
00352             else
00353                 panInfoLiterature.Visible = false;
00354 
00355             // If there are no references, btnRemoveSelectedBib is disabled
00356             if(references.Length == 0 && reviews.Length == 0)
00357                 btnRemoveSelectedBib.Enabled = false;
00358             else
00359                 btnRemoveSelectedBib.Enabled = true;
00360         }
00361 
00362         private void btnAddReference_Click(object sender, EventArgs e)
00363         {
00364             if (this.currentRole.Type == RoleType.Supervisor)
00365             {
00366                 CreateSuggestion cs = new CreateSuggestion(accessHandler.ListLiterature());
00367                 cs.ShowDialog();
00368 
00369                 if (cs.Literature != -1)
00370                 {
00371                     SuggestionInfo newSuggestion = new SuggestionInfo(projectinfo.id, cs.Literature, DateTime.Now, false, "New suggestion", accessHandler.WhoAmI, cs.Reason);
00372 
00373                     accessHandler.CreateSuggestion(newSuggestion);
00374 
00375                     UpdateReferenceTable();
00376                 }
00377             }
00378             else
00379             {
00380                 ISearchable[] allItems = accessHandler.ListItems(ResultType.Literature);
00381                 ReferenceInfo[] refs = accessHandler.ListReferences(projectinfo.id);
00382 
00383                 Reference addRef = new Reference(allItems, refs, projectinfo.id);
00384 
00385                 addRef.ShowDialog();
00386 
00387                 if (addRef.ID > -1)
00388                 {
00389                     ReferenceInfo addedRef = new ReferenceInfo(projectinfo.id, addRef.ID, DateTime.Now, false, "Noget");
00390                     accessHandler.CreateReference(addedRef);
00391 
00392                     UpdateReferenceTable();
00393                 }
00394                 else if (addRef.ID == -2)
00395                 {
00396                     LiteratureEntryView lev = new LiteratureEntryView(accessHandler);
00397                     lev.ShowDialog();
00398                 }
00399             }
00400         }
00401 
00402         private void btnExportBibliography_Click(object sender, EventArgs e)
00403         {
00404             cmExportBibliography.Items.Clear();
00405 
00406             foreach(string theName in Enum.GetNames(typeof(BibliographyType)))
00407             {
00408                 ToolStripMenuItem theItem = new ToolStripMenuItem(theName);
00409                 theItem.Click += new EventHandler(exportBibliography_Click);
00410                 cmExportBibliography.Items.Add(theItem);
00411             }
00412 
00413             cmExportBibliography.Show(btnExportBibliography, btnExportBibliography.Margin.Left, btnExportBibliography.Height);
00414         }
00415 
00416          private void exportBibliography_Click(object sender, EventArgs e)
00417         {
00418             List<LiteratureInfo> literature = new List<LiteratureInfo>();
00419             ReferenceInfo[] references = accessHandler.ListReferences(this.projectinfo.id);
00420             foreach (ReferenceInfo reference in references)
00421             {
00422                 if (reference.used)
00423                 {
00424                     LiteratureInfo thisLiterature = accessHandler.GetLiteratureInfo(reference.literature);
00425                     literature.Add(thisLiterature);
00426                 }
00427             }
00428 
00429             // Let's get the rendered bibliography, with sender's tag as the type
00430             string filename;
00431             ToolStripMenuItem theMenu = (ToolStripMenuItem)sender;
00432             BibliographyExporter exporter = new BibliographyExporter(literature);
00433             exporter.ProjectTitle = this.projectinfo.title;
00434             string renderedBibliography = exporter.getBibliography((BibliographyType)Enum.Parse(typeof(BibliographyType), theMenu.Tag.ToString()), out filename);
00435 
00436             if (renderedBibliography == String.Empty && exporter.Extension == String.Empty && filename == String.Empty)
00437             {
00438                 MessageBox.Show("Unable to save to the selected format. This will generally only ever happen if you somehow managed to save to a non-existant format!", "Could not save!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00439                 return;
00440             }
00441 
00442             // Now show the user a save file as dialog, to select where it'll be saved...
00443             SaveFileDialog sfd = new SaveFileDialog();
00444             Stream saveFile;
00445             sfd.FileName = filename;
00446             // This is ugly, i know... but filter takes this horrible format, so i can't be bothered to make the code pretty either
00447             sfd.Filter = theMenu.Tag.ToString() + " (*." + exporter.Extension + ")|*." + exporter.Extension;
00448 
00449             if (sfd.ShowDialog() == DialogResult.OK)
00450             {
00451                 // Check wether we can open the file for writing...
00452                 if ((saveFile = sfd.OpenFile()) != null)
00453                 {
00454                     StreamWriter sw = new StreamWriter(saveFile);
00455                     sw.Write(renderedBibliography);
00456                     sw.Flush();
00457                     sw.Close();
00458                     saveFile.Close();
00459                 }
00460             }
00461         }
00462 
00463         private void dgvLiterature_CellContentClick(object sender, DataGridViewCellEventArgs e)
00464         {
00465             if (dgvLiterature.SelectedRows.Count == 1 && e.ColumnIndex == 0)
00466             {
00467                 if (dgvLiterature.SelectedRows[0].Cells["object"].Value is ReferenceInfo)
00468                 {
00469                     ReferenceInfo theReference = (ReferenceInfo)dgvLiterature.SelectedRows[0].Cells["object"].Value;
00470                     // Black magic which casts the contents of the cell from an object to a bool, negatives that bool, then casts it back to an object and puts it back in itself again
00471                     dgvLiterature.SelectedRows[0].Cells[0].Value = (object)!(bool)dgvLiterature.SelectedRows[0].Cells[0].Value;
00472                     theReference.used = (bool)dgvLiterature.SelectedRows[0].Cells[0].Value;
00473                     accessHandler.UpdateReference(theReference);
00474                 }
00475                 else if (dgvLiterature.SelectedRows[0].Cells["object"].Value is ReviewInfo)
00476                 {
00477                     ReviewInfo theReview = (ReviewInfo)dgvLiterature.SelectedRows[0].Cells["object"].Value;
00478                     // Black magic which casts the contents of the cell from an object to a bool, negatives that bool, then casts it back to an object and puts it back in itself again
00479                     dgvLiterature.SelectedRows[0].Cells[0].Value = (object)!(bool)dgvLiterature.SelectedRows[0].Cells[0].Value;
00480                     theReview.used = (bool)dgvLiterature.SelectedRows[0].Cells[0].Value;
00481                     accessHandler.UpdateReview(theReview);
00482                 }
00483             }
00484         }
00485 
00486         private void dgvLiterature_SelectionChanged(object sender, EventArgs e)
00487         {
00488             // You can only select one, and only project members can delete stuff!
00489             // Supervisors can delete, but not remove suggestions (project members only for this one)
00490             if(dgvMembers.SelectedRows.Count == 1 && (this.currentRole.Type == RoleType.Member || this.currentRole.Type == RoleType.Creator))
00491                 btnRemoveMember.Enabled = true;
00492             else
00493                 btnRemoveMember.Enabled = false;
00494         }
00495 
00496         private void btnRemoveSelectedBib_Click(object sender, EventArgs e) 
00497         {
00498             if (this.currentRole.Type == RoleType.Member || this.currentRole.Type == RoleType.Creator)
00499             {
00500                 DialogResult res = MessageBox.Show("You are about to remove the reference to \"" + dgvLiterature.SelectedRows[0].Cells["title"].Value.ToString() + "\"\n from the project. Are you sure?\n(The literature entry itself will not be deleted)", "Remove reference?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
00501 
00502                 if (res == DialogResult.Yes)
00503                 {
00504                     object obj = dgvLiterature.SelectedRows[0].Cells["object"].Value;
00505                     if (obj is ReferenceInfo)
00506                     {
00507                         accessHandler.DeleteReference(((ReferenceInfo)obj).project, ((ReferenceInfo)obj).literature);
00508                     }
00509                     else if (obj is ReviewInfo)
00510                     {
00511                         accessHandler.DeleteReference(((ReviewInfo)obj).project, ((ReviewInfo)obj).literature);
00512                     }
00513                     else if (obj is SuggestionInfo)
00514                     {
00515                         accessHandler.DeleteReference(((SuggestionInfo)obj).project, ((SuggestionInfo)obj).literature);
00516                     }
00517                     UpdateReferenceTable();
00518                 }
00519             }
00520         }
00521 
00522         #endregion
00523 
00524         #region Roles
00525 
00529         private void UpdateRoleTable()
00530         {   
00531             DataTable people = new DataTable();
00532             people.Columns.Add(" ", typeof(Image));
00533             people.Columns.Add("Username", typeof(string));
00534             people.Columns.Add("Role", typeof(RoleType));
00535             people.Columns.Add("object", typeof(RoleInfo));
00536             
00537             object image = global::Client.Properties.Resources.ResourceManager.GetObject("user");
00538             RoleInfo[] roles = accessHandler.GetRoles(projectinfo.id);
00539             foreach (RoleInfo role in roles)
00540             {
00541                 people.Rows.Add(image, role.UserName, role.Type, role);
00542             }
00543             dgvMembers.DataSource = people;
00544 
00545             dgvMembers.Columns[0].Width = 20;
00546             dgvMembers.Columns[2].Width = 150;
00547             dgvMembers.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
00548             dgvMembers.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
00549             dgvMembers.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
00550             dgvMembers.Columns[0].Resizable = DataGridViewTriState.False;
00551             dgvMembers.Columns[0].ReadOnly = true;
00552             dgvMembers.Columns[1].ReadOnly = true;
00553             dgvMembers.Columns[2].ReadOnly = true;
00554             dgvMembers.Columns[3].Visible = false;
00555         }
00556 
00557         private void btnAddMember_Click(object sender, EventArgs e)
00558         {
00559             ISearchable[] allUsers = accessHandler.ListItems(ResultType.Person);
00560             RoleInfo[] Members = accessHandler.GetRoles(projectinfo.id);
00561             RoleType theRole = RoleType.Member;
00562 
00563             GetAUser gau = new GetAUser(allUsers, Members);
00564             gau.ShowDialog();
00565 
00566             foreach(string s in gau.selectedUsers)
00567             {
00568                 if (gau.addSupervisor)
00569                     theRole = RoleType.Supervisor;
00570 
00571                 accessHandler.AssignUser(s, this.projectinfo.id, theRole);
00572                 UpdateRoleTable();
00573             }
00574         }
00575         private void btnRemoveMember_Click(object sender, EventArgs e)
00576         {
00577             DialogResult res = MessageBox.Show("You are about to remove \"" + dgvMembers.SelectedRows[0].Cells["Username"].Value.ToString() + "\" from the project. Are you sure?", "Remove member?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
00578 
00579             if (res == DialogResult.Yes)
00580             {
00581                 accessHandler.UnassignUser(dgvMembers.SelectedRows[0].Cells["Username"].Value.ToString(), this.projectinfo.id);
00582                 UpdateRoleTable();
00583             }
00584         }
00585         private void dgvMembers_SelectionChanged(object sender, EventArgs e)
00586         {   
00587             if (/*this.currentRole.Type == RoleType.Creator &&*/ dgvMembers.SelectedRows.Count == 1 && ((RoleType)dgvMembers.SelectedRows[0].Cells["Role"].Value == RoleType.Member || (RoleType)dgvMembers.SelectedRows[0].Cells["Role"].Value == RoleType.Supervisor) )
00588                 btnRemoveMember.Enabled = true;
00589             else
00590                 btnRemoveMember.Enabled = false;
00591               
00592         }
00593 
00594         #endregion
00595 
00596         #region Submit project
00597 
00598         private void lnkSubmit_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
00599         {
00600             if (MessageBox.Show("Are you sure that you want to sudmit your project?\nIf you sudmit you the project you will not be able to edit in the project anymore.",
00601                                  "Submit project?", MessageBoxButtons.YesNo,
00602                                  MessageBoxIcon.Question, MessageBoxDefaultButton.Button3) == DialogResult.Yes)
00603             {
00604                 projectinfo.submitted = true;
00605                 accessHandler.UpdateProject(projectinfo);
00606 
00607                 theDisAndEnabler(projectinfo.submitted);
00608             }
00609         }
00610 
00615         private void theDisAndEnabler(bool submitted)
00616         {             
00617             btnAddMember.Enabled    = !submitted;
00618             btnRemoveMember.Enabled = !submitted;
00619             txtPITitle.Enabled      = !submitted;
00620             txtPISubject.Enabled    = !submitted;
00621             txtPIDepartment.Enabled = !submitted;
00622             datePIStartDate.Enabled = !submitted;
00623             txtPISynopsis.Enabled   = !submitted;
00624             lnkSubmit.Enabled       = !submitted;
00625             btnSave.Enabled         = !submitted;
00626         }
00627 
00628         #endregion
00629 
00635         private void dgvLiterature_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
00636         {
00637             if (dgvLiterature.SelectedRows.Count == 1)
00638             {
00639                 int project, literature;
00640                 object obj = (object)dgvLiterature.SelectedRows[0].Cells["object"].Value;
00641                 if (obj is ReferenceInfo)
00642                 {
00643                     literature = ((ReferenceInfo)obj).literature;
00644                     project = ((ReferenceInfo)obj).project;
00645                 }
00646                 else if (obj is ReviewInfo)
00647                 {
00648                     literature = ((ReviewInfo)obj).literature;
00649                     project = ((ReviewInfo)obj).project;
00650                 }
00651                 else if (obj is SuggestionInfo)
00652                 {
00653                     literature = ((SuggestionInfo)obj).literature;
00654                     project = ((SuggestionInfo)obj).project;
00655                 }
00656                 else
00657                     return;
00658                     
00659                 LiteratureEntryView lev = new LiteratureEntryView(accessHandler, literature, project, false);
00660                 lev.ShowDialog();
00661             }
00662         }
00663 
00664         private void btnReview_Click(object sender, EventArgs e)
00665         {
00666             ISearchable[] allItems = accessHandler.ListItems(ResultType.Literature);
00667             ReviewInfo[] Reviews = accessHandler.ListReviews(projectinfo.id);
00668 
00669             Reference addRef = new Reference(allItems, Reviews, projectinfo.id);
00670 
00671             addRef.ShowDialog();
00672 
00673             if (addRef.ID != -1)
00674             {
00675                 ReferenceInfo addedRef = new ReferenceInfo(projectinfo.id, addRef.ID, DateTime.Now, false, "Noget");
00676                 accessHandler.CreateReference(addedRef);
00677 
00678                 LiteratureEntryView lev = new LiteratureEntryView(accessHandler, addedRef.literature, addedRef.project, true);
00679                 lev.ShowDialog();
00680 
00681                 UpdateReferenceTable();
00682             }
00683         }
00684 
00685         private void ProjectView_Shown(object sender, EventArgs e)
00686         {
00687             txtPITitle.Focus();
00688             contextPeople_Opening(null, null);
00689         }
00690 
00691         private void contextPeople_Opening(object sender, CancelEventArgs e)
00692         {
00693             contextPeople.Items.Clear();
00694             ToolStripMenuItem add = new ToolStripMenuItem("Add Member...");
00695             add.Enabled = true;
00696             add.Click += new EventHandler(btnAddMember_Click);
00697             contextPeople.Items.Add(add);
00698             contextPeople.Items.Add(new ToolStripSeparator());
00699             if (dgvMembers.SelectedRows.Count == 1)
00700             {
00701                 RoleInfo obj = (RoleInfo)dgvMembers.SelectedRows[0].Cells["object"].Value;
00702 
00703                 ToolStripMenuItem tsmi2 = new ToolStripMenuItem("Remove");
00704                 tsmi2.Click += new EventHandler(delegate(object o, EventArgs ea) 
00705                 {
00706                     accessHandler.UnassignUser(obj.UserName, obj.Project);
00707                     UpdateRoleTable();
00708                 });
00709 
00710                 if (obj.Type == RoleType.Member)
00711                 {
00712                     ToolStripMenuItem tsmi = new ToolStripMenuItem("Change to Supervisor");
00713                     tsmi.Enabled = true;
00714                     tsmi.Click += new EventHandler(delegate(object o, EventArgs ea) 
00715                     {
00716                         accessHandler.AssignUser(obj.UserName, obj.Project, RoleType.Supervisor);
00717                         UpdateRoleTable();
00718                     });
00719                     contextPeople.Items.Add(tsmi);
00720                     contextPeople.Items.Add(tsmi2);
00721                 }
00722                 else if (obj.Type == RoleType.Supervisor)
00723                 {
00724                     ToolStripMenuItem tsmi = new ToolStripMenuItem("Change to Member");
00725                     tsmi.Enabled = true;
00726                     tsmi.Click += new EventHandler(delegate(object o, EventArgs ea)
00727                     {
00728                         accessHandler.AssignUser(obj.UserName, obj.Project, RoleType.Member);
00729                         UpdateRoleTable();
00730                     });
00731                     contextPeople.Items.Add(tsmi);
00732                     contextPeople.Items.Add(tsmi2);
00733                 }
00734                 else
00735                 {
00736                     ToolStripMenuItem tsmi = new ToolStripMenuItem("Creator cannot be changed...");
00737                     tsmi.Enabled = false;
00738                     contextPeople.Items.Add(tsmi);
00739                 }
00740             }
00741             else if (dgvMembers.SelectedRows.Count > 1)
00742             {
00743                 ToolStripMenuItem tsmi2 = new ToolStripMenuItem("Remove");
00744                 tsmi2.Click += new EventHandler(delegate(object o, EventArgs ea)
00745                 {
00746                     foreach (DataGridViewRow dgvr in dgvMembers.SelectedRows)
00747                     {
00748                         RoleInfo obj = (RoleInfo)dgvr.Cells["object"].Value;
00749                         if (obj.Type == RoleType.Creator)
00750                             continue;
00751                         accessHandler.UnassignUser(obj.UserName, obj.Project);
00752                     }
00753                     UpdateRoleTable();
00754                 });
00755 
00756                 ToolStripMenuItem tsmi = new ToolStripMenuItem("Set to Members");
00757                 tsmi.Enabled = true;
00758                 tsmi.Click += new EventHandler(delegate(object o, EventArgs ea)
00759                 {
00760                     foreach (DataGridViewRow dgvr in dgvMembers.SelectedRows)
00761                     {
00762                         RoleInfo obj = (RoleInfo)dgvr.Cells["object"].Value;
00763                         if (obj.Type == RoleType.Creator)
00764                             continue;
00765                         accessHandler.AssignUser(obj.UserName, obj.Project, RoleType.Member);
00766                     }
00767                     UpdateRoleTable();
00768                 });
00769 
00770 
00771                 ToolStripMenuItem tsmi3 = new ToolStripMenuItem("Set to Supervisors");
00772                 tsmi3.Enabled = true;
00773                 tsmi3.Click += new EventHandler(delegate(object o, EventArgs ea)
00774                 {
00775                     foreach (DataGridViewRow dgvr in dgvMembers.SelectedRows)
00776                     {
00777                         RoleInfo obj = (RoleInfo)dgvr.Cells["object"].Value;
00778                         if (obj.Type == RoleType.Creator)
00779                             continue;
00780                         accessHandler.AssignUser(obj.UserName, obj.Project, RoleType.Supervisor);
00781                     }
00782                     UpdateRoleTable();
00783                 });
00784                 contextPeople.Items.Add(tsmi);
00785                 contextPeople.Items.Add(tsmi3);
00786                 contextPeople.Items.Add(new ToolStripSeparator());
00787                 contextPeople.Items.Add(tsmi2);
00788 
00789             }
00790 
00791         }
00792     }
00793 }

Generated on Thu Dec 21 06:21:55 2006 for SCRAML by  doxygen 1.5.1-p1