352 lines
10 KiB
C#
352 lines
10 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using VEPROMS.CSLA.Library;
|
|
using Volian.Base.Library;
|
|
|
|
namespace Volian.Controls.Library
|
|
{
|
|
public partial class AnnotationDetails : UserControl
|
|
{
|
|
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
#region Properties
|
|
private bool _LoadingAnnotation = false;
|
|
private bool _LoadingGrid = false;
|
|
|
|
private ItemInfo _CurrentItem = null;
|
|
private DisplaySearch _AnnotationSearch;
|
|
|
|
private AnnotationInfoList _Annotations;
|
|
public AnnotationInfoList Annotations
|
|
{
|
|
get { return _Annotations; }
|
|
set
|
|
{
|
|
_Annotations = value;
|
|
itemAnnotationsBindingSource.DataSource = _Annotations;
|
|
}
|
|
}
|
|
|
|
private AnnotationInfo _CurrentAnnotation = null;
|
|
public AnnotationInfo CurrentAnnotation
|
|
{
|
|
get { return _CurrentAnnotation; }
|
|
set
|
|
{
|
|
if (_CurrentAnnotation == null && value == null) return; // No Change
|
|
if (_CurrentAnnotation != null && value != null)
|
|
if (_CurrentAnnotation.AnnotationID == value.AnnotationID) return; // No Change
|
|
//vlnStackTrace.ShowStack("CurrentAnnotation = '{0}' Old = '{1}'", value, _CurrentAnnotation);
|
|
if (_CurrentAnnotation != null || _AddingAnnotation)
|
|
{
|
|
if (AnnotationDirty)
|
|
SaveAnnotation();
|
|
}
|
|
_CurrentAnnotation = value;
|
|
InitializeAnnotation();
|
|
}
|
|
}
|
|
|
|
private bool _AnnotationDirty = false;
|
|
private bool AnnotationDirty
|
|
{
|
|
get { return _AnnotationDirty; }
|
|
set
|
|
{
|
|
btnRemoveAnnotation.Enabled = btnAddAnnotation.Enabled = !value;
|
|
btnSaveAnnotation.Enabled = btnCancelAnnoation.Enabled = value;
|
|
_AddingAnnotation = value && (CurrentAnnotation == null);
|
|
_AnnotationDirty = value;
|
|
}
|
|
}
|
|
|
|
public string AnnotationText
|
|
{
|
|
get { return rtxbComment.Text; }
|
|
set
|
|
{
|
|
rtxbComment.Text = value;
|
|
if (rtxbComment.Text != string.Empty)
|
|
rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text
|
|
}
|
|
}
|
|
|
|
public string AnnotationRTFText
|
|
{
|
|
get { return rtxbComment.Rtf; }
|
|
set
|
|
{
|
|
rtxbComment.Rtf = value;
|
|
if (rtxbComment.Rtf != string.Empty)
|
|
rtxbComment.SelectionStart = rtxbComment.TextLength; // position cursor to end of text
|
|
}
|
|
}
|
|
private UserInfo _MyUserInfo;
|
|
public UserInfo MyUserInfo
|
|
{
|
|
get { return _MyUserInfo; }
|
|
set { _MyUserInfo = value; }
|
|
}
|
|
#endregion
|
|
|
|
#region Constructors
|
|
public AnnotationDetails()
|
|
{
|
|
InitializeComponent();
|
|
//#if(DEBUG)
|
|
//Resize+=new EventHandler(AnnotationDetails_Resize); // Debug the resize event
|
|
//#endif
|
|
Resize += AnnotationDetails_Resize;
|
|
}
|
|
|
|
void AnnotationDetails_Resize(object sender, EventArgs e)
|
|
{
|
|
if(Height > 0)
|
|
rtxbComment.Height = Height - rtxbComment.Top;
|
|
}
|
|
#endregion
|
|
|
|
#region Events
|
|
private bool _AddingAnnotation = false;
|
|
private void btnAddAnnotation_Click(object sender, EventArgs e)
|
|
{
|
|
dgAnnotations.ClearSelection();
|
|
CurrentAnnotation = null;
|
|
_AddingAnnotation = true;
|
|
rtxbComment.Focus();
|
|
}
|
|
|
|
private void btnRemoveAnnotation_Click(object sender, EventArgs e)
|
|
{
|
|
//using (Annotation annotation = CurrentAnnotation.Get())
|
|
//{
|
|
// annotation.Delete();
|
|
_AnnotationSearch.LoadingList = true;
|
|
Annotation.DeleteAnnotation(CurrentAnnotation);
|
|
// annotation.Save();
|
|
_AnnotationSearch.LoadingList = false;
|
|
CurrentAnnotation = null;
|
|
UpdateAnnotationGrid();
|
|
//_AnnotationSearch.UpdateAnnotationSearchResults(); // update the search results
|
|
//}
|
|
}
|
|
|
|
private void btnSaveAnnotation_Click(object sender, EventArgs e)
|
|
{
|
|
if (cbGridAnnoType.SelectedIndex == -1)
|
|
{
|
|
MessageBox.Show("You Must Select an Annotation Type", "Annotation Type Not Selected", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
cbGridAnnoType.Focus();
|
|
return;
|
|
}
|
|
if (rtxbComment.Text == string.Empty)
|
|
{
|
|
MessageBox.Show("You Must Enter Annotation Text", "Annotation Text Is Blank", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
rtxbComment.Focus();
|
|
return;
|
|
}
|
|
SaveAnnotation();
|
|
|
|
}
|
|
|
|
private void btnCancelAnnoation_Click(object sender, EventArgs e)
|
|
{
|
|
InitializeAnnotation();
|
|
}
|
|
|
|
private void cbGridAnnoType_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
if (!_LoadingAnnotation)
|
|
AnnotationDirty = true;
|
|
}
|
|
|
|
private void dgAnnotations_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (!_LoadingGrid) // Only set the Current Annotation when not loading the grid
|
|
{
|
|
if ((_Annotations != null) && (dgAnnotations.Rows.Count > 0))
|
|
CurrentAnnotation = _Annotations[dgAnnotations.CurrentRow.Index];
|
|
else
|
|
CurrentAnnotation = null;
|
|
}
|
|
}
|
|
|
|
private void rtxbComment_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (!_LoadingAnnotation)
|
|
AnnotationDirty = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region LoadControlData
|
|
|
|
public void SetupAnnotations(DisplaySearch annosrch)
|
|
{
|
|
_LoadingAnnotation = true;
|
|
_AnnotationSearch = annosrch; // reference the Annotation Search to update its lists
|
|
|
|
cbGridAnnoType.DisplayMember = "Name";
|
|
cbGridAnnoType.ValueMember = "TypeId";
|
|
cbGridAnnoType.DataSource = AnnotationTypeInfoList.Get().Clone();
|
|
cbGridAnnoType.SelectedIndex = -1; //don't pre-select an annotation type
|
|
_LoadingAnnotation = false;
|
|
}
|
|
|
|
private void InitializeAnnotation()
|
|
{
|
|
//vlnCSLAStackTrace.ShowStack("InitializeAnnotation - CurrentAnnotation = {0}", CurrentAnnotation);
|
|
_LoadingAnnotation = true;
|
|
if (CurrentAnnotation == null)
|
|
{
|
|
cbGridAnnoType.SelectedIndex = -1;
|
|
AnnotationText = "";
|
|
}
|
|
else
|
|
{
|
|
cbGridAnnoType.SelectedValue = CurrentAnnotation.TypeID;
|
|
if (CurrentAnnotation.RtfText != "")
|
|
AnnotationRTFText = CurrentAnnotation.RtfText;
|
|
else
|
|
AnnotationText = CurrentAnnotation.SearchText;
|
|
}
|
|
_LoadingAnnotation = false;
|
|
AnnotationDirty = false;
|
|
if (!_LoadingGrid)
|
|
rtxbComment.Focus(); // Set the focus to the comment text
|
|
if (CurrentAnnotation != null && MyUserInfo.IsReviewer(CurrentAnnotation.MyItem.MyDocVersion ) && CurrentAnnotation.UserID != MyUserInfo.UserID)
|
|
{
|
|
btnRemoveAnnotation.Enabled = false;
|
|
cbGridAnnoType.Enabled = false;
|
|
rtxbComment.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
btnRemoveAnnotation.Enabled = true;
|
|
cbGridAnnoType.Enabled = true;
|
|
rtxbComment.Enabled = true;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region VariousSupportMethods
|
|
|
|
/// <summary>
|
|
/// Set up the Annotation Grid for the given item
|
|
/// This is called from frmVEPROMS
|
|
/// </summary>
|
|
/// <param name="currentitem"></param>
|
|
public void UpdateAnnotationGrid(ItemInfo currentitem)
|
|
{
|
|
_CurrentItem = currentitem;
|
|
UpdateAnnotationGrid();
|
|
}
|
|
|
|
private void UpdateAnnotationGrid()
|
|
{
|
|
_LoadingGrid = true;
|
|
|
|
if (_CurrentItem == null)
|
|
_Annotations= null;
|
|
else
|
|
{
|
|
_CurrentItem.RefreshItemAnnotations();
|
|
_Annotations = _CurrentItem.ItemAnnotations;
|
|
}
|
|
itemAnnotationsBindingSource.DataSource = _Annotations;
|
|
dgAnnotations.Refresh();
|
|
if ((CurrentAnnotation == null || (_CurrentItem.ItemID != CurrentAnnotation.ItemID)))
|
|
{
|
|
if (_Annotations != null && _Annotations.Count > 0)
|
|
CurrentAnnotation = _Annotations[0];
|
|
else
|
|
CurrentAnnotation = null;
|
|
}
|
|
FindCurrentAnnotation(); // position to the grid row of the current annotation
|
|
_LoadingGrid = false;
|
|
if (_Annotations == null || _Annotations.Count == 0) btnRemoveAnnotation.Enabled = false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Find the Current Annotation in the Annotation Grid select the corresponding row
|
|
/// Note: this is also called from AnnotationSearch.cs when a search results is selected
|
|
/// </summary>
|
|
public void FindCurrentAnnotation()
|
|
{
|
|
int row = 0;
|
|
if (CurrentAnnotation != null)
|
|
{
|
|
if (_Annotations != null)
|
|
{
|
|
foreach (AnnotationInfo ai in _Annotations)
|
|
{
|
|
if (ai.AnnotationID == CurrentAnnotation.AnnotationID)
|
|
{
|
|
row = _Annotations.IndexOf(ai);// +1;
|
|
break;
|
|
}
|
|
}
|
|
try
|
|
{
|
|
dgAnnotations.Rows[row].Selected = true;
|
|
if (!_LoadingGrid && (dgAnnotations.FirstDisplayedScrollingRowIndex != -1))
|
|
dgAnnotations.FirstDisplayedScrollingRowIndex = row;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_MyLog.InfoFormat("Trying to open an annotation which has been removed");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SaveAnnotation()
|
|
{
|
|
if (cbGridAnnoType.SelectedIndex == -1) return;
|
|
if (rtxbComment.Text == string.Empty) return;
|
|
using (AnnotationType annotationType = AnnotationType.Get((int)cbGridAnnoType.SelectedValue))
|
|
{
|
|
if (_AddingAnnotation)
|
|
{
|
|
_AddingAnnotation = false;
|
|
using (Item myItem = _CurrentItem.Get())
|
|
{
|
|
using (Annotation annotation = Annotation.MakeAnnotation(myItem, annotationType, rtxbComment.Rtf, rtxbComment.Text, ""))
|
|
{
|
|
CurrentAnnotation = AnnotationInfo.Get(annotation.AnnotationID);
|
|
//annotation.DTS = DateTime.Now;
|
|
//annotation.Save();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
using (Annotation annotation = CurrentAnnotation.Get())
|
|
{
|
|
annotation.RtfText = rtxbComment.Rtf;
|
|
annotation.SearchText = rtxbComment.Text;
|
|
annotation.MyAnnotationType = annotationType;
|
|
annotation.DTS = DateTime.Now;
|
|
annotation.UserID = Volian.Base.Library.VlnSettings.UserID;
|
|
annotation.Save();
|
|
}
|
|
}
|
|
}
|
|
AnnotationDirty = false;
|
|
UpdateAnnotationGrid();
|
|
}
|
|
#endregion
|
|
|
|
//private void AnnotationDetails_Resize(object sender, EventArgs e)
|
|
//{
|
|
// vlnStackTrace.ShowStackLocal(string.Format("Resize - Height = {0}", Height), 3, 4);
|
|
// //vlnStackTrace.ShowStack(string.Format("Resize - Height = {0}", Height));
|
|
//}
|
|
}
|
|
}
|