git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.UserControl@5 970f2627-a9d2-4748-b3d4-b5283c4fe7db
745 lines
26 KiB
ObjectPascal
745 lines
26 KiB
ObjectPascal
unit UserPermis_U;
|
|
|
|
interface
|
|
|
|
{$I 'UserControl.inc'}
|
|
|
|
uses
|
|
UCBase,
|
|
{$IFDEF UCACTMANAGER}
|
|
ActnMan,
|
|
ActnMenus,
|
|
{$ENDIF}
|
|
{$IFDEF DELPHI5_UP}
|
|
Variants,
|
|
{$ENDIF}
|
|
Buttons,
|
|
Classes,
|
|
ComCtrls,
|
|
Controls,
|
|
DB,
|
|
ExtCtrls,
|
|
Forms,
|
|
Graphics,
|
|
ImgList,
|
|
Menus,
|
|
StdCtrls;
|
|
|
|
type
|
|
PTreeMenu = ^TTreeMenu;
|
|
|
|
TTreeMenu = record
|
|
Selecionado: Integer;
|
|
MenuName: String;
|
|
end;
|
|
|
|
PTreeAction = ^TTreeAction;
|
|
|
|
TTreeAction = record
|
|
Grupo: Boolean;
|
|
Selecionado: Integer;
|
|
MenuName: String;
|
|
end;
|
|
|
|
PTreeControl = ^TTreeControl;
|
|
|
|
TTreeControl = record
|
|
Grupo: Boolean;
|
|
Selecionado: Integer;
|
|
CompName: String;
|
|
FormName: String;
|
|
end;
|
|
|
|
TUserPermis = class(TForm)
|
|
Panel1: TPanel;
|
|
LbDescricao: TLabel;
|
|
Image1: TImage;
|
|
Panel3: TPanel;
|
|
BtLibera: TBitBtn;
|
|
BtBloqueia: TBitBtn;
|
|
BtGrava: TBitBtn;
|
|
lbUser: TLabel;
|
|
ImageList1: TImageList;
|
|
BtCancel: TBitBtn;
|
|
PC: TPageControl;
|
|
PageMenu: TTabSheet;
|
|
PageAction: TTabSheet;
|
|
TreeMenu: TTreeView;
|
|
TreeAction: TTreeView;
|
|
PageControls: TTabSheet;
|
|
TreeControls: TTreeView;
|
|
procedure BtGravaClick(Sender: TObject);
|
|
procedure TreeMenuClick(Sender: TObject);
|
|
procedure BtCancelClick(Sender: TObject);
|
|
procedure BtLiberaClick(Sender: TObject);
|
|
procedure BtBloqueiaClick(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure TreeActionClick(Sender: TObject);
|
|
procedure TreeControlsClick(Sender: TObject);
|
|
procedure TreeMenuCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean);
|
|
procedure TreeMenuKeyPress(Sender: TObject; var Key: char);
|
|
procedure TreeMenuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
procedure FormDestroy(Sender: TObject);
|
|
private
|
|
FMenu: TMenu;
|
|
FActions: TObject;
|
|
FChangingTree: Boolean;
|
|
FTempMPointer: PTreeMenu;
|
|
FTempAPointer: PTreeAction;
|
|
FTempCPointer: PTreeControl;
|
|
FExtraRights: TUCExtraRights;
|
|
FTempLista: TStringList;
|
|
FListaAction: array of PTreeAction;
|
|
FListaMenu: array of PTreeMenu;
|
|
FListaControl: array of PTreeControl;
|
|
{$IFDEF UCACTMANAGER}
|
|
FActionMainMenuBar: TActionMainMenuBar;
|
|
procedure TrataItem(IT: TActionClientItem; node: TTreeNode); overload;
|
|
{$ENDIF}
|
|
procedure TrataItem(IT: TMenuItem; node: TTreeNode); overload;
|
|
procedure TreeMenuItem(marca: Boolean);
|
|
procedure Atualiza(Selec: Boolean);
|
|
procedure TreeActionItem(marca: Boolean);
|
|
procedure UnCheckChild(node: TTreeNode);
|
|
procedure TreeControlItem(marca: Boolean);
|
|
procedure CarregaTreeviews;
|
|
public
|
|
FTempIdUser: Integer;
|
|
FUserControl: TUserControl;
|
|
DSPermiss: TDataset;
|
|
DSPermissEX: TDataset;
|
|
DSPerfil: TDataset;
|
|
DSPerfilEX: TDataset;
|
|
end;
|
|
|
|
var
|
|
UserPermis: TUserPermis;
|
|
|
|
implementation
|
|
|
|
uses
|
|
ActnList,
|
|
Messages,
|
|
SysUtils,
|
|
Windows;
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TUserPermis.BtGravaClick(Sender: TObject);
|
|
var
|
|
Contador: Integer;
|
|
begin
|
|
with TUserControl(Owner).TableRights do
|
|
begin
|
|
TUserControl(Owner).DataConnector.UCExecSQL('Delete from ' + TableName + ' Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(TUserControl(owner).ApplicationID));
|
|
TUserControl(Owner).DataConnector.UCExecSQL('Delete from ' + TableName + 'EX Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(TUserControl(owner).ApplicationID));
|
|
end;
|
|
|
|
for Contador := 0 to TreeMenu.Items.Count - 1 do
|
|
if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado = 1 then
|
|
TUserControl(Owner).AddRight(FTempIdUser, PTreeMenu(TreeMenu.Items[Contador].Data).MenuName);
|
|
|
|
for Contador := 0 to TreeAction.Items.Count - 1 do
|
|
if PTreeAction(TreeAction.Items[Contador].Data).Selecionado = 1 then
|
|
TUserControl(Owner).AddRight(FTempIdUser, PTreeAction(TreeAction.Items[Contador].Data).MenuName);
|
|
|
|
//Extra Rights
|
|
for Contador := 0 to Pred(TreeControls.Items.Count) do
|
|
if PTreeControl(TreeControls.Items[Contador].Data).Selecionado = 1 then
|
|
TUserControl(Owner).AddRightEX(FTempIdUser, TUserControl(Owner).ApplicationID, PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName);
|
|
|
|
Close;
|
|
end;
|
|
|
|
procedure TUserPermis.TrataItem(IT: TMenuItem; node: TTreeNode);
|
|
var
|
|
contador: Integer;
|
|
TempNode: TTreeNode;
|
|
begin
|
|
for contador := 0 to IT.Count - 1 do
|
|
if IT.Items[Contador].Caption <> '-' then
|
|
if IT.Items[Contador].Count > 0 then
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := IT.Items[Contador].Name;
|
|
TempNode := TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
TrataItem(IT.Items[Contador], TempNode);
|
|
end
|
|
else
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := IT.Items[Contador].Name;
|
|
TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
end;
|
|
end;
|
|
|
|
{$IFDEF UCACTMANAGER}
|
|
procedure TUserPermis.TrataItem(IT: TActionClientItem; node: TTreeNode);
|
|
var
|
|
contador: Integer;
|
|
TempNode: TTreeNode;
|
|
begin
|
|
for contador := 0 to IT.Items.Count - 1 do
|
|
if IT.Items[Contador].Caption <> '-' then
|
|
if IT.Items[Contador].Items.Count > 0 then
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := #1 + 'G' + IT.Items[Contador].Caption;
|
|
TempNode := TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
TrataItem(IT.Items[Contador], TempNode);
|
|
end
|
|
else
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := IT.Items[Contador].Action.Name;
|
|
TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
end;
|
|
end;
|
|
|
|
{$ENDIF}
|
|
|
|
procedure TUserPermis.CarregaTreeviews;
|
|
var
|
|
Contador: Integer;
|
|
TempNode: TTreeNode;
|
|
Temp: String;
|
|
Temp2: String;
|
|
Desc: String;
|
|
begin
|
|
FChangingTree := False;
|
|
PC.ActivePage := PageMenu;
|
|
|
|
Self.FMenu := TUserControl(Owner).ControlRight.MainMenu;
|
|
Self.FActionMainMenuBar := TUserControl(Owner).ControlRight.ActionMainMenuBar;
|
|
if Assigned(TUserControl(Owner).ControlRight.ActionList) then
|
|
Self.FActions := TUserControl(Owner).ControlRight.ActionList
|
|
else
|
|
Self.FActions := TUserControl(Owner).ControlRight.ActionManager;
|
|
|
|
Self.FExtraRights := TUserControl(Owner).ExtraRights;
|
|
|
|
(*if (not Assigned(FMenu)) and (not Assigned(TUserControl(Owner).ControlRight.ActionList))
|
|
{$IFDEF UCACTMANAGER} and (not Assigned(TUserControl(Owner).ControlRight.ActionManager)) and
|
|
(not Assigned(TUserControl(Owner).ControlRight.ActionMainMenuBar))
|
|
{$ENDIF} then
|
|
begin
|
|
if (Assigned(FMenu))
|
|
{$IFDEF UCACTMANAGER} and (not Assigned(TUserControl(Owner).ControlRight.ActionMainMenuBar))
|
|
{$ENDIF} then*)
|
|
|
|
//TempNode := nil;
|
|
if Assigned(FMenu) then
|
|
begin
|
|
TreeMenu.Items.Clear;
|
|
for Contador := 0 to FMenu.Items.Count - 1 do
|
|
if FMenu.Items[Contador].Count > 0 then
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := FMenu.Items[Contador].Name;
|
|
TempNode := TreeMenu.Items.AddObject(nil, StringReplace(FMenu.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
TrataItem(FMenu.Items[Contador], TempNode);
|
|
end
|
|
else
|
|
if FMenu.Items[Contador].Caption <> '-' then
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := FMenu.Items[Contador].Name;
|
|
TreeMenu.Items.AddObject(nil, StringReplace(FMenu.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
end;
|
|
TreeMenu.FullExpand;
|
|
TreeMenu.Perform(WM_VSCROLL, SB_TOP, 0);
|
|
end;
|
|
|
|
{$IFDEF UCACTMANAGER}
|
|
//TempNode := nil;
|
|
if Assigned(FActionMainMenuBar) then
|
|
begin
|
|
TreeMenu.Items.Clear;
|
|
for Contador := 0 to FActionMainMenuBar.ActionClient.Items.Count - 1 do
|
|
begin
|
|
Temp := IntToStr(Contador);
|
|
if FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Items.Count > 0 then
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := #1 + 'G' + FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption;
|
|
TempNode := TreeMenu.Items.AddObject(nil, StringReplace(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
TrataItem(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)], TempNode);
|
|
end
|
|
else
|
|
begin
|
|
New(FTempMPointer);
|
|
SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
|
|
FTempMPointer.Selecionado := 0;
|
|
FTempMPointer.MenuName := FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Action.Name;
|
|
TreeMenu.Items.AddObject(nil, StringReplace(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Action.Name, '&', '', [rfReplaceAll]), FTempMPointer);
|
|
end;
|
|
TreeMenu.FullExpand;
|
|
TreeMenu.Perform(WM_VSCROLL, SB_TOP, 0);
|
|
end;
|
|
end;
|
|
{$ENDIF}
|
|
|
|
(*if (Assigned(TUserControl(Owner).ControlRight.ActionList))
|
|
{$IFDEF UCACTMANAGER} or (Assigned(TUserControl(Owner).ControlRight.ActionManager))
|
|
{$ENDIF} then*)
|
|
|
|
TempNode := nil;
|
|
if Assigned(FActions) then
|
|
begin
|
|
TreeAction.Items.Clear;
|
|
if Assigned(FTempLista) then
|
|
FreeAndNil(FTempLista);
|
|
FTempLista := TStringList.Create;
|
|
for Contador := 0 to TActionList(FActions).ActionCount - 1 do
|
|
FTempLista.Append(TActionList(FActions).Actions[contador].Category + #1 + TActionList(FActions).Actions[contador].Name + #2 + TAction(TActionList(FActions).Actions[contador]).Caption);
|
|
FTempLista.Sort;
|
|
Temp := #1;
|
|
for Contador := 0 to FTempLista.Count - 1 do
|
|
begin
|
|
if Temp <> Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1) then
|
|
begin
|
|
New(FTempAPointer);
|
|
SetLength(FListaAction, Length(FListaAction) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaAction[High(FListaAction)] := FTempAPointer; //Adicionado por Luiz 18/01/06
|
|
FTempAPointer.Grupo := True;
|
|
FTempAPointer.Selecionado := 0;
|
|
FTempAPointer.MenuName := 'Grupo';
|
|
TempNode := TreeAction.Items.AddObject(nil, StringReplace(Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1), '&', '', [rfReplaceAll]), FTempAPointer);
|
|
TempNode.ImageIndex := 2;
|
|
TempNode.SelectedIndex := 2;
|
|
Temp := Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1);
|
|
end;
|
|
Temp2 := FTempLista[Contador];
|
|
Delete(Temp2, 1, pos(#1, Temp2));
|
|
New(FTempAPointer);
|
|
SetLength(FListaAction, Length(FListaAction) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaAction[High(FListaAction)] := FTempAPointer; //Adicionado por Luiz 18/01/06
|
|
FTempAPointer.Grupo := False;
|
|
FTempAPointer.Selecionado := 0;
|
|
FTempAPointer.MenuName := Copy(Temp2, 1, Pos(#2, Temp2) - 1);
|
|
Delete(Temp2, 1, pos(#2, Temp2));
|
|
TreeAction.Items.AddChildObject(TempNode, StringReplace(Temp2, '&', '', [rfReplaceAll]), FTempAPointer);
|
|
end;
|
|
TreeAction.FullExpand;
|
|
TreeAction.Perform(WM_VSCROLL, SB_TOP, 0);
|
|
end;
|
|
|
|
//ExtraRights
|
|
TempNode := nil;
|
|
if Self.FExtraRights.Count > 0 then
|
|
begin
|
|
TreeControls.Items.Clear;
|
|
if Assigned(FTempLista) then
|
|
FreeAndNil(FTempLista);
|
|
FTempLista := TStringList.Create;
|
|
for Contador := 0 to Pred(FExtraRights.Count) do
|
|
FTempLista.Append(FExtraRights[Contador].GroupName + #1 + FExtraRights[Contador].Caption + #2 + FExtraRights[Contador].FormName + #3 + FExtraRights[Contador].CompName);
|
|
FTempLista.Sort;
|
|
Temp := #1;
|
|
for Contador := 0 to Pred(FTempLista.Count) do
|
|
begin
|
|
if Temp <> Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1) then
|
|
begin
|
|
New(FTempCPointer);
|
|
SetLength(FListaControl, Length(FListaControl) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaControl[High(FListaControl)] := FTempCPointer; //Adicionado por Luiz 18/01/06
|
|
FTempCPointer.Grupo := True;
|
|
FTempCPointer.Selecionado := 0;
|
|
FTempCPointer.FormName := 'Grupo';
|
|
FTempCPointer.CompName := 'Grupo';
|
|
TempNode := TreeControls.Items.AddObject(nil, Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1), FTempCPointer);
|
|
TempNode.ImageIndex := 2;
|
|
TempNode.SelectedIndex := 2;
|
|
Temp := Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1);
|
|
end;
|
|
Temp2 := FTempLista[Contador];
|
|
Delete(Temp2, 1, pos(#1, Temp2));
|
|
New(FTempCPointer);
|
|
SetLength(FListaControl, Length(FListaControl) + 1); //Adicionado por Luiz 18/01/06
|
|
FListaControl[High(FListaControl)] := FTempCPointer; //Adicionado por Luiz 18/01/06
|
|
FTempCPointer.Grupo := False;
|
|
FTempCPointer.Selecionado := 0;
|
|
Desc := Copy(Temp2, 1, Pos(#2, Temp2) - 1); // descricao do objeto
|
|
Delete(Temp2, 1, pos(#2, Temp2));
|
|
|
|
FTempCPointer.FormName := Copy(Temp2, 1, Pos(#3, Temp2) - 1);
|
|
Delete(Temp2, 1, pos(#3, Temp2));
|
|
FTempCPointer.CompName := Temp2;
|
|
TreeControls.Items.AddChildObject(TempNode, Desc, FTempCPointer);
|
|
FTempCPointer := nil;
|
|
end;
|
|
TreeControls.FullExpand;
|
|
TreeControls.Perform(WM_VSCROLL, SB_TOP, 0);
|
|
end;
|
|
|
|
PageMenu.TabVisible := Assigned(FMenu);
|
|
|
|
PageAction.TabVisible := Assigned(FActions);
|
|
|
|
PageControls.TabVisible := (Assigned(FExtraRights) and (FExtraRights.Count > 0));
|
|
end;
|
|
|
|
procedure TUserPermis.UnCheckChild(node: TTreeNode);
|
|
var
|
|
child: TTreeNode;
|
|
begin
|
|
PTreemenu(node.Data).Selecionado := 0;
|
|
node.ImageIndex := 0;
|
|
node.SelectedIndex := 0;
|
|
child := node.GetFirstChild;
|
|
repeat
|
|
if child.HasChildren then
|
|
UnCheckChild(child)
|
|
else
|
|
begin
|
|
PTreemenu(child.Data).Selecionado := 0;
|
|
child.ImageIndex := 0;
|
|
child.SelectedIndex := 0;
|
|
end;
|
|
child := node.GetNextChild(child);
|
|
until child = nil;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeMenuItem(Marca: Boolean);
|
|
var
|
|
AbsIdx: Integer;
|
|
begin
|
|
if Marca then
|
|
if PTreemenu(TreeMenu.Selected.Data).Selecionado < 2 then
|
|
begin
|
|
if PTreemenu(TreeMenu.Selected.Data).Selecionado = 0 then //marcar
|
|
begin
|
|
AbsIdx := TreeMenu.Selected.AbsoluteIndex;
|
|
while AbsIdx > -1 do
|
|
begin
|
|
PTreemenu(TreeMenu.Items.Item[AbsIdx].Data).Selecionado := 1;
|
|
TreeMenu.Items.Item[AbsIdx].ImageIndex := 1;
|
|
TreeMenu.Items.Item[AbsIdx].SelectedIndex := 1;
|
|
if TreeMenu.Items.Item[AbsIdx].Parent <> nil then
|
|
begin
|
|
AbsIdx := TreeMenu.Items.Item[AbsIdx].Parent.AbsoluteIndex;
|
|
if PTreemenu(TreeMenu.Items.Item[AbsIdx].Data).Selecionado = 2 then
|
|
AbsIdx := -1;
|
|
end
|
|
else
|
|
AbsIdx := -1;
|
|
end;
|
|
end
|
|
else
|
|
if TreeMenu.Selected.HasChildren then
|
|
UnCheckChild(TreeMenu.Selected)
|
|
else
|
|
begin
|
|
PTreemenu(TreeMenu.Selected.Data).Selecionado := 0;
|
|
TreeMenu.Selected.ImageIndex := 0;
|
|
TreeMenu.Selected.SelectedIndex := 0;
|
|
end; //desmarcar
|
|
TreeMenu.Repaint;
|
|
end;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeActionItem(marca: Boolean);
|
|
begin
|
|
if not Assigned(FActions) then
|
|
Exit;
|
|
if PTreeAction(TreeAction.Selected.Data).Grupo then
|
|
Exit;
|
|
if Marca then
|
|
begin
|
|
if PTreeAction(TreeAction.Selected.Data).Selecionado < 2 then
|
|
if PTreeAction(TreeAction.Selected.Data).Selecionado = 0 then
|
|
PTreeAction(TreeAction.Selected.Data).Selecionado := 1
|
|
else
|
|
PTreeAction(TreeAction.Selected.Data).Selecionado := 0;
|
|
TreeAction.Selected.ImageIndex := PTreeAction(TreeAction.Selected.Data).Selecionado;
|
|
TreeAction.Selected.SelectedIndex := PTreeAction(TreeAction.Selected.Data).Selecionado;
|
|
end;
|
|
TreeAction.Repaint;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeControlItem(marca: Boolean);
|
|
begin
|
|
if PTreeControl(TreeControls.Selected.Data).Grupo then
|
|
Exit;
|
|
if Marca then
|
|
begin
|
|
if PTreeControl(TreeControls.Selected.Data).Selecionado < 2 then
|
|
if PTreeControl(TreeControls.Selected.Data).Selecionado = 0 then
|
|
PTreeControl(TreeControls.Selected.Data).Selecionado := 1
|
|
else
|
|
PTreeControl(TreeControls.Selected.Data).Selecionado := 0;
|
|
TreeControls.Selected.ImageIndex := PTreeControl(TreeControls.Selected.Data).Selecionado;
|
|
TreeControls.Selected.SelectedIndex := PTreeAction(TreeControls.Selected.Data).Selecionado;
|
|
end;
|
|
TreeControls.Repaint;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeMenuClick(Sender: TObject);
|
|
begin
|
|
if not FChangingTree then
|
|
TreeMenuItem(True);
|
|
end;
|
|
|
|
procedure TUserPermis.BtCancelClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TUserPermis.BtLiberaClick(Sender: TObject);
|
|
begin
|
|
Atualiza(True);
|
|
end;
|
|
|
|
procedure TUserPermis.Atualiza(Selec: Boolean);
|
|
var
|
|
Contador: Integer;
|
|
Temp: Integer;
|
|
begin
|
|
if Selec then
|
|
Temp := 1
|
|
else
|
|
Temp := 0;
|
|
|
|
if PC.ActivePage = PageMenu then
|
|
begin
|
|
for Contador := 0 to TreeMenu.Items.Count - 1 do
|
|
if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado < 2 then
|
|
begin
|
|
PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Temp;
|
|
TreeMenu.Items[Contador].ImageIndex := Temp;
|
|
TreeMenu.Items[Contador].SelectedIndex := Temp;
|
|
end;
|
|
TreeMenu.Repaint;
|
|
end
|
|
else
|
|
if PC.ActivePage = PageAction then
|
|
begin
|
|
for Contador := 0 to TreeAction.Items.Count - 1 do
|
|
if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then
|
|
if PTreeAction(TreeAction.Items[Contador].Data).Selecionado < 2 then
|
|
begin
|
|
PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Temp;
|
|
TreeAction.Items[Contador].ImageIndex := Temp;
|
|
TreeAction.Items[Contador].SelectedIndex := Temp;
|
|
end;
|
|
TreeAction.Repaint;
|
|
end
|
|
else
|
|
begin // tabContols
|
|
for Contador := 0 to TreeControls.Items.Count - 1 do
|
|
if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then
|
|
if PTreeControl(TreeControls.Items[Contador].Data).Selecionado < 2 then
|
|
begin
|
|
PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Temp;
|
|
TreeControls.Items[Contador].ImageIndex := Temp;
|
|
TreeControls.Items[Contador].SelectedIndex := Temp;
|
|
end;
|
|
TreeControls.Repaint;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TUserPermis.BtBloqueiaClick(Sender: TObject);
|
|
begin
|
|
Atualiza(False);
|
|
end;
|
|
|
|
procedure TUserPermis.FormShow(Sender: TObject);
|
|
var
|
|
Contador: Integer;
|
|
Selec: Integer;
|
|
begin
|
|
// Adcionado por Luiz
|
|
SetLength(FListaAction, 0);
|
|
SetLength(FListaMenu, 0);
|
|
SetLength(FListaControl, 0);
|
|
|
|
//carrega itens do menu, actions e controles
|
|
CarregaTreeviews;
|
|
|
|
// Exibe Permissoes do Usuario
|
|
for Contador := 0 to TreeAction.Items.Count - 1 do
|
|
begin
|
|
DSPermiss.First;
|
|
if DSPermiss.Locate('ObjName', PTreeAction(TreeAction.Items[Contador].Data).MenuName, []) then
|
|
Selec := 1
|
|
else
|
|
Selec := 0;
|
|
|
|
PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Selec;
|
|
if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then
|
|
begin
|
|
TreeAction.Items[Contador].ImageIndex := Selec;
|
|
TreeAction.Items[Contador].SelectedIndex := Selec;
|
|
end;
|
|
end;
|
|
|
|
for Contador := 0 to TreeMenu.Items.Count - 1 do
|
|
begin
|
|
DSPermiss.First;
|
|
if DSPermiss.Locate('ObjName', PTreeMenu(TreeMenu.Items[Contador].Data).MenuName, []) then
|
|
Selec := 1
|
|
else
|
|
Selec := 0;
|
|
|
|
PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Selec;
|
|
TreeMenu.Items[Contador].ImageIndex := Selec;
|
|
TreeMenu.Items[Contador].SelectedIndex := Selec;
|
|
end;
|
|
|
|
//Extra Rights
|
|
for Contador := 0 to Pred(TreeControls.Items.Count) do
|
|
begin
|
|
DSPermissEX.First;
|
|
if DSPermissEX.Locate('FormName;ObjName', VarArrayOf([PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName]), []) then
|
|
Selec := 1
|
|
else
|
|
Selec := 0;
|
|
|
|
PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Selec;
|
|
if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then
|
|
begin
|
|
TreeControls.Items[Contador].ImageIndex := Selec;
|
|
TreeControls.Items[Contador].SelectedIndex := Selec;
|
|
end;
|
|
end;
|
|
|
|
// Exibe Permissoes do Perfil
|
|
if DSPerfil.Active then
|
|
begin
|
|
for Contador := 0 to TreeAction.Items.Count - 1 do
|
|
begin
|
|
DSPerfil.First;
|
|
if DSPerfil.Locate('ObjName', PTreeAction(TreeAction.Items[Contador].Data).MenuName, []) then
|
|
begin
|
|
Selec := 2;
|
|
PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Selec;
|
|
if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then
|
|
begin
|
|
TreeAction.Items[Contador].ImageIndex := Selec;
|
|
TreeAction.Items[Contador].SelectedIndex := Selec;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
for Contador := 0 to TreeMenu.Items.Count - 1 do
|
|
begin
|
|
DSPerfil.First;
|
|
if DSPerfil.Locate('ObjName', PTreeMenu(TreeMenu.Items[Contador].Data).MenuName, []) then
|
|
begin
|
|
Selec := 2;
|
|
PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Selec;
|
|
TreeMenu.Items[Contador].ImageIndex := Selec;
|
|
TreeMenu.Items[Contador].SelectedIndex := Selec;
|
|
end;
|
|
end;
|
|
|
|
//Extra Rights
|
|
for Contador := 0 to Pred(TreeControls.Items.Count) do
|
|
begin
|
|
DSPerfilEX.First;
|
|
if DSPerfilEX.Locate('FormName;ObjName', VarArrayOf([PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName]), []) then
|
|
begin
|
|
Selec := 2;
|
|
PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Selec;
|
|
if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then
|
|
begin
|
|
TreeControls.Items[Contador].ImageIndex := Selec;
|
|
TreeControls.Items[Contador].SelectedIndex := Selec;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
TreeAction.Repaint;
|
|
TreeMenu.Repaint;
|
|
FChangingTree := False;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeActionClick(Sender: TObject);
|
|
begin
|
|
if not FChangingTree then
|
|
TreeActionItem(True);
|
|
end;
|
|
|
|
procedure TUserPermis.TreeControlsClick(Sender: TObject);
|
|
begin
|
|
if not FChangingTree then
|
|
TreeControlItem(True);
|
|
end;
|
|
|
|
procedure TUserPermis.TreeMenuCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean);
|
|
begin
|
|
if (Self.Showing) and (TTreeView(Sender).Focused) then
|
|
FChangingTree := True;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeMenuKeyPress(Sender: TObject; var Key: char);
|
|
begin
|
|
if Key = ' ' then
|
|
begin
|
|
TTreeView(Sender).OnClick(Sender);
|
|
Key := #0;
|
|
end;
|
|
end;
|
|
|
|
procedure TUserPermis.TreeMenuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
FChangingTree := False;
|
|
end;
|
|
|
|
procedure TUserPermis.FormDestroy(Sender: TObject);
|
|
var
|
|
Contador: Integer;
|
|
begin
|
|
// Adicionado por Luiz 18/01/06
|
|
if Assigned(DSPermiss) then
|
|
FreeAndNil(DSPermiss);
|
|
|
|
if Assigned(DSPermissEX) then
|
|
FreeAndNil(DSPermissEX);
|
|
|
|
if Assigned(DSPerfil) then
|
|
FreeAndNil(DSPerfil);
|
|
|
|
if Assigned(DSPerfilEX) then
|
|
FreeAndNil(DSPerfilEX);
|
|
|
|
if Assigned(FTempLista) then
|
|
FreeAndNil(FTempLista);
|
|
|
|
for Contador := 0 to High(FListaMenu) do
|
|
Dispose(FListaMenu[Contador]);
|
|
|
|
for Contador := 0 to High(FListaAction) do
|
|
Dispose(FListaAction[Contador]);
|
|
|
|
for Contador := 0 to High(FListaControl) do
|
|
Dispose(FListaControl[Contador]);
|
|
end;
|
|
|
|
end.
|
|
|