mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-28 10:02:14 +00:00
FIX: Issue [0000715] Language change does not update toolbar buttons text.
Now Hint for Command menu items is not saved to xml file if it is the same as default text for the action. Then on loading the toolbar the hint is set based on current language.
This commit is contained in:
parent
6d5035bb79
commit
7e69ed448b
4 changed files with 95 additions and 34 deletions
|
|
@ -93,6 +93,10 @@ type
|
|||
strict private
|
||||
FID: String; // Unique identificator of the button
|
||||
function GetID: String;
|
||||
strict protected
|
||||
procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); virtual;
|
||||
procedure SaveIcon(Config: TXmlConfig; Node: TXmlNode); virtual;
|
||||
procedure SaveText(Config: TXmlConfig; Node: TXmlNode); virtual;
|
||||
public
|
||||
Icon: String;
|
||||
Text: String;
|
||||
|
|
@ -495,11 +499,26 @@ end;
|
|||
procedure TKASNormalItem.SaveContents(Config: TXmlConfig; Node: TXmlNode);
|
||||
begin
|
||||
Config.AddValue(Node, 'ID', ID);
|
||||
Config.AddValueDef(Node, 'Text', Text, '');
|
||||
Config.AddValueDef(Node, 'Icon', Icon, '');
|
||||
SaveText(Config, Node);
|
||||
SaveIcon(Config, Node);
|
||||
SaveHint(Config, Node);
|
||||
end;
|
||||
|
||||
procedure TKASNormalItem.SaveHint(Config: TXmlConfig; Node: TXmlNode);
|
||||
begin
|
||||
Config.AddValueDef(Node, 'Hint', Hint, '');
|
||||
end;
|
||||
|
||||
procedure TKASNormalItem.SaveIcon(Config: TXmlConfig; Node: TXmlNode);
|
||||
begin
|
||||
Config.AddValueDef(Node, 'Icon', Icon, '');
|
||||
end;
|
||||
|
||||
procedure TKASNormalItem.SaveText(Config: TXmlConfig; Node: TXmlNode);
|
||||
begin
|
||||
Config.AddValueDef(Node, 'Text', Text, '');
|
||||
end;
|
||||
|
||||
{ TKASToolBarItems }
|
||||
|
||||
constructor TKASToolBarItems.Create;
|
||||
|
|
|
|||
|
|
@ -547,7 +547,6 @@ type
|
|||
procedure AddVirtualDriveButton(dskPanel: TKASToolBar);
|
||||
procedure AddSpecialButtons(dskPanel: TKASToolBar);
|
||||
procedure HideToTray;
|
||||
procedure LoadMainToolbar;
|
||||
procedure RestoreFromTray;
|
||||
procedure ShowTrayIcon(bShow: Boolean);
|
||||
procedure HideTrayIconDelayed(Data: PtrInt);
|
||||
|
|
@ -648,6 +647,7 @@ type
|
|||
procedure LoadTabsCommandLine(Params: TCommandLineParams);
|
||||
procedure LoadWindowState;
|
||||
procedure SaveWindowState;
|
||||
procedure LoadMainToolbar;
|
||||
procedure SaveMainToolBar;
|
||||
function IsCommandLineVisible: Boolean;
|
||||
procedure ShowDrivesList(APanel: TFilePanelSelect);
|
||||
|
|
@ -986,7 +986,7 @@ begin
|
|||
begin
|
||||
if mbFileExists(BarFileName) then
|
||||
begin
|
||||
ToolBarLoader := TKASToolBarIniLoader.Create;
|
||||
ToolBarLoader := TKASToolBarIniLoader.Create(Commands.Commands);
|
||||
try
|
||||
ToolBarLoader.Load(BarFileName, MainToolBar, nil, @ConvertIniToolbarItem);
|
||||
SaveMainToolBar;
|
||||
|
|
@ -1698,24 +1698,6 @@ begin
|
|||
SetPanelDrive(fpLeft, DriveItem.Drive, True);
|
||||
end;
|
||||
|
||||
procedure TfrmMain.LoadMainToolbar;
|
||||
var
|
||||
ToolBarLoader: TKASToolBarExtendedLoader;
|
||||
ToolBarNode: TXmlNode;
|
||||
begin
|
||||
MainToolBar.BeginUpdate;
|
||||
ToolBarLoader := TKASToolBarExtendedLoader.Create;
|
||||
try
|
||||
MainToolBar.Clear;
|
||||
ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False);
|
||||
if Assigned(ToolBarNode) then
|
||||
MainToolBar.LoadConfiguration(gConfig, ToolBarNode, ToolBarLoader);
|
||||
finally
|
||||
ToolBarLoader.Free;
|
||||
MainToolBar.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.MainToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
|
||||
var
|
||||
aFile: TFile;
|
||||
|
|
@ -2311,10 +2293,10 @@ procedure TfrmMain.CreateDefaultToolbar;
|
|||
var
|
||||
CommandItem: TKASCommandItem;
|
||||
begin
|
||||
CommandItem := TKASCommandItem.Create;
|
||||
CommandItem := TKASCommandItem.Create(Commands.Commands);
|
||||
CommandItem.Icon := Icon;
|
||||
CommandItem.Command := Command;
|
||||
CommandItem.Hint := Commands.Commands.GetCommandCaption(Command, cctLong);
|
||||
// Leave CommandItem.Hint empty. It will be loaded at startup based on language.
|
||||
MainToolBar.AddButton(CommandItem);
|
||||
end;
|
||||
procedure AddSeparator;
|
||||
|
|
@ -4402,7 +4384,7 @@ begin
|
|||
begin
|
||||
Stream.Position := Length(DCToolItemClipboardHeader);
|
||||
Serializer := TKASToolBarSerializer.Create;
|
||||
Loader := TKASToolBarExtendedLoader.Create;
|
||||
Loader := TKASToolBarExtendedLoader.Create(Commands.Commands);
|
||||
try
|
||||
ToolItem := Serializer.Deserialize(Stream, Loader);
|
||||
MainToolBar.InsertButton(Button, ToolItem);
|
||||
|
|
@ -4700,6 +4682,24 @@ begin
|
|||
gConfig.SetValue(ANode, 'Splitter', FMainSplitterPos);
|
||||
end;
|
||||
|
||||
procedure TfrmMain.LoadMainToolbar;
|
||||
var
|
||||
ToolBarLoader: TKASToolBarExtendedLoader;
|
||||
ToolBarNode: TXmlNode;
|
||||
begin
|
||||
MainToolBar.BeginUpdate;
|
||||
ToolBarLoader := TKASToolBarExtendedLoader.Create(Commands.Commands);
|
||||
try
|
||||
MainToolBar.Clear;
|
||||
ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False);
|
||||
if Assigned(ToolBarNode) then
|
||||
MainToolBar.LoadConfiguration(gConfig, ToolBarNode, ToolBarLoader);
|
||||
finally
|
||||
ToolBarLoader.Free;
|
||||
MainToolBar.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.SaveMainToolBar;
|
||||
var
|
||||
ToolBarNode: TXmlNode;
|
||||
|
|
|
|||
|
|
@ -325,7 +325,7 @@ procedure TfrmOptionsToolbar.LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfi
|
|||
var
|
||||
ToolBarLoader: TKASToolBarExtendedLoader;
|
||||
begin
|
||||
ToolBarLoader := TKASToolBarExtendedLoader.Create;
|
||||
ToolBarLoader := TKASToolBarExtendedLoader.Create(FFormCommands);
|
||||
try
|
||||
if Assigned(RootNode) then
|
||||
ToolBar.LoadConfiguration(Config, RootNode, ToolBarLoader);
|
||||
|
|
@ -403,7 +403,7 @@ begin
|
|||
begin
|
||||
case rgToolItemType.ItemIndex of
|
||||
0: ToolItem := TKASSeparatorItem.Create;
|
||||
1: ToolItem := TKASCommandItem.Create;
|
||||
1: ToolItem := TKASCommandItem.Create(FFormCommands);
|
||||
2: ToolItem := TKASProgramItem.Create;
|
||||
3: ToolItem := TKASMenuItem.Create;
|
||||
end;
|
||||
|
|
@ -485,7 +485,7 @@ function TfrmOptionsToolbar.AddNewSubToolbar(ToolItem: TKASMenuItem): TKASToolBa
|
|||
begin
|
||||
Result := CreateToolbar(ToolItem.SubItems);
|
||||
if Result.ButtonCount = 0 then
|
||||
Result.AddButton(TKASCommandItem.Create);
|
||||
Result.AddButton(TKASCommandItem.Create(FFormCommands));
|
||||
end;
|
||||
|
||||
procedure TfrmOptionsToolbar.ApplyEditControls;
|
||||
|
|
@ -535,7 +535,7 @@ begin
|
|||
|
||||
if Assigned(ToolBar) then
|
||||
begin
|
||||
FCurrentButton := ToolBar.InsertButton(FCurrentButton, TKASCommandItem.Create);
|
||||
FCurrentButton := ToolBar.InsertButton(FCurrentButton, TKASCommandItem.Create(FFormCommands));
|
||||
PressButtonDown(FCurrentButton);
|
||||
end;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -28,14 +28,20 @@ interface
|
|||
|
||||
uses
|
||||
Classes, SysUtils, KASToolItems, KASToolBar, IniFiles, DCXmlConfig,
|
||||
uDrive, DCBasicTypes;
|
||||
uDrive, DCBasicTypes, uFormCommands;
|
||||
|
||||
type
|
||||
{ TKASCommandItem }
|
||||
|
||||
TKASCommandItem = class(TKASNormalItem)
|
||||
strict private
|
||||
FCommands: IFormCommands;
|
||||
strict protected
|
||||
procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); override;
|
||||
public
|
||||
Command: String;
|
||||
Params: TDynamicStringArray;
|
||||
constructor Create(AFormCommands: IFormCommands); reintroduce;
|
||||
procedure Assign(OtherItem: TKASToolItem); override;
|
||||
function Clone: TKASToolItem; override;
|
||||
function ConfigNodeName: String; override;
|
||||
|
|
@ -72,17 +78,23 @@ type
|
|||
{ TKASToolBarIniLoader }
|
||||
|
||||
TKASToolBarIniLoader = class
|
||||
private
|
||||
strict private
|
||||
FCommands: IFormCommands;
|
||||
FDepthLevel: Integer; // In case .bar files reference each other
|
||||
public
|
||||
constructor Create(AFormCommands: IFormCommands); reintroduce;
|
||||
procedure Load(IniFileName: String; ToolBar: TKASToolBar; ToolItemMenu: TKASMenuItem; OnLoadIniItem: TOnLoadIniItem);
|
||||
end;
|
||||
|
||||
{ TKASToolBarExtendedLoader }
|
||||
|
||||
TKASToolBarExtendedLoader = class(TKASToolBarLoader)
|
||||
strict private
|
||||
FCommands: IFormCommands;
|
||||
protected
|
||||
function CreateItem(Node: TXmlNode): TKASToolItem; override;
|
||||
public
|
||||
constructor Create(AFormCommands: IFormCommands); reintroduce;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
|
@ -137,7 +149,7 @@ end;
|
|||
|
||||
function TKASCommandItem.Clone: TKASToolItem;
|
||||
begin
|
||||
Result := TKASCommandItem.Create;
|
||||
Result := TKASCommandItem.Create(FCommands);
|
||||
Result.Assign(Self);
|
||||
end;
|
||||
|
||||
|
|
@ -146,6 +158,11 @@ begin
|
|||
Result := CommandItemConfigNode;
|
||||
end;
|
||||
|
||||
constructor TKASCommandItem.Create(AFormCommands: IFormCommands);
|
||||
begin
|
||||
FCommands := AFormCommands;
|
||||
end;
|
||||
|
||||
procedure TKASCommandItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader);
|
||||
begin
|
||||
inherited Load(Config, Node, Loader);
|
||||
|
|
@ -159,6 +176,11 @@ begin
|
|||
AddString(Params, Config.GetContent(Node));
|
||||
Node := Node.NextSibling;
|
||||
end;
|
||||
|
||||
if Hint = EmptyStr then
|
||||
begin
|
||||
Hint := FCommands.GetCommandCaption(Command, cctLong);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TKASCommandItem.SaveContents(Config: TXmlConfig; Node: TXmlNode);
|
||||
|
|
@ -171,6 +193,16 @@ begin
|
|||
Config.AddValueDef(Node, 'Param', AParam, '');
|
||||
end;
|
||||
|
||||
procedure TKASCommandItem.SaveHint(Config: TXmlConfig; Node: TXmlNode);
|
||||
begin
|
||||
if Hint <> FCommands.GetCommandCaption(Command, cctLong) then
|
||||
begin
|
||||
Config.AddValueDef(Node, 'Hint', Hint, '');
|
||||
end;
|
||||
// else don't save default text for the hint so that a different text
|
||||
// can be loaded if the language changes.
|
||||
end;
|
||||
|
||||
{ TKASProgramItem }
|
||||
|
||||
procedure TKASProgramItem.Assign(OtherItem: TKASToolItem);
|
||||
|
|
@ -224,13 +256,18 @@ end;
|
|||
|
||||
{ TKASToolBarExtendedLoader }
|
||||
|
||||
constructor TKASToolBarExtendedLoader.Create(AFormCommands: IFormCommands);
|
||||
begin
|
||||
FCommands := AFormCommands;
|
||||
end;
|
||||
|
||||
function TKASToolBarExtendedLoader.CreateItem(Node: TXmlNode): TKASToolItem;
|
||||
begin
|
||||
Result := inherited CreateItem(Node);
|
||||
if not Assigned(Result) then
|
||||
begin
|
||||
if Node.CompareName(CommandItemConfigNode) = 0 then
|
||||
Result := TKASCommandItem.Create
|
||||
Result := TKASCommandItem.Create(FCommands)
|
||||
else if Node.CompareName(ProgramItemConfigNode) = 0 then
|
||||
Result := TKASProgramItem.Create
|
||||
else if Node.CompareName(DriveItemConfigNode) = 0 then
|
||||
|
|
@ -240,6 +277,11 @@ end;
|
|||
|
||||
{ TKASToolBarIniLoader }
|
||||
|
||||
constructor TKASToolBarIniLoader.Create(AFormCommands: IFormCommands);
|
||||
begin
|
||||
FCommands := AFormCommands;
|
||||
end;
|
||||
|
||||
procedure TKASToolBarIniLoader.Load(IniFileName: String; ToolBar: TKASToolBar; ToolItemMenu: TKASMenuItem; OnLoadIniItem: TOnLoadIniItem);
|
||||
var
|
||||
BtnCount, I: Integer;
|
||||
|
|
@ -272,7 +314,7 @@ begin
|
|||
end
|
||||
else if (Length(Command) > 3) and (Copy(Command, 1, 3) = 'cm_') then
|
||||
begin
|
||||
CommandItem := TKASCommandItem.Create;
|
||||
CommandItem := TKASCommandItem.Create(FCommands);
|
||||
CommandItem.Command := Command;
|
||||
CommandItem.Hint := Menu;
|
||||
CommandItem.Icon := Button;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue