Parameters
        ----------
        event : gtk.gdk.Event
            GTK mouse click event.
        shape : str
            Electrode shape identifier (e.g., `"electrode028"`).

        Returns
        -------
        gtk.Menu
            Context menu.


        .. versionchanged:: 0.13
            - Deprecate hard-coded commands (e.g., clear electrodes, clear
              routes).
            - Add anonymous global commands section at head of menu (i.e.,
              commands not specific to an electrode or route).
            - Add "Electrode" and "Route(s)" sub-menus.

def create_context_menu(self, event, shape):
        '''
        Parameters
        ----------
        event : gtk.gdk.Event
            GTK mouse click event.
        shape : str
            Electrode shape identifier (e.g., `"electrode028"`).

        Returns
        -------
        gtk.Menu
            Context menu.


        .. versionchanged:: 0.13
            - Deprecate hard-coded commands (e.g., clear electrodes, clear
              routes).
            - Add anonymous global commands section at head of menu (i.e.,
              commands not specific to an electrode or route).
            - Add "Electrode" and "Route(s)" sub-menus.
        '''
        routes = self.df_routes.loc[self.df_routes.electrode_i == shape,
                                    'route_i'].astype(int).unique().tolist()

        def _connect_callback(menu_item, command_signal, group, command, data):
            callback_called = threading.Event()

            def _callback(signal, widget, *args):
                if callback_called.is_set():
                    return
                callback_called.set()

                _L().debug('`%s`: %s %s %s', signal, group, command, data)
                gtk.idle_add(self.emit, command_signal, group, command, data)
            menu_item.connect('activate', ft.partial(_callback, 'activate'))
            menu_item.connect('button-press-event',
                              ft.partial(_callback, 'button-press-event'))

            if group is not None:
                menu_item.set_tooltip_text(group)

        menu = gtk.Menu()

        # Add menu items/groups for registered global commands.
        if self.global_commands:
            data = {'event': event.copy()}
            command_signal = 'global-command'

            for group, commands in self.global_commands.iteritems():
                for command, title in commands.iteritems():
                    menu_item_j = gtk.MenuItem(title)
                    menu.append(menu_item_j)

                    _connect_callback(menu_item_j, command_signal, group,
                                      command, data)

        # Add menu items/groups for registered electrode commands.
        if self.electrode_commands:
            separator = gtk.SeparatorMenuItem()
            menu.append(separator)

            # Add electrode sub-menu.
            menu_e = gtk.Menu()
            menu_head_e = gtk.MenuItem('_Electrode')
            menu_head_e.set_submenu(menu_e)
            menu_head_e.set_use_underline(True)
            menu.append(menu_head_e)

            command_signal = 'electrode-command'
            data = {'electrode_id': shape, 'event': event.copy()}

            for group, commands in self.electrode_commands.iteritems():
                for command, title in commands.iteritems():
                    menu_item_j = gtk.MenuItem(title)
                    menu_e.append(menu_item_j)
                    _connect_callback(menu_item_j, command_signal, group,
                                      command, data)

        # Add menu items/groups for registered route commands.
        if routes and self.route_commands:
            # TODO: Refactor electrode/route command menu code to reduce code
            # duplication (i.e., DRY).
            separator = gtk.SeparatorMenuItem()
            menu.append(separator)

            # Add route sub-menu.
            menu_r = gtk.Menu()
            menu_head_r = gtk.MenuItem('_Route(s)')
            menu_head_r.set_submenu(menu_r)
            menu_head_r.set_use_underline(True)
            menu.append(menu_head_r)

            command_signal = 'route-command'
            data = {'route_ids': routes, 'event': event.copy()}
            for group, commands in self.route_commands.iteritems():
                for command, title in commands.iteritems():
                    menu_item_j = gtk.MenuItem(title)
                    menu_r.append(menu_item_j)

                    _connect_callback(menu_item_j, command_signal, group,
                                      command, data)

        menu.show_all()
        return menu