382 lines
12 KiB
C#
382 lines
12 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Text.RegularExpressions;
|
|
using System.IO;
|
|
using AT.STO.UI.Win;
|
|
using VEPROMS.CSLA.Library;
|
|
|
|
namespace Volian.Controls.Library
|
|
{
|
|
public partial class DisplayLibDocs : UserControl
|
|
{
|
|
#region Properties
|
|
private DocumentInfo _CurLibDoc;
|
|
public DocumentInfo CurLibDoc
|
|
{
|
|
get { return _CurLibDoc; }
|
|
set { _CurLibDoc = value; }
|
|
}
|
|
// selected index into listBoxLibDocs...
|
|
private int _SelectedLibDoc = -1;
|
|
private DocumentInfoList _LibDocList;
|
|
public DocumentInfoList LibDocList
|
|
{
|
|
get { return _LibDocList; }
|
|
set { _LibDocList = value; }
|
|
}
|
|
private Color saveGroupPanelUsages;
|
|
#endregion
|
|
#region Constructors
|
|
public DisplayLibDocs()
|
|
{
|
|
InitializeComponent();
|
|
btnOpenLibDoc.Enabled = false;
|
|
btnDelLibDoc.Enabled = false;
|
|
btnPrint.Enabled = listBoxLibDocs.Items.Count > 0;
|
|
saveGroupPanelUsages = groupPanelUsages.Style.BackColor;
|
|
}
|
|
DisplayTabControl _DisplayTabControl;
|
|
#endregion
|
|
#region LoadControlData
|
|
private bool _InitializingLibDocList; // used? see if selectionchanged event (still coding)
|
|
public void LibDocListFillIn(DisplayTabControl tc)
|
|
{
|
|
_InitializingLibDocList = true;
|
|
listBoxLibDocs.Items.Clear();
|
|
tbComment.Clear();
|
|
tbName.Clear();
|
|
groupPanelLibDocs.Style.BackColor = Color.Yellow;
|
|
btnSave.Enabled = false;
|
|
btnCancel.Enabled = false;
|
|
LibDocList = DocumentInfoList.GetLibraries(true);
|
|
for (int i = 0; i < LibDocList.Count; i++)
|
|
listBoxLibDocs.Items.Add(((LibDocList[i].DocumentEntries == null || LibDocList[i].DocumentEntries.Count == 0) ? "0 " : LibDocList[i].DocumentEntries.Count.ToString() + " ") + LibDocList[i].DocumentTitle); // + LibDocList[i].DocumentEntries.Count);
|
|
_DisplayTabControl = tc;
|
|
listBoxUsages.Items.Clear();
|
|
_InitializingLibDocList = false;
|
|
btnPrint.Enabled = listBoxLibDocs.Items.Count > 0;
|
|
}
|
|
public void SetSelectedLibDoc()
|
|
{
|
|
if (_SelectedLibDoc >= 0)
|
|
{
|
|
if (listBoxLibDocs.Items.Count==0 || _SelectedLibDoc > listBoxLibDocs.Items.Count) return; // B2018-126: if no items in list return also (count==0)
|
|
if (_SelectedLibDoc > listBoxLibDocs.Items.Count) return;
|
|
listBoxLibDocs.SelectedIndex = _SelectedLibDoc;
|
|
}
|
|
}
|
|
#endregion
|
|
#region Events
|
|
public event DisplayLibDocEvent PrintRequest;
|
|
private void OnPrintRequest(DisplayLibDocEventArgs args)
|
|
{
|
|
if (PrintRequest != null)
|
|
PrintRequest(this, args);
|
|
}
|
|
|
|
private void listBoxLibDocs_Click(object sender, EventArgs e)
|
|
{
|
|
UpdateUsageList();
|
|
}
|
|
public void RefreshLibDocPanel(DisplayTabControl tc)
|
|
{
|
|
int cursel = listBoxLibDocs.SelectedIndex;
|
|
LibDocListFillIn(tc);
|
|
listBoxLibDocs.SelectedIndex = cursel;
|
|
UpdateUsageList();
|
|
}
|
|
private void UpdateUsageList()
|
|
{
|
|
if (listBoxLibDocs.SelectedIndex == -1) return;
|
|
groupPanelLibDocs.Style.BackColor = Color.Orange;
|
|
_SelectedLibDoc = listBoxLibDocs.SelectedIndex;
|
|
listBoxUsages.Items.Clear();
|
|
tbComment.Clear();
|
|
tbName.Clear();
|
|
btnSave.Enabled = false;
|
|
btnCancel.Enabled = false;
|
|
_InitializingLibDocList = true; // need this so textchanged code doesn't turn save/cancel buttons on.
|
|
tbName.Text = LibDocList[_SelectedLibDoc].LibTitle;
|
|
|
|
DocumentConfig dc = new DocumentConfig(LibDocList[_SelectedLibDoc]);
|
|
tbComment.Text = dc.LibDoc_Comment;
|
|
_InitializingLibDocList = false;
|
|
|
|
// If there are no usages, then enable delete & open button (open for docs with usages occurs
|
|
// from usage list), otherwise disable buttons & list usages
|
|
DocumentInfo dicnt = LibDocList[_SelectedLibDoc];
|
|
ItemInfoList iil = dicnt.LibraryDocumentUsageList;
|
|
groupPanelUsages.Style.BackColor = dicnt.LibraryDocumentUsageList == null || dicnt.LibraryDocumentUsageList.Count == 0 ? this.saveGroupPanelUsages : Color.LightGreen;
|
|
if (iil == null)
|
|
{
|
|
btnDelLibDoc.Enabled = true;
|
|
btnOpenLibDoc.Enabled = true;
|
|
return;
|
|
}
|
|
// Put the usages in the usage list for the selected library document.
|
|
btnDelLibDoc.Enabled = false;
|
|
btnOpenLibDoc.Enabled = false;
|
|
foreach (ItemInfo ii in dicnt.LibraryDocumentUsageList)
|
|
{
|
|
if (ii.MyDocVersion != null)
|
|
listBoxUsages.Items.Add(ii.MyProcedure.ToString() + " - " + ii.DisplayNumber + " " + ii.DisplayText);
|
|
}
|
|
btnPrint.Enabled = listBoxLibDocs.Items.Count > 0 ? true : false;
|
|
}
|
|
private void btnDelLibDoc_Click(object sender, EventArgs e)
|
|
{
|
|
DocumentInfo di = LibDocList[_SelectedLibDoc];
|
|
|
|
try
|
|
{
|
|
Document.Delete(di.DocID);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("error deleting doc = " + ex.Message);
|
|
}
|
|
LibDocListFillIn(_DisplayTabControl);
|
|
}
|
|
private void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
bool chg = false;
|
|
DocumentInfo di = LibDocList[_SelectedLibDoc];
|
|
Document doc = Document.Get(di.DocID);
|
|
if (tbName.Text != LibDocList[_SelectedLibDoc].LibTitle)
|
|
{
|
|
chg = true;
|
|
doc.LibTitle = tbName.Text;
|
|
}
|
|
DocumentConfig dc = new DocumentConfig(LibDocList[_SelectedLibDoc]);
|
|
if (tbComment.Text != dc.LibDoc_Comment)
|
|
{
|
|
chg = true;
|
|
dc.LibDoc_Comment = tbComment.Text;
|
|
doc.Config = dc.ToString();
|
|
}
|
|
if (chg == true)
|
|
{
|
|
doc.Save();
|
|
int cursel = _SelectedLibDoc;
|
|
LibDocListFillIn(_DisplayTabControl);
|
|
listBoxLibDocs.SelectedIndex = cursel;
|
|
UpdateUsageList();
|
|
}
|
|
}
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
DocumentInfo di = LibDocList[_SelectedLibDoc];
|
|
Document doc = Document.Get(di.DocID);
|
|
tbName.Text = doc.LibTitle;
|
|
DocumentConfig dc = new DocumentConfig(LibDocList[_SelectedLibDoc]);
|
|
tbComment.Text = dc.LibDoc_Comment;
|
|
btnSave.Enabled = false;
|
|
btnCancel.Enabled = false;
|
|
}
|
|
|
|
private void btnOpenLibDoc_Click(object sender, EventArgs e)
|
|
{
|
|
DocumentInfo di = LibDocList[_SelectedLibDoc];
|
|
_DisplayTabControl.OpenDSOTabPage(di);
|
|
}
|
|
|
|
private void tbName_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (_InitializingLibDocList) return;
|
|
btnSave.Enabled = true;
|
|
btnCancel.Enabled = true;
|
|
}
|
|
|
|
private void tbComment_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (_InitializingLibDocList) return;
|
|
btnSave.Enabled = true;
|
|
btnCancel.Enabled = true;
|
|
}
|
|
|
|
|
|
private void btnImpLibDoc_Click(object sender, EventArgs e)
|
|
{
|
|
OpenFileDialog openFileDialog1 = new OpenFileDialog();
|
|
|
|
openFileDialog1.InitialDirectory = "c:\\";
|
|
openFileDialog1.Filter = "Word files (*.doc;*.rtf;*.docx)|*.doc;*.rtf;*.docx|All files (*.*)|*.*";
|
|
openFileDialog1.FilterIndex = 0;
|
|
openFileDialog1.RestoreDirectory = true;
|
|
|
|
if (openFileDialog1.ShowDialog() == DialogResult.OK)
|
|
{
|
|
int done = 0;
|
|
int ntry = 0;
|
|
while (done == 0 && ntry < 4)
|
|
{
|
|
ntry++;
|
|
done = SaveTheDoc(openFileDialog1.FileName, openFileDialog1.SafeFileName.Substring(0, openFileDialog1.SafeFileName.LastIndexOf(".")));
|
|
}
|
|
if (done > 0)
|
|
{
|
|
LibDocListFillIn(_DisplayTabControl);
|
|
// set selectedindex to the imported doc...
|
|
int indx = 0;
|
|
DocumentInfoList dil = DocumentInfoList.GetLibraries(true);
|
|
for (int i = 0; i < listBoxLibDocs.Items.Count; i++)
|
|
{
|
|
if (dil[i].DocID == done)
|
|
{
|
|
indx = i;
|
|
break;
|
|
}
|
|
}
|
|
listBoxLibDocs.SelectedIndex = indx;
|
|
}
|
|
}
|
|
}
|
|
private int SaveTheDoc(string temppath, string title)
|
|
{
|
|
try
|
|
{
|
|
FileInfo fi = new FileInfo(temppath);
|
|
FileStream fs = File.Open(temppath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);// B2016-053
|
|
long len = fs.Length;
|
|
byte[] ByteArray = new byte[len];
|
|
int nBytesRead = fs.Read(ByteArray, 0, (int)len);
|
|
fs.Close();
|
|
string t1 = (title == null || title == "") ? null : title;
|
|
Document doc = Document.MakeDocument(t1, ByteArray, null, null, fi.Extension); //, DateTime.Now, "Migration");
|
|
return doc.DocID;
|
|
}
|
|
// for an io exception, keep trying
|
|
catch (IOException)
|
|
{
|
|
Wait(2);
|
|
return 0;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(string.Format("Could not save the document, {0}, {1}", ex.Message, ex.InnerException));
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
private void Wait(int n)
|
|
{
|
|
DateTime dtw = DateTime.Now.AddSeconds(n);
|
|
while (DateTime.Now < dtw)
|
|
{
|
|
Application.DoEvents();
|
|
}
|
|
}
|
|
private bool _ProcessingSelectedValueChanged = false;
|
|
private void listBoxUsages_SelectedValueChanged(object sender, EventArgs e)
|
|
{
|
|
if (!_InitializingLibDocList)
|
|
{
|
|
if (_ProcessingSelectedValueChanged) return;
|
|
_ProcessingSelectedValueChanged = true;
|
|
if (listBoxUsages.SelectedIndex == -1) return;
|
|
DocumentInfo di = LibDocList[listBoxLibDocs.SelectedIndex];
|
|
// see if the library document actually has data - data migration may have created a 'null' content within the
|
|
// record for missing library documents.
|
|
if (di.DocContent == null)
|
|
{
|
|
MessageBox.Show("No Content in this document");
|
|
return;
|
|
}
|
|
if (listBoxUsages.SelectedIndex < di.LibraryDocumentUsageList.Count && listBoxUsages.SelectedIndex >= 0)
|
|
{
|
|
ItemInfo ii = di.LibraryDocumentUsageList[listBoxUsages.SelectedIndex];
|
|
if (ii.MyDocVersion == null)
|
|
MessageBox.Show("This usage is not connected properly", "Disconnected Data", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
else
|
|
_DisplayTabControl.OpenItem(ii);
|
|
}
|
|
_ProcessingSelectedValueChanged = false;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
private void btnPrint_Click(object sender, EventArgs e)
|
|
{
|
|
string paperSize = "Letter";
|
|
// B2020-045: Getting Library Document usage report when no documents are selected crashes with a null reference if the first
|
|
// in libdoc usage list is null (added code that finds a non-null usage list and uses first to get format. Otherwise
|
|
// uses the default "Letter" paper size).
|
|
ItemInfo ii = null;
|
|
int sel = listBoxLibDocs.SelectedIndex < 0 ? 0 : listBoxLibDocs.SelectedIndex;
|
|
if (LibDocList[sel].LibraryDocumentUsageList == null || LibDocList[sel].LibraryDocumentUsageList.Count == 0)
|
|
{
|
|
// selected lib doc doesn't have usages, loop through to find one. Need a usage to get the active format
|
|
for (int i = 0; i<LibDocList.Count; i++)
|
|
{
|
|
if (LibDocList[i].LibraryDocumentUsageList != null && LibDocList[i].LibraryDocumentUsageList.Count>0)
|
|
{
|
|
ii = LibDocList[i].LibraryDocumentUsageList[0];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
ii = LibDocList[sel].LibraryDocumentUsageList[0];
|
|
|
|
if (ii != null)
|
|
paperSize = ii.ActiveFormat.PlantFormat.FormatData.PDFPageSize.PaperSize; // C2020-002 paper size is now set in the format files
|
|
OnPrintRequest(new DisplayLibDocEventArgs("Library Document Usage", LibDocList, paperSize));
|
|
}
|
|
}
|
|
public class DisplayLibDocEventArgs
|
|
{
|
|
private string _ReportTitle;
|
|
public string ReportTitle
|
|
{
|
|
get { return _ReportTitle; }
|
|
set { _ReportTitle = value; }
|
|
}
|
|
private DocumentInfoList _libDocList;
|
|
|
|
public DocumentInfoList LibDocList
|
|
{
|
|
get { return _libDocList; }
|
|
set { _libDocList = value; }
|
|
}
|
|
|
|
private string _PaperSize; // C2020-002 paper size is now set in the format files
|
|
|
|
public string PaperSize
|
|
{
|
|
get { return _PaperSize; }
|
|
set { _PaperSize = value; }
|
|
}
|
|
//private string _SearchString = null;
|
|
//public string SearchString
|
|
//{
|
|
// get { return _SearchString; }
|
|
// set { _SearchString = value; }
|
|
//}
|
|
//private string _TypesSelected;
|
|
//public string TypesSelected
|
|
//{
|
|
// get { return _TypesSelected; }
|
|
// set { _TypesSelected = value; }
|
|
//}
|
|
//private ICollection<ItemInfo> _MyItemInfoList;
|
|
//public ICollection<ItemInfo> MyItemInfoList
|
|
//{
|
|
// get { return _MyItemInfoList; }
|
|
// set { _MyItemInfoList = value; }
|
|
//}
|
|
public DisplayLibDocEventArgs(string reportTitle, DocumentInfoList libDocList, string paperSize)
|
|
{
|
|
_ReportTitle = reportTitle;
|
|
_libDocList = libDocList;
|
|
_PaperSize = paperSize; // C2020-002 paper size is now set in the format files
|
|
}
|
|
}
|
|
public delegate void DisplayLibDocEvent(object sender, DisplayLibDocEventArgs args);
|
|
}
|