aggiunti bottoni per copiare singola anta

This commit is contained in:
Annamaria Sassi
2025-09-08 18:43:28 +02:00
parent 7c41a000c2
commit 1baeeb1b1e
5 changed files with 410 additions and 89 deletions
+34 -5
View File
@@ -61,19 +61,48 @@ namespace WebWindowComplex
}
}
public ItemTable( string s_description, int n_row, int n_col)
/// <summary>
/// Indica l'indice rispetto al vettore delle sash
/// Se non è una sash vale -1
/// </summary>
private int m_numSash;
public int NumSash
{
m_desc = s_description;
Row = n_row;
Col = n_col;
get
{
return m_numSash;
}
set
{
m_numSash = value;
}
}
public ItemTable(AreaTypes elementType, string s_description,int n_row, int n_col)
/// <summary>
/// Indica il numero di figli
/// Se non ha figli vale -1
/// </summary>
private int m_numChild;
public int NumChild
{
get
{
return m_numChild;
}
set
{
m_numChild = value;
}
}
public ItemTable(AreaTypes elementType, string s_description,int n_row, int n_col, int n_numSash, int n_numChild)
{
Type = elementType;
m_desc = s_description;
Row = n_row;
Col = n_col;
NumSash = n_numSash;
NumChild = n_numChild;
}
}
}
+58 -21
View File
@@ -90,29 +90,50 @@
}
else if (currStep == CompileStep.Gerarchia)
{
<table class="table table-sm table-hover align-middle">
<tbody>
@for (int i = 0; i < ItemTableList.Count; i++)
{
<tr>
@for (int j = 0; j < m_maxCol; j++)
{
@if (j + 1 == ItemTableList[i].Col)
<div class="display-6">
<table class="table table-sm table-hover align-middle">
<tbody>
@for (int i = 0; i < ItemTableList.Count; i++)
{
<tr>
@for (int j = 0; j < m_maxCol; j++)
{
<td>
<button class="btn btn-sm btn-secondary" style="font-size: 1rem;" @onclick="() => NextStepAndPreview(CompileStep.Frame)" title="Vai a step @(CompileStep.Frame)">@ItemTableList[i].Desc</button>
</td>
CompileStep cs = CompileStep.Frame;
int indSash = -1;
@if (j + 1 == ItemTableList[i].Col)
{
@if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.FRAME)
{
cs = CompileStep.Frame;
}
else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.SPLIT)
{
cs = CompileStep.Split;
}
else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.SASH)
{
cs = CompileStep.Sash;
indSash = ItemTableList[i].NumSash;
}
else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.FILL)
{
cs = CompileStep.Fill;
}
<td>
<button class="btn btn-sm btn-secondary" style="font-size: 1rem;" @onclick="() => NextStepAndPreview(cs, indSash)" title="Vai a step @(cs)">@ItemTableList[i].Desc</button>
</td>
}
else
{
<td>@fillTable(i, j)</td>
}
}
else
{
<td>&nbsp;</td>
}
}
</tr>
}
</tbody>
</table>
</tr>
}
</tbody>
</table>
</div>
}
else if (currStep == CompileStep.Frame)
{
@@ -462,6 +483,10 @@
}
else if (currStep == CompileStep.Sash)
{
@if (currSash > SashList.Count)
{
currStep = CompileStep.Gerarchia;
}
Sash item = SashList[currSash];
<div class="container">
<div class="text-start display-4">
@@ -547,6 +572,18 @@
<label class="form-check-label fs-6 text-dark" for="HandleSashLabel@(i * 2 + j + 1)">Handle</label>
</div>
</div>
<div class="row">
@for (int k = 1; k <= i*2+j; k++)
{
int IndexCopy = k;
int IndexModify = i * 2 + j;
<div class="col-sm-3">
<div class="input-group mb-2">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => CopyContent(item, IndexCopy, IndexModify)">Copy @(k)</button>
</div>
</div>
}
</div>
</div>
</div>
</div>
+138 -17
View File
@@ -56,6 +56,7 @@ namespace WebWindowComplex
if (m_CurrWindow != null)
{
m_maxCol = 0;
m_maxRow = 0;
m_FillList = new List<Fill>();
m_SashList = new List<Sash>();
m_SplitList = new List<Split>();
@@ -238,10 +239,11 @@ namespace WebWindowComplex
m_SplitParentList = new List<SplitParent>();
m_ItemTableList = new List<ItemTable>();
m_maxCol = 0;
m_maxRow = 0;
// popolo le liste Fill, Sash e Split
CreateWindowsList(m_CurrWindow.AreaList[0], false);
CreateElementTable(m_CurrWindow.AreaList[0], 1, 1, 1, 1);
currSash = -1;
//currSash = -1;
await DoPreviewSvg();
}
@@ -329,7 +331,10 @@ namespace WebWindowComplex
{
case AreaTypes.FRAME:
{
ItemTableList.Add(new ItemTable(AreaTypes.FRAME, "FR",row, col));
if(node.AreaList.Count >= 1)
ItemTableList.Add(new ItemTable(AreaTypes.FRAME, "FR", row, col, -1, node.AreaList.Count));
else
ItemTableList.Add(new ItemTable(AreaTypes.FRAME, "FR", row, col, -1, 0));
row++;
col++;
maxRow++;
@@ -338,15 +343,30 @@ namespace WebWindowComplex
}
case AreaTypes.SASH:
{
if (node.ParentArea.AreaList.Count > 1)
// Se ha fratelli
if ((node.ParentArea.ParentArea != null && node.ParentArea.ParentArea.AreaList.Count > 1) ||
(node.ParentArea != null && node.ParentArea.AreaList.Count > 1))
{
if (node.ParentArea.AreaList[0].Equals(node))
maxCol++;
ItemTableList.Add(new ItemTable(AreaTypes.SASH, "SH", maxRow, col));
for(int i = 0; i < SashList.Count; i++)
{
if (SashList[i].Equals(node))
{
// Se il nodo ha figli, salvo il numero nell'oggetto
if(node.AreaList.Count >= 1)
ItemTableList.Add(new ItemTable(AreaTypes.SASH, "SH", maxRow, col, i, node.AreaList.Count));
else
ItemTableList.Add(new ItemTable(AreaTypes.SASH, "SH", maxRow, col, i, 0));
}
}
maxCol++;
}
else
{
ItemTableList.Add(new ItemTable(AreaTypes.SASH, "SH", row, col));
// Se il nodo ha figli, salvo il numero nell'oggetto
if (node.AreaList.Count >= 1)
ItemTableList.Add(new ItemTable(AreaTypes.SASH, "SH", row, col, 0, node.AreaList.Count));
else
ItemTableList.Add(new ItemTable(AreaTypes.SASH, "SH", row, col, 0, 0));
maxCol++;
}
row++;
@@ -356,11 +376,10 @@ namespace WebWindowComplex
}
case AreaTypes.FILL:
{
if(node.ParentArea.AreaList.Count > 1 && node.ParentArea.AreaList[0].Equals(node))
if((node.ParentArea.AreaList.Count > 1 && node.ParentArea.AreaList[0].Equals(node)) ||
(node.ParentArea.ParentArea != null && node.ParentArea.ParentArea.AreaList.Count > 1 && node.ParentArea.ParentArea.AreaList[0].AreaList[0].Equals(node)))
maxCol++;
if(node.ParentArea.AreaList.Count > 1)
maxCol++;
ItemTableList.Add(new ItemTable(AreaTypes.FILL, "FL", row, col));
ItemTableList.Add(new ItemTable(AreaTypes.FILL, "FL", maxRow, col, -1, 0));
row++;
col++;
maxRow++;
@@ -368,15 +387,21 @@ namespace WebWindowComplex
}
case AreaTypes.SPLIT:
{
if (node.ParentArea.AreaList.Count > 1)
if (node.ParentArea.AreaList.Count > 1 || (node.ParentArea.ParentArea != null && node.ParentArea.ParentArea.AreaList.Count > 1))
{
if (node.ParentArea.AreaList[0].Equals(node))
if (node.ParentArea.AreaList[0].Equals(node) || node.ParentArea.ParentArea.AreaList[0].Equals(node))
maxCol ++;
ItemTableList.Add(new ItemTable(AreaTypes.SPLIT, "SP", maxRow, col));
if (node.AreaList.Count >= 1 || node.AreaList.Count >= 1)
ItemTableList.Add(new ItemTable(AreaTypes.SPLIT, "SP", maxRow, col, -1, node.AreaList.Count));
else
ItemTableList.Add(new ItemTable(AreaTypes.SPLIT, "SP", maxRow, col, -1, 0));
}
else
{
ItemTableList.Add(new ItemTable(AreaTypes.SPLIT, "SP", row, col));
if (node.AreaList.Count >= 1 || node.AreaList.Count >= 1)
ItemTableList.Add(new ItemTable(AreaTypes.SPLIT, "SP", row, col, -1, node.AreaList.Count));
else
ItemTableList.Add(new ItemTable(AreaTypes.SPLIT, "SP", row, col, -1, 0));
maxCol++;
}
row++;
@@ -391,15 +416,100 @@ namespace WebWindowComplex
}
foreach (var item in node.AreaList)
{
CreateElementTable(item, row, col, maxRow, maxCol);
if (maxRow < m_maxRow)
CreateElementTable(item, row, col, m_maxRow, maxCol);
else
CreateElementTable(item, row, col, maxRow, maxCol);
}
}
if(maxCol> m_maxCol)
{
m_maxCol = maxCol;
}
if (maxRow > m_maxRow)
{
m_maxRow = maxRow;
}
}
private string fillTable(int row, int col)
{
List<ItemTable> itemSameCol = new List<ItemTable>();
for(int k = 0; k < row; k++)
{
if(ItemTableList[k].Col == col+1)
{
itemSameCol.Add(ItemTableList[k]);
}
continue;
}
int numItemNextCol = 0;
for (int k = 0; k < row; k++)
{
if (ItemTableList[k].Row <= row && ItemTableList[k].Col == col + 2)
{
numItemNextCol++;
}
continue;
}
if (itemSameCol.Count > 1)
{
for (int i = 0; i <= itemSameCol.Count - 2; i++)
{
if (itemSameCol[i].NumChild > 0)
numItemNextCol = numItemNextCol - itemSameCol[i].NumChild;
}
}
if (itemSameCol.Count > 0)
{
// Sono alla riga successiva di un elemento e nella stessa colonna
if(itemSameCol.Last().Row == row)
{
// se ha un solo figlio
if(itemSameCol.Last().NumChild == 1)
{
return "└";
}
else if (itemSameCol.Last().NumChild == 0)
{
return " ";
}
else
{
return "├";
}
}
// Non solo alla riga successiva
else
{
// se ha un solo figlio
if(itemSameCol.Last().NumChild == 1)
{
return " ";
}
else if (col + 2 <= m_maxCol && ItemTableList[row].Col == col + 2)
{
if (numItemNextCol < itemSameCol.Last().NumChild && numItemNextCol != (itemSameCol.Last().NumChild - 1))
{
return "├";
}
return "└";
}
else if (numItemNextCol < itemSameCol.Last().NumChild)
{
return "│";
}
else
{
return " ";
}
}
}
else
{
return " ";
}
}
/// <summary>
/// Metodo per settare tutti i Joints di Frame o Sash come ANGLED o FULL_H o FULL_V
@@ -455,6 +565,16 @@ namespace WebWindowComplex
await DoPreviewSvg();
}
private void CopyContent(Sash sashItem, int IndexCopy, int IndexModify)
{
// Rimuovo riempimento da anta selezionata
sashItem.AreaList[IndexModify].AreaList.RemoveAt(0);
// Creo la copia dell'anta scelta
Area a = sashItem.AreaList[IndexCopy-1].AreaList[0].Copy();
// Aggiungo copia all'anta selezionata
sashItem.AreaList[IndexModify].AreaList.Add(a);
}
private async Task SwapTwoAree(Area currArea)
{
currArea.SwapAree();
@@ -487,6 +607,7 @@ namespace WebWindowComplex
private List<SplitParent> m_SplitParentList = new List<SplitParent>();
private int m_maxCol = 0;
private int m_maxRow = 0;
private enum positionJoints
{
+1
View File
@@ -0,0 +1 @@

+179 -46
View File
@@ -232,6 +232,8 @@ namespace WebWindowComplex
AreaList[1] = tempArea;
}
}
public abstract Area Copy();
}
public class Frame : Area
@@ -634,6 +636,11 @@ namespace WebWindowComplex
}
}
public override Frame Copy()
{
return null;
}
internal override JsonArea Serialize()
{
JsonFrame JsonFrame = new JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty);
@@ -693,14 +700,16 @@ namespace WebWindowComplex
}
else
{
// Se tolgo singola anta, ma tengo split
SashList.RemoveAt(0);
}
}
if(m_SashList.Count == 0)
{
Area child = AreaList[0];
// Se nella singola anta ho uno split
if(!(child is Fill))
if (!(child is Fill))
{
child = child.AreaList[0].AreaList[0];
}
@@ -708,64 +717,110 @@ namespace WebWindowComplex
this.ParentArea.AreaList.Remove(this);
this.ParentArea.AreaList.Add(child);
}
// Se ho singola anta
else if (m_SashList.Count == 1)
{
// Metto come padre dell'area nello splitted l'anta stessa
List<Area> ContentArea = new List<Area>();
while (AreaList.Count > 0)
{
if (AreaList.Count == 1 & AreaList[0].AreaList.Count > 0)
{
foreach (Area selArea in AreaList[0].AreaList)
{
ContentArea.Add(selArea);
}
}
AreaList.Remove(AreaList[AreaList.Count - 1]);
}
if (ContentArea.Count > 0)
{
AreaList = ContentArea;
}
ContentArea.Add(AreaList[0].AreaList[0]);
ContentArea[0].SetParentArea(this);
AreaList.Clear();
AreaList.Add(ContentArea[0]);
//while (AreaList.Count > 0)
//{
// if (AreaList.Count == 1 & AreaList[0].AreaList.Count > 0)
// {
// foreach (Area selArea in AreaList[0].AreaList)
// {
// ContentArea.Add(selArea);
// }
// }
// AreaList.Remove(AreaList[AreaList.Count - 1]);
//}
//if (ContentArea.Count > 0)
//{
// AreaList = ContentArea;
//}
}
else
{
List<Area> ContentArea = new List<Area>();
if (AreaList.Count == 1 & SashList.Count > AreaList.Count)
// Se aggiungo ante
if(SashList.Count > AreaList.Count)
{
ContentArea.Add(AreaList.ElementAt(0));
AreaList.Clear();
}
for (int SplitIndex = AreaList.Count; SplitIndex <= SashList.Count - 1; SplitIndex++)
{
AreaList.Add(Splitted.CreateSplitted(this));
}
for (int SplitIndex = SashList.Count; SplitIndex <= AreaList.Count() - 1; SplitIndex++)
{
AreaList.Remove(AreaList[AreaList.Count - 1]);
}
if (AreaList[AreaList.Count - 1].AreaList.Count == 0)
{
if (ContentArea.Count > 0)
List<Area> ContentArea = new List<Area>();
// Salvo in ContentArea il sottoalbero delle singole aree che mantengo
if (AreaList.Count >= 1 & SashList.Count > AreaList.Count)
{
for (int SplitIndex = 0; SplitIndex <= AreaList.Count() - 1; SplitIndex++)
foreach (Area area in AreaList)
{
if (SplitIndex == 0)
{
AreaList[0].AreaList.Add(ContentArea[0]);
}
if (area is Splitted)
ContentArea.Add(area.AreaList[0]);
else
{
Fill f1 = (Fill)ContentArea[0];
AreaList[SplitIndex].AreaList.Add(Fill.CreateFill(AreaList[SplitIndex], f1.FillType));
}
ContentArea.Add(area);
}
AreaList.Clear();
}
else
for (int SplitIndex = AreaList.Count; SplitIndex <= SashList.Count - 1; SplitIndex++)
{
Fill f1 = (Fill)AreaList[AreaList.Count - 2].AreaList[0];
AreaList[AreaList.Count - 1].AreaList.Add(Fill.CreateFill(AreaList[AreaList.Count - 1], f1.FillType));
AreaList.Add(Splitted.CreateSplitted(this));
}
// Riaggiungo i sottoalberi che avevo salvato
for (int i = 0; i < AreaList.Count - 1; i++)
{
if (AreaList.Count == 2)
{
ContentArea[i].SetParentArea(AreaList[i]);
}
AreaList[i].AreaList.Add(ContentArea[i]);
}
// Aggiungo all'ultimo Splitted l'area di vetro
Fill newFill = new Fill(AreaList[1], ParentWindow);
newFill.SetFillType(FillTypes.GLASS);
newFill.SetAreaType(AreaTypes.FILL);
AreaList[AreaList.Count - 1].AreaList.Add(newFill);
}
// Se tolgo anta
else
{
for (int SplitIndex = SashList.Count; SplitIndex <= AreaList.Count() - 1; SplitIndex++)
{
AreaList.Remove(AreaList[AreaList.Count - 1]);
break;
}
}
//if (AreaList[AreaList.Count - 1].AreaList.Count == 0)
//{
// if (ContentArea.Count > 0)
// {
// if (ContentArea[0] is Fill)
// {
// for (int SplitIndex = 0; SplitIndex <= AreaList.Count() - 1; SplitIndex++)
// {
// if (SplitIndex == 0)
// {
// AreaList[0].AreaList.Add(ContentArea[0]);
// }
// else
// {
// Fill f1 = (Fill)ContentArea[0];
// AreaList[SplitIndex].AreaList.Add(Fill.CreateFill(AreaList[SplitIndex], f1.FillType));
// }
// }
// }
// else
// {
// AreaList[0].AreaList.Add(ContentArea[0]);
// AreaList[1].AreaList.Add(ContentArea[0]);
// }
// }
// else
// {
// Fill f1 = (Fill)AreaList[AreaList.Count - 2].AreaList[0];
// AreaList[AreaList.Count - 1].AreaList.Add(Fill.CreateFill(AreaList[AreaList.Count - 1], f1.FillType));
// }
//}
}
}
//RefreshHardwareList();
@@ -858,7 +913,6 @@ namespace WebWindowComplex
}
}
private bool m_bIsSashVertical;
public bool bIsSashVertical
{
@@ -1278,6 +1332,32 @@ namespace WebWindowComplex
}
}
public override Sash Copy()
{
Sash newSash = new Sash(ParentArea, m_ParentWindow);
newSash.SetAreaType(AreaType);
newSash.SetSashQty(nSashQty);
newSash.SetIsSashVertical(bIsSashVertical);
newSash.SetOrientationSashType(OrientationSashType);
newSash.SetSashBottomRailQty(SashBottomRailQty);
foreach (var item in SashList)
{
SashDimension dim = item.Copy();
newSash.SashList.Add(dim);
}
foreach (var item in JointList)
{
Joint j = item.Copy();
newSash.JointList.Add(j);
}
foreach (var item in AreaList)
{
Area a = item.Copy();
newSash.AreaList.Add(a);
}
return newSash;
}
internal override JsonArea Serialize()
{
JsonSash JsonSash = new JsonSash(m_bIsSashVertical, m_SashType, m_bSashBottomRail, m_nSashBottomRailQty/*, m_SelHardware.sId*/);
@@ -1479,6 +1559,20 @@ namespace WebWindowComplex
return Split;
}
public override Split Copy()
{
Split newSplit = new Split(ParentArea, ParentWindow);
newSplit.SetSplitQty(nSplitQty);
newSplit.SetSplitShape(SelSplitShape, true);
newSplit.SetAreaType(AreaType);
foreach(var item in AreaList)
{
Area a = item.Copy();
newSplit.AreaList.Add(a);
}
return newSplit;
}
internal override JsonArea Serialize()
{
JsonSplit JsonSplit = new JsonSplit(m_SelSplitShape);
@@ -1504,6 +1598,18 @@ namespace WebWindowComplex
return Splitted;
}
public override Splitted Copy()
{
Splitted newSplitted = new Splitted(ParentArea, ParentWindow);
newSplitted.SetAreaType(AreaType);
foreach (var item in AreaList)
{
Area a = item.Copy();
newSplitted.AreaList.Add(a);
}
return newSplitted;
}
internal override JsonArea Serialize()
{
JsonSplitted JsonSplitted = new JsonSplitted();
@@ -1576,6 +1682,14 @@ namespace WebWindowComplex
return Fill;
}
public override Fill Copy()
{
Fill newFill = new Fill(ParentArea, m_ParentWindow);
newFill.SetFillType(SelFillType);
newFill.SetAreaType(AreaType);
return newFill;
}
internal override JsonArea Serialize()
{
JsonFill JsonFill = new JsonFill(FillType);
@@ -1647,6 +1761,13 @@ namespace WebWindowComplex
m_SelJointType = value;
//NotifyPropertyChanged(nameof(SelJointTypeIndex));
}
public Joint Copy()
{
Joint newJoint = new Joint(ParentArea,nIndex, SelJointType);
return newJoint;
}
public Joint(Area ParentArea, int nIndex, Joints SelJointType)
{
m_ParentArea = ParentArea;
@@ -2006,7 +2127,6 @@ namespace WebWindowComplex
//m_Parent.SetFirstHardware();
}
}
public Openings OpeningType
{
get
@@ -2132,6 +2252,14 @@ namespace WebWindowComplex
m_dDimension = dValue;
}
public SashDimension Copy()
{
SashDimension newSashDim = new SashDimension(dDimension, bIsRelative, m_Parent);
newSashDim.SetOpeningType(SelOpeningType);
newSashDim.SetHasHandle(bHasHandle);
return newSashDim;
}
public SashDimension(double dDimension, bool bIsRelative, Sash Parent)
{
m_dDimension = dDimension;
@@ -2322,6 +2450,11 @@ namespace WebWindowComplex
m_dDimension = dValue;
}
public SplitDimension Copy()
{
SplitDimension newSplitDim = new SplitDimension(dDimension, bIsRelative, m_Parent);
return newSplitDim;
}
public SplitDimension(double dDimension, bool bIsRelative, Split Parent)
{
m_dDimension = dDimension;