Gestiti elementi degli split

This commit is contained in:
Annamaria Sassi
2026-01-29 12:16:54 +01:00
parent 3c5b6b0418
commit be0ea6e42d
13 changed files with 390 additions and 45 deletions
+1 -1
View File
@@ -137,7 +137,7 @@ namespace WebWindowComplex.Models
// Aggiungo Area split di default
Split SplitArea = Split.CreateSplit(this, SplitShapes.HORIZONTAL);
// imposto i parametri di default
SplitArea.SetSplitQtyHoriz(1);
SplitArea.SetSplitQtyHoriz(1, 0);
SplitArea.SetSplitStartVert(false);
// Aggiungo area
AreaList.Add(SplitArea);
@@ -88,6 +88,11 @@ namespace WebWindowComplex.Models
m_dDimension = dValue;
}
public void SetIndex(int nIndex)
{
m_nIndex = nIndex;
}
public void SetMaxDimension(double dValue)
{
m_dMax = dValue;
+138 -23
View File
@@ -30,6 +30,32 @@ namespace WebWindowComplex.Models
set
{
m_bSplitStartVert = value;
m_ElemDimVertList.Clear();
m_ElemDimHorizList.Clear();
if (value)
{
for (int i = 0; i < nSplitQtyVert; i++)
{
m_ElemDimVertList.Add(new SplitElementDimension(this, i + 1, 78, 0));
}
for (int subArea = 0; subArea < m_SplitVertList.Count; subArea++)
{
for (int index = 0; index < nSplitQtyHoriz; index++)
m_ElemDimHorizList.Add(new SplitElementDimension(this, index + 1, 78, subArea + 1));
}
}
else
{
for (int i = 0; i < nSplitQtyHoriz; i++)
{
m_ElemDimHorizList.Add(new SplitElementDimension(this, i + 1, 78, 0));
}
for (int subArea = 0; subArea < m_SplitHorizList.Count; subArea++)
{
for (int index = 0; index < nSplitQtyVert; index++)
m_ElemDimVertList.Add(new SplitElementDimension(this, index + 1, 78, subArea + 1));
}
}
}
}
@@ -79,7 +105,27 @@ namespace WebWindowComplex.Models
// aggiungo area Split di default
for (var SplitIndex = m_SplitHorizList.Count; SplitIndex <= value; SplitIndex++)
m_SplitHorizList.Add(new SplitDimension(dNewDimension, m_SplitHorizList[m_SplitHorizList.Count - 1].MeasureType, true, this, false));
ElemDimHorizList.Add(new ElementDimension(this, ElemDimHorizList.Count, 78));
//ElemDimHorizList.Add(new SplitElementDimension(this, ElemDimHorizList.Count, 78));
if (!m_bSplitStartVert)
{
//Aggiungo un elemento alla sottoarea principale
ElemDimHorizList.Add(new SplitElementDimension(this, ElemDimHorizList.Max(x => x.nIndex) + 1, 78, 0));
// Aggiungo a tutte le sottoaree degli element
int subArea = ElemDimVertList.Max(x => x.nSubArea) + 1;
for (int i = 1; i <= ElemDimVertList.Max(x => x.nIndex); i++)
{
ElemDimVertList.Add(new SplitElementDimension(this, i, 78, subArea));
}
}
else
{
// Aggiungo a tutte le sottoaree degli element
for (int i = 1; i <= ElemDimHorizList.Max(x => x.nSubArea); i++)
{
int index = ElemDimHorizList.Where(x => x.nSubArea == i).Max(x => x.nIndex);
ElemDimHorizList.Insert(index * i + (i - 1), new SplitElementDimension(this, index + 1, 78, i));
}
}
}
// Ricalcolo dimensioni rimuovendo split
else
@@ -92,7 +138,21 @@ namespace WebWindowComplex.Models
}
dLastDimension += m_SplitHorizList[m_SplitHorizList.Count - 1].dDimension;
m_SplitHorizList[m_SplitHorizList.Count - 1].SetDimension(dLastDimension);
ElemDimHorizList.RemoveAt(ElemDimHorizList.Count-1);
if (m_bSplitStartVert)
{
// Rimuovo da tutte le sottoaree degli element l'ultimo elemento
for (int subArea = 1; subArea <= ElemDimHorizList.Max(x => x.nSubArea); subArea++)
{
SplitElementDimension removeElem = ElemDimHorizList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).FirstOrDefault();
ElemDimHorizList.Remove(removeElem);
}
}
else
{
int deleteSubArea = ElemDimHorizList.Count + 1;
ElemDimHorizList.RemoveAt(ElemDimHorizList.Count - 1);
ElemDimVertList.RemoveAll(x => x.nSubArea == deleteSubArea);
}
}
// Controllo quanti split verticali ci sono
int nVert = m_SplitVertList.Count > 0 ? m_SplitVertList.Count : 1;
@@ -174,6 +234,26 @@ namespace WebWindowComplex.Models
// aggiungo area Split di default
for (var SplitIndex = m_SplitVertList.Count; SplitIndex <= value; SplitIndex++)
m_SplitVertList.Add(new SplitDimension(dNewDimension, m_SplitVertList[m_SplitVertList.Count - 1].MeasureType, true, this, true));
if (m_bSplitStartVert)
{
//Aggiungo un elemento alla sottoarea principale
ElemDimVertList.Add(new SplitElementDimension(this, ElemDimVertList.Max(x => x.nIndex) + 1, 78, 0));
// Aggiungo a tutte le sottoaree degli element
int subArea = ElemDimHorizList.Max(x => x.nSubArea) + 1;
for (int i = 1; i <= ElemDimHorizList.Max(x => x.nIndex); i++)
{
ElemDimHorizList.Add(new SplitElementDimension(this, i, 78, subArea));
}
}
else
{
// Aggiungo a tutte le sottoaree un elemento
for (int i = 1; i <= ElemDimVertList.Max(x => x.nSubArea); i++)
{
int index = ElemDimVertList.Where(x => x.nSubArea == i).Max(x => x.nIndex);
ElemDimVertList.Insert(index * i + (i - 1), new SplitElementDimension(this, index + 1, 78, i));
}
}
}
else if (value == 0)
{
@@ -200,8 +280,21 @@ namespace WebWindowComplex.Models
dLastDimension += m_SplitVertList[m_SplitVertList.Count - 1].dDimension;
m_SplitVertList[m_SplitVertList.Count - 1].SetDimension(dLastDimension);
}
ElemDimVertList.RemoveAt(ElemDimVertList.Count - 1);
if (m_bSplitStartVert)
{
int deleteSubArea = ElemDimVertList.Count + 1;
ElemDimVertList.RemoveAt(ElemDimVertList.Count - 1);
ElemDimHorizList.RemoveAll(x=>x.nSubArea == deleteSubArea);
}
else
{
// Rimuovo da tutte le sottoaree degli element l'ultimo elemento
for (int subArea = 1; subArea <= ElemDimVertList.Max(x => x.nSubArea); subArea++)
{
SplitElementDimension removeElem = ElemDimVertList.Where(x => x.nSubArea == subArea).OrderByDescending(x => x.nIndex).FirstOrDefault();
ElemDimVertList.Remove(removeElem);
}
}
}
// Controllo quanti split orizzontali ci sono
int nHoriz = m_SplitHorizList.Count > 0 ? m_SplitHorizList.Count : 1;
@@ -263,25 +356,25 @@ namespace WebWindowComplex.Models
SplitShapes OldSelShapeSplit = m_SelSplitShape;
m_SelSplitShape = (SplitShapes)value;
// Azzero quantità orizzontale e verticale
SetSplitQtyVert(0);
SetSplitQtyHoriz(0);
SetSplitQtyVert(0, 0);
SetSplitQtyHoriz(0,0);
if (m_SelSplitShape == SplitShapes.VERTICAL)
{
// Inserisco valori di default
SetSplitQtyVert(1);
SetSplitQtyVert(1, 0);
SetSplitStartVert(true);
}
else if (m_SelSplitShape == SplitShapes.HORIZONTAL)
{
// Inserisco valori di default
SetSplitQtyHoriz(1);
SetSplitQtyHoriz(1,0);
SetSplitStartVert(false);
}
else
{
// Inserisco valori di default
SetSplitQtyVert(1);
SetSplitQtyHoriz(1);
SetSplitQtyVert(1, 1);
SetSplitQtyHoriz(1, 1);
SetSplitStartVert(true);
}
if(OldSelShapeSplit == SplitShapes.GRID || m_SelSplitShape == SplitShapes.GRID)
@@ -313,7 +406,7 @@ namespace WebWindowComplex.Models
m_SplitHorizList = value;
}
}
public List<ElementDimension> ElemDimHorizList
public List<SplitElementDimension> ElemDimHorizList
{
get
{
@@ -325,7 +418,7 @@ namespace WebWindowComplex.Models
}
}
public List<ElementDimension> ElemDimVertList
public List<SplitElementDimension> ElemDimVertList
{
get
{
@@ -392,12 +485,12 @@ namespace WebWindowComplex.Models
newSplit.SetAreaType(AreaType);
foreach (var item in ElemDimHorizList)
{
ElementDimension newElementDimension = item.Copy();
SplitElementDimension newElementDimension = item.Copy();
newSplit.ElemDimHorizList.Add(newElementDimension);
}
foreach (var item in ElemDimVertList)
{
ElementDimension newElementDimension = item.Copy();
SplitElementDimension newElementDimension = item.Copy();
newSplit.ElemDimVertList.Add(newElementDimension);
}
foreach (var item in AreaList)
@@ -492,7 +585,7 @@ namespace WebWindowComplex.Models
return JsonSplit;
}
internal void SetSplitQtyHoriz(int QtyHoriz)
internal void SetSplitQtyHoriz(int QtyHoriz, int QtyVert)
{
if (QtyHoriz > m_SplitHorizList.Count)
{
@@ -520,14 +613,25 @@ namespace WebWindowComplex.Models
{
ElemDimHorizList.Clear();
}
else
else
{
for (int i = 0; i < QtyHoriz; i++)
ElemDimHorizList.Add(new ElementDimension(this, i + 1, 78));
if (bSplitStartVert)
{
for(int subArea = 0; subArea < QtyVert; subArea++)
{
for (int i = 0; i < QtyHoriz; i++)
ElemDimHorizList.Add(new SplitElementDimension(this, i + 1, 78, subArea+1));
}
}
else
{
for (int i = 0; i < QtyHoriz; i++)
ElemDimHorizList.Add(new SplitElementDimension(this, i + 1, 78, 0));
}
}
}
internal void SetSplitQtyVert(int QtyVert)
internal void SetSplitQtyVert(int QtyVert, int QtyHoriz)
{
if (QtyVert > m_SplitVertList.Count)
{
@@ -557,8 +661,19 @@ namespace WebWindowComplex.Models
}
else
{
for (int i = 0; i < QtyVert; i++)
ElemDimVertList.Add(new ElementDimension(this, i + 1, 78));
if (bSplitStartVert)
{
for (int i = 0; i < QtyVert; i++)
ElemDimVertList.Add(new SplitElementDimension(this, i + 1, 78, 0));
}
else
{
for(int subArea = 0; subArea< QtyHoriz; subArea++)
{
for (int i = 0; i < QtyVert; i++)
ElemDimVertList.Add(new SplitElementDimension(this, i+1, 78, subArea + 1));
}
}
}
}
@@ -606,8 +721,8 @@ namespace WebWindowComplex.Models
private SplitShapes m_SelSplitShape;
private List<SplitDimension> m_SplitHorizList = new List<SplitDimension>();
private List<ElementDimension> m_ElemDimHorizList = new List<ElementDimension>();
private List<ElementDimension> m_ElemDimVertList = new List<ElementDimension>();
private List<SplitElementDimension> m_ElemDimHorizList = new List<SplitElementDimension>();
private List<SplitElementDimension> m_ElemDimVertList = new List<SplitElementDimension>();
private List<SplitDimension> m_SplitPositionList = new List<SplitDimension>();
private List<IdNameStruct> m_SplitShapeList = new List<IdNameStruct>
@@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Models
{
public class SplitElementDimension:ElementDimension
{
#region Public Constructors
public SplitElementDimension(Area ParentArea, int nIndex, double dDimension, int subArea = -1):base(ParentArea, nIndex, dDimension)
{
m_nSubArea = subArea;
}
#endregion Public Constructors
#region Public Properties
public int nSubArea
{
get
{
return m_nSubArea;
}
set
{
m_nSubArea = value;
}
}
#endregion Public Properties
#region Public Methods
public void SetSubArea(int nSubArea)
{
m_nSubArea = nSubArea;
}
public SplitElementDimension Copy()
{
SplitElementDimension newSplitElementDimension = new SplitElementDimension(ParentArea, nIndex, dDimension, nSubArea);
return newSplitElementDimension;
}
#endregion Public Methods
#region Internal Methods
internal JsonSplitElementDimension Serialize()
{
JsonSplitElementDimension JsonElementDimension = new JsonSplitElementDimension(base.nIndex, base.dDimension, m_nSubArea);
return JsonElementDimension;
}
#endregion Internal Methods
#region Private Fields
private int m_nSubArea = -1;
#endregion Private Fields
}
}