Browse Source

It is possible to copy information to the clipboard from the Properties dialog

Source commit: 81b58097069ee7f62cd1744b88c345c0aff29216
Martin Prikryl 4 years ago
parent
commit
2e12d755d7
3 changed files with 87 additions and 51 deletions
  1. 25 21
      source/forms/Properties.cpp
  2. 54 25
      source/forms/Properties.dfm
  3. 8 5
      source/forms/Properties.h

+ 25 - 21
source/forms/Properties.cpp

@@ -62,13 +62,19 @@ __fastcall TPropertiesDialog::TPropertiesDialog(TComponent* AOwner,
   FChecksumLoaded = false;
   FMultipleChecksum = false;
 
-  LocationLabel->Caption = Directory;
+  LocationLabel->Text = Directory;
 
   FGroupList = GroupList;
   FUserList = UserList;
   FChecksumAlgs = ChecksumAlgs;
 
   ReadOnlyControl(ChecksumEdit);
+  ReadOnlyControl(OwnerView);
+  ReadOnlyControl(GroupView);
+  ReadOnlyControl(FileLabel);
+  ReadOnlyControl(LocationLabel);
+  ReadOnlyControl(SizeLabel);
+  ReadOnlyControl(LinksToLabel);
   ChecksumUnknownLabel->Caption = LoadStr(PROPERTIES_CHECKSUM_UNKNOWN);
   LoadInfo();
 
@@ -165,16 +171,19 @@ UnicodeString __fastcall TPropertiesDialog::LoadRemoteToken(
 }
 //---------------------------------------------------------------------------
 void __fastcall TPropertiesDialog::LoadRemoteToken(
-  TComboBox * ComboBox, bool Valid, const TRemoteToken & Token)
+  TComboBox * ComboBox, TEdit * View, TLabel * Label, bool Valid, const TRemoteToken & Token, int Change)
 {
   if (Valid)
   {
-    ComboBox->Text = LoadRemoteToken(Token);
-  }
-  else
-  {
-    ComboBox->Text = L"";
+    UnicodeString Value = LoadRemoteToken(Token);
+    ComboBox->Text = Value;
+    View->Text = Value;
   }
+  bool AllowedChange = FLAGSET(FAllowedChanges, Change);
+  ComboBox->Visible = Valid && AllowedChange;
+  View->Visible = Valid && !AllowedChange;
+  Label->Visible = Valid;
+  Label->FocusControl = AllowedChange ? static_cast<TWinControl *>(ComboBox) : static_cast<TWinControl *>(View);
 }
 //---------------------------------------------------------------------------
 void __fastcall TPropertiesDialog::LoadRemoteTokens(TComboBox * ComboBox,
@@ -266,7 +275,7 @@ void __fastcall TPropertiesDialog::LoadInfo()
     LinksToLabel->Visible = File->IsSymLink;
     if (File->IsSymLink)
     {
-      LinksToLabel->Caption = File->LinkTo;
+      LinksToLabel->Text = File->LinkTo;
     }
 
     Caption = FMTLOAD(PROPERTIES_FILE_CAPTION, (File->FileName));
@@ -367,8 +376,8 @@ void __fastcall TPropertiesDialog::LoadStats(__int64 FilesSize,
     }
   }
 
-  SizeLabel->Caption = SizeStr;
-  FileLabel->Caption = FilesStr;
+  SizeLabel->Text = SizeStr;
+  FileLabel->Text = FilesStr;
 }
 //---------------------------------------------------------------------------
 void __fastcall TPropertiesDialog::SetFileProperties(const TRemoteProperties & value)
@@ -395,21 +404,16 @@ void __fastcall TPropertiesDialog::SetFileProperties(const TRemoteProperties & v
     RightsFrame->AddXToDirectories = false;
   }
 
-  bool HasGroup = value.Valid.Contains(vpGroup);
-  LoadRemoteToken(GroupComboBox, HasGroup, value.Group);
-  bool HasOwner = value.Valid.Contains(vpOwner);
-  LoadRemoteToken(OwnerComboBox, HasOwner, value.Owner);
+  // Not necesarily true, let's find the scenario when it is not and then decide how to render that (shift group up?)
+  DebugAssert(value.Valid.Contains(vpOwner) || !value.Valid.Contains(vpGroup));
+  LoadRemoteToken(GroupComboBox, GroupView, GroupLabel, value.Valid.Contains(vpGroup), value.Group, cpGroup);
+  LoadRemoteToken(OwnerComboBox, OwnerView, OwnerLabel, value.Valid.Contains(vpOwner), value.Owner, cpOwner);
 
-  bool HasGroupOrOwner = HasGroup || HasOwner;
+  bool HasGroupOrOwner = GroupLabel->Visible || OwnerLabel->Visible;
   bool HasAnything = HasGroupOrOwner || HasRights;
   // Not necesarily true, let's find the scenario when it is not and then decide how to render that (shift rights up?)
   DebugAssert(HasGroupOrOwner || !HasRights);
-  bool ShowGroupAndOwner = HasAnything;
-  OwnerComboBox->Visible = HasGroupOrOwner;
-  OwnerLabel->Visible = OwnerComboBox->Visible;
-  GroupComboBox->Visible = HasGroupOrOwner;
-  GroupLabel->Visible = GroupComboBox->Visible;
-  GroupOwnerRightsBevel->Visible = ShowGroupAndOwner;
+  GroupOwnerRightsBevel->Visible = HasAnything;
 
   RecursiveCheck2->Checked = value.Recursive;
   RecursiveCheck2->Visible = HasAnything && FAnyDirectories;

+ 54 - 25
source/forms/Properties.dfm

@@ -71,26 +71,29 @@ object PropertiesDialog: TPropertiesDialog
         Caption = 'Location:'
         ShowAccelChar = False
       end
-      object LocationLabel: TPathLabel
+      object LocationLabel: TEdit
         Left = 85
         Top = 58
-        Width = 243
-        Height = 13
-        UnixPath = True
-        IndentHorizontal = 0
-        IndentVertical = 0
-        Align = alNone
+        Width = 241
+        Height = 17
+        TabStop = False
         Anchors = [akLeft, akTop, akRight]
         AutoSize = False
+        BorderStyle = bsNone
+        TabOrder = 7
+        Text = 'LocationLabel'
       end
-      object FileLabel: TLabel
+      object FileLabel: TEdit
         Left = 85
         Top = 18
         Width = 241
-        Height = 13
+        Height = 17
+        TabStop = False
+        Anchors = [akLeft, akTop, akRight]
         AutoSize = False
-        Caption = 'FileLabel'
-        ShowAccelChar = False
+        BorderStyle = bsNone
+        TabOrder = 8
+        Text = 'FileLabel'
       end
       object Label2: TLabel
         Left = 8
@@ -100,15 +103,17 @@ object PropertiesDialog: TPropertiesDialog
         Caption = 'Size:'
         ShowAccelChar = False
       end
-      object SizeLabel: TLabel
+      object SizeLabel: TEdit
         Left = 85
         Top = 80
         Width = 160
-        Height = 13
+        Height = 17
+        TabStop = False
         Anchors = [akLeft, akTop, akRight]
         AutoSize = False
-        Caption = 'SizeLabel'
-        ShowAccelChar = False
+        BorderStyle = bsNone
+        TabOrder = 9
+        Text = 'SizeLabel'
       end
       object LinksToLabelLabel: TLabel
         Left = 8
@@ -118,17 +123,17 @@ object PropertiesDialog: TPropertiesDialog
         Caption = 'Links to:'
         ShowAccelChar = False
       end
-      object LinksToLabel: TPathLabel
+      object LinksToLabel: TEdit
         Left = 85
         Top = 102
-        Width = 240
-        Height = 13
-        UnixPath = True
-        IndentHorizontal = 0
-        IndentVertical = 0
-        Align = alNone
+        Width = 241
+        Height = 17
+        TabStop = False
         Anchors = [akLeft, akTop, akRight]
         AutoSize = False
+        BorderStyle = bsNone
+        TabOrder = 10
+        Text = 'LinksToLabel'
       end
       object Bevel2: TBevel
         Left = 8
@@ -185,12 +190,36 @@ object PropertiesDialog: TPropertiesDialog
         Anchors = [akLeft, akTop, akRight]
         Shape = bsTopLine
       end
+      object GroupView: TEdit
+        Left = 85
+        Top = 166
+        Width = 241
+        Height = 17
+        TabStop = False
+        Anchors = [akLeft, akTop, akRight]
+        BorderStyle = bsNone
+        MaxLength = 50
+        TabOrder = 4
+        Text = 'GroupView'
+      end
+      object OwnerView: TEdit
+        Left = 85
+        Top = 138
+        Width = 241
+        Height = 17
+        TabStop = False
+        Anchors = [akLeft, akTop, akRight]
+        BorderStyle = bsNone
+        MaxLength = 50
+        TabOrder = 2
+        Text = 'OwnerView'
+      end
       inline RightsFrame: TRightsFrame
         Left = 84
         Top = 200
         Width = 244
         Height = 109
-        TabOrder = 3
+        TabOrder = 5
       end
       object GroupComboBox: TComboBox
         Left = 85
@@ -199,7 +228,7 @@ object PropertiesDialog: TPropertiesDialog
         Height = 21
         DropDownCount = 16
         MaxLength = 50
-        TabOrder = 2
+        TabOrder = 3
         Text = 'GroupComboBox'
         OnChange = ControlChange
         OnExit = GroupComboBoxExit
@@ -223,7 +252,7 @@ object PropertiesDialog: TPropertiesDialog
         Height = 17
         Anchors = [akLeft, akTop, akRight]
         Caption = 'Set owner, group and permissions &recursively'
-        TabOrder = 4
+        TabOrder = 6
         OnClick = ControlChange
       end
       object CalculateSizeButton: TButton

+ 8 - 5
source/forms/Properties.h

@@ -26,13 +26,13 @@ __published:
   TPageControl *PageControl;
   TTabSheet *CommonSheet;
   TBevel *Bevel1;
-  TLabel *FileLabel;
+  TEdit *FileLabel;
   TLabel *Label1;
-  TPathLabel *LocationLabel;
+  TEdit *LocationLabel;
   TLabel *Label2;
-  TLabel *SizeLabel;
+  TEdit *SizeLabel;
   TLabel *LinksToLabelLabel;
-  TPathLabel *LinksToLabel;
+  TEdit *LinksToLabel;
   TBevel *Bevel2;
   TLabel *RightsLabel;
   TBevel *GroupOwnerRightsBevel;
@@ -56,6 +56,8 @@ __published:
   TPopupMenu *ListViewMenu;
   TMenuItem *Copy;
   TLabel *ChecksumUnknownLabel;
+  TEdit *OwnerView;
+  TEdit *GroupView;
   void __fastcall ControlChange(TObject *Sender);
   void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
   void __fastcall CalculateSizeButtonClick(TObject *Sender);
@@ -103,7 +105,8 @@ protected:
   void __fastcall LoadInfo();
   void __fastcall LoadRemoteTokens(TComboBox * ComboBox, const TRemoteTokenList * List);
   UnicodeString __fastcall LoadRemoteToken(const TRemoteToken & Token);
-  void __fastcall LoadRemoteToken(TComboBox * ComboBox, bool Valid, const TRemoteToken & Token);
+  void __fastcall LoadRemoteToken(
+    TComboBox * ComboBox, TEdit * View, TLabel * Label, bool Valid, const TRemoteToken & Token, int Change);
   TRemoteToken __fastcall StoreRemoteToken(const TRemoteToken & Orig,
     UnicodeString Text, int Message, const TRemoteTokenList * List);
   void __fastcall StoreRemoteToken(TComboBox * ComboBox,