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
+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
{