Как заново открыть закрытую панель wxAuiManager в wxPHP?

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

По умолчанию элементы моей панели имеют значок закрытия, и нажатие этой кнопки успешно закрывает панель, но теперь я заинтересован в восстановлении закрытых панелей. Это не так тривиально, как можно было бы ожидать.

Кажется, что по умолчанию закрытие окна разрушает его, но я считаю, что это можно предотвратить с помощью DestroyOnClose(), Я делаю инициализацию, как это, в контексте wxFrame:

$this->manager = new wxAuiManager($this, wxAUI_MGR_DEFAULT);

$textCtrl = new wxTextCtrl($this, -1, "Pane");
$paneInfo = new wxAuiPaneInfo();
$info->Top(); // Dock in the top direction
$info->PinButton(); // Give the pane a pin (or "undock") icon
$info->DestroyOnClose(false);
$info->Name('auiPane'); // Make this item individually addressable

$this->manager->AddPane($textCtrl, $paneInfo);

После закрытия панели, для восстановления я делаю это, в том же wxFrame контекст:

$info = $this->manager->GetPane('auiPane');
echo "Is shown: " . ($info->IsShown() ? 'yes' : 'no') . "\n";

// These two are probably unnecessary - grasping at straws here!
$info->Top();
$info->TopDockable();

// Show the pane again
$info->Show();

Текстовый вывод сначала показывает «нет» после его закрытия, а затем повторный запуск этого кода приводит к «да». Таким образом Show() кажется, что он имеет эффект, но он не возвращается к структуре wxAuiManager — я не вижу никакой разницы в содержимом фрейма.

Что мне не хватает? Я бегу PHP 5.5.9 на Ubuntu 14.04, с wxwidgets расширение специально скомпилировано.

1

Решение

Я понял это — довольно легко на самом деле. wxAuiPaneInfo метод Show() было правильно, но после этого менеджеру нужен Update() заставить его немедленно перерисовать:

// Show all available panes
for($i = 0; $i <= 7; $i++)
{
$info = $this->manager->GetPane('auiPane' . $i);
$info->Show();
}

// Redraw the managed window
$this->manager->Update();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]