Нужно поднять вверх или опустить вниз wxPGProperty в wxPropertyGrid.
На wx3.0.4
Удаляю и сразу вставляю wxPGProperty в обработчике кнопки всё нормально опускается-поднимается вверх-низ, но когда кликаю на wxPGProperty получаю матюки:
Code: Select all
../src/propgrid/propgrid.cpp(4140): assert "m_wndEditor == __null" failed in DoSelectProperty().
Code: Select all
../src/common/wincmn.cpp(477): assert "GetEventHandler() == this" failed in ~wxWindowBase(): any pushed event handlers must have been removed
При закрытии
Code: Select all
Аварийный останов (стек памяти сброшен на диск)
Компилируемый код для демонстрации бага:
Code: Select all
#include <wx/app.h>
#include <wx/frame.h>
#include <wx/button.h>
#include <wx/msgdlg.h>
#include <wx/propgrid/propgrid.h>
#include <wx/propgrid/advprops.h>
#define wxID_BUTTON_UP 1000
#define wxID_BUTTON_DOWN 1001
class MyFrame : public wxFrame
{
wxPropertyGrid* m_propertyGrid1;
wxPGProperty* camProp;
wxPGProperty* camProp2;
wxPGProperty* camProp3;
wxButton *m_buttonUp;
wxButton *m_buttonDown;
public:
MyFrame(wxWindow *parent, int id = wxID_ANY, wxString title = wxT("PropGridDemo")) : wxFrame(parent, id, title)
{
m_propertyGrid1 = new wxPropertyGrid(this, wxID_ANY, wxDefaultPosition, wxSize( 250,200 ), wxPG_DEFAULT_STYLE);
m_propertyGrid1->Append( new wxPropertyCategory("StreetView",wxPG_LABEL) );
camProp = m_propertyGrid1->Append(new wxStringProperty("Camera 1", wxPG_LABEL, ""));
camProp2 = m_propertyGrid1->Append(new wxStringProperty("Camera 2", wxPG_LABEL, ""));
camProp3 = m_propertyGrid1->Append(new wxStringProperty("Camera 3", wxPG_LABEL, ""));
m_buttonUp = new wxButton( this, wxID_BUTTON_UP, wxT("Cam Up"), wxPoint(300,10), wxSize(80,35), 0 );
m_buttonDown = new wxButton( this, wxID_BUTTON_DOWN, wxT("Cam Down"), wxPoint(300,60), wxSize(80,35), 0 );
this->Bind( wxEVT_BUTTON, &MyFrame::OnButtonUpClick, this, wxID_BUTTON_UP );
this->Bind( wxEVT_BUTTON, &MyFrame::OnButtonDownClick, this, wxID_BUTTON_DOWN );
}
void OnButtonUpClick( wxCommandEvent& event )
{
wxPGProperty* selectedPropUp = m_propertyGrid1->GetSelectedProperty();
if (selectedPropUp)
{
int indexProp = selectedPropUp->GetIndexInParent();
wxPGProperty* camProp = m_propertyGrid1->RemoveProperty(selectedPropUp->GetName());
m_propertyGrid1->Insert("StreetView", indexProp-1, camProp);
}
else wxMessageBox("Select any Camera");
}
void OnButtonDownClick( wxCommandEvent& event )
{
wxPGProperty* selectedPropDown = m_propertyGrid1->GetSelectedProperty();
if (selectedPropDown)
{
int indexProp = selectedPropDown->GetIndexInParent();
wxPGProperty* camProp = m_propertyGrid1->RemoveProperty(selectedPropDown->GetName());
m_propertyGrid1->Insert("StreetView", indexProp+1, camProp);
}
else wxMessageBox("Select any Camera");
}
~MyFrame(){}
};
class MyApp : public wxApp
{
public:
virtual bool OnInit()
{
MyFrame* frame = new MyFrame(0L);
frame->Show(true);
return true;
}
};
wxIMPLEMENT_APP(MyApp);
wx 3.0.4 / 3.1.5