ObjectList: Smart update of the min height in respect to the items count.
Min 7 items and max 15 items
This commit is contained in:
parent
40fb39f5e1
commit
0331bcefd9
2 changed files with 29 additions and 10 deletions
|
@ -260,13 +260,27 @@ ObjectList::~ObjectList()
|
||||||
|
|
||||||
void ObjectList::set_min_height()
|
void ObjectList::set_min_height()
|
||||||
{
|
{
|
||||||
/* Temporary workaround for the correct behavior of the Scrolled sidebar panel:
|
if (m_items_count == size_t(-1))
|
||||||
* change min hight of object list to the normal min value (20 * wxGetApp().em_unit())
|
m_items_count = 7;
|
||||||
* after first whole Mainframe updating/layouting
|
int list_min_height = lround(2.25 * (m_items_count + 1) * wxGetApp().em_unit()); // +1 is for height of control header
|
||||||
*/
|
this->SetMinSize(wxSize(1, list_min_height));
|
||||||
const int list_min_height = 20 * wxGetApp().em_unit();
|
}
|
||||||
if (this->GetMinSize().GetY() > list_min_height)
|
|
||||||
this->SetMinSize(wxSize(-1, list_min_height));
|
void ObjectList::update_min_height()
|
||||||
|
{
|
||||||
|
wxDataViewItemArray all_items;
|
||||||
|
m_objects_model->GetAllChildren(wxDataViewItem(nullptr), all_items);
|
||||||
|
size_t items_cnt = all_items.Count();
|
||||||
|
if (items_cnt < 7)
|
||||||
|
items_cnt = 7;
|
||||||
|
else if (items_cnt >= 15)
|
||||||
|
items_cnt = 15;
|
||||||
|
|
||||||
|
if (m_items_count == items_cnt)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_items_count = items_cnt;
|
||||||
|
set_min_height();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -274,7 +288,7 @@ void ObjectList::create_objects_ctrl()
|
||||||
{
|
{
|
||||||
/* Temporary workaround for the correct behavior of the Scrolled sidebar panel:
|
/* Temporary workaround for the correct behavior of the Scrolled sidebar panel:
|
||||||
* 1. set a height of the list to some big value
|
* 1. set a height of the list to some big value
|
||||||
* 2. change it to the normal min value (20 * wxGetApp().em_unit()) after first whole Mainframe updating/layouting
|
* 2. change it to the normal(meaningful) min value after first whole Mainframe updating/layouting
|
||||||
*/
|
*/
|
||||||
SetMinSize(wxSize(-1, 3000));
|
SetMinSize(wxSize(-1, 3000));
|
||||||
|
|
||||||
|
@ -2989,6 +3003,8 @@ void ObjectList::part_selection_changed()
|
||||||
else if (update_and_show_layers)
|
else if (update_and_show_layers)
|
||||||
wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " ");
|
wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " ");
|
||||||
|
|
||||||
|
update_min_height();
|
||||||
|
|
||||||
Sidebar& panel = wxGetApp().sidebar();
|
Sidebar& panel = wxGetApp().sidebar();
|
||||||
panel.Freeze();
|
panel.Freeze();
|
||||||
|
|
||||||
|
@ -4463,9 +4479,9 @@ void ObjectList::update_item_error_icon(const int obj_idx, const int vol_idx) co
|
||||||
|
|
||||||
void ObjectList::msw_rescale()
|
void ObjectList::msw_rescale()
|
||||||
{
|
{
|
||||||
|
set_min_height();
|
||||||
|
|
||||||
const int em = wxGetApp().em_unit();
|
const int em = wxGetApp().em_unit();
|
||||||
// update min size !!! A width of control shouldn't be a wxDefaultCoord
|
|
||||||
SetMinSize(wxSize(1, 15 * em));
|
|
||||||
|
|
||||||
GetColumn(colName )->SetWidth(20 * em);
|
GetColumn(colName )->SetWidth(20 * em);
|
||||||
GetColumn(colPrint )->SetWidth( 3 * em);
|
GetColumn(colPrint )->SetWidth( 3 * em);
|
||||||
|
|
|
@ -197,6 +197,8 @@ private:
|
||||||
SettingsBundle m_freq_settings_sla;
|
SettingsBundle m_freq_settings_sla;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
size_t m_items_count { size_t(-1) };
|
||||||
|
|
||||||
inline void ensure_current_item_visible()
|
inline void ensure_current_item_visible()
|
||||||
{
|
{
|
||||||
if (const auto &item = this->GetCurrentItem())
|
if (const auto &item = this->GetCurrentItem())
|
||||||
|
@ -208,6 +210,7 @@ public:
|
||||||
~ObjectList();
|
~ObjectList();
|
||||||
|
|
||||||
void set_min_height();
|
void set_min_height();
|
||||||
|
void update_min_height();
|
||||||
|
|
||||||
std::map<std::string, wxBitmap> CATEGORY_ICON;
|
std::map<std::string, wxBitmap> CATEGORY_ICON;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue