Z_debug

аддоны - готовые PHP скрипты для решения различных задач
zazaka
Аватара пользователя
Ответственный глюкогенератор
 
Сообщения: 98
Поблагодарили: 2 раза
Просто класс для дебага динамических значений переменных во время выполнения скриптов

(замена вывода информации вместо pre()  выводит информацию на отдельную форму или на любую переданную в класс форму)

phpqt Код:
class Debyg extends QMainWindow
{
    private $array_param = array();
    private $debyger = 1; // on - 1  off - 0
    private $dy = 12; // шаг строк
    private $tip_form = 0; // на какую форму выводить 1- новую 0 - ту что передали

    private $form; // форма дял вывода

    private $name_form; // имя формы

    public function __construct($name_form = '', $forms = '')
    {
        parent::__construct();
        $this->name_form = $name_form; //сохраним имя формы

        if ($forms != '') {
            $this->form = $forms; //сохраним переданную форму
        } else {
            $this->tip_form = 1;
        }

        if ($this->debyger && $this->tip_form == 1) {
            $this->form = new QMainWindow;
            $this->form->centralWidget = new QWidget;
            $this->form->windowTitle = 'дебагер ' . $this->name_form;
            $this->form->show();
        }

    }

    public function add($obj, $param)//
    {
        if (!$this->debyger) return;
        if (!isset($obj)) {
            echo('Передан не существующий элемент: <b>' . $param . '<b>');
            return;
        }
        //  сгенерим имя обекта и определим его тип
        $temp = $this->get_name_and_tip($obj, $param);
        $name_obj = $temp['name'];
        $tip_obj = $temp['tip'];

        // если уже есть в базе обьект  то сразу показать
        if (array_key_exists($name_obj, $this->array_param)) {
            $this->display($obj, $name_obj, $param);
        } else {
            // если нет обьект  то создать и  показать
            $this->create($name_obj, $tip_obj);
            $this->display($obj, $name_obj, $param);
        }

    }

    private function get_name_and_tip($obj, $param)
    {
        $rez = array();
        if (is_object($obj)) {
            $rez['name'] = $obj->uid . '_' . $param;
            $rez['tip'] = 'obj';
            return ($rez);
        }
        if (is_array($obj)) {
            $rez['name'] = 'array_' . $param;
            $rez['tip'] = 'array';
            return ($rez);
        }
        $rez['name'] = $param;
        $rez['tip'] = 'val';

        return ($rez);
    }

    private function create($name_obj, $tip_obj)
    {
        $all = count($this->array_param);

        $ladel = new QLabel($this->form);
        $ladel->objectName = $name_obj;
        $ladel->x = 5;
        $ladel->y = $this->dy * $all;
        $ladel->width = 500;

        $this->array_param[$name_obj]['obj'] = $ladel;
        $this->array_param[$name_obj]['tip'] = $tip_obj;
    }


    private function display($obj, $name_obj, $param)
    {
        if ($this->debyger) {//&& isset($this->array_param[$name_obj]['obj'])
            $text = $param . ' = ';
            switch ($this->array_param[$name_obj]['tip']) {
                case 'obj': {
                    $text .= '<b>' . $obj->$param . '</b> -' . $obj;
                    break;
                }

                case 'val': {
                    $text .= '<b>' . $obj . '</b>';
                    break;
                }

            }
            $this->array_param[$name_obj]['obj']->text = $text;
            $this->array_param[$name_obj]['obj']->show();
        }

    }
}


пример использования 

phpqt Код:


class MainWindow extends QMainWindow
{
    private $centralWidget;

    protected $array_object = array(); /// массив с элементами
    protected $debyg;

    private $pole_x = 50;// размер поля Х в шагах
    private $pole_y = 50; // размер поля У в шагах
    private $shag = 5;    // шаг в пикселях
    //private $razmer_img=16; // размер квадрактной картинки

    private $speed = 35; // скорость обработки циктов (скорость движения)


    public function __construct()
    {
        parent::__construct();
        $this->debyg = new debyg('главная ФОРМА',$this);
        $this->initComponents();

    }

    private function initComponents()
    {
        $this->centralWidget = new QWidget;
        $razm_x = $this->shag * $this->pole_x;// ---
        $razm_y = $this->shag * $this->pole_y;/// |||


        $this->test();
        $this->resize($razm_x, $razm_y);
        $this->minimumWidth = $razm_x;
        $this->minimumHeight = $razm_y;
        $this->maximumWidth = $razm_x;
        $this->maximumHeight = $razm_y;


        $ladel = new QLabel($this);
        $ladel->text = 'text 1111';
        $ladel->objectName = 'objectName 2222';
        $ladel->x = 16;
        $ladel->y = 72;
        $ladel->width = 352;



        $this->debyg->add($ladel, 'text'); // объект - параметр (название)
        $this->debyg->add($ladel, 'objectName');
        //$this->debyg->add($ladel, 'width');

        $rr = 5;

            $this->debyg->add($rr, 'переменная rr');// переменная  - название


        $this->debyg->add($this->shag, 'шаг');
        //$this->debyg->add($rt, 'rrrrrr');
        //$this->debyg->add($rtr, '');

        $timer = new QTimer;
        $timer->interval = $this->speed;

        $timer->onTimeout = function() {
            $this->render();
        };
        $timer->start(); // запускаем таймер
    }
// рисуем стрелку
    private function render()
    {
        $this->shag++;
        $this->debyg->add($this->shag, 'шаг');
    }
    private function test()
    {
        $ladel = new QLabel($this);
        $ladel->text = 'text 1111';
        $ladel->objectName = 'objectName 2222';
        $ladel->x = 16;
        $ladel->y = 72;
        $ladel->width = 352;
        $this->array_object['test']['label'] = $ladel;

    }
}

$mainWindow = new MainWindow;
$mainWindow->show();

qApp::exec();  


Изображение
Последний раз редактировалось zazaka 21 мар 2016, 15:40, всего редактировалось 4 раза.
Унабле то лоад дынамиц либрары

WxMaper
Аватара пользователя
Администратор
 
Сообщения: 92
Благодарил (а): 8 раз
Поблагодарили: 4 раза
Что с кодом? =) откуда воткнул :)

zazaka
Аватара пользователя
Ответственный глюкогенератор
 
Сообщения: 98
Поблагодарили: 2 раза
это форум так.. 
выбрал оформление QTphp 
Унабле то лоад дынамиц либрары


Вернуться в Аддоны

Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость
cron