Я экспериментирую с 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
расширение специально скомпилировано.
Я понял это — довольно легко на самом деле. 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();
Других решений пока нет …