| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "Rights.h"
- #include "NonVisual.h"
- #include <Common.h>
- #include <VCLCommon.h>
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma resource "*.dfm"
- //---------------------------------------------------------------------------
- __fastcall TRightsFrame::TRightsFrame(TComponent* Owner)
- : TFrame(Owner)
- {
- FOnChange = NULL;
- FAllowAddXToDirectories = true;
- }
- //---------------------------------------------------------------------------
- __fastcall TRightsFrame::~TRightsFrame()
- {
- if (NonVisualDataModule->RightsFrame == this)
- {
- NonVisualDataModule->RightsFrame = NULL;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::SetStates(TRightsFlag Flag, TRightState value)
- {
- assert(((value == rsNo) || (value == rsYes) || (value == rsUndef)));
- TCheckBox *CheckBox = Checks[(TRightsFlag)Flag];
- switch (value) {
- case rsNo: CheckBox->State = cbUnchecked; break;
- case rsYes: CheckBox->State = cbChecked; break;
- case rsUndef: CheckBox->State = cbGrayed; break;
- }
- }
- //---------------------------------------------------------------------------
- TRightState __fastcall TRightsFrame::GetStates(TRightsFlag Flag)
- {
- switch (Checks[(TRightsFlag)Flag]->State) {
- case cbUnchecked: return rsNo;
- case cbChecked: return rsYes;
- case cbGrayed:
- default: return rsUndef;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::SetRights(TRights value)
- {
- AllowUndef = true; // temporarily
- for (int Flag = 0; Flag < RightsFlagCount; Flag++)
- {
- States[(TRightsFlag)Flag] = value.RightUndef[(TRightsFlag)Flag];
- }
- AllowUndef = value.AllowUndef;
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- TRights __fastcall TRightsFrame::GetRights()
- {
- TRights Result;
- Result.AllowUndef = AllowUndef;
- for (int Flag = 0; Flag < RightsFlagCount; Flag++)
- {
- Result.RightUndef[(TRightsFlag)Flag] = States[(TRightsFlag)Flag];
- }
- return Result;
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::SetAllowUndef(bool value)
- {
- for (int Index = 0; Index < CheckCount; Index++)
- {
- Checks[(TRightsFlag)Index]->AllowGrayed = value;
- }
- }
- //---------------------------------------------------------------------------
- bool __fastcall TRightsFrame::GetAllowUndef()
- {
- bool Result = false, First = true;
- for (int Index = 0; Index < CheckCount; Index++)
- {
- TCheckBox *Check = Checks[(TRightsFlag)Index];
- if (First)
- {
- Result = Check->AllowGrayed;
- First = false;
- }
- else if (Result != Check->AllowGrayed)
- {
- assert(false);
- }
- }
- return Result;
- }
- //---------------------------------------------------------------------------
- TCheckBox * __fastcall TRightsFrame::GetChecks(TRightsFlag Flag)
- {
- assert((Flag >= 0) && (Flag < RightsFlagCount));
- for (int Index = 0; Index < ControlCount; Index++)
- {
- if (Controls[Index]->InheritsFrom(__classid(TCheckBox)) &&
- ((Controls[Index]->Tag - 1) == Flag))
- {
- return ((TCheckBox *)Controls[Index]);
- }
- }
- assert(false);
- return NULL;
- }
- //---------------------------------------------------------------------------
- int __fastcall TRightsFrame::GetCheckCount()
- {
- return RightsFlagCount;
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::SetAddXToDirectories(bool value)
- {
- DirectoriesXCheck->Checked = value;
- }
- //---------------------------------------------------------------------------
- bool __fastcall TRightsFrame::GetAddXToDirectories()
- {
- return DirectoriesXCheck->Checked;
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::ControlChange(TObject * /*Sender*/)
- {
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::UpdateControls()
- {
- TRights R = Rights;
- DirectoriesXCheck->Visible = AllowAddXToDirectories;
- EnableControl(DirectoriesXCheck,
- Enabled && !((R.NumberSet & raExecute) == raExecute));
-
- if (!OctalEdit->Focused())
- {
- OctalEdit->Text = R.IsUndef ? AnsiString() : R.Octal;
- OctalEdit->Modified = false;
- }
- DoChange();
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::FrameContextPopup(TObject * /*Sender*/,
- TPoint & /*MousePos*/, bool & /*Handled*/)
- {
- NonVisualDataModule->RightsFrame = this;
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::FrameEnter(TObject * /*Sender*/)
- {
- // allow keyboard shortcuts
- NonVisualDataModule->RightsFrame = this;
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::CycleRights(int Group)
- {
- TRightState State;
- bool Same = true;
- for (int Flag = 0; Flag < 3; Flag++)
- {
- TRightState CState = States[(TRightsFlag)(Flag + ((Group - 1) * 3))];
- if (Flag == 0) State = CState;
- else
- if (State != CState) Same = False;
- }
- if (!Same)
- {
- State = rsYes;
- }
- else
- {
- switch (State) {
- case rsYes: State = rsNo; break;
- case rsNo: if (AllowUndef) State = rsUndef; else State = rsYes; break;
- case rsUndef: State = rsYes; break;
- }
- }
- for (int Flag = 0; Flag < 3; Flag++)
- {
- States[(TRightsFlag)(Flag + ((Group - 1) * 3))] = State;
- }
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::RightsButtonsClick(TObject *Sender)
- {
- CycleRights(((TComponent*)Sender)->Tag);
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::SetAllowAddXToDirectories(bool value)
- {
- if (FAllowAddXToDirectories != value)
- {
- FAllowAddXToDirectories = value;
- UpdateControls();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::DoChange()
- {
- if (FOnChange)
- {
- FOnChange(this);
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::SetEnabled(bool Value)
- {
- TFrame::SetEnabled(Value);
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::UpdateByOctal()
- {
- if (!OctalEdit->Text.IsEmpty())
- {
- TRights R = Rights;
- R.Octal = OctalEdit->Text;
- Rights = R;
- }
- UpdateControls();
- OctalEdit->Modified = false;
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::OctalEditExit(TObject * /*Sender*/)
- {
- if (OctalEdit->Modified)
- {
- try
- {
- UpdateByOctal();
- }
- catch(...)
- {
- OctalEdit->SelectAll();
- OctalEdit->SetFocus();
- throw;
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TRightsFrame::OctalEditChange(TObject * /*Sender*/)
- {
- if (OctalEdit->Modified && OctalEdit->Text.Length() == 3)
- {
- try
- {
- UpdateByOctal();
- }
- catch(...)
- {
- OctalEdit->Modified = true;
- }
- }
- }
- //---------------------------------------------------------------------------
|