01-08-2023, 06:56 PM | #1 |
Wizard
Posts: 1,000
Karma: 1183425
Join Date: Dec 2016
Location: Goiânia - Brazil
Device: iPad, Kindle Paperwhite
|
Call actions by their unique_name
Hi everyone.
Scenario: On a given plugin all the Menu actions are registered with a unique name. They all appear on Shortcuts Manager. Now, I want to call this actions from inside the plugin (presumably by their unique name), simulating a click on the menu. Is this possible? |
01-08-2023, 09:26 PM | #2 |
creator of calibre
Posts: 44,323
Karma: 23661992
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
|
Easiest way is to store your actions in a dict in your plugin keyed by the unique name.
|
01-09-2023, 06:04 AM | #3 | |
Wizard
Posts: 1,000
Karma: 1183425
Join Date: Dec 2016
Location: Goiânia - Brazil
Device: iPad, Kindle Paperwhite
|
Quote:
Thanks for the reply. But how would I call them? I don't see anything callable. Here is a real example: Plugin name: Skoob Sync Modules: main.py, ui.py. In the ui.py, we have a lot of actions created. Like this: Code:
# Add/remove books self.add_to_skoob = cm(self.m, _('&Add book'), image='add_to_skoob.png', tooltip=_('Add book to Skoob, on Reading shelf'), triggered=partial(self.tools.update_status, sync_option='add_to_skoob', shelf=None), unique_name='SkoobSync_Add') self.remove_from_skoob = cm(self.m, _('&Remove book'), image='remove_from_skoob.png', tooltip=_('Remove book from your shelves on Skoob'), triggered=partial(self.tools.update_status, sync_option='remove_from_skoob', shelf=None), unique_name='SkoobSync_Remove') self.m.addSeparator() Now, how would I call them from main.py? |
|
01-09-2023, 07:18 AM | #4 |
creator of calibre
Posts: 44,323
Karma: 23661992
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
|
self.add_to_skoob.trigger()
|
01-09-2023, 07:55 AM | #5 |
Wizard
Posts: 1,000
Karma: 1183425
Join Date: Dec 2016
Location: Goiânia - Brazil
Device: iPad, Kindle Paperwhite
|
I thought that there would be some way to call them using iactions, or something (based on their unique names*).
The problem is my ui.py is already importing a class from main.py, so I don't see how I could call 'add_to_skoob.trigger()' from there (it would be a circular reference). *P.S.: The unique names ares used only to create shortcuts? Last edited by thiago.eec; 01-09-2023 at 09:05 AM. Reason: typo |
01-09-2023, 08:37 AM | #6 |
creator of calibre
Posts: 44,323
Karma: 23661992
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
|
iactions['action name].add_to_skoob.trigger()
|
01-09-2023, 09:05 AM | #7 |
Wizard
Posts: 1,000
Karma: 1183425
Join Date: Dec 2016
Location: Goiânia - Brazil
Device: iPad, Kindle Paperwhite
|
That's exactly what I was expecting!
I've tried some combinations of this but nothing worked. For example, I can use this: Code:
gui.iactions.['Skoob Sync'].rebuild_menus() But when I try to call other actions, it gives me a KeyError: Code:
gui.iactions['SkoobSync_Add'].add_to_skoob.trigger() KeyError: 'SkoobSync_Add' ________________________________ Edit Never mind, I got it. I was trying to use the actions unique name, when I should use the plugin's combined with the actions. This works perfectly: Code:
gui.iactions['Skoob Sync'].add_to_skoob.trigger() Last edited by thiago.eec; 01-09-2023 at 09:14 AM. |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Actions and Column | Fynjisx | Library Management | 10 | 11-19-2022 08:57 AM |
Any way to automate Calibre actions? | bob.f | Library Management | 4 | 08-16-2021 08:07 AM |
V. 3.2.1: Actions toolbar incomplete | Leonatus | Calibre | 14 | 07-03-2017 02:38 PM |
actions toolbar | Seadevil | Library Management | 1 | 10-04-2016 06:03 PM |
Actions Interface | amfera | Library Management | 2 | 05-04-2012 09:05 AM |