unit u_profilelist; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Grids, Menus, fpjson, u_api, u_profiledetail, u_profileedit, u_timeseries; type { TProfileListForm } TProfileListForm = class(TForm) btnNew: TButton; btnRefresh: TButton; btnEdit: TButton; btnDelete: TButton; btnTimeSeries: TButton; btnLogout: TButton; Panel1: TPanel; StringGrid1: TStringGrid; PopupMenu1: TPopupMenu; miView: TMenuItem; miEdit: TMenuItem; miDelete: TMenuItem; miTimeSeries: TMenuItem; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormShow(Sender: TObject); procedure StringGrid1Click(Sender: TObject); procedure StringGrid1DblClick(Sender: TObject); private FUserID: string; FSession: string; FProfiles: TJSONArray; procedure LoadProfiles; procedure UpdateGrid; function GetSelectedProfileID: string; function GetSelectedProfileName: string; function GetSelectedProfile: TJSONObject; procedure OnNewClick(Sender: TObject); procedure OnRefreshClick(Sender: TObject); procedure OnEditClick(Sender: TObject); procedure OnDeleteClick(Sender: TObject); procedure OnTimeSeriesClick(Sender: TObject); procedure OnLogoutClick(Sender: TObject); procedure OnViewClick(Sender: TObject); procedure OnMiEditClick(Sender: TObject); procedure OnMiDeleteClick(Sender: TObject); procedure OnMiTimeSeriesClick(Sender: TObject); public constructor Create(AOwner: TComponent; const UserID, Session: string); reintroduce; end; implementation {$R *.lfm} { TProfileListForm } constructor TProfileListForm.Create(AOwner: TComponent; const UserID, Session: string); begin inherited Create(AOwner); FUserID := UserID; FSession := Session; FProfiles := nil; Caption := 'DÜSK - Profile'; Position := poScreenCenter; Width := 900; Height := 550; StringGrid1.FixedCols := 0; StringGrid1.ColCount := 3; StringGrid1.RowCount := 1; StringGrid1.Cells[0, 0] := 'Name'; StringGrid1.Cells[1, 0] := 'Gruppe'; StringGrid1.Cells[2, 0] := 'ProfilID'; StringGrid1.ColWidths[0] := 350; StringGrid1.ColWidths[1] := 250; StringGrid1.ColWidths[2] := 80; StringGrid1.Options := StringGrid1.Options + [goRowSelect]; StringGrid1.OnClick := @StringGrid1Click; StringGrid1.OnDblClick := @StringGrid1DblClick; btnNew.OnClick := @OnNewClick; btnRefresh.OnClick := @OnRefreshClick; btnEdit.OnClick := @OnEditClick; btnDelete.OnClick := @OnDeleteClick; btnTimeSeries.OnClick := @OnTimeSeriesClick; btnLogout.OnClick := @OnLogoutClick; miView.OnClick := @OnViewClick; miEdit.OnClick := @OnMiEditClick; miDelete.OnClick := @OnMiDeleteClick; miTimeSeries.OnClick := @OnMiTimeSeriesClick; LoadProfiles; end; procedure TProfileListForm.FormShow(Sender: TObject); begin LoadProfiles; end; procedure TProfileListForm.LoadProfiles; begin Screen.Cursor := crHourGlass; try if Assigned(FProfiles) then FProfiles.Free; FProfiles := GetProfiles(FUserID, FSession); if Assigned(FProfiles) then UpdateGrid else StringGrid1.RowCount := 1; finally Screen.Cursor := crDefault; end; end; procedure TProfileListForm.UpdateGrid; var i: Integer; Profile: TJSONObject; begin if not Assigned(FProfiles) then begin StringGrid1.RowCount := 1; Exit; end; StringGrid1.RowCount := FProfiles.Count + 1; for i := 0 to FProfiles.Count - 1 do begin Profile := TJSONObject(FProfiles.Objects[i]); StringGrid1.Cells[0, i + 1] := Profile.Get('name', ''); StringGrid1.Cells[1, i + 1] := Profile.Get('gruppename', ''); StringGrid1.Cells[2, i + 1] := Profile.Get('profilID', ''); end; end; function TProfileListForm.GetSelectedProfileID: string; begin if StringGrid1.Row > 0 then Result := StringGrid1.Cells[2, StringGrid1.Row] else Result := ''; end; function TProfileListForm.GetSelectedProfileName: string; begin if StringGrid1.Row > 0 then Result := StringGrid1.Cells[0, StringGrid1.Row] else Result := ''; end; function TProfileListForm.GetSelectedProfile: TJSONObject; var i: Integer; begin Result := nil; if (StringGrid1.Row < 1) or not Assigned(FProfiles) then Exit; i := StringGrid1.Row - 1; if i < FProfiles.Count then Result := TJSONObject(FProfiles.Objects[i]); end; procedure TProfileListForm.StringGrid1Click(Sender: TObject); begin if StringGrid1.Row > 0 then StringGrid1.Row := StringGrid1.Row; end; procedure TProfileListForm.StringGrid1DblClick(Sender: TObject); var ProfileID: string; ProfileData: TJSONObject; begin ProfileID := GetSelectedProfileID; if ProfileID = '' then begin ShowMessage('Bitte wählen Sie ein Profil aus'); Exit; end; ProfileData := GetProfile(FUserID, FSession, ProfileID); if Assigned(ProfileData) then begin with TProfileDetailForm.Create(Self, ProfileData) do begin ShowModal; Free; end; end; end; procedure TProfileListForm.OnRefreshClick(Sender: TObject); begin LoadProfiles; end; procedure TProfileListForm.OnNewClick(Sender: TObject); begin with TProfileEditForm.Create(Self, FUserID, FSession, '') do begin if ShowModal = mrOk then LoadProfiles; Free; end; end; procedure TProfileListForm.OnEditClick(Sender: TObject); var ProfileID: string; begin ProfileID := GetSelectedProfileID; if ProfileID = '' then begin ShowMessage('Bitte wählen Sie ein Profil aus'); Exit; end; with TProfileEditForm.Create(Self, FUserID, FSession, ProfileID) do begin if ShowModal = mrOk then LoadProfiles; Free; end; end; procedure TProfileListForm.OnDeleteClick(Sender: TObject); var ProfileID: string; ProfileName: string; begin ProfileID := GetSelectedProfileID; ProfileName := GetSelectedProfileName; if ProfileID = '' then begin ShowMessage('Bitte wählen Sie ein Profil aus'); Exit; end; if MessageDlg('Profil löschen', Format('Möchten Sie "%s" wirklich löschen?', [ProfileName]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin if DeleteProfile(FUserID, FSession, ProfileID) then LoadProfiles else ShowMessage('Fehler beim Löschen des Profils'); end; end; procedure TProfileListForm.OnTimeSeriesClick(Sender: TObject); var GroupID: string; GroupName: string; GroupProfiles: TJSONArray; i: Integer; Profile: TJSONObject; ProfileData: TJSONObject; begin if GetSelectedProfile = nil then begin ShowMessage('Bitte wählen Sie ein Profil aus'); Exit; end; GroupID := GetSelectedProfile.Get('gruppeID', ''); GroupName := GetSelectedProfile.Get('gruppename', ''); if GroupID = '' then begin ShowMessage('Keine Gruppe für dieses Profil'); Exit; end; GroupProfiles := TJSONArray.Create; try for i := 0 to FProfiles.Count - 1 do begin Profile := TJSONObject(FProfiles.Objects[i]); if Profile.Get('gruppeID', '') = GroupID then begin ProfileData := GetProfile(FUserID, FSession, Profile.Get('profilID', '')); if Assigned(ProfileData) then GroupProfiles.Add(ProfileData); end; end; if GroupProfiles.Count > 0 then begin with TTimeSeriesForm.Create(Self, FUserID, FSession, GroupName, GroupProfiles) do begin ShowModal; Free; end; end else ShowMessage('Keine weiteren Profile in dieser Gruppe.'); finally // GroupProfiles wird im TTimeSeriesForm freigegeben end; end; procedure TProfileListForm.OnLogoutClick(Sender: TObject); begin Close; end; procedure TProfileListForm.OnViewClick(Sender: TObject); begin StringGrid1DblClick(Sender); end; procedure TProfileListForm.OnMiEditClick(Sender: TObject); begin OnEditClick(Sender); end; procedure TProfileListForm.OnMiDeleteClick(Sender: TObject); begin OnDeleteClick(Sender); end; procedure TProfileListForm.OnMiTimeSeriesClick(Sender: TObject); begin OnTimeSeriesClick(Sender); end; procedure TProfileListForm.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin if Assigned(FProfiles) then FProfiles.Free; CloseAction := caFree; end; end.