Created GetRowByItem() to fix the Scrolling of the Object List to selected item under all platforms
+ temporary suppressed object/part mane editing under OSX
This commit is contained in:
parent
7e8d9c154d
commit
825f3641e2
4 changed files with 60 additions and 9 deletions
|
@ -1460,12 +1460,9 @@ void ObjectList::update_selections()
|
|||
select_items(sels);
|
||||
|
||||
if (GetSelection()) {
|
||||
const wxRect& sel_rc = GetItemRect(GetSelection());
|
||||
if (!sel_rc.IsEmpty()) {
|
||||
const int rc_h = sel_rc.height;
|
||||
const int displ = GetMainWindow()->GetClientRect().GetHeight()/(2*rc_h)+1;
|
||||
ScrollLines(int(sel_rc.y / rc_h - displ));
|
||||
}
|
||||
const int sel_item_row = m_objects_model->GetRowByItem(GetSelection());
|
||||
ScrollLines(sel_item_row - m_selected_row);
|
||||
m_selected_row = sel_item_row;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -108,6 +108,8 @@ class ObjectList : public wxDataViewCtrl
|
|||
bool m_parts_changed = false;
|
||||
bool m_part_settings_changed = false;
|
||||
|
||||
int m_selected_row = 0;
|
||||
|
||||
public:
|
||||
ObjectList(wxWindow* parent);
|
||||
~ObjectList();
|
||||
|
|
|
@ -953,6 +953,44 @@ void PrusaObjectDataViewModel::GetItemInfo(const wxDataViewItem& item, ItemType&
|
|||
type = itUndef;
|
||||
}
|
||||
|
||||
int PrusaObjectDataViewModel::GetRowByItem(const wxDataViewItem& item) const
|
||||
{
|
||||
if (m_objects.empty())
|
||||
return -1;
|
||||
|
||||
int row_num = 0;
|
||||
|
||||
for (int i = 0; i < m_objects.size(); i++)
|
||||
{
|
||||
row_num++;
|
||||
if (item == wxDataViewItem(m_objects[i]))
|
||||
return row_num;
|
||||
|
||||
for (int j = 0; j < m_objects[i]->GetChildCount(); j++)
|
||||
{
|
||||
row_num++;
|
||||
PrusaObjectDataViewModelNode* cur_node = m_objects[i]->GetNthChild(j);
|
||||
if (item == wxDataViewItem(cur_node))
|
||||
return row_num;
|
||||
|
||||
if (cur_node->m_type == itVolume && cur_node->GetChildCount() == 1)
|
||||
row_num++;
|
||||
if (cur_node->m_type == itInstanceRoot)
|
||||
{
|
||||
row_num++;
|
||||
for (int t = 0; t < cur_node->GetChildCount(); t++)
|
||||
{
|
||||
row_num++;
|
||||
if (item == wxDataViewItem(cur_node->GetNthChild(t)))
|
||||
return row_num;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
wxString PrusaObjectDataViewModel::GetName(const wxDataViewItem &item) const
|
||||
{
|
||||
PrusaObjectDataViewModelNode *node = (PrusaObjectDataViewModelNode*)item.GetID();
|
||||
|
|
|
@ -463,6 +463,7 @@ public:
|
|||
int GetVolumeIdByItem(const wxDataViewItem& item) const;
|
||||
int GetInstanceIdByItem(const wxDataViewItem& item) const;
|
||||
void GetItemInfo(const wxDataViewItem& item, ItemType& type, int& obj_idx, int& idx);
|
||||
int GetRowByItem(const wxDataViewItem& item) const;
|
||||
bool IsEmpty() { return m_objects.empty(); }
|
||||
|
||||
// helper method for wxLog
|
||||
|
@ -525,8 +526,14 @@ class PrusaBitmapTextRenderer : public wxDataViewCustomRenderer
|
|||
#endif //ENABLE_NONCUSTOM_DATA_VIEW_RENDERING
|
||||
{
|
||||
public:
|
||||
PrusaBitmapTextRenderer(wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
|
||||
int align = wxDVR_DEFAULT_ALIGNMENT
|
||||
PrusaBitmapTextRenderer(wxDataViewCellMode mode =
|
||||
#ifdef __WXOSX__
|
||||
wxDATAVIEW_CELL_INERT
|
||||
#else
|
||||
wxDATAVIEW_CELL_EDITABLE
|
||||
#endif
|
||||
|
||||
,int align = wxDVR_DEFAULT_ALIGNMENT
|
||||
#if ENABLE_NONCUSTOM_DATA_VIEW_RENDERING
|
||||
);
|
||||
#else
|
||||
|
@ -542,7 +549,14 @@ public:
|
|||
virtual bool Render(wxRect cell, wxDC *dc, int state);
|
||||
virtual wxSize GetSize() const;
|
||||
|
||||
bool HasEditorCtrl() const override { return true; }
|
||||
bool HasEditorCtrl() const override
|
||||
{
|
||||
#ifdef __WXOSX__
|
||||
return false;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
wxWindow* CreateEditorCtrl(wxWindow* parent,
|
||||
wxRect labelRect,
|
||||
const wxVariant& value) override;
|
||||
|
|
Loading…
Reference in a new issue