git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@8 05c56307-c608-d34a-929d-697000501d7a
437 lines
13 KiB
ObjectPascal
437 lines
13 KiB
ObjectPascal
unit IssueListGrid;
|
|
|
|
{$I ..\..\cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI6}
|
|
Variants,
|
|
{$ENDIF}
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, Buttons, StdCtrls, Mask, ExtCtrls, cxGridLevel,
|
|
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxControls,
|
|
cxGridCustomView, cxGrid, cxGridCustomPopupMenu, cxGridPopupMenu, cxStyles,
|
|
Menus, cxCustomData, cxGraphics, cxFilter, cxData, cxEdit, DB, cxDBData,
|
|
cxClasses, cxGridBandedTableView, cxGridDBBandedTableView, cxLookAndFeels,
|
|
cxDataStorage, cxDBLookupComboBox, cxCalendar, cxBlobEdit;
|
|
|
|
type
|
|
TIssueListGridForm = class(TForm)
|
|
cxGrid: TcxGrid;
|
|
tvItems: TcxGridDBTableView;
|
|
tvItemsNAME: TcxGridDBColumn;
|
|
tvItemsPROJECTID: TcxGridDBColumn;
|
|
tvItemsTYPE: TcxGridDBColumn;
|
|
tvItemsOWNERID: TcxGridDBColumn;
|
|
tvItemsCREATEDDATE: TcxGridDBColumn;
|
|
tvItemsSTATUS: TcxGridDBColumn;
|
|
tvItemsPRIORITY: TcxGridDBColumn;
|
|
tvItemsCREATORID: TcxGridDBColumn;
|
|
tvItemsLASTMODIFIEDDATE: TcxGridDBColumn;
|
|
tvItemsFIXEDDATE: TcxGridDBColumn;
|
|
tvItemsRESOLUTION: TcxGridDBColumn;
|
|
tvItemsDESCRIPTION: TcxGridDBColumn;
|
|
tvProjects: TcxGridDBTableView;
|
|
tvProjectsNAME: TcxGridDBColumn;
|
|
tvProjectsMANAGERID: TcxGridDBColumn;
|
|
tvUsers: TcxGridDBTableView;
|
|
tvUsersFNAME: TcxGridDBColumn;
|
|
tvUsersMNAME: TcxGridDBColumn;
|
|
tvUsersLNAME: TcxGridDBColumn;
|
|
tvUsersEMAIL: TcxGridDBColumn;
|
|
tvUsersPHONE: TcxGridDBColumn;
|
|
tvUsersDEPARTMENTID: TcxGridDBColumn;
|
|
tvTeams: TcxGridDBTableView;
|
|
tvTeamsPROJECTID: TcxGridDBColumn;
|
|
tvTeamsUSERID: TcxGridDBColumn;
|
|
tvTeamsFUNCTION: TcxGridDBColumn;
|
|
tvDepartments: TcxGridDBTableView;
|
|
tvDepartmentsNAME: TcxGridDBColumn;
|
|
lvProjects: TcxGridLevel;
|
|
lvProjectItems: TcxGridLevel;
|
|
lvItems: TcxGridLevel;
|
|
lvDepartments: TcxGridLevel;
|
|
lvDepartmentUsers: TcxGridLevel;
|
|
lvTeam: TcxGridLevel;
|
|
lvUsers: TcxGridLevel;
|
|
pnlForm: TPanel;
|
|
Splitter1: TSplitter;
|
|
cxGridPopupMenu1: TcxGridPopupMenu;
|
|
pnlDesciption: TPanel;
|
|
lvSchedule: TcxGridLevel;
|
|
btnSchedule: TcxGridDBBandedTableView;
|
|
btnScheduleID: TcxGridDBBandedColumn;
|
|
btnSchedulePROJECTID: TcxGridDBBandedColumn;
|
|
btnScheduleUSERID: TcxGridDBBandedColumn;
|
|
btnScheduleSUNDAY: TcxGridDBBandedColumn;
|
|
btnScheduleMONDAY: TcxGridDBBandedColumn;
|
|
btnScheduleTUESDAY: TcxGridDBBandedColumn;
|
|
btnScheduleWEDNESDAY: TcxGridDBBandedColumn;
|
|
btnScheduleTHURSDAY: TcxGridDBBandedColumn;
|
|
btnScheduleFRIDAY: TcxGridDBBandedColumn;
|
|
btnScheduleSATURDAY: TcxGridDBBandedColumn;
|
|
btnScheduleRowSum: TcxGridDBBandedColumn;
|
|
btnScheduleRowAvg: TcxGridDBBandedColumn;
|
|
procedure cxGridFocusedViewChanged(Sender: TcxCustomGrid;
|
|
APrevFocusedView, AFocusedView: TcxCustomGridView);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure cxGridActiveTabChanged(Sender: TcxCustomGrid;
|
|
ALevel: TcxGridLevel);
|
|
procedure cxGridRootLevelStylesGetTabStyle(Sender,
|
|
ATabLevel: TcxGridLevel; out AStyle: TcxStyle);
|
|
procedure FormActivate(Sender: TObject);
|
|
procedure tvItemsStylesGetContentStyle(Sender: TcxCustomGridTableView;
|
|
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
|
|
out AStyle: TcxStyle);
|
|
private
|
|
FIsDependsOnData: boolean;
|
|
|
|
procedure GoToForm(AID: Integer);
|
|
function GetFormIDByDataSetName(ADataSetName: string): Integer;
|
|
procedure ChangeUsersLevel(ALevel: TcxGridLevel);
|
|
procedure ChangeItemsLevel(ALevel: TcxGridLevel);
|
|
|
|
procedure ChangeDescription(AIndex: Integer);
|
|
function GetGridLevelByTag(ATag: Integer): TcxGridLevel;
|
|
|
|
function GetFocusedView: TcxGridTableView;
|
|
public
|
|
// operations
|
|
procedure DoGoProject(AIndex: integer);
|
|
|
|
procedure DoSetShowPictures(Value: boolean);
|
|
procedure DoSetShowDescription(Value: boolean);
|
|
procedure DoSetShowDependsOnData(Value: boolean);
|
|
procedure DoSetShowNewItemRow(Value: boolean);
|
|
|
|
procedure DoSetLookAndFeelKind(AKind: TcxLookAndFeelKind);
|
|
procedure DoSetEditorsShadow(Value: boolean);
|
|
|
|
procedure DoSetShowIndicator(Value: boolean);
|
|
procedure DoSetShowGrouping(Value: boolean);
|
|
procedure DoSetShowHeader(Value: boolean);
|
|
procedure DoSetShowFooter(Value: boolean);
|
|
procedure DoSetAutoWidth(Value: boolean);
|
|
procedure DoSetInvertSelected(Value: boolean);
|
|
procedure DoSetAutoPreview(Value: boolean);
|
|
procedure DoSetShowEditButtons(Value: boolean);
|
|
procedure DoSetShowGridLines(Value: boolean);
|
|
|
|
procedure DoFullCollapse;
|
|
procedure DoFullExpand;
|
|
procedure DoColumnsCustomization;
|
|
procedure DoBestFit;
|
|
|
|
property FocusedView: TcxGridTableView read GetFocusedView;
|
|
property IsDependsOnData: boolean read FIsDependsOnData write FIsDependsOnData;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
cxStyleSheetEditor,
|
|
IssueListData, IssueListForms, IssueListForm, cxGridDBDataDefinitions,
|
|
IssueListConst, IssueListMain, cxEditRepositoryItems;
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TIssueListGridForm.GoToForm(AID: Integer);
|
|
begin
|
|
FormManager.ShowForm(AID, pnlForm);
|
|
end;
|
|
|
|
|
|
procedure TIssueListGridForm.cxGridFocusedViewChanged(
|
|
Sender: TcxCustomGrid; APrevFocusedView,
|
|
AFocusedView: TcxCustomGridView);
|
|
var
|
|
AID: Integer;
|
|
ADataController: TcxGridDBDataController;
|
|
begin
|
|
if AFocusedView <> nil then
|
|
begin
|
|
AFocusedView.BeginUpdate;
|
|
try
|
|
ADataController := TcxGridDBDataController(GetGridViewDataController(AFocusedView));
|
|
if ADataController.DataSet <> nil then
|
|
begin
|
|
AID := GetFormIDByDataSetName(ADataController.DataSet.Name);
|
|
GoToForm(AID);
|
|
if ADataController.RecordCount = 0 then
|
|
ADataController.Append;
|
|
end;
|
|
(AFocusedView.Controller as TcxGridTableController).Customization := False;
|
|
finally
|
|
AFocusedView.EndUpdate;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.FormCreate(Sender: TObject);
|
|
begin
|
|
GoToForm(ProjectsFormID);
|
|
FIsDependsOnData := True;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.cxGridActiveTabChanged(
|
|
Sender: TcxCustomGrid; ALevel: TcxGridLevel);
|
|
begin
|
|
ChangeDescription(ALevel.Tag);
|
|
if (ALevel = lvDepartments) or (ALevel = lvUsers) then
|
|
ChangeUsersLevel(ALevel);
|
|
if (ALevel = lvProjects) or (ALevel = lvItems) then
|
|
ChangeItemsLevel(ALevel);
|
|
end;
|
|
|
|
function TIssueListGridForm.GetFormIDByDataSetName(
|
|
ADataSetName: string): Integer;
|
|
begin
|
|
Result := 0;
|
|
if ADataSetName = 'tblItems' then
|
|
Result := ItemsFormID;
|
|
if ADataSetName = 'tblProjects' then
|
|
Result := ProjectsFormID;
|
|
if ADataSetName = 'tblUsers' then
|
|
Result := UsersFormID;
|
|
if ADataSetName = 'tblTeams' then
|
|
Result := TeamsFormID;
|
|
if ADataSetName = 'tblDepartments' then
|
|
Result := DepartmentsFormID;
|
|
if ADataSetName = 'tblSchedule' then
|
|
Result := ScheduleFormID;
|
|
end;
|
|
|
|
function TIssueListGridForm.GetGridLevelByTag(ATag: Integer): TcxGridLevel;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to cxGrid.Levels.Count - 1 do
|
|
begin
|
|
Result := cxGrid.Levels[I];
|
|
if cxGrid.Levels[I].Tag = ATag then Exit;
|
|
end;
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.ChangeDescription(AIndex: Integer);
|
|
const
|
|
ADescription: array[1..6] of string =
|
|
('A project list showing project managers and the issues for each project',
|
|
'A list of issues with problem descriptions and classifications ',
|
|
'A list of departments displaying employee details',
|
|
'A list of employees working on a project showing their work status',
|
|
'A list of employees displaying personal data',
|
|
'An operating schedule of users working on a project during a week');
|
|
begin
|
|
pnlDesciption.Caption := ADescription[AIndex];
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowGrouping(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsView.GroupByBox := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowIndicator(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsView.Indicator := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoGoProject(AIndex: integer);
|
|
var
|
|
ALevel: TcxGridLevel;
|
|
AInfo: TcxGridTopDetailsSiteViewInfo;
|
|
begin
|
|
ALevel := GetGridLevelByTag(AIndex);
|
|
AInfo := TcxGridTopDetailsSiteViewInfo(cxGrid.ViewInfo.DetailsSiteViewInfo);
|
|
if AInfo <> nil then
|
|
AInfo.ChangeActiveTab(ALevel);
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoColumnsCustomization;
|
|
begin
|
|
TcxGridTableController(cxGrid.FocusedView.Controller).Customization := True;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowPictures(Value: boolean);
|
|
var
|
|
I: Integer;
|
|
AImageList: TImageList;
|
|
begin
|
|
if Value then
|
|
AImageList := dmMain.imStat
|
|
else AImageList := nil;
|
|
|
|
with dmMain.edrepMain do
|
|
for I := 0 to Count -1 do
|
|
if (Items[I] is TcxEditRepositoryImageComboBoxItem) then
|
|
TcxEditRepositoryImageComboBoxItem(Items[I]).Properties.Images := AImageList;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetLookAndFeelKind(AKind: TcxLookAndFeelKind);
|
|
begin
|
|
cxGrid.LookAndFeel.Kind := AKind;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowDescription(Value: boolean);
|
|
begin
|
|
pnlDesciption.Visible := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowDependsOnData(Value: boolean);
|
|
begin
|
|
FIsDependsOnData := Value;
|
|
tvItems.LayoutChanged;
|
|
tvProjects.DataController.ClearDetails;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowHeader(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsView.Header := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowFooter(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsView.Footer := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetAutoWidth(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsView.ColumnAutoWidth := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.cxGridRootLevelStylesGetTabStyle(Sender,
|
|
ATabLevel: TcxGridLevel; out AStyle: TcxStyle);
|
|
begin
|
|
if TcxGridLevel(ATabLevel).GridView = cxGrid.ActiveView then
|
|
AStyle := dmMain.stSelected;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetInvertSelected(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsSelection.InvertSelect := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.ChangeItemsLevel(ALevel: TcxGridLevel);
|
|
begin
|
|
tvItems.BeginUpdate;
|
|
try
|
|
lvProjectItems.Visible := ALevel = lvProjects;
|
|
tvItemsPROJECTID.Visible := False;
|
|
if ALevel = lvProjects then
|
|
begin
|
|
tvItemsPROJECTID.GroupIndex := -1;
|
|
lvProjectItems.GridView := tvItems;
|
|
cxGrid.FocusedView := tvProjects;
|
|
end
|
|
else
|
|
begin
|
|
tvItemsPROJECTID.GroupIndex := 0;
|
|
lvItems.GridView := tvItems;
|
|
cxGrid.FocusedView := tvItems;
|
|
end;
|
|
finally
|
|
tvItems.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.ChangeUsersLevel(ALevel: TcxGridLevel);
|
|
begin
|
|
tvUsers.BeginUpdate;
|
|
try
|
|
lvDepartmentUsers.Visible := ALevel = lvDepartments;
|
|
tvUsersDEPARTMENTID.Visible := False;
|
|
if ALevel = lvDepartments then
|
|
begin
|
|
tvUsersDEPARTMENTID.GroupIndex := -1;
|
|
lvDepartmentUsers.GridView := tvUsers;
|
|
cxGrid.FocusedView := tvDepartments;
|
|
end
|
|
else
|
|
begin
|
|
tvUsersDEPARTMENTID.GroupIndex := 0;
|
|
lvUsers.GridView := tvUsers;
|
|
cxGrid.FocusedView := tvUsers;
|
|
end;
|
|
finally
|
|
tvUsers.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
function TIssueListGridForm.GetFocusedView: TcxGridTableView;
|
|
begin
|
|
Result := TcxGridTableView(cxGrid.FocusedView);
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoBestFit;
|
|
begin
|
|
FocusedView.ApplyBestFit;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoFullCollapse;
|
|
begin
|
|
FocusedView.ViewData.Collapse(True);
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoFullExpand;
|
|
begin
|
|
FocusedView.ViewData.Expand(True);
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowEditButtons(Value: boolean);
|
|
begin
|
|
if Value then
|
|
FocusedView.OptionsView.ShowEditButtons := gsebForFocusedRecord
|
|
else FocusedView.OptionsView.ShowEditButtons := gsebNever;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowGridLines(Value: boolean);
|
|
begin
|
|
if Value then
|
|
FocusedView.OptionsView.GridLines := glBoth
|
|
else FocusedView.OptionsView.GridLines := glNone;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetAutoPreview(Value: boolean);
|
|
begin
|
|
FocusedView.Preview.Visible := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetShowNewItemRow(Value: boolean);
|
|
begin
|
|
FocusedView.OptionsView.NewItemRow := Value;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.FormActivate(Sender: TObject);
|
|
begin
|
|
ChangeDescription(1);
|
|
end;
|
|
|
|
procedure TIssueListGridForm.tvItemsStylesGetContentStyle(
|
|
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
|
|
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
|
|
var
|
|
AStatus: Integer;
|
|
begin
|
|
if not IsDependsOnData then
|
|
Exit;
|
|
AStatus := -1;
|
|
if (ARecord <> nil) and (AItem <> nil ) then
|
|
if not VarIsNull(TcxCustomGridRecord(ARecord).Values[tvItemsSTATUS.Index]) then
|
|
AStatus := VarAsType(TcxCustomGridRecord(ARecord).Values[tvItemsSTATUS.Index], varInteger);
|
|
|
|
case AStatus of
|
|
1: AStyle := dmMain.stNew;
|
|
2: AStyle := dmMain.stPostponed;
|
|
3: AStyle := dmMain.stFixed;
|
|
4: AStyle := dmMain.stRejected;
|
|
end;
|
|
end;
|
|
|
|
procedure TIssueListGridForm.DoSetEditorsShadow(Value: boolean);
|
|
begin
|
|
dmMain.edstcMain.Style.Shadow := Value;
|
|
end;
|
|
|
|
end.
|