wxAuiNotebook: error after page resize

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
xttz
In need of some credit
In need of some credit
Posts: 4
Joined: Tue Jan 16, 2018 8:26 pm

wxAuiNotebook: error after page resize

Post by xttz »

Если развернуть на весь экран окно программы и после перенести одну из страниц на вторую половину, получаем такое разделение по ширине в скобках указана текущая ширина AuiNotebook:
Maximize.PNG
Если после этого нажать кнопку восстановления размера то страница с левой части займет все простаранство и получаю ошибку, т.к. ширина страниц с правой стороны стала 0.
error1.PNG
error.PNG
Как это можно исправить?

Пробовал принудительно изменять размеры страницам, не помогает.

Code: Select all

void TestAUIFrame::OnResize(wxSizeEvent& event)
{
    *TextLog << "Resize Main\n";
    //Freeze();
    for(uint32_t i = 0; i < AuiNotebook1->GetPageCount(); i++ )
    {
        wxWindow * obj =  AuiNotebook1->GetPage(i);
        obj->SetSize(100, obj->GetSize().GetHeight());
    }
    //Thaw();
    //Update();
}
Если смотреть лог то сначали идет изменение ширины в 100px, но потом оно забивается теми размерами которые устанавливает wxAuiNotebook
Resize Main
resize: ID_PANEL1 (100) - P1 width: 100 (498)
resize: ID_PANEL2 (101) - P2 width: 100 (498)
resize: ID_PANEL3 (102) - P3 width: 100 (498)
resize: ID_PANEL1 (100) - P1 width: 0 (498)
resize: ID_PANEL2 (101) - P2 width: 0 (498)
resize: ID_PANEL3 (102) - P3 width: 484 (498)
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: wxAuiNotebook: error after page resize

Post by ONEEYEMAN »

Доброго времени суток,
По стандарту -
Версия wx?
Платформа?

Я так понимаю что изначально окно не масимизировано?
Какое разрешение у монитора? Он один?
Окно максимизируется или разврачивается на весь экран?
Если присутствут 2 монитора - все происходит только на одном? Какое его разрешение?

Пример проверяли? Там также работает или все в порядке?

Спасибо.
xttz
In need of some credit
In need of some credit
Posts: 4
Joined: Tue Jan 16, 2018 8:26 pm

Re: wxAuiNotebook: error after page resize

Post by xttz »

ONEEYEMAN wrote: Sun Jul 24, 2022 5:48 am Доброго времени суток,
По стандарту -
Версия wx?
Платформа?

Я так понимаю что изначально окно не масимизировано?
Какое разрешение у монитора? Он один?
Окно максимизируется или разврачивается на весь экран?
Если присутствут 2 монитора - все происходит только на одном? Какое его разрешение?

Пример проверяли? Там также работает или все в порядке?

Спасибо.

Версия: 3.1.0
Платформа: windows

Разворачивать не обязательно, достаточно сделать Split страниц через перетаскивание внутри AuiNotebook1, тогда при изменении размера основного окна ширина второй по порядку страницы остается постоянной, а вот первая уменьшается до 0, и судя по всему ошибка возникает когда ширина таба вверху становится равно нулю, т.к. иконка таба(хоть ее и нет) становится тоже шириной ноль (три вложения демонстрируют это последовательно). А как перерисовать таб я пока не понял. Вроде есть класс wxAuiTabContainer который за это должен отвечать, но как использовать объект этого класса непонятно т.к. он не принимает ничего в конструкторе.
split.PNG
split.PNG (26.84 KiB) Viewed 5090 times
resize.PNG
resize.PNG (16.96 KiB) Viewed 5090 times
error.PNG
error.PNG (24.27 KiB) Viewed 5090 times
Kvaz1r
Super wx Problem Solver
Super wx Problem Solver
Posts: 357
Joined: Tue Jun 07, 2016 1:07 pm

Re: wxAuiNotebook: error after page resize

Post by Kvaz1r »

А есть минимальный пример кода для воспроизведения поведения?
xttz
In need of some credit
In need of some credit
Posts: 4
Joined: Tue Jan 16, 2018 8:26 pm

Re: wxAuiNotebook: error after page resize

Post by xttz »

Kvaz1r wrote: Sun Jul 24, 2022 12:50 pm А есть минимальный пример кода для воспроизведения поведения?
Да, во вложении.
testAui.rar
(12.72 KiB) Downloaded 102 times
Переменная в системе. которая используется в настройках проекта
wx.PNG
wx.PNG (7.37 KiB) Viewed 5081 times
Заметил еще, что если перетаскивать одну из вкладок в левую часть окна, то ширина этой вкладки остается фиксированой, а уменьшается та что оказалась справа и ошибки не возникает. Но не совсем понятно почему разработчики не сделали пропорциональное уменьшение ширины, а судя по всему идет привязка к последней активной вкладке при разделении. Обработчик в auibook.cpp минимален, видимо изменение размеров отдано на откуп куда-то ниже, от этого и глюки.

Code: Select all

void wxAuiNotebook::OnSize(wxSizeEvent& evt)
{
    UpdateHintWindowSize();
	
    evt.Skip();
}
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: wxAuiNotebook: error after page resize

Post by ONEEYEMAN »

Доброго времени суток,
Эта библиотека (AUI) не разрабатывалась теми кто поддерживает wxWIdgets.
Как только AUI включили, компания разработчик отказалась ее поддерживать.

Я не удивлюсь если через какое-то время AUI будет дропнут и его заменят на что-то более лучшее (еси к этому времени не найдетсяф кто-то, кто будет эту часть поддерживаь).

Спасибо.
Kvaz1r
Super wx Problem Solver
Super wx Problem Solver
Posts: 357
Joined: Tue Jun 07, 2016 1:07 pm

Re: wxAuiNotebook: error after page resize

Post by Kvaz1r »

Насколько я могу судить - это баг, так что подготовьте минимально воспроизводимый пример (строчек так на 40-50) и репорьте. Недавно были какие-то тикеты/PR связанные с AUI, так что небольшой шанс есть.
xttz
In need of some credit
In need of some credit
Posts: 4
Joined: Tue Jan 16, 2018 8:26 pm

Re: wxAuiNotebook: error after page resize

Post by xttz »

обновил wxWidget до 3.2.0, вкладки при изменении размера окна ведут себя так же, но ошибку теперь не выдают, уже радует.

по факту вкладки являются панелями скрытого внутри wxNotebook менеджера:

Code: Select all

class WXDLLIMPEXP_AUI wxAuiNotebook : public wxNavigationEnabled<wxBookCtrlBase>
{
...
	protected:
    	wxAuiManager m_mgr;
...
}

Code: Select all

void wxAuiNotebook::Split(size_t page, int direction)
{
...
	m_mgr.AddPane(new_tabs, paneInfo, mouse_pt);
	m_mgr.Update();
...
}
и соответственно копируют поведение этого класса, а в нем пропорциональное изменение размера выполняется только если две панели находятся в одном расположении (Direction).
Как появится время покопаюсь в этом направлении
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: wxAuiNotebook: error after page resize

Post by ONEEYEMAN »

Доброго времени суток,
Это у Вас опечатка по поводу wxNotebook и имелся в виду wxAuiNotebook?

Спасибо.
Post Reply