]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxGUIPackageBrowser.cxx
3f2fead373d611866c6c879ff44d37c033cf1d94
[bbtk.git] / kernel / src / bbtkWxGUIPackageBrowser.cxx
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkWxGUIPackageBrowser.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/03/28 15:04:10 $
7   Version:   $Revision: 1.2 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*//**
18  * \brief Short description in one line
19  * 
20  * Long description which 
21  * can span multiple lines
22  */
23 /**
24  * \file 
25  * \brief 
26  */
27 /**
28  * \class bbtk::
29  * \brief 
30  */
31
32
33 #ifdef _USE_WXWIDGETS_
34
35 #define CHECKBOXVIEW 1
36
37 #include "bbtkWxGUIPackageBrowser.h"
38 #include "ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h"
39 #include "bbtkInterpreter.h"
40
41 namespace bbtk
42 {
43   //================================================================
44   WxGUIPackageBrowserBlackBox::WxGUIPackageBrowserBlackBox(wxWindow* parent,
45                                                            WxGUIPackageBrowser* browser,
46                                                            BlackBoxDescriptor* descr) :
47     wxPanel(parent, -1),
48     mBrowser(browser),
49     mDescriptor(descr)
50   {
51     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
52     
53     wxStaticText* s = new wxStaticText(this,-1,
54                                        std2wx(descr->GetDescription()));
55     sizer->Add(s,1,wxGROW);
56     s = new wxStaticText(this,-1,
57                          std2wx(descr->GetAuthor()));
58     sizer->Add(s,1,wxGROW);
59     s = new wxStaticText(this,-1,
60                          std2wx(descr->GetCategory()));
61
62     sizer->Add(s,1,wxGROW);
63  
64     SetSizer(sizer);
65     SetAutoLayout(true);
66     Layout();
67   }
68   //================================================================
69
70
71   //================================================================
72   WxGUIPackageBrowserBlackBox::~WxGUIPackageBrowserBlackBox()
73   {
74   }
75   //================================================================
76
77
78   //================================================================
79   WxGUIPackageBrowser::WxGUIPackageBrowser( wxWindow *parent,
80                                     WxGUIPackageBrowserUser* user )
81     : wxPanel(parent, -1),
82       mUser(user),
83       mInterpreter(0)
84   {
85     std::cout << "WxGUIPackageBrowser::WxGUIPackageBrowser"<<std::endl;
86     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
87     mTree = new wxTreeMultiCtrl(this, -1);
88     
89     mTree->SetBackgroundColour(*wxWHITE);
90     sizer->Add(mTree,1,wxGROW);
91
92 #ifndef LINUX
93     wxTreeMultiWindowInfo wndinfo(wxTMC_BG_ADJUST_CNT, 8, 0);
94 #else
95     wxTreeMultiWindowInfo wndinfo(wxTMC_BG_ADJUST_ALL, 8, 0);
96 #endif
97     
98     // make it a bit bigger
99     wxFont somefont;
100     somefont = mTree->GetCaptionFont();
101     somefont.SetFamily(wxMODERN);
102     somefont.SetWeight(wxBOLD);
103     somefont.SetPointSize(somefont.GetPointSize()+1);
104     mTree->SetCaptionFont(somefont);
105
106     mTree->SetSpacingY(1);
107     // mTree->SetCheckboxView(true);
108
109     SetSizer(sizer);
110     SetAutoLayout(true);
111     Layout();
112     
113   }
114   //================================================================
115
116   //================================================================
117   WxGUIPackageBrowser::~WxGUIPackageBrowser()
118   {
119     std::cout << "del interpreter" << std::endl;
120     if (mInterpreter) delete mInterpreter;
121     std::cout << "ok" << std::endl;
122   }
123   //================================================================
124
125   //================================================================
126   void WxGUIPackageBrowser::IncludeAll()
127   {
128     if (!mInterpreter) mInterpreter = new bbtk::Interpreter();
129     mInterpreter->SetCommandLine(true);
130     mInterpreter->InterpretLine("include *");
131
132     Factory* F = mInterpreter->GetExecuter()->GetFactory();
133     BuildFromFactory(F);
134   }
135   //================================================================
136   //================================================================
137   
138   void WxGUIPackageBrowser::BuildFromFactory(Factory* F)
139   {
140 #ifndef LINUX
141     wxTreeMultiWindowInfo wndinfo(wxTMC_BG_ADJUST_CNT, 8, 0);
142 #else
143     wxTreeMultiWindowInfo wndinfo(wxTMC_BG_ADJUST_ALL, 8, 0);
144 #endif
145     mTree->DeleteAllItems();    
146     const Factory::PackageMapType& M = F->GetPackageMap();
147     Factory::PackageMapType::const_iterator i;
148     for (i=M.begin();i!=M.end();++i)
149       {
150         Package* P = i->second.mPackage;
151         wxString packname = std2wx(P->GetName());
152         if (packname==_T("user")) continue;
153         wxTreeMultiItem pack = mTree->AddRoot(packname,packname);
154
155         wxString packinfo = std2wx(P->GetDescription());
156         packinfo += _T(" - by ")+ std2wx(P->GetAuthor());
157         packinfo += _T(" - v. ")+ std2wx(P->GetVersion());
158         mTree->AppendWindow(pack, 
159                             new wxStaticText(mTree,
160                                              -1,packinfo));
161         Package::BlackBoxMapType::iterator j;
162         for (j=P->GetBlackBoxMap().begin();
163              j!=P->GetBlackBoxMap().end();
164              ++j)
165           {
166             wxString boxname = std2wx(j->second->GetTypeName());
167             wxTreeMultiItem box = mTree->AppendNode(pack,boxname,boxname);
168             WxGUIPackageBrowserBlackBox* boxdescr 
169               = new WxGUIPackageBrowserBlackBox(mTree,this,j->second);
170             mTree->AppendWindow(box, boxdescr, _T(""), 
171                                 wndinfo, wxTMC_SPAN_WIDTH);
172
173           }
174       }
175     mTree->CollapseNodes(true);
176
177     // Test exclude 
178     //    wxTreeMultiItem item = mTree->FindItem(_T("Add"));
179     //    if(item.IsOk()) mTree->Exclude(item);
180   }
181   //================================================================
182
183   //================================================================
184   WxGUIPackageBrowserWindow::WxGUIPackageBrowserWindow( wxWindow *parent, 
185                                                     wxString title, 
186                                                     wxSize size)
187     : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size)
188   {     
189     
190     
191     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
192
193     mBrowser = new WxGUIPackageBrowser(this);
194     mBrowser->IncludeAll();
195     sizer->Add(mBrowser,1,wxGROW);
196     
197     //    WxGUICommand* com = new WxGUICommand(this,this);
198     //    sizer->Add(com);
199     
200     SetSizer(sizer);
201
202     // Creates and sets the parent window of all bbtk windows
203     wxWindow* top = new wxPanel(this,-1);
204     top->Hide();
205     
206     Wx::SetTopWindow(top);
207    
208     SetAutoLayout(true);
209     Layout();
210   }
211   //================================================================
212
213   //================================================================
214   WxGUIPackageBrowserWindow::~WxGUIPackageBrowserWindow()
215   {
216   }
217   //================================================================
218
219 } // namespace bbtk
220
221
222 #endif //_USE_WXWIDGETS_