Dear Pascal,
I had a look at your script. I already have created a plugin for coot 1.1 that changes representations, using the python GTK. You can use it as a reference to change the part of your code that uses menus. Attached the script. Let me know if you have any questions. To unsubscribe from the COOT list, click the following link: |
import coot
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
from gi.repository import Gio
from gi.repository import GLib
import coot_gui_api
from typing import Callable, Any
def attach_module_menu_button(module_name: str) -> Gio.Menu:
menu = Gio.Menu.new()
popover = Gtk.PopoverMenu()
popover.set_menu_model(menu)
module_menu_button = Gtk.MenuButton(label=module_name)
module_menu_button.set_popover(popover)
coot_gui_api.main_toolbar().append(module_menu_button)
return menu
def add_simple_action_to_menu(menu: Gio.Menu, displayed_name: str, action_name: str, on_activate_callback: Callable[[Gio.SimpleAction,Any],Any]):
"""Creates and adds a stateless Gio.SimpleAction globally to the app and appends a corresponding menu item to the menu"""
app = coot_gui_api.application()
action = Gio.SimpleAction.new(action_name, None)
action.connect("activate", on_activate_callback)
app.add_action(action)
menu.append(displayed_name,f"app.{action_name}")
menu = attach_module_menu_button('Model repr')
main_menumodel = coot_gui_api.main_menumodel()
menu_label = "Model Representation"
menu.append("Do Something", "app.something")
def add_action(displayed_name,action_name,on_activate_callback):
add_simple_action_to_menu(menu, displayed_name, action_name, on_activate_callback)
# Or you would do app.something if you had attached the
def model_representation(mode: str):
active_atom = coot.active_residue_py()
imol = active_atom[0]
if mode == 'line':
coot.graphics_to_bonds_representation(imol)
coot.set_model_molecule_representation_style(imol, 0)
coot.set_bond_thickness(imol,1)
coot.close_all_generic_objects()
if mode == 'stick':
coot.graphics_to_bonds_representation(imol)
coot.set_model_molecule_representation_style(imol, 0)
coot.set_atom_radius_scale_factor(imol, 1)
coot.set_bond_thickness(imol,5)
coot.close_all_generic_objects()
if mode == 'ball and stick':
coot.graphics_to_bonds_representation(imol)
coot.set_model_molecule_representation_style(imol, 0)
coot.set_atom_radius_scale_factor(imol, 2.0)
coot.set_bond_smoothness_factor(3)
coot.set_bond_thickness(imol,4)
coot.close_all_generic_objects()
if mode == 'sphere':
coot.set_model_molecule_representation_style(imol, 1)
coot.set_bond_smoothness_factor(3)
coot.close_all_generic_objects()
if mode == 'ribbon':
coot.add_molecular_representation_py(imol,"//*", "RampChainsScheme", "Ribbon")
coot.graphics_to_ca_representation(imol)
coot.set_bond_thickness(imol,0)
coot.close_all_generic_objects()
if mode == 'ribbon by sec. struct.':
coot.add_molecular_representation_py(imol,"//*", "colorBySecondaryScheme", "Ribbon")
coot.graphics_to_ca_representation(imol)
coot.set_bond_thickness(imol,0)
coot.close_all_generic_objects()
if mode == 'gaussian surface':
coot.gaussian_surface(imol)
def model_representation_lines(mode: str, arg2):
model_representation('lines')
def model_representation_ball_and_stick(mode: str, arg2):
model_representation('ball and stick')
def model_representation_sphere(mode: str, arg2):
model_representation('sphere')
def model_representation_ribbon(mode: str, arg2):
model_representation('ribbon')
def model_representation_ribbon_sec(mode: str, arg2):
model_representation('ribbon by sec. struct.')
def model_representation_gaussian(mode: str, arg2):
model_representation('gaussian surface')
add_action('lines', 'lines_mode', model_representation_lines)
add_action('ball and stick', 'ball_and_stick_mode', model_representation_ball_and_stick)
add_action('sphere', 'sphere_mode', model_representation_sphere)
add_action('ribbon', 'ribbon_mode', model_representation_ribbon)
add_action('ribbon by sec. struct.', 'ribbon_by_sec_mode', model_representation_ribbon_sec)
add_action('gaussian surface', 'gaussian_surface_mode', model_representation_gaussian)Lucrezia Lucrezia Catapano, PhD (she/her) Postdoctoral Scientist Murshudov Group MRC Laboratory of Molecular Biology Francis Crick Avenue, Biomedical Campus, Cambridge CB2 0QH, UK.
To unsubscribe from the COOT list, click the following link: |
