public function addColumn($name, $title = null, $buttontext = null, $grid = null)
    {
        if ($grid === null) {
            $grid = $this->owner;
        }
        /** @type Grid $this->owner */
        /** @type Grid $grid */

        if (!is_array($buttontext)) {
            $buttontext = array('descr' => $buttontext);
        }
        if (!$buttontext['descr']) {
            $buttontext['descr'] = $title ?: ucwords(str_replace('_', ' ', $name));
        }

        $icon = '';
        if ($buttontext['icon']) {
            if ($buttontext['icon'][0] != '<') {
                $icon .= '<i class="icon-'.$buttontext['icon'].'"></i>';
            } else {
                $icon .= $buttontext['icon'];
            }
            $icon .= '&nbsp;';
        }

        $grid->addColumn('template', $name, $buttontext ?: $title);
        $grid->setTemplate(
            '<button type="button" class="atk-button-small pb_'.$name.'">'.
                $icon.$this->app->encodeHtmlChars($buttontext['descr']).
            '</button>'
        );

        $grid->columns[$name]['thparam'] .= ' style="width: 40px; text-align: center"';

        //$grid->js(true)->_selector('#'.$grid->name.' .pb_'.$name)->button();
        $t = $this->type;
        $grid->js('click')->_selector('#'.$grid->name.' .pb_'.$name)->univ()
            ->$t($title, array($this->getURL($name),
                $this->name.'_id' => $grid->js()->_selectorThis()->closest('tr')->attr('data-id'),
            ), $this->frame_options);

        return $this;
    }