Skip to content

Commit 8d170fb

Browse files
author
César Cardoso
committed
feature/add-OpenInVsCode
1 parent 7a7d428 commit 8d170fb

8 files changed

Lines changed: 139 additions & 13 deletions

File tree

Package/C4DWizard.dpk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ contains
130130
C4D.Wizard.UsesOrganization.ListOfUses in '..\Src\UsesOrganization\C4D.Wizard.UsesOrganization.ListOfUses.pas',
131131
C4D.Wizard.FormatSource.View in '..\Src\FormatSource\C4D.Wizard.FormatSource.View.pas' {C4DWizardFormatSourceView},
132132
C4D.Wizard.Notes.View in '..\Src\Notes\C4D.Wizard.Notes.View.pas' {C4DWizardNotesView},
133-
C4D.Wizard.Utils.OTA.Codex in '..\Src\Utils\C4D.Wizard.Utils.OTA.Codex.pas';
133+
C4D.Wizard.Utils.OTA.Codex in '..\Src\Utils\C4D.Wizard.Utils.OTA.Codex.pas',
134+
C4D.Wizard.OpenInVsCode in '..\Src\OpenInVsCode\C4D.Wizard.OpenInVsCode.pas';
134135

135136
end.

Package/C4DWizard.dproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@
292292
<FormType>dfm</FormType>
293293
</DCCReference>
294294
<DCCReference Include="..\Src\Utils\C4D.Wizard.Utils.OTA.Codex.pas"/>
295+
<DCCReference Include="..\Src\OpenInVsCode\C4D.Wizard.OpenInVsCode.pas"/>
295296
<RcItem Include="Img\C4D_Logo.bmp">
296297
<ResourceType>BITMAP</ResourceType>
297298
<ResourceId>C4D_Logo</ResourceId>

Src/Consts/C4D.Wizard.Consts.pas

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ TC4DConsts = class
103103
MENU_IDE_FormatSource_CAPTION = 'Format Source';
104104
MENU_IDE_NOTES_NAME = 'C4DWizarNotes1';
105105
MENU_IDE_NOTES_CAPTION = 'Notes';
106+
MENU_IDE_OPEN_IN_VSCODE_NAME = 'C4DWizarOpenInVsCode1';
107+
MENU_IDE_OPEN_IN_VSCODE_CAPTION = 'Open In VS Code';
106108

107109
//FILE .INI REOPEN
108110
REOPEN_INI_Favorite = 'Favorite';

Src/IDE/MainMenu/C4D.Wizard.IDE.MainMenu.Clicks.pas

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ TC4DWizardIDEMainMenuClicks = class
2121
class procedure FindClick(Sender: TObject);
2222
class procedure ReplaceClick(Sender: TObject);
2323
class procedure NotesClick(Sender: TObject);
24+
class procedure OpenInVsCodeClick(Sender: TObject);
2425
class procedure DefaultFilesInOpeningProjectClick(Sender: TObject);
2526
class procedure BackupExportClick(Sender: TObject);
2627
class procedure BackupImportClick(Sender: TObject);
@@ -52,7 +53,8 @@ implementation
5253
C4D.Wizard.View.About,
5354
C4D.Wizard.DefaultFilesInOpeningProject,
5455
C4D.Wizard.FormatSource.View,
55-
C4D.Wizard.Notes.View;
56+
C4D.Wizard.Notes.View,
57+
C4D.Wizard.OpenInVsCode;
5658

5759
class procedure TC4DWizardIDEMainMenuClicks.UsesOrganizationClick(Sender: TObject);
5860
var
@@ -132,6 +134,11 @@ class procedure TC4DWizardIDEMainMenuClicks.NotesClick(Sender: TObject);
132134
C4D.Wizard.Notes.View.C4DWizardNotesViewShowDockableForm;
133135
end;
134136

137+
class procedure TC4DWizardIDEMainMenuClicks.OpenInVsCodeClick(Sender: TObject);
138+
begin
139+
TC4DWizardOpenInVsCode.Open;
140+
end;
141+
135142
class procedure TC4DWizardIDEMainMenuClicks.DefaultFilesInOpeningProjectClick(Sender: TObject);
136143
begin
137144
TC4DWizardDefaultFilesInOpeningProject

Src/IDE/MainMenu/C4D.Wizard.IDE.MainMenu.pas

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ TC4DWizardIDEMainMenu = class(TInterfacedObject, IC4DWizardIDEMainMenu)
2424
function GetShortcutIndent: string;
2525
function GetShortcutReplace: string;
2626
function GetShortcutNotes: string;
27+
function GetShortcutOpenInVsCode: string;
2728
function GetShortcutFind: string;
2829
function GetShortcutDefaultFilesInOpeningProject: string;
2930
protected
@@ -120,6 +121,12 @@ procedure TC4DWizardIDEMainMenu.CreateMenus;
120121
TC4DWizardIDEImageListMain.GetInstance.ImgIndexNotes,
121122
Self.GetShortcutNotes);
122123

124+
Self.CreateSubMenu(TC4DConsts.MENU_IDE_OPEN_IN_VSCODE_NAME,
125+
TC4DConsts.MENU_IDE_OPEN_IN_VSCODE_CAPTION,
126+
TC4DWizardIDEMainMenuClicks.OpenInVsCodeClick,
127+
TC4DWizardIDEImageListMain.GetInstance.ImgIndexOpenInExplorerFile,
128+
Self.GetShortcutOpenInVsCode);
129+
123130
Self.CreateSubMenu('C4DSeparator50', '-', nil);
124131
Self.CreateSubMenu(TC4DConsts.ITEM_MENU_DefaultFilesInOpeningProject_NAME,
125132
TC4DConsts.ITEM_MENU_DefaultFilesInOpeningProject_CAPTION,
@@ -275,6 +282,13 @@ function TC4DWizardIDEMainMenu.GetShortcutNotes: string;
275282
Result := C4DWizardSettingsModel.ShortcutNotes.Trim;
276283
end;
277284

285+
function TC4DWizardIDEMainMenu.GetShortcutOpenInVsCode: string;
286+
begin
287+
Result := '';
288+
// if(C4DWizardSettingsModel.ShortcutNotesUse)and(not C4DWizardSettingsModel.ShortcutNotes.Trim.IsEmpty)then
289+
// Result := C4DWizardSettingsModel.ShortcutNotes.Trim;
290+
end;
291+
278292
function TC4DWizardIDEMainMenu.GetShortcutDefaultFilesInOpeningProject: string;
279293
begin
280294
Result := '';

Src/Model/Files/C4D.Wizard.Model.Files.Loop.pas

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,29 +165,42 @@ procedure TC4DWizardModelFilesLoop.GetFilesOpened;
165165
LIOTASourceEditor: IOTASourceEditor;
166166
LContModule: Integer;
167167
LContFile: Integer;
168+
LIOTAModule: IOTAModule;
168169
begin
169170
LIOTAModuleServices := TC4DWizardUtilsOTA.GetIOTAModuleServices;
170171
if(not Assigned(LIOTAModuleServices))then
171172
raise Exception.Create('No Units Opened was found');
172173

173-
if(LIOTAModuleServices.GetModuleCount = 1)then
174-
begin
174+
if(LIOTAModuleServices.ModuleCount = 1)then
175175
if(LIOTAModuleServices.GetModule(0).FileName = TC4DConsts.DEFAULT_HTM)then
176176
raise Exception.Create('No Units Opened was found.');
177-
end;
178177

179-
for LContModule := 0 to pred(LIOTAModuleServices.GetModuleCount) do
178+
for LContModule := 0 to pred(LIOTAModuleServices.ModuleCount) do
180179
begin
181-
for LContFile := 0 to pred(LIOTAModuleServices.GetModule(LContModule).GetModuleFileCount)do
180+
LIOTAModule := LIOTAModuleServices.GetModule(LContModule);
181+
for LContFile := 0 to pred(LIOTAModule.GetModuleFileCount)do
182182
begin
183-
LIOTAEditor := LIOTAModuleServices.GetModule(LContModule).GetModuleFileEditor(LContFile);
183+
LIOTAEditor := LIOTAModule.GetModuleFileEditor(LContFile);
184184
if(Supports(LIOTAEditor, IOTASourceEditor, LIOTASourceEditor))then
185185
begin
186186
Self.ListFilesAdd(LIOTAEditor.FileName);
187187
Break;
188188
end;
189189
end;
190190
end;
191+
192+
// for LContModule := 0 to Pred(LIOTAModuleServices.ModuleCount) do
193+
// begin
194+
// LIOTAModule := LIOTAModuleServices.Modules[LContModule];
195+
// LIOTAEditor := LIOTAModule.CurrentEditor;
196+
// if LIOTAEditor = nil then
197+
// Continue;
198+
//
199+
// if LIOTAEditor.GetModule = nil then
200+
// Continue;
201+
//
202+
// Self.ListFilesAdd(LIOTAEditor.FileName);
203+
// end;
191204
end;
192205

193206
procedure TC4DWizardModelFilesLoop.GetFileCurrent;
@@ -249,15 +262,15 @@ procedure TC4DWizardModelFilesLoop.ProcessEscope;
249262
begin
250263
case(FEscope)of
251264
TC4DWizardEscope.FilesInGroup:
252-
Self.GetFilesGroup;
265+
Self.GetFilesGroup;
253266
TC4DWizardEscope.FilesInProject:
254-
Self.GetFilesProject(TC4DWizardUtilsOTA.GetCurrentProject);
267+
Self.GetFilesProject(TC4DWizardUtilsOTA.GetCurrentProject);
255268
TC4DWizardEscope.FilesOpened:
256-
Self.GetFilesOpened;
269+
Self.GetFilesOpened;
257270
TC4DWizardEscope.FileCurrent:
258-
Self.GetFileCurrent;
271+
Self.GetFileCurrent;
259272
TC4DWizardEscope.FilesInDirectories:
260-
Self.GetFilesInDirectories;
273+
Self.GetFilesInDirectories;
261274
end;
262275
end;
263276

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
unit C4D.Wizard.OpenInVsCode;
2+
3+
interface
4+
5+
uses
6+
System.SysUtils,
7+
ToolsAPI;
8+
9+
type
10+
TC4DWizardOpenInVsCode = class
11+
private
12+
13+
public
14+
class procedure Open;
15+
end;
16+
17+
implementation
18+
19+
uses
20+
C4D.Wizard.Utils,
21+
C4D.Wizard.Utils.OTA,
22+
C4D.Wizard.ProcessDelphi;
23+
24+
class procedure TC4DWizardOpenInVsCode.Open;
25+
var
26+
LIOTAModuleServices: IOTAModuleServices;
27+
LIOTAModule: IOTAModule;
28+
LIOTASourceEditor: IOTASourceEditor;
29+
LIOTAEditView: IOTAEditView;
30+
LFileNameModule: string;
31+
LIOTAProject: IOTAProject;
32+
LFilePathProject: string;
33+
LCursorPos: TOTAEditPos;
34+
LComand: string;
35+
begin
36+
LIOTAModuleServices := TC4DWizardUtilsOTA.GetIOTAModuleServices;
37+
38+
LIOTAModule := LIOTAModuleServices.CurrentModule;
39+
if LIOTAModule = nil then
40+
TC4DWizardUtils.ShowMsgAndAbort('No current module');
41+
42+
if not Supports(LIOTAModule.CurrentEditor, IOTASourceEditor, LIOTASourceEditor) then
43+
TC4DWizardUtils.ShowMsgAndAbort('Interface (IOTASourceEditor) not supported by current module');
44+
45+
LIOTAEditView := LIOTASourceEditor.GetEditView(0);
46+
if LIOTAEditView = nil then
47+
TC4DWizardUtils.ShowMsgAndAbort('Editor view cannot be located');
48+
49+
LFileNameModule := LIOTAModule.FileName;
50+
51+
LIOTAProject := LIOTAModuleServices.GetActiveProject;
52+
if LIOTAProject = nil then
53+
TC4DWizardUtils.ShowMsgAndAbort('No active projects were found');
54+
LFilePathProject := ExtractFilePath(LIOTAProject.FileName);
55+
56+
TC4DWizardUtilsOTA.SaveAllModifiedModules;
57+
58+
LCursorPos := LIOTAEditView.CursorPos;
59+
60+
//LComand := Format('"code --install-extension %s --force"', ['embarcaderotechnologies.delphilsp']);
61+
62+
//REFERENCE: https://code.visualstudio.com/docs/editor/command-line
63+
LComand := Format('"code -r %s -g %s:%d:%d"', [LFilePathProject, LFileNameModule, LCursorPos.Line, LCursorPos.Col]);
64+
TC4DWizardProcessDelphi.RunCommand([LComand]);
65+
end;
66+
67+
end.

Src/Utils/C4D.Wizard.Utils.OTA.pas

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ TC4DWizardUtilsOTA = class
2323
class function CleanCurrentProject: Boolean;
2424
class function CurrentProjectIsC4DWizardDPROJ: Boolean;
2525
class function CurrentModuleIsReadOnly: Boolean;
26+
class procedure SaveAllModifiedModules;
2627
class procedure CloseFilesOpened(AC4DWizardExtensions: TC4DExtensionsOfFiles);
2728
class function AddImgIDEResourceName(AResourceName: string): Integer;
2829
class function AddImgIDEFilePath(AFilePath: string): Integer;
@@ -123,6 +124,26 @@ class function TC4DWizardUtilsOTA.CurrentModuleIsReadOnly: Boolean;
123124
Result := LIOTAEditBuffer.IsReadOnly;
124125
end;
125126

127+
class procedure TC4DWizardUtilsOTA.SaveAllModifiedModules;
128+
var
129+
LIOTAModuleServices: IOTAModuleServices;
130+
I: Integer;
131+
LIOTAModule: IOTAModule;
132+
LIOTAEditor: IOTAEditor;
133+
begin
134+
LIOTAModuleServices := Self.GetIOTAModuleServices;
135+
for I := 0 to Pred(LIOTAModuleServices.ModuleCount) do
136+
begin
137+
LIOTAModule := LIOTAModuleServices.Modules[I];
138+
LIOTAEditor := LIOTAModule.CurrentEditor;
139+
if LIOTAEditor = nil then
140+
continue;
141+
142+
if LIOTAEditor.Modified then
143+
LIOTAModule.Save(False, True);
144+
end;
145+
end;
146+
126147
class procedure TC4DWizardUtilsOTA.CloseFilesOpened(AC4DWizardExtensions: TC4DExtensionsOfFiles);
127148
begin
128149
TC4DWizardModelFilesLoop.New

0 commit comments

Comments
 (0)