C2020-003 Added logic to sort the checkoff list using both the Index and (if available) the OrderBy elements.

C2020-003 – Added the OderBy element to the Checkoff item
This commit is contained in:
John Jenko 2020-03-05 15:05:36 +00:00
parent 83ec578e88
commit b9352fc0f5
3 changed files with 103 additions and 7 deletions

View File

@ -102,7 +102,6 @@ namespace VEPROMS
rbStepSect.Enabled = (numStepSects > 0 && (isNewSection || ii.IsStepSection)); // there are step section types and current section is a step section or creating new section rbStepSect.Enabled = (numStepSects > 0 && (isNewSection || ii.IsStepSection)); // there are step section types and current section is a step section or creating new section
rbWordSect.Enabled = (numWordSects > 0 && (isNewSection || !ii.IsStepSection)); // there are word section types and current section is a word section or creating new section rbWordSect.Enabled = (numWordSects > 0 && (isNewSection || !ii.IsStepSection)); // there are word section types and current section is a word section or creating new section
} }
private void btnSectPropOK_Click(object sender, EventArgs e) private void btnSectPropOK_Click(object sender, EventArgs e)
{ {
sectionConfigBindingSource.EndEdit(); sectionConfigBindingSource.EndEdit();
@ -122,9 +121,10 @@ namespace VEPROMS
CheckOffList chkoffList = pf.FormatData.ProcData.CheckOffData.CheckOffList; CheckOffList chkoffList = pf.FormatData.ProcData.CheckOffData.CheckOffList;
CheckOffHeaderList chkoffHeaderList = pf.FormatData.ProcData.CheckOffData.CheckOffHeaderList; CheckOffHeaderList chkoffHeaderList = pf.FormatData.ProcData.CheckOffData.CheckOffHeaderList;
int maxindx = pf.FormatData.ProcData.CheckOffUCF ? pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; int maxindx = pf.FormatData.ProcData.CheckOffUCF ? pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit;
// C2020-003 use the _CheckOffIndex dictionary to get and save the index of the selected checkoff from the sorted checkoff list
if (ppGpbxSignoffCheckoff.Enabled && (chkoffList != null && maxindx > 1) if (ppGpbxSignoffCheckoff.Enabled && (chkoffList != null && maxindx > 1)
&& (ppCmbxCheckoffType.SelectedIndex != _SectionConfig.Section_CheckoffListSelection - (_hasSectionCheckoffDefault? 1:0))) && (_CheckOffIndex[ppCmbxCheckoffType.SelectedIndex] != _SectionConfig.Section_CheckoffListSelection))
_SectionConfig.Section_CheckoffListSelection = ppCmbxCheckoffType.SelectedIndex + (_hasSectionCheckoffDefault? 1:0); _SectionConfig.Section_CheckoffListSelection = _CheckOffIndex[ppCmbxCheckoffType.SelectedIndex];
if (ppCmbxCheckoffHeading.Enabled && chkoffHeaderList != null && chkoffHeaderList.MaxIndexNoInherit > 1) if (ppCmbxCheckoffHeading.Enabled && chkoffHeaderList != null && chkoffHeaderList.MaxIndexNoInherit > 1)
_SectionConfig.Section_CheckoffHeaderSelection = ppCmbxCheckoffHeading.SelectedIndex; _SectionConfig.Section_CheckoffHeaderSelection = ppCmbxCheckoffHeading.SelectedIndex;
@ -732,7 +732,43 @@ namespace VEPROMS
if (_isStepSection) if (_isStepSection)
SetupCheckoffsDropdowns(); SetupCheckoffsDropdowns();
} }
// C2020-003 This is used to sort the checkoff list from the format file
// if the checkoff has an OrderBy element, then use it for the sorting, otherwise use th checkoff Index element
private static int CompareCheckoffUsingOrderBy(CheckOff ckf1, CheckOff ckf2)
{
if (ckf1.OrderBy == null)
{
if (ckf2.OrderBy == null) // neither ckf1 nor ckf2 uses OrderBy index
{
if (ckf1.Index > ckf2.Index) return 1; //ckf1 goes before ckf2
if (ckf1.Index < ckf2.Index) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
else // ckf1 does not have OrderBy index but ckf2 has OrderBy index
{
if (ckf1.Index > ckf2.OrderBy) return 1; //ckf1 goes before ckf2
if (ckf1.Index < ckf2.OrderBy) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
}
else //ckf1 has orderBy
{
if (ckf2.OrderBy == null) // ckf1 has OrderBy index but ckf2 does not
{
if (ckf1.OrderBy > ckf2.Index) return 1; //ckf1 goes before ckf2
if (ckf1.OrderBy < ckf2.Index) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
else // both ckf1 and ckf2 has OrderBy index
{
if (ckf1.OrderBy > ckf2.OrderBy) return 1; //ckf1 goes before ckf2
if (ckf2.OrderBy > ckf1.OrderBy) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
}
}
private List<CheckOff> SectionPropertyCheckOffList = null; private List<CheckOff> SectionPropertyCheckOffList = null;
private Dictionary<int, int> _CheckOffIndex = new Dictionary<int, int>(); // C2020-003 translate the sorted index number to the actual checkoff index
private void SetupCheckoffsDropdowns() private void SetupCheckoffsDropdowns()
{ {
if (!_isStepSection) return; // not needed for accessory pages (word attachments) if (!_isStepSection) return; // not needed for accessory pages (word attachments)
@ -740,6 +776,7 @@ namespace VEPROMS
_Initializing = true; _Initializing = true;
PlantFormat pf = _SectionConfig.MyFormat!=null?_SectionConfig.MyFormat.PlantFormat:_SectionConfig.MyDefaultFormat.PlantFormat; PlantFormat pf = _SectionConfig.MyFormat!=null?_SectionConfig.MyFormat.PlantFormat:_SectionConfig.MyDefaultFormat.PlantFormat;
CheckOffList chkoffList = pf.FormatData.ProcData.CheckOffData.CheckOffList; CheckOffList chkoffList = pf.FormatData.ProcData.CheckOffData.CheckOffList;
if (chkoffList != null) chkoffList.Sort(CompareCheckoffUsingOrderBy); // C2020-003 sort the checkoff list via the Index and/or OrderBy elements
CheckOffHeaderList chkoffHeaderList = pf.FormatData.ProcData.CheckOffData.CheckOffHeaderList; CheckOffHeaderList chkoffHeaderList = pf.FormatData.ProcData.CheckOffData.CheckOffHeaderList;
int maxindx = pf.FormatData.ProcData.CheckOffUCF ? pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; int maxindx = pf.FormatData.ProcData.CheckOffUCF ? pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndex : pf.FormatData.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit;
// B2019-013: was crashing on indexer of checkofflist. If there were UCF checkoffs but none in original format, the indexer // B2019-013: was crashing on indexer of checkofflist. If there were UCF checkoffs but none in original format, the indexer
@ -764,14 +801,23 @@ namespace VEPROMS
SectionPropertyCheckOffList = new List<CheckOff>(); SectionPropertyCheckOffList = new List<CheckOff>();
// Don't put up the first item in the chkoffList, it is '{Section Default}'. // Don't put up the first item in the chkoffList, it is '{Section Default}'.
//for (int i = 1; i < chkoffList.Count; i++) //for (int i = 1; i < chkoffList.Count; i++)
int idxcnt = 0;
int translatedCfgIdx = 0;
_CheckOffIndex.Clear();
foreach (CheckOff co in chkoffList) foreach (CheckOff co in chkoffList)
{ {
if (!co.MenuItem.ToUpper().Equals("{SECTION DEFAULT}")) if (!co.MenuItem.ToUpper().Equals("{SECTION DEFAULT}"))
{
SectionPropertyCheckOffList.Add(co); SectionPropertyCheckOffList.Add(co);
_CheckOffIndex.Add(idxcnt, (int)co.Index); // C2020-003 dictionary of sorted indexes to format checkoff Index element
if (_SectionConfig.Section_CheckoffListSelection == co.Index)
translatedCfgIdx = idxcnt; // C2020-003 translate the previous checkoff select to the sorted checkoff list position
idxcnt++;
}
} }
ppGpbxSignoffCheckoff.Enabled = true; ppGpbxSignoffCheckoff.Enabled = true;
ppCmbxCheckoffType.DataSource = SectionPropertyCheckOffList; ppCmbxCheckoffType.DataSource = SectionPropertyCheckOffList;
ppCmbxCheckoffType.SelectedIndex = _SectionConfig.Section_CheckoffListSelection - (_hasSectionCheckoffDefault ? 1 : 0); ppCmbxCheckoffType.SelectedIndex = translatedCfgIdx; // C2020-003 save the actual checkoff index
} }
else else
{ {

View File

@ -1940,6 +1940,14 @@ namespace VEPROMS.CSLA.Library
return LazyLoad(ref _Index, "@Index"); return LazyLoad(ref _Index, "@Index");
} }
} }
private LazyLoad<float?> _OrderBy; // C2020-003 used to sort list of checkoffs in the combo box
public float? OrderBy
{
get
{
return LazyLoad(ref _OrderBy, "@OrderBy");
}
}
private LazyLoad<int?> _UIMark; private LazyLoad<int?> _UIMark;
public int? UIMark public int? UIMark
{ {

View File

@ -188,7 +188,43 @@ namespace Volian.Controls.Library
get { return _MyUserInfo; } get { return _MyUserInfo; }
set { _MyUserInfo = value; } set { _MyUserInfo = value; }
} }
// C2020-003 This is used to sort the checkoff list from the format file
// if the checkoff has an OrderBy element, then use it for the sorting, otherwise use th checkoff Index element
private static int CompareCheckoffUsingOrderBy(CheckOff ckf1, CheckOff ckf2)
{
if (ckf1.OrderBy == null)
{
if (ckf2.OrderBy == null) // neither ckf1 nor ckf2 uses OrderBy index
{
if (ckf1.Index > ckf2.Index) return 1; //ckf1 goes before ckf2
if (ckf1.Index < ckf2.Index) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
else // ckf1 does not have OrderBy index but ckf2 has OrderBy index
{
if (ckf1.Index > ckf2.OrderBy) return 1; //ckf1 goes before ckf2
if (ckf1.Index < ckf2.OrderBy) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
}
else //ckf1 has orderBy
{
if (ckf2.OrderBy == null) // ckf1 has OrderBy index but ckf2 does not
{
if (ckf1.OrderBy > ckf2.Index) return 1; //ckf1 goes before ckf2
if (ckf1.OrderBy < ckf2.Index) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
else // both ckf1 and ckf2 has OrderBy index
{
if (ckf1.OrderBy > ckf2.OrderBy) return 1; //ckf1 goes before ckf2
if (ckf2.OrderBy > ckf1.OrderBy) return -1; // ckf1 goes after ckf2
return 0; //ckf1 and ckf2 have the same index value
}
}
}
private Dictionary<int, int> _CheckOffIndex = new Dictionary<int, int>(); // C2020-003 translate the sorted index number to the actual checkoff index
private void TagsFillIn() private void TagsFillIn()
{ {
_Initalizing = true; _Initalizing = true;
@ -277,10 +313,16 @@ namespace Volian.Controls.Library
int maxindx = fmtdata.ProcData.CheckOffUCF ? fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndex : fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit; int maxindx = fmtdata.ProcData.CheckOffUCF ? fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndex : fmtdata.ProcData.CheckOffData.CheckOffList.MaxIndexNoInherit;
if (_checkoffsAllowed && !(fmtdata.ProcData.CheckOffData.CheckOffList == null) && !(maxindx == 0)) if (_checkoffsAllowed && !(fmtdata.ProcData.CheckOffData.CheckOffList == null) && !(maxindx == 0))
{ {
CheckOffList chkoffList = fmtdata.ProcData.CheckOffData.CheckOffList;
if (chkoffList != null) chkoffList.Sort(CompareCheckoffUsingOrderBy); // C2020-003 sort the checkoff list via the Index and/or OrderBy elements
cmbCheckoff.Items.Clear(); cmbCheckoff.Items.Clear();
foreach (CheckOff co in fmtdata.ProcData.CheckOffData.CheckOffList) _CheckOffIndex.Clear(); // C2020-003 clear the checkoff index dictionary
int sortedIndx = 0;
foreach (CheckOff co in chkoffList)
{ {
cmbCheckoff.Items.Add(co.MenuItem); cmbCheckoff.Items.Add(co.MenuItem);
_CheckOffIndex.Add(sortedIndx, (int)co.Index); // C2020-003 add the real index number for each sorted index
sortedIndx++;
} }
// bug fix B2015-186 // bug fix B2015-186
// the config had a really big number for the checkoff index. // the config had a really big number for the checkoff index.
@ -654,9 +696,9 @@ namespace Volian.Controls.Library
if (_Initalizing) return; if (_Initalizing) return;
MyEditItem.SaveContents(); MyEditItem.SaveContents();
// set selected index in the step's config. // set selected index in the step's config.
int indx = cmbCheckoff.SelectedIndex; int indx = _CheckOffIndex[cmbCheckoff.SelectedIndex]; // C2020-003 get the non-sorted index from the sorted index
// get index, if greater than 100, store that - otherwise store index down list. // get index, if greater than 100, store that - otherwise store index down list.
// if this format does not have ucf signoffs, indx is just the selected index from the combo mobx. // if this format does not have ucf signoffs, indx is just the selected index from the combo box.
if (CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF) if (CurItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.CheckOffUCF)
{ {
// get index, if greater than 100, store that - otherwise store index down list. // get index, if greater than 100, store that - otherwise store index down list.