]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasRendererView.cxx
ceffcafe4934f645e20586758ea77589b1945479
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxMaracasRendererView.cxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: wxMaracasRendererView.cxx,v $
5   Language:  C++
6
7 =========================================================================*/
8
9 #include "wxMaracasRendererView.h"
10
11 #include <wx/colordlg.h>
12 #include <wx/bmpbuttn.h>
13
14 #include <OpenImage.xpm>
15 #include <Color.xpm>
16
17 wxMaracasRendererView* wxMaracasRendererView::instance=NULL;
18
19 /**
20 ** Class constructor
21 **/
22 wxMaracasRendererView::wxMaracasRendererView(wxWindow* parent,std::string path)
23 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
24
25         wxauimanager = new wxAuiManager(this);
26
27         _idCount = 0;
28         _path = path;
29
30         std::string iconsdir = path;
31         iconsdir+="/data/Icons";
32         this->_toolb = new ToolBarRenderer(this,iconsdir);
33         wxStaticText* txt = new wxStaticText(this, -1, wxString(_T("  Open File  ")));
34         wxAuiPaneInfo paneinfo;
35         wxauimanager->AddPane(txt,paneinfo.ToolbarPane().Top());
36         wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top());
37
38         wxauimanager->Update(); 
39 }
40
41 /**
42 ** Class destructor
43 **/
44 wxMaracasRendererView::~wxMaracasRendererView( )
45 {
46         delete _toolb;
47 }
48
49 /**
50 ** Gets class instance correponding to given parameters
51 **/
52 wxMaracasRendererView* wxMaracasRendererView::getInstance(wxWindow* parent,std::string path)
53 {
54         if(instance==NULL)
55         {
56                 instance = new wxMaracasRendererView(parent,path);
57         }
58         return instance;
59 }
60
61 /**
62 ** Gets class intance
63 **/
64 wxMaracasRendererView* wxMaracasRendererView::getInstance()
65 {
66         return instance;
67 }
68
69 /**
70 ** Gets path for the given panel
71 **/
72 std::string wxMaracasRendererView::getPath()
73 {
74         return _path;
75 }
76
77 /**
78 ** Returns internal panel
79 **/
80 wxMaracasRenderTabbedPanel* wxMaracasRendererView::getTabbedPanel(int id) throw(char*)
81 {
82         int i;
83         for(i = 0; i < (int)tabsVector.size(); i++)
84         {
85                 if(tabsVector[i]->getPropIdV() == id)
86                         return tabsVector[i];
87         }
88         throw "id not found";
89
90         return NULL;
91 }
92
93 /**
94 **
95 **/
96 void wxMaracasRendererView::setRenderer(vtkRenderer* renderer)
97 {
98         _renderer = renderer;
99 }
100
101 void wxMaracasRendererView::setVtkBaseView(wxVtk3DBaseView* vbv)
102 {
103         baseView = vbv;
104 }
105
106 /**
107 ** Called when an image file is opened
108 **/
109 void wxMaracasRendererView::onLoadImageFile()
110 {
111         wxString mhd(_T("mhd"));        
112
113         wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a MHD file")), wxString(_T("")),
114                                         wxString(_T("")), wxString(_T("MHD files (*.mhd)|*.mhd")) );
115
116         if(fildial->ShowModal()==wxID_OK)
117         {
118                 wxString filename = fildial->GetFilename();
119                 files.push_back( std::string(filename.mb_str()) );
120                 wxString pathfile(fildial->GetDirectory() + _T("/") + filename);
121
122                 if(filename.EndsWith(mhd))
123                 {
124                         std::string sPath = std::string(pathfile.mb_str());
125                         std::string sFileName = std::string(filename.mb_str());
126                         printf("wxMaracasRendererView::onLoadImageFile->Opening file... \n");
127                         addVolumes(NULL, sPath, sFileName);
128                 }
129         }
130         delete fildial;
131 }
132 /**
133 ** Constructs and adds internal panel
134 **/
135 void wxMaracasRendererView::addPanels(wxMaracasRenderTabbedPanel* wxtabs, vtkImageData* img, std::string pathfile, std::string filename)
136 {
137         wxString s(filename.c_str(),wxConvUTF8);
138         
139         wxtabs->createControls(img, pathfile, filename);
140         
141         wxAuiPaneInfo paneinfo;
142         wxauimanager->AddPane(wxtabs, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s));
143         wxauimanager->Update();
144 }
145
146 /**
147 ** Returns internal panel
148 **/
149 void wxMaracasRendererView::addVolumes(vtkImageData* img, std::string pathfile, std::string filename)
150 {
151         wxMaracasRenderTabbedPanel* wxtabs = new wxMaracasRenderTabbedPanel(this, _idCount, baseView);
152         wxtabs->setRenderer(_renderer);
153
154         tabsVector.push_back(wxtabs);
155         addPanels(wxtabs, img, pathfile, filename);     
156
157         _idCount++;
158 }
159 /**
160 ** Deletes current volume
161 **/
162 void wxMaracasRendererView::deleteVolume(int volid)
163 {
164         
165         getTabbedPanel(volid)->deleteVolume(volid);
166 }
167
168 /**
169 ** Gets opened file names
170 **/
171 std::vector<std::string> wxMaracasRendererView::getFiles()
172 {
173         return files;
174 }
175
176 /**
177 **
178 **/
179 ToolBarRenderer::ToolBarRenderer(wxWindow * parent,std::string iconsdir)
180 : wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
181 {
182         std::string iconfil = iconsdir;
183
184         //iconfil+= "/OpenImage.png";
185         //wxBitmap* bitmap0 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG);
186         wxBitmap bitmap0(OpenImage_xpm);
187         this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File")));
188
189         this->Realize();
190
191         _evthand = new ToolBarEventHandlerRenderer();
192         this->SetEventHandler(_evthand);
193
194 }
195
196 ToolBarRenderer::~ToolBarRenderer(void){
197 }
198
199 ToolBarEventHandlerRenderer::ToolBarEventHandlerRenderer()
200 : wxEvtHandler(){
201 }
202 ToolBarEventHandlerRenderer::~ToolBarEventHandlerRenderer(){
203 }
204
205 void ToolBarEventHandlerRenderer::onLoadImageFile(wxCommandEvent& event){
206         wxMaracasRendererView::getInstance()->onLoadImageFile();
207 }
208
209
210 BEGIN_EVENT_TABLE(ToolBarEventHandlerRenderer, wxEvtHandler)
211         EVT_MENU(1, ToolBarEventHandlerRenderer::onLoadImageFile)
212 END_EVENT_TABLE()
213
214