ProjectGroups: add the ability to automatically create project groups from all project / package files found in a directory and its subdirectories.

Based on merge request !56.
This commit is contained in:
Maxim Ganetsky 2023-05-01 02:32:54 +03:00
commit 5f433647d6
14 changed files with 199 additions and 56 deletions

View File

@ -25,6 +25,16 @@ msgstr "Laden der Projektgruppe abbrechen"
msgid "Target: %s"
msgstr "Ziel: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Alle Dateien"

View File

@ -24,6 +24,16 @@ msgstr "Arrêter le chargement du groupe de projets"
msgid "Target: %s"
msgstr "Cible : %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Tous les fichiers"

View File

@ -24,6 +24,16 @@ msgstr "A projektcsoport betöltésének megszakítása"
msgid "Target: %s"
msgstr "Cél: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Minden fájl"

View File

@ -14,6 +14,16 @@ msgstr "Interrompi il caricamento del gruppo di progetti"
msgid "Target: %s"
msgstr "Destinazione: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Tutti i file"

View File

@ -25,6 +25,16 @@ msgstr "Nutraukti projekto grupės įkrovą"
msgid "Target: %s"
msgstr "Tikslas: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Visi failai"

View File

@ -14,6 +14,16 @@ msgstr ""
msgid "Target: %s"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr ""

View File

@ -24,6 +24,16 @@ msgstr "Abortar carga grupo de projeto"
msgid "Target: %s"
msgstr "Alvo: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Todos os arquivos"

View File

@ -9,7 +9,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"X-Generator: Poedit 2.2.1\n"
"X-Generator: Poedit 2.4.3\n"
#: projectgroupstrconst.lisabort
msgid "Abort"
@ -24,6 +24,16 @@ msgstr "Прервать загрузку группы проектов"
msgid "Target: %s"
msgstr "Цель: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr "Добавить все из каталога рекурсивно"
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr "Добавить все существующие цели из каталога и его подкаталогов в группу проектов"
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Все файлы"

View File

@ -24,6 +24,16 @@ msgstr "Yükleme projesini iptal et"
msgid "Target: %s"
msgstr "Hedef: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Tüm dosyalar"

View File

@ -25,6 +25,16 @@ msgstr "Перервати завантаження групи проєктів"
msgid "Target: %s"
msgstr "Ціль: %s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "Всі файли"

View File

@ -25,6 +25,16 @@ msgstr "取消(Abort)加载工程组"
msgid "Target: %s"
msgstr "目标:%s"
#: projectgroupstrconst.lisaddallfromdirectorycaption
msgctxt "projectgroupstrconst.lisaddallfromdirectorycaption"
msgid "Add all from directory recursively"
msgstr ""
#: projectgroupstrconst.lisaddallfromdirectoryhint
msgctxt "projectgroupstrconst.lisaddallfromdirectoryhint"
msgid "Add all existing targets from directory and its subdirectories to project group"
msgstr ""
#: projectgroupstrconst.lisallfiles
msgid "All files"
msgstr "所有文件"

View File

@ -1,25 +1,25 @@
object ProjectGroupEditorForm: TProjectGroupEditorForm
Left = 190
Height = 358
Height = 448
Top = 198
Width = 646
Width = 808
BorderIcons = [biSystemMenu]
Caption = 'ProjectGroupEditorForm'
ClientHeight = 358
ClientWidth = 646
ClientHeight = 448
ClientWidth = 808
DesignTimePPI = 120
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
LCLVersion = '2.1.0.0'
LCLVersion = '2.3.0.0'
object TBProjectGroup: TToolBar
Left = 0
Height = 48
Height = 60
Top = 0
Width = 646
Width = 808
AutoSize = True
ButtonHeight = 46
ButtonWidth = 23
ButtonHeight = 58
ButtonWidth = 29
ShowCaptions = True
TabOrder = 0
object TBSave: TToolButton
@ -28,7 +28,7 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
Action = AProjectGroupSave
end
object TBAdd: TToolButton
Left = 102
Left = 127
Top = 2
Caption = 'Add'
DropdownMenu = PopupMenuAdd
@ -36,72 +36,73 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
Style = tbsButtonDrop
end
object TBNewTarget: TToolButton
Left = 33
Left = 41
Top = 2
Action = AProjectGroupAddNew
Visible = False
end
object TBDelete: TToolButton
Left = 142
Left = 177
Top = 2
Action = AProjectGroupDelete
end
object TBCompile: TToolButton
Left = 193
Left = 240
Top = 2
Action = ATargetCompile
end
object TBCompileClean: TToolButton
Left = 246
Left = 305
Top = 2
Action = ATargetCompileClean
end
object ToolButton1: TToolButton
Left = 332
Height = 46
Left = 411
Height = 8
Top = 2
Caption = 'ToolButton1'
Style = tbsSeparator
end
object TBTargetUp: TToolButton
Left = 391
Left = 484
Top = 2
Action = ATargetEarlier
end
object TBTargetLater: TToolButton
Left = 431
Left = 535
Top = 2
Action = ATargetLater
end
object TBMore: TToolButton
Left = 509
Left = 633
Top = 2
Caption = 'More...'
DropdownMenu = PopupMenuMore
Style = tbsButtonDrop
end
object TBActivate: TToolButton
Left = 340
Left = 421
Top = 2
Action = ATargetActivate
Visible = False
end
object TBReload: TToolButton
Left = 465
Left = 577
Top = 2
Action = AProjectGroupReload
end
end
object TVPG: TTreeView
Left = 0
Height = 287
Top = 48
Width = 646
Height = 359
Top = 60
Width = 808
Align = alClient
HideSelection = False
PopupMenu = PopupMenuTree
ReadOnly = True
RightClickSelect = True
ShowSeparators = False
TabOrder = 1
OnAdvancedCustomDrawItem = TVPGAdvancedCustomDrawItem
OnDblClick = TVPGDblClick
@ -112,24 +113,24 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
end
object SBPG: TStatusBar
Left = 0
Height = 23
Top = 335
Width = 646
Height = 29
Top = 419
Width = 808
Panels = <
item
Text = '0 targets'
Width = 85
Width = 106
end
item
Text = 'Current target: '
Width = 50
Width = 62
end>
SimplePanel = False
end
object PopupMenuMore: TPopupMenu
OnPopup = PopupMenuMorePopup
Left = 208
Top = 96
Left = 260
Top = 120
object PMINew: TMenuItem
Action = AProjectGroupNew
end
@ -186,8 +187,8 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
end
end
object ActionListMain: TActionList
Left = 48
Top = 152
Left = 60
Top = 190
object AProjectGroupSave: TAction
Category = 'ProjectGroupActions'
Caption = 'Save'
@ -292,7 +293,6 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
Category = 'TargetAction'
Caption = 'Info'
OnExecute = ATargetInfoExecute
OnUpdate = ATargetInfoUpdate
end
object AProjectGroupAddCurrent: TAction
Category = 'ProjectGroupActions'
@ -301,6 +301,13 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
OnExecute = AProjectGroupAddCurrentExecute
OnUpdate = AProjectGroupAddCurrentUpdate
end
object AProjectGroupAddAll: TAction
Category = 'ProjectGroupActions'
Caption = 'Add all from directory recursively'
ImageIndex = 8
OnExecute = AProjectGroupAddAllExecute
OnUpdate = AProjectGroupAddAllUpdate
end
object AProjectGroupDelete: TAction
Category = 'ProjectGroupActions'
Caption = 'Remove'
@ -344,8 +351,8 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
end
end
object PopupMenuTree: TPopupMenu
Left = 208
Top = 152
Left = 260
Top = 190
object PMICopyFilenameMenuItem: TMenuItem
Action = ATargetCopyFilename
end
@ -631,17 +638,25 @@ object ProjectGroupEditorForm: TProjectGroupEditorForm
end
object OpenDialogTarget: TOpenDialog
Options = [ofAllowMultiSelect, ofFileMustExist, ofEnableSizing, ofViewDetail]
Left = 48
Top = 96
Left = 60
Top = 120
end
object PopupMenuAdd: TPopupMenu
Left = 120
Top = 53
Left = 150
Top = 66
object PMIAddExisting: TMenuItem
Action = AProjectGroupAddExisting
end
object PMIAddAll: TMenuItem
Action = AProjectGroupAddAll
end
object PMIAddCurrent: TMenuItem
Action = AProjectGroupAddCurrent
end
end
object SelectDirectoryDialog: TSelectDirectoryDialog
Options = [ofAllowMultiSelect, ofFileMustExist, ofEnableSizing, ofViewDetail]
Left = 150
Top = 250
end
end

View File

@ -19,7 +19,7 @@ uses
Forms, Controls, Graphics, Dialogs, ComCtrls, Menus,
ActnList, Clipbrd, ImgList, LCLType,
// LazUtils
LazFileUtils, LazLoggerBase, LazFileCache,
FileUtil, LazFileUtils, LazLoggerBase, LazFileCache,
// BuildIntf
PackageIntf, ProjectIntf,
// IdeIntf
@ -51,6 +51,7 @@ type
{ TProjectGroupEditorForm }
TProjectGroupEditorForm = class(TForm)
AProjectGroupAddAll: TAction;
AProjectGroupNew: TAction;
AProjectGroupAddCurrent: TAction;
ATargetInfo: TAction;
@ -76,6 +77,7 @@ type
AProjectGroupDelete: TAction;
AProjectGroupSave: TAction;
ActionListMain: TActionList;
PMIAddAll: TMenuItem;
PMINew: TMenuItem;
PMIAddExisting: TMenuItem;
PMIAddCurrent: TMenuItem;
@ -99,6 +101,7 @@ type
PopupMenuMore: TPopupMenu;
PopupMenuTree: TPopupMenu;
SBPG: TStatusBar;
SelectDirectoryDialog: TSelectDirectoryDialog;
TBProjectGroup: TToolBar;
TBSave: TToolButton;
TBAdd: TToolButton;
@ -113,6 +116,8 @@ type
TBActivate: TToolButton;
TBReload: TToolButton;
TVPG: TTreeView;
procedure AProjectGroupAddAllExecute(Sender: TObject);
procedure AProjectGroupAddAllUpdate(Sender: TObject);
procedure AProjectGroupAddCurrentExecute(Sender: TObject);
procedure AProjectGroupAddCurrentUpdate(Sender: TObject);
procedure AProjectGroupAddExistingExecute(Sender: TObject);
@ -143,7 +148,6 @@ type
procedure ATargetEarlierExecute(Sender: TObject);
procedure ATargetEarlierUpdate(Sender: TObject);
procedure ATargetInfoExecute(Sender: TObject);
procedure ATargetInfoUpdate(Sender: TObject);
procedure ATargetInstallExecute(Sender: TObject);
procedure ATargetInstallUpdate(Sender: TObject);
procedure ATargetLaterExecute(Sender: TObject);
@ -159,7 +163,6 @@ type
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure PopupMenuMorePopup(Sender: TObject);
procedure TVPGAdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; {%H-}State: TCustomDrawState; Stage: TCustomDrawStage;
@ -418,6 +421,7 @@ begin
ConfigAction(AProjectGroupSave,'pg_save_simple',lisProjectGroupSaveCaption,lisProjectGroupSaveHint,Nil);
ConfigAction(AProjectGroupSaveAs,'pg_save_as_simple',lisProjectGroupSaveAsCaption,lisProjectGroupSaveAsHint,Nil);
ConfigAction(AProjectGroupNew,'pg_new',lisProjectGroupNewCaption,lisProjectGroupNewHint,Nil);
ConfigAction(AProjectGroupAddAll,'',lisAddAllFromDirectoryCaption,lisAddAllFromDirectoryHint,Nil);
ConfigAction(AProjectGroupAddExisting,'pg_add_project_from_file',lisProjectGroupAddExistingCaption,lisProjectGroupAddExistingHint,Nil);
ConfigAction(AProjectGroupAddCurrent,'pg_add_project',lisProjectGroupAddCurrentProjectCaption,lisProjectGroupAddCurrentProjectHint,Nil);
ConfigAction(AProjectGroupDelete,'laz_delete',lisProjectGroupDeleteCaption,lisProjectGroupDeleteHint,Nil);
@ -510,11 +514,6 @@ begin
ShowPrgGrpInfo(SelectedTarget as TIDECompileTarget);
end;
procedure TProjectGroupEditorForm.ATargetInfoUpdate(Sender: TObject);
begin
end;
procedure TProjectGroupEditorForm.ATargetLaterExecute(Sender: TObject);
Var
T: TNodeData;
@ -642,11 +641,6 @@ begin
//debugln(['TProjectGroupEditorForm.FormDestroy END ',ProjectGroup<>nil]);
end;
procedure TProjectGroupEditorForm.FormShow(Sender: TObject);
begin
end;
procedure TProjectGroupEditorForm.PopupMenuMorePopup(Sender: TObject);
var
ND: TNodeData;
@ -1032,6 +1026,28 @@ begin
AddTarget(LazarusIDE.ActiveProject.ProjectInfoFile);
end;
procedure TProjectGroupEditorForm.AProjectGroupAddAllExecute(Sender: TObject);
var
i: PtrInt;
Files: TStringList;
begin
if FProjectGroup=nil then exit;
InitIDEFileDialog(SelectDirectoryDialog);
If SelectDirectoryDialog.Execute then
begin
Files := FindAllFiles(SelectDirectoryDialog.FileName, '*.lpi;*.lpk;*.lpg');
for i := 0 to Files.Count - 1 do
AddTarget(Files[i]);
FreeAndNil(Files);
end;
StoreIDEFileDialog(SelectDirectoryDialog);
end;
procedure TProjectGroupEditorForm.AProjectGroupAddAllUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled:=FProjectGroup<>nil;
end;
procedure TProjectGroupEditorForm.AProjectGroupAddCurrentUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := (FProjectGroup<>nil) and (LazarusIDE.ActiveProject<>nil)
@ -1834,4 +1850,3 @@ end;
end.

View File

@ -67,6 +67,9 @@ Resourcestring
lisProjectGroupSaveAsHint = 'Save project group with a new name';
lisProjectGroupNewCaption = 'New';
lisProjectGroupNewHint = 'New project group';
lisAddAllFromDirectoryCaption = 'Add all from directory recursively';
lisAddAllFromDirectoryHint = 'Add all existing '
+'targets from directory and its subdirectories to project group';
lisProjectGroupAddCaption = 'Add';
lisProjectGroupAddHint = 'Add targets to project group';
lisProjectGroupAddExistingCaption = 'Add from file';