Merge branch 'release/AddHwOptions'

This commit is contained in:
2025-11-03 15:50:52 +01:00
61 changed files with 2669 additions and 965 deletions
+113 -82
View File
@@ -1,93 +1,124 @@
# WebWindowConfigurator
Componente per configurare un serramento partendo da un JWD.
Durante la configurazione ad ogni cambiamento viene aggiornata l'immagine del serramento.
## Requisiti
I requisiti per utilizzare il componente sono:
- JWD da modificare
- Lista delle famiglie hardware
- Lista hardware
- Lista dei materiali
- Lista dei colori dei materiali
- Lista dei vetri ammessi
- Lista dei profili gestiti
## Funzionalità componente
Il componente permette i seguenti comportamenti principali:
- Aggiungere un gruppo di ante al telaio,
- Aggiungere uno split al telaio o a un anta,
- Copiare il contenuto di un'anta in un'altra anta,
- Eliminare un gruppo di ante,
- Eliminare uno split
## JWD
Il JWD descrive la struttura e le caratteristiche di un serramento.
Un serramento è composto da un determinato tipo di elementi:
- Telaio (obbligatorio)
- Divisione (facoltativa)
- Gruppo ante (facoltativo)
- Riempimento (obbligatorio almeno un riempimento)
All'intero serramento sono associate le seguenti caratteristiche:
- Profilo;
- Materiale;
- Vetro;
- Colore serramento.
### Telaio (Frame)
Al frame sono associate le seguenti caratteristiche:
- Forma;
- Dimensioni;
- Soglia;
- Giunti;
- Quantità bottom Rail.
#### Forme Telaio
Le forme ammesse per il telaio sono le seguenti:
- Arc
- Circle
- Custom
- FullArc
- Rectangle
- SemiArc
- SemiFullArc
- Trapezoid
### Divisione (Split)
Uno split genera sempre almeno due sottoaree contenenti ognuna un riempimento (Fill) di tipo vetro.
Se ci sono solo due sottoaree generate da uno split, si possono scambiare tra di loro.
Uno split può essere:
- Orizzontale, definisco il numero di split orizzontali e l'altezza delle nuove aree orizzontali formate;
- Verticale, definisco il numero di split verticali e la larghezza delle nuove aree verticali formate;
- A griglia, definisco il numero di split orizzontali e verticali e l'altezza delle aree orizzontali e la larghezza delle aree verticali.
### Gruppo di ante (Sash group)
Al gruppo di ante sono associate le seguenti caratteristiche:
- Numero di ante;
- Orientamento;
- Quantità bottom rail;
- Giunti;
- Codice hardware.
#### Singola anta
La singola anta ha associate le seguenti caratteristiche:
- Tipologia di apertura;
- Dimensione;
- Se ha la maniglia.
#### Hardware
Per calcolare la lista di hardware ammessi data una famiglia di hardware servono i seguenti dati:
- Forma del gruppo di ante (tramite richiesta al programma di calcolo);
- Apertura dell'anta con la maniglia;
- Numero di ante;
- Posizione anta battente (nel caso di tre o più ante, bisogna sapere se l'anta con la maniglia è incernierata al telaio o a un'altra anta).
La richiesta della forma del gruppo di ante viene trasmessa se si cambiano i seguenti parametri:
- Forma del telaio;
- Dimensioni del telaio;
- Aggiunta di uno split;
- ELiminazione di uno split.
La lista degli hardware viene aggiornata se si cambiano i seguenti parametri:
- Forma del gruppo di ante;
- Numero ante nello stesso gruppo di ante;
- Se si sposta l'anta e cambia il tipo di apertura e/o la posizione dell'anta battente.
### Riempimento (Fill)
Descrive il tipo di riempimento: vetro o pannello.
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
## Add your files
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command:
```
cd existing_repo
git remote add origin https://gitlab.steamware.net/etis/webwindowconfigurator.git
git branch -M main
git push -uf origin main
```
## Integrate with your tools
- [ ] [Set up project integrations](https://gitlab.steamware.net/etis/webwindowconfigurator/-/settings/integrations)
## Collaborate with your team
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
- [ ] [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/)
## Test and Deploy
Use the built-in continuous integration in GitLab.
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/)
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
***
# Editing this README
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
## Suggestions for a good README
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
## Name
Choose a self-explaining name for your project.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
Mancano:
- [ ] Gestione e inserimento opzioni hardware in CardSashGroup ;
- [ ] Filtrare hardware utilizzando anche la posizione dell'anta battente.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
BIN
View File
Binary file not shown.
+3 -3
View File
@@ -27,7 +27,7 @@ namespace Test.UI.Components.Pages
public void Dispose()
{
DLService.CalcDonePipe.EA_NewMessage -= CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
}
protected MarkupString JsonSer
@@ -40,7 +40,7 @@ namespace Test.UI.Components.Pages
protected override async Task OnInitializedAsync()
{
ConfInit();
DLService.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
//await ReloadData();
await Task.Delay(1);
}
@@ -67,7 +67,7 @@ namespace Test.UI.Components.Pages
}
}
private async void CalcDonePipe_EA_NewMessage(object? sender, EventArgs e)
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
+157 -79
View File
@@ -28,40 +28,11 @@ namespace Test.UI.Components.Pages
#region Public Methods
/// <summary>
/// Comparatore euqlity obj dizionario
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
/// <param name="dict1"></param>
/// <param name="dict2"></param>
/// <returns></returns>
public bool DictionariesEqual<TKey, TValue>(Dictionary<TKey, TValue> dict1, Dictionary<TKey, TValue> dict2)
{
// Handle null cases
if (dict1 == null || dict2 == null)
return dict1 == dict2;
// Quick size check
if (dict1.Count != dict2.Count)
return false;
// Compare each key-value pair
foreach (var kvp in dict1)
{
if (!dict2.TryGetValue(kvp.Key, out TValue value))
return false; // Key missing in dict2
if (!EqualityComparer<TValue>.Default.Equals(kvp.Value, value))
return false; // Value mismatch
}
return true;
}
public void Dispose()
{
DLService.CalcDonePipe.EA_NewMessage -= CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
DLService.PipeShape.EA_NewMessage -= PipeShape_EA_NewMessage;
DLService.PipeHwOpt.EA_NewMessage -= PipeHwOption_EA_NewMessage;
}
#endregion Public Methods
@@ -73,6 +44,8 @@ namespace Test.UI.Components.Pages
/// </summary>
protected LivePayload CurrData = new LivePayload();
protected Dictionary<int, string> currGroupShape = new Dictionary<int, string>();
protected Dictionary<int, string> currHwOption = new Dictionary<int, string>();
protected string currJwd = "...";
protected Dictionary<string, string> m_CurrArgs = new Dictionary<string, string>();
protected string prevJwd = "";
@@ -149,10 +122,20 @@ namespace Test.UI.Components.Pages
#region Protected Methods
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
// JS interop or data fetches go here
isInteractive = true;
}
}
protected override async Task OnInitializedAsync()
{
ConfInit();
InitialJwd = File.ReadAllText("Data\\AntaSingola.jwd");
//InitialJwd = File.ReadAllText("Data\\FinestraDueAnteSeparate.jwd");
InitialJwd = File.ReadAllText("Data\\AntaDoppia.jwd");
currJwd = InitialJwd;
// rileggo altri dati
await ReloadData();
@@ -162,8 +145,6 @@ namespace Test.UI.Components.Pages
ColorMaterial = AvailColorMaterialList,
FamilyHardware = AvailFamilyHardwareList,
Glass = AvailGlassList,
//FamilyHardware = new List<string>(),
//Material = new List<string>(),
Hardware = AvailHardwareList,
Material = AvailMaterialList,
Profile = AvailProfileList,
@@ -172,9 +153,13 @@ namespace Test.UI.Components.Pages
CurrData = new LivePayload()
{
CurrJwd = InitialJwd,
SvgPreview = currSvg
SvgPreview = currSvg,
DictShape = currGroupShape,
DictOptionsXml = currHwOption
};
DLService.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
DLService.PipeShape.EA_NewMessage += PipeShape_EA_NewMessage;
DLService.PipeHwOpt.EA_NewMessage += PipeHwOption_EA_NewMessage;
}
#endregion Protected Methods
@@ -182,48 +167,53 @@ namespace Test.UI.Components.Pages
#region Private Fields
private string apiUrl = "";
private string calcTag = "";
private string CalcUid = "CurrWindow";
private string cFileHardware = "Hardware/Setup.json";
private string cFileTemplate = "Data/Setup.json";
private string colorMassUpdate;
private TemplateSelectDTO? currSel = null;
private string currSvg = "";
private string familyHWMassUpdate;
private string GenericBasePath = "";
private string glassMassUpdate;
private Hardware hardwareMassUpdate;
private string imgBasePath = "";
private string materialMassUpdate;
private string outClose = "";
private string outSave = "";
private string profileMassUpdate;
private string subChannel = "";
private string GenericBasePath = "";
private string glassMassUpdate;
private Hardware hardwareMassUpdate;
private string hwOptionChannel = "";
private string imgBasePath = "";
/// <summary>
/// Semaforo x definire se sia già in modalità ionterattiva o di prerendering
/// </summary>
private bool isInteractive = false;
private string materialMassUpdate;
private string outClose = "";
private string outSave = "";
private string profileMassUpdate;
private string shapeChannel = "";
private string svgChannel = "";
private string windowUid = "CurrWindow";
#endregion Private Fields
#region Private Methods
private async void CalcDonePipe_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
if (currArgs.msgUid.Equals($"{subChannel}:{windowUid}"))
{
currSvg = currArgs.newMessage;
CurrData.SvgPreview = currArgs.newMessage;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
/// <summary>
/// Effettua chiusura oggetto con eventuale save
/// </summary>
@@ -240,30 +230,118 @@ namespace Test.UI.Components.Pages
imgBasePath = Config.GetValue<string>("ServerConf:ImageBaseUrl") ?? "";
GenericBasePath = Config.GetValue<string>("ServerConf:GenericBaseUrl") ?? "";
calcTag = Config.GetValue<string>("ServerConf:CalcTag") ?? "";
subChannel = Config.GetValue<string>("ServerConf:SvgChannel") ?? "";
svgChannel = Config.GetValue<string>("ServerConf:SvgChannel") ?? "";
shapeChannel = Config.GetValue<string>("ServerConf:ShapeChannel") ?? "";
hwOptionChannel = Config.GetValue<string>("ServerConf:HwOptChannel") ?? "";
}
/// <summary>
/// Esecuzione richiesta
/// </summary>
/// <param name="CurrArgs"></param>
/// <returns></returns>
private async Task ExecRequest(Dictionary<string, string> CurrArgs)
{
outClose = "";
outSave = "";
// verifico se contiene JWD, lo aggiorno
if (CurrArgs.ContainsKey("Jwd"))
// Proseguo solo se sono in interattivo (NO prerender pagina)
if (isInteractive)
{
currJwd = CurrArgs["Jwd"];
CurrData.CurrJwd = currJwd;
outClose = "";
outSave = "";
// verifico se contiene JWD, lo aggiorno
if (CurrArgs.ContainsKey("Jwd"))
{
currJwd = CurrArgs["Jwd"];
CurrData.CurrJwd = currJwd;
}
// se il SSE variato --> invio
if (!currJwd.Equals(prevJwd) || !EgwCoreLib.Lux.Core.DictUtils.DictAreEqual(m_CurrArgs, CurrArgs))
{
m_CurrArgs = CurrArgs;
prevJwd = currJwd;
CalcRequestDTO calcRequestDTO = new CalcRequestDTO();
calcRequestDTO.EnvType = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
calcRequestDTO.DictExec = m_CurrArgs;
// chiamo la chiamata POST alla API, che manda la richiesta via REDIS
await ICService.CallRestPost($"{apiUrl}/{GenericBasePath}", $"{calcTag}/{CalcUid}", calcRequestDTO);
}
}
// se il SSE variato --> invio
if (!currJwd.Equals(prevJwd) || !DictionariesEqual(m_CurrArgs, CurrArgs))
}
private async void PipeHwOption_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
m_CurrArgs = CurrArgs;
prevJwd = currJwd;
CalcRequestDTO calcRequestDTO = new CalcRequestDTO();
calcRequestDTO.EnvType = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
calcRequestDTO.DictExec = m_CurrArgs;
// chiamo la chiamata POST alla API, che manda la richiesta via REDIS
await ICService.CallRestPost($"{apiUrl}/{GenericBasePath}", $"{calcTag}/{CalcUid}", calcRequestDTO);
if (currArgs.msgUid.StartsWith($"{hwOptionChannel}:{windowUid}"))
{
/*--------------------------------------
* FixMe Todo levare !!!
* - try/catch deserializzazione
* - se fallisse metto le stesse opzioni a ttuti i GroupId
**--------------------------------------*/
Dictionary<int, string> rawDict = new Dictionary<int, string>();
try
{
// deserializzo il dizionario delle risposte...
rawDict = JsonConvert.DeserializeObject<Dictionary<int, string>>(currArgs.newMessage) ?? new Dictionary<int, string>();
}
catch
{ }
if (rawDict.Count == 0)
{
//se il dizionario delle shape esiste uso quello...
if (CurrData.DictShape.Count > 0)
{
foreach (var item in CurrData.DictShape)
{
rawDict.Add(item.Key, currArgs.newMessage);
}
}
}
currHwOption = rawDict ?? new Dictionary<int, string>();
CurrData.DictOptionsXml = currHwOption;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
private async void PipeShape_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage) && currArgs.newMessage.Length > 2)
{
if (currArgs.msgUid.StartsWith($"{shapeChannel}:{windowUid}"))
{
// deserializzo il dizionario delle risposte...
var rawDict = JsonConvert.DeserializeObject<Dictionary<int, string>>(currArgs.newMessage);
currGroupShape = rawDict ?? new Dictionary<int, string>();
CurrData.DictShape = currGroupShape;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly SVG da mostrare
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
if (currArgs.msgUid.Equals($"{svgChannel}:{windowUid}"))
{
currSvg = currArgs.newMessage;
CurrData.SvgPreview = currArgs.newMessage;
}
await InvokeAsync(StateHasChanged);
}
await Task.Delay(1);
}
/// <summary>
+3 -3
View File
@@ -25,7 +25,7 @@ namespace Test.UI.Components.Pages
public void Dispose()
{
DLService.CalcDonePipe.EA_NewMessage -= CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
}
#endregion Public Methods
@@ -96,7 +96,7 @@ namespace Test.UI.Components.Pages
SelColorMaterial = "Black";
SelMaterial = "Pine";
SelGlass = "4T/16/4T";
DLService.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
await ReloadData();
}
@@ -123,7 +123,7 @@ namespace Test.UI.Components.Pages
#region Private Methods
private async void CalcDonePipe_EA_NewMessage(object? sender, EventArgs e)
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
+3 -3
View File
@@ -20,7 +20,7 @@ namespace Test.UI.Components.Pages
public void Dispose()
{
DLService.CalcDonePipe.EA_NewMessage -= CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
}
#endregion Public Methods
@@ -62,7 +62,7 @@ namespace Test.UI.Components.Pages
{
isLoading = true;
ConfInit();
DLService.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
await ReloadData();
}
@@ -105,7 +105,7 @@ namespace Test.UI.Components.Pages
#region Private Methods
private async void CalcDonePipe_EA_NewMessage(object? sender, EventArgs e)
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
@@ -25,7 +25,7 @@ namespace Test.UI.Components.Pages
public void Dispose()
{
DLService.CalcDonePipe.EA_NewMessage -= CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
}
#endregion Public Methods
@@ -98,7 +98,7 @@ namespace Test.UI.Components.Pages
//SelGlass = "4T/16/4T";
InitialJwd = File.ReadAllText("Data\\FinDueAnteBottomFisso.jwd");
currJwd = InitialJwd;
DLService.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
await ReloadData();
}
@@ -125,7 +125,7 @@ namespace Test.UI.Components.Pages
#region Private Methods
private async void CalcDonePipe_EA_NewMessage(object? sender, EventArgs e)
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
@@ -25,7 +25,7 @@ namespace Test.UI.Components.Pages
public void Dispose()
{
DLService.CalcDonePipe.EA_NewMessage -= CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage -= PipeSvg_EA_NewMessage;
}
#endregion Public Methods
@@ -96,7 +96,7 @@ namespace Test.UI.Components.Pages
SelColorMaterial = "Black";
SelMaterial = "Pine";
SelGlass = "4T/16/4T";
DLService.CalcDonePipe.EA_NewMessage += CalcDonePipe_EA_NewMessage;
DLService.PipeSvg.EA_NewMessage += PipeSvg_EA_NewMessage;
await ReloadData();
}
@@ -123,7 +123,7 @@ namespace Test.UI.Components.Pages
#region Private Methods
private async void CalcDonePipe_EA_NewMessage(object? sender, EventArgs e)
private async void PipeSvg_EA_NewMessage(object? sender, EventArgs e)
{
// aggiorno visualizzazione
PubSubEventArgs currArgs = (PubSubEventArgs)e;
+70 -38
View File
@@ -8,82 +8,114 @@
"Shape": "RECTANGLE",
"DimensionList": [
{
"nIndex": 1,
"sName": "Width",
"dValue": 1200.0
"Index": 1,
"Name": "Width",
"Value": 800.0
},
{
"nIndex": 2,
"sName": "Height",
"dValue": 1500.0
"Index": 2,
"Name": "Height",
"Value": 1200.0
}
],
"JointList": [
{
"nIndex": 1,
"JointType": "FULL_V"
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"JointType": "FULL_V"
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"JointType": "FULL_V"
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"JointType": "FULL_V"
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"IdGroup": 1,
"GroupId": 1,
"AreaList": [
{
"bIsSashVertical": true,
"IsSashVertical": true,
"SashList": [
{
"nSashId": 1,
"OpeningType": "TURNONLY_LEFT",
"bHasHandle": false,
"dDimension": 50.0
"SashId": 1,
"OpeningType": "TILTTURN_LEFT",
"HasHandle": true,
"Dimension": 50.0
},
{
"nSashId": 2,
"OpeningType": "TILTTURN_RIGHT",
"bHasHandle": true,
"dDimension": 50.0
"SashId": 2,
"OpeningType": "TURNONLY_RIGHT",
"HasHandle": false,
"Dimension": 50.0
}
],
"SashType": "NULL",
"JointList": [
{
"nIndex": 1,
"JointType": "FULL_V"
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"JointType": "FULL_V"
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"JointType": "FULL_V"
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"JointType": "FULL_V"
"Index": 4,
"JointType": "FULL_H"
}
],
"Hardware": "000631",
"IdGroup": 2,
"BottomRail": false,
"BottomRailQty": 0,
"Hardware": "000633",
"HwOptionList": [
{
"Name": "Entrata",
"Value": "15"
},
{
"Name": "LavManigliaPassante",
"Value": "false"
},
{
"Name": "PosizioneForoCilindro",
"Value": "sotto"
},
{
"Name": "Deviatore",
"Value": "false"
},
{
"Name": "ModelloCilindro",
"Value": "c999"
},
{
"Name": "LavCilindroPassante",
"Value": "false"
},
{
"Name": "HMan",
"Value": "400"
}
],
"GroupId": 2,
"AreaList": [
{
"IdGroup": 3,
"GroupId": 4,
"AreaList": [
{
"IdGroup": 4,
"FillType": "GLASS",
"GroupId": 3,
"AreaList": [],
"AreaType": "FILL"
}
@@ -91,11 +123,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 5,
"GroupId": 5,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 6,
"GroupId": 6,
"AreaList": [],
"AreaType": "FILL"
}
+51 -21
View File
@@ -8,73 +8,103 @@
"Shape": "RECTANGLE",
"DimensionList": [
{
"nIndex": 1,
"sName": "Width",
"dValue": 800.0
"Index": 1,
"Name": "Width",
"Value": 800.0
},
{
"nIndex": 2,
"sName": "Height",
"dValue": 1200.0
"Index": 2,
"Name": "Height",
"Value": 1200.0
}
],
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"IdGroup": 1,
"GroupId": 1,
"AreaList": [
{
"bIsSashVertical": true,
"IsSashVertical": true,
"SashList": [
{
"nSashId": 1,
"SashId": 1,
"OpeningType": "TILTTURN_LEFT",
"bHasHandle": true,
"dDimension": 100.0
"HasHandle": true,
"Dimension": 100.0
}
],
"SashType": "NULL",
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"Hardware": "000635",
"IdGroup": 2,
"HwOptionList": [
{
"Name": "Entrata",
"Value": "15"
},
{
"Name": "LavManigliaPassante",
"Value": "false"
},
{
"Name": "PosizioneForoCilindro",
"Value": "sotto"
},
{
"Name": "Deviatore",
"Value": "false"
},
{
"Name": "ModelloCilindro",
"Value": "c999"
},
{
"Name": "LavCilindroPassante",
"Value": "false"
},
{
"Name": "HMan",
"Value": "400"
}
],
"GroupId": 2,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 3,
"GroupId": 3,
"AreaList": [],
"AreaType": "FILL"
}
+65 -35
View File
@@ -8,37 +8,37 @@
"Shape": "RECTANGLE",
"DimensionList": [
{
"nIndex": 1,
"sName": "Width",
"dValue": 1500.0
"Index": 1,
"Name": "Width",
"Value": 1500.0
},
{
"nIndex": 2,
"sName": "Height",
"dValue": 2100.0
"Index": 2,
"Name": "Height",
"Value": 2100.0
}
],
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"IdGroup": 1,
"GroupId": 1,
"AreaList": [
{
"SplitShape": "HORIZONTAL",
@@ -46,22 +46,22 @@
"SplitVertList": [],
"SplitHorizList": [
{
"bIsRelative": true,
"dDimension": 40.0
"IsRelative": true,
"Dimension": 40.0
},
{
"bIsRelative": true,
"dDimension": 60.0
"IsRelative": true,
"Dimension": 60.0
}
],
"IdGroup": 2,
"GroupId": 2,
"AreaList": [
{
"IdGroup": 3,
"GroupId": 3,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 4,
"GroupId": 4,
"AreaList": [],
"AreaType": "FILL"
}
@@ -69,52 +69,82 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 5,
"GroupId": 5,
"AreaList": [
{
"bIsSashVertical": true,
"IsSashVertical": true,
"SashList": [
{
"nSashId": 1,
"SashId": 1,
"OpeningType": "TURNONLY_LEFT",
"bHasHandle": false,
"dDimension": 50.0
"HasHandle": false,
"Dimension": 50.0
},
{
"nSashId": 2,
"SashId": 2,
"OpeningType": "TILTTURN_RIGHT",
"bHasHandle": true,
"dDimension": 50.0
"HasHandle": true,
"Dimension": 50.0
}
],
"SashType": "NULL",
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"Hardware": "000631",
"IdGroup": 6,
"HwOptionList": [
{
"Name": "Entrata",
"Value": "15"
},
{
"Name": "LavManigliaPassante",
"Value": "false"
},
{
"Name": "PosizioneForoCilindro",
"Value": "sotto"
},
{
"Name": "Deviatore",
"Value": "false"
},
{
"Name": "ModelloCilindro",
"Value": "c999"
},
{
"Name": "LavCilindroPassante",
"Value": "false"
},
{
"Name": "HMan",
"Value": "400"
}
],
"GroupId": 6,
"AreaList": [
{
"IdGroup": 7,
"GroupId": 7,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 8,
"GroupId": 8,
"AreaList": [],
"AreaType": "FILL"
}
@@ -122,11 +152,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 9,
"GroupId": 9,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 10,
"GroupId": 10,
"AreaList": [],
"AreaType": "FILL"
}
+101 -41
View File
@@ -8,99 +8,129 @@
"Shape": "DOUBLECHAMFER",
"DimensionList": [
{
"nIndex": 1,
"sName": "Width",
"dValue": 1500.0
"Index": 1,
"Name": "Width",
"Value": 1500.0
},
{
"nIndex": 2,
"sName": "Height",
"dValue": 1500.0
"Index": 2,
"Name": "Height",
"Value": 1500.0
},
{
"nIndex": 3,
"sName": "Full Height",
"dValue": 1800.0
"Index": 3,
"Name": "Full Height",
"Value": 1800.0
}
],
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"IdGroup": 1,
"GroupId": 1,
"AreaList": [
{
"SplitShape": "VERTICAL",
"SplitStartVert": true,
"SplitVertList": [
{
"bIsRelative": true,
"dDimension": 50.0
"IsRelative": true,
"Dimension": 50.0
},
{
"bIsRelative": true,
"dDimension": 50.0
"IsRelative": true,
"Dimension": 50.0
}
],
"SplitHorizList": [],
"IdGroup": 2,
"GroupId": 2,
"AreaList": [
{
"IdGroup": 3,
"GroupId": 3,
"AreaList": [
{
"bIsSashVertical": true,
"IsSashVertical": true,
"SashList": [
{
"nSashId": 1,
"SashId": 1,
"OpeningType": "TILTTURN_LEFT",
"bHasHandle": true,
"dDimension": 100.0
"HasHandle": true,
"Dimension": 100.0
}
],
"SashType": "NULL",
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"Hardware": "000000",
"IdGroup": 4,
"HwOptionList": [
{
"Name": "Entrata",
"Value": "15"
},
{
"Name": "LavManigliaPassante",
"Value": "false"
},
{
"Name": "PosizioneForoCilindro",
"Value": "sotto"
},
{
"Name": "Deviatore",
"Value": "false"
},
{
"Name": "ModelloCilindro",
"Value": "c999"
},
{
"Name": "LavCilindroPassante",
"Value": "false"
},
{
"Name": "HMan",
"Value": "400"
}
],
"GroupId": 4,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 5,
"GroupId": 5,
"AreaList": [],
"AreaType": "FILL"
}
@@ -111,45 +141,75 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 6,
"GroupId": 6,
"AreaList": [
{
"bIsSashVertical": true,
"IsSashVertical": true,
"SashList": [
{
"nSashId": 1,
"SashId": 1,
"OpeningType": "TILTTURN_RIGHT",
"bHasHandle": true,
"dDimension": 100.0
"HasHandle": true,
"Dimension": 100.0
}
],
"SashType": "NULL",
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"Hardware": "000000",
"IdGroup": 7,
"HwOptionList": [
{
"Name": "Entrata",
"Value": "15"
},
{
"Name": "LavManigliaPassante",
"Value": "false"
},
{
"Name": "PosizioneForoCilindro",
"Value": "sotto"
},
{
"Name": "Deviatore",
"Value": "false"
},
{
"Name": "ModelloCilindro",
"Value": "c999"
},
{
"Name": "LavCilindroPassante",
"Value": "false"
},
{
"Name": "HMan",
"Value": "400"
}
],
"GroupId": 7,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 8,
"GroupId": 8,
"AreaList": [],
"AreaType": "FILL"
}
+34 -34
View File
@@ -8,73 +8,73 @@
"Shape": "RECTANGLE",
"DimensionList": [
{
"nIndex": 1,
"sName": "Width",
"dValue": 1500.0
"Index": 1,
"Name": "Width",
"Value": 1500.0
},
{
"nIndex": 2,
"sName": "Height",
"dValue": 1800.0
"Index": 2,
"Name": "Height",
"Value": 1800.0
}
],
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"IdGroup": 1,
"GroupId": 1,
"AreaList": [
{
"SplitShape": "GRID",
"SplitStartVert": false,
"SplitVertList": [
{
"bIsRelative": true,
"dDimension": 50.0
"IsRelative": true,
"Dimension": 50.0
},
{
"bIsRelative": true,
"dDimension": 50.0
"IsRelative": true,
"Dimension": 50.0
}
],
"SplitHorizList": [
{
"bIsRelative": true,
"dDimension": 30.0
"IsRelative": true,
"Dimension": 30.0
},
{
"bIsRelative": true,
"dDimension": 40.0
"IsRelative": true,
"Dimension": 40.0
},
{
"bIsRelative": true,
"dDimension": 30.0
"IsRelative": true,
"Dimension": 30.0
}
],
"IdGroup": 2,
"GroupId": 2,
"AreaList": [
{
"IdGroup": 3,
"GroupId": 3,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 4,
"GroupId": 4,
"AreaList": [],
"AreaType": "FILL"
}
@@ -82,11 +82,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 5,
"GroupId": 5,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 6,
"GroupId": 6,
"AreaList": [],
"AreaType": "FILL"
}
@@ -94,11 +94,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 7,
"GroupId": 7,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 8,
"GroupId": 8,
"AreaList": [],
"AreaType": "FILL"
}
@@ -106,11 +106,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 9,
"GroupId": 9,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 10,
"GroupId": 10,
"AreaList": [],
"AreaType": "FILL"
}
@@ -118,11 +118,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 11,
"GroupId": 11,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 12,
"GroupId": 12,
"AreaList": [],
"AreaType": "FILL"
}
@@ -130,11 +130,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 13,
"GroupId": 13,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 14,
"GroupId": 14,
"AreaList": [],
"AreaType": "FILL"
}
+20 -20
View File
@@ -8,60 +8,60 @@
"Shape": "RECTANGLE",
"DimensionList": [
{
"nIndex": 1,
"sName": "Width",
"dValue": 1500.0
"Index": 1,
"Name": "Width",
"Value": 1500.0
},
{
"nIndex": 2,
"sName": "Height",
"dValue": 1800.0
"Index": 2,
"Name": "Height",
"Value": 1800.0
}
],
"JointList": [
{
"nIndex": 1,
"Index": 1,
"JointType": "FULL_H"
},
{
"nIndex": 2,
"Index": 2,
"JointType": "FULL_H"
},
{
"nIndex": 3,
"Index": 3,
"JointType": "FULL_H"
},
{
"nIndex": 4,
"Index": 4,
"JointType": "FULL_H"
}
],
"BottomRail": false,
"BottomRailQty": 0,
"IdGroup": 1,
"GroupId": 1,
"AreaList": [
{
"SplitShape": "VERTICAL",
"SplitStartVert": true,
"SplitVertList": [
{
"bIsRelative": true,
"dDimension": 50.0
"IsRelative": true,
"Dimension": 50.0
},
{
"bIsRelative": true,
"dDimension": 50.0
"IsRelative": true,
"Dimension": 50.0
}
],
"SplitHorizList": [],
"IdGroup": 2,
"GroupId": 2,
"AreaList": [
{
"IdGroup": 3,
"GroupId": 3,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 4,
"GroupId": 4,
"AreaList": [],
"AreaType": "FILL"
}
@@ -69,11 +69,11 @@
"AreaType": "SPLITTED"
},
{
"IdGroup": 5,
"GroupId": 5,
"AreaList": [
{
"FillType": "GLASS",
"IdGroup": 6,
"GroupId": 6,
"AreaList": [],
"AreaType": "FILL"
}
+38 -38
View File
@@ -4,7 +4,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -13,7 +13,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -31,7 +31,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -58,7 +58,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -67,7 +67,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -94,7 +94,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -112,7 +112,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -130,7 +130,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4_Centrale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 2
},
@@ -139,7 +139,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TiltTurn",
"shape": "Trapezoidal",
"shape": "Trapezoid",
"sashQty": 2,
"sashPosition": 1
},
@@ -148,7 +148,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4_CerniereScomparsa",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -157,7 +157,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -166,7 +166,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -175,7 +175,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 4,
"sashPosition": 2
},
@@ -193,7 +193,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12_Centrale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 2
},
@@ -220,7 +220,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -229,7 +229,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 4,
"sashPosition": 2
},
@@ -238,7 +238,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -247,7 +247,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4_Centrale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 2
},
@@ -256,7 +256,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -265,7 +265,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12_Centrale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 2
},
@@ -292,7 +292,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -301,7 +301,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -337,7 +337,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 4,
"sashPosition": 2
},
@@ -346,7 +346,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -373,7 +373,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12_Laterale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -382,7 +382,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TiltTurn",
"shape": "Trapezoidal",
"shape": "Trapezoid",
"sashQty": 2,
"sashPosition": 1
},
@@ -391,7 +391,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4_Laterale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -400,7 +400,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12_CernieraScomparsa",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -436,7 +436,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4_Laterale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -454,7 +454,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -463,7 +463,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -499,7 +499,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12_Laterale",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -508,7 +508,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 4,
"sashPosition": 2
},
@@ -535,7 +535,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria4",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 2,
"sashPosition": 1
},
@@ -553,7 +553,7 @@
"familyName": "ArTechPlana",
"description": "ArTechPlana_Aria12",
"openingType": "TiltTurn",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 3,
"sashPosition": 1
},
@@ -562,7 +562,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TurnOnly",
"shape": "Rectangular",
"shape": "Rectangle",
"sashQty": 1,
"sashPosition": 1
},
@@ -580,7 +580,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria12",
"openingType": "TiltTurn",
"shape": "Trapezoidal",
"shape": "Trapezoid",
"sashQty": 1,
"sashPosition": 1
},
@@ -607,7 +607,7 @@
"familyName": "ArTech",
"description": "ArTech_Aria4",
"openingType": "TiltTurn",
"shape": "Trapezoidal",
"shape": "Trapezoid",
"sashQty": 1,
"sashPosition": 1
}
+2 -2
View File
@@ -34,8 +34,8 @@
<ProjectReference Include="..\WebWindowComplex\WebWindowComplex.csproj" />
<ProjectReference Include="..\WebWindowConfigurator\WebWindowConfigurator.csproj" />
<ProjectReference Include="..\WebWindowTest\WebWindowTest.csproj" />
<PackageReference Include="EgwCoreLib.Lux.Core" Version="1.0.2510.2109" />
<PackageReference Include="EgwCoreLib.Lux.Data" Version="1.0.2510.2109" />
<PackageReference Include="EgwCoreLib.Lux.Core" Version="1.0.2510.2310" />
<PackageReference Include="EgwCoreLib.Lux.Data" Version="1.0.2510.2310" />
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2510.610" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2510.610" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.21" />
+8 -3
View File
@@ -10,16 +10,21 @@
"Redis": "redis.ufficio:26379, serviceName=devel, DefaultDatabase=6, keepAlive=180, connectTimeout=15000, syncTimeout=15000, asyncTimeout=15000, abortConnect=false, ssl=false, allowAdmin=true"
},
"ServerConf": {
"BomChannel": "Egw:bom",
"HwListChannel": "Egw:hw:list",
"HwOptChannel": "Egw:hw:opt",
"ProfListChannel": "Egw:prof:list",
"PubChannel": "EgwEngineInput",
"ShapeChannel": "Egw:shape:curr",
"SubChannel": "EgwEngineOutput",
"SvgChannel": "Egw:svg:img",
"BomChannel": "Egw:bom",
"UpdateChannel": "Egw:update",
"Prog.ApiUrl": "https://office.egalware.com/lux/srv/api",
"ImageBaseUrl": "window",
"GenericBaseUrl": "generic",
"ImageLiveTag": "svg",
"ImageFileTag": "svgfile",
"ImageCalcTag": "svg-preview",
"ImageFileTag": "svgfile",
"ImageLiveTag": "svg",
"CalcTag": "calc"
}
}
+1 -1
View File
@@ -8,7 +8,7 @@
@if (CurrSashList.Count == 0 && CurrSplitList.Count == 0)
{
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="RaiseAddSash">Aggiungi window</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="RaiseAddSash">Aggiungi sash</button>
</div>
}
</div>
+33
View File
@@ -0,0 +1,33 @@
@using static WebWindowComplex.Json.WindowConst
<div class="row mt-2">
<div class="col d-flex justify-content-start align-items-center">
<h6 class="fw-bold">Hardware option</h6>
</div>
<div class="col d-flex justify-content-md-end align-items-center">
<button class="btn btn-primary" type="button" @onclick="() => changeCollapsed()">+</button>
</div>
</div>
<div class="row mt-2">
@if (!hwOptCollapsed)
{
@foreach (var currOpt in CurrSash.HwOptionList)
{
switch (currOpt.Type)
{
case HwOptionTypes.COMBO:
{
AGBOptionCombo currOptCombo = (AGBOptionCombo)currOpt;
<EditOptionCombo CurrOpt="currOptCombo" EC_Update="RaiseOptCombo"></EditOptionCombo>
break;
}
case HwOptionTypes.TEXT:
{
AGBOptionText currOptText = (AGBOptionText)currOpt;
<EditOptionText CurrOpt="currOptText" EC_Update="RaiseOptText"></EditOptionText>
break;
}
}
}
}
</div>
@@ -0,0 +1,67 @@
using Microsoft.AspNetCore.Components;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using WebWindowComplex.Models;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Compo
{
public partial class AreaHwOption
{
/// <summary>
/// Sash corrente rispetto alla lista Sash
/// </summary>
[Parameter]
public Sash CurrSash { get; set; } = null!;
/// <summary>
/// Evento per aggiornare gli hardware option di tipo combo
/// </summary>
[Parameter]
public EventCallback<AGBOptionCombo> EC_UpdateHwOptCombo { get; set; }
/// <summary>
/// Evento per aggiornare gli hardware option di tipo text
/// </summary>
[Parameter]
public EventCallback<AGBOptionText> EC_UpdateHwOptText { get; set; }
/// <summary>
/// Evento per chiamare la prima volta la lista delle opzioni
/// </summary>
[Parameter]
public EventCallback<int> EC_FirstHwOptionList { get; set; }
private bool hwOptCollapsed = true;
private async Task changeCollapsed()
{
hwOptCollapsed = !hwOptCollapsed;
if(CurrSash.HwOptionList.Count == 0)
{
await EC_FirstHwOptionList.InvokeAsync(CurrSash.GroupId);
}
}
/// <summary>
/// Report aggiornamento Option Combo
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
private async Task RaiseOptCombo(AGBOptionCombo updRec)
{
await EC_UpdateHwOptCombo.InvokeAsync(updRec);
}
/// <summary>
/// Report aggiornamento Option Text
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
private async Task RaiseOptText(AGBOptionText updRec)
{
await EC_UpdateHwOptText.InvokeAsync(updRec);
}
}
}
+11 -7
View File
@@ -3,9 +3,13 @@
<h6 class="fw-bold">Sash @(CurrSashGroup.SashList.Count == 1 ? "" : (IndexSash + 1))</h6>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="OpeningSash@(IndexSash + 1)">Tipology</label>
<select class="form-select" id="OpeningSash@(IndexSash + 1)" @bind="@CurrSashDim.SelOpeningTypeIndex">
<option value="0">A bandiera sinistra</option>
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@CurrSashDim.SelOpeningTypeIndex">
@foreach (var openingType in CurrSashDim.OpeningTypeList)
{
<option value=@(openingType.Id)>@(openingType.Name)</option>
}
@* <option value="0">A bandiera sinistra</option>
<option value="1">A bandiera destra</option>
<option value="2">Ad anta-ribalta sinistra</option>
<option value="3">Ad anta-ribalta destra</option>
@@ -16,7 +20,7 @@
<option value="8">Complanare sinistra</option>
<option value="9">Complanare destra</option>
<option value="10">Scorrevole sinistra</option>
<option value="11">Scorrevole destra</option>
<option value="11">Scorrevole destra</option> *@
</select>
</div>
<div class="input-group mb-2">
@@ -26,10 +30,10 @@
</div>
<div class="d-flex justify-content-start fs-5 mb-2">
<div class="px-1">
<input class="form-check-input ml-auto" type="checkbox" name="Handle" id="HandleSashLabel@(IndexSash + 1)" checked="@CurrSashDim.bHasHandle" @onclick="() => RaiseChangeHandle(CurrSashDim, CurrSashGroup)">
<input class="form-check-input ml-auto" type="checkbox" name="Handle" checked="@CurrSashDim.bHasHandle" @onclick="() => RaiseChangeHandle(CurrSashDim, CurrSashGroup)">
</div>
<div class="px-2">
<label class="form-check-label fs-6 text-dark" for="HandleSashLabel@(IndexSash + 1)">Handle</label>
<label class="form-check-label fs-6 text-dark">Handle</label>
</div>
</div>
@if (!(CurrAnta.AreaList[0] is Split))
@@ -37,7 +41,7 @@
<div class="row">
<div class="col-sm-6">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => CurrAnta.AddSplit(CurrAnta)">Aggiungi split</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="() => CurrAnta.AddSplit()">Aggiungi split</button>
</div>
</div>
<div class="col-sm-6">
+1 -1
View File
@@ -6,7 +6,7 @@
</div>
<div class="col d-flex justify-content-center">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => CurrSplitted.AddFirstSash()">Add Sash</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="() => RaiseAddSash(CurrSplitted)">Add Sash</button>
</div>
</div>
<div class="col d-flex justify-content-center">
+26
View File
@@ -32,6 +32,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public EventCallback<DataAreaSplit> EC_CopySash { get; set; }
/// <summary>
/// Evento per aggiungere Sash
/// </summary>
[Parameter]
public EventCallback<DataAreaSplitted> EC_AddSash { get; set; }
#endregion Public Properties
#region Private Methods
@@ -50,6 +56,18 @@ namespace WebWindowComplex.Compo
await EC_CopySash.InvokeAsync(Args);
}
/// <summary>
/// Sollevo evento richiesta copia sash
/// </summary>
/// <returns></returns>
private async Task RaiseAddSash(Splitted item)
{
var Args = new DataAreaSplitted
{
splitted = item
};
await EC_AddSash.InvokeAsync(Args);
}
#endregion Private Methods
}
@@ -62,4 +80,12 @@ namespace WebWindowComplex.Compo
public Splitted splitted { get; set; }
public int index { get; set; }
}
/// <summary>
/// Classe per raggruppare oggetti che servono per aggiungere Sash
/// </summary>
public class DataAreaSplitted
{
public Splitted splitted { get; set; }
}
}
+6 -1
View File
@@ -47,7 +47,12 @@
{
@if (currSplitted.AreaList.First().Equals(CurrItem))
{
<AreaSplit CurrSashList="SashList" CurrSplittedList="SplittedList" CurrSplitted="currSplitted" EC_CopySash="CopySash"></AreaSplit>
<AreaSplit CurrSashList="SashList"
CurrSplittedList="SplittedList"
CurrSplitted="currSplitted"
EC_AddSash="AddSash"
EC_CopySash="CopySash">
</AreaSplit>
}
}
+16
View File
@@ -38,6 +38,12 @@ namespace WebWindowComplex.Compo
[Parameter]
public EventCallback<DataAreaSplit> EC_CopySash { get; set; }
/// <summary>
/// Evento per aggiungere sash
/// </summary>
[Parameter]
public EventCallback<DataAreaSplitted> EC_AddSash { get; set; }
/// <summary>
/// Evento per tornare nella pagine Tree
/// </summary>
@@ -97,6 +103,16 @@ namespace WebWindowComplex.Compo
await EC_CopySash.InvokeAsync(Args);
}
/// <summary>
/// Sollevo evento per aggiungere sash
/// </summary>
/// <param name="Args"></param>
/// <returns></returns>
protected async Task AddSash(DataAreaSplitted Args)
{
await EC_AddSash.InvokeAsync(Args);
}
#endregion Protected Methods
#region Private Methods
+21 -13
View File
@@ -15,16 +15,20 @@
<div class="row">
<div class="col-sm-6">
<div class="input-group my-2">
<label class="input-group-text" for="FrameShape">Shape</label>
<select class="form-select" id="FrameShape" @bind="@FrameWindow.SelShapeIndex">
<option value="0">Rectangle</option>
<label class="input-group-text">Shape</label>
<select class="form-select" @bind="@SelShapeIndex">
@foreach (var i in FrameWindow.ShapeList)
{
<option value="@(i.Id)">@(i.Name)</option>
}
@* <option value="0">Rectangle</option>
<option value="1">Right Chamfer</option>
<option value="2">Left Chamfer</option>
<option value="3">Double Chamfer</option>
<option value="4">Arc</option>
<option value="5">Arc Full</option>
<option value="6">Double Arc</option>
<option value="7">Triangle</option>
<option value="7">Triangle</option> *@
</select>
</div>
</div>
@@ -45,8 +49,8 @@
<h6 class="fw-bold">Threshold</h6>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="Threshold">Tipology</label>
<select class="form-select" id="Threshold">
<label class="input-group-text">Tipology</label>
<select class="form-select">
<option value="0">Soglia</option>
<option value="1">Sgocciolatoio</option>
</select>
@@ -62,17 +66,17 @@
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.ANGLED, FrameWindow)">Angled</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.ANGLED, FrameWindow)">Angled</button>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_H, FrameWindow)">Horizontal</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_H, FrameWindow)">Horizontal</button>
</div>
</div>
<div class="col d-flex">
<div class="input-group mb-2 justify-content-center">
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_V, FrameWindow)">Vertical</button>
<button class="btn btn-outline-secondary btn-sm" @onclick="() => ChangeAllJoints(WebWindowComplex.Json.WindowConst.Joints.FULL_V, FrameWindow)">Vertical</button>
</div>
</div>
</div>
@@ -84,14 +88,14 @@
</div>
</div>
<div class="col-sm-6">
@if (SashList.Count == 0)
@if (SashList.Count == 0)
{
<div class="d-flex justify-content-start align-items-center">
<h6 class="fw-bold">Bottom rail</h6>
</div>
<div class="row">
<div class="input-group mb-2">
<span class="input-group-text" id="BottomRailQty">Quantity</span>
<span class="input-group-text">Quantity</span>
<input type="number" class="form-control" @bind="@FrameWindow.BottomRailQty">
</div>
</div>
@@ -103,6 +107,10 @@
@if (!(FrameWindow.AreaList[0] is Split) || (SashList.Count == 0 && SplitList.Count == 0))
{
<AreaFrame CurrFrameWindow="FrameWindow" CurrSashList="SashList" CurrSplitList="SplitList" EC_AddSash="AddSash" EC_AddSplit="AddSplit"></AreaFrame>
<AreaFrame CurrFrameWindow="FrameWindow"
CurrSashList="SashList"
CurrSplitList="SplitList"
EC_AddSash="AddSash"
EC_AddSplit="AddSplit">
</AreaFrame>
}
+24 -1
View File
@@ -32,11 +32,17 @@ namespace WebWindowComplex.Compo
public EventCallback<bool> EC_ReqClose { get; set; }
/// <summary>
/// Evento per cambiare tutti i Joints
/// Evento per aggiornare info frame (es cambaire tutti i Joints)
/// </summary>
[Parameter]
public EventCallback<Frame> EC_UpdateFrame { get; set; }
/// <summary>
/// Evento per richiesta calcolo Shape
/// </summary>
[Parameter]
public EventCallback<Frame> EC_UpdateShape { get; set; }
/// <summary>
/// Frame corrente
/// </summary>
@@ -65,6 +71,7 @@ namespace WebWindowComplex.Compo
/// <returns></returns>
private async Task AddSash()
{
//await EC_UpdateShape.InvokeAsync(FrameWindow);
await EC_AddSash.InvokeAsync(true);
}
@@ -111,10 +118,26 @@ namespace WebWindowComplex.Compo
if (updRec != null)
{
currRec = updRec;
await EC_UpdateShape.InvokeAsync(FrameWindow);
await EC_UpdateFrame.InvokeAsync(FrameWindow);
}
}
protected int SelShapeIndex
{
get => FrameWindow.SelShapeIndex;
set
{
if (FrameWindow.SelShapeIndex != value)
{
//foreach(var s in SashList)
// s.SelHardwareFromId = "000000";
FrameWindow.SelShapeIndex = value;
_ = EC_UpdateShape.InvokeAsync(FrameWindow);
}
}
}
/// <summary>
/// Report aggiornamento joint
/// </summary>
+61 -45
View File
@@ -1,4 +1,4 @@
@using static WebWindowComplex.LayoutConst
@using static WebWindowComplex.Json.WindowConst
<div class="card shadow-sm rounded mb-4">
<div class="card-header bg-light bg-opacity-25">
@@ -20,7 +20,7 @@
<div class="row">
<div class="col-sm-6">
<div class="input-group mb-2">
<span class="input-group-text" id="NumberSash@(SashList.IndexOf(CurrItem) + 1)">Qty sash</span>
<span class="input-group-text">Qty sash</span>
<input type="number" class="form-control" @bind="@CurrItem.nSashQty">
</div>
</div>
@@ -28,8 +28,8 @@
<div class="row">
<div class="col-sm-6">
<div class="input-group mb-2">
<label class="input-group-text" for="OrientationSash@(SashList.IndexOf(CurrItem) + 1)">Tipology</label>
<select class="form-select" id="OrientationSash@(SashList.IndexOf(CurrItem) + 1)" @bind="@CurrItem.SelOrientationSashTypeIndex">
<label class="input-group-text">Tipology</label>
<select class="form-select" @bind="@CurrItem.SelOrientationSashTypeIndex">
<option value="0">Vertical</option>
<option value="1">Horizontal</option>
</select>
@@ -37,13 +37,63 @@
</div>
<div class="col-sm-6">
<div class="input-group mb-2">
<span class="input-group-text" id="BottomRailQty@(SashList.IndexOf(CurrItem) + 1)">Qty bottom rail</span>
<span class="input-group-text">Qty bottom rail</span>
<input type="number" class="form-control" @bind="@CurrItem.SashBottomRailQty">
</div>
</div>
</div>
<hr />
<div class="row">
<div class="col-sm-6">
<div class="row justify-content-between align-items-center">
<div class="col d-flex justify-content-start align-items-center">
<h6 class="fw-bold">Hardware</h6>
</div>
</div>
<div class="input-group mb-2">
<label class="input-group-text">Family</label>
<select class="form-select" @bind="@CurrItem.SelFamilyHardware">
@if (Sash.s_FamilyHardwareList == null || Sash.s_FamilyHardwareList.Count == 0)
{
<option value="000000">CUSTOM</option>
}
else
{
@foreach (var familyHw in Sash.s_FamilyHardwareList)
{
<option value="@familyHw">@familyHw</option>
}
}
</select>
</div>
@if (string.IsNullOrEmpty(CurrItem.SashShape))
{
<div class="input-group mb-2">
<label class="input-group-text">Type</label>
<select class="form-select">
<option value="000000">Custom HW</option>
</select>
</div>
}
else
{
<div class="input-group mb-2">
<label class="input-group-text">Type</label>
<select class="form-select" @bind="SelHwType">
<option value="000000">Custom HW</option>
@foreach (var hlItem in CurrItem.HardwareList)
{
<option value="@hlItem.Id">@hlItem.Description</option>
}
</select>
</div>
<AreaHwOption CurrSash="CurrItem"
EC_UpdateHwOptCombo="UpdateOptCombo"
EC_UpdateHwOptText="UpdateOptText"
EC_FirstHwOptionList="FirstHwOptionList">
</AreaHwOption>
}
</div>
<div class="col-sm-6">
<div class="row justify-content-between align-items-center">
<div class="col d-flex justify-content-start align-items-center">
@@ -70,45 +120,6 @@
<EditJoint CurrRec="joint" EC_Update="UpdateJoint"></EditJoint>
}
</div>
<div class="col-sm-6">
<div class="row">
<div class="col d-flex justify-content-start align-items-center">
<h6 class="fw-bold">Hardware</h6>
</div>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="FamilyHardware">Family</label>
<select class="form-select" id="FamilyHardware" @bind="@CurrItem.SelFamilyHardware">
@if (Sash.s_FamilyHardwareList == null || Sash.s_FamilyHardwareList.Count == 0)
{
<option value="000000">ERROR - Missing family HW List</option>
}
else
{
@foreach (var familyHw in Sash.s_FamilyHardwareList)
{
<option value="@familyHw">@familyHw</option>
}
}
</select>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="Hardware">Type</label>
<select class="form-select" id="Hardware" @bind="SelHwType">
@if (CurrItem.HardwareList == null || CurrItem.HardwareList.Count == 0)
{
<option value="000000">ERROR - Missing HW List</option>
}
else
{
@foreach (var hlItem in CurrItem.HardwareList)
{
<option value="@hlItem.Id">@hlItem.Description</option>
}
}
</select>
</div>
</div>
</div>
</div>
</div>
@@ -118,7 +129,12 @@
<div class="row">
@for (int i = 0; i < CurrItem.SashList.Count; i++)
{
<AreaSash CurrSashDim="CurrItem.SashList[i]" CurrSashGroup="CurrItem" IndexSash="i" EC_ChangeHandle="ChangeHandle" EC_CopyContentSash="CopyContentSash"></AreaSash>
<AreaSash CurrSashDim="CurrItem.SashList[i]"
CurrSashGroup="CurrItem"
IndexSash="i"
EC_ChangeHandle="ChangeHandle"
EC_CopyContentSash="CopyContentSash">
</AreaSash>
}
</div>
</div>
+54 -1
View File
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Components;
using WebWindowComplex.Models;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Compo
{
@@ -61,18 +62,26 @@ namespace WebWindowComplex.Compo
[Parameter]
public EventCallback<Sash> EC_UpdateSashHardware { get; set; }
/// <summary>
/// Evento per richiedere la prima volta le opzioni hardware
/// </summary>
[Parameter]
public EventCallback<int> EC_CallFirstHwOpt { get; set; }
/// <summary>
/// Lista di sash
/// </summary>
[Parameter]
public List<Sash> SashList { get; set; } = null!;
public AGBOption CurrAGBOpt;
#endregion Public Properties
#region Protected Properties
/// <summary>
///
/// Selezione hardware
/// </summary>
protected string SelHwType
{
@@ -162,6 +171,50 @@ namespace WebWindowComplex.Compo
}
}
/// <summary>
/// Report aggiornamento Option Combo
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
private async Task UpdateOptCombo(AGBOptionCombo updRec)
{
// cerco il record
var currRec = CurrItem.HwOptionList.FirstOrDefault(x => x.sName == updRec.sName && x.sDescription == updRec.sDescription);
// lo aggiorno
if (updRec != null)
{
currRec = updRec;
await EC_UpdateSashHardware.InvokeAsync(CurrItem);
}
}
/// <summary>
/// Report aggiornamento Option Text
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
private async Task UpdateOptText(AGBOptionText updRec)
{
// cerco il record
var currRec = CurrItem.HwOptionList.FirstOrDefault(x => x.sName == updRec.sName && x.sDescription == updRec.sDescription);
// lo aggiorno
if (updRec != null)
{
currRec = updRec;
await EC_UpdateSashHardware.InvokeAsync(CurrItem);
}
}
/// <summary>
/// Prima chiamata hw option list
/// </summary>
/// <param name="updRec"></param>
/// <returns></returns>
private async Task FirstHwOptionList(int groupId)
{
await EC_CallFirstHwOpt.InvokeAsync(groupId);
}
#endregion Private Methods
}
}
+16 -12
View File
@@ -32,12 +32,16 @@
<div class="row">
<div class="col-sm-6">
<div class="input-group mb-2">
<label class="input-group-text" for="ShapeSplit@(SplitList.IndexOf(CurrItem) + 1)">Shape</label>
<select class="form-select" id="ShapeSplit@(SplitList.IndexOf(CurrItem) + 1)" @bind="@CurrItem.SelSplitShapeIndex">
<option value="0">Vertical</option>
<label class="input-group-text">Shape</label>
<select class="form-select" @bind="@CurrItem.SelSplitShapeIndex">
@foreach (var shapeType in CurrItem.SplitShapeList)
{
<option value=@(shapeType.Id)>@(shapeType.Name)</option>
}
@* <option value="0">Vertical</option>
<option value="1">Horizontal</option>
<option value="2">Grid</option>
<option value="3">Custom</option>
<option value="3">Custom</option> *@
</select>
</div>
</div>
@@ -47,7 +51,7 @@
{
<div class="col-sm-6">
<div class="input-group mb-2">
<span class="input-group-text" id="SplitQty@(SplitList.IndexOf(CurrItem) + 1)">QtyVert</span>
<span class="input-group-text">QtyVert</span>
<input type="number" class="form-control" @bind="@CurrItem.nSplitQtyVert">
</div>
</div>
@@ -56,7 +60,7 @@
{
<div class="col-sm-6">
<div class="input-group mb-2">
<span class="input-group-text" id="SplitQty@(SplitList.IndexOf(CurrItem) + 1)">QtyHoriz</span>
<span class="input-group-text">QtyHoriz</span>
<input type="number" class="form-control" @bind="@CurrItem.nSplitQtyHoriz">
</div>
</div>
@@ -69,7 +73,7 @@
@foreach (var dim in CurrItem.SplitVertList)
{
<div class="input-group mb-2">
<span class="input-group-text" id="SplitDimension@(CurrItem.SplitVertList.IndexOf(dim) + 1)">Width</span>
<span class="input-group-text">Width</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<span class="input-group-text">%</span>
</div>
@@ -79,7 +83,7 @@
@foreach (var dim in CurrItem.SplitHorizList)
{
<div class="input-group mb-2">
<span class="input-group-text" id="SplitDimension@(CurrItem.SplitHorizList.IndexOf(dim) + 1)">Height</span>
<span class="input-group-text">Height</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<span class="input-group-text">%</span>
</div>
@@ -92,7 +96,7 @@
{
<div class="col-sm-6">
<div class="input-group mb-2">
<span class="input-group-text" id="SplitDimension@(CurrItem.SplitHorizList.IndexOf(dim) + 1)">Height</span>
<span class="input-group-text">Height</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<span class="input-group-text">%</span>
</div>
@@ -105,7 +109,7 @@
{
<div class="col-sm-6">
<div class="input-group mb-2">
<span class="input-group-text" id="SplitDimension@(CurrItem.SplitVertList.IndexOf(dim) + 1)">Width</span>
<span class="input-group-text">Width</span>
<input type="number" class="form-control" @bind="@dim.dDimension">
<span class="input-group-text">%</span>
</div>
@@ -119,10 +123,10 @@
<div class="col-sm-6">
<div class="d-flex justify-content-start fs-5 mb-2">
<div class="px-1">
<input class="form-check-input ml-auto" type="checkbox" name="SplitStartVert" id="SplitStartVert@(SplitList.IndexOf(CurrItem) + 1)" checked="@CurrItem.bSplitStartVert" @oninput="(ChangeEventArgs e) => ChangeStartVert(e, CurrItem)">
<input class="form-check-input ml-auto" type="checkbox" name="SplitStartVert" checked="@CurrItem.bSplitStartVert" @oninput="(ChangeEventArgs e) => ChangeStartVert(e, CurrItem)">
</div>
<div class="px-2">
<label class="form-check-label fs-6 text-dark" for="SplitStartVert@(SplitList.IndexOf(CurrItem) + 1)">StartVert</label>
<label class="form-check-label fs-6 text-dark">StartVert</label>
</div>
</div>
</div>
+6 -1
View File
@@ -9,29 +9,34 @@
{
CompileStep cs = CompileStep.Frame;
int ind = -1;
string s = "Vai a step ";
@if (j + 1 == ItemTableList[i].Col)
{
@if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.FRAME)
{
cs = CompileStep.Frame;
s = s + cs.ToString();
}
else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.SPLIT)
{
cs = CompileStep.Split;
ind = ItemTableList[i].IndexItem;
s = s + cs.ToString() + ((ind + 1) > 0 ? (ind + 1): "");
}
else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.SASH)
{
cs = CompileStep.Sash;
ind = ItemTableList[i].IndexItem;
s = s + cs.ToString() + ((ind + 1) > 0 ? (ind + 1) : "");
}
else if (ItemTableList[i].Type is Json.WindowConst.AreaTypes.FILL)
{
cs = CompileStep.Fill;
ind = ItemTableList[i].IndexItem;
s = s + cs.ToString() + ((ind + 1) > 0 ? (ind + 1) : "");
}
<td>
<button class="btn btn-sm btn-secondary" style="font-size: 1rem;" @onclick="() => RaiseNextStep(cs, ind)" title="Vai a step @(cs)">@ItemTableList[i].Desc</button>
<button class="btn btn-sm btn-secondary" style="font-size: 1rem;" @onclick="() => RaiseNextStep(cs, ind)" title="@(s)">@ItemTableList[i].Desc</button>
</td>
}
else
+1 -1
View File
@@ -1,6 +1,6 @@
<div class="input-group mb-2">
<span class="input-group-text" id="NameDimFrame@(CurrRec.nIndex)">@CurrRec.sName</span>
<span class="input-group-text">@CurrRec.sName</span>
<input type="number" class="form-control" @bind="@CurrVal">
<span class="input-group-text">mm</span>
</div>
+2 -2
View File
@@ -1,7 +1,7 @@
@using static WebWindowComplex.LayoutConst
<div class="input-group mb-2">
<label class="input-group-text" for="IndexJoint@(CurrRec.nIndex)">@((PositionJoints)(CurrRec.nIndex - 1))</label>
<select class="form-select" id="IndexJoint@(CurrRec.nIndex)" @bind="@CurrVal">
<label class="input-group-text">@((PositionJoints)(CurrRec.nIndex - 1))</label>
<select class="form-select" @bind="@CurrVal">
<option value="0">Angled</option>
<option value="1">Full H</option>
<option value="2">Full V</option>
@@ -0,0 +1,9 @@
<div class="input-group mb-2">
<label class="input-group-text">@(CurrOpt.sName)</label>
<select class="form-select" @bind="CurrValue">
@foreach (var currValueCombo in CurrOpt.ValueList)
{
<option value="@currValueCombo.sValue">@currValueCombo.sDescription</option>
}
</select>
</div>
@@ -0,0 +1,36 @@
using Microsoft.AspNetCore.Components;
using WebWindowComplex.Models;
namespace WebWindowComplex.Compo
{
public partial class EditOptionCombo
{
#region Public Properties
[Parameter]
public AGBOptionCombo CurrOpt { get; set; } = null!;
[Parameter]
public EventCallback<AGBOptionCombo> EC_Update { get; set; }
#endregion Public Properties
#region Private Properties
private string CurrValue
{
get => CurrOpt.sValue.sValue;
set
{
if (CurrOpt.sValue.sValue != value)
{
CurrOpt.sValue = CurrOpt.ValueList.FirstOrDefault(x => x.sValue == value);
_ = EC_Update.InvokeAsync(CurrOpt);
}
}
}
#endregion Private Properties
}
}
@@ -0,0 +1,9 @@
<div class="input-group mb-2">
<label class="input-group-text">@(CurrOpt.sName)</label>
<select class="form-select" @bind="CurrValue">
@foreach (var currValueCombo in CurrOpt.ValueList)
{
<option value="@currValueCombo">@currValueCombo</option>
}
</select>
</div>
@@ -0,0 +1,36 @@
using Microsoft.AspNetCore.Components;
using WebWindowComplex.Models;
namespace WebWindowComplex.Compo
{
public partial class EditOptionText
{
#region Public Properties
[Parameter]
public AGBOptionText CurrOpt { get; set; } = null!;
[Parameter]
public EventCallback<AGBOptionText> EC_Update { get; set; }
#endregion Public Properties
#region Private Properties
private string CurrValue
{
get => CurrOpt.sValue;
set
{
if (CurrOpt.sValue != value)
{
CurrOpt.sValue = CurrOpt.ValueList.FirstOrDefault(x => x == value);
_ = EC_Update.InvokeAsync(CurrOpt);
}
}
}
#endregion Private Properties
}
}
+12 -12
View File
@@ -14,8 +14,8 @@
<div class="row">
<div class="col-sm-6">
<div class="input-group mb-2 justify-content-center">
<label class="input-group-text" for="MaterialWindow">Material</label>
<select class="form-select @(cssValid("Material"))" id="MaterialWindow" @bind="CurrMaterial">
<label class="input-group-text">Material</label>
<select class="form-select @(cssValid("Material"))" @bind="CurrMaterial">
@foreach (var item in ListPayload.Material)
{
<option value="@item">@item</option>
@@ -23,8 +23,8 @@
</select>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="ProfileWindow">Profile</label>
<select class="form-select @(cssValid("Profile"))" id="ProfileWindow" @bind="@CurrProfile">
<label class="input-group-text">Profile</label>
<select class="form-select @(cssValid("Profile"))" @bind="@CurrProfile">
@foreach (string profile in ListPayload.Profile)
{
<option value="@profile">@profile</option>
@@ -41,8 +41,8 @@
</div>
<div class="row">
<div class="input-group mb-2">
<label class="input-group-text" for="GlassWindow">Glass</label>
<select class="form-select @(cssValid("Glass"))" id="GlassWindow" @bind="@CurrGlass">
<label class="input-group-text">Glass</label>
<select class="form-select @(cssValid("Glass"))" @bind="@CurrGlass">
@foreach (string glass in ListPayload.Glass)
{
<option value="@glass">@glass</option>
@@ -50,8 +50,8 @@
</select>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="PanelWindow">Pannello</label>
<select class="form-select" id="PanelWindow">
<label class="input-group-text">Pannello</label>
<select class="form-select">
<option value="0">Liscio</option>
<option value="1">Con venatura</option>
<option value="2">Custom</option>
@@ -65,8 +65,8 @@
</div>
<div class="row">
<div class="input-group mb-2">
<label class="input-group-text" for="ColorWindow">Window</label>
<select class="form-select @(cssValid("ColorMaterial"))" id="ColorWindow" @bind="@CurrColor">
<label class="input-group-text">Window</label>
<select class="form-select @(cssValid("ColorMaterial"))" @bind="@CurrColor">
@foreach (string colorMaterial in ListPayload.ColorMaterial)
{
<option value="@colorMaterial">@colorMaterial</option>
@@ -74,8 +74,8 @@
</select>
</div>
<div class="input-group mb-2">
<label class="input-group-text" for="Trunking">Trunking</label>
<select class="form-select" id="Trunking">
<label class="input-group-text">Trunking</label>
<select class="form-select" >
<option value="0">Black</option>
<option value="1">Silver</option>
<option value="2">White</option>
+8 -7
View File
@@ -1,4 +1,5 @@
using System;
using EgwCoreLib.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -24,14 +25,14 @@ namespace WebWindowComplex.DTO
public string SvgPreview { get; set; } = string.Empty;
/// <summary>
/// Shape da verifica JWD
/// Dizionario Shape da verifica JWD
/// </summary>
public string Shape { get; set; } = string.Empty;
public Dictionary<int,string> DictShape { get; set; } = new Dictionary<int, string>();
/// <summary>
/// XML opzioni HW da verifica JWD
/// Dizionario XML opzioni HW da verifica JWD x GroupId
/// </summary>
public string OptionsXml { get; set; } = string.Empty;
public Dictionary<int, string> DictOptionsXml { get; set; } = new Dictionary<int, string>();
#endregion Public Properties
@@ -51,9 +52,9 @@ namespace WebWindowComplex.DTO
return false;
if (SvgPreview != item.SvgPreview)
return false;
if (Shape != item.Shape)
if (!DictUtils.DictAreEqual(DictOptionsXml, item.DictOptionsXml))
return false;
if (OptionsXml != item.OptionsXml)
if (!DictUtils.DictAreEqual(DictShape, item.DictShape))
return false;
return true;
+42
View File
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebWindowComplex
{
public class DictUtils
{
/// <summary>
/// Comparatore equality obj dizionario
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
/// <param name="dict1"></param>
/// <param name="dict2"></param>
/// <returns></returns>
public static bool DictAreEqual<TKey, TValue>(Dictionary<TKey, TValue> dict1, Dictionary<TKey, TValue> dict2)
{
// Handle null cases
if (dict1 == null || dict2 == null)
return dict1 == dict2;
// Quick size check
if (dict1.Count != dict2.Count)
return false;
// Compare each key-value pair
foreach (var kvp in dict1)
{
if (!dict2.TryGetValue(kvp.Key, out TValue value))
return false; // Key missing in dict2
if (!EqualityComparer<TValue>.Default.Equals(kvp.Value, value))
return false; // Value mismatch
}
return true;
}
}
}
+113 -51
View File
@@ -106,17 +106,17 @@ namespace WebWindowComplex.Json
public class JsonArea
{
private int m_nIdGroup;
private int m_nGroupId;
[JsonProperty]
public int IdGroup
public int GroupId
{
get
{
return m_nIdGroup;
return m_nGroupId;
}
set
{
m_nIdGroup = value;
m_nGroupId = value;
}
}
@@ -233,25 +233,25 @@ namespace WebWindowComplex.Json
{
}
public JsonFrame(Shapes Shape, bool BottomRail, int BottomRailQty, int nIdGroup) : base(AreaTypes.FRAME)
public JsonFrame(Shapes Shape, bool BottomRail, int BottomRailQty, int GroupId) : base(AreaTypes.FRAME)
{
m_Shape = Shape;
m_bBottomRail = BottomRail;
m_nBottomRailQty = BottomRailQty;
IdGroup = nIdGroup;
base.GroupId = GroupId;
}
internal override Area Deserialize(Area ParentArea, Window ParentWindow)
{
Frame newFrame = new Frame(null, ParentWindow);
newFrame.SetIdGroup(IdGroup);
newFrame.SetGroupId(GroupId);
newFrame.SetAreaType(AreaTypes.FRAME);
newFrame.SetSelShape(m_Shape);
newFrame.SetBottomRail(m_bBottomRail);
newFrame.SetBottomRailQty(m_nBottomRailQty);
//Frame.AppliedDone();
for (var DimensionIndex = 0; DimensionIndex <= m_DimensionList.Count - 1; DimensionIndex++)
newFrame.DimensionList[DimensionIndex].dValue = m_DimensionList[DimensionIndex].dValue;
newFrame.DimensionList[DimensionIndex].dValue = m_DimensionList[DimensionIndex].Value;
for (var JointIndex = 0; JointIndex <= m_JointList.Count - 1; JointIndex++)
newFrame.JointList[JointIndex].SetSelJointType(m_JointList[JointIndex].JointType);
foreach (var Area in AreaList)
@@ -270,7 +270,7 @@ namespace WebWindowComplex.Json
{
private bool m_bIsSashVertical;
[JsonProperty]
public bool bIsSashVertical
public bool IsSashVertical
{
get
{
@@ -367,24 +367,38 @@ namespace WebWindowComplex.Json
}
}
private List<JsonHwOption> m_HwOptionList = new List<JsonHwOption>();
[JsonProperty]
public List<JsonHwOption> HwOptionList
{
get
{
return m_HwOptionList;
}
set
{
m_HwOptionList = value;
}
}
public JsonSash() : base(AreaTypes.SASH)
{
}
public JsonSash(bool bIsSashVertical, SashTypes SashType, bool SashBottomRail, int SashBottomRailQty, string Hardware, int nIdGroup) : base(AreaTypes.SASH)
public JsonSash(bool IsSashVertical, SashTypes SashType, bool SashBottomRail, int SashBottomRailQty, string Hardware, int GroupId) : base(AreaTypes.SASH)
{
m_bIsSashVertical = bIsSashVertical;
m_bIsSashVertical = IsSashVertical;
m_SashType = SashType;
m_bBottomRail = SashBottomRail;
m_nBottomRailQty = SashBottomRailQty;
m_Hardware = Hardware;
IdGroup = nIdGroup;
base.GroupId = GroupId;
}
internal override Area Deserialize(Area ParentArea, Window ParentWindow)
{
Sash newSash = new Sash(ParentArea, ParentWindow);
newSash.SetIdGroup(IdGroup);
newSash.SetGroupId(GroupId);
newSash.SetAreaType(AreaTypes.SASH);
newSash.SetSashQty(m_SashList.Count);
newSash.SetIsSashVertical(m_bIsSashVertical);
@@ -393,14 +407,18 @@ namespace WebWindowComplex.Json
for (var SashIndex = 0; SashIndex <= m_SashList.Count - 1; SashIndex++)
{
newSash.SashList[SashIndex].SetOpeningType(m_SashList[SashIndex].OpeningType);
newSash.SashList[SashIndex].SetHasHandle(m_SashList[SashIndex].bHasHandle);
newSash.SashList[SashIndex].SetDimension(m_SashList[SashIndex].dDimension);
newSash.SashList[SashIndex].SetHasHandle(m_SashList[SashIndex].HasHandle);
newSash.SashList[SashIndex].SetDimension(m_SashList[SashIndex].Dimension);
}
foreach (var Joint in m_JointList)
newSash.JointList.Add(Joint.Deserialize((Area)ParentArea));
newSash.SetSelFamilyHardwareFromIndex(Hardware);
newSash.RefreshHardwareList();
newSash.ReqRefreshShape();
newSash.SetSelHardwareFromId(Hardware);
foreach (var HwOption in m_HwOptionList)
newSash.SelHwOptionList.Add(HwOption.Name, HwOption.Value);
//foreach (var HwOption in m_HwOptionList)
// newSash.HwOptionList.Add(HwOption.Deserialize());
foreach (var Area in AreaList)
{
var AreaDeserealized = Area.Deserialize(newSash, ParentWindow);
@@ -476,16 +494,16 @@ namespace WebWindowComplex.Json
{
}
public JsonSplit(SplitShapes SplitShape, int nIdGroup) : base(AreaTypes.SPLIT)
public JsonSplit(SplitShapes SplitShape, int GroupId) : base(AreaTypes.SPLIT)
{
m_SplitShape = SplitShape;
IdGroup = nIdGroup;
base.GroupId = GroupId;
}
internal override Area Deserialize(Area ParentArea, Window ParentWindow)
{
Split Split = new Split(ParentArea, ParentWindow);
Split.SetIdGroup(IdGroup);
Split.SetGroupId(GroupId);
Split.SetAreaType(AreaTypes.SPLIT);
Split.SetSplitShape(m_SplitShape, true);
Split.SetSplitStartVert(m_SplitStartVert);
@@ -497,8 +515,8 @@ namespace WebWindowComplex.Json
Split.SetSplitQtyVert(m_SplitVertList.Count - 1, true);
for (var SplitIndex = 0; SplitIndex <= m_SplitVertList.Count - 1; SplitIndex++)
{
Split.SplitVertList[SplitIndex].SetIsRelative(m_SplitVertList[SplitIndex].bIsRelative);
Split.SplitVertList[SplitIndex].SetDimension(m_SplitVertList[SplitIndex].dDimension);
Split.SplitVertList[SplitIndex].SetIsRelative(m_SplitVertList[SplitIndex].IsRelative);
Split.SplitVertList[SplitIndex].SetDimension(m_SplitVertList[SplitIndex].Dimension);
}
}
if (m_SplitHorizList.Count == 0)
@@ -509,8 +527,8 @@ namespace WebWindowComplex.Json
Split.SetSplitQtyHoriz(m_SplitHorizList.Count - 1, true);
for (var SplitIndex = 0; SplitIndex <= m_SplitHorizList.Count - 1; SplitIndex++)
{
Split.SplitHorizList[SplitIndex].SetIsRelative(m_SplitHorizList[SplitIndex].bIsRelative);
Split.SplitHorizList[SplitIndex].SetDimension(m_SplitHorizList[SplitIndex].dDimension);
Split.SplitHorizList[SplitIndex].SetIsRelative(m_SplitHorizList[SplitIndex].IsRelative);
Split.SplitHorizList[SplitIndex].SetDimension(m_SplitHorizList[SplitIndex].Dimension);
}
}
foreach (var Area in AreaList)
@@ -530,15 +548,15 @@ namespace WebWindowComplex.Json
public JsonSplitted() : base(AreaTypes.SPLITTED)
{
}
public JsonSplitted(int nIdGroup) : base(AreaTypes.SPLITTED)
public JsonSplitted(int GroupId) : base(AreaTypes.SPLITTED)
{
IdGroup = nIdGroup;
base.GroupId = GroupId;
}
internal override Area Deserialize(Area ParentArea, Window ParentWindow)
{
Splitted newSplitted = new Splitted(ParentArea, ParentWindow);
newSplitted.SetIdGroup(IdGroup);
newSplitted.SetGroupId(GroupId);
newSplitted.SetAreaType(AreaTypes.SPLITTED);
//Split.AppliedDone();
foreach (var Area in AreaList)
@@ -575,16 +593,16 @@ namespace WebWindowComplex.Json
{
}
public JsonFill(FillTypes FillType, int nIdGroup) : base(AreaTypes.FILL)
public JsonFill(FillTypes FillType, int GroupId) : base(AreaTypes.FILL)
{
m_FillType = FillType;
IdGroup = nIdGroup;
base.GroupId = GroupId;
}
internal override Area Deserialize(Area ParentArea, Window ParentWindow)
{
Fill Fill = new Fill(ParentArea, ParentWindow);
Fill.SetIdGroup(IdGroup);
Fill.SetGroupId(GroupId);
Fill.SetAreaType(AreaTypes.FILL);
Fill.SetFillType(m_FillType);
//Fill.AppliedDone();
@@ -604,7 +622,7 @@ namespace WebWindowComplex.Json
{
private int m_nIndex;
[JsonProperty]
public int nIndex
public int Index
{
get
{
@@ -627,9 +645,9 @@ namespace WebWindowComplex.Json
}
}
public JsonJoint(int nIndex, Joints JointType)
public JsonJoint(int Index, Joints JointType)
{
m_nIndex = nIndex;
m_nIndex = Index;
m_JointType = JointType;
}
@@ -640,11 +658,55 @@ namespace WebWindowComplex.Json
}
}
public class JsonHwOption
{
private string m_Name;
[JsonProperty]
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
private string m_Value;
[JsonProperty]
public string Value
{
get
{
return m_Value;
}
set
{
m_Value = value;
}
}
public JsonHwOption(string Name, string Value)
{
m_Name = Name;
m_Value = Value;
}
//internal AGBOption Deserialize()
//{
// AGBOption newOption = new AGBOption(m_Name, m_Value);
// return newOption;
//}
}
public class JsonFrameDimension
{
private int m_nIndex;
[JsonProperty]
public int nIndex
public int Index
{
get
{
@@ -654,7 +716,7 @@ namespace WebWindowComplex.Json
private string m_sName;
[JsonProperty]
public string sName
public string Name
{
get
{
@@ -664,7 +726,7 @@ namespace WebWindowComplex.Json
private double m_dValue;
[JsonProperty]
public double dValue
public double Value
{
get
{
@@ -676,11 +738,11 @@ namespace WebWindowComplex.Json
}
}
public JsonFrameDimension(int nIndex, string sName, double dValue)
public JsonFrameDimension(int Index, string Name, double Value)
{
m_nIndex = nIndex;
m_sName = sName;
m_dValue = dValue;
m_nIndex = Index;
m_sName = Name;
m_dValue = Value;
}
}
@@ -688,7 +750,7 @@ namespace WebWindowComplex.Json
{
private int m_nSashId;
[JsonProperty]
public int nSashId
public int SashId
{
get
{
@@ -709,7 +771,7 @@ namespace WebWindowComplex.Json
private bool m_bHasHandle;
[JsonProperty]
public bool bHasHandle
public bool HasHandle
{
get
{
@@ -723,7 +785,7 @@ namespace WebWindowComplex.Json
private double m_dDimension;
[JsonProperty]
public double dDimension
public double Dimension
{
get
{
@@ -735,12 +797,12 @@ namespace WebWindowComplex.Json
}
}
public JsonSashDimension(Openings OpeningType, bool bHasHandle, double dDimension, int nSashId)
public JsonSashDimension(Openings OpeningType, bool HasHandle, double Dimension, int SashId)
{
m_OpeningType = OpeningType;
m_bHasHandle = bHasHandle;
m_dDimension = dDimension;
m_nSashId = nSashId;
m_bHasHandle = HasHandle;
m_dDimension = Dimension;
m_nSashId = SashId;
}
}
@@ -748,7 +810,7 @@ namespace WebWindowComplex.Json
{
private bool m_bIsRelative = false;
[JsonProperty]
public bool bIsRelative
public bool IsRelative
{
get
{
@@ -758,7 +820,7 @@ namespace WebWindowComplex.Json
private double m_dDimension;
[JsonProperty]
public double dDimension
public double Dimension
{
get
{
@@ -770,10 +832,10 @@ namespace WebWindowComplex.Json
}
}
public JsonSplitDimension(bool bIsRelative, double dDimension)
public JsonSplitDimension(bool IsRelative, double Dimension)
{
m_bIsRelative = bIsRelative;
m_dDimension = dDimension;
m_bIsRelative = IsRelative;
m_dDimension = Dimension;
}
}
+7
View File
@@ -110,6 +110,13 @@ namespace WebWindowComplex.Json
HORIZONTAL = 2
}
public enum HwOptionTypes : int
{
TEXT = 1,
LENGHT = 2,
COMBO = 3
}
// Specifies the display state of an element.
public enum Visibility
{
@@ -3,34 +3,29 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Models
{
public partial class ParametriOpzioni
public partial class AGBOption
{
#region Public Constructors
public ParametriOpzioni(ParametriOpzioniParametri HdwOptionParam)
/// <summary>
/// Costruttore partendo da xml
/// </summary>
/// <param name="HdwOptionParam"></param>
public AGBOption(ParametriOpzioniParametri HdwOptionParam)
{
m_sName = HdwOptionParam.NomeParametro;
m_sDescription = HdwOptionParam.DescrizioneParametro;
m_OptVisibility = Visibility.VISIBLE; // If(HdwOptionParam.Visible.ToLower = "true", Visibility.Visible, Visibility.Collapsed)
m_OptVisibility = Visibility.VISIBLE;
// If(HdwOptionParam.Visible.ToLower = "true", Visibility.Visible, Visibility.Collapsed)
}
#endregion Public Constructors
#region Public Enums
public enum HDWOPTIONTYPES : int
{
TEXT = 1,
LENGHT = 2,
COMBO = 3
}
#endregion Public Enums
#region Public Properties
public Visibility OptVisibility
@@ -57,7 +52,7 @@ namespace WebWindowComplex.Models
}
}
public HDWOPTIONTYPES Type
public HwOptionTypes Type
{
get
{
@@ -67,9 +62,18 @@ namespace WebWindowComplex.Models
#endregion Public Properties
#region Internal Methods
internal virtual JsonHwOption Serialize()
{
return null;
}
#endregion Internal Methods
#region Protected Fields
protected HDWOPTIONTYPES m_Type;
protected HwOptionTypes m_Type;
#endregion Protected Fields
+14 -2
View File
@@ -3,16 +3,18 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Models
{
public class AGBOptionCombo : ParametriOpzioni
public class AGBOptionCombo : AGBOption
{
#region Public Constructors
public AGBOptionCombo(ParametriOpzioniParametri HdwOptionParam) : base(HdwOptionParam)
{
m_Type = HDWOPTIONTYPES.COMBO;
m_Type = HwOptionTypes.COMBO;
foreach (var Value in HdwOptionParam.Opzioni)
m_ValueList.Add(new AGBOptionParameter(Value.Valore, Value.DescrizioneOpzione));
m_sValue = m_ValueList.FirstOrDefault(x => x.sValue == HdwOptionParam.ValoreCorrente) ?? new AGBOptionParameter("", "");
@@ -44,6 +46,16 @@ namespace WebWindowComplex.Models
#endregion Public Properties
#region Internal Methods
internal override JsonHwOption Serialize()
{
JsonHwOption JsonHwOption = new JsonHwOption(sName, m_sValue.sValue);
return JsonHwOption;
}
#endregion Internal Methods
#region Private Fields
private AGBOptionParameter m_sValue;
+62 -3
View File
@@ -3,17 +3,56 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Models
{
public class AGBOptionText : ParametriOpzioni
//public class AGBOptionText : AGBOption
//{
// #region Public Constructors
// public AGBOptionText(ParametriOpzioniParametri HdwOptionParam) : base(HdwOptionParam)
// {
// m_Type = HdwOptionTypes.TEXT;
// m_sValue = HdwOptionParam.ValoreCorrente;
// }
// #endregion Public Constructors
// #region Public Properties
// public string sValue
// {
// get
// {
// return m_sValue;
// }
// set
// {
// m_sValue = value;
// }
// }
// #endregion Public Properties
// #region Private Fields
// private string m_sValue;
// #endregion Private Fields
//}
public class AGBOptionText : AGBOption
{
#region Public Constructors
public AGBOptionText(ParametriOpzioniParametri HdwOptionParam) : base(HdwOptionParam)
{
m_Type = HDWOPTIONTYPES.TEXT;
m_sValue = HdwOptionParam.ValoreCorrente;
m_Type = HwOptionTypes.TEXT;
foreach (var Value in HdwOptionParam.Opzioni)
m_ValueList.Add(Value.Valore);
m_sValue = m_ValueList.FirstOrDefault(x => x == HdwOptionParam.ValoreCorrente) ?? "";
}
#endregion Public Constructors
@@ -32,12 +71,32 @@ namespace WebWindowComplex.Models
}
}
public List<string> ValueList
{
get
{
return m_ValueList;
}
}
#endregion Public Properties
#region Internal Methods
internal override JsonHwOption Serialize()
{
JsonHwOption JsonHwOption = new JsonHwOption(sName, m_sValue);
return JsonHwOption;
}
#endregion Internal Methods
#region Private Fields
private string m_sValue;
private List<string> m_ValueList = new List<string>();
#endregion Private Fields
}
}
+84 -69
View File
@@ -47,16 +47,16 @@ namespace WebWindowComplex.Models
}
}
public int IdGroup
public int GroupId
{
get
{
return m_IdGroup;
return m_GroupId;
}
set
{
m_IdGroup = value;
m_GroupId = value;
}
}
@@ -98,65 +98,91 @@ namespace WebWindowComplex.Models
m_CounterGroup++;
}
public bool AddFirstSash()
public void AddFirstSash()
{
bool answ = false;
// Salvo il parent
Area ParentArea = AreaList[0].ParentArea;
// Creo area sash di default
Sash SashArea = Sash.CreateSash(ParentArea);
// ricerco tra ttuti gli hw disponibili...
string sShape = FindSashShape();
var listHwValid = Sash
.m_HardwareCompleteList
.Where(x => x.Shape == sShape && x.SashQty == 1)
.FirstOrDefault();
if (listHwValid != null)
{
// seleziono la famiglia del primo hw trovato...
SashArea.SelFamilyHardware = listHwValid.FamilyName;
SashArea.RefreshHardwareList();
if (SashArea.HardwareList.Count == 0)
{
SashArea.Remove();
answ = true;
}
else
{
SashArea.SetSelHardwareFromId(SashArea.HardwareList.First().Id);
// Salvo gli oggetti già presenti e li cancello da AreaList
List<Area> ContentArea = new List<Area>();
ContentArea.Add(AreaList[0]);
AreaList.Remove(AreaList[0]);
// Aggiungo area
AreaList.Add(SashArea);
if (SashArea.nSashQty == 1)
{
// Inserisco il riempimento precedente
AreaList[0].AreaList.Add(ContentArea[0]);
AreaList[0].AreaList[0].SetParentArea(AreaList[0]);
}
else
{
// All'area Sash aggiunto uno Splitted per ogni anta
for (int i = 1; i < SashArea.nSashQty; i++)
{
AreaList[0].AreaList.Add(Splitted.CreateSplitted(SashArea));
}
Fill fill2 = (Fill)ContentArea[0];
for (int i = 1; i < SashArea.nSashQty; i++)
{
AreaList[0].AreaList[1].AreaList.Add(Fill.CreateFill(AreaList[0].AreaList[1], fill2.FillType));
}
}
ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
}
}
return answ;
// Inserisco famiglia hardware vuota
SashArea.SetSelFamilyHardware("");
// Inserisco hardware di default
SashArea.SetSelHardwareFromId("000000");
// Salvo gli oggetti già presenti e li cancello da AreaList
List<Area> ContentArea = new List<Area>();
ContentArea.Add(AreaList[0]);
AreaList.Remove(AreaList[0]);
// Aggiungo area
AreaList.Add(SashArea);
// Inserisco il riempimento precedente
AreaList[0].AreaList.Add(ContentArea[0]);
AreaList[0].AreaList[0].SetParentArea(AreaList[0]);
// Richiesta SVG con hardware di default
ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
}
public void AddSplit(Area ParentArea)
// public void AddFirstSash()
// {
// // Salvo il parent
// Area ParentArea = AreaList[0].ParentArea;
// // Creo area sash di default
// Sash SashArea = Sash.CreateSash(ParentArea);
// // ricerco tra tutti gli hw disponibili...
// string sShape = FindSashShape();
// var listHwValid = Sash
// .m_HardwareCompleteList
// .Where(x => x.Shape == sShape && x.SashQty == 1)
// .FirstOrDefault();
// if (listHwValid != null)
// {
// // seleziono la famiglia del primo hw trovato...
// SashArea.SetSelFamilyHardware(listHwValid.FamilyName);
//#if false
// SashArea.ReqRefreshShape();
//#endif
// SashArea.RefreshHardwareList();
// if (SashArea.HardwareList.Count == 0)
// {
// //answ = true;
// SashArea.SetSelHardwareFromId("000000");
// }
// else
// {
// SashArea.SetSelHardwareFromId(SashArea.HardwareList.First().Id);
// }
// // Salvo gli oggetti già presenti e li cancello da AreaList
// List<Area> ContentArea = new List<Area>();
// ContentArea.Add(AreaList[0]);
// AreaList.Remove(AreaList[0]);
// // Aggiungo area
// AreaList.Add(SashArea);
// if (SashArea.nSashQty == 1)
// {
// // Inserisco il riempimento precedente
// AreaList[0].AreaList.Add(ContentArea[0]);
// AreaList[0].AreaList[0].SetParentArea(AreaList[0]);
// }
// else
// {
// // All'area Sash aggiunto uno Splitted per ogni anta
// for (int i = 1; i < SashArea.nSashQty; i++)
// {
// AreaList[0].AreaList.Add(Splitted.CreateSplitted(SashArea));
// }
// Fill fill2 = (Fill)ContentArea[0];
// for (int i = 1; i < SashArea.nSashQty; i++)
// {
// AreaList[0].AreaList[1].AreaList.Add(Fill.CreateFill(AreaList[0].AreaList[1], fill2.FillType));
// }
// }
// ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
// }
// }
public void AddSplit()
{
// Salvo il parent
Area ParentArea = AreaList[0].ParentArea;
List<Area> ContentArea = new List<Area>();
// Salvo gli oggetti già presenti e li cancello da AreaList
ContentArea.Add(AreaList[0]);
@@ -194,9 +220,9 @@ namespace WebWindowComplex.Models
public abstract Area Copy(Area ParentArea);
public void SetIdGroup(int nIdGroup)
public void SetGroupId(int nGroupId)
{
m_IdGroup = nIdGroup;
m_GroupId = nGroupId;
}
public void SwapAree()
@@ -214,7 +240,7 @@ namespace WebWindowComplex.Models
#region Internal Methods
internal abstract JsonArea Serialize();
internal abstract JsonArea Serialize(bool hideHw);
internal void SetAreaType(AreaTypes AreaType)
{
@@ -243,22 +269,11 @@ namespace WebWindowComplex.Models
private List<Area> m_AreaList = new List<Area>();
private AreaTypes m_AreaType;
private int m_IdGroup;
private int m_GroupId;
private Area m_ParentArea;
#endregion Private Fields
#region Private Methods
/// <summary>
/// MockUp chiamata a c++ x scelta forma sash per Hw
/// </summary>
/// <returns></returns>
private string FindSashShape()
{
return "Rectangular";
}
#endregion Private Methods
}
}
+12 -8
View File
@@ -64,7 +64,7 @@ namespace WebWindowComplex.Models
{
Fill newFill = new Fill(newParentArea, m_ParentWindow);
AddCounterGroup();
newFill.SetIdGroup(nCounterGroup);
newFill.SetGroupId(nCounterGroup);
newFill.SetFillType(SelFillType);
newFill.SetAreaType(AreaType);
return newFill;
@@ -78,26 +78,30 @@ namespace WebWindowComplex.Models
{
Fill Fill = new Fill(AreaParent, AreaParent.ParentWindow);
AddCounterGroup();
Fill.SetIdGroup(nCounterGroup);
Fill.SetGroupId(nCounterGroup);
Fill.SetAreaType(AreaTypes.FILL);
Fill.SetFillType(FillType);
return Fill;
}
internal override JsonArea Serialize()
internal override JsonArea Serialize(bool hideHw)
{
if (nCounterGroup < IdGroup)
Area.nCounterGroup = IdGroup;
JsonFill JsonFill = new JsonFill(FillType, IdGroup);
if (nCounterGroup < GroupId)
Area.nCounterGroup = GroupId;
JsonFill JsonFill = new JsonFill(FillType, GroupId);
foreach (var Area in AreaList)
JsonFill.AreaList.Add(Area.Serialize());
JsonFill.AreaList.Add(Area.Serialize(hideHw));
return JsonFill;
}
internal void SetSelFillType(FillTypes value)
{
m_SelFillType = value;
//m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
}
internal void SetFillType(FillTypes value)
{
m_SelFillType = value;
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
}
#endregion Internal Methods
+10 -8
View File
@@ -79,11 +79,13 @@ namespace WebWindowComplex.Models
{
get
{
return IdNameStruct.IndFromId((int)m_Shape, m_ShapeList);
//return IdNameStruct.IndFromId((int)m_Shape, m_ShapeList);
return (int)m_Shape;
}
set
{
Shapes SelShape = (Shapes)IdNameStruct.IdFromInd(value, m_ShapeList);
//Shapes SelShape = (Shapes)IdNameStruct.IdFromInd(value, m_ShapeList);
Shapes SelShape = (Shapes)value;
if (m_Shape != SelShape)
{
// salvo vecchie dimensioni
@@ -194,7 +196,7 @@ namespace WebWindowComplex.Models
}
m_Shape = SelShape;
}
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
//m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
}
}
@@ -237,18 +239,18 @@ namespace WebWindowComplex.Models
return NewFrame;
}
internal override JsonArea Serialize()
internal override JsonArea Serialize(bool hideHw)
{
Area.nCounterGroup = 0;
if (nCounterGroup < IdGroup)
Area.nCounterGroup = IdGroup;
JsonFrame JsonFrame = new JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty, IdGroup);
if (nCounterGroup < GroupId)
Area.nCounterGroup = GroupId;
JsonFrame JsonFrame = new JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty, GroupId);
foreach (var Dimension in DimensionList)
JsonFrame.DimensionList.Add(Dimension.Serialize());
foreach (var Joint in JointList)
JsonFrame.JointList.Add(Joint.Serialize());
foreach (var Area in AreaList)
JsonFrame.AreaList.Add(Area.Serialize());
JsonFrame.AreaList.Add(Area.Serialize(hideHw));
return JsonFrame;
}
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebWindowComplex.Models
{
public class OnReqHwOptEventArgs : EventArgs
{
#region Public Fields
public string sJwd;
public int nGroupId;
#endregion Public Fields
#region Public Constructors
public OnReqHwOptEventArgs(string sJwd, int nGroupId)
{
this.sJwd = sJwd;
this.nGroupId = nGroupId;
}
#endregion Public Constructors
}
}
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebWindowComplex.Models
{
public class OnReqShapeEventArgs : EventArgs
{
#region Public Fields
public string sJwd;
public int groupId;
#endregion Public Fields
#region Public Constructors
public OnReqShapeEventArgs(string sJwd, int nGroupId)
{
this.sJwd = sJwd;
this.groupId = nGroupId;
}
#endregion Public Constructors
}
}
+211 -104
View File
@@ -1,9 +1,12 @@
using Egw.Window.Data;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using WebWindowComplex.Json;
using static WebWindowComplex.Json.WindowConst;
@@ -29,6 +32,13 @@ namespace WebWindowComplex.Models
#endregion Public Constructors
#region Public Events
//public event EventHandler<OnReqShapeEventArgs> OnReqShape = delegate { };
//public event EventHandler<OnReqHwOptEventArgs> OnReqHwOption = delegate { };
#endregion Public Events
#region Public Properties
public bool bIsMeasureGlass
@@ -71,7 +81,7 @@ namespace WebWindowComplex.Models
}
}
public List<ParametriOpzioni> HwdOptionList
public List<AGBOption> HwOptionList
{
get
{
@@ -79,6 +89,14 @@ namespace WebWindowComplex.Models
}
}
public Dictionary<string, string> SelHwOptionList
{
get
{
return m_SelHwdOptionList;
}
}
public List<Joint> JointList
{
get
@@ -99,7 +117,7 @@ namespace WebWindowComplex.Models
}
set
{
if (value >= 0 && value <= 4)
if (value >= 0 && value <= 3)
{
if (value > m_SashList.Count)
{
@@ -211,6 +229,7 @@ namespace WebWindowComplex.Models
}
}
}
//m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized(true));
RefreshHardwareList();
RefreshHardwareOptionList();
SetFirstHardware();
@@ -303,10 +322,7 @@ namespace WebWindowComplex.Models
}
set
{
m_SelFamilyHardware = value;
RefreshHardwareList();
RefreshHardwareOptionList();
SetFirstHardware();
SetSelFamilyHardware(value);
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
}
}
@@ -320,75 +336,7 @@ namespace WebWindowComplex.Models
set
{
m_SelHardware = value;
// if (m_SelHardware != null && m_SelHardware.sId != "000000")
// {
// string sHwdOptPath = "";
// var gf = EgtLuaCreateGlobTable("WDG");
// var tft = EgtLuaSetGlobIntVar("WDG.AREAID", m_nAreaId);
// var tfy = EgtLuaSetGlobStringVar("WDG.HDWFAVOURITE", value.sId);
// SashDimension HandleSash = m_SashList.FirstOrDefault(x => x.bHasHandle);
// string sHandle = "Dx";
// switch (GetOpeningSide(HandleSash.OpeningType))
// {
// case object _ when OpeningSides.LEFT:
// {
// sHandle = "Sx";
// break;
// }
// case object _ when OpeningSides.RIGHT:
// {
// sHandle = "Dx";
// break;
// }
// }
// var tfd = EgtLuaSetGlobStringVar("WDG.HDWHANDLE", sHandle);
// var tlt = EgtLuaCallFunction("WinCreate_GetHardwareOptionPath");
// var tltf = EgtLuaGetGlobStringVar("WDG.HWDOPTPATH", sHwdOptPath);
// if (!string.IsNullOrWhiteSpace(sHwdOptPath))
// {
// XmlSerializer serializer = new XmlSerializer(typeof(ParametriOpzioni));
// ParametriOpzioni HwdOptions = null/* TODO Change to default(_) if this is not a reference type */;
// string sHdwOptPath = Path.ChangeExtension(sHwdOptPath, ".opt");
// bool bHdwOptFound = false;
// for (var WaitIndex = 0; WaitIndex <= 100; WaitIndex++)
// {
// if (File.Exists(sHdwOptPath))
// {
// bHdwOptFound = true;
// break;
// }
// System.Threading.Thread.Sleep(100);
// }
// if (bHdwOptFound)
// {
// string sHwdOptText = "";
// try
// {
// sHwdOptText = File.ReadAllText(sHdwOptPath);
// }
// catch (Exception ex)
// {
// EgtOutLog("Hardware file opt not found or read!");
// }
// if (!string.IsNullOrWhiteSpace(sHwdOptText))
// {
// using (TextReader reader = new StringReader(sHwdOptText))
// {
// HwdOptions = serializer.Deserialize(reader);
// }
// if (!IsNothing(HwdOptions))
// {
// m_HwdOptionList.Clear();
// foreach (var HdwOption in HwdOptions.Items)
// m_HwdOptionList.Add(new AGBOption(HdwOption));
// NotifyPropertyChanged(nameof(HwdOptionList));
// }
// }
// }
// var ud = EgtLuaResetGlobVar("WDG");
// }
// }
ReqRefreshHwOption();
}
}
@@ -400,8 +348,9 @@ namespace WebWindowComplex.Models
}
set
{
m_SelHardware = m_HardwareList.FirstOrDefault(x => !string.IsNullOrEmpty(value) && x.Id.Equals(value)) ?? new Hardware("", "", "", Enums.OpeningTypes.Null, "", 0, 0);
ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
m_SelHardware = m_HardwareList.FirstOrDefault(x => !string.IsNullOrEmpty(value) && x.Id.Equals(value)) ?? new Hardware(CustomHwId, "", "", Enums.OpeningTypes.Null, "", 0, 0);
//ReqRefreshHwOption();
//ParentWindow.OnUpdatePreview(ParentWindow.sSerialized());
}
}
@@ -438,6 +387,12 @@ namespace WebWindowComplex.Models
}
}
public string SashShape
{
get => m_CurrShape;
set => m_CurrShape = value;
}
#endregion Public Properties
#region Public Methods
@@ -446,17 +401,17 @@ namespace WebWindowComplex.Models
{
Sash newSash = new Sash(newParentArea, m_ParentWindow);
AddCounterGroup();
newSash.SetIdGroup(nCounterGroup);
newSash.SetGroupId(nCounterGroup);
newSash.SetAreaType(AreaType);
// Imposta la quantità di ante e definisce SashDimension di ogni anta ai valori di default
newSash.SetSashQty(nSashQty);
newSash.SetIsSashVertical(bIsSashVertical);
newSash.SetOrientationSashType(OrientationSashType);
newSash.SetSashBottomRailQty(SashBottomRailQty);
newSash.SetSelFamilyHardwareFromIndex(SelHardware.Id);
newSash.RefreshHardwareList();
newSash.SetSelFamilyHardwareFromIndex(m_SelHardware.Id);
newSash.ReqRefreshShape();
newSash.RefreshHardwareOptionList();
newSash.SetSelHardware(SelHardware);
newSash.SetSelHardware(m_SelHardware);
for (int i = 0; i < SashList.Count; i++)
{
//Cancello SashDimension di default e aggiungo la copia
@@ -477,17 +432,19 @@ namespace WebWindowComplex.Models
return newSash;
}
/// <summary>
/// Update valori ammissibili x HW list
/// </summary>
public void RefreshHardwareList()
{
if (m_HardwareCompleteList != null && m_HardwareCompleteList.Count > 0)
{
m_HardwareList.Clear();
string sSashShape = FindSashShape();
Enums.OpeningTypes sOpeningType = ConvertOpeningType();
var iComp = StringComparison.InvariantCultureIgnoreCase;
var rawList = m_HardwareCompleteList
.Where(x => x.Id == "000000" ||
(!string.IsNullOrEmpty(m_SelFamilyHardware) && x.FamilyName.Equals(m_SelFamilyHardware, iComp) && x.SashQty == nSashQty && x.Shape.Equals(sSashShape, iComp) && x.OpeningType == sOpeningType)
(!string.IsNullOrEmpty(m_SelFamilyHardware) && x.FamilyName.Equals(m_SelFamilyHardware, iComp) && x.SashQty == nSashQty && x.Shape.Equals(m_CurrShape, iComp) && x.OpeningType == sOpeningType)
)
.ToList();
if (rawList != null && rawList.Count > 0)
@@ -510,6 +467,66 @@ namespace WebWindowComplex.Models
m_ParentWindow.OnUpdatePreview(m_ParentWindow.sSerialized());
}
/// <summary>
/// Richiesta calcolo shape corrente
/// </summary>
public void ReqRefreshShape()
{
if (m_HardwareCompleteList != null && m_HardwareCompleteList.Count > 0)
{
m_HardwareList.Clear();
// reset shape corrente
m_CurrShape = "";
// chiamata evento calcolo shape: gruppo da calcolare
m_ParentWindow.OnReqShapePreview(m_ParentWindow.sSerialized(), GroupId);
}
}
/// <summary>
/// Richiesta calcolo hardware option list
/// </summary>
public void ReqRefreshHwOption()
{
HwOptionList.Clear();
// chiamata evento calcolo opzioni hardware
m_ParentWindow.OnReqHwOptionPreview(m_ParentWindow.sSerialized(), GroupId );
}
public void SetSelFamilyHardware(string sFamilyHw)
{
m_SelFamilyHardware = sFamilyHw;
// se ho la shape aggiorno elenco HW
if (!string.IsNullOrEmpty(m_CurrShape))
{
RefreshHardwareList();
}
RefreshHardwareOptionList();
SetFirstHardware();
}
/// <summary>
/// Aggiornamento HW List conseguente a ricezione nuova Shape
/// </summary>
/// <param name="newShape"></param>
public void UpdateShape(string newShape)
{
m_CurrShape = newShape;
// la famiglia hw è vuota seleziono il primo hardware valido e utilizzo la sua famiglia
if(string.IsNullOrEmpty(m_SelFamilyHardware) || m_SelFamilyHardware == "")
{
var listHwValid = Sash
.m_HardwareCompleteList
.Where(x => x.Shape == m_CurrShape && x.SashQty == nSashQty && x.OpeningType == ConvertOpeningType())
.FirstOrDefault();
SetSelFamilyHardware(listHwValid.FamilyName);
}
RefreshHardwareList();
// se il vecchio hw selezionato non va più bene viene selezionato il primo della lista
if(!HardwareList.Contains(m_SelHardware) || m_SelHardware.Shape != m_CurrShape)
SetFirstHardware();
}
#endregion Public Methods
#region Internal Methods
@@ -518,7 +535,7 @@ namespace WebWindowComplex.Models
{
Sash newSash = new Sash(Area, Area.ParentWindow);
AddCounterGroup();
newSash.SetIdGroup(nCounterGroup);
newSash.SetGroupId(nCounterGroup);
newSash.SetAreaType(AreaTypes.SASH);
newSash.SetSashQty(1);
newSash.SetOrientationSashType(OrientationSash.VERTICAL);
@@ -527,8 +544,8 @@ namespace WebWindowComplex.Models
newSash.JointList.Add(new Joint(newSash, JointIndex + 1, Joints.FULL_H));
newSash.SetSashBottomRail(false);
newSash.SetSashBottomRailQty(0);
newSash.SelFamilyHardware = Sash.s_FamilyHardwareList.First();
newSash.RefreshHardwareList();
newSash.SetSelFamilyHardware(Sash.s_FamilyHardwareList.First());
//newSash.ReqRefreshShape();
newSash.RefreshHardwareOptionList();
newSash.SetFirstHardware();
return newSash;
@@ -614,22 +631,54 @@ namespace WebWindowComplex.Models
}
}
//internal void OnReqShapePreview(string sJwd, int groupId)
//{
// OnReqShapeEventArgs e = new OnReqShapeEventArgs(sJwd, groupId);
// EventHandler<OnReqShapeEventArgs> handler = OnReqShape;
// if (handler != null)
// {
// handler(this, e);
// }
//}
//internal void OnReqHwOptionPreview(string sJwd, int groupId)
//{
// OnReqHwOptEventArgs e = new OnReqHwOptEventArgs(sJwd, groupId);
// EventHandler<OnReqHwOptEventArgs> handler = OnReqHwOption;
// if (handler != null)
// {
// handler(this, e);
// }
//}
internal void RefreshHardwareOptionList()
{
m_HwdOptionList.Clear();
//ReqRefreshHwOption();
}
internal override JsonArea Serialize()
internal override JsonArea Serialize(bool hideHw)
{
if (nCounterGroup < IdGroup)
Area.nCounterGroup = IdGroup;
JsonSash JsonSash = new JsonSash(m_bIsSashVertical, m_SashType, m_bSashBottomRail, m_nSashBottomRailQty, m_SelHardware.Id, IdGroup);
if (nCounterGroup < GroupId)
Area.nCounterGroup = GroupId;
string currHwId = hideHw ? CustomHwId : m_SelHardware.Id;
JsonSash JsonSash = new JsonSash(m_bIsSashVertical, m_SashType, m_bSashBottomRail, m_nSashBottomRailQty, currHwId, GroupId);
foreach (var SashDimension in SashList)
JsonSash.SashList.Add(SashDimension.Serialize());
foreach (var Joint in JointList)
JsonSash.JointList.Add(Joint.Serialize());
if(HwOptionList.Count > 0)
{
foreach (var HwOption in HwOptionList)
JsonSash.HwOptionList.Add(HwOption.Serialize());
}
else
{
foreach (var HwOption in SelHwOptionList)
JsonSash.HwOptionList.Add(new JsonHwOption(HwOption.Key, HwOption.Value));
}
foreach (var Area in AreaList)
JsonSash.AreaList.Add(Area.Serialize());
JsonSash.AreaList.Add(Area.Serialize(hideHw));
return JsonSash;
}
@@ -638,6 +687,7 @@ namespace WebWindowComplex.Models
if (m_HardwareList.Count > 0)
{
m_SelHardware = m_HardwareList.First();
//ReqRefreshHwOption();
}
}
@@ -659,6 +709,60 @@ namespace WebWindowComplex.Models
}
}
internal void SetHardwareOption(string OptionXml)
{
if (!string.IsNullOrEmpty(OptionXml))
{
ParametriOpzioni HwOptions = null;
XmlSerializer serializer = new XmlSerializer(typeof(ParametriOpzioni));
StringReader reader = new StringReader(OptionXml);
HwOptions = (ParametriOpzioni)serializer.Deserialize(reader);
if (HwOptions.Items != null)
{
m_HwdOptionList.Clear();
foreach (var HwOption in HwOptions.Items)
{
switch (HwOption.Tipo)
{
case "Text":
{
m_HwdOptionList.Add(new AGBOptionText(HwOption));
break;
}
case "List":
{
m_HwdOptionList.Add(new AGBOptionCombo(HwOption));
break;
}
}
}
}
}
if (SelHwOptionList.Count > 0)
{
foreach (var selHwOption in SelHwOptionList)
{
var HwOption = HwOptionList.Where(x => x.sName == selHwOption.Key).First();
switch (HwOption.Type)
{
case HwOptionTypes.COMBO:
{
AGBOptionCombo OptCombo = (AGBOptionCombo)HwOption;
var selValue = OptCombo.ValueList.Where(x => x.sValue == selHwOption.Value).First();
OptCombo.sValue = selValue;
break;
}
case HwOptionTypes.TEXT:
{
AGBOptionText OptText = (AGBOptionText)HwOption;
OptText.sValue = selHwOption.Value;
break;
}
}
}
}
}
internal void SetOrientationSashType(OrientationSash value)
{
m_SelOrientationSashType = value;
@@ -710,13 +814,14 @@ namespace WebWindowComplex.Models
internal string SetSelFamilyHardwareFromIndex(string codHardware)
{
string? item = "";
if (string.IsNullOrEmpty(m_SelFamilyHardware))
{
var item = m_HardwareCompleteList
item = m_HardwareCompleteList
.Where(x => x.Id == codHardware)
.Select(x => x.FamilyName)
.ToList();
SelFamilyHardware = item.First();
.FirstOrDefault();
SetSelFamilyHardware(item ?? "");
}
return SelFamilyHardware;
}
@@ -729,18 +834,23 @@ namespace WebWindowComplex.Models
internal void SetSelHardwareFromId(string sId)
{
if (m_HardwareList.Count == 0)
SelHardware = m_HardwareCompleteList.FirstOrDefault(x => x.Id.Equals(sId)) ?? new Hardware("", "", "", Enums.OpeningTypes.Null, "", 0, 0);
m_SelHardware = m_HardwareCompleteList.FirstOrDefault(x => x.Id.Equals(sId)) ?? new Hardware(CustomHwId, "", "", Enums.OpeningTypes.Null, "", 0, 0);
else
SelHardware = m_HardwareList.FirstOrDefault(x => x.Id.Equals(sId)) ?? new Hardware("", "", "", Enums.OpeningTypes.Null, "", 0, 0);
m_SelHardware = m_HardwareList.FirstOrDefault(x => x.Id.Equals(sId)) ?? new Hardware(CustomHwId, "", "", Enums.OpeningTypes.Null, "", 0, 0);
if (SelHardware.Id == "")
SelHardware = m_HardwareList.First();
//SelFamilyHardware = m_SelHardware.FamilyName;
m_SelHardware = m_HardwareList.First();
//ReqRefreshHwOption();
}
#endregion Internal Methods
#region Private Fields
/// <summary>
/// Codice HW custom x gestione casi non risolvibili di selezione
/// </summary>
private const string CustomHwId = "000000";
private bool m_bIsMeasureGlass;
private bool m_bIsPercentage = true;
@@ -749,9 +859,11 @@ namespace WebWindowComplex.Models
private bool m_bSashBottomRail;
private string m_CurrShape = "";
private List<Hardware> m_HardwareList = new List<Hardware>();
private List<ParametriOpzioni> m_HwdOptionList = new List<ParametriOpzioni>();
private List<AGBOption> m_HwdOptionList = new List<AGBOption>();
private Dictionary<string, string> m_SelHwdOptionList = new Dictionary<string, string>();
private List<Joint> m_JointList = new List<Joint>();
@@ -793,11 +905,6 @@ namespace WebWindowComplex.Models
return answ;
}
private string FindSashShape()
{
return "Rectangular";
}
#endregion Private Methods
}
}
+41 -20
View File
@@ -106,7 +106,7 @@ namespace WebWindowComplex.Models
set
{
m_bHasHandle = value;
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
//m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
}
}
@@ -229,7 +229,7 @@ namespace WebWindowComplex.Models
set
{
m_SelOpeningType = value;
m_Parent.RefreshHardwareList();
m_Parent.ReqRefreshShape();
m_Parent.RefreshHardwareOptionList();
m_Parent.SetFirstHardware();
}
@@ -239,15 +239,23 @@ namespace WebWindowComplex.Models
{
get
{
return IdNameStruct.IndFromId((int)m_SelOpeningType, m_OpeningTypeList);
//return IdNameStruct.IndFromId((int)m_SelOpeningType, m_OpeningTypeList);
return (int)m_SelOpeningType;
}
set
{
m_SelOpeningType = (Openings)IdNameStruct.IdFromInd(value, m_OpeningTypeList);
m_Parent.RefreshHardwareList();
m_Parent.RefreshHardwareOptionList();
m_Parent.SetFirstHardware();
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
//Openings newOpening = (Openings)IdNameStruct.IdFromInd(value, m_OpeningTypeList);
Openings newOpening = (Openings)value;
if ((newOpening != Openings.TILTTURN_LEFT && newOpening != Openings.TILTTURN_RIGHT) ||
(newOpening == Openings.TILTTURN_LEFT && m_bHasHandle) ||
(newOpening == Openings.TILTTURN_RIGHT && m_bHasHandle))
{
m_SelOpeningType = newOpening;
m_Parent.ReqRefreshShape();
m_Parent.RefreshHardwareOptionList();
m_Parent.SetFirstHardware();
m_Parent.ParentWindow.OnUpdatePreview(m_Parent.ParentWindow.sSerialized());
}
}
}
@@ -302,18 +310,31 @@ namespace WebWindowComplex.Models
private List<IdNameStruct> m_OpeningTypeList = new List<IdNameStruct>
{
new IdNameStruct((int)Openings.TURNONLY_LEFT, ">"),
new IdNameStruct((int)Openings.TURNONLY_RIGHT, "<"),
new IdNameStruct((int)Openings.TILTTURN_LEFT, ">*"),
new IdNameStruct((int)Openings.TILTTURN_RIGHT, "<*"),
new IdNameStruct((int)Openings.TILTONLY_TOP, "˄"),
new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "˅"),
new IdNameStruct((int)Openings.PIVOT, ""),
new IdNameStruct((int)Openings.FIXED, "X"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "-→"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "←-"),
new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "┌→"),
new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "←┐")
new IdNameStruct((int)Openings.TURNONLY_LEFT, "A bandiera sinistra"),
new IdNameStruct((int)Openings.TURNONLY_RIGHT, "A bandiera destra"),
new IdNameStruct((int)Openings.TILTTURN_LEFT, "Ad anta-ribalta sinistra"),
new IdNameStruct((int)Openings.TILTTURN_RIGHT, "Ad anta-ribalta destra"),
new IdNameStruct((int)Openings.TILTONLY_TOP, "Solo verso alto"),
new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "Solo verso basso"),
new IdNameStruct((int)Openings.PIVOT, "Pivot"),
new IdNameStruct((int)Openings.FIXED, "Fissa"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "Complanare sinistra"),
new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "Complanare destra"),
new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "Scorrevole sinistra"),
new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "Scorrevole destra")
//new IdNameStruct((int)Openings.TURNONLY_LEFT, ">"),
//new IdNameStruct((int)Openings.TURNONLY_RIGHT, "<"),
//new IdNameStruct((int)Openings.TILTTURN_LEFT, ">*"),
//new IdNameStruct((int)Openings.TILTTURN_RIGHT, "<*"),
//new IdNameStruct((int)Openings.TILTONLY_TOP, "˄"),
//new IdNameStruct((int)Openings.TILTONLY_BOTTOM, "˅"),
//new IdNameStruct((int)Openings.PIVOT, "◊"),
//new IdNameStruct((int)Openings.FIXED, "X"),
//new IdNameStruct((int)Openings.COMPLANARSLIDE_LEFT, "-→"),
//new IdNameStruct((int)Openings.COMPLANARSLIDE_RIGHT, "←-"),
//new IdNameStruct((int)Openings.LIFTSLIDE_LEFT, "┌→"),
//new IdNameStruct((int)Openings.LIFTSLIDE_RIGHT, "←┐")
};
// reference
+12 -10
View File
@@ -222,11 +222,13 @@ namespace WebWindowComplex.Models
{
get
{
return IdNameStruct.IndFromId((int)m_SelSplitShape, m_SplitShapeList);
//return IdNameStruct.IndFromId((int)m_SelSplitShape, m_SplitShapeList);
return (int)m_SelSplitShape;
}
set
{
m_SelSplitShape = (SplitShapes)IdNameStruct.IdFromInd(value, m_SplitShapeList);
//m_SelSplitShape = (SplitShapes)IdNameStruct.IdFromInd(value, m_SplitShapeList);
m_SelSplitShape = (SplitShapes)value;
// Cancello elementi nello split e azzero quantità orizzontale e verticale
AreaList.Clear();
SetSplitQtyVert(0);
@@ -316,7 +318,7 @@ namespace WebWindowComplex.Models
{
Split newSplit = new Split(newParentArea, ParentWindow);
AddCounterGroup();
newSplit.SetIdGroup(nCounterGroup);
newSplit.SetGroupId(nCounterGroup);
newSplit.SetSplitStartVert(bSplitStartVert);
newSplit.SetSplitQtyVert(nSplitQtyVert);
for (int i = 0; i < SplitVertList.Count; i++)
@@ -363,17 +365,17 @@ namespace WebWindowComplex.Models
{
Split Split = new Split(Area, Area.ParentWindow);
AddCounterGroup();
Split.SetIdGroup(nCounterGroup);
Split.SetGroupId(nCounterGroup);
Split.SetAreaType(AreaTypes.SPLIT);
Split.SetSplitShape(SplitShape, true);
return Split;
}
internal override JsonArea Serialize()
internal override JsonArea Serialize(bool hideHw)
{
if (nCounterGroup < IdGroup)
Area.nCounterGroup = IdGroup;
JsonSplit JsonSplit = new JsonSplit(m_SelSplitShape, IdGroup);
if (nCounterGroup < GroupId)
Area.nCounterGroup = GroupId;
JsonSplit JsonSplit = new JsonSplit(m_SelSplitShape, GroupId);
//foreach (var SplitPosition in m_SplitPositionList)
// JsonSplit.SplitPositionList.Add(SplitPosition.Serialize());
JsonSplit.SplitStartVert = bSplitStartVert;
@@ -382,7 +384,7 @@ namespace WebWindowComplex.Models
foreach (var SplitHoriz in m_SplitHorizList)
JsonSplit.SplitHorizList.Add(SplitHoriz.Serialize());
foreach (var Area in AreaList)
JsonSplit.AreaList.Add(Area.Serialize());
JsonSplit.AreaList.Add(Area.Serialize(hideHw));
return JsonSplit;
}
@@ -445,7 +447,7 @@ namespace WebWindowComplex.Models
internal void SetSplitStartVert(bool SplitStartVert)
{
bSplitStartVert = SplitStartVert;
m_bSplitStartVert = SplitStartVert;
}
#endregion Internal Methods
+7 -7
View File
@@ -19,7 +19,7 @@ namespace WebWindowComplex.Models
{
Splitted newSplitted = new Splitted(newParentArea, ParentWindow);
AddCounterGroup();
newSplitted.SetIdGroup(nCounterGroup);
newSplitted.SetGroupId(nCounterGroup);
newSplitted.SetAreaType(AreaType);
foreach (var item in AreaList)
{
@@ -37,18 +37,18 @@ namespace WebWindowComplex.Models
{
Splitted Splitted = new Splitted(ParentArea, ParentArea.ParentWindow);
AddCounterGroup();
Splitted.SetIdGroup(nCounterGroup);
Splitted.SetGroupId(nCounterGroup);
Splitted.SetAreaType(AreaTypes.SPLITTED);
return Splitted;
}
internal override JsonArea Serialize()
internal override JsonArea Serialize(bool hideHw)
{
if (nCounterGroup < IdGroup)
Area.nCounterGroup = IdGroup;
JsonSplitted JsonSplitted = new JsonSplitted(IdGroup);
if (nCounterGroup < GroupId)
Area.nCounterGroup = GroupId;
JsonSplitted JsonSplitted = new JsonSplitted(GroupId);
foreach (var Area in AreaList)
JsonSplitted.AreaList.Add(Area.Serialize());
JsonSplitted.AreaList.Add(Area.Serialize(hideHw));
return JsonSplitted;
}
+31 -4
View File
@@ -20,6 +20,8 @@ namespace WebWindowComplex.Models
#region Public Events
public event EventHandler<OnPreviewEventArgs> OnPreview = delegate { };
public event EventHandler<OnReqShapeEventArgs> OnReqShape = delegate { };
public event EventHandler<OnReqHwOptEventArgs> OnReqHwOption = delegate { };
#endregion Public Events
@@ -103,17 +105,42 @@ namespace WebWindowComplex.Models
}
}
internal JsonWindow Serialize()
internal void OnReqShapePreview(string sJwd, int groupId)
{
OnReqShapeEventArgs e = new OnReqShapeEventArgs(sJwd, groupId);
EventHandler<OnReqShapeEventArgs> handler = OnReqShape;
if (handler != null)
{
handler(this, e);
}
}
internal void OnReqHwOptionPreview(string sJwd, int groupId)
{
OnReqHwOptEventArgs e = new OnReqHwOptEventArgs(sJwd, groupId);
EventHandler<OnReqHwOptEventArgs> handler = OnReqHwOption;
if (handler != null)
{
handler(this, e);
}
}
/// <summary>
/// Serializzazione dell'oggetto windows
/// </summary>
/// <param name="hideHw">Hide hw x preview SVG veloci</param>
/// <returns></returns>
internal JsonWindow Serialize(bool hideHw = false)
{
JsonWindow JsonWindow = new JsonWindow(sProfilePath, sMaterial, sColorMaterial, sGlass);
foreach (var Area in AreaList)
JsonWindow.AreaList.Add(Area.Serialize());
JsonWindow.AreaList.Add(Area.Serialize(hideHw));
return JsonWindow;
}
internal string sSerialized()
internal string sSerialized(bool hideHw = false)
{
return JsonConvert.SerializeObject(Serialize(), Formatting.Indented);
return JsonConvert.SerializeObject(Serialize(hideHw), Formatting.Indented);
}
#endregion Internal Methods
+11 -11
View File
@@ -11,7 +11,7 @@ namespace WebWindowComplex
private ParametriOpzioniParametri[] itemsField;
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute("Parametri", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("Parametri", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public ParametriOpzioniParametri[] Items
{
get
@@ -42,7 +42,7 @@ namespace WebWindowComplex
private ParametriOpzioniParametriOpzioni[] opzioniField;
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string NomeParametro
{
get
@@ -56,7 +56,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string DescrizioneParametro
{
get
@@ -70,7 +70,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string ValoreCorrente
{
get
@@ -84,7 +84,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Tipo
{
get
@@ -98,7 +98,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Visible
{
get
@@ -112,7 +112,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string RicalcolaSeModificato
{
get
@@ -126,7 +126,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute("Opzioni", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute("Opzioni", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public ParametriOpzioniParametriOpzioni[] Opzioni
{
get
@@ -149,7 +149,7 @@ namespace WebWindowComplex
private string valoreField;
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string NomeParametro
{
get
@@ -163,7 +163,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string DescrizioneOpzione
{
get
@@ -177,7 +177,7 @@ namespace WebWindowComplex
}
/// <remarks/>
//[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Valore
{
get
+45 -13
View File
@@ -116,7 +116,10 @@
}
@if (currStep == CompileStep.Tree)
{
<CardTree ItemTableList="m_ItemTableList" maxCol="m_maxCol" EC_NextStep="NextStepArgs"></CardTree>
<CardTree ItemTableList="m_ItemTableList"
maxCol="m_maxCol"
EC_NextStep="NextStepArgs">
</CardTree>
}
else if (currStep == CompileStep.Frame)
{
@@ -124,7 +127,16 @@
{
m_PreviousWindow = m_CurrWindow;
}
<CardFrame FrameWindow="m_Frame" SashList="m_SashList" SplitList="m_SplitList" EC_ChangeAllJoints="ChangeAllJoints" EC_AddSash="() => AddSashToFrame(FrameWindow)" EC_AddSplit="() => FrameWindow.AddSplit(FrameWindow)" EC_ReqClose="ReturnTree" EC_UpdateFrame="UpdateFrame"></CardFrame>
<CardFrame FrameWindow="m_Frame"
SashList="m_SashList"
SplitList="m_SplitList"
EC_ChangeAllJoints="ChangeAllJoints"
EC_AddSash="() => AddSashToFrame(FrameWindow!)"
EC_AddSplit="() => AddSplitToFrame(FrameWindow!)"
EC_ReqClose="ReturnTree"
EC_UpdateShape="UpdateShape"
EC_UpdateFrame="UpdateFrame">
</CardFrame>
}
else if (currStep == CompileStep.Split)
{
@@ -134,7 +146,15 @@
}
else
{
<CardSplit SashList="m_SashList" SplitList="m_SplitList" CurrIndex="currSplit" CurrItem="SplitList[currSplit]" EC_SwapTwoAree="SwapTwoAree" EC_RemoveArea="RemoveArea" EC_ChangeStartVert="changeStartVert" EC_ReqClose="ReturnTree"></CardSplit>
<CardSplit SashList="m_SashList"
SplitList="m_SplitList"
CurrIndex="currSplit"
CurrItem="SplitList[currSplit]"
EC_SwapTwoAree="SwapTwoAree"
EC_RemoveArea="RemoveArea"
EC_ChangeStartVert="changeStartVert"
EC_ReqClose="ReturnTree">
</CardSplit>
}
}
else if (currStep == CompileStep.Sash)
@@ -154,6 +174,7 @@
EC_RemoveArea="RemoveArea"
EC_UpdateSash="UpdateSash"
EC_UpdateSashHardware="UpdateHwOptions"
EC_CallFirstHwOpt="CallFirstHwOpt"
EC_ReqClose="ReturnTree">
</CardSashGroup>
}
@@ -166,12 +187,30 @@
}
else
{
<CardFill CurrIndex="currFill" CurrItem="FillList[currFill]" FillList="m_FillList" SashList="m_SashList" SplittedList="m_SplittedList" EC_ChangeAllType="ChangeAllFill" EC_ChangeType="ChangeOneFill" EC_CopySash="CopySash" EC_ReqClose="ReturnTree"></CardFill>
<CardFill CurrIndex="currFill"
CurrItem="FillList[currFill]"
FillList="m_FillList"
SashList="m_SashList"
SplittedList="m_SplittedList"
EC_ChangeAllType="ChangeAllFill"
EC_ChangeType="ChangeOneFill"
EC_AddSash="AddSashIntoSplit"
EC_CopySash="CopySash"
EC_ReqClose="ReturnTree">
</CardFill>
}
}
else if (currStep == CompileStep.General)
{
<General CurrWindow="@m_CurrWindow" ListPayload="ListPayload" ListWarnings="listWarnings" EC_SelColor="SelectColor" EC_SelGlass="SelectGlass" EC_SelWindMat="SelectMat" EC_SelProfile="SelectProfile" EC_ReqClose="ReturnTree"></General>
<General CurrWindow="@m_CurrWindow"
ListPayload="ListPayload"
ListWarnings="listWarnings"
EC_SelColor="SelectColor"
EC_SelGlass="SelectGlass"
EC_SelWindMat="SelectMat"
EC_SelProfile="SelectProfile"
EC_ReqClose="ReturnTree">
</General>
}
</div>
</div>
@@ -198,11 +237,4 @@
}
}
}
</div>
@if (bError)
{
<div class="alert alert-danger" role="alert">
Aggiunta finestra non possibile.
</div>
}
</div>
+278 -123
View File
@@ -27,6 +27,12 @@ namespace WebWindowComplex
[Parameter]
public SelectPayload? CurrSelection { get; set; } = null;
/// <summary>
/// Richiesta update da JWD (SVG, calcoli vari...)
/// </summary>
[Parameter]
public EventCallback<Dictionary<string, string>> EC_DoUpdate { get; set; }
/// <summary>
/// Richiesta chiusura JWD (+ refresh)
/// se torna true --> richiesta salvataggio
@@ -41,12 +47,6 @@ namespace WebWindowComplex
[Parameter]
public EventCallback<TemplateSelectDTO> EC_OnSelectedTemplate { get; set; }
/// <summary>
/// Richiesta update da JWD (SVG, calcoli vari...)
/// </summary>
[Parameter]
public EventCallback<Dictionary<string, string>> EC_DoUpdate { get; set; }
/// <summary>
/// Sollevo evento errore validazione con una lista di errori rilevati
/// </summary>
@@ -74,10 +74,37 @@ namespace WebWindowComplex
if (m_CurrWindow != null)
{
m_CurrWindow.OnPreview -= M_CurrWindow_OnPreview;
m_CurrWindow.OnReqHwOption -= M_CurrWindow_OnHwOption;
m_CurrWindow.OnReqShape -= M_CurrWindow_OnShape;
m_CurrWindow = null;
}
}
/// <summary>
/// Cerca e aggiorna la sash
/// </summary>
/// <param name="currentArea"> area corrente che si sta valutando </param>
/// <param name="idSearch"> id della sash che si sta cercando </param>
/// <param name="newSash"> nuova sash </param>
/// <returns></returns>
public Area SearchSash(Area currentArea, int idSearch, Sash newSash)
{
if (currentArea.GroupId == idSearch && currentArea.AreaType.Equals(AreaTypes.SASH))
{
currentArea = newSash;
return currentArea;
}
foreach (Area child in currentArea.AreaList)
{
Area found = SearchSash(child, idSearch, newSash);
if (found != null)
{
return found;
}
}
return null;
}
#endregion Public Methods
#region Protected Fields
@@ -107,8 +134,6 @@ namespace WebWindowComplex
get => m_ItemTableList;
}
protected string m_SelSVG { get; set; } = "";
/// <summary>
/// Componente SVG da mostrare
/// </summary>
@@ -130,10 +155,8 @@ namespace WebWindowComplex
protected string SelColorMaterial { get; set; } = "";
protected string SelFamilyHardware { get; set; } = "";
protected string SelGlass { get; set; } = "";
protected string SelProfile { get; set; } = "";
protected string SelMaterial { get; set; } = ""!;
protected string SelProfile { get; set; } = "";
protected TemplateSelectDTO? SelTemplateDTO { get; set; } = null;
protected List<Split> SplitList
@@ -164,7 +187,7 @@ namespace WebWindowComplex
{
if (s.Equals(currSash))
{
// Per ogni anta della Sash setto bHasHandle
// Per ogni anta della Sash setto HasHandle
foreach (SashDimension item in s.SashList)
{
if (item.Equals(sashDim))
@@ -178,15 +201,19 @@ namespace WebWindowComplex
switch (item.SelOpeningType)
{
case Openings.TILTTURN_LEFT:
item.SetOpeningType(Openings.TURNONLY_LEFT);
break;
{
item.SetOpeningType(Openings.TURNONLY_LEFT);
break;
}
case Openings.TILTTURN_RIGHT:
item.SetOpeningType(Openings.TURNONLY_RIGHT);
break;
{
item.SetOpeningType(Openings.TURNONLY_RIGHT);
break;
}
default:
break;
{
break;
}
}
}
item.bHasHandle = false;
@@ -194,6 +221,9 @@ namespace WebWindowComplex
}
}
}
currSash.RefreshHardwareList();
currSash.SetFirstHardware();
_ = DoPreviewSvg();
}
/// <summary>
@@ -431,23 +461,27 @@ namespace WebWindowComplex
/// <summary>
/// Richiesta update anteprima SVG
/// </summary>
/// <param name="doForce">Forza richiesta anche con JWD invariato</param>
/// <param name="hideHw">Nasconde hw (def. false) poiché senza è piu rapido</param>
/// <returns></returns>
protected async Task DoPreviewSvg()
protected async Task DoPreviewSvg(bool doForce = false, bool hideHw = false)
{
if (m_CurrWindow != null)
{
#if DEBUG
var CurrJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize(), Formatting.Indented);
var CurrJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize(false), Formatting.Indented);
var CalcJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize(hideHw), Formatting.Indented);
#else
var CurrJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize());
var CurrJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize(false));
var CalcJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize(hideHw));
#endif
// verifico variazione JWD
if (!prevJwd.Equals(CurrJwd))
if (!prevJwd.Equals(CurrJwd) || doForce)
{
prevJwd = CurrJwd;
Dictionary<string, string> Args = new Dictionary<string, string>();
Args.Add("Mode", $"{(int)Enums.QuestionModes.PREVIEW}");
Args.Add("Jwd", CurrJwd);
Args.Add("Jwd", CalcJwd);
await EC_DoUpdate.InvokeAsync(Args);
}
}
@@ -456,8 +490,9 @@ namespace WebWindowComplex
/// <summary>
/// Richiesta calcolo Options HW da JWD
/// </summary>
/// <param name="groupIdList">Lista degli ID numerici dei gruppi da valutare</param>
/// <returns></returns>
protected async Task DoReqOptHardware()
protected async Task DoReqOptHardware(List<int> groupIdList, bool isFirst = false)
{
if (m_CurrWindow != null)
{
@@ -467,13 +502,15 @@ namespace WebWindowComplex
var CurrJwd = JsonConvert.SerializeObject(m_CurrWindow.Serialize());
#endif
// verifico variazione JWD
if (!prevJwd.Equals(CurrJwd))
if (!prevJwd.Equals(CurrJwd) || isFirst)
{
prevJwd = CurrJwd;
Dictionary<string, string> Args = new Dictionary<string, string>();
Args.Add("Mode", $"{(int)Enums.QuestionModes.HARDWARE}");
Args.Add("SubMode", $"{(int)Enums.QuestionHwSubModes.HARDWAREOPTIONS}");
Args.Add("Jwd", CurrJwd);
string listGroupId = JsonConvert.SerializeObject(groupIdList);
Args.Add("GroupId", listGroupId);
await EC_DoUpdate.InvokeAsync(Args);
}
}
@@ -482,8 +519,9 @@ namespace WebWindowComplex
/// <summary>
/// Richiesta Shape compatibile da JWD
/// </summary>
/// <param name="groupIdList">Lista degli ID numerici dei gruppi da valutare</param>
/// <returns></returns>
protected async Task DoReqShape()
protected async Task DoReqShape(List<int> groupIdList)
{
if (m_CurrWindow != null)
{
@@ -500,6 +538,8 @@ namespace WebWindowComplex
Args.Add("Mode", $"{(int)Enums.QuestionModes.HARDWARE}");
Args.Add("SubMode", $"{(int)Enums.QuestionHwSubModes.SASHSHAPE}");
Args.Add("Jwd", CurrJwd);
string listGroupId = JsonConvert.SerializeObject(groupIdList);
Args.Add("GroupId", listGroupId);
await EC_DoUpdate.InvokeAsync(Args);
}
}
@@ -537,7 +577,7 @@ namespace WebWindowComplex
protected override void OnAfterRender(bool firstRender)
{
isLoading = false;
isRendered = true;
}
/// <summary>
@@ -547,13 +587,13 @@ namespace WebWindowComplex
{
// reset editLock...
editLock = false;
// reset variabile errori
bError = false;
listErrPre = new Dictionary<string, string>();
listErrLink = new Dictionary<string, string>();
listWarnings = new Dictionary<string, string>();
}
private bool firstDisplay = true;
/// <summary>
/// Gestione update post ricezione parametri da controllo chiamante
/// </summary>
@@ -563,81 +603,88 @@ namespace WebWindowComplex
// SOLO SE sono presenti...
if (ListPayload.IsPopulated() && LiveData.IsValid())
{
bool updateSvg = false;
bool updRequested = false;
listErrPre = new Dictionary<string, string>();
listErrLink = new Dictionary<string, string>();
listWarnings = new Dictionary<string, string>();
// controllo elenchi BasePayload siano validi...
if (ListPayload.IsValid())
{
// controllo sia popolato anche per la componente LIVE
if (LiveData.IsValid())
// SOLO SE modificato live data...
if (prevLiveData == null || !prevLiveData.Equals(LiveData))
{
// SOLO SE modificato live data...
if (prevLiveData == null || !prevLiveData.Equals(LiveData))
updRequested = true;
prevLiveData = new LivePayload()
{
prevLiveData = new LivePayload()
{
CurrJwd = LiveData.CurrJwd,
OptionsXml = LiveData.OptionsXml,
Shape = LiveData.Shape,
SvgPreview = LiveData.SvgPreview
};
m_SelSVG = LiveData.SvgPreview;
// Aggiornati parametri di ingresso selezionati
UpdateSelParameter();
JsonWindow WindowFromJson = new JsonWindow("", "", "", "");
// provo a deserializzare
try
{
WindowFromJson = JsonConvert.DeserializeObject<JsonWindow>(LiveData.CurrJwd, new PolymorphicJsonConverter()) ?? new JsonWindow("", "", "", "");
setCurrWindow(WindowFromJson);
//SOLO SE non sono in edit...
if (!editLock)
{
currStep = CompileStep.Tree;
}
}
// altrimenti errore!
catch (Exception ex)
{
listErrLink.Add("Window", $"Deserializing Error:{Environment.NewLine}{ex}");
}
updateSvg = true;
}
checkWarnings();
}
else if (CurrSelection != null && CurrSelection.Template != null)
{
// Se viene passato il template selezionato oppure se non è ancora stato selezionato un template oppure se si cambia template di selezione
if (m_SelTemplate == null || (m_SelTemplate != null && CurrSelection.Template.nIndex != m_SelTemplate.nIndex) && !string.IsNullOrEmpty(CurrSelection.Template.JWD))
CurrJwd = LiveData.CurrJwd,
DictOptionsXml = LiveData.DictOptionsXml,
DictShape = LiveData.DictShape,
SvgPreview = LiveData.SvgPreview
};
// Aggiornati parametri di ingresso selezionati
UpdateSelParameter();
JsonWindow WindowFromJson = new JsonWindow("", "", "", "");
// provo a deserializzare
try
{
m_SelTemplate = CurrSelection.Template;
// Aggiornamento parametri di ingresso selezionati
UpdateSelParameter();
JsonWindow WindowFromJson = new JsonWindow("", "", "", "");
// provo a deserializzare
try
WindowFromJson = JsonConvert.DeserializeObject<JsonWindow>(LiveData.CurrJwd, new PolymorphicJsonConverter()) ?? new JsonWindow("", "", "", "");
setCurrWindow(WindowFromJson);
//SOLO SE non sono in edit...
if (!editLock)
{
WindowFromJson = JsonConvert.DeserializeObject<JsonWindow>(m_SelTemplate.JWD, new PolymorphicJsonConverter()) ?? new JsonWindow("", "", "", "");
setCurrWindow(WindowFromJson);
currStep = CompileStep.Template;
}
// altrimenti errore!
catch (Exception ex)
{
listErrLink.Add("Window", $"Deserializing Error:{Environment.NewLine}{ex}");
currStep = CompileStep.Tree;
}
}
updateSvg = true;
// altrimenti errore!
catch (Exception ex)
{
listErrLink.Add("Window", $"Deserializing Error:{Environment.NewLine}{ex}");
}
}
checkWarnings();
if (SashList.Count > 0)
{
currAnta = 0;
}
if (updateSvg)
if (updRequested)
{
await DoPreviewSvg();
// se mancasse dizionario forme chiamo quello
if (LiveData.DictShape.Count == 0)
{
if (firstDisplay && isRendered)
{
firstDisplay = false;
// preview SVG senza HW
await DoPreviewSvg(true, true);
}
List<int> reqList = SashList.Select(x => x.GroupId).ToList();
if (reqList.Count > 0)
{
await DoReqShape(reqList);
}
}
//// se mancasse xml opzioni hardware lo chiedo
//else if (LiveData.DictOptionsXml.Count == 0)
//{
// if (firstDisplay && isRendered)
// {
// firstDisplay = false;
// // preview SVG senza HW
// await DoPreviewSvg(true, true);
// }
// List<int> reqList = SashList.Select(x => x.GroupId).ToList();
// if (reqList.Count > 0)
// {
// await DoReqOptHardware(reqList);
// }
//}
else
{
// chiedo SVG
await DoPreviewSvg(true);
}
}
}
else
@@ -648,15 +695,23 @@ namespace WebWindowComplex
}
}
/// <summary>
/// Metodo per costruire oggetti della Window
/// </summary>
/// <param name="WindowFromJson"></param>
protected void setCurrWindow(JsonWindow WindowFromJson)
{
if (m_CurrWindow != null)
{
m_CurrWindow.OnPreview -= M_CurrWindow_OnPreview;
m_CurrWindow.OnReqHwOption -= M_CurrWindow_OnHwOption;
m_CurrWindow.OnReqShape -= M_CurrWindow_OnShape;
m_CurrWindow = null;
}
m_CurrWindow = WindowFromJson.Deserialize();
m_CurrWindow.OnPreview += M_CurrWindow_OnPreview;
m_CurrWindow.OnReqHwOption += M_CurrWindow_OnHwOption;
m_CurrWindow.OnReqShape += M_CurrWindow_OnShape;
// Recupero dimensioni Frame e Joint del frame della finestra precedente
if (m_PreviousWindow != null)
{
@@ -672,6 +727,32 @@ namespace WebWindowComplex
}
if (SashList.Count > 0)
currAnta = 0;
// se ho i dizionari delle forme le aggiungo
if (LiveData.DictShape.Count > 0)
{
// Inserisco le forme ricevuto nei sash group
foreach (var item in LiveData.DictShape)
{
//if (LiveData.DictShape.ContainsKey(item.GroupId))
//{
// item.UpdateShape(LiveData.DictOptionsXml[item.GroupId]);
//}
Sash sashFromGroupId = SashList.Where(x => x.GroupId == item.Key).ToList().First();
sashFromGroupId.SashShape = item.Value;
sashFromGroupId.UpdateShape(item.Value);
}
}
// se ho le opzioni hw le aggiungo
if (LiveData.DictOptionsXml.Count > 0)
{
foreach (var item in SashList)
{
if (LiveData.DictOptionsXml.ContainsKey(item.GroupId))
{
item.SetHardwareOption(LiveData.DictOptionsXml[item.GroupId]);
}
}
}
}
/// <summary>
@@ -711,8 +792,6 @@ namespace WebWindowComplex
#region Private Fields
private bool bError = false;
private int currAnta = 0;
private int currFill = -1;
@@ -729,6 +808,7 @@ namespace WebWindowComplex
/// Booleana fase loading
/// </summary>
private bool isLoading = false;
private bool isRendered = false;
/// <summary>
/// ELenco errori di coerenza/link dati (vanno risolti per disegnare/procedere)
@@ -782,9 +862,43 @@ namespace WebWindowComplex
#region Private Methods
/// <summary>
/// Metodo per aggiungere una Sash
/// </summary>
/// <param name="Args"></param>
/// <returns></returns>
private void AddSashIntoSplit(DataAreaSplitted Args)
{
Splitted currSplitted = Args.splitted;
currSplitted.AddFirstSash();
// ricalcolo liste
UpdateLists();
// richiedo update shape
List<int> reqList = SashList.Select(x => x.GroupId).ToList();
_ = DoReqShape(reqList);
}
/// <summary>
/// Metodo per aggiungere una sash di default al Frame
/// </summary>
/// <param name="f"></param>
private void AddSashToFrame(Frame f)
{
bError = f.AddFirstSash();
f.AddFirstSash();
// ricalcolo liste
UpdateLists();
// richiedo update shape
List<int> reqList = SashList.Select(x => x.GroupId).ToList();
_ = DoReqShape(reqList);
}
/// <summary>
/// Metodo per aggiungere uno split di default al Frame
/// </summary>
/// <param name="f"></param>
private void AddSplitToFrame(Frame f)
{
f.AddSplit();
}
/// <summary>
@@ -829,7 +943,7 @@ namespace WebWindowComplex
{
foreach (Fill currFill in FillList)
{
currFill.SetFillType(type);
currFill.SetSelFillType(type);
}
await DoPreviewSvg();
}
@@ -869,7 +983,7 @@ namespace WebWindowComplex
private async Task ChangeOneFill(FillTypes type)
{
Fill fillChange = FillList.ElementAt(currFill);
fillChange.SetFillType(type);
fillChange.SetSelFillType(type);
await DoPreviewSvg();
}
@@ -996,6 +1110,28 @@ namespace WebWindowComplex
_ = EC_DoUpdate.InvokeAsync(Args);
}
private void M_CurrWindow_OnHwOption(object? sender, OnReqHwOptEventArgs e)
{
Dictionary<string, string> Args = new Dictionary<string, string>();
Args.Add("Mode", $"{(int)Enums.QuestionModes.HARDWARE}");
Args.Add("SubMode", $"{(int)Enums.QuestionHwSubModes.HARDWAREOPTIONS}");
Args.Add("Jwd", e.sJwd);
string listGroupId = JsonConvert.SerializeObject(new List<int> { e.nGroupId });
Args.Add("GroupId", listGroupId);
_ = EC_DoUpdate.InvokeAsync(Args);
}
private void M_CurrWindow_OnShape(object? sender, OnReqShapeEventArgs e)
{
Dictionary<string, string> Args = new Dictionary<string, string>();
Args.Add("Mode", $"{(int)Enums.QuestionModes.HARDWARE}");
Args.Add("SubMode", $"{(int)Enums.QuestionHwSubModes.SASHSHAPE}");
Args.Add("Jwd", e.sJwd);
string listGroupId = JsonConvert.SerializeObject(new List<int> { e.groupId });
Args.Add("GroupId", listGroupId);
_ = EC_DoUpdate.InvokeAsync(Args);
}
/// <summary>
/// Calcola larghezza colonna contenente nav da mostrare
/// </summary>
@@ -1057,6 +1193,7 @@ namespace WebWindowComplex
/// <returns></returns>
private void RemoveArea(Area currArea)
{
//LiveData.DictShape.Clear();
if (currArea is Split)
((Split)currArea).Remove();
else if (currArea is Sash)
@@ -1176,17 +1313,6 @@ namespace WebWindowComplex
await DoPreviewSvg();
}
/// <summary>
/// Aggiornamento Sash e Frame
/// </summary>
/// <param name="newSash"> nuova sash </param>
/// <returns></returns>
private async Task UpdateSash(Sash newSash)
{
SearchSash(m_Frame, newSash.IdGroup, newSash);
await DoPreviewSvg();
}
/// <summary>
/// Aggiornamento opzioni dato update sash
/// </summary>
@@ -1194,34 +1320,63 @@ namespace WebWindowComplex
/// <returns></returns>
private async Task UpdateHwOptions(Sash newSash)
{
await DoReqOptHardware();
// richiesta calcolo opzioni hardware per la singola sash group
//string req = newSash.SelHardware.Id;
List<int> reqList = new List<int>() { newSash.GroupId };
// chiamo con gruppo della nuova sash
await DoReqOptHardware(reqList);
}
/// <summary>
/// Cerca e aggiorna la sash
/// Prima chiamata alle opzioni hardware
/// </summary>
/// <param name="currentArea"> area corrente che si sta valutando </param>
/// <param name="idSearch"> id della sash che si sta cercando </param>
/// <param name="newSash"> nuova sash </param>
/// <param name="groupId"> Group Id del sash group di cui si vuole Hw option </param>
/// <returns></returns>
public Area SearchSash(Area currentArea, int idSearch, Sash newSash)
private async Task CallFirstHwOpt(int groupId)
{
if (currentArea.IdGroup == idSearch && currentArea.AreaType.Equals(AreaTypes.SASH))
{
currentArea = newSash;
return currentArea;
}
foreach (Area child in currentArea.AreaList)
{
Area found = SearchSash(child, idSearch, newSash);
if (found != null)
{
return found;
}
}
return null;
bool isFirst = true;
List<int> reqList = new List<int>() { groupId };
await DoReqOptHardware(reqList, isFirst);
}
/// <summary>
/// Aggiornamento Sash e Frame
/// </summary>
/// <param name="newSash"> nuova sash </param>
/// <returns></returns>
private async Task UpdateSash(Sash newSash)
{
SearchSash(FrameWindow, newSash.GroupId, newSash);
await DoPreviewSvg();
}
/// <summary>
/// Aggiornamento Shape x ogni Group di Sash della finestra
/// </summary>
/// <param name="newFrame"></param>
/// <returns></returns>
private async Task UpdateShape(Frame newFrame)
{
//LiveData.DictShape.Clear();
FrameWindow = newFrame;
// ciclo x ogni group della mia frame
List<int> reqList = SashList.Select(x => x.GroupId).ToList();
await DoReqShape(reqList);
}
/// <summary>
/// Aggiornamento shape dato GroupId
/// </summary>
/// <param name="groupId"> nuova sash </param>
/// <returns></returns>
private async Task UpdateShape(int groupId)
{
List<int> reqList = new List<int>() { groupId };
await DoReqShape(reqList);
#if false
await DoReqShape(groupId);
#endif
}
#endregion Private Methods
}
+224 -1
View File
@@ -6,7 +6,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.7.10.2117</Version>
<Version>2.7.11.315</Version>
<Authors>Annamaria Sassi</Authors>
<Company>Egalware</Company>
<Description>Componente gestione Configurazioni avanzate Window per LUX</Description>
@@ -39,3 +39,226 @@
@@ -6,7 +6,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>2.7.10.2117</Version>
<Version>2.7.11.315</Version>
<Authors>Annamaria Sassi</Authors>
<Company>Egalware</Company>
<Description>Componente gestione JWD per LUX</Description>
@@ -98,6 +98,263 @@
+1 -1
View File
@@ -1222,7 +1222,7 @@ namespace WebWindowTest
}
private string FindSashShape()
{
return "Rectangular";
return "Rectangle";
}
internal Enums.OpeningTypes GetOpeningType(Openings OpeningType)
{