Jump to content
Korean Random

ContextMenu на ПКМ


Go to solution Solved by SoprachevAK,

Recommended Posts

А есть может у кого нибудь пример вызовы ContextMenu по нажатию ПКМ со своими опциями. 
В исходниках понятное дело есть, но там настолько многоуровневые абстракции, что это надо полноценный рабочий день потратить чтоб вникнуть, а как будто бы, оно не должно быть уж слишком сложно

Link to comment
Short link
Share on other sites

11.08.2024 в 06:52, SoprachevAK сказал:

А есть может у кого нибудь пример вызовы ContextMenu по нажатию ПКМ со своими опциями. 
В исходниках понятное дело есть, но там настолько многоуровневые абстракции, что это надо полноценный рабочий день потратить чтоб вникнуть, а как будто бы, оно не должно быть уж слишком сложно

Поищи примеры с 

App.contextMenuMgr.show

и копай в эту сторону.

Link to comment
Short link
Share on other sites

17.08.2024 в 20:21, Valberton сказал:

Поищи примеры с 

App.contextMenuMgr.show

и копай в эту сторону.

Ну я сюда и копал
11 лет назад было легко и понятно, а теперь, как будто бы, каждое контекстное меню – отдельная флешка, которые надо так же регестировать, а потом показывать по их названию

Аналогично App.loadView() с обычными флешками.

Но это не точно, как именно их регистрируют я не нашел 

Link to comment
Short link
Share on other sites

  • 5 weeks later...
  • Solution

А вот и разгадка как отображать контекстное меню

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');


image.png.41b6f04890cf7194dc59d9aecc8a7f63.png

ps. Чтоб во флеше проверить мышку на НЕ ЛКМ, надо !event.buttonDown

Edited by SoprachevAK
  • Upvote 4
Link to comment
Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...