Intereting Posts
Разбиение массива на переменные в php PhpMailer бросает смертельные исключения Сканировать загруженные файлы для malwares под Windows с помощью PHP jQuery Ajax передаёт значение на php той же странице PHP: Как установить текущий рабочий каталог таким же, как каталог, выполняющий скрипт Получить текущую дату, учитывая часовой пояс в PHP? всплывающее окно facebook Sharer Как дважды отобразить запись данных на одной странице? Перенаправление на страницу входа вместо страницы индекса в Yii Отправка нескольких флажков Laravel 5.2 / login & / register не работает Как установить пакет Python для глобального использования всеми пользователями (включая www-data) В PHP: Как вызвать переменную $ внутри одной функции, которая была определена ранее внутри другой функции? Когда я создаю экземпляр класса в PHP, я получаю указатель на объект? PHP / MySQL. Существует ли функция mysql для определения того, существует ли хотя бы 2 определенных слова по меньшей мере в одном поле строки mysql

Как обновить панели wxAuiManager при обновлении их свойств в wxPHP?

Я создал простую систему wxAuiManager , содержащую восемь текстовых элементов управления, каждая из которых настроена как панель, причем все они расположены вокруг центрального статического элемента управления. У меня есть два, каждый из которых привязан к верхним, левым, правым и нижним направлениям. Эта часть работает нормально.

Теперь я хотел бы изменить свойства каждой панели, что, я думаю, можно сделать, сбросив связанный wxAuiPaneInfo . Например, я хотел бы добавить / удалить пиктограммы или увеличить значки. Я могу заставить это работать сам по себе, но перерисовать управляемое окно после сброса этих свойств оказалось немного сложной задачей.

Вот код, который я использую сейчас:

  // Get the currently selected pane $paneIndex = $this->getSelectedPaneIndex(); /* @var $paneInfo wxAuiPaneInfo */ $paneInfo = $this->getPaneInfoByIndex($paneIndex); // Set new flag true/false on paneinfo, using setter methods /* @var $ctrl wxCheckBox */ $ctrl = wxDynamicCast($event->GetEventObject(), "wxCheckBox"); $methods = $this->getPaneSetterMethods(); $method = $methods[$ctrl->GetName()]; $paneInfo->$method($ctrl->GetValue()); /* @var $window \wxTextCtrl */ /* @var $manager \wxAuiManager */ $window = $this->getManagedWindow()->getWindowByIndex($paneIndex); $manager = $this->getManagedWindow()->getAuiManager(); // This sort of works, but the pane sometimes ends up being moved $manager->DetachPane($window); $manager->AddPane($window, $paneInfo); // Now redraw the panes $this->getManagedWindow()->getAuiManager()->Update(); 

Как вы можете видеть, что я сейчас делаю, это отделить панель от менеджера, повторно добавить его, а затем заставить менеджера перерисовать все. Это нормально, за исключением того, что он часто переводит окно в новое положение. Он также не «чувствует себя хорошо» – изменение этих свойств должно быть осуществимо независимо от отсоединения панели.

Вместо этого я думал, что стоит попытаться скрыть и показать панель, но безрезультатно:

  // This does not work at all $paneInfo->Hide(); $paneInfo->Show(); 

Кроме того, я попытался использовать загрузчик панелей, хотя я не знаю, что такое «строка перспективы» – это не свойство управления, насколько я могу судить.

  // The string should be a "perspective string" $this->getManagedWindow()->getAuiManager()->LoadPaneInfo('auiPane0', $paneInfo); 

Итак, в резюме: у меня есть рабочее решение, но оно не идеально, поскольку оно переделывает рассматриваемую панель. Я полагаю, что я мог бы выработать правильную команду, чтобы повторно установить ее в том же месте, но мне все еще кажется, что я могу сделать это проще.

Есть идеи?


Обновление: я узнал, как захватить информацию о панели с помощью перспектив, что можно сделать так:

 $this->winSave = []; for($i = 0; $i <= 7; $i++) { $pi = $this->getPaneInfoByIndex($i); $persp = $this->getManagedWindow()->getAuiManager()->SavePaneInfo($pi); echo $persp . "\n"; $this->winSave[$i] = $persp; } 

Все, что мне нужно сделать, это захватить событие перемещения панели, а затем я могу использовать эти данные с помощью LoadPaneInfo() . Это несколько сложно: wxPHP, похоже, не дает достаточных констант wxEVT чтобы это разрешить. Я задал новый вопрос об этом.

Я продолжу попробовать что-то новое.

Я оставил эту задачу до ее завершения. Насколько я помню, не было простого способа обновить панели, и, хотя нынешний сопровождающий проделал некоторую работу над проектом, у них больше нет времени, чтобы работать над ним, и, таким образом, он стал несколько заброшен. Это может быть связано с трудностью отслеживания ошибок неудобной надежности или с проблемой получения скомпилированных бинарных файлов PHP в официальных репозиториях основных дистрибутивов Linux.

Я попытаюсь обновить этот ответ со связанным сообщением об ошибке для wxPHP, но пока может быть разумным, чтобы пользователи рассматривали это как «невозможное» на данный момент, так как я прилагал много усилий для того, чтобы попытаться реши это. Конечно, если кто-то найдет надежный способ достижения этой цели, добавьте свой собственный ответ, и я выберу его в предпочтении этому.