diff --git a/PBGitTheme.zip b/PBGitTheme.zip new file mode 100644 index 0000000..f9c7899 Binary files /dev/null and b/PBGitTheme.zip differ diff --git a/PBIDE-GitTool.exe b/PBIDE-GitTool.exe new file mode 100644 index 0000000..e4c37f4 Binary files /dev/null and b/PBIDE-GitTool.exe differ diff --git a/PBIDE-GitTool.pb b/PBIDE-GitTool.pb index 9c45984..255ea12 100644 --- a/PBIDE-GitTool.pb +++ b/PBIDE-GitTool.pb @@ -43,6 +43,8 @@ Declare.i DoCommit(repoDir$, message$, doPush.i, remote$, branch$) Declare.i DoPush(repoDir$, remote$, branch$) Declare.i DoPull(repoDir$, remote$, branch$) Declare.i ListBranches(repoDir$, List branchesList.s()) +Declare.i InstallPBGitInIDE(ideExe$, toolsPrefs$, themeZip$) +Declare.i OpenInstallWizard() ; ====== Utils ====== Procedure.s TrimNewlines(text$) @@ -374,6 +376,22 @@ Procedure.i OpenGUI(initialDir$, prefsPath$) ButtonGadget(#GPush, 140, 410, 120, 30, "Push") ButtonGadget(#GPull, 270, 410, 120, 30, "Pull") + ; --------- Infobulles (tooltips) --------- + GadgetToolTip(#GStringRepo, "Dossier du dépôt Git. Utilisez 'Parcourir…' pour le sélectionner.") + GadgetToolTip(#GButtonBrowse, "Choisir le répertoire du dépôt.") + GadgetToolTip(#GListStatus, "État des fichiers (git status --porcelain).") + GadgetToolTip(#GRefresh, "Rafraîchir l’état du dépôt.") + GadgetToolTip(#GInit, "Initialiser un dépôt Git ici (git init).") + GadgetToolTip(#GStringMsg, "Message de commit.") + GadgetToolTip(#GCheckPush, "Activer pour pousser après le commit (git push).") + GadgetToolTip(#GStringRemote, "Nom du remote (ex: origin).") + GadgetToolTip(#GLabelRemote, "Nom du remote par défaut.") + GadgetToolTip(#GComboBranch, "Branche cible (ex: main).") + GadgetToolTip(#GSavePrefs, "Sauver remote/branche comme valeurs par défaut.") + GadgetToolTip(#GCommit, "git add -A puis git commit -m "+Chr(34)+"message"+Chr(34)+" (et push si coché).") + GadgetToolTip(#GPush, "Pousser la branche (git push).") + GadgetToolTip(#GPull, "Récupérer les changements distants (git pull).") + ; Remplir branches via la LISTE NewList branchItems.s() ListBranches(repoDir$, branchItems()) @@ -408,8 +426,6 @@ Procedure.i OpenGUI(initialDir$, prefsPath$) If newDir$ <> "" repoDir$ = newDir$ SetGadgetText(#GStringRepo, repoDir$) - - ; Recharger la liste des branches ClearList(branchItems()) ListBranches(repoDir$, branchItems()) ClearGadgetItems(#GComboBranch) @@ -478,31 +494,184 @@ Procedure.i OpenGUI(initialDir$, prefsPath$) ProcedureReturn 0 EndProcedure +; ------------------------------------------------------------------ +; Installe l’intégration dans l’IDE PureBasic : +; - copie le thème d’icônes (zip) dans \Themes\ +; - lance l’IDE avec /A "" pour importer les outils +; Retourne 1 si OK, 0 sinon. +; ------------------------------------------------------------------ +Procedure.i InstallPBGitInIDE(ideExe$, toolsPrefs$, themeZip$) + Protected ok.i = 1 + Protected ideHome$, themesDir$, destZip$, args$, prg.i, copyOk.i + + If FileSize(ideExe$) <= 0 Or FileSize(toolsPrefs$) <= 0 Or FileSize(themeZip$) <= 0 + MessageRequester("Installation", "Chemins invalides. Merci de sélectionner PureBasic.exe, le fichier d’outils et le thème.", #PB_MessageRequester_Error) + ProcedureReturn 0 + EndIf + + ideHome$ = GetPathPart(ideExe$) + themesDir$ = ideHome$ + "Themes" + #PathSep$ + destZip$ = themesDir$ + GetFilePart(themeZip$) + + ; Créer le dossier Themes si besoin + If FileSize(themesDir$) <> -2 + If CreateDirectory(themesDir$) = 0 + MessageRequester("Installation", "Impossible de créer le dossier Themes : " + themesDir$, #PB_MessageRequester_Error) + ProcedureReturn 0 + EndIf + EndIf + + ; Copier le thème + copyOk = CopyFile(themeZip$, destZip$) + If copyOk = 0 + MessageRequester("Installation", "Échec de copie du thème vers : " + destZip$, #PB_MessageRequester_Error) + ok = 0 + EndIf + + ; Importer les outils via /A "" + If ok + args$ = "/A " + Chr(34) + toolsPrefs$ + Chr(34) + prg = RunProgram(ideExe$, args$, "", #PB_Program_Hide | #PB_Program_Wait) + If prg = 0 + MessageRequester("Installation", "Échec de l’import des outils (/A).", #PB_MessageRequester_Error) + ok = 0 + EndIf + EndIf + + If ok + MessageRequester("Installation", "Intégration importée !" + #LF$ + + "- Thème copié dans: " + destZip$ + #LF$ + + "- Outils importés via /A", #PB_MessageRequester_Info) + EndIf + + ProcedureReturn ok +EndProcedure + +; ------------------------------------------------------------------ +; Assistant d’installation graphique quand PBIDE-GitTool est lancé sans paramètre. +; - Permet de choisir PureBasic.exe, git_tools.prefs et PBGitTheme.zip +; - Appelle InstallPBGitInIDE() +; Retourne 1 si installation OK, 0 sinon. +; ------------------------------------------------------------------ + +; Gadgets de la fenêtre d'installation (évite toute collision avec l’UI principale) +#WInstall = 100 +#GLabelIde = 110 +#GStringIde = 111 +#GButtonIde = 112 +#GLabelTools = 113 +#GStringTools = 114 +#GButtonTools = 115 +#GLabelTheme = 116 +#GStringTheme = 117 +#GButtonTheme = 118 +#GInstallGo = 119 +#GInstallCancel = 120 +#GInstallNote = 121 + +Procedure.i OpenInstallWizard() + Protected exeDefault$ = "" + Protected dirExe$ = GetPathPart(ProgramFilename()) + Protected prefsDefault$ = dirExe$ + "git_tools.prefs" + Protected themeDefault$ = dirExe$ + "PBGitTheme.zip" + + If OpenWindow(#WInstall, 0, 0, 680, 240, "PBIDE-GitTool — Assistant d’installation IDE", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) + TextGadget(#GLabelIde, 10, 16, 140, 22, "PureBasic.exe :") + StringGadget(#GStringIde,160, 14, 420, 24, exeDefault$) + ButtonGadget(#GButtonIde,590, 14, 80, 24, "Parcourir…") + + TextGadget(#GLabelTools, 10, 56, 140, 22, "Fichier outils :") + StringGadget(#GStringTools,160, 54, 420, 24, prefsDefault$) + ButtonGadget(#GButtonTools,590, 54, 80, 24, "Parcourir…") + + TextGadget(#GLabelTheme, 10, 96, 140, 22, "Thème icônes :") + StringGadget(#GStringTheme,160, 94, 420, 24, themeDefault$) + ButtonGadget(#GButtonTheme,590, 94, 80, 24, "Parcourir…") + + ButtonGadget(#GInstallGo, 380, 150, 140, 30, "Installer") + ButtonGadget(#GInstallCancel, 530, 150, 140, 30, "Annuler") + + TextGadget(#GInstallNote, 10, 190, 660, 40, + "Conseil : placez 'git_tools.prefs' et 'PBGitTheme.zip' à côté de PBIDE-GitTool.exe pour auto-renseignement." + #LF$ + + "Après import, choisissez le thème dans Préférences → General → Themes, puis ajoutez des boutons 'Run tool' dans la Toolbar.") + + ; Infobulles de l’assistant + GadgetToolTip(#GStringIde, "Chemin de PureBasic.exe (IDE).") + GadgetToolTip(#GButtonIde, "Parcourir pour sélectionner l’exécutable de l’IDE PureBasic.") + GadgetToolTip(#GStringTools, "Fichier d’outils externes à importer (/A).") + GadgetToolTip(#GButtonTools, "Parcourir le fichier 'git_tools.prefs'.") + GadgetToolTip(#GStringTheme, "Archive ZIP du thème d’icônes pour la Toolbar.") + GadgetToolTip(#GButtonTheme, "Parcourir le fichier 'PBGitTheme.zip'.") + GadgetToolTip(#GInstallGo, "Lancer l’installation (copie du thème + import des outils).") + GadgetToolTip(#GInstallCancel, "Fermer l’assistant sans rien modifier.") + + Repeat + Protected ev.i = WaitWindowEvent() + If ev = #PB_Event_Gadget + Select EventGadget() + Case #GButtonIde + Protected pickExe$ = OpenFileRequester("Choisir PureBasic.exe", GetPathPart(GetGadgetText(#GStringIde)), "Exécutable|*.exe;*|Tous|*.*", 0) + If pickExe$ <> "" : SetGadgetText(#GStringIde, pickExe$) : EndIf + + Case #GButtonTools + Protected pickPrefs$ = OpenFileRequester("Choisir le fichier d'outils", GetGadgetText(#GStringTools), "Prefs|*.prefs;*.txt|Tous|*.*", 0) + If pickPrefs$ <> "" : SetGadgetText(#GStringTools, pickPrefs$) : EndIf + + Case #GButtonTheme + Protected pickZip$ = OpenFileRequester("Choisir le thème (zip)", GetGadgetText(#GStringTheme), "Zip|*.zip|Tous|*.*", 0) + If pickZip$ <> "" : SetGadgetText(#GStringTheme, pickZip$) : EndIf + + Case #GInstallGo + Protected ok.i = InstallPBGitInIDE(GetGadgetText(#GStringIde), GetGadgetText(#GStringTools), GetGadgetText(#GStringTheme)) + If ok + CloseWindow(#WInstall) + ProcedureReturn 1 + EndIf + + Case #GInstallCancel + CloseWindow(#WInstall) + ProcedureReturn 0 + EndSelect + EndIf + Until ev = #PB_Event_CloseWindow + + ProcedureReturn 0 + EndIf + + ProcedureReturn 0 +EndProcedure + ; ====== Entrée ====== If EnsureGitAvailable() = 0 - End + ; On n’arrête pas forcément l’outil si Git manque, pour l’assistant d’installation + ; Mais on avertit : Git sera requis pour les opérations. EndIf -; Emplacement pour les prefs (dossier utilisateur PBIDE-GitTool) +; Emplacement prefs locale de l’outil Define baseDoc$ = GetUserDirectory(#PB_Directory_Documents) If Right(baseDoc$, 1) <> #PathSep$ baseDoc$ + #PathSep$ EndIf - Define prefsDir$ = baseDoc$ + "PBIDE-GitTool" + #PathSep$ -If FileSize(prefsDir$) <> -2 - CreateDirectory(prefsDir$) -EndIf +If FileSize(prefsDir$) <> -2 : CreateDirectory(prefsDir$) : EndIf Define prefsPath$ = prefsDir$ + "settings.prefs" -; Mode CLI (optionnel): -; --repo --status | --init | --commit "message" [--push] [--remote ] [--branch ] | --push [--remote ] [--branch ] | --pull [...] +; Paramètres CLI Define argCount.i = CountProgramParameters() Define useGui.i = 1 Define repoArg$ = "", msgArg$ = "", remoteArg$ = "", branchArg$ = "" Define wantStatus.i = 0, wantInit.i = 0, wantCommit.i = 0, wantPush.i = 0, wantPull.i = 0 Define w.i +; --- Si aucun paramètre : proposer l’installation IDE --- +If argCount = 0 + If MessageRequester("PBIDE-GitTool", "Aucun paramètre détecté." + #LF$ + "Souhaitez-vous installer l’intégration IDE (outils + thème) maintenant ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes + OpenInstallWizard() + End + EndIf +EndIf + +; Parsing arguments For w = 0 To argCount - 1 Define a$ = ProgramParameter(w) Select LCase(a$) @@ -514,6 +683,7 @@ For w = 0 To argCount - 1 Case "--pull" : wantPull = 1 : useGui = 0 Case "--remote" : If w + 1 < argCount : remoteArg$ = ProgramParameter(w + 1) : EndIf Case "--branch" : If w + 1 < argCount : branchArg$ = ProgramParameter(w + 1) : EndIf + Case "--project" : If w + 1 < argCount : repoArg$ = ProgramParameter(w + 1) : EndIf EndSelect Next w @@ -527,11 +697,11 @@ Else LoadPrefs(prefsPath$, remote$, branch$) If remoteArg$ <> "" : remote$ = remoteArg$ : EndIf If branchArg$ <> "" : branch$ = branchArg$ : EndIf - + Define baseDir$ = repoArg$ If baseDir$ = "" : baseDir$ = DirFromArgOrFallback() : EndIf baseDir$ = DetectRepoRoot(baseDir$) - + If wantStatus Define st$, ok.i = DoStatus(baseDir$, st$) If ok : PrintN(st$) : EndIf @@ -548,8 +718,10 @@ Else EndIf ; IDE Options = PureBasic 6.21 (Windows - x64) -; CursorPosition = 32 +; CursorPosition = 390 +; FirstLine = 386 ; Folding = --- ; EnableXP ; DPIAware -; Executable = ..\PBIDE-GitTool.exe \ No newline at end of file +; Executable = ..\PBIDE-GitTool.exe +; CompileSourceDirectory \ No newline at end of file diff --git a/PureBasic_Compilation0.exe b/PureBasic_Compilation0.exe new file mode 100644 index 0000000..9978629 Binary files /dev/null and b/PureBasic_Compilation0.exe differ diff --git a/git_icons_pack.zip b/git_icons_pack.zip new file mode 100644 index 0000000..62a692f Binary files /dev/null and b/git_icons_pack.zip differ diff --git a/git_icons_pack/git_icons_pack/dark/git_add_24.png b/git_icons_pack/git_icons_pack/dark/git_add_24.png new file mode 100644 index 0000000..794517c Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_add_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_branch_24.png b/git_icons_pack/git_icons_pack/dark/git_branch_24.png new file mode 100644 index 0000000..dc7a148 Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_branch_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_commit_24.png b/git_icons_pack/git_icons_pack/dark/git_commit_24.png new file mode 100644 index 0000000..f852bdb Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_commit_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_init_24.png b/git_icons_pack/git_icons_pack/dark/git_init_24.png new file mode 100644 index 0000000..a333070 Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_init_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_merge_24.png b/git_icons_pack/git_icons_pack/dark/git_merge_24.png new file mode 100644 index 0000000..3f06026 Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_merge_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_pull_24.png b/git_icons_pack/git_icons_pack/dark/git_pull_24.png new file mode 100644 index 0000000..5a0c0ba Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_pull_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_push_24.png b/git_icons_pack/git_icons_pack/dark/git_push_24.png new file mode 100644 index 0000000..332d02d Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_push_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_settings_24.png b/git_icons_pack/git_icons_pack/dark/git_settings_24.png new file mode 100644 index 0000000..8f1e926 Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_settings_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_status_24.png b/git_icons_pack/git_icons_pack/dark/git_status_24.png new file mode 100644 index 0000000..0bd11a1 Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_status_24.png differ diff --git a/git_icons_pack/git_icons_pack/dark/git_tag_24.png b/git_icons_pack/git_icons_pack/dark/git_tag_24.png new file mode 100644 index 0000000..38a2d12 Binary files /dev/null and b/git_icons_pack/git_icons_pack/dark/git_tag_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_add_24.png b/git_icons_pack/git_icons_pack/light/git_add_24.png new file mode 100644 index 0000000..320aa51 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_add_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_branch_24.png b/git_icons_pack/git_icons_pack/light/git_branch_24.png new file mode 100644 index 0000000..fbc7ca5 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_branch_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_commit_24.png b/git_icons_pack/git_icons_pack/light/git_commit_24.png new file mode 100644 index 0000000..7913601 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_commit_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_init_24.png b/git_icons_pack/git_icons_pack/light/git_init_24.png new file mode 100644 index 0000000..48bb796 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_init_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_merge_24.png b/git_icons_pack/git_icons_pack/light/git_merge_24.png new file mode 100644 index 0000000..b7e0075 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_merge_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_pull_24.png b/git_icons_pack/git_icons_pack/light/git_pull_24.png new file mode 100644 index 0000000..fb634b6 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_pull_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_push_24.png b/git_icons_pack/git_icons_pack/light/git_push_24.png new file mode 100644 index 0000000..0032aaa Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_push_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_settings_24.png b/git_icons_pack/git_icons_pack/light/git_settings_24.png new file mode 100644 index 0000000..1482e1f Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_settings_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_status_24.png b/git_icons_pack/git_icons_pack/light/git_status_24.png new file mode 100644 index 0000000..7b933b1 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_status_24.png differ diff --git a/git_icons_pack/git_icons_pack/light/git_tag_24.png b/git_icons_pack/git_icons_pack/light/git_tag_24.png new file mode 100644 index 0000000..6c60639 Binary files /dev/null and b/git_icons_pack/git_icons_pack/light/git_tag_24.png differ diff --git a/git_tools.prefs b/git_tools.prefs new file mode 100644 index 0000000..0eea058 --- /dev/null +++ b/git_tools.prefs @@ -0,0 +1,110 @@ +[Tools] +Count = 9 + +[Tool_0] +Enabled = 1 +Name = Git: Status (projet) +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" status -sb +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_1] +Enabled = 1 +Name = Git: Init (projet) +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" init +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_2] +Enabled = 1 +Name = Git: Add --all +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" add --all +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_3] +Enabled = 1 +Name = Git: Pull +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" pull --ff-only +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_4] +Enabled = 1 +Name = Git: Push +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" push +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_5] +Enabled = 1 +Name = Git: Branche courante +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" branch --show-current +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_6] +Enabled = 1 +Name = Git: Lister branches +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" branch -av +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_7] +Enabled = 1 +Name = Git: Log (graph) +Program = C:\Program Files\Git\cmd\git.exe +Arguments = -C "%PROJECT%" log --oneline --graph --decorate -n 30 +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 1 +Wait = 1 +HideFromMenu = 0 + +[Tool_8] +Enabled = 1 +Name = PB-Git: Ouvrir l’interface +Program = +Arguments = "%PROJECT%" +WorkingDir = +Trigger = Menu +Shortcut = +RunHidden = 0 +Wait = 1 +HideFromMenu = 0