Bonjour,
tout est dans le titre...si ce n'est que la réponse est sans doute la même qu'avec Basic.
J'ai essayé de connecter un XMenuListener à un objet XMenuBar, mais ce listener ne récupère aucun clic de souris sur un menu.
J'ai également vu les XItemListener et XActionListener qui semblent prometteurs, mais je ne sais pas sur quel objet les brancher.
Toute piste serait la bienvenue, ayant quand même une légère préférence pour XActionListener que j'ai déjà utilisé.
En attendant j'ai associé les menus aux macros par l'intermédiaire de la personnalisation de AOo-LOo, mais on ne sait pas quel menu a déclenché l'évènement ...
D'avance merci à ceux qui voudront bien se penché sur mon problème.
A plus.
[Résolu][Python]Intercepter évènement menu
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- InconditiOOnnel
- Messages : 839
- Inscription : 10 janv. 2009 08:05
[Résolu][Python]Intercepter évènement menu
Dernière modification par joel275 le 28 mars 2019 17:12, modifié 1 fois.
A jour de LibreOffice et de Ubuntu
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Python]Intercepter évènement menu
Bonjour Joël,
Comment crées-tu ces éléments de menu : par extension ou par macro "à la volée" ?
Cordialement.
Comment crées-tu ces éléments de menu : par extension ou par macro "à la volée" ?
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- InconditiOOnnel
- Messages : 839
- Inscription : 10 janv. 2009 08:05
Re: [Python]Intercepter évènement menu
Merci de t'intéresser à mon cas.
J'ai construis 'à la main' le menu (avec ses sous- menus) dans un document Writer que j'ai enregistré comme modèle. Dans les documents créés à partir de ce modèle, j'aimerais savoir quel menu a été cliqué pour regrouper dans une même macro tout un tas d'actions qui se ressemblent.
Je joins à tout hasard, le document en question; le menu qui m'intéresse est celui nommé JDMath (les macros associées ne sont pas dans le document)
A plus.
J'ai construis 'à la main' le menu (avec ses sous- menus) dans un document Writer que j'ai enregistré comme modèle. Dans les documents créés à partir de ce modèle, j'aimerais savoir quel menu a été cliqué pour regrouper dans une même macro tout un tas d'actions qui se ressemblent.
Je joins à tout hasard, le document en question; le menu qui m'intéresse est celui nommé JDMath (les macros associées ne sont pas dans le document)
A plus.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
A jour de LibreOffice et de Ubuntu
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Python]Intercepter évènement menu
Ci-joint un exemple. J'ai ajouté l'équivalent en basic, à toute fin utile.
Le code en python :
Ce code doit être amélioré, il n'enregistre pas le listener pour les sous-menus.
Cordialement.
Le code en python :
Code : Tout sélectionner
import unohelper
from com.sun.star.awt import XMenuListener
class MenuListener(unohelper.Base, XMenuListener):
def __init__(self, ctx, topwindow):
# nécessaire uniquement pour le msgbox
self.ctx = ctx
self.topwindow = topwindow
# XMenuListener
def itemHighlighted(self, menuevent):
pass
def itemSelected(self, menuevent):
menuid = menuevent.MenuId
source = menuevent.Source
label = source.getItemText(menuid)
msgbox(self.ctx, self.topwindow, "L'élément <{}> a été sélectionné.".format(label))
def itemActivated(self, menuevent):
pass
def itemDeactivated(self, menuevent):
pass
def disposing(self, source):
pass
def addmenulistener(event=None):
ctx = XSCRIPTCONTEXT.getComponentContext()
doc = XSCRIPTCONTEXT.getDocument()
frame = doc.CurrentController.Frame
window = frame.ContainerWindow
menulistener = MenuListener(ctx, window)
layoutmanager = frame.LayoutManager
menu_url = 'private:resource/menubar/menubar'
menubar = layoutmanager.getElement(menu_url).XMenuBar
id_jdmath = menubar.getItemId(menubar.ItemCount -1)
popumenu = menubar.getPopupMenu(id_jdmath)
popumenu.addMenuListener(menulistener)
menubar.setPopupMenu(id_jdmath, popumenu)
msgbox(ctx, window, "XMenuListener ajouté à JDMath (Python)")
def msgbox(ctx, topwindow, message):
smgr = ctx.ServiceManager
tk = smgr.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx)
box = tk.createMessageBox(topwindow, 0, 1, "Message", message)
return box.execute()
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- InconditiOOnnel
- Messages : 839
- Inscription : 10 janv. 2009 08:05
Re: [Python]Intercepter évènement menu
Bonjour,
un grand merci pour ta réponse rapide et efficace.
J'essaie de comprendre, d'adapter pour tous les sous-menus et si je n'ai pas d'autres questions, je passe le sujet en résolu, ce qui peut sans doute me prendre plusieurs jours.
A plus.
un grand merci pour ta réponse rapide et efficace.
J'essaie de comprendre, d'adapter pour tous les sous-menus et si je n'ai pas d'autres questions, je passe le sujet en résolu, ce qui peut sans doute me prendre plusieurs jours.
A plus.
A jour de LibreOffice et de Ubuntu
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Python]Intercepter évènement menu
Vite fait pour les sous-menus, et à condition qu'il n'y ait pas de sous-niveaux supplémentaires
PS. Testé sur LibreOffice uniquement.
PS. Testé sur LibreOffice uniquement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- InconditiOOnnel
- Messages : 839
- Inscription : 10 janv. 2009 08:05
Re: [Python]Intercepter évènement menu
Re,
à grands coups de xRay j'avançais tranquillement vers la solution.....
J'espère ne pas avoir abusé de ton temps. encore merci.
Peut-être faudrait-il mettre ce code dans les suprêmes de code pour le retrouver plus facilement?
A plus.
à grands coups de xRay j'avançais tranquillement vers la solution.....
J'espère ne pas avoir abusé de ton temps. encore merci.
Peut-être faudrait-il mettre ce code dans les suprêmes de code pour le retrouver plus facilement?
A plus.
A jour de LibreOffice et de Ubuntu
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Résolu][Python]Intercepter évènement menu
Je n'interviens que quand j'ai un peu de temps, donc pas de souci .
En revanche j'ai vu que le code proposé semblait ne pas fonctionner avec OpenOffice, et là je n'ai plus d'ordinateur sous la main avant le week-end...
En revanche j'ai vu que le code proposé semblait ne pas fonctionner avec OpenOffice, et là je n'ai plus d'ordinateur sous la main avant le week-end...
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)