Commit for development environment setup
This commit is contained in:
987
PROMS/Volian.Controls.Library/DisplayReports.cs.bak
Normal file
987
PROMS/Volian.Controls.Library/DisplayReports.cs.bak
Normal file
@@ -0,0 +1,987 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using VEPROMS.CSLA.Library;
|
||||
using DevComponents.DotNetBar;
|
||||
using DevComponents.AdvTree;
|
||||
using System.Text.RegularExpressions;
|
||||
using Volian.Base.Library;
|
||||
|
||||
|
||||
namespace Volian.Controls.Library
|
||||
{
|
||||
public partial class DisplayReports : UserControl
|
||||
{
|
||||
#region Events
|
||||
public event DisplayReportsEvent PrintRequest;
|
||||
private void OnPrintRequest(DisplayReportsEventArgs args)
|
||||
{
|
||||
if (PrintRequest != null)
|
||||
PrintRequest(this, args);
|
||||
}
|
||||
#endregion
|
||||
private List<DocVersionInfo> lstCheckedDocVersions = new List<DocVersionInfo>();
|
||||
private List<object> lstCheckedROs = new List<object>();
|
||||
private List<ItemInfoList> lstReportResults = new List<ItemInfoList>();
|
||||
private List<string> ROList = new List<string>();
|
||||
private List<object> lstROObj = new List<object>();
|
||||
private int _MyRODbID;
|
||||
private string DocVersionList
|
||||
{
|
||||
get
|
||||
{
|
||||
// append list of document versions to search
|
||||
if (lstCheckedDocVersions.Count > 0)
|
||||
{
|
||||
string strRtnStr = "";
|
||||
// get list of doc versions to search
|
||||
foreach (DocVersionInfo dvi in lstCheckedDocVersions)
|
||||
{
|
||||
strRtnStr += string.Format(",{0}", dvi.VersionID.ToString());
|
||||
}
|
||||
return strRtnStr.Substring(1);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
private DocVersionInfo _MyDocVersion;
|
||||
public DocVersionInfo Mydocversion
|
||||
{
|
||||
get { return _MyDocVersion; }
|
||||
set
|
||||
{
|
||||
_MyDocVersion = value;
|
||||
if (_MyDocVersion != null)
|
||||
{
|
||||
if (_MyDocVersion.DocVersionAssociationCount > 0)
|
||||
{
|
||||
// if the count variable is not consistent with the actual list count,
|
||||
// do a refresh. There was a bug, B2012-040, that was not reproducable..
|
||||
// so this is an attempt to fix it.
|
||||
if (_MyDocVersion.DocVersionAssociations.Count == 0)
|
||||
{
|
||||
_MyDocVersion.RefreshDocVersionAssociations();
|
||||
if (_MyDocVersion.DocVersionAssociations.Count == 0) return;
|
||||
}
|
||||
MyROFSTLookup = _MyDocVersion.DocVersionAssociations[0].MyROFst.GetROFSTLookup(_MyDocVersion);
|
||||
_MyRODbID = _MyDocVersion.DocVersionAssociations[0].MyROFst.RODbID;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private ROFSTLookup _MyROFSTLookup;
|
||||
public ROFSTLookup MyROFSTLookup
|
||||
{
|
||||
get { return _MyROFSTLookup; }
|
||||
set
|
||||
{
|
||||
//if (!Visible) return; // don't reset anything if the form is invisible.
|
||||
_MyROFSTLookup = value; // define the tree nodes based on this rofst
|
||||
advTreeROFillIn(true);
|
||||
//LoadROComboTree();
|
||||
}
|
||||
}
|
||||
|
||||
private ItemInfoList _ReportResult;
|
||||
public ItemInfoList ReportResult
|
||||
{
|
||||
get { return _ReportResult; }
|
||||
set
|
||||
{
|
||||
_ReportResult = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void GenerateROList()
|
||||
{
|
||||
string rtnStr = "";
|
||||
ROFSTLookup.rochild[] chld = null;
|
||||
ROFSTLookup.rochild ch;
|
||||
ROList.Clear();
|
||||
foreach (object rolkup in lstCheckedROs)
|
||||
{
|
||||
if (rolkup == null) // All Referenced Objects selected, return list of RO databases
|
||||
{
|
||||
foreach (ROFSTLookup.rodbi rodbi in _MyROFSTLookup.GetRODatabaseList())
|
||||
{
|
||||
rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", rodbi.dbiID.ToString("X4"));
|
||||
ROList.Add(rtnStr);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
else if (rolkup is ROFSTLookup.rodbi)
|
||||
rtnStr = _MyRODbID.ToString() + ":" + string.Format("{0}", ((ROFSTLookup.rodbi)rolkup).dbiID.ToString("X4"));
|
||||
else if (rolkup is ROFSTLookup.rochild)
|
||||
{
|
||||
ch = (ROFSTLookup.rochild)rolkup;
|
||||
chld = ch.children;
|
||||
rtnStr = _MyRODbID.ToString() + ":" + GetROChildren(rolkup).TrimEnd(',');
|
||||
}
|
||||
//else if (rolkup is ROFSTLookup.rogrp)
|
||||
// Console.WriteLine("RO Group");
|
||||
//else if (rolkup is ROFSTLookup.roHdr)
|
||||
// Console.WriteLine("RO Header");
|
||||
ROList.Add(rtnStr);
|
||||
}
|
||||
}
|
||||
|
||||
// same function as GetROsToSearch in DisplaySearch.cs
|
||||
private string GetROChildren(object roObj)
|
||||
{
|
||||
ROFSTLookup.rochild chld = (ROFSTLookup.rochild)roObj;
|
||||
string rtnstr = "";
|
||||
if (chld.children == null) // get a single ROID
|
||||
{
|
||||
rtnstr += string.Format("{0}", chld.roid);
|
||||
if (rtnstr.Length == 12) rtnstr += "0000"; // last four digits are used for multiple return values
|
||||
}
|
||||
else if (!cbxROUsage.Checked && chld.children[0].ParentID == 0)
|
||||
{
|
||||
rtnstr += string.Format("{0},", chld.roid); // doing a RO Summary or RO Complete report - don't want children that are multiple return values
|
||||
}
|
||||
else
|
||||
{ // spin through the child list and get the ROIDs.
|
||||
// if the child has children, then call this function recursivly
|
||||
foreach (ROFSTLookup.rochild roc in chld.children)
|
||||
{
|
||||
// Don't get the children if we are doing a RO Summary or RO Complete report & children are the multiple return values
|
||||
if (roc.children != null && (cbxROUsage.Checked || roc.children[0].ParentID != 0))
|
||||
rtnstr += GetROChildren(roc);
|
||||
else
|
||||
rtnstr += string.Format("{0},", roc.roid);
|
||||
}
|
||||
}
|
||||
return rtnstr;
|
||||
}
|
||||
private string GetListOfROs(bool keepRODbID)
|
||||
{
|
||||
string rtnStr = "";
|
||||
string strRODbID = "";
|
||||
int cnt = 0;
|
||||
foreach (string rostr in ROList)
|
||||
{
|
||||
int ndxOf = rostr.IndexOf(":");
|
||||
if (ndxOf > 0)
|
||||
{
|
||||
string tstr = rostr.Substring(0, ndxOf + 1);
|
||||
if (tstr != strRODbID && keepRODbID)
|
||||
{
|
||||
strRODbID = tstr;
|
||||
rtnStr += rostr;
|
||||
}
|
||||
else
|
||||
rtnStr += rostr.Substring(ndxOf + 1);
|
||||
}
|
||||
else
|
||||
rtnStr += rostr;
|
||||
if (rtnStr.EndsWith(",")) rtnStr = rtnStr.Substring(0, rtnStr.Length - 1);
|
||||
if (++cnt < ROList.Count)
|
||||
rtnStr += ",";
|
||||
}
|
||||
return rtnStr;
|
||||
}
|
||||
public DisplayReports()
|
||||
{
|
||||
InitializeComponent();
|
||||
EnableOrDisablePrintButton();
|
||||
cmbxROUsageSort.SelectedIndex = 0;
|
||||
tabTransitionReports.Visible = false;
|
||||
cbxComplete.Enabled = true;
|
||||
cbxSummary.Enabled = true;
|
||||
if (cbxROUsage.Checked)
|
||||
cbxIncldMissingROs.Text = "Include Missing ROs (red ? in the editor)";
|
||||
else if (cbxComplete.Checked)
|
||||
cbxIncldMissingROs.Text = "Include Empty RO Fields";
|
||||
cbxIncldMissingROs.Checked = false;// !cbxSummary.Checked;
|
||||
cbxIncldMissingROs.Visible = cbxROUsage.Checked || cbxComplete.Checked;
|
||||
}
|
||||
|
||||
public void SelectReferencedObjectTab()
|
||||
{
|
||||
tabROReports.PerformClick();
|
||||
}
|
||||
|
||||
private void AddSelectedROChildren(DevComponents.AdvTree.NodeCollection chldrn)
|
||||
{
|
||||
if (chldrn.Count > 0)
|
||||
{
|
||||
foreach (DevComponents.AdvTree.Node n in chldrn)
|
||||
{
|
||||
if (n.Checked)
|
||||
lstCheckedROs.Add(n.Tag);
|
||||
else
|
||||
AddSelectedROChildren(n.Nodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void BuildCheckedROsList()
|
||||
{
|
||||
lstCheckedROs.Clear();
|
||||
if (advTreeRO.Nodes.Count == 0) return;
|
||||
DevComponents.AdvTree.Node node = advTreeRO.Nodes[0];
|
||||
if (node.Checked) // top node (all Referenced Objects) selected
|
||||
lstCheckedROs.Add(node.Tag);
|
||||
else
|
||||
AddSelectedROChildren(node.Nodes);
|
||||
}
|
||||
|
||||
private void EnableOrDisablePrintButton()
|
||||
{
|
||||
switch (tctrlReports.SelectedTabIndex)
|
||||
{
|
||||
case 0: // Transition Reports
|
||||
btnPrintReport.Enabled = (lstCheckedDocVersions.Count > 0);
|
||||
break;
|
||||
case 1: // Referenced Objects Reports
|
||||
BuildCheckedROsList(); // this list is sent to the report generator
|
||||
if (cbxROUsage.Checked)
|
||||
btnPrintReport.Enabled = (lstCheckedDocVersions.Count > 0 && lstCheckedROs.Count > 0);
|
||||
else
|
||||
btnPrintReport.Enabled = ((cbxComplete.Checked || cbxSummary.Checked) && lstCheckedROs.Count > 0);
|
||||
break;
|
||||
}
|
||||
if (cbxROUsage.Checked)
|
||||
cbxIncldMissingROs.Text = "Include Missing ROs (red ? in the editor)";
|
||||
else if (cbxComplete.Checked)
|
||||
cbxIncldMissingROs.Text = "Include Empty RO Fields";
|
||||
//cbxIncldMissingROs.Checked = cbxROUsage.Checked || cbxComplete.Checked;
|
||||
cbxIncldMissingROs.Visible = cbxROUsage.Checked || cbxComplete.Checked;
|
||||
}
|
||||
|
||||
private void tabTransitionReports_Click(object sender, EventArgs e)
|
||||
{
|
||||
xpSetToReport.Enabled = true;
|
||||
xpSetToReport.Expanded = true;
|
||||
xpSelROs.Expanded = false;
|
||||
xpSelROs.Enabled = false;
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
|
||||
private void tabROReports_Click(object sender, EventArgs e)
|
||||
{
|
||||
xpSetToReport.Enabled = cbxROUsage.Checked;
|
||||
xpSetToReport.Expanded = cbxROUsage.Checked;
|
||||
cmbxROUsageSort.Enabled = cbxROUsage.Checked;
|
||||
xpSelROs.Enabled = true;
|
||||
xpSelROs.Expanded = true;
|
||||
cbxIncldMissingROs.Checked = false;// !cbxSummary.Checked;
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
|
||||
private void cbxROUsage_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
xpSetToReport.Enabled = cbxROUsage.Checked;
|
||||
xpSetToReport.Expanded = cbxROUsage.Checked;
|
||||
cmbxROUsageSort.Enabled = cbxROUsage.Checked;
|
||||
// reset the RO tree and clear anything that was selected
|
||||
advTreeROFillIn(true);
|
||||
lstCheckedROs.Clear();
|
||||
cbxIncldMissingROs.Checked = false;// !cbxSummary.Checked;
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
#region Procedure List
|
||||
private DevComponents.AdvTree.Node NewAdvTreeNode(string nodetext, bool selectable, bool chxbxvisable)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode;
|
||||
newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = nodetext;
|
||||
newnode.Selectable = selectable;
|
||||
newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
|
||||
newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
|
||||
newnode.CheckBoxThreeState = false;
|
||||
newnode.CheckBoxVisible = chxbxvisable;
|
||||
return newnode;
|
||||
}
|
||||
|
||||
|
||||
public void advTreeProcSetsFillIn(bool blSeachTabClicked)
|
||||
{
|
||||
DevComponents.AdvTree.Node topnode = null;
|
||||
int cntnd = 0;
|
||||
VETreeNode vtn = VETreeNode.GetFolder(1);
|
||||
FolderInfo fi = vtn.VEObject as FolderInfo;
|
||||
int fiCount = fi.ChildFolderCount;
|
||||
advTreeProcSets.Nodes.Clear();
|
||||
lstCheckedDocVersions.Clear();
|
||||
topnode = new DevComponents.AdvTree.Node();
|
||||
topnode.Text = "Available Procedure Sets";
|
||||
topnode.Tag = fi;
|
||||
advTreeProcSets.Nodes.Add(topnode);
|
||||
//advTreeProcSets.AfterNodeInsert += new TreeNodeCollectionEventHandler(advTreeProcSets_AfterNodeInsert);
|
||||
|
||||
|
||||
foreach (FolderInfo fic in fi.ChildFolders)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = fic.ToString();
|
||||
newnode.Tag = fic;
|
||||
|
||||
//int tmp;
|
||||
//if (topnode == null)
|
||||
//{
|
||||
// newnode.Text = "Available Procedure Sets";
|
||||
// tmp = advTreeProcSets.Nodes.Add(newnode);
|
||||
// topnode = newnode;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// newnode.Selectable = true;
|
||||
// newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
|
||||
// newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
|
||||
// newnode.CheckBoxThreeState = false;
|
||||
// newnode.CheckBoxVisible = true;
|
||||
// tmp = topnode.Nodes.Add(newnode);
|
||||
//}
|
||||
cntnd++;
|
||||
if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion
|
||||
{
|
||||
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
|
||||
tnt.Text = "VLN_DUMMY";
|
||||
newnode.Nodes.Add(tnt);
|
||||
topnode.Nodes.Add(newnode);
|
||||
}
|
||||
}
|
||||
|
||||
// if nothing was added to the tree, just put in the node above the docversions...
|
||||
if (advTreeProcSets.Nodes.Count == 0)
|
||||
{
|
||||
cntnd++;
|
||||
fi = Mydocversion.MyFolder;
|
||||
topnode = new DevComponents.AdvTree.Node();
|
||||
topnode.Text = fi.ToString();
|
||||
advTreeProcSets.Nodes.Add(topnode);
|
||||
topnode.Tag = fi;
|
||||
}
|
||||
|
||||
advTreeProcSets.BeforeExpand += new DevComponents.AdvTree.AdvTreeNodeCancelEventHandler(advTreeProcSets_BeforeExpand);
|
||||
|
||||
// position to the procedure set in the tree if we have a procedure open
|
||||
if (Mydocversion != null)
|
||||
advTreeProcSetsPreSelect();
|
||||
else
|
||||
advTreeProcSets.Nodes[0].SelectedCell = advTreeProcSets.Nodes[0].Cells[0]; // select the first node - fixes cosmetic problem
|
||||
|
||||
//if (blSeachTabClicked)
|
||||
// cbxTextSearchText.Focus(); // set initial focus to enter search text
|
||||
}
|
||||
void advTreeProcSets_BeforeExpand(object sender, DevComponents.AdvTree.AdvTreeNodeCancelEventArgs e)
|
||||
{
|
||||
DevComponents.AdvTree.Node par = e.Node;
|
||||
// get first child's text, if it has one & if the text is VLN_DUMMY, load children
|
||||
DevComponents.AdvTree.Node tn = null;
|
||||
if (par.Nodes.Count > 0) tn = par.Nodes[0];
|
||||
if (tn.Text == "VLN_DUMMY") // expand this
|
||||
{
|
||||
par.Nodes.Clear();
|
||||
Object obj = par.Tag;
|
||||
if (!(obj is FolderInfo)) return; // should always be folderinfo on expand
|
||||
FolderInfo fi = (FolderInfo)obj;
|
||||
if (fi.ChildFolderCount > 0)
|
||||
{
|
||||
foreach (FolderInfo fic in fi.ChildFolders)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = fic.ToString();
|
||||
newnode.Tag = fic;
|
||||
par.Nodes.Add(newnode);
|
||||
if (fic.HasChildren) // allow for '+' for tree expansion
|
||||
{
|
||||
DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
|
||||
tnt.Text = "VLN_DUMMY";
|
||||
newnode.Nodes.Add(tnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (fi.FolderDocVersionCount > 0)
|
||||
{
|
||||
foreach (DocVersionInfo dv in fi.FolderDocVersions)
|
||||
{
|
||||
DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
newnode.Text = dv.ToString();
|
||||
newnode.Tag = dv;
|
||||
newnode.Selectable = true;
|
||||
newnode.CheckBoxAlignment = DevComponents.AdvTree.eCellPartAlignment.NearCenter;
|
||||
newnode.CheckBoxStyle = eCheckBoxStyle.CheckBox;
|
||||
newnode.CheckBoxThreeState = false;
|
||||
newnode.CheckBoxVisible = true;
|
||||
par.Nodes.Add(newnode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void advTreeProcSets_AfterCheck(object sender, DevComponents.AdvTree.AdvTreeCellEventArgs e)
|
||||
{
|
||||
DevComponents.AdvTree.Node n = advTreeProcSets.SelectedNode;
|
||||
if (n.Checked)
|
||||
{
|
||||
n.Style = DevComponents.AdvTree.NodeStyles.Apple;
|
||||
lstCheckedDocVersions.Add((DocVersionInfo)n.Tag);
|
||||
if (lstCheckedDocVersions.Count == 1)//Mydocversion == null)
|
||||
{
|
||||
Mydocversion = (DocVersionInfo)n.Tag;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
n.Style = null;
|
||||
lstCheckedDocVersions.Remove((DocVersionInfo)n.Tag);
|
||||
if (lstCheckedDocVersions.Count == 1)
|
||||
{
|
||||
if (Mydocversion != lstCheckedDocVersions[0])
|
||||
{
|
||||
Mydocversion = lstCheckedDocVersions[0];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (lstCheckedDocVersions.Count == 0)
|
||||
Mydocversion = null;
|
||||
// do this if either none, or more than one procedure set selected
|
||||
//advTreeStepTypes.Nodes.Clear();
|
||||
//lstCheckedStepTypes.Clear();
|
||||
//lstCheckedStepTypesStr.Clear();
|
||||
//Node newnode = new DevComponents.AdvTree.Node();
|
||||
//newnode.Text = "....select a procedure set for types to appear...";
|
||||
//advTreeStepTypes.Nodes.Add(newnode);
|
||||
//buildStepTypePannelTitle();
|
||||
}
|
||||
}
|
||||
//// Enable the RO combo list only if at least one procedure set node
|
||||
//// is selected
|
||||
//cmboTreeROs.Enabled = (lstCheckedDocVersions.Count > 0);
|
||||
//gpFindROs.Enabled = cmboTreeROs.Enabled;
|
||||
|
||||
//SetupContextMenu();
|
||||
|
||||
//buildSetToSearchPanelTitle();
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
private void advTreeProcSets_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e)
|
||||
{
|
||||
DevComponents.AdvTree.Node n = advTreeProcSets.SelectedNode;
|
||||
}
|
||||
private void advTreeProcSetsPreSelect()
|
||||
{
|
||||
bool keeplooking = true;
|
||||
//build a stack (bread crumb trail) of where is procedure set came from within the tree.
|
||||
Stack<string> crumbs = new Stack<string>();
|
||||
|
||||
crumbs.Push(Mydocversion.Name); // ex: "working draft"
|
||||
crumbs.Push(Mydocversion.MyFolder.Name); // ex: "Emergency Procedures"
|
||||
FolderInfo fi = Mydocversion.MyFolder.MyParent;
|
||||
while (fi != null)
|
||||
{
|
||||
if (fi.MyParent != null)
|
||||
crumbs.Push(fi.Name);
|
||||
fi = fi.MyParent;
|
||||
}
|
||||
crumbs.Push(advTreeProcSets.Nodes[0].Text); //top node of my tree
|
||||
|
||||
// now walk the tree, looking for the node names we saved in the stack.
|
||||
NodeCollection monkeys = advTreeProcSets.Nodes;
|
||||
while (keeplooking)
|
||||
{
|
||||
Node climber = LookInTree(monkeys, crumbs.Pop());
|
||||
keeplooking = (climber != null && crumbs.Count > 0);
|
||||
if (keeplooking)
|
||||
monkeys = climber.Nodes;
|
||||
if (!keeplooking && climber != null)
|
||||
{
|
||||
climber.Checked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
private Node LookInTree(NodeCollection monkeys, string bananna)
|
||||
{
|
||||
Node foundit = null;
|
||||
foreach (Node chimp in monkeys)
|
||||
{
|
||||
if (chimp.Text.Equals(bananna))
|
||||
{
|
||||
foundit = chimp;
|
||||
// need to select the node (cell) for it to be checked
|
||||
chimp.SelectedCell = chimp.Cells[0];
|
||||
if (chimp.Nodes.Count > 0)
|
||||
chimp.Expand();
|
||||
break;
|
||||
}
|
||||
chimp.Collapse();
|
||||
}
|
||||
return foundit;
|
||||
}
|
||||
#endregion
|
||||
#region RO Tree
|
||||
public void advTreeROFillIn(bool blSeachTabClicked)
|
||||
{
|
||||
DevComponents.AdvTree.Node topnode = null;
|
||||
advTreeRO.Nodes.Clear();
|
||||
if (_MyROFSTLookup == null) return;
|
||||
advTreeRO.BeforeExpand +=new AdvTreeNodeCancelEventHandler(advTreeRO_BeforeExpand);
|
||||
advTreeRO.AfterExpand += new AdvTreeNodeEventHandler(advTreeRO_AfterExpandorCollapse);
|
||||
advTreeRO.AfterCollapse += new AdvTreeNodeEventHandler(advTreeRO_AfterExpandorCollapse);
|
||||
topnode = new DevComponents.AdvTree.Node();
|
||||
topnode.Text = "All Referenced Objects";
|
||||
topnode.Tag = null;
|
||||
topnode.CheckBoxVisible = true;
|
||||
advTreeRO.Nodes.Add(topnode);
|
||||
|
||||
for (int i = 0; i < _MyROFSTLookup.myHdr.myDbs.Length; i++)
|
||||
{
|
||||
DevComponents.AdvTree.Node tn = new DevComponents.AdvTree.Node();
|
||||
tn.Text = _MyROFSTLookup.myHdr.myDbs[i].dbiTitle;
|
||||
tn.Tag = _MyROFSTLookup.myHdr.myDbs[i];
|
||||
tn.CheckBoxVisible = true;
|
||||
topnode.Nodes.Add(tn);
|
||||
AddDummyGroup(_MyROFSTLookup.myHdr.myDbs[i], tn);
|
||||
}
|
||||
|
||||
|
||||
//foreach (FolderInfo fic in fi.ChildFolders)
|
||||
//{
|
||||
// DevComponents.AdvTree.Node newnode = new DevComponents.AdvTree.Node();
|
||||
// newnode.Text = fic.ToString();
|
||||
// newnode.Tag = fic;
|
||||
|
||||
// cntnd++;
|
||||
// if (fic.ChildFolderCount > 0 || fic.FolderDocVersionCount > 0) // allow for '+' for tree expansion
|
||||
// {
|
||||
// DevComponents.AdvTree.Node tnt = new DevComponents.AdvTree.Node();
|
||||
// tnt.Text = "VLN_DUMMY";
|
||||
// newnode.Nodes.Add(tnt);
|
||||
// topnode.Nodes.Add(newnode);
|
||||
// }
|
||||
//}
|
||||
|
||||
//// if nothing was added to the tree, just put in the node above the docversions...
|
||||
//if (advTreeProcSets.Nodes.Count == 0)
|
||||
//{
|
||||
// cntnd++;
|
||||
// fi = Mydocversion.MyFolder;
|
||||
// topnode = new DevComponents.AdvTree.Node();
|
||||
// topnode.Text = fi.ToString();
|
||||
// advTreeProcSets.Nodes.Add(topnode);
|
||||
// topnode.Tag = fi;
|
||||
//}
|
||||
|
||||
//advTreeProcSets.BeforeExpand += new DevComponents.AdvTree.AdvTreeNodeCancelEventHandler(advTreeProcSets_BeforeExpand);
|
||||
|
||||
//// position to the procedure set in the tree if we have a procedure open
|
||||
//if (Mydocversion != null)
|
||||
// advTreeProcSetsPreSelect();
|
||||
//else
|
||||
// advTreeProcSets.Nodes[0].SelectedCell = advTreeProcSets.Nodes[0].Cells[0]; // select the first node - fixes cosmetic problem
|
||||
|
||||
//if (blSeachTabClicked)
|
||||
// cbxTextSearchText.Focus(); // set initial focus to enter search text
|
||||
}
|
||||
|
||||
private void AddDummyGroup(ROFSTLookup.rodbi rodbi, DevComponents.AdvTree.Node tn)
|
||||
{
|
||||
if (rodbi.children != null && rodbi.children.Length > 0)
|
||||
{
|
||||
DevComponents.AdvTree.Node tmp = new DevComponents.AdvTree.Node();
|
||||
tmp.Text = "VLN_DUMMY_FOR_TREE";
|
||||
tn.Nodes.Add(tmp);
|
||||
}
|
||||
}
|
||||
private void advTreeRO_BeforeExpand(object sender, DevComponents.AdvTree.AdvTreeNodeCancelEventArgs e)
|
||||
{
|
||||
LoadChildren(e.Node);
|
||||
}
|
||||
|
||||
private void LoadChildren(DevComponents.AdvTree.Node tn)
|
||||
{
|
||||
object tag = tn.Tag;
|
||||
if (tn.HasChildNodes && tn.Nodes[0].Text != "VLN_DUMMY_FOR_TREE") return; // already loaded.
|
||||
if (tn.HasChildNodes && tn.Nodes[0].Text == "VLN_DUMMY_FOR_TREE") tn.Nodes[0].Remove();
|
||||
ROFSTLookup.rochild[] chld = null;
|
||||
|
||||
if (tn.Tag is ROFSTLookup.rodbi)
|
||||
{
|
||||
ROFSTLookup.rodbi db = (ROFSTLookup.rodbi)tn.Tag;
|
||||
chld = db.children;
|
||||
}
|
||||
else if (tn.Tag is ROFSTLookup.rochild)
|
||||
{
|
||||
ROFSTLookup.rochild ch = (ROFSTLookup.rochild)tn.Tag;
|
||||
chld = ch.children;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("error - no type");
|
||||
return;
|
||||
}
|
||||
// if children, add dummy node
|
||||
if (chld != null && chld.Length > 0)
|
||||
{
|
||||
//ProgressBar_Initialize(chld.Length, tn.Text);
|
||||
for (int i = 0; i < chld.Length; i++)
|
||||
{
|
||||
//ProgressBar_SetValue(i);
|
||||
DevComponents.AdvTree.Node tmp = null;
|
||||
// if this is a group, i.e. type 0, add a dummy node
|
||||
if (chld[i].type == 0 && chld[i].children == null)
|
||||
//skip it.
|
||||
// TODO: KBR how to handle this?
|
||||
//Console.WriteLine("ro junk");
|
||||
continue;
|
||||
else if (chld[i].value == null && (cbxROUsage.Checked || chld[i].children[0].ParentID != 0))
|
||||
{
|
||||
tmp = new DevComponents.AdvTree.Node();
|
||||
tmp.Text = chld[i].title;
|
||||
tmp.Tag = chld[i];
|
||||
tmp.CheckBoxVisible = true;
|
||||
int index = FindIndex(tn.Nodes, tmp.Text);
|
||||
tn.Nodes.Insert(index, tmp);
|
||||
DevComponents.AdvTree.Node sub = new DevComponents.AdvTree.Node();
|
||||
sub.Text = "VLN_DUMMY_FOR_TREE";
|
||||
tmp.Nodes.Add(sub);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = new DevComponents.AdvTree.Node();
|
||||
tmp.Text = chld[i].title;
|
||||
tmp.Tag = chld[i];
|
||||
tmp.CheckBoxVisible = true;
|
||||
int index = FindIndex(tn.Nodes, tmp.Text);
|
||||
tn.Nodes.Insert(index, tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
//ProgressBar_Clear();
|
||||
}
|
||||
void advTreeRO_AfterExpandorCollapse(object sender, AdvTreeNodeEventArgs e)
|
||||
{
|
||||
Node bottomNode = BottomTreeNode(advTreeRO.Nodes);
|
||||
Node lastNode = advTreeRO.Nodes[advTreeRO.Nodes.Count - 1];
|
||||
int top = advTreeRO.Nodes[0].Bounds.Top;
|
||||
int bottom = bottomNode.Bounds.Bottom + 5;
|
||||
int hScrollBarHeight = advTreeRO.HScrollBar != null ? advTreeRO.HScrollBar.Height : 0;
|
||||
bottom = bottomNode.Bounds.Bottom + 5;
|
||||
advTreeRO.Size = new Size(advTreeRO.Size.Width, Math.Min(525, bottom - top + hScrollBarHeight));
|
||||
if (advTreeRO.VScrollBar != null && bottom < advTreeRO.Size.Height)
|
||||
{
|
||||
int yLookFor = (bottom - advTreeRO.Size.Height) + 2 * hScrollBarHeight;
|
||||
Node topNode = FindTreeNodeAt(advTreeRO.Nodes, yLookFor);
|
||||
if (topNode != null)
|
||||
topNode.EnsureVisible();
|
||||
}
|
||||
}
|
||||
private Node FindTreeNodeAt(NodeCollection nodes, int y)
|
||||
{
|
||||
foreach (Node node in nodes)
|
||||
{
|
||||
if (node.Bounds.Top <= y && node.Bounds.Bottom >= y)
|
||||
return node;
|
||||
if (node.Bounds.Top > y)
|
||||
{
|
||||
if (node.PrevNode != null && node.PrevNode.Expanded)
|
||||
return FindTreeNodeAt(node.PrevNode.Nodes, y);
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private Node BottomTreeNode(NodeCollection nodes)
|
||||
{
|
||||
Node bottomNode = nodes[nodes.Count - 1]; // Return bottom node in collection
|
||||
if (bottomNode.Expanded) // If expanded return bottom child
|
||||
return BottomTreeNode(bottomNode.Nodes);
|
||||
return bottomNode;
|
||||
}
|
||||
private int FindIndex(NodeCollection nodes, string value)
|
||||
{
|
||||
int index = 0;
|
||||
foreach (Node node in nodes)
|
||||
{
|
||||
if (GreaterValue(node.Text, value)) return index;
|
||||
index++;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
//private static Regex _RegExGetNumber = new Regex(@"^ *[+-]?[.,0-9]+(E[+-]?[0-9]+)?");
|
||||
private bool GreaterValue(string value1, string value2)
|
||||
{
|
||||
return DisplayRO.GreaterValue(value1, value2);
|
||||
// Match match1 = _RegExGetNumber.Match(value1);
|
||||
// Match match2 = _RegExGetNumber.Match(value2);
|
||||
// if (match1.Success && match2.Success) // Compare the numeric value
|
||||
// {
|
||||
// double dbl1 = double.Parse(match1.ToString());
|
||||
// double dbl2 = double.Parse(match2.ToString());
|
||||
// return dbl1 > dbl2;
|
||||
// }
|
||||
// return String.Compare(value1, value2, true) > 0;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
private void DisplayReports_Load(object sender, EventArgs e)
|
||||
{
|
||||
tabTransitionReports.PerformClick();
|
||||
}
|
||||
|
||||
// when a node is checked (selected) then uncheck any of its children
|
||||
private void UncheckChildren(DevComponents.AdvTree.NodeCollection chldrn)
|
||||
{
|
||||
if (chldrn.Count > 0)
|
||||
{
|
||||
foreach (DevComponents.AdvTree.Node n in chldrn)
|
||||
{
|
||||
if (n.Checked)
|
||||
n.Checked = false;
|
||||
else
|
||||
UncheckChildren(n.Nodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
// when a node is checked (selected), uncheck the parents, grand parents, great grand parents, etc.
|
||||
private void UncheckParents(DevComponents.AdvTree.Node pNode)
|
||||
{
|
||||
while (pNode != null)
|
||||
{
|
||||
if (pNode.Checked) pNode.Checked = false;
|
||||
pNode = pNode.Parent;
|
||||
}
|
||||
}
|
||||
|
||||
private void advTreeRO_AfterCheck(object sender, AdvTreeCellEventArgs e)
|
||||
{
|
||||
DevComponents.AdvTree.Node n = advTreeRO.SelectedNode;
|
||||
if (n.Checked)
|
||||
{
|
||||
UncheckChildren(n.Nodes);
|
||||
UncheckParents(n.Parent);
|
||||
}
|
||||
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
|
||||
private void cbxTransToProcs_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
|
||||
private void cbxTransFromProcs_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
|
||||
private void cbxComplete_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
cbxIncldMissingROs.Checked = false;// !cbxSummary.Checked;
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
|
||||
private void cbxSummary_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
EnableOrDisablePrintButton();
|
||||
}
|
||||
private string BuildRODataFile(string ROList)
|
||||
{
|
||||
DocVersionInfo MyDVI = Mydocversion;
|
||||
string roDataFile = "PRINT.TMP";
|
||||
|
||||
if (VlnSettings.ReleaseMode.Equals("DEMO"))
|
||||
{
|
||||
MessageBox.Show("Referenced Object Reports not available in the Demo version.", "PROMS Demo Version");
|
||||
return "";
|
||||
}
|
||||
//string roapp = Environment.GetEnvironmentVariable("roapp");
|
||||
string roapp = Volian.Base.Library.ExeInfo.GetROEditorPath(); // get the path to the RO Editor Executable
|
||||
if (roapp == null)
|
||||
{
|
||||
MessageBox.Show("Could not find path to Ro Editor, check 'roapp' environment variable");
|
||||
return "";
|
||||
}
|
||||
if (MyDVI == null || MyDVI.DocVersionAssociationCount < 1)
|
||||
{
|
||||
MessageBox.Show("Could not find associated path for ro data.","No RO Data", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
return "";
|
||||
}
|
||||
//string roloc = "\"" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\" " + "\"" + ROList + "\"";
|
||||
if (!Directory.Exists(MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath))
|
||||
{
|
||||
MessageBox.Show(string.Format("RO Database directory does not exist: {0}", MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath));
|
||||
return "";
|
||||
}
|
||||
string cmpRptExePath = roapp.Substring(0, roapp.LastIndexOf("\\")) + "\\CmpRpt.exe ";
|
||||
roDataFile = MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\\" + roDataFile;
|
||||
try
|
||||
{
|
||||
|
||||
if (File.Exists(roDataFile)) File.Delete(roDataFile);
|
||||
Application.DoEvents();
|
||||
string fname = VlnSettings.TemporaryFolder + "\\ROCompleteRprt.txt";
|
||||
FileInfo fi = new FileInfo(fname);
|
||||
using (StreamWriter sw = fi.CreateText())
|
||||
{
|
||||
sw.Write(ROList);
|
||||
sw.Close();
|
||||
}
|
||||
string roloc = "\"" + MyDVI.DocVersionAssociations[0].MyROFst.MyRODb.FolderPath + "\" \"/f=" + fname + "\"";
|
||||
System.Diagnostics.Process p = System.Diagnostics.Process.Start(cmpRptExePath, roloc);
|
||||
// need to wait, sometimes the Print.tmp file that is generated is not available
|
||||
p.WaitForExit(); // without arguments, this will wait indefinately
|
||||
Application.DoEvents();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
while (ex.InnerException != null)
|
||||
ex = ex.InnerException;
|
||||
string tmpmsg = ex.Message;
|
||||
MessageBox.Show(tmpmsg, "RO Report Error: " + ex.GetType().Name);
|
||||
}
|
||||
return roDataFile;
|
||||
}
|
||||
private void btnPrintReport_Click(object sender, EventArgs e)
|
||||
{
|
||||
Cursor curcur = Cursor;
|
||||
Cursor = Cursors.WaitCursor;
|
||||
if (cbxSummary.Checked) // RO Summary Report
|
||||
{
|
||||
GenerateROList();
|
||||
OnPrintRequest(new DisplayReportsEventArgs("RO Summary Report", "RO Summary Report", MyROFSTLookup, ROList));
|
||||
}
|
||||
else if (cbxComplete.Checked) // Complete RO Report
|
||||
{
|
||||
GenerateROList();
|
||||
string ROList = GetListOfROs(false);//don't include the RODbID in the RO list
|
||||
string roDataFile = BuildRODataFile(ROList);
|
||||
OnPrintRequest(new DisplayReportsEventArgs("Complete RO Report", "Complete RO Report", roDataFile, MyROFSTLookup, cbxComplete.Checked, this.Mydocversion.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta, cbxIncldMissingROs.Checked));
|
||||
}
|
||||
else if (cbxROUsage.Checked)
|
||||
{
|
||||
bool usageSortedByProcedure = (cmbxROUsageSort.SelectedIndex == 1);
|
||||
GenerateROList();
|
||||
string SearchString = GetListOfROs(true);// Include the RODbID in the RO list
|
||||
ItemInfoList SearchResults = ItemInfoList.GetListFromROReport(DocVersionList, "", SearchString, "");
|
||||
if (!usageSortedByProcedure) // sort on ROs
|
||||
{
|
||||
Csla.SortedBindingList<ItemInfo> sortedResults = new Csla.SortedBindingList<ItemInfo>(SearchResults);
|
||||
sortedResults.ApplySort("FoundROID", ListSortDirection.Ascending);
|
||||
OnPrintRequest(new DisplayReportsEventArgs("Referenced Objects Usage By RO", "RO Usage", sortedResults, usageSortedByProcedure,cbxIncldMissingROs.Checked));
|
||||
}
|
||||
else
|
||||
OnPrintRequest(new DisplayReportsEventArgs("Referenced Objects Usage By Procedure", "RO Usage", SearchResults, usageSortedByProcedure,cbxIncldMissingROs.Checked));
|
||||
}
|
||||
else if (cbxTransFromProcs.Checked)
|
||||
{
|
||||
}
|
||||
else if (cbxTransToProcs.Checked)
|
||||
{
|
||||
}
|
||||
Cursor = curcur;
|
||||
}
|
||||
|
||||
}
|
||||
public class DisplayReportsEventArgs
|
||||
{
|
||||
private string _ReportTitle;
|
||||
public string ReportTitle
|
||||
{
|
||||
get { return _ReportTitle; }
|
||||
set { _ReportTitle = 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; }
|
||||
}
|
||||
private bool _SortUsageByProcedure;
|
||||
public bool SortUsageByProcedure
|
||||
{
|
||||
get { return _SortUsageByProcedure; }
|
||||
set { _SortUsageByProcedure = value; }
|
||||
}
|
||||
private string _RODataFile = "";
|
||||
public string RODataFile
|
||||
{
|
||||
get { return _RODataFile; }
|
||||
set { _RODataFile = value; }
|
||||
}
|
||||
private bool _CompleteROReport = true;
|
||||
public bool CompleteROReport
|
||||
{
|
||||
get { return _CompleteROReport; }
|
||||
set { _CompleteROReport = value; }
|
||||
}
|
||||
private ROFSTLookup _rofstLookup;
|
||||
public ROFSTLookup RofstLookup
|
||||
{
|
||||
get { return _rofstLookup; }
|
||||
set { _rofstLookup = value; }
|
||||
}
|
||||
private List<string> _ROListForReport;
|
||||
|
||||
public List<string> ROListForReport
|
||||
{
|
||||
get { return _ROListForReport; }
|
||||
set { _ROListForReport = value; }
|
||||
}
|
||||
private bool _IncludeMissingROs = true;
|
||||
|
||||
public bool IncludeMissingROs
|
||||
{
|
||||
get { return _IncludeMissingROs; }
|
||||
set { _IncludeMissingROs = value; }
|
||||
}
|
||||
private bool _ConvertCaretToDelta = true;
|
||||
|
||||
public bool ConvertCaretToDelta
|
||||
{
|
||||
get { return _ConvertCaretToDelta; }
|
||||
set { _ConvertCaretToDelta = value; }
|
||||
}
|
||||
private bool _IncludeEmptyROFields = true;
|
||||
|
||||
public bool IncludeEmptyROFields
|
||||
{
|
||||
get { return _IncludeEmptyROFields; }
|
||||
set { _IncludeEmptyROFields = value; }
|
||||
}
|
||||
public DisplayReportsEventArgs(string reportTitle, string typesSelected, ICollection<ItemInfo> myItemInfoList, bool sortByProcedure, bool includeMissingROs)
|
||||
{
|
||||
// RO Usage Report
|
||||
_ReportTitle = reportTitle;
|
||||
_TypesSelected = typesSelected;
|
||||
_MyItemInfoList = myItemInfoList;
|
||||
_SortUsageByProcedure = sortByProcedure;
|
||||
_IncludeMissingROs = includeMissingROs;
|
||||
|
||||
}
|
||||
public DisplayReportsEventArgs(string reportTitle, string typesSelected, string roDataFile, ROFSTLookup rofstLookUp, bool completeROReport, bool convertCaretToDelta, bool includeEmptyROFields)
|
||||
{
|
||||
_ReportTitle = reportTitle;
|
||||
_TypesSelected = typesSelected;
|
||||
_RODataFile = roDataFile;
|
||||
_CompleteROReport = completeROReport;
|
||||
_ConvertCaretToDelta = convertCaretToDelta;
|
||||
_rofstLookup = rofstLookUp;
|
||||
_IncludeEmptyROFields = includeEmptyROFields;
|
||||
}
|
||||
public DisplayReportsEventArgs(string reportTitle, string typesSelected, ROFSTLookup rofstLookUp, List<string> roListForReport)
|
||||
{
|
||||
// RO Summary Report
|
||||
_ReportTitle = reportTitle;
|
||||
_TypesSelected = typesSelected;
|
||||
_rofstLookup = rofstLookUp;
|
||||
_ROListForReport = roListForReport;
|
||||
}
|
||||
}
|
||||
public delegate void DisplayReportsEvent(object sender, DisplayReportsEventArgs args);
|
||||
}
|
Reference in New Issue
Block a user