#include "../wxsheaders.h" #include "wxsnotebook.h" #include #include "../properties/wxsenumproperty.h" #include "../wxswidgetfactory.h" #include "../resources/wxswindowres.h" WXS_ST_BEGIN(wxsNotebookStyles) WXS_ST_CATEGORY("wxNotebook") WXS_ST(wxNB_DEFAULT) WXS_ST(wxNB_LEFT) WXS_ST(wxNB_RIGHT) WXS_ST(wxNB_TOP) WXS_ST(wxNB_BOTTOM) WXS_ST(wxNB_FIXEDWIDTH) WXS_ST(wxNB_MULTILINE) WXS_ST(wxNB_NOPAGETHEME) WXS_ST_END(wxsNotebookStyles) WXS_EV_BEGIN(wxsNotebookEvents) WXS_EVI(EVT_NOTEBOOK_PAGE_CHANGED,wxNotebookEvent,PageChanged) WXS_EVI(EVT_NOTEBOOK_PAGE_CHANGING,wxNotebookEvent,PageChanging) WXS_EV_END(wxsNotebookEvents) class wxsNotebookPreview: public wxNotebook { public: wxsNotebookPreview(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, wxsNotebook* NB): wxNotebook(parent,id,pos,size,style), Notebook(NB) {} private: wxsNotebook* Notebook; void OnChanged(wxNotebookEvent& event) { // wxsWidget* NewSelection = Notebook->GetChild(event.GetSelection()); // if ( NewSelection != Notebook->CurrentSelection ) // { // Notebook->CurrentSelection = NewSelection; // Notebook->PropertiesUpdated(false,false); // } } DECLARE_EVENT_TABLE() }; wxsNotebook::wxsNotebook(wxsWidgetManager* Man,wxsWindowRes* Res): wxsContainer(Man,Res,true,0,propWidget), CurrentSelection(0) { } wxsNotebook::~wxsNotebook() { } bool wxsNotebook::CanAddChild(wxsWidget* NewWidget,int InsertBeforeThis) { if ( NewWidget->GetInfo().Sizer ) return false; if ( NewWidget->GetInfo().Spacer ) return false; return true; } int wxsNotebook::AddChild(wxsWidget* NewWidget,int InsertBeforeThis) { if ( NewWidget->GetInfo().Sizer ) { wxMessageBox(_("Can not add sizer into Notebook.\nAdd panels first")); return -1; } if ( NewWidget->GetInfo().Spacer ) { wxMessageBox(_("Spacer can be added to sizers only")); return -1; } return wxsContainer::AddChild(NewWidget,InsertBeforeThis); } wxWindow* wxsNotebook::MyCreatePreview(wxWindow* Parent) { return new wxNotebook(Parent,-1,GetPosition(),GetSize(),GetStyle()); } void wxsNotebook::MyFinalUpdatePreview(wxWindow* Preview) { wxNotebook* Wnd = (wxNotebook*)Preview; for ( int i=0; iAddPage(Child->GetPreview(),Params->Label,Child==CurrentSelection); } } wxString wxsNotebook::GetProducingCode(wxsCodeParams& Params) { const CodeDefines& CD = GetCodeDefines(); return wxString::Format( _T("%s = new wxNotebook(%s,%s,%s,%s,%s);"), BaseParams.VarName.c_str(), Params.ParentName.c_str(), BaseParams.IdName.c_str(), CD.Pos.c_str(), CD.Size.c_str(), CD.Style.c_str()); } wxString wxsNotebook::GetFinalizingCode(wxsCodeParams& Params) { wxString Code; for ( int i=0; iAddPage(%s,%s,%s);\n"), BaseParams.VarName.c_str(), Child->GetBaseParams().VarName.c_str(), GetWxString(Params->Label).c_str(), Params->Selected ? _T("true") : _T("false")); } return Code; } wxString wxsNotebook::GetDeclarationCode(wxsCodeParams& Params) { return wxString::Format(_T("wxNotebook* %s;"),BaseParams.VarName.c_str()); } bool wxsNotebook::XmlLoadChild(TiXmlElement* Element) { if ( strcmp(Element->Value(),"object") ) return true; bool Ret = true; TiXmlElement* RealObject = Element; const char* Class = Element->Attribute("class"); if ( Class && !strcmp(Class,"notebookpage") ) { RealObject = Element->FirstChildElement("object"); } if ( !RealObject ) return false; const char* Name = RealObject->Attribute("class"); if ( !Name || !*Name ) return false; wxsWidget* Child = wxsGEN(wxString(Name,wxConvUTF8),GetResource()); if ( !Child ) return false; if ( !Child->XmlLoad(RealObject) ) Ret = false; int Index = AddChild(Child); if ( Index < 0 ) { delete Child; return false; } wxsNotebookExtraParams* Params = GetExtraParams(Index); TiXmlElement* Store = XmlElem(); XmlAssignElement(Element); Params->Label = XmlGetVariable(_T("label")); Params->Selected = XmlGetInteger(_T("selected"),0) != 0; XmlAssignElement(Store); if (Index == 0 || Params->Selected) CurrentSelection = Child; return Ret; } bool wxsNotebook::XmlSaveChild(int ChildIndex,TiXmlElement* AddHere) { bool Ret = true; TiXmlElement* NotebookPage = AddHere->InsertEndChild(TiXmlElement("object"))->ToElement(); NotebookPage->SetAttribute("class","notebookpage"); wxsNotebookExtraParams* Params = GetExtraParams(ChildIndex); TiXmlElement* Store = XmlElem(); XmlAssignElement(NotebookPage); XmlSetVariable(_T("label"),Params->Label); if ( Params->Selected ) XmlSetInteger(_T("selected"),1); XmlAssignElement(Store); return wxsWidget::XmlSaveChild(ChildIndex,NotebookPage) && Ret; } void wxsNotebook::AddChildProperties(int ChildIndex) { wxsWidget* Widget = GetChild(ChildIndex); wxsNotebookExtraParams* Params = GetExtraParams(ChildIndex); if ( !Widget || !Params ) return; Widget->GetPropertiesObj().AddProperty(_("Notebook page:"),Params->Label,0); Widget->GetPropertiesObj().AddProperty(_(" Page selected:"),Params->Selected,1); } void wxsNotebook::PreviewMouseEvent(wxMouseEvent& event) { if ( GetPreview() && event.LeftDown() ) { wxNotebook* Preview = (wxNotebook*)GetPreview(); int Hit = Preview->HitTest(wxPoint(event.GetX(),event.GetY())); if ( Hit != wxNOT_FOUND ) { CurrentSelection = GetChild(Hit); PropertiesUpdated(false,false); } } } void wxsNotebook::EnsurePreviewVisible(wxsWidget* Child) { CurrentSelection = NULL; for ( int i=0; iSetSelection(i); } } } wxsWidget::EnsurePreviewVisible(Child); }