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
00189
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
00254
00255 StatisticsInfo si = accessHandler.GetStatistics();
00256
00257
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
00264 NumberOfTags = si.TagCount;
00265
00266
00267 NumberOfLitterature = si.LiteratureCount;
00268
00269
00270 NumberOfProjects = si.ProjectCount;
00271
00272
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
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 }