mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-14 05:41:16 +02:00
Jedi Code Format: Delete unused units.
git-svn-id: trunk@63873 -
This commit is contained in:
parent
18cf55d8a9
commit
4c7fde32e9
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -2279,8 +2279,6 @@ components/jcf2/Contributions/StyleEditor/JCFStyle.bdsproj svneol=native#text/pl
|
||||
components/jcf2/Contributions/StyleEditor/JCFStyle.cfg svneol=native#text/plain
|
||||
components/jcf2/Contributions/StyleEditor/JCFStyle.res -text
|
||||
components/jcf2/Contributions/StyleEditor/Readme.txt svneol=native#text/plain
|
||||
components/jcf2/IdePlugin/JcfIdeMain.pas svneol=native#text/pascal
|
||||
components/jcf2/IdePlugin/JcfIdeRegister.pas svneol=native#text/pascal
|
||||
components/jcf2/IdePlugin/lazarus/Makefile svneol=native#text/plain
|
||||
components/jcf2/IdePlugin/lazarus/Makefile.compiled svneol=native#text/plain
|
||||
components/jcf2/IdePlugin/lazarus/Makefile.fpc svneol=native#text/plain
|
||||
|
@ -1,382 +0,0 @@
|
||||
unit JcfIdeMain;
|
||||
|
||||
{ AFS 7 Jan 2K
|
||||
JEDI Code Format IDE plugin main class
|
||||
|
||||
global object that implements the callbacks from the menu items }
|
||||
|
||||
|
||||
{(*}
|
||||
(*------------------------------------------------------------------------------
|
||||
Delphi Code formatter source code
|
||||
|
||||
The Original Code is JcfIdeMain, released May 2003.
|
||||
The Initial Developer of the Original Code is Anthony Steele.
|
||||
Portions created by Anthony Steele are Copyright (C) 1999-2008 Anthony Steele.
|
||||
All Rights Reserved.
|
||||
Contributor(s): Anthony Steele.
|
||||
|
||||
The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
(the "License"). you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing rights and limitations
|
||||
under the License.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms of
|
||||
the GNU General Public License Version 2 or later (the "GPL")
|
||||
See http://www.gnu.org/licenses/gpl.html
|
||||
------------------------------------------------------------------------------*)
|
||||
{*)}
|
||||
|
||||
{$I JcfGlobal.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{ delphi }Windows, SysUtils, Classes,
|
||||
{ delphi design time }
|
||||
ToolsAPI,
|
||||
{ local}
|
||||
EditorConverter, FileConverter, ConvertTypes;
|
||||
|
||||
type
|
||||
TJcfIdeMain = class(TObject)
|
||||
private
|
||||
fcEditorConverter: TEditorConverter;
|
||||
fcFileConverter: TFileConverter;
|
||||
|
||||
procedure MakeEditorConverter;
|
||||
|
||||
procedure LogIDEMessage(const psFile, psMessage: string;
|
||||
const peMessageType: TStatusMessageType;
|
||||
const piY, piX: integer);
|
||||
procedure FormatFile(const psFileName: string);
|
||||
|
||||
procedure ClearToolMessages;
|
||||
procedure ConvertEditor(const pciEditor: IOTASourceEditor);
|
||||
|
||||
|
||||
protected
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
|
||||
procedure ShortcutKeyCallback(const Context: IOTAKeyContext;
|
||||
KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
|
||||
|
||||
procedure DoFormatCurrentIDEWindow(Sender: TObject);
|
||||
procedure DoFormatProject(Sender: TObject);
|
||||
procedure DoFormatOpen(Sender: TObject);
|
||||
procedure DoRegistrySettings(Sender: TObject);
|
||||
procedure DoFormatSettings(Sender: TObject);
|
||||
procedure DoAbout(Sender: TObject);
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
{ delphi }
|
||||
Menus, Dialogs, Controls,
|
||||
{ local }
|
||||
JcfStringUtils,
|
||||
fAllSettings, fAbout, JcfRegistrySettings, fRegistrySettings;
|
||||
|
||||
|
||||
function FileIsAllowedType(const psFileName: string): boolean;
|
||||
const
|
||||
ALLOWED_FILE_TYPES: array[1..3] of string = ('.pas', '.dpr', '.dpk');
|
||||
begin
|
||||
Result := StrIsOneOf(StrRight(psFileName, 4), ALLOWED_FILE_TYPES);
|
||||
end;
|
||||
|
||||
|
||||
{ the function GetCurrentProject is from Erik's OpenTools API FAQ and Resources
|
||||
http://www.gexperts.org/opentools/
|
||||
}
|
||||
// Modified from code posted by Ray Lischner (www.tempest-sw.com)
|
||||
function GetCurrentProject: IOTAProject;
|
||||
var
|
||||
Services: IOTAModuleServices;
|
||||
Module: IOTAModule;
|
||||
Project: IOTAProject;
|
||||
ProjectGroup: IOTAProjectGroup;
|
||||
MultipleProjects: boolean;
|
||||
I: integer;
|
||||
begin
|
||||
Result := nil;
|
||||
MultipleProjects := False;
|
||||
Services := BorlandIDEServices as IOTAModuleServices;
|
||||
for I := 0 to Services.ModuleCount - 1 do
|
||||
begin
|
||||
Module := Services.Modules[I];
|
||||
if Module.QueryInterface(IOTAProjectGroup, ProjectGroup) = S_OK then
|
||||
begin
|
||||
Result := ProjectGroup.ActiveProject;
|
||||
Exit;
|
||||
end
|
||||
else if Module.QueryInterface(IOTAProject, Project) = S_OK then
|
||||
begin
|
||||
if Result = nil then
|
||||
// Found the first project, so save it
|
||||
Result := Project
|
||||
else
|
||||
MultipleProjects := True;
|
||||
// It doesn't look good, but keep searching for a project group
|
||||
end;
|
||||
end;
|
||||
if MultipleProjects then
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
|
||||
constructor TJcfIdeMain.Create;
|
||||
begin
|
||||
inherited;
|
||||
{ both of these are created on demand }
|
||||
fcEditorConverter := nil;
|
||||
fcFileConverter := nil;
|
||||
end;
|
||||
|
||||
destructor TJcfIdeMain.Destroy;
|
||||
begin
|
||||
FreeAndNil(fcEditorConverter);
|
||||
FreeAndNil(fcFileConverter);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.DoFormatCurrentIDEWindow(Sender: TObject);
|
||||
var
|
||||
hRes: HResult;
|
||||
lciEditManager: IOTAEditorServices;
|
||||
lciEditor: IOTASourceEditor;
|
||||
begin
|
||||
// get the current editor window
|
||||
hRes := BorlandIDEServices.QueryInterface(IOTAEditorServices, lciEditManager);
|
||||
if hRes <> S_OK then
|
||||
exit;
|
||||
if lciEditManager = nil then
|
||||
exit;
|
||||
|
||||
lciEditor := lciEditManager.TopBuffer;
|
||||
if (lciEditor = nil) or (lciEditor.EditViewCount = 0) then
|
||||
begin
|
||||
LogIdeMessage('', 'No current window', mtInputError, -1, -1);
|
||||
exit;
|
||||
end;
|
||||
|
||||
ConvertEditor(lciEditor);
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.ConvertEditor(const pciEditor: IOTASourceEditor);
|
||||
begin
|
||||
MakeEditorConverter;
|
||||
|
||||
ClearToolMessages;
|
||||
fcEditorConverter.Clear;
|
||||
fcEditorConverter.BeforeConvert;
|
||||
fcEditorConverter.Convert(pciEditor);
|
||||
fcEditorConverter.AfterConvert;
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.DoFormatProject(Sender: TObject);
|
||||
var
|
||||
lciProject: IOTAProject;
|
||||
lciModule: IOTAModuleInfo;
|
||||
{$IFDEF VER170}
|
||||
lciAction: IOTAActionServices;
|
||||
{$ENDIF}
|
||||
liLoop: integer;
|
||||
lsMsg: string;
|
||||
begin
|
||||
{$IFDEF VER170}
|
||||
lciAction := BorlandIDEServices as IOTAActionServices;
|
||||
{$ENDIF}
|
||||
lciProject := GetCurrentProject;
|
||||
if lciProject = nil then
|
||||
exit;
|
||||
|
||||
lsMsg := 'JEDI Code Format of ' + lciProject.FileName + NativeLineBreak +
|
||||
'Are you sure that you want to format all ' + IntToStr(lciProject.GetModuleCount) +
|
||||
' files in the project.';
|
||||
|
||||
if MessageDlg(lsMsg, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
|
||||
exit;
|
||||
|
||||
ClearToolMessages;
|
||||
|
||||
{ loop through all modules in the project }
|
||||
for liLoop := 0 to lciProject.GetModuleCount - 1 do
|
||||
begin
|
||||
lciModule := lciProject.GetModule(liLoop);
|
||||
FormatFile(lciModule.FileName);
|
||||
{$IFDEF VER170}
|
||||
lciAction.ReloadFile(lciModule.FileName);
|
||||
{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.DoFormatOpen(Sender: TObject);
|
||||
var
|
||||
hRes: HResult;
|
||||
lciEditManager: IOTAEditorServices;
|
||||
lciIterateBuffers: IOTAEditBufferIterator;
|
||||
lciEditor: IOTASourceEditor;
|
||||
liLoop: integer;
|
||||
begin
|
||||
hRes := BorlandIDEServices.QueryInterface(IOTAEditorServices, lciEditManager);
|
||||
if hRes <> S_OK then
|
||||
exit;
|
||||
if lciEditManager = nil then
|
||||
exit;
|
||||
|
||||
MakeEditorConverter;
|
||||
|
||||
lciIterateBuffers := nil;
|
||||
lciEditManager.GetEditBufferIterator(lciIterateBuffers);
|
||||
if lciIterateBuffers = nil then
|
||||
exit;
|
||||
|
||||
ClearToolMessages;
|
||||
fcEditorConverter.BeforeConvert;
|
||||
|
||||
for liLoop := 0 to lciIterateBuffers.Count - 1 do
|
||||
begin
|
||||
lciEditor := lciIterateBuffers.EditBuffers[liLoop];
|
||||
|
||||
// check that it's open, and a .pas or .dpr
|
||||
if (lciEditor <> nil) and (lciEditor.EditViewCount > 0) and
|
||||
(FileIsAllowedType(lciEditor.FileName)) then
|
||||
begin
|
||||
fcEditorConverter.Convert(lciEditor);
|
||||
end;
|
||||
end;
|
||||
|
||||
fcEditorConverter.AfterConvert;
|
||||
end;
|
||||
|
||||
|
||||
procedure TJcfIdeMain.FormatFile(const psFileName: string);
|
||||
begin
|
||||
if not FileExists(psFileName) then
|
||||
exit;
|
||||
|
||||
// check that it's a .pas or .dpr
|
||||
if not FileIsAllowedType(psFileName) then
|
||||
exit;
|
||||
|
||||
if fcFileConverter = nil then
|
||||
begin
|
||||
fcFileConverter := TFileConverter.Create;
|
||||
fcFileConverter.OnStatusMessage := LogIDEMessage;
|
||||
end;
|
||||
|
||||
fcFileConverter.ProcessFile(psFileName);
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.DoFormatSettings(Sender: TObject);
|
||||
var
|
||||
lfAllSettings: TFormAllSettings;
|
||||
begin
|
||||
if not GetRegSettings.HasRead then
|
||||
GetRegSettings.ReadAll;
|
||||
|
||||
lfAllSettings := TFormAllSettings.Create(nil);
|
||||
try
|
||||
lfAllSettings.Execute;
|
||||
finally
|
||||
lfAllSettings.Release;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.DoAbout(Sender: TObject);
|
||||
var
|
||||
lcAbout: TfrmAboutBox;
|
||||
begin
|
||||
lcAbout := TfrmAboutBox.Create(nil);
|
||||
try
|
||||
lcAbout.ShowModal;
|
||||
finally
|
||||
lcAbout.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.DoRegistrySettings(Sender: TObject);
|
||||
var
|
||||
lcAbout: TfmRegistrySettings;
|
||||
begin
|
||||
if not GetRegSettings.HasRead then
|
||||
GetRegSettings.ReadAll;
|
||||
|
||||
lcAbout := TfmRegistrySettings.Create(nil);
|
||||
try
|
||||
lcAbout.Execute;
|
||||
finally
|
||||
lcAbout.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.ShortcutKeyCallback(const Context: IOTAKeyContext;
|
||||
KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
|
||||
var
|
||||
liShortcut: TShortCut;
|
||||
begin
|
||||
liShortcut := Shortcut(Ord('K'), [ssCtrl]);
|
||||
|
||||
if KeyCode = liShortcut then
|
||||
DoFormatCurrentIDEWindow(nil);
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.LogIDEMessage(const psFile, psMessage: string;
|
||||
const peMessageType: TStatusMessageType;
|
||||
const piY, piX: integer);
|
||||
var
|
||||
lciMessages: IOTAMessageServices40;
|
||||
hRes: HResult;
|
||||
begin
|
||||
{ no empty lines in this log }
|
||||
if psMessage = '' then
|
||||
exit;
|
||||
|
||||
hRes := BorlandIDEServices.QueryInterface(IOTAMessageServices40, lciMessages);
|
||||
if hRes <> S_OK then
|
||||
exit;
|
||||
if lciMessages = nil then
|
||||
exit;
|
||||
|
||||
if (piY >= 0) and (piX >= 0) then
|
||||
lciMessages.AddToolMessage(psFile, psMessage, 'JCF', piY, piX)
|
||||
else
|
||||
lciMessages.AddTitleMessage('JCF: ' + psFile + ' ' + psMessage);
|
||||
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.MakeEditorConverter;
|
||||
begin
|
||||
if fcEditorConverter = nil then
|
||||
begin
|
||||
fcEditorConverter := TEditorConverter.Create;
|
||||
fcEditorConverter.OnStatusMessage := LogIDEMessage;
|
||||
end;
|
||||
|
||||
Assert(fcEditorConverter <> nil);
|
||||
end;
|
||||
|
||||
procedure TJcfIdeMain.ClearToolMessages;
|
||||
var
|
||||
lciMessages: IOTAMessageServices40;
|
||||
hRes: HResult;
|
||||
begin
|
||||
hRes := BorlandIDEServices.QueryInterface(IOTAMessageServices40, lciMessages);
|
||||
if hRes <> S_OK then
|
||||
exit;
|
||||
if lciMessages = nil then
|
||||
exit;
|
||||
|
||||
lciMessages.ClearToolMessages;
|
||||
end;
|
||||
|
||||
end.
|
@ -1,332 +0,0 @@
|
||||
unit JcfIdeRegister;
|
||||
|
||||
{ AFS 7 Jan 2K
|
||||
JEDI Code Format IDE plugin registration }
|
||||
|
||||
{(*}
|
||||
(*------------------------------------------------------------------------------
|
||||
Delphi Code formatter source code
|
||||
|
||||
The Original Code is JcfIdeRegister, released May 2003.
|
||||
The Initial Developer of the Original Code is Anthony Steele.
|
||||
Portions created by Anthony Steele are Copyright (C) 1999-2000 Anthony Steele.
|
||||
All Rights Reserved.
|
||||
Contributor(s): Anthony Steele, Juergen Kehrel
|
||||
|
||||
The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||
(the "License"). you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing rights and limitations
|
||||
under the License.
|
||||
|
||||
Alternatively, the contents of this file may be used under the terms of
|
||||
the GNU General Public License Version 2 or later (the "GPL")
|
||||
See http://www.gnu.org/licenses/gpl.html
|
||||
------------------------------------------------------------------------------*)
|
||||
{*)}
|
||||
|
||||
{$I JcfGlobal.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{ delphi }
|
||||
Windows, SysUtils, Classes, ToolsAPI;
|
||||
|
||||
|
||||
procedure Register;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
{ delphi }
|
||||
Menus, ActnList,
|
||||
{ local }
|
||||
JcfIdeMain, Delay;
|
||||
|
||||
const
|
||||
NAME_MENU_TOOLS = 'ToolsMenu';
|
||||
FORMAT_MENU_NAME = 'JEDI Code &Format';
|
||||
FORMAT_CURRENT_NAME = '&Current Editor Window';
|
||||
FORMAT_PROJECT_NAME = '&All Files in Project';
|
||||
FORMAT_OPEN_NAME = 'All &Open Windows';
|
||||
FORMAT_REG_SETTINGS_MENU_NAME = '&Registry Settings';
|
||||
FORMAT_SETTINGS_MENU_NAME = '&Format Settings';
|
||||
FORMAT_ABOUT_MENU_NAME = '&About';
|
||||
|
||||
{ find the TMenuItem for the IDE main menu tools }
|
||||
function GetToolsMenu: TMenuItem;
|
||||
var
|
||||
hRes: HResult;
|
||||
lciMenuServices: INTAServices40;
|
||||
lcMainMenu: TMenu;
|
||||
lcTestMenu: TMenuItem;
|
||||
liLoop: integer;
|
||||
begin
|
||||
Result := nil;
|
||||
|
||||
{ get the menu services }
|
||||
hRes := BorlandIDEServices.QueryInterface(INTAServices40, lciMenuServices);
|
||||
if hRes <> S_OK then
|
||||
exit;
|
||||
if lciMenuServices = nil then
|
||||
exit;
|
||||
|
||||
{ get the main menu }
|
||||
lcMainMenu := lciMenuServices.MainMenu;
|
||||
|
||||
{ get the tools menu
|
||||
find it by looking for the control name
|
||||
since this stays the same even if the display text
|
||||
has been localised/translated }
|
||||
for liLoop := 0 to lcMainMenu.Items.Count - 1 do
|
||||
begin
|
||||
lcTestMenu := lcMainMenu.Items[liLoop];
|
||||
if CompareText(lcTestMenu.Name, NAME_MENU_TOOLS) = 0 then
|
||||
begin
|
||||
result := lcTestMenu;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ the object that does all the work
|
||||
- created the first time that a JCF menu item is selected }
|
||||
var
|
||||
lcJCFIDE: TJcfIdeMain;
|
||||
{ object to delay registration }
|
||||
lcDelayedRegister: TDelay;
|
||||
{ count the number of times that the plugin menus have been attempted }
|
||||
miMenuTries: integer = 0;
|
||||
|
||||
const
|
||||
MAX_TRIES = 100;
|
||||
|
||||
{ called from Finalization }
|
||||
procedure RemoveMenuItems;
|
||||
var
|
||||
fcMainMenu: TMenuItem;
|
||||
|
||||
procedure RemoveMenuItem(const psName: string);
|
||||
var
|
||||
lcItem: TMenuItem;
|
||||
begin
|
||||
Assert(psName <> '');
|
||||
Assert(fcMainMenu <> nil);
|
||||
|
||||
lcItem := fcMainMenu.Find(psName);
|
||||
if lcItem <> nil then
|
||||
fcMainMenu.Remove(lcItem);
|
||||
end;
|
||||
|
||||
var
|
||||
fcToolsMenu: TMenuItem;
|
||||
begin
|
||||
{ remove any existant menu items -
|
||||
this causes crashes of not done right }
|
||||
fcToolsMenu := GetToolsMenu;
|
||||
if fcToolsMenu = nil then
|
||||
exit;
|
||||
|
||||
fcMainMenu := fcToolsMenu.Find(FORMAT_MENU_NAME);
|
||||
|
||||
if fcMainMenu <> nil then
|
||||
begin
|
||||
RemoveMenuItem(FORMAT_CURRENT_NAME);
|
||||
RemoveMenuItem(FORMAT_PROJECT_NAME);
|
||||
RemoveMenuItem(FORMAT_OPEN_NAME);
|
||||
RemoveMenuItem(FORMAT_SETTINGS_MENU_NAME);
|
||||
|
||||
fcToolsMenu.Remove(fcMainMenu);
|
||||
end;
|
||||
|
||||
FreeAndNil(fcMainMenu);
|
||||
end;
|
||||
|
||||
function IDEActionList: TCustomActionList;
|
||||
var
|
||||
NTAServices: INTAServices;
|
||||
begin
|
||||
NTAServices := BorlandIDEServices as INTAServices;
|
||||
Result := NTAServices.ActionList;
|
||||
end;
|
||||
|
||||
procedure AddMenuItems(var pbDoAgain: boolean);
|
||||
var
|
||||
fcMainMenu: TMenuItem;
|
||||
|
||||
procedure AddMenuItem(const psName: string; const pcHandler: TNotifyEvent;
|
||||
const piShortCutKey: TShortCut = 0);
|
||||
var
|
||||
lcItem: TMenuItem;
|
||||
lcAction: TAction;
|
||||
begin
|
||||
Assert(psName <> '');
|
||||
// must have a callback unless it's a seperator line
|
||||
Assert(Assigned(pcHandler) or (psName = '-'));
|
||||
|
||||
lcItem := TMenuItem.Create(fcMainMenu);
|
||||
Assert(lcItem <> nil);
|
||||
|
||||
if psName = '-' then
|
||||
begin
|
||||
lcItem.Caption := psName;
|
||||
lcItem.OnClick := pcHandler;
|
||||
end
|
||||
else
|
||||
begin
|
||||
lcAction := TAction.Create(fcMainMenu);
|
||||
lcAction.Category := StripHotKey(FORMAT_MENU_NAME);
|
||||
lcAction.Name := 'jcf' + StringReplace(StripHotKey(psName), ' ', '', [rfReplaceAll]) + 'Action';
|
||||
lcAction.Caption := psName;
|
||||
lcAction.OnExecute := pcHandler;
|
||||
lcAction.ActionList := IDEactionList;
|
||||
if piShortCutKey <> 0 then
|
||||
lcAction.ShortCut := piShortCutKey;
|
||||
|
||||
lcItem.Action := lcAction;
|
||||
end;
|
||||
|
||||
Assert(fcMainMenu <> nil);
|
||||
fcMainMenu.Add(lcItem);
|
||||
end;
|
||||
|
||||
var
|
||||
fcToolsMenu: TMenuItem;
|
||||
liLoop: integer;
|
||||
begin
|
||||
{ give up after trying several times }
|
||||
if miMenuTries >= MAX_TRIES then
|
||||
exit;
|
||||
|
||||
Inc(miMenuTries);
|
||||
|
||||
{ this doesn't work during program startup?!? }
|
||||
fcToolsMenu := GetToolsMenu;
|
||||
if fcToolsMenu = nil then
|
||||
exit;
|
||||
|
||||
{ make these menu items in the Register proc, &
|
||||
free them in finalization }
|
||||
fcMainMenu := TMenuItem.Create(fcToolsMenu);
|
||||
fcMainMenu.Caption := FORMAT_MENU_NAME;
|
||||
|
||||
// find first separator jbk
|
||||
for liLoop := 0 to fcToolsMenu.Count - 1 do
|
||||
begin
|
||||
if fcToolsMenu.Items[liLoop].IsLine then
|
||||
begin
|
||||
fcToolsMenu.Insert(liLoop, fcMainMenu);
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
|
||||
// is it in there ?
|
||||
fcMainMenu := fcToolsMenu.Find(FORMAT_MENU_NAME);
|
||||
|
||||
if (fcMainMenu <> nil) then
|
||||
begin
|
||||
// it worked. Now add menu subitems
|
||||
|
||||
AddMenuItem(FORMAT_CURRENT_NAME, lcJCFIDE.DoFormatCurrentIDEWindow,
|
||||
ShortCut((Ord('F')), [ssCtrl, ssAlt]));
|
||||
|
||||
AddMenuItem(FORMAT_PROJECT_NAME, lcJCFIDE.DoFormatProject);
|
||||
AddMenuItem(FORMAT_OPEN_NAME, lcJCFIDE.DoFormatOpen);
|
||||
|
||||
AddMenuItem('-', nil);
|
||||
AddMenuItem(FORMAT_REG_SETTINGS_MENU_NAME, lcJCFIDE.DoRegistrySettings);
|
||||
AddMenuItem(FORMAT_SETTINGS_MENU_NAME, lcJCFIDE.DoFormatSettings);
|
||||
|
||||
AddMenuItem('-', nil);
|
||||
AddMenuItem(FORMAT_ABOUT_MENU_NAME, lcJCFIDE.DoAbout);
|
||||
|
||||
// debug ShowMessage('menu add succeeded on try #' + IntToStr(miTries));
|
||||
pbDoAgain := False;
|
||||
end
|
||||
else
|
||||
begin
|
||||
// do over, a bit later
|
||||
pbDoAgain := True;
|
||||
RemoveMenuItems;
|
||||
Sleep(0);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------
|
||||
keyboard binding
|
||||
ctrl-alt-f to format current unit
|
||||
|
||||
based on
|
||||
http://community.borland.com/article/0,1410,26389,00.html
|
||||
and http://www.gexperts.org/opentools/ }
|
||||
|
||||
type
|
||||
TJcfKeyBindings = class(TNotifierObject, IOTAKeyboardBinding)
|
||||
private
|
||||
procedure OnShortcut(const Context: IOTAKeyContext;
|
||||
KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
|
||||
|
||||
public
|
||||
{ IOTAKeyboardBinding methods }
|
||||
function GetBindingType: TBindingType;
|
||||
function GetDisplayName: string;
|
||||
function GetName: string;
|
||||
procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices);
|
||||
end;
|
||||
|
||||
function TJcfKeyBindings.GetBindingType: TBindingType;
|
||||
begin
|
||||
Result := btPartial;
|
||||
end;
|
||||
|
||||
function TJcfKeyBindings.GetDisplayName: string;
|
||||
begin
|
||||
Result := 'JCF';
|
||||
end;
|
||||
|
||||
function TJcfKeyBindings.GetName: string;
|
||||
begin
|
||||
Result := 'Jedi.CodeFormatter';
|
||||
end;
|
||||
|
||||
procedure TJcfKeyBindings.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
|
||||
var
|
||||
liShortcut: TShortcut;
|
||||
begin
|
||||
liShortcut := ShortCut((Ord('F')), [ssCtrl, ssAlt]);
|
||||
BindingServices.AddKeyBinding([liShortcut], OnShortcut, nil)
|
||||
end;
|
||||
|
||||
procedure TJcfKeyBindings.OnShortcut(const Context: IOTAKeyContext;
|
||||
KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
|
||||
begin
|
||||
lcJCFIDE.DoFormatCurrentIDEWindow(self);
|
||||
end;
|
||||
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
{ delayed reg. technique from sample code by Mike Remec
|
||||
http://www.miharemec.com/doc/ota-nmi.html }
|
||||
Assert(lcDelayedRegister <> nil);
|
||||
lcDelayedRegister.Proc := AddMenuItems;
|
||||
lcDelayedRegister.DoItSoon;
|
||||
|
||||
(BorlandIDEServices as IOTAKeyboardServices).AddKeyboardBinding(TJcfKeyBindings.Create);
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
lcJCFIDE := TJcfIdeMain.Create;
|
||||
lcDelayedRegister := TDelay.Create;
|
||||
|
||||
finalization
|
||||
FreeAndNil(lcDelayedRegister);
|
||||
|
||||
RemoveMenuItems;
|
||||
FreeAndNil(lcJCFIDE);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user