From a948550932d5287e741d42396a8df16d4317f822 Mon Sep 17 00:00:00 2001 From: Thyphoon Date: Mon, 1 Sep 2025 06:31:17 +0200 Subject: [PATCH] Add Tags Gadgets --- main2.pb | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 182 insertions(+), 3 deletions(-) diff --git a/main2.pb b/main2.pb index d3ffbf9..a059e50 100644 --- a/main2.pb +++ b/main2.pb @@ -461,6 +461,34 @@ Enumeration GadgetsIDs #GID_CbScope #GID_BtnSaveCfg +; === TAB 5: TAGS === +#GID_Tab_Tags +#GID_FrmTagsList +#GID_ListTags +#GID_BtnCreateTag +#GID_BtnDeleteTag +#GID_BtnPushTag +#GID_BtnFetchTags +#GID_BtnCheckoutTag + +; Frame création de tag +#GID_FrmCreateTag +#GID_LblTagName +#GID_EdTagName +#GID_LblTagType +#GID_OptTagLight +#GID_OptTagAnnotated +#GID_LblTagMessage +#GID_EdTagMessage +#GID_LblTagTarget +#GID_CbTagTarget +#GID_BtnApplyTag +#GID_BtnCancelTag + +; Détails du tag +#GID_FrmTagDetails +#GID_TxtTagDetails + ; --- App settings (langue) --- #GID_FrmApp #GID_LblAppLang @@ -625,6 +653,42 @@ Procedure ResizeGUI() ResizeGadget(#GID_BtnSaveGitIgnore, #UI_Inset, #UI_Inset + gitEdH + #UI_Inset, 100, #UI_RowH) ; Onglet 4 : statique (inchangé) + + ; === Onglet 5 : Tags === +Protected tagsListH = (panelH - #UI_Inset*4) / 2 +Protected tagsListInnerH = tagsListH - #UI_FrameHeaderH - #UI_RowH - #UI_Inset*2 +If tagsListInnerH < 100 : tagsListInnerH = 100 : EndIf + +ResizeGadget(#GID_FrmTagsList, #UI_Inset, #UI_Inset, panelW - #UI_Inset*2, tagsListH) +ResizeGadget(#GID_ListTags, #UI_Inset, #UI_FrameHeaderH, + GadgetWidth(#GID_FrmTagsList) - #UI_Inset*2, tagsListInnerH) + +Protected yTagsButtons = GadgetHeight(#GID_FrmTagsList) - #UI_RowH - #UI_Inset +ResizeGadget(#GID_BtnCheckoutTag, #UI_Inset, yTagsButtons, 110, #UI_RowH) +ResizeGadget(#GID_BtnDeleteTag, RightOf(#GID_BtnCheckoutTag) + #UI_Inset, yTagsButtons, 110, #UI_RowH) +ResizeGadget(#GID_BtnPushTag, RightOf(#GID_BtnDeleteTag) + #UI_Inset, yTagsButtons, 110, #UI_RowH) +ResizeGadget(#GID_BtnFetchTags, RightOf(#GID_BtnPushTag) + #UI_Inset, yTagsButtons, 110, #UI_RowH) + +Protected yCreateTag = BottomOf(#GID_FrmTagsList) + #UI_Inset +Protected createTagW = (panelW - #UI_Inset*3) / 2 +Protected createTagH = panelH - yCreateTag - #UI_Inset + +ResizeGadget(#GID_FrmCreateTag, #UI_Inset, yCreateTag, createTagW, createTagH) +ResizeGadget(#GID_EdTagName, RightOf(#GID_LblTagName) + #UI_Inset, + GadgetY(#GID_EdTagName), createTagW - 120 - #UI_Inset*3, #UI_RowH) +ResizeGadget(#GID_CbTagTarget, RightOf(#GID_LblTagTarget) + #UI_Inset, + GadgetY(#GID_CbTagTarget), createTagW - 120 - #UI_Inset*3, #UI_RowH) +ResizeGadget(#GID_EdTagMessage, #UI_Inset, GadgetY(#GID_EdTagMessage), + createTagW - #UI_Inset*2, 80) + +Protected xDetails = RightOf(#GID_FrmCreateTag) + #UI_Inset +ResizeGadget(#GID_FrmTagDetails, xDetails, yCreateTag, + panelW - xDetails - #UI_Inset, createTagH) +ResizeGadget(#GID_TxtTagDetails, xDetails + #UI_Inset, + yCreateTag + #UI_FrameHeaderH, + GadgetWidth(#GID_FrmTagDetails) - #UI_Inset*2, + GadgetHeight(#GID_FrmTagDetails) - #UI_FrameHeaderH - #UI_Inset) + EndProcedure @@ -699,7 +763,18 @@ Procedure ApplyToolTips() GadgetToolTip(#GID_BtnApplyProxy,T("tip.proxy.apply", "Appliquer la configuration proxy dans Git")) - + ; --- Tags --- +GadgetToolTip(#GID_ListTags, T("tip.tags.list", "Liste des tags du dépôt")) +GadgetToolTip(#GID_BtnCreateTag, T("tip.tags.create", "Créer un nouveau tag")) +GadgetToolTip(#GID_BtnDeleteTag, T("tip.tags.delete", "Supprimer le tag sélectionné")) +GadgetToolTip(#GID_BtnPushTag, T("tip.tags.push", "Envoyer le tag vers le dépôt distant")) +GadgetToolTip(#GID_BtnFetchTags, T("tip.tags.fetch", "Récupérer les tags du dépôt distant")) +GadgetToolTip(#GID_BtnCheckoutTag, T("tip.tags.checkout", "Basculer vers le tag sélectionné")) +GadgetToolTip(#GID_EdTagName, T("tip.tags.name", "Nom du tag (ex: v1.0.0)")) +GadgetToolTip(#GID_OptTagLight, T("tip.tags.light", "Tag léger (référence simple)")) +GadgetToolTip(#GID_OptTagAnnotated,T("tip.tags.annotated", "Tag annoté (avec message et signature)")) +GadgetToolTip(#GID_CbTagTarget, T("tip.tags.target", "Commit ou branche à taguer")) +GadgetToolTip(#GID_EdTagMessage, T("tip.tags.message", "Message descriptif du tag annoté")) ; --- Help (optionnel) --- @@ -788,6 +863,7 @@ Enumeration #Panel_History #Panel_GitIgnore #Panel_Config + #Panel_Tags EndEnumeration Procedure OpenGUI() UseModule Translate @@ -973,6 +1049,109 @@ Procedure OpenGUI() ButtonGadget(#GID_BtnApplyProxy, GadgetWidth(#GID_FrmProxy) - #UI_Inset - 140, #UI_Inset + 215, 140, #UI_RowH, T("Proxy.Apply","Appliquer proxy")) CloseGadgetList() + + ; =========================================================================== +; TAB 5: TAGS +; =========================================================================== +AddGadgetItem(#GID_Panel, #Panel_Tags, T("Tabs.Tags", "Tags")) + +; ---- Frame: Liste des tags ---- +FrameGadget(#GID_FrmTagsList, #UI_Inset, #UI_Inset, + GadgetWidth(#GID_Panel) - #UI_Inset*2, + (panelH - #UI_Inset*4) / 2, + T("Tags.FrameList", "Tags existants"), #PB_Frame_Container) + +; Liste des tags avec colonnes +ListIconGadget(#GID_ListTags, #UI_Inset, #UI_FrameHeaderH, + GadgetWidth(#GID_FrmTagsList) - #UI_Inset*2, + GadgetHeight(#GID_FrmTagsList) - #UI_FrameHeaderH - #UI_RowH - #UI_Inset*2, + T("Tags.List.Name", "Nom"), 200, + #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection) +AddGadgetColumn(#GID_ListTags, 1, T("Tags.List.Type", "Type"), 100) +AddGadgetColumn(#GID_ListTags, 2, T("Tags.List.Commit", "Commit"), 100) +AddGadgetColumn(#GID_ListTags, 3, T("Tags.List.Date", "Date"), 150) +AddGadgetColumn(#GID_ListTags, 4, T("Tags.List.Author", "Auteur"), 150) +AddGadgetColumn(#GID_ListTags, 5, T("Tags.List.Message", "Message"), 300) + +; Boutons d'action pour les tags +Define yTagButtons = GadgetHeight(#GID_FrmTagsList) - #UI_RowH - #UI_Inset +ButtonGadget(#GID_BtnCheckoutTag, #UI_Inset, yTagButtons, 110, #UI_RowH, + T("Tags.Button.Checkout", "Checkout")) +ButtonGadget(#GID_BtnDeleteTag, RightOf(#GID_BtnCheckoutTag) + #UI_Inset, yTagButtons, 110, #UI_RowH, + T("Tags.Button.Delete", "Supprimer")) +ButtonGadget(#GID_BtnPushTag, RightOf(#GID_BtnDeleteTag) + #UI_Inset, yTagButtons, 110, #UI_RowH, + T("Tags.Button.Push", "Push Tag")) +ButtonGadget(#GID_BtnFetchTags, RightOf(#GID_BtnPushTag) + #UI_Inset, yTagButtons, 110, #UI_RowH, + T("Tags.Button.Fetch", "Fetch Tags")) +CloseGadgetList() + +; ---- Frame: Création de tag ---- +Define yCreateTag = BottomOf(#GID_FrmTagsList) + #UI_Inset +FrameGadget(#GID_FrmCreateTag, #UI_Inset, yCreateTag, + (GadgetWidth(#GID_Panel) - #UI_Inset*3) / 2, + panelH - yCreateTag - #UI_Inset, + T("Tags.FrameCreate", "Créer un tag"), #PB_Frame_Container) + +; Nom du tag +TextGadget(#GID_LblTagName, #UI_Inset, #UI_FrameHeaderH + #UI_Inset, 100, #UI_RowH, + T("Tags.Label.Name", "Nom :")) +StringGadget(#GID_EdTagName, RightOf(#GID_LblTagName) + #UI_Inset, + #UI_FrameHeaderH + #UI_Inset, + GadgetWidth(#GID_FrmCreateTag) - 120 - #UI_Inset*3, #UI_RowH, "") + +; Type de tag +Define yTagType = BottomOf(#GID_EdTagName) + #UI_Inset +TextGadget(#GID_LblTagType, #UI_Inset, yTagType, 100, #UI_RowH, + T("Tags.Label.Type", "Type :")) +OptionGadget(#GID_OptTagLight, RightOf(#GID_LblTagType) + #UI_Inset, yTagType, 100, #UI_RowH, + T("Tags.Type.Light", "Léger")) +OptionGadget(#GID_OptTagAnnotated, RightOf(#GID_OptTagLight) + #UI_Inset, yTagType, 100, #UI_RowH, + T("Tags.Type.Annotated", "Annoté")) +SetGadgetState(#GID_OptTagAnnotated, 1) ; Par défaut : tag annoté + +; Cible du tag (commit/branche) +Define yTagTarget = BottomOf(#GID_OptTagLight) + #UI_Inset +TextGadget(#GID_LblTagTarget, #UI_Inset, yTagTarget, 100, #UI_RowH, + T("Tags.Label.Target", "Cible :")) +ComboBoxGadget(#GID_CbTagTarget, RightOf(#GID_LblTagTarget) + #UI_Inset, yTagTarget, + GadgetWidth(#GID_FrmCreateTag) - 120 - #UI_Inset*3, #UI_RowH) +AddGadgetItem(#GID_CbTagTarget, -1, "HEAD") +AddGadgetItem(#GID_CbTagTarget, -1, T("Tags.Target.SelectCommit", "Sélectionner un commit...")) +SetGadgetState(#GID_CbTagTarget, 0) + +; Message du tag (pour les tags annotés) +Define yTagMessage = BottomOf(#GID_CbTagTarget) + #UI_Inset +TextGadget(#GID_LblTagMessage, #UI_Inset, yTagMessage, 100, #UI_RowH, + T("Tags.Label.Message", "Message :")) +EditorGadget(#GID_EdTagMessage, #UI_Inset, BottomOf(#GID_LblTagMessage) + 5, + GadgetWidth(#GID_FrmCreateTag) - #UI_Inset*2, 80) + +; Boutons Créer/Annuler +Define yCreateButtons = BottomOf(#GID_EdTagMessage) + #UI_Inset +ButtonGadget(#GID_BtnApplyTag, #UI_Inset, yCreateButtons, 100, #UI_RowH, + T("Tags.Button.Create", "Créer")) +ButtonGadget(#GID_BtnCancelTag, RightOf(#GID_BtnApplyTag) + #UI_Inset, yCreateButtons, 100, #UI_RowH, + T("Tags.Button.Cancel", "Annuler")) +ButtonGadget(#GID_BtnCreateTag, RightOf(#GID_BtnCancelTag) + #UI_Inset, yCreateButtons, 140, #UI_RowH, + T("Tags.Button.NewTag", "+ Nouveau Tag")) +CloseGadgetList() + +; ---- Frame: Détails du tag sélectionné ---- +Define xDetails = RightOf(#GID_FrmCreateTag) + #UI_Inset +FrameGadget(#GID_FrmTagDetails, xDetails, yCreateTag, + GadgetWidth(#GID_Panel) - xDetails - #UI_Inset, + panelH - yCreateTag - #UI_Inset, + T("Tags.FrameDetails", "Détails du tag"), #PB_Frame_Container) + +EditorGadget(#GID_TxtTagDetails, xDetails + #UI_Inset, + yCreateTag + #UI_FrameHeaderH, + GadgetWidth(#GID_FrmTagDetails) - #UI_Inset*2, + GadgetHeight(#GID_FrmTagDetails) - #UI_FrameHeaderH - #UI_Inset, + #PB_Editor_ReadOnly | #PB_Editor_WordWrap) +CloseGadgetList() + + + ; --- End tabs --- CloseGadgetList() @@ -1924,8 +2103,8 @@ EndProcedure Main() ; IDE Options = PureBasic 6.21 (Windows - x64) -; CursorPosition = 771 -; FirstLine = 752 +; CursorPosition = 776 +; FirstLine = 721 ; Folding = --------- ; EnableThread ; EnableXP