MainWindow.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 TagControls;
00010 
00011 namespace Client
00012 {
00016     public partial class MainWindow : Form
00017     {
00019         IAccessHandler accessHandler;
00020 
00025         public MainWindow(IAccessHandler accessHandler)
00026         {
00027             InitializeComponent();
00028             
00029             this.accessHandler = accessHandler;
00030             PersonInfo pi = accessHandler.GetPersonInfo(accessHandler.WhoAmI);
00031             toolStripButton1.Text = pi.name + "...";
00032             UpdateStats();
00033         }
00034 
00040         private void MainWindow_Shown(object sender, EventArgs e)
00041         {
00042             UpdateStats();
00043             sidebarTree.Items[0].Selected = true;
00044         }
00045 
00046         #region Search
00047 
00048         private void searhBox_Enter(object sender, EventArgs e)
00049         {
00050             searchBox.SelectAll();
00051             if (searchBox.Text == "Search...")
00052             {
00053                 searchBox.Text = "";
00054             }
00055         }
00056 
00057         private void searchBox_Leave(object sender, EventArgs e)
00058         {
00059             if (searchBox.Text.Trim().Length == 0)
00060                 searchBox.Text = "Search...";
00061         }
00062 
00063         private void searchBox_KeyDown(object sender, KeyEventArgs e)
00064         {
00065             if (e.KeyCode != Keys.Return)
00066                 return;
00067             Search(sender, e);
00068         }
00069 
00070         private void Search(object sender, EventArgs ea)
00071         {
00072             if (searchBox.Text.ToLower().StartsWith("tag:"))
00073                 ShowSearch(searchBox.Text.Substring(4), ResultType.Tag, SearchTypes.ByTag);
00074             else if (searchBox.Text.ToLower().StartsWith("project:"))
00075                 ShowSearch(searchBox.Text.Substring(8), ResultType.Project, SearchTypes.FreeText);
00076             else if (searchBox.Text.ToLower().StartsWith("literature:"))
00077                 ShowSearch(searchBox.Text.Substring(11), ResultType.Literature, SearchTypes.FreeText);
00078             else if (searchBox.Text.ToLower().StartsWith("user:"))
00079                 ShowSearch(searchBox.Text.Substring(5), ResultType.Person, SearchTypes.FreeText);
00080             else
00081                 ShowSearch(searchBox.Text, ResultType.All, SearchTypes.FreeText);
00082             searchBox.SelectAll();
00083         }
00084 
00085         #endregion
00086   
00087         #region Tag cloud
00088 
00094         private void cmdTagCloud_Click(object sender, EventArgs e)
00095         {
00096             if (tagCloud1.Visible)
00097                 tagCloud1.Hide();
00098             else
00099             {
00100                 tagCloud1.Visible = true;
00101                 tagCloud1.Focus();
00102                 tagUpdater();
00103             }
00104         }
00105 
00111         private void tagCloud1_Leave(object sender, EventArgs e)
00112         {
00113             tagCloud1.Visible = false;
00114         }
00115 
00121         private void tagCloud1_TagSelected(object sender, TagCloudEventArgs e)
00122         {
00123             ShowSearch(tagCloud1.SelectedTag, ResultType.All, SearchTypes.ByTag);
00124             mainGridView.Focus();
00125         }
00126 
00130         private void tagUpdater()
00131         {
00132             TagInfo[] tagsFromHandler = accessHandler.GetTags(null, -1, null);
00133             tagCloud1.Username = this.accessHandler.WhoAmI;
00134             tagCloud1.Tags.Clear();
00135             tagCloud1.Tags.AddRange(tagsFromHandler);
00136             tagCloud1.Updater();
00137         }
00138 
00139         #endregion
00140 
00141         #region Toolbar
00142 
00148         private void toolStripButton3_Click(object sender, EventArgs e)
00149         {
00150             mainGridView_CellMouseDoubleClick(sender, null);
00151         }
00152         
00153         private void deletePressed(object sender, EventArgs e)
00154         {
00155             if (mainGridView.SelectedRows.Count > 0)
00156             {
00157                 if (MessageBox.Show("Are you sure you want to delete the selected items?", "Content Deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No)
00158                     return;
00159 
00160                 foreach (DataGridViewRow dgvr in mainGridView.SelectedRows)
00161                 {
00162                     DataRow row = ((DataRowView)dgvr.DataBoundItem).Row;
00163                     ISearchable obj = (ISearchable)row["object"];
00164                     if (obj is ProjectInfo)
00165                     {
00166                         Messages m = accessHandler.DeleteProject(((ProjectInfo)obj).id);
00167                         if (m != Messages.OK)
00168                         {
00169                             MessageBox.Show("The requested operation faild.\nCheck that you are allowed to preform the requested operation and try again.", "Operation Failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00170                             break;
00171                         }
00172                         else
00173                             currentData.Rows.Remove(row);
00174                     }
00175                     else if (obj is LiteratureInfo)
00176                     {
00177                         Messages m = accessHandler.DeleteLiterature(((LiteratureInfo)obj).id);
00178                         if (m != Messages.OK)
00179                         {
00180                             MessageBox.Show("The requested operation faild.\nCheck that you are allowed to preform the requested operation and try again.", "Operation Failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00181                             break;
00182                         }
00183                         else
00184                             currentData.Rows.Remove(row);
00185                     }
00186                     else if (obj is PersonInfo)
00187                     {
00188                         // No delete user yet ? 
00189                         //                        accessHandler.de(((PersonInfo)obj).username);
00190                     }
00191                 }
00192             }
00193         }
00194 
00195         private void exitToolStripMenuItem_Click(object sender, EventArgs e)
00196         {
00197             this.Close();
00198         }
00199 
00200         private void profileToolStripMenuItem_Click(object sender, EventArgs e)
00201         {
00202             Messages ml = Messages.Fail;
00203             DialogResult result = DialogResult.Ignore;
00204             PersonInfo info = accessHandler.GetPersonInfo(accessHandler.WhoAmI);
00205             while (ml != Messages.OK && result != DialogResult.OK)
00206             {
00207 
00208                 UserForm uf = new UserForm(info);
00209                 uf.ShowDialog();
00210 
00211                 if (uf.DialogResult != DialogResult.OK)
00212                     break;
00213 
00214                 info = uf.PersonInfo;
00215                 info.password = Utils.HashedValue(info.password);
00216 
00217                 ml = accessHandler.UpdatePerson(info);
00218                 if (ml != Messages.OK)
00219                 {
00220                     MessageBox.Show("An error occured!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00221                 }
00222                 else
00223                     MessageBox.Show("Profile was updated!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
00224             }
00225         }
00231         private void helpToolStripMenuItem1_Click(object sender, EventArgs e)
00232         {
00233             About aw = new About();
00234             aw.ShowDialog();
00235         }
00236 
00237 
00238         #endregion
00239 
00240         #region Stats and sidebar
00241 
00245         public void UpdateStats()
00246         {
00247             int NumberOfUsers = 0;
00248             int NumberOfProjects = 0;
00249             int NumberOfLitterature = 0;
00250             int NumberOfTags = 0;
00251             int NumberOfMyProjects = 0;
00252             int NumberOfMyLiterature = 0;
00253             //\todo FIXME: something to cache this stuff or a function to just get the COUNT of all stuff 
00254 
00255             StatisticsInfo si = accessHandler.GetStatistics();
00256 
00257             // Personal
00258             ISearchable[] srl = accessHandler.ListItems(ResultType.Project, accessHandler.WhoAmI);
00259             NumberOfMyProjects = srl.Length;
00260             srl = accessHandler.ListItems(ResultType.Literature, accessHandler.WhoAmI);
00261             NumberOfMyLiterature = srl.Length;
00262 
00263             //Tags
00264             NumberOfTags = si.TagCount;
00265             
00266             //Litterature
00267             NumberOfLitterature = si.LiteratureCount;
00268 
00269             //Projects
00270             NumberOfProjects = si.ProjectCount;
00271 
00272             //Users
00273             NumberOfUsers = si.UserCount;
00274 
00275             for (int i = 0; i < sidebarTree.Items.Count; i++ )
00276             {
00277                 ListViewItem lvi = sidebarTree.Items[i];
00278                 if (!(lvi.Tag is PreviousSearch))
00279                 {
00280                     switch (lvi.Tag.ToString())
00281                     {
00282                         case "AllProjects":
00283                             lvi.Text = "All Projects (" + NumberOfProjects + ")";
00284                             break;
00285                         case "AllLiterature":
00286                             lvi.Text = "All Literature (" + NumberOfLitterature + ")";
00287                             break;
00288                         case "MyProjects":
00289                             lvi.Text = "My Projects (" + NumberOfMyProjects + ")";
00290                             break;
00291                         case "MyLiterature":
00292                             lvi.Text = "My Literature (" + NumberOfMyLiterature + ")";
00293                             break;
00294                         case "AllUsers":
00295                             lvi.Text = "All Users (" + NumberOfUsers + ")";
00296                             break;
00297                         case "AllTags":
00298                             lvi.Text = "All Tags (" + NumberOfTags + ")";
00299                             break;
00300                         default:
00301                             break;
00302                     }
00303                 }
00304                 else
00305                 {
00306                     sidebarTree.Items.RemoveAt(i--);
00307                 }
00308             }
00309             sidebarTree.BeginUpdate();
00310             while (previousSearches.Count > 15)
00311             {
00312                 previousSearches.RemoveAt(15);
00313             }
00314             foreach (ListViewItem lvi in previousSearches)
00315             {
00316                 lvi.Group = sidebarTree.Groups[2];
00317                 sidebarTree.Items.Add(lvi);
00318             }
00319             sidebarTree.EndUpdate();
00320         }
00321 
00322         private void sidebarTree_SelectedIndexChanged(object sender, EventArgs e)
00323         {
00324             if (sidebarTree.SelectedItems.Count == 1)
00325             {
00326                 if (!(sidebarTree.SelectedItems[0].Tag is PreviousSearch))
00327                 {
00328                     switch (sidebarTree.SelectedItems[0].Tag.ToString())
00329                     {
00330                         case "MyProjects":
00331                             ShowProjects(accessHandler.WhoAmI, true);
00332                             break;
00333                         case "MyLiterature":
00334                             ShowLiterature(accessHandler.WhoAmI, true);
00335                             break;
00336                         case "AllProjects":
00337                             ShowProjects();
00338                             break;
00339                         case "AllLiterature":
00340                             ShowLiterature();
00341                             break;
00342                         case "AllUsers":
00343                             ShowUsers();
00344                             break;
00345                         case "AllTags":
00346                             ShowTags();
00347                             break;
00348                         default:
00349                             break;
00350                     }
00351                 }
00352                 else
00353                 {
00354                     if (!IsSearching)
00355                     {
00356                         PreviousSearch ps = (PreviousSearch)sidebarTree.SelectedItems[0].Tag;
00357                         ShowSearch(ps.query, ps.types, ps.byTag, ps.Tag);
00358                     }
00359                 }
00360             }
00361         }
00362         
00363         #endregion
00364 
00365         #region Main Gridview
00366 
00372         private void mainGridView_KeyDown(object sender, KeyEventArgs e)
00373         {
00374             if (e.KeyCode == Keys.Delete)
00375             {
00376                 deletePressed(sender, e);
00377             }
00378         }
00379 
00385         private void mainGridView_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
00386         {
00387             if (mainGridView.SelectedRows.Count == 1)
00388             {
00389                 foreach (DataGridViewRow dgvr in mainGridView.SelectedRows)
00390                 {
00391                     DataRow row = ((DataRowView)dgvr.DataBoundItem).Row;
00392                     object obj = row["object"];
00393 
00394                     if (obj is ProjectInfo)
00395                     {
00396                         ProjectView pv = new ProjectView(accessHandler, (ProjectInfo)obj);
00397                         pv.ShowDialog();
00398                         if (gridFormat == GridFormats.Project)
00399                         {
00400                             row["Title"] = pv.Projectinfo.Title;
00401                             row["Subject"] = pv.Projectinfo.subject;
00402                             row["object"] = pv.Projectinfo;
00403                             row["Department"] = pv.Projectinfo.department;
00404                             row["Year"] = pv.Projectinfo.Date.Year.ToString();
00405                         }
00406                         else if (gridFormat == GridFormats.Search)
00407                         {
00408                             row["Type"] = pv.Projectinfo.Type;
00409                             row["Title"] = pv.Projectinfo.Title;
00410                             row["Description"] = pv.Projectinfo.Description;
00411                             row["object"] = pv.Projectinfo;
00412                             row["Date"] = pv.Projectinfo.Date.Year.ToString();
00413                         }
00414                         break;
00415                     }
00416                     if (obj is LiteratureInfo)
00417                     {
00418                         LiteratureEntryView lev = new LiteratureEntryView(accessHandler, (LiteratureInfo)obj);
00419                         lev.ShowDialog();
00420                         if (gridFormat == GridFormats.Literature)
00421                         {
00422                             row["Title"] = lev.LiteratureInfo.Title;
00423                             row["Author(s)"] = lev.LiteratureInfo.author;
00424                             row["object"] = lev.LiteratureInfo;
00425                             row["ISBN"] = lev.LiteratureInfo.isbn;
00426                             row["Year"] = lev.LiteratureInfo.Date.Year.ToString();
00427                         }
00428                         else if (gridFormat == GridFormats.Search)
00429                         {
00430                             row["Type"] = lev.LiteratureInfo.Type;
00431                             row["Title"] = lev.LiteratureInfo.title;
00432                             row["Description"] = lev.LiteratureInfo.Description;
00433                             row["object"] = lev.LiteratureInfo;
00434                             row["Date"] = lev.LiteratureInfo.Date.Year.ToString();
00435                         }
00436                         break;
00437                     }
00438 
00439                     if (obj is PersonInfo)
00440                     {
00441                         ShowSearch(((PersonInfo)obj).username, ResultType.All, SearchTypes.FreeText);
00442                     }
00443                     if (obj is TagInfo)
00444                     {
00445                         ShowSearch(((TagInfo)obj).Name, ResultType.All, SearchTypes.ByTag);
00446                     }
00447                     if (obj is ReviewInfo)
00448                     {
00449                         ReviewInfo r = (ReviewInfo)obj;
00450                         LiteratureEntryView lev = new LiteratureEntryView(accessHandler, r.literature, r.project, false);
00451                         lev.ShowDialog();
00452                     }
00453                 }
00454             }
00455         }
00456 
00462         private void mainGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
00463         {
00464 
00465             if (e.Button == MouseButtons.Right && e.RowIndex > -1 && e.RowIndex < mainGridView.RowCount)
00466             {
00467                 mainGridView.ClearSelection();
00468                 mainGridView.Rows[e.RowIndex].Selected = true;
00469             }
00470         }
00471 
00477         private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
00478         {
00479             if (mainGridView.SelectedRows.Count == 0)
00480             {
00481                 showToolStripMenuItem.Enabled = false;
00482                 editToolStripMenuItem.Enabled = false;
00483                 deleteToolStripMenuItem.Enabled = false;
00484             }
00485             else if (mainGridView.SelectedRows.Count == 1)
00486             {
00487                 DataRow row = ((DataRowView)mainGridView.SelectedRows[0].DataBoundItem).Row;
00488                 object obj = row["object"];
00489 
00490                 deleteToolStripMenuItem.Enabled = editToolStripMenuItem.Enabled = obj is LiteratureInfo || obj is ProjectInfo;
00491             }
00492             else
00493             {
00494                 editToolStripMenuItem.Enabled = false;
00495                 showToolStripMenuItem.Enabled = false;
00496                 if (gridFormat == GridFormats.Literature || gridFormat == GridFormats.Project)
00497                 {
00498                     deleteToolStripMenuItem.Enabled = true;
00499                 }
00500 
00501             }
00502         }
00503 
00504         #endregion
00505 
00506         #region MenuBar
00507 
00513         private void literaturToolStripMenuItem_Click(object sender, EventArgs e)
00514         {
00515             AddNewLiterature();
00516         }
00517 
00523         private void projectToolStripMenuItem_Click(object sender, EventArgs e)
00524         {
00525             AddNewProject();
00526         }
00527 
00533         private void editToolStripMenuItem_Click(object sender, EventArgs e)
00534         {
00535             mainGridView_CellMouseDoubleClick(sender, null);
00536         }
00537 
00538         private void showToolStripMenuItem_Click(object sender, EventArgs e)
00539         {
00540             int id = -1;
00541             string query = "";
00542             if (mainGridView.SelectedRows.Count == 1)
00543             {
00544                 DataRow row = ((DataRowView)mainGridView.SelectedRows[0].DataBoundItem).Row;
00545                 object obj = row["object"];
00546 
00547                 if (obj is ProjectInfo)
00548                 {
00549                     id = ((ProjectInfo)obj).id;
00550                     query = ((ProjectInfo)obj).Title;
00551                 }
00552                 else if (obj is LiteratureInfo)
00553                 {
00554                     id = ((LiteratureInfo)obj).id;
00555                     query = ((LiteratureInfo)obj).Title;
00556                 }
00557                 else
00558                     mainGridView_CellMouseDoubleClick(null, null);
00559             }
00560             if (id >= 0)
00561                 ShowSearch(query, ResultType.All, SearchTypes.Relevance, (object)id);
00562         }
00563 
00564         #endregion
00565 
00566         #region Add new stuff functions
00567 
00571         private void AddNewProject()
00572         {
00573             ProjectView pv = new ProjectView(this.accessHandler);
00574             pv.ShowDialog();
00575 
00576             ProjectInfo info = pv.Projectinfo;
00577 
00578             sidebarTree.Items[0].Selected = true;
00579             sidebarTree.Select();
00580 
00581             ShowProjects(accessHandler.WhoAmI, true);
00582 
00583             if (!pv.Saved) return;
00584 
00585             foreach (DataGridViewRow dgvr in mainGridView.Rows)
00586             {
00587                 DataRow row = ((DataRowView)dgvr.DataBoundItem).Row;
00588                 ISearchable i = (ISearchable)row["object"];
00589                 if (i.SearchType == ResultType.Project && ((ProjectInfo)i).id == info.id)
00590                 {
00591                     dgvr.Selected = true;
00592                 }
00593                 else
00594                     dgvr.Selected = false;
00595             }
00596 
00597             UpdateStats();
00598         }
00599 
00603         private void AddNewLiterature()
00604         {
00605             LiteratureEntryView lev = new LiteratureEntryView(accessHandler);
00606             lev.ShowDialog();
00607 
00608             LiteratureInfo info = lev.LiteratureInfo;
00609 
00610             //updater søge felt
00611             sidebarTree.Items[2].Selected = true;
00612             sidebarTree.Select();
00613             ShowLiterature(accessHandler.WhoAmI, true);
00614 
00615             foreach (DataGridViewRow dgvr in mainGridView.Rows)
00616             {
00617                 DataRow row = ((DataRowView)dgvr.DataBoundItem).Row;
00618                 ISearchable i = (ISearchable)row["object"];
00619                 if (i.SearchType == ResultType.Literature && ((LiteratureInfo)i).id == info.id)
00620                 {
00621                     dgvr.Selected = true;
00622                 }
00623                 else
00624                     dgvr.Selected = false;
00625             }
00626 
00627             UpdateStats();
00628         }
00629 
00630         #endregion
00631 
00632     }
00633 }

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