SoprachevAK Posted August 11 Share Posted August 11 А есть может у кого нибудь пример вызовы ContextMenu по нажатию ПКМ со своими опциями. В исходниках понятное дело есть, но там настолько многоуровневые абстракции, что это надо полноценный рабочий день потратить чтоб вникнуть, а как будто бы, оно не должно быть уж слишком сложно @ Quote Link to comment Short link Share on other sites More sharing options...
Valberton Posted August 17 Share Posted August 17 11.08.2024 в 06:52, SoprachevAK сказал: А есть может у кого нибудь пример вызовы ContextMenu по нажатию ПКМ со своими опциями. В исходниках понятное дело есть, но там настолько многоуровневые абстракции, что это надо полноценный рабочий день потратить чтоб вникнуть, а как будто бы, оно не должно быть уж слишком сложно Поищи примеры с App.contextMenuMgr.show и копай в эту сторону. @ Quote Link to comment Short link Share on other sites More sharing options...
SoprachevAK Posted August 19 Author Share Posted August 19 17.08.2024 в 20:21, Valberton сказал: Поищи примеры с App.contextMenuMgr.show и копай в эту сторону. Ну я сюда и копал 11 лет назад было легко и понятно, а теперь, как будто бы, каждое контекстное меню – отдельная флешка, которые надо так же регестировать, а потом показывать по их названию Аналогично App.loadView() с обычными флешками. Но это не точно, как именно их регистрируют я не нашел @ Quote Link to comment Short link Share on other sites More sharing options...
Solution SoprachevAK Posted September 18 Author Solution Share Posted September 18 (edited) А вот и разгадка как отображать контекстное меню 1. Наследуем класс от AbstractContextMenuHandler 2. Инициализируем хендлеры функций по паре ИмяКнопки: имя_функции 3. Реализуем _generateOptions (используем self._makeItem и self._makeSeparator для удобства) 4. Регистируем наш хендлен по уникальному названию 5. Вызываем по названию из питона или флеша Кнопке можно передать произвольный текст, его цвет, включенность. Но икноку можно установить только одну из доступных в клиенте, свою нельзя. (Там в глубине реализации они берутся по номеру кадра из одной большой анимации) Код: from gui.Scaleform.framework.managers import context_menu from gui.Scaleform.framework.managers.context_menu import AbstractContextMenuHandler DEMO_CONTEXT_MENU = 'DEMO_CONTEXT_MENU' class BUTTONS(object): TEST1 = 'TEST1' TEST2 = 'TEST2' class DemoContextMenuHandler(AbstractContextMenuHandler): def __init__(self, cmProxy, ctx=None): super(WidgetContextMenuHandler, self).__init__(cmProxy, ctx, { BUTTONS.TEST1: 'onClickTest1', BUTTONS.TEST2: 'onClickTest2' }) @staticmethod def register(): context_menu.registerHandlers(*[(DEMO_CONTEXT_MENU, DEMOContextMenuHandler)]) def _generateOptions(self, ctx=None): options = [] options.append(self._makeItem(BUTTONS.TEST1, 'Test 1 label')) options.append(self._makeSeparator()) options.append(self._makeItem(BUTTONS.TEST2, 'Test 2 label', { 'textColor': 13347959, 'iconType': 'addToSquad', 'enabled': True })) return options def onClickTest1(self): print('onClickTest1') def onClickTest2(self): print('onClickTest2') DemoContextMenuHandler.register() Вызываем из питона: from helpers import dependency from skeletons.gui.app_loader import IAppLoader appLoader = dependency.instance(IAppLoader) # type: IAppLoader app = appLoader.getApp() if app: app.contextMenuManager.show('DEMO_CONTEXT_MENU', None) Из флеша: App.contextMenuMgr.show('DEMO_CONTEXT_MENU'); ps. Чтоб во флеше проверить мышку на НЕ ЛКМ, надо !event.buttonDown Edited September 19 by SoprachevAK 5 @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.