Index: VerpakkingsDefinitie/UI/ProductDetailScherm.pas =================================================================== diff -u -r568 -r569 --- VerpakkingsDefinitie/UI/ProductDetailScherm.pas (.../ProductDetailScherm.pas) (revision 568) +++ VerpakkingsDefinitie/UI/ProductDetailScherm.pas (.../ProductDetailScherm.pas) (revision 569) @@ -6,8 +6,13 @@ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Subscherm, Main, ApplicationContext, - ObserverPattern, Vcl.ComCtrls, Vcl.CheckLst; + ObserverPattern, Vcl.ComCtrls, Vcl.CheckLst, + CheckCombo; +resourceString + RICHTING_DEFAULT_VALUES = 'X;Y;Z;F'; + GEEN_DATA_CAPTION = 'Geen data om te tonen'; + type TFormProductDetail = class(TFormSubscherm) LabelOmschrijving1: TLabel; @@ -48,13 +53,18 @@ ComboBoxBoxSelect: TComboBox; ButtonMeta: TButton; ButtonDeelVan: TButton; - CheckListBox1: TCheckListBox; MemoParameters: TMemo; + procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FProductDetailsSubject: TSubject; FProductDetailsSubjectObserver: TSubjectObserver; + + LabelGeenData: TLabel; + CheckComboBoxPositie: TCheckedComboBox; + CheckComboBoxRichting: TCheckedComboBox; + procedure UpdateGui(Sender: TObject); public Constructor Create(AOwner: TComponent; Navigator: INavigator; ApplicationContext: TApplicationContext; @@ -63,7 +73,8 @@ implementation -uses OptiServerService; +uses + OptiServerService, Util, System.StrUtils; {$R *.dfm} Constructor TFormProductDetail.Create(AOwner: TComponent; Navigator: INavigator; ApplicationContext: TApplicationContext; @@ -78,6 +89,16 @@ procedure TFormProductDetail.FormCreate(Sender: TObject); begin FProductDetailsSubject.RegisterObserver(FProductDetailsSubjectObserver); + // Vervang sommige comboboxen door TCheckedComboBox + CheckComboBoxPositie := TCheckedComboBox.Create(self); + with CheckComboBoxPositie do + CheckComboBoxPositie.Delimiter := ';'; + TUtil.VervangControl(ComboBoxPositie, CheckComboBoxPositie); + + CheckComboBoxRichting := TCheckedComboBox.Create(self); + with CheckComboBoxRichting do + CheckComboBoxRichting.Delimiter := ';'; + TUtil.VervangControl(ComboBoxRichting, CheckComboBoxRichting); end; procedure TFormProductDetail.FormDestroy(Sender: TObject); @@ -89,66 +110,112 @@ var ProductDetailInformatie: OptiServerService.pxBoxData; PPSPrioriteitEl: OptiServerService.pxemPPSPrioriteit; + SchermControl: TControl; + I: Integer; + TempStr: string; begin - if ApplicationContext.ProductDetailContext.GeselecteerdProduct <> nil then + { TODO : Als er geen product is om detail van te tonen, verberg alle componenten en toon een bericht in het midden van het scherm } + if (ApplicationContext.ProductDetailContext.GeselecteerdProduct = nil) or + (ApplicationContext.ProductDetailContext.ProductDetailInformatie = nil) then begin - // Update with data from ApplicationContext - LabelOmschrijving1.Caption := ApplicationContext.ProductDetailContext.GeselecteerdProduct.Omschrijving1; - LabelOmschrijving2.Caption := ApplicationContext.ProductDetailContext.GeselecteerdProduct.Omschrijving2; + // Geen resultaten, verberg kinderen, toon melding (label) en stop. + for I := 0 to self.ControlCount - 1 do + self.Controls[I].Visible := false; + // Label tonen + LabelGeenData := TLabel.Create(self); + with LabelGeenData do + begin + Parent := self; + Caption := GEEN_DATA_CAPTION; + Font.Size := 15; + // Centreren: https://stackoverflow.com/questions/18545937/make-a-component-appear-in-the-middle-of-form-no-matter-what-screen-resolution + Left := (self.Width - Width) div 2; + Top := (self.Height - Height) div 2; + Anchors := []; // Relatief tegenover parent + end; + exit; + end + else + begin + // Wel resultaten, toon alles en ga verder. + for I := 0 to self.ControlCount - 1 do + self.Controls[I].Visible := true; + LabelGeenData.Free(); end; - if ApplicationContext.ProductDetailContext.ProductDetailInformatie <> nil then + + // Update with data from ApplicationContext + LabelOmschrijving1.Caption := ApplicationContext.ProductDetailContext.GeselecteerdProduct.Omschrijving1; + LabelOmschrijving2.Caption := ApplicationContext.ProductDetailContext.GeselecteerdProduct.Omschrijving2; + LabelProductNaam.Caption := ApplicationContext.ProductDetailContext.GeselecteerdProduct.Kol1; + + ProductDetailInformatie := ApplicationContext.ProductDetailContext.ProductDetailInformatie; + + // List view (grid) + ListViewDozen.Clear(); + With ListViewDozen.Items.Add Do begin - ProductDetailInformatie := ApplicationContext.ProductDetailContext.ProductDetailInformatie; - ListViewDozen.Clear(); - With ListViewDozen.Items.Add Do + // Caption := IntToStr(Product.ProductNr); // Deze casting geeft geen access violation + Caption := IntToStr(ProductDetailInformatie.CutOrder); + SubItems.Add(ProductDetailInformatie.MetaCaption); + SubItems.Add(ProductDetailInformatie.Breedte + ' x ' + ProductDetailInformatie.Diepte + ' x ' + + ProductDetailInformatie.Hoogte); + SubItems.Add(ProductDetailInformatie.Aantal); + SubItems.Add(ProductDetailInformatie.MaxCombinAantal); + SubItems.Add(ProductDetailInformatie.DeelVanCaption); + // Linkerhelft + EditMeta.Text := ProductDetailInformatie.MetaCaption; + EditVolumeVan.Text := ProductDetailInformatie.VolumeVanCaption; + ComboBoxDeelVan.Items.Add(ProductDetailInformatie.DeelVanCaption); + if ProductDetailInformatie.Breedte <> '' then + EditBreedte.Text := ProductDetailInformatie.Breedte + else + EditBreedte.Text := ProductDetailInformatie.DefaultData.Breedte; // Default + if ProductDetailInformatie.Diepte <> '' then + EditDiepte.Text := ProductDetailInformatie.Diepte + else + EditDiepte.Text := ProductDetailInformatie.DefaultData.Diepte; // Default + if ProductDetailInformatie.Hoogte <> '' then + EditHoogte.Text := ProductDetailInformatie.Hoogte + else + EditHoogte.Text := ProductDetailInformatie.DefaultData.Hoogte; + EditMaxCombAantal.Text := ProductDetailInformatie.MaxCombinAantal; + EditAantal.Text := ProductDetailInformatie.Aantal; + + // Rechterhelft + + // Plaatsing + ComboBoxPlaatsing.Items.Clear(); + // Combobox vullen en item selecteren. Indien item niet aanwezig is, eerste item selecteren. + for PPSPrioriteitEl in ProductDetailInformatie.PPSPrioriteit do begin - // List view (grid) - // Caption := IntToStr(Product.ProductNr); // Deze casting geeft geen access violation - Caption := IntToStr(ProductDetailInformatie.CutOrder); - SubItems.Add(ProductDetailInformatie.MetaCaption); - SubItems.Add(ProductDetailInformatie.Breedte + ' x ' + ProductDetailInformatie.Diepte + ' x ' + - ProductDetailInformatie.Hoogte); - SubItems.Add(ProductDetailInformatie.Aantal); - SubItems.Add(ProductDetailInformatie.MaxCombinAantal); - SubItems.Add(ProductDetailInformatie.DeelVanCaption); - // Linkerhelft - EditMeta.Text := ProductDetailInformatie.MetaCaption; - EditVolumeVan.Text := ProductDetailInformatie.VolumeVanCaption; - ComboBoxDeelVan.Items.Add(ProductDetailInformatie.DeelVanCaption); - if ProductDetailInformatie.Breedte <> '' then - EditBreedte.Text := ProductDetailInformatie.Breedte - else - EditBreedte.Text := ProductDetailInformatie.DefaultData.Breedte; // Default - if ProductDetailInformatie.Diepte <> '' then - EditDiepte.Text := ProductDetailInformatie.Diepte - else - EditDiepte.Text := ProductDetailInformatie.DefaultData.Diepte; // Default - if ProductDetailInformatie.Hoogte <> '' then - EditHoogte.Text := ProductDetailInformatie.Hoogte - else - EditHoogte.Text := ProductDetailInformatie.DefaultData.Hoogte; - EditMaxCombAantal.Text := ProductDetailInformatie.MaxCombinAantal; - EditAantal.Text := ProductDetailInformatie.Aantal; - // Rechterhelft + ComboBoxPlaatsing.Items.Add(PPSPrioriteitEl.Key); + end; + if ComboBoxPlaatsing.Items.IndexOf(ProductDetailInformatie.OptiType) >= 0 then + ComboBoxPlaatsing.ItemIndex := ComboBoxPlaatsing.Items.IndexOf(ProductDetailInformatie.OptiType) + else if ComboBoxPlaatsing.Items.Count > 0 then + ComboBoxPlaatsing.ItemIndex := 0; - // Plaatsing - for PPSPrioriteitEl in ProductDetailInformatie.PPSPrioriteit do - begin - ComboBoxPlaatsing.Items.Add(PPSPrioriteitEl.Key); - end; - // Combobox vullen en item selecteren. Indien item niet aanwezig is, eerste item selecteren. - if ComboBoxPlaatsing.Items.IndexOf(ProductDetailInformatie.OptiType) >= 0 then - ComboBoxPlaatsing.ItemIndex := ComboBoxPlaatsing.Items.IndexOf(ProductDetailInformatie.OptiType) - else if ComboBoxPlaatsing.Items.Count > 0 then - ComboBoxPlaatsing.ItemIndex := 0; + // Positie + CheckComboBoxPositie.Items.Clear(); + // CheckComboBoxPositie vullen en item selecteren. + for TempStr in SplitString(ProductDetailInformatie.DefaultData.Positie, ';') do + begin + CheckComboBoxPositie.Items.Add(TempStr); + end; + if CheckComboBoxPositie.Items.IndexOf(ProductDetailInformatie.Positie) >= 0 then + CheckComboBoxPositie.Checked[CheckComboBoxPositie.Items.IndexOf(ProductDetailInformatie.Positie)] := true; - { TODO : Dropdown met check boxes. Positie: Defaultwaarden en veld Positie } - { TODO : - Dropdown met check boxes. - Rotatie heeft default waarden van Richting - X; Y; Z; F; - Veld in XML is Rotatie met 1 waarde } + // Richting + CheckComboBoxRichting.Items.Clear(); + // CheckComboBoxPositie vullen en item selecteren. Als waarde niet aanwezig is, uit default halen. + for TempStr in SplitString(RICHTING_DEFAULT_VALUES, ';') do + begin + CheckComboBoxRichting.Items.Add(TempStr); end; + if CheckComboBoxRichting.Items.IndexOf(ProductDetailInformatie.Rotatie) >= 0 then + CheckComboBoxRichting.Checked[CheckComboBoxRichting.Items.IndexOf(ProductDetailInformatie.Rotatie)] := true + else if CheckComboBoxRichting.Items.IndexOf(ProductDetailInformatie.DefaultData.Rotatie) >= 0 then + CheckComboBoxRichting.Checked[CheckComboBoxRichting.Items.IndexOf(ProductDetailInformatie.DefaultData.Rotatie)] := true end; end;