From: <da...@us...> - 2008-02-01 17:32:08
|
Revision: 2760 http://hugin.svn.sourceforge.net/hugin/?rev=2760&view=rev Author: dangelo Date: 2008-02-01 09:32:03 -0800 (Fri, 01 Feb 2008) Log Message: ----------- Added custom XRC handler for Crop panel Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/CropPanel.cpp hugin/trunk/src/hugin1/hugin/CropPanel.h hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin1/hugin/xrc/crop_panel.xrc hugin/trunk/src/hugin1/hugin/xrc/main_frame.xrc Modified: hugin/trunk/src/hugin1/hugin/CropPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CropPanel.cpp 2008-02-01 16:44:55 UTC (rev 2759) +++ hugin/trunk/src/hugin1/hugin/CropPanel.cpp 2008-02-01 17:32:03 UTC (rev 2760) @@ -63,32 +63,39 @@ END_EVENT_TABLE() // Define a constructor for my canvas -CropPanel::CropPanel(wxWindow *parent, Panorama * pano) - : wxPanel (parent, -1, wxDefaultPosition, wxDefaultSize, wxEXPAND|wxGROW), - m_pano(*pano), m_circular(false) +CropPanel::CropPanel() + : m_pano(0), m_circular(false) { + +} + +bool CropPanel::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, + long style, const wxString& name) +{ DEBUG_TRACE(""); + if (! wxPanel::Create(parent, id, pos, size, style, name)) { + return false; + } - DEBUG_TRACE("ctor"); - m_pano.addObserver(this); + wxXmlResource::Get()->LoadPanel(this, wxT("crop_panel")); + wxPanel * panel = XRCCTRL(*this, "crop_panel", wxPanel); - wxXmlResource::Get()->LoadPanel (this, wxT("crop_panel")); + wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); + topsizer->Add(panel, 1, wxEXPAND, 0); + SetSizer(topsizer); +#ifdef DEBUG + SetBackgroundColour(wxTheColourDatabase->Find(wxT("RED"))); + panel->SetBackgroundColour(wxTheColourDatabase->Find(wxT("BLUE"))); +#endif + + // get custom sub widgets m_imagesList = XRCCTRL(*this, "crop_list_unknown", ImagesListCrop); - m_imagesList->Init(pano); + DEBUG_ASSERT(m_imagesList); - /* - m_imagesList = new ImagesListCrop (parent, pano); - wxXmlResource::Get()->AttachUnknownControl ( - wxT("crop_list_unknown"), - m_imagesList ); - */ + m_Canvas = XRCCTRL(*this, "crop_edit_unknown", CenterCanvas); + DEBUG_ASSERT(m_imagesList); - m_Canvas = new CenterCanvas (this,this); - wxXmlResource::Get()->AttachUnknownControl ( - wxT("crop_edit_unknown"), - m_Canvas); - // get all other widgets m_left_textctrl = XRCCTRL(*this,"crop_left_text", wxTextCtrl); @@ -110,10 +117,21 @@ m_autocenter_cb = XRCCTRL(*this,"crop_autocenter_cb", wxCheckBox); DEBUG_ASSERT(m_autocenter_cb); - m_Canvas->Show(); DEBUG_TRACE(""); + return true; } +void CropPanel::Init(Panorama * panorama) +{ + m_pano = panorama; + m_imagesList->Init(m_pano); + m_Canvas->Init(this); + m_Canvas->Show(); + // observe the panorama + m_pano->addObserver(this); +} + + CropPanel::~CropPanel(void) { DEBUG_TRACE(""); @@ -122,7 +140,7 @@ m_top_textctrl->PopEventHandler(true); m_bottom_textctrl->PopEventHandler(true); - m_pano.removeObserver(this); + m_pano->removeObserver(this); } // We need to override the default handling of size events because the @@ -177,7 +195,7 @@ // transfer panorama state to our state void CropPanel::Pano2Display(int imgNr) { - const PanoImage & img = m_pano.getImage(imgNr); + const PanoImage & img = m_pano->getImage(imgNr); std::string newImgFile = img.getFilename(); // check if we need to display a new image @@ -189,11 +207,11 @@ } m_imgOpts = img.getOptions(); - VariableMap vars = m_pano.getImageVariables(imgNr); + VariableMap vars = m_pano->getImageVariables(imgNr); int dx = roundi(map_get(vars,"d").getValue()); int dy = roundi(map_get(vars,"e").getValue()); m_center = vigra::Point2D(img.getWidth()/2 + dx, img.getHeight()/2 + dy); - m_circular= m_pano.getLens(img.getLensNr()).getProjection() == PT::Lens::CIRCULAR_FISHEYE; + m_circular= m_pano->getLens(img.getLensNr()).getProjection() == PT::Lens::CIRCULAR_FISHEYE; UpdateDisplay(); } @@ -206,7 +224,7 @@ for (UIntSet::iterator it = m_selectedImages.begin(); it != m_selectedImages.end(); ++it) { - const PanoImage & img = m_pano.getImage(*it); + const PanoImage & img = m_pano->getImage(*it); ImageOptions opt = img.getOptions(); opt.cropRect = m_imgOpts.cropRect; opt.autoCenterCrop = m_imgOpts.autoCenterCrop; @@ -224,7 +242,7 @@ } GlobalCmdHist::getInstance().addCommand( - new PT::UpdateImageOptionsCmd(m_pano, opts, m_selectedImages) + new PT::UpdateImageOptionsCmd(*m_pano, opts, m_selectedImages) ); } @@ -353,6 +371,39 @@ m_imgOpts.cropRect.setLowerRight( m_center + d); } + + +IMPLEMENT_DYNAMIC_CLASS(CropPanel, wxFrame) + +CropPanelXmlHandler::CropPanelXmlHandler() + : wxXmlResourceHandler() +{ + AddWindowStyles(); +} + +wxObject *CropPanelXmlHandler::DoCreateResource() +{ + XRC_MAKE_INSTANCE(cp, CropPanel) + + cp->Create(m_parentAsWindow, + GetID(), + GetPosition(), GetSize(), + GetStyle(wxT("style")), + GetName()); + + SetupWindow( cp); + + return cp; +} + +bool CropPanelXmlHandler::CanHandle(wxXmlNode *node) +{ + return IsOfClass(node, wxT("CropPanel")); +} + +IMPLEMENT_DYNAMIC_CLASS(CropPanelXmlHandler, wxXmlResourceHandler) + + //------------------------------------------------------------------------------ BEGIN_EVENT_TABLE(CenterCanvas, wxPanel) @@ -361,12 +412,21 @@ EVT_PAINT ( CenterCanvas::OnPaint ) END_EVENT_TABLE() -// Define a constructor for my canvas -CenterCanvas::CenterCanvas(wxWindow *parent, CropPanel * listener,const wxSize & sz) - : wxPanel(parent, -1, wxDefaultPosition, sz), - m_listener(listener) +CenterCanvas::CenterCanvas() + : m_listener(0) { + +} + +// Define a constructor for my canvasbool +bool CenterCanvas::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, + long style, const wxString& name) +{ DEBUG_TRACE(""); + if (! wxPanel::Create(parent, id, pos, size, style, name)) { + return false; + } + m_state = NO_SEL; m_cursor_no_sel = new wxCursor(wxCURSOR_CROSS); @@ -375,8 +435,14 @@ m_cursor_drag_vert = new wxCursor(wxCURSOR_SIZENS); m_cursor_drag_horiz = new wxCursor(wxCURSOR_SIZEWE); SetCursor(*m_cursor_no_sel); + return true; } +void CenterCanvas::Init(CropPanel * listener) +{ + m_listener = listener; +} + CenterCanvas::~CenterCanvas(void) { DEBUG_TRACE(""); @@ -819,3 +885,33 @@ } } + +IMPLEMENT_DYNAMIC_CLASS(CenterCanvas, wxFrame) + +CenterCanvasXmlHandler::CenterCanvasXmlHandler() + : wxXmlResourceHandler() +{ + AddWindowStyles(); +} + +wxObject *CenterCanvasXmlHandler::DoCreateResource() +{ + XRC_MAKE_INSTANCE(cp, CenterCanvas) + + cp->Create(m_parentAsWindow, + GetID(), + GetPosition(), GetSize(), + GetStyle(wxT("style")), + GetName()); + + SetupWindow( cp); + + return cp; +} + +bool CenterCanvasXmlHandler::CanHandle(wxXmlNode *node) +{ + return IsOfClass(node, wxT("CenterCanvas")); +} + +IMPLEMENT_DYNAMIC_CLASS(CenterCanvasXmlHandler, wxXmlResourceHandler) Modified: hugin/trunk/src/hugin1/hugin/CropPanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/CropPanel.h 2008-02-01 16:44:55 UTC (rev 2759) +++ hugin/trunk/src/hugin1/hugin/CropPanel.h 2008-02-01 17:32:03 UTC (rev 2760) @@ -44,8 +44,13 @@ class CropPanel: public wxPanel, public PT::PanoramaObserver { public: - CropPanel(wxWindow *parent, Panorama * pano ); + CropPanel(); + + bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxT("panel")); + void Init(PT::Panorama * pano); + virtual ~CropPanel(void); + #if 0 /** restore layout after hugin start */ void RestoreLayout(); @@ -93,7 +98,7 @@ private: - Panorama & m_pano; + Panorama * m_pano; CenterCanvas * m_Canvas; ImagesListCrop * m_imagesList; @@ -106,8 +111,20 @@ bool m_circular; DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(CropPanel) }; +/** xrc handler */ +class CropPanelXmlHandler : public wxXmlResourceHandler +{ + DECLARE_DYNAMIC_CLASS(CropPanelXmlHandler) + + public: + CropPanelXmlHandler(); + virtual wxObject *DoCreateResource(); + virtual bool CanHandle(wxXmlNode *node); +}; + /** adjustment image view * * Define a new canvas which can receive some events. @@ -115,7 +132,10 @@ class CenterCanvas: public wxPanel { public: - CenterCanvas(wxWindow *parent, CropPanel * listener, const wxSize & sz=wxDefaultSize); + CenterCanvas(); + bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxT("panel")); + void Init(CropPanel * listener); + virtual ~CenterCanvas(void) ; /** set image and crop parameters */ @@ -175,8 +195,19 @@ float m_scale; DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(CenterCanvas) }; +/** xrc handler */ +class CenterCanvasXmlHandler : public wxXmlResourceHandler +{ + DECLARE_DYNAMIC_CLASS(CenterCanvasXmlHandler) + public: + CenterCanvasXmlHandler(); + virtual wxObject *DoCreateResource(); + virtual bool CanHandle(wxXmlNode *node); +}; + #endif // _IMAGECENTER_H Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-01 16:44:55 UTC (rev 2759) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-01 17:32:03 UTC (rev 2760) @@ -275,43 +275,24 @@ // the crop panel - crop_panel = new CropPanel( this, &pano); - // show the crop_panel - wxXmlResource::Get()->AttachUnknownControl (wxT("crop_panel_unknown"), crop_panel ); + crop_panel = XRCCTRL(*this, "crop_panel_unknown", CropPanel); + assert(crop_panel); + crop_panel->Init(&pano); // the pano_panel - // The xrc resources are loaded by the class itself. DEBUG_TRACE(""); pano_panel = XRCCTRL(*this, "panorama_panel_unknown", PanoPanel); assert(pano_panel); pano_panel->Init(&pano); - pano_panel->panoramaChanged (pano); // initialize from pano - // create the custom widget referenced by the main_frame XRC - DEBUG_TRACE(""); -#if 1 cpe = XRCCTRL(*this, "cp_editor_panel_unknown", CPEditorPanel); assert(cpe); cpe->Init(&pano); -#else - cpe = new CPEditorPanel(this,&pano); - wxXmlResource::Get()->AttachUnknownControl(wxT("cp_editor_panel_unknown"), - cpe); -#endif - -#if 1 + opt_panel = XRCCTRL(*this, "optimizer_panel_unknown", OptimizePanel); assert(opt_panel); opt_panel->Init(&pano); -#else - opt_panel = XRCCTRL(*this, - opt_panel = new OptimizePanel(this, &pano); - // create the custom widget referenced by the main_frame XRC - DEBUG_TRACE(""); - wxXmlResource::Get()->AttachUnknownControl(wxT("optimizer_panel_unknown"), - opt_panel); -#endif opt_photo_panel = XRCCTRL(*this, "optimizer_photometric_panel_unknown", OptimizePhotometricPanel); assert(opt_photo_panel); Modified: hugin/trunk/src/hugin1/hugin/huginApp.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.cpp 2008-02-01 16:44:55 UTC (rev 2759) +++ hugin/trunk/src/hugin1/hugin/huginApp.cpp 2008-02-01 17:32:03 UTC (rev 2760) @@ -35,6 +35,7 @@ #include "hugin/huginApp.h" #include "hugin/AssistantPanel.h" #include "hugin/ImagesPanel.h" +#include "hugin/CropPanel.h" #include "hugin/CPEditorPanel.h" #include "hugin/OptimizePhotometricPanel.h" #include "hugin/PanoPanel.h" @@ -198,6 +199,8 @@ wxXmlResource::Get()->AddHandler(new ImagesListImageXmlHandler()); wxXmlResource::Get()->AddHandler(new ImagesListLensXmlHandler()); wxXmlResource::Get()->AddHandler(new ImagesListCropXmlHandler()); + wxXmlResource::Get()->AddHandler(new CropPanelXmlHandler()); + wxXmlResource::Get()->AddHandler(new CenterCanvasXmlHandler()); wxXmlResource::Get()->AddHandler(new CPEditorPanelXmlHandler()); wxXmlResource::Get()->AddHandler(new CPImageCtrlXmlHandler()); wxXmlResource::Get()->AddHandler(new OptimizePanelXmlHandler()); Modified: hugin/trunk/src/hugin1/hugin/xrc/crop_panel.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/crop_panel.xrc 2008-02-01 16:44:55 UTC (rev 2759) +++ hugin/trunk/src/hugin1/hugin/xrc/crop_panel.xrc 2008-02-01 17:32:03 UTC (rev 2760) @@ -141,7 +141,7 @@ <border>6</border> </object> <object class="sizeritem"> - <object class="unknown" name="crop_edit_unknown"/> + <object class="CenterCanvas" name="crop_edit_unknown"/> <option>1</option> <flag>wxTOP|wxBOTTOM|wxRIGHT|wxEXPAND</flag> <border>6</border> Modified: hugin/trunk/src/hugin1/hugin/xrc/main_frame.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/main_frame.xrc 2008-02-01 16:44:55 UTC (rev 2759) +++ hugin/trunk/src/hugin1/hugin/xrc/main_frame.xrc 2008-02-01 17:32:03 UTC (rev 2760) @@ -31,7 +31,7 @@ </object> <object class="notebookpage"> <label>Crop</label> - <object class="unknown" name="crop_panel_unknown"/> + <object class="CropPanel" name="crop_panel_unknown"/> </object> <object class="notebookpage"> <label>Control Points</label> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |