Ensemble plugin.py
import gobject global model_no_animate, imol_animate, model_no_max_animate global animate_id if (have_coot_python): if coot_python.main_menubar(): menu = coot_menubar_menu("Ensembles") def animate_model(imol): global animate_id, model_no_animate model_no_max_animate = n_models(imol) model_no_animate = 1 def animate_single_model_func(imol, model_no_max_animate): while True: while gtk.events_pending(): gtk.main_iteration(False) global model_no_animate single_model_view_model_number(imol, model_no_animate) model_no_animate += 1 if model_no_animate > model_no_max_animate: model_no_animate = 1 return True animate_id = gobject.timeout_add(20, animate_single_model_func, imol, model_no_max_animate) add_simple_coot_menu_menuitem( menu, "Animate a model...", lambda func: molecule_chooser_gui("Ensemble model to animate:", lambda imol: animate_model(imol))) add_simple_coot_menu_menuitem( menu, "Stop model animation", lambda func: gobject.source_remove(animate_id)) def toolbar_model(imol): button_text = "Ensemble selection " + str(imol) + " " + molecule_name(imol) coot_toolbar_combobox(button_text, map(str, range(n_models(imol)+1)), [single_model_view_model_number, imol], tooltip=button_text) # [printf], tooltip=button_text) def toolbar_model_play(imol): global animate_id callback_func_str = "single_model_view_next_model_number(" + str(imol) + ")" coot_toolbar_button("First model", "single_model_view_model_number(" + str(imol) + ", 1)", icon_name="gtk-goto-first", tooltip="Jump to first model") coot_toolbar_button("Previous model", "single_model_view_prev_model_number(" + str(imol) + ")", icon_name="gtk-go-back", tooltip="Jump to previous model") coot_toolbar_button("Next model", "single_model_view_next_model_number(" + str(imol) + ")", icon_name="gtk-go-forward", tooltip="Jump to next model") coot_toolbar_button("Last model", "single_model_view_model_number(" + str(imol) + "," + str(n_models(imol)) + ")", icon_name="gtk-goto-last", tooltip="Jump to last model") coot_toolbar_button("All models", "single_model_view_model_number(" + str(imol) + ", 0)", icon_name="gtk-home", tooltip="All model") # we cannot add the stop button until we have the animate_id # so unfortunatley no button for this yet ## coot_toolbar_button("Animate models", ## "animate_model(" + str(imol) + ")", ## icon_name="gtk-media-play", ## tooltip="Animate the models") ## coot_toolbar_button("Stop animation", ## "gobject.source_remove(" + str(animate_id) + ")", ## icon_name="gtk-media-stop", ## tooltip="Stop animation of the models") add_simple_coot_menu_menuitem( menu, "Add model play to toolbar...", lambda func: molecule_chooser_gui("Ensemble model for toolbar selection:", lambda imol: toolbar_model_play(imol))) add_simple_coot_menu_menuitem( menu, "Add model selection toolbar...", lambda func: molecule_chooser_gui("Ensemble model for toolbar selection:", lambda imol: toolbar_model(imol)))
Load with:
Calculate->Run Script
Or put the file in e.g. .coot-preferences directory to make it permanent.