]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxGUIPackageBrowser2.cxx
bd048aea4ea0750fc8a7f3a2bec944f8f3fa7fb2
[bbtk.git] / kernel / src / bbtkWxGUIPackageBrowser2.cxx
1 /*=========================================================================
2   Program:   bbtk
3   Module:    $RCSfile: bbtkWxGUIPackageBrowser2.cxx,v $
4   Language:  C++
5   Date:      $Date: 2012/05/24 18:01:51 $
6   Version:   $Revision: 1.26 $
7 =========================================================================*/
8
9 /* ---------------------------------------------------------------------
10
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
13 *
14 *  This software is governed by the CeCILL-B license under French law and
15 *  abiding by the rules of distribution of free software. You can  use,
16 *  modify and/ or redistribute the software under the terms of the CeCILL-B
17 *  license as circulated by CEA, CNRS and INRIA at the following URL
18 *  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
19 *  or in the file LICENSE.txt.
20 *
21 *  As a counterpart to the access to the source code and  rights to copy,
22 *  modify and redistribute granted by the license, users are provided only
23 *  with a limited warranty  and the software's author,  the holder of the
24 *  economic rights,  and the successive licensors  have only  limited
25 *  liability.
26 *
27 *  The fact that you are presently reading this means that you have had
28 *  knowledge of the CeCILL-B license and that you accept its terms.
29 * ------------------------------------------------------------------------ */
30
31 /* \brief Short description in one line
32  *
33  * Long description which
34  * can span multiple lines
35  */
36
37 /**
38  * \file
39  * \brief
40  */
41 /**
42  * \class bbtk::
43  * \brief
44  */
45
46
47 #ifdef _USE_WXWIDGETS_
48
49 #define CHECKBOXVIEW 1
50
51 #include "bbtkWxGUIPackageBrowser2.h"
52 //#include "ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h"
53 #include "bbtkInterpreter.h"
54 #include "bbtkBlackBoxInputDescriptor.h"
55 #include "bbtkBlackBoxOutputDescriptor.h"
56 #include "bbtkWxBlackBox.h"
57 //#include "wx/grid.h"
58 //#include <wx/statline.h>
59
60 #include "creaWx.h"
61
62 #define LIST_CTRL 1000
63
64
65 namespace bbtk
66 {
67
68   BEGIN_EVENT_TABLE(WxGUIBlackBoxList, wxListCtrl)
69     EVT_LIST_BEGIN_DRAG(LIST_CTRL, WxGUIBlackBoxList::OnBeginDrag)
70     EVT_LIST_BEGIN_RDRAG(LIST_CTRL, WxGUIBlackBoxList::OnBeginRDrag)
71     EVT_LIST_BEGIN_LABEL_EDIT(LIST_CTRL, WxGUIBlackBoxList::OnBeginLabelEdit)
72     EVT_LIST_END_LABEL_EDIT(LIST_CTRL, WxGUIBlackBoxList::OnEndLabelEdit)
73     EVT_LIST_DELETE_ITEM(LIST_CTRL, WxGUIBlackBoxList::OnDeleteItem)
74     EVT_LIST_DELETE_ALL_ITEMS(LIST_CTRL, WxGUIBlackBoxList::OnDeleteAllItems)
75 #if WXWIN_COMPATIBILITY_2_4
76     EVT_LIST_GET_INFO(LIST_CTRL, WxGUIBlackBoxList::OnGetInfo)
77     EVT_LIST_SET_INFO(LIST_CTRL, WxGUIBlackBoxList::OnSetInfo)
78 #endif
79     EVT_LIST_ITEM_SELECTED(LIST_CTRL, WxGUIBlackBoxList::OnSelected)
80     EVT_LIST_ITEM_DESELECTED(LIST_CTRL, WxGUIBlackBoxList::OnDeselected)
81     EVT_LIST_KEY_DOWN(LIST_CTRL, WxGUIBlackBoxList::OnListKeyDown)
82     EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, WxGUIBlackBoxList::OnActivated)
83     EVT_LIST_ITEM_FOCUSED(LIST_CTRL, WxGUIBlackBoxList::OnFocused)
84
85     EVT_LIST_COL_CLICK(LIST_CTRL, WxGUIBlackBoxList::OnColClick)
86     EVT_LIST_COL_RIGHT_CLICK(LIST_CTRL, WxGUIBlackBoxList::OnColRightClick)
87     EVT_LIST_COL_BEGIN_DRAG(LIST_CTRL, WxGUIBlackBoxList::OnColBeginDrag)
88     EVT_LIST_COL_DRAGGING(LIST_CTRL, WxGUIBlackBoxList::OnColDragging)
89     EVT_LIST_COL_END_DRAG(LIST_CTRL, WxGUIBlackBoxList::OnColEndDrag)
90
91     EVT_LIST_CACHE_HINT(LIST_CTRL, WxGUIBlackBoxList::OnCacheHint)
92
93 #if USE_CONTEXT_MENU
94     EVT_CONTEXT_MENU(WxGUIBlackBoxList::OnContextMenu)
95 #endif
96     EVT_CHAR(WxGUIBlackBoxList::OnChar)
97
98     EVT_RIGHT_DOWN(WxGUIBlackBoxList::OnRightClick)
99     END_EVENT_TABLE()
100
101   int wxCALLBACK MyCompareFunction(long item1, long item2, long WXUNUSED(sortData))
102   {
103     // inverse the order
104     if (item1 < item2)
105       return -1;
106     if (item1 > item2)
107       return 1;
108
109     return 0;
110   }
111
112   // WxGUIBlackBoxList
113   WxGUIBlackBoxList::WxGUIBlackBoxList(wxWindow *parent,
114                                  const wxWindowID id,
115                                  const wxPoint& pos,
116                                  const wxSize& size,
117                                  long style)
118     : wxListCtrl(parent, id, pos, size, style),
119       mUser(0),
120       m_attr(*wxBLUE, *wxLIGHT_GREY, wxNullFont)
121   {
122 #ifdef __POCKETPC__
123     EnableContextMenu();
124 #endif
125   }
126
127   void WxGUIBlackBoxList::Insert(BlackBoxDescriptor::Pointer d)
128   {
129     if (GetColumnCount()!=3)
130       {
131         InsertColumn( 0, _("Package"),
132                       wxLIST_FORMAT_LEFT, 90  );
133         InsertColumn( 1, _("Box"),
134                       wxLIST_FORMAT_LEFT, 150 );
135         InsertColumn( 2, _("Description"),
136                       wxLIST_FORMAT_LEFT, 500  );
137       }
138
139     wxListItem kNewItem;
140     kNewItem.SetAlign(wxLIST_FORMAT_LEFT);
141
142     int nID = this->GetItemCount();
143     kNewItem.SetId(nID);
144     kNewItem.SetMask(wxLIST_MASK_DATA);
145     // TO DO : STORE SMART POINTER ?
146     kNewItem.SetData(d.get());
147     //    BlackBoxDescriptor::Pointer* d2 = (BlackBoxDescriptor::Pointer*)kNewItem.GetData();
148     //    std::cout << "Descr = "<<d<<" = "<<d2<<std::endl;
149     this->InsertItem(kNewItem);
150     this->SetItem(nID, 0, std2wx(d->GetPackage()->GetName()) );
151     this->SetItem(nID, 1, std2wx(d->GetTypeName()) );
152     this->SetItem(nID, 2, std2wx(d->GetDescription()) );
153
154     /*
155       if (nID % 2)
156       {
157       kNewItem.SetBackgroundColour(wxColour(192,192,192));
158       this->SetItem(kNewItem);
159       }
160     */
161   }
162
163
164   void WxGUIBlackBoxList::OnCacheHint(wxListEvent& event)
165   {
166     //wxLogMessage( wxT("OnCacheHint: cache items %ld..%ld"),
167     //                  event.GetCacheFrom(), event.GetCacheTo() );
168   }
169
170   void WxGUIBlackBoxList::SetColumnImage(int col, int image)
171   {
172     /*
173       wxListItem item;
174       item.SetMask(wxLIST_MASK_IMAGE);
175       item.SetImage(image);
176       SetColumn(col, item);
177     */
178   }
179
180   void WxGUIBlackBoxList::OnColClick(wxListEvent& event)
181   {
182     int col = event.GetColumn();
183
184     // set or unset image
185     static bool x = false;
186     x = !x;
187     SetColumnImage(col, x ? 0 : -1);
188
189     //    wxLogMessage( wxT("OnColumnClick at %d."), col );
190   }
191
192   void WxGUIBlackBoxList::OnColRightClick(wxListEvent& event)
193   {
194     int col = event.GetColumn();
195     if ( col != -1 )
196       {
197         SetColumnImage(col, -1);
198       }
199
200     // Show popupmenu at position
201     wxMenu menu(wxT("Test"));
202     menu.Append(-1, _T("&About"));
203     PopupMenu(&menu, event.GetPoint());
204
205     //wxLogMessage( wxT("OnColumnRightClick at %d."), event.GetColumn() );
206   }
207
208   void WxGUIBlackBoxList::LogColEvent(const wxListEvent& event, const wxChar *name)
209   {
210     //    const int col = event.GetColumn();
211
212     /*
213       wxLogMessage(wxT("%s: column %d (width = %d or %d)."),
214       name,
215       col,
216       event.GetItem().GetWidth(),
217       GetColumnWidth(col));
218     */
219   }
220
221   void WxGUIBlackBoxList::OnColBeginDrag(wxListEvent& event)
222   {
223     LogColEvent( event, wxT("OnColBeginDrag") );
224     /*
225       if ( event.GetColumn() == 0 )
226       {
227       //wxLogMessage(_T("Resizing this column shouldn't work."));
228
229       event.Veto();
230       }
231     */
232   }
233
234   void WxGUIBlackBoxList::OnColDragging(wxListEvent& event)
235   {
236     LogColEvent( event, wxT("OnColDragging") );
237   }
238
239   void WxGUIBlackBoxList::OnColEndDrag(wxListEvent& event)
240   {
241     LogColEvent( event, wxT("OnColEndDrag") );
242   }
243
244   void WxGUIBlackBoxList::OnBeginDrag(wxListEvent& event)
245   {
246           std::cout<<"RaC DRAG TABLE"<<std::endl;
247
248           wxString text(this->GetItemText(event.GetIndex()));
249           wxListItem info;
250           info.m_itemId = event.m_itemIndex;
251           info.m_col = 0;
252           info.m_mask = wxLIST_MASK_DATA;
253           wxString sendtext(_T(""));
254           if ( GetItem(info) )
255           {
256                   // TO DO : STORE SMART PTR ?
257                   BlackBoxDescriptor* d = (BlackBoxDescriptor*)(info.GetData());
258                   if (d!=0)
259                   {
260                           sendtext += crea::std2wx(d->GetFullTypeName());
261                   }
262           }
263           else
264           {
265                   wxFAIL_MSG(wxT("wxListCtrl::GetItem() failed"));
266           }
267
268           wxTextDataObject tdo(sendtext);
269           wxDropSource tds(tdo, this);
270           tds.DoDragDrop();
271
272     //    const wxPoint& pt = event.m_pointDrag;
273
274     //wxLogMessage( wxT("OnBeginDrag at (%d, %d), item %ld."),
275     //          pt.x, pt.y, HitTest(pt, flags) );
276   }
277
278   void WxGUIBlackBoxList::OnBeginRDrag(wxListEvent& event)
279   {
280     //wxLogMessage( wxT("OnBeginRDrag at %d,%d."),
281     //        event.m_pointDrag.x, event.m_pointDrag.y );
282   }
283
284   void WxGUIBlackBoxList::OnBeginLabelEdit(wxListEvent& event)
285   {
286     //wxLogMessage( wxT("OnBeginLabelEdit: %s"), event.m_item.m_text.c_str());
287   }
288
289   void WxGUIBlackBoxList::OnEndLabelEdit(wxListEvent& event)
290   {
291     //wxLogMessage( wxT("OnEndLabelEdit: %s"),
292     //        event.IsEditCancelled() ? _T("[cancelled]")
293     //                                      : event.m_item.m_text.c_str());
294   }
295
296   void WxGUIBlackBoxList::OnDeleteItem(wxListEvent& event)
297   {
298     LogEvent(event, _T("OnDeleteItem"));
299     std::cout << "cannot del"<<std::endl;
300     event.Veto();
301     //wxLogMessage( wxT("Number of items when delete event is sent: %d"), GetItemCount() );
302   }
303
304   void WxGUIBlackBoxList::OnDeleteAllItems(wxListEvent& event)
305   {
306     LogEvent(event, _T("OnDeleteAllItems"));
307     event.Veto();
308   }
309
310 #if WXWIN_COMPATIBILITY_2_4
311   void WxGUIBlackBoxList::OnGetInfo(wxListEvent& event)
312   {
313     wxString msg;
314
315     msg << _T("OnGetInfo (") << event.m_item.m_itemId << _T(", ") << event.m_item.m_col << _T(")");
316     if ( event.m_item.m_mask & wxLIST_MASK_STATE )
317       msg << _T(" wxLIST_MASK_STATE");
318     if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
319       msg << _T(" wxLIST_MASK_TEXT");
320     if ( event.m_item.m_mask & wxLIST_MASK_IMAGE )
321       msg << _T(" wxLIST_MASK_IMAGE");
322     if ( event.m_item.m_mask & wxLIST_MASK_DATA )
323       msg << _T(" wxLIST_MASK_DATA");
324     if ( event.m_item.m_mask & wxLIST_SET_ITEM )
325       msg << _T(" wxLIST_SET_ITEM");
326     if ( event.m_item.m_mask & wxLIST_MASK_WIDTH )
327       msg << _T(" wxLIST_MASK_WIDTH");
328     if ( event.m_item.m_mask & wxLIST_MASK_FORMAT )
329       msg << _T(" wxLIST_MASK_WIDTH");
330
331     if ( event.m_item.m_mask & wxLIST_MASK_TEXT )
332       {
333         event.m_item.m_text = _T("My callback text");
334       }
335
336     //wxLogMessage(msg);
337   }
338
339   void WxGUIBlackBoxList::OnSetInfo(wxListEvent& event)
340   {
341     LogEvent(event, _T("OnSetInfo"));
342   }
343 #endif
344
345   void WxGUIBlackBoxList::OnSelected(wxListEvent& event)
346   {
347     if (mUser==0) return;
348
349     wxListItem info;
350     info.m_itemId = event.m_itemIndex;
351     info.m_col = 0;
352     info.m_mask = wxLIST_MASK_DATA;
353     if ( GetItem(info) )
354       {
355         // TO DO : STORE SMART PTR ?
356         BlackBoxDescriptor* d = (BlackBoxDescriptor*)(info.GetData());
357         if (d!=0) mUser->WxGUIBlackBoxListUserOnSelected(d);
358       }
359     else
360       {
361         wxFAIL_MSG(wxT("wxListCtrl::GetItem() failed"));
362       }
363   }
364
365   void WxGUIBlackBoxList::OnDeselected(wxListEvent& event)
366   {
367     LogEvent(event, _T("OnDeselected"));
368   }
369
370   void WxGUIBlackBoxList::OnActivated(wxListEvent& event)
371   {
372     LogEvent(event, _T("OnActivated"));
373   }
374
375   void WxGUIBlackBoxList::OnFocused(wxListEvent& event)
376   {
377     LogEvent(event, _T("OnFocused"));
378
379     event.Skip();
380   }
381
382   void WxGUIBlackBoxList::OnListKeyDown(wxListEvent& event)
383   {
384     long item;
385
386     switch ( event.GetKeyCode() )
387       {
388       case 'c': // colorize
389       case 'C':
390         {
391           wxListItem info;
392           info.m_itemId = event.GetIndex();
393           if ( info.m_itemId == -1 )
394             {
395               // no item
396               break;
397             }
398
399           GetItem(info);
400
401           wxListItemAttr *attr = info.GetAttributes();
402           if ( !attr || !attr->HasTextColour() )
403             {
404               info.SetTextColour(*wxCYAN);
405
406               SetItem(info);
407
408               RefreshItem(info.m_itemId);
409             }
410         }
411         break;
412
413       case 'n': // next
414       case 'N':
415         item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED);
416         if ( item++ == GetItemCount() - 1 )
417           {
418             item = 0;
419           }
420
421         //wxLogMessage(_T("Focusing item %ld"), item);
422
423         SetItemState(item, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED);
424         EnsureVisible(item);
425         break;
426
427       case 'r': // show bounding Rect
428       case 'R':
429         {
430           item = event.GetIndex();
431           wxRect r;
432           if ( !GetItemRect(item, r) )
433             {
434               //wxLogError(_T("Failed to retrieve rect of item %ld"), item);
435               break;
436             }
437
438           //wxLogMessage(_T("Bounding rect of item %ld is (%d, %d)-(%d, %d)"),
439           //   item, r.x, r.y, r.x + r.width, r.y + r.height);
440         }
441         break;
442
443       case WXK_DELETE:
444         item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
445         /*
446           while ( item != -1 )
447           {
448           DeleteItem(item);
449
450           //wxLogMessage(_T("Item %ld deleted"), item);
451
452           // -1 because the indices were shifted by DeleteItem()
453           item = GetNextItem(item - 1,
454           wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
455           }
456         */
457         break;
458
459       case WXK_INSERT:
460         if ( GetWindowStyle() & wxLC_REPORT )
461           {
462             if ( GetWindowStyle() & wxLC_VIRTUAL )
463               {
464                 SetItemCount(GetItemCount() + 1);
465               }
466             else // !virtual
467               {
468                 //InsertItemInReportView(event.GetIndex());
469               }
470           }
471         //else: fall through
472
473       default:
474         LogEvent(event, _T("OnListKeyDown"));
475
476         event.Skip();
477       }
478   }
479
480   void WxGUIBlackBoxList::OnChar(wxKeyEvent& event)
481   {
482     //wxLogMessage(_T("Got char event."));
483
484     switch ( event.GetKeyCode() )
485       {
486       case 'n':
487       case 'N':
488       case 'c':
489       case 'C':
490         // these are the keys we process ourselves
491         break;
492
493       default:
494         event.Skip();
495       }
496   }
497
498   void WxGUIBlackBoxList::OnRightClick(wxMouseEvent& event)
499   {
500     if ( !event.ControlDown() )
501       {
502         event.Skip();
503         return;
504       }
505
506     int flags;
507     long subitem;
508     //    long item =
509     HitTest(event.GetPosition(), flags, &subitem);
510
511     wxString where;
512     switch ( flags )
513       {
514       case wxLIST_HITTEST_ABOVE:       where = _T("above");           break;
515       case wxLIST_HITTEST_BELOW:       where = _T("below");           break;
516       case wxLIST_HITTEST_NOWHERE:     where = _T("nowhere near");    break;
517       case wxLIST_HITTEST_ONITEMICON:  where = _T("on icon of");      break;
518       case wxLIST_HITTEST_ONITEMLABEL: where = _T("on label of");     break;
519       case wxLIST_HITTEST_ONITEMRIGHT: where = _T("right on");        break;
520       case wxLIST_HITTEST_TOLEFT:      where = _T("to the left of");  break;
521       case wxLIST_HITTEST_TORIGHT:     where = _T("to the right of"); break;
522       default: where = _T("not clear exactly where on");              break;
523       }
524
525     //wxLogMessage(_T("Right double click %s item %ld, subitem %ld"),
526     //             where.c_str(), item, subitem);
527   }
528
529   void WxGUIBlackBoxList::LogEvent(const wxListEvent& event, const wxChar *eventName)
530   {
531     //wxLogMessage(_T("Item %ld: %s (item text = %s, data = %ld)"),
532     //            event.GetIndex(), eventName,
533     //              event.GetText().c_str(), event.GetData());
534   }
535
536   wxString WxGUIBlackBoxList::OnGetItemText(long item, long column) const
537   {
538     /*
539       if ( GetItemCount() == WXSIZEOF(SMALL_VIRTUAL_VIEW_ITEMS) )
540       {
541       return SMALL_VIRTUAL_VIEW_ITEMS[item][column];
542       }
543       else
544       {
545     */
546     return wxString::Format(_T("Column %ld of item %ld"), column, item);
547     //  }
548   }
549
550   int WxGUIBlackBoxList::OnGetItemColumnImage(long item, long column) const
551   {
552     if (!column)
553       return 0;
554
555     if (!(item %3) && column == 1)
556       return 0;
557
558     return -1;
559   }
560
561   wxListItemAttr *WxGUIBlackBoxList::OnGetItemAttr(long item) const
562   {
563     return item % 2 ? NULL : (wxListItemAttr *)&m_attr;
564   }
565
566
567 #if USE_CONTEXT_MENU
568   void WxGUIBlackBoxList::OnContextMenu(wxContextMenuEvent& event)
569   {
570     wxPoint point = event.GetPosition();
571     // If from keyboard
572     if (point.x == -1 && point.y == -1) {
573       wxSize size = GetSize();
574       point.x = size.x / 2;
575       point.y = size.y / 2;
576     } else {
577       point = ScreenToClient(point);
578     }
579     ShowContextMenu(point);
580   }
581 #endif
582
583   void WxGUIBlackBoxList::ShowContextMenu(const wxPoint& pos)
584   {
585     wxMenu menu;
586
587     menu.Append(wxID_ABOUT, _T("&About"));
588     menu.AppendSeparator();
589     menu.Append(wxID_EXIT, _T("E&xit"));
590
591     PopupMenu(&menu, pos.x, pos.y);
592   }
593   //================================================================
594
595
596
597   //================================================================
598   WxGUIBlackBoxInfo::WxGUIBlackBoxInfo(wxWindow* parent)
599     :
600     wxPanel(parent, -1),
601     mDescriptor()
602   {
603     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
604
605     //    mName = new wxStaticText(this,-1,_T(""));
606     //    sizer->Add(mName,0,wxGROW);
607     mDescription = new wxStaticText(this,-1,_T(""));
608     sizer->Add(mDescription,0,wxGROW);
609     mAuthor = new wxStaticText(this,-1,_T(""));
610     sizer->Add(mAuthor,0,wxGROW);
611     mCategory = new wxStaticText(this,-1,_T(""));
612     sizer->Add(mCategory,0,wxGROW);
613
614     wxBoxSizer *inputs =
615       new wxStaticBoxSizer
616       ( new wxStaticBox(this, wxID_ANY, _T("Inputs")), wxVERTICAL );
617     mInputList = new wxListCtrl(this, -1,
618                                 wxDefaultPosition,
619                                 wxDefaultSize,
620                                 wxLC_REPORT //wxLC_LIST
621                                 | wxSUNKEN_BORDER);
622
623     inputs->Add(mInputList,1,wxGROW);
624     sizer->Add(inputs,1,wxGROW);
625
626     wxBoxSizer *outputs =
627       new wxStaticBoxSizer
628       ( new wxStaticBox(this, wxID_ANY, _T("Outputs")), wxVERTICAL );
629     mOutputList = new wxListCtrl(this, -1,
630                                  wxDefaultPosition,
631                                  wxDefaultSize,
632                                  wxLC_REPORT //wxLC_LIST
633                                  | wxSUNKEN_BORDER);
634
635     outputs->Add(mOutputList,1,wxGROW);
636     sizer->Add(outputs,1,wxGROW);
637
638     SetSizer(sizer);
639     SetAutoLayout(true);
640     Layout();
641   }
642   //================================================================
643
644
645   //================================================================
646   void WxGUIBlackBoxInfo::UpdateInfo(BlackBoxDescriptor* descr)
647   {
648
649     //    mName->SetLabel(std2wx(descr->GetTypeName()));
650     mDescription->SetLabel(std2wx(descr->GetDescription()));
651     mAuthor->SetLabel(std2wx(descr->GetAuthor()));
652     mCategory->SetLabel(std2wx(descr->GetCategory()));
653
654     mInputList->ClearAll();
655     mInputList->InsertColumn( 0, _("Name"),
656                                wxLIST_FORMAT_LEFT, 80  );
657     mInputList->InsertColumn( 1, _("Type"),
658                                wxLIST_FORMAT_LEFT, 100 );
659     mInputList->InsertColumn( 2, _("Nature"),
660                                wxLIST_FORMAT_LEFT, 100  );
661     mInputList->InsertColumn( 3, _("Description"),
662                                wxLIST_FORMAT_LEFT, 500  );
663
664     mOutputList->ClearAll();
665     mOutputList->InsertColumn( 0, _("Name"),
666                                wxLIST_FORMAT_LEFT, 80  );
667     mOutputList->InsertColumn( 1, _("Type"),
668                                wxLIST_FORMAT_LEFT, 100 );
669     mOutputList->InsertColumn( 2, _("Nature"),
670                                wxLIST_FORMAT_LEFT, 100  );
671     mOutputList->InsertColumn( 3, _("Description"),
672                                wxLIST_FORMAT_LEFT, 500  );
673
674
675     std::vector<BlackBoxInputOutputDescriptor*> user_defined;
676     std::vector<BlackBoxInputOutputDescriptor*> ubb_defined;
677     std::vector<BlackBoxInputOutputDescriptor*> wxbb_defined;
678
679     const BlackBoxDescriptor::InputDescriptorMapType& imap =
680       descr->GetInputDescriptorMap();
681     BlackBoxDescriptor::InputDescriptorMapType::const_iterator in;
682     for ( in = imap.begin();  in != imap.end(); ++in )
683       {
684         int iotype = 0;
685         if (in->second->GetCreatorTypeInfo() ==
686             typeid(AtomicBlackBoxDescriptor))
687           {
688             iotype = 1;
689           }
690         else if (in->second->GetCreatorTypeInfo() ==
691                  typeid(WxBlackBoxDescriptor))
692           {
693             iotype = 2;
694           }
695         if (iotype==0) user_defined.push_back(in->second);
696         else if (iotype==1) ubb_defined.push_back(in->second);
697         else if (iotype==2) wxbb_defined.push_back(in->second);
698
699       }
700
701     std::vector<BlackBoxInputOutputDescriptor*>::iterator hi;
702     for (hi=user_defined.begin();hi!=user_defined.end();++hi)
703       {
704         InsertInputOutput(mInputList,*hi);
705       }
706     for (hi=wxbb_defined.begin();hi!=wxbb_defined.end();++hi)
707       {
708         InsertInputOutput(mInputList,*hi);
709       }
710     for (hi=ubb_defined.begin();hi!=ubb_defined.end();++hi)
711       {
712         InsertInputOutput(mInputList,*hi);
713       }
714
715     // Outputs
716     user_defined.clear();
717     ubb_defined.clear();
718     wxbb_defined.clear();
719     const BlackBoxDescriptor::OutputDescriptorMapType& omap =
720       descr->GetOutputDescriptorMap();
721     BlackBoxDescriptor::OutputDescriptorMapType::const_iterator out;
722     for ( out = omap.begin();  out != omap.end(); ++out )
723       {
724         int iotype = 0;
725         if (out->second->GetCreatorTypeInfo() ==
726             typeid(AtomicBlackBoxDescriptor))
727           {
728             iotype = 1;
729           }
730         else if (out->second->GetCreatorTypeInfo() ==
731                  typeid(WxBlackBoxDescriptor))
732           {
733             iotype = 2;
734           }
735
736         if (iotype==0) user_defined.push_back(out->second);
737         else if (iotype==1) ubb_defined.push_back(out->second);
738         else if (iotype==2) wxbb_defined.push_back(out->second);
739
740       }
741     for (hi=user_defined.begin();hi!=user_defined.end();++hi)
742       {
743         InsertInputOutput(mOutputList,*hi);
744       }
745     for (hi=wxbb_defined.begin();hi!=wxbb_defined.end();++hi)
746       {
747         InsertInputOutput(mOutputList,*hi);
748       }
749     for (hi=ubb_defined.begin();hi!=ubb_defined.end();++hi)
750       {
751         InsertInputOutput(mOutputList,*hi);
752       }
753   }
754   //================================================================
755
756
757   //================================================================
758   void WxGUIBlackBoxInfo::InsertInputOutput(wxListCtrl* l,
759                                             BlackBoxInputOutputDescriptor* d)
760   {
761     wxListItem kNewItem;
762     kNewItem.SetAlign(wxLIST_FORMAT_LEFT);
763     int nID = l->GetItemCount();
764     //    std::cout << nID << std::endl;
765     kNewItem.SetId(nID);
766     //    kNewItem.SetMask(wxLIST_MASK_DATA);
767     //    kNewItem.SetData(d);
768     l->InsertItem(kNewItem);
769     l->SetItem(nID, 0, std2wx(d->GetName()) );
770     l->SetItem(nID, 1, std2wx(d->GetTypeName()) );
771     l->SetItem(nID, 2, std2wx(d->GetNature()) );
772     l->SetItem(nID, 3, std2wx(d->GetDescription()) );
773   }
774   //================================================================
775
776   //================================================================
777   WxGUIBlackBoxInfo::~WxGUIBlackBoxInfo()
778   {
779   }
780   //================================================================
781
782
783  enum
784     {
785       id_f1,
786       id_f2,
787       id_f3,
788       id_f4,
789       id_f5,
790       id_f6,
791       id_f7,
792       id_f8,
793       id_fc1,
794       id_fc2,
795       id_fc3
796     };
797
798   //================================================================
799   WxGUIPackageBrowser2::WxGUIPackageBrowser2( wxWindow *parent,
800                                               WxGUIPackageBrowser2User* user )
801     : wxPanel(parent, -1),
802       mUser(user),
803       mInterpreter()
804   {
805     _actualSelected=NULL;
806     m_mgr.SetManagedWindow(this);
807
808     //    wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
809     mBoxList = new WxGUIBlackBoxList(this, LIST_CTRL,
810                                      wxDefaultPosition,
811                                      wxDefaultSize,
812                                      wxLC_REPORT //wxLC_LIST
813                                      | wxSUNKEN_BORDER);
814     mBoxList->SetUser(this);
815     mBoxList->SetBackgroundColour(*wxWHITE);
816
817
818 // JGRR & CM DISABLED CLOSE BUTTON
819     m_mgr.AddPane(mBoxList,
820                   wxAuiPaneInfo().Name(wxT("BoxList"))
821                   .Caption(wxT("Black Boxes"))
822                   .MinimizeButton(true)
823                   .MaximizeButton(true)
824                   .Center()
825                   .MinSize(wxSize(100,100))
826                   .CloseButton(false)
827                   );
828     //    sizer->Add(mBoxList,5,wxGROW);
829
830     mBoxInfo = new WxGUIBlackBoxInfo(this);
831     //    sizer->Add(mBoxInfo,3,wxGROW);
832
833 // JGRR & CM DISABLED CLOSE BUTTON
834     m_mgr.AddPane(mBoxInfo,
835                   wxAuiPaneInfo().Name(wxT("Box"))
836                   .Caption(wxT(""))
837                   .MinimizeButton(true)
838                   .MaximizeButton(true)
839                   .Bottom()
840                   .MinSize(wxSize(100,200))
841                   .CloseButton(false)
842                   );
843
844     wxPanel* filters = new wxPanel(this,-1);
845     wxBoxSizer *fsizer = new wxBoxSizer(wxVERTICAL );
846     wxBoxSizer *fpack =
847       new wxStaticBoxSizer
848       ( new wxStaticBox(filters, wxID_ANY, _T("Package")), wxHORIZONTAL );
849     mPackageFilter = new wxTextCtrl(filters,id_f1,_T(""),
850                                     wxDefaultPosition,
851                                     wxDefaultSize,
852                                     wxTE_PROCESS_ENTER);
853     fpack->Add(mPackageFilter,1,wxGROW);
854     fsizer->Add(fpack,0,wxGROW);
855     wxBoxSizer *fname =
856       new wxStaticBoxSizer
857       ( new wxStaticBox(filters, wxID_ANY, _T("Name")), wxHORIZONTAL );
858     mNameFilter = new wxTextCtrl(filters,id_f2,_T(""),
859                                     wxDefaultPosition,
860                                     wxDefaultSize,
861                                     wxTE_PROCESS_ENTER);
862     fname->Add(mNameFilter,1,wxGROW);
863     fsizer->Add(fname,0,wxGROW);
864     wxBoxSizer *fdescr =
865       new wxStaticBoxSizer
866       ( new wxStaticBox(filters, wxID_ANY, _T("Description")), wxHORIZONTAL );
867     mDescriptionFilter = new wxTextCtrl(filters,id_f3,_T(""),
868                                     wxDefaultPosition,
869                                     wxDefaultSize,
870                                     wxTE_PROCESS_ENTER);
871     fdescr->Add(mDescriptionFilter,1,wxGROW);
872     fsizer->Add(fdescr,0,wxGROW);
873     wxBoxSizer *fcat =
874       new wxStaticBoxSizer
875       ( new wxStaticBox(filters, wxID_ANY, _T("Category")), wxHORIZONTAL );
876     mCategoryFilter = new wxTextCtrl(filters,id_f4,_T(""),
877                                     wxDefaultPosition,
878                                     wxDefaultSize,
879                                     wxTE_PROCESS_ENTER);
880     fcat->Add(mCategoryFilter,1,wxGROW);
881     fsizer->Add(fcat,0,wxGROW);
882     wxBoxSizer *fintype =
883       new wxStaticBoxSizer
884       ( new wxStaticBox(filters, wxID_ANY, _T("Input type")), wxHORIZONTAL );
885     mInputTypeFilter = new wxTextCtrl(filters,id_f5,_T(""),
886                                     wxDefaultPosition,
887                                     wxDefaultSize,
888                                     wxTE_PROCESS_ENTER);
889     fintype->Add(mInputTypeFilter,1,wxGROW);
890     fsizer->Add(fintype,0,wxGROW);
891     wxBoxSizer *fouttype =
892       new wxStaticBoxSizer
893       ( new wxStaticBox(filters, wxID_ANY, _T("Output type")), wxHORIZONTAL );
894     mOutputTypeFilter = new wxTextCtrl(filters,id_f6,_T(""),
895                                     wxDefaultPosition,
896                                     wxDefaultSize,
897                                     wxTE_PROCESS_ENTER);
898     fouttype->Add(mOutputTypeFilter,1,wxGROW);
899     fsizer->Add(fouttype,0,wxGROW);
900     wxBoxSizer *finnat =
901       new wxStaticBoxSizer
902       ( new wxStaticBox(filters, wxID_ANY, _T("Input nature")),wxHORIZONTAL );
903     mInputNatureFilter = new wxTextCtrl(filters,id_f7,_T(""),
904                                         wxDefaultPosition,
905                                         wxDefaultSize,
906                                         wxTE_PROCESS_ENTER);
907     finnat->Add(mInputNatureFilter,1,wxGROW);
908     fsizer->Add(finnat,0,wxGROW);
909     wxBoxSizer *foutnat =
910       new wxStaticBoxSizer
911       ( new wxStaticBox(filters, wxID_ANY,_T("Output nature")),wxHORIZONTAL );
912     mOutputNatureFilter = new wxTextCtrl(filters,id_f8,_T(""),
913                                         wxDefaultPosition,
914                                         wxDefaultSize,
915                                         wxTE_PROCESS_ENTER);
916     foutnat->Add(mOutputNatureFilter,1,wxGROW);
917     fsizer->Add(foutnat,0,wxGROW);
918
919     mShowWidgetsFilter = new wxCheckBox(filters,id_fc1,_T("Show widgets"));
920     mShowWidgetsFilter->SetValue(true);
921     fsizer->Add(mShowWidgetsFilter,0,wxGROW);
922
923     mShowAdaptorsFilter = new wxCheckBox(filters,id_fc2,_T("Show adaptors"));
924     mShowAdaptorsFilter->SetValue(false);
925     fsizer->Add(mShowAdaptorsFilter,0,wxGROW);
926
927     mShowGUIsFilter = new wxCheckBox(filters,id_fc3,_T("Show GUIs"));
928     mShowGUIsFilter->SetValue(false);
929     fsizer->Add(mShowGUIsFilter,0,wxGROW);
930
931     filters->SetSizer(fsizer);
932
933 // JGRR & CM DISABLED CLOSE BUTTON
934     m_mgr.AddPane(filters,
935                   wxAuiPaneInfo().Name(wxT("Filter"))
936                   .Caption(wxT("Filter"))
937                   .MinimizeButton(true)
938                   .MaximizeButton(true)
939                   .Left()
940                   .MinSize(wxSize(100,100)) 
941                   .CloseButton(false)
942 );
943
944     //    sizer->Add(fsizer,1,wxGROW);
945     m_mgr.Update();
946
947     //    SetSizer(sizer);
948     SetAutoLayout(true);
949     Layout();
950
951   }
952   //================================================================
953
954         Factory::Pointer WxGUIPackageBrowser2::GetFactory()
955   {
956     return mFactory;
957   }
958
959   //================================================================
960
961
962   //================================================================
963   void WxGUIPackageBrowser2::OnFilter(wxCommandEvent&)
964   {
965     RebuildList();
966   }
967   //================================================================
968
969   //================================================================
970   // User callback when a box is selected in the list
971   void WxGUIPackageBrowser2::WxGUIBlackBoxListUserOnSelected
972   ( BlackBoxDescriptor* d)
973   {
974         //RaC
975         _actualSelected=d;
976
977     mBoxInfo->UpdateInfo(d);
978     std::string title = d->GetPackage()->GetName()+"::"+d->GetTypeName();
979     m_mgr.GetPane(mBoxInfo).Caption(std2wx(title));
980     m_mgr.Update();
981   }
982
983   //================================================================
984
985   //================================================================
986   BlackBoxDescriptor* WxGUIPackageBrowser2::GetActualSelected()
987   {
988           return _actualSelected;
989   }
990
991   //================================================================
992
993   //================================================================
994   WxGUIPackageBrowser2::~WxGUIPackageBrowser2()
995   {
996     mFactory.reset();
997     mInterpreter.reset();
998     //    Object::PrintObjectListInfo("");
999     m_mgr.UnInit();
1000   }
1001   //================================================================
1002
1003   //================================================================
1004   void WxGUIPackageBrowser2::IncludeAll()
1005   {
1006     if (!mInterpreter) mInterpreter =bbtk::Interpreter::New();
1007     mInterpreter->SetCommandLine(true);
1008     std::stringstream* buf = new std::stringstream;
1009     *buf << "exec freeze_no_error" << std::endl;
1010     *buf << "message max 0" << std::endl;
1011     *buf << "include *" << std::endl;
1012     mInterpreter->InterpretBuffer(buf);
1013
1014     Factory::Pointer F = mInterpreter->GetExecuter()->GetFactory();
1015     BuildFromFactory(F);
1016   }
1017   //================================================================
1018
1019   //================================================================
1020   void WxGUIPackageBrowser2::BuildFromFactory(Factory::Pointer F)
1021   {
1022     mFactory = F;
1023     RebuildList();
1024   }
1025
1026   //================================================================
1027
1028   //================================================================
1029   void WxGUIPackageBrowser2::RebuildList()
1030   {
1031     mBoxList->Hide();
1032     mBoxList->ClearAll();
1033
1034     const Factory::PackageMapType& M = mFactory->GetPackageMap();
1035     Factory::PackageMapType::const_iterator i;
1036     for (i=M.begin();i!=M.end();++i)
1037     {
1038         Package::Pointer P = i->second;
1039         if (P->GetName() == "user") continue;
1040
1041         Package::DescriptorMapType::iterator j;
1042         for (j=P->GetDescriptorMap().begin();
1043              j!=P->GetDescriptorMap().end();
1044              ++j)
1045         {
1046             //      std::cout << "Insert "<<j->second->GetTypeName()<<std::endl;
1047             if (IsVisible(j->second))
1048               mBoxList->Insert(j->second);
1049         }// for Descriptor
1050     }// for package
1051     mBoxList->Show();
1052   }
1053   //================================================================
1054
1055  bool WxGUIPackageBrowser2::findnpos(const std::string &strA, const std::string &strB )
1056  {
1057     if ((strB=="") || (strA=="") )
1058     {
1059         return false;
1060     }
1061
1062     bool ok=false;
1063     int i,size;
1064     std::string strAA=strA;
1065     std::string strBB=strB;
1066
1067
1068     size=strAA.length();
1069     for (i=0;i<size;i++)
1070     {
1071         if ((strAA[i]>='A')&&(strAA[i]<='Z'))
1072         {
1073             strAA[i]=strAA[i]+32;
1074         }
1075     }
1076
1077     size=strBB.length();
1078     for (i=0;i<size;i++)
1079     {
1080         if ((strBB[i]>='A')&&(strBB[i]<='Z'))
1081         {
1082             strBB[i]=strBB[i]+32;
1083         }
1084     }
1085
1086
1087      if ( strAA.find(strBB) == std::string::npos )
1088      {
1089          ok=true;
1090      }
1091
1092      return ok;
1093  }
1094
1095   //================================================================
1096   bool WxGUIPackageBrowser2::IsVisible(BlackBoxDescriptor::Pointer d)
1097   {
1098     //    std::cout << "   '" << wx2std(mPackageFilter->GetValue())<<"'"<<std::endl;
1099     //    std::cout << "vs '" << d->GetPackage()->GetName() << "'"<<std::endl;
1100     if ((!mShowAdaptorsFilter->IsChecked())&&
1101         ((d->GetKind()==BlackBoxDescriptor::ADAPTOR)||
1102          (d->GetKind()==BlackBoxDescriptor::DEFAULT_ADAPTOR)))
1103     {
1104         return false;
1105     }
1106
1107     if ((!mShowGUIsFilter->IsChecked())&&
1108         ((d->GetKind()==BlackBoxDescriptor::GUI)||
1109          (d->GetKind()==BlackBoxDescriptor::DEFAULT_GUI)))
1110     {
1111         return false;
1112     }
1113
1114 //EED    if (d->GetPackage()->GetName().find( wx2std(mPackageFilter->GetValue()) ) == std::string::npos )
1115     if ( findnpos(d->GetPackage()->GetName(),wx2std(mPackageFilter->GetValue())) == true )
1116     {
1117         return false;
1118     }
1119
1120 //EED    if (d->GetTypeName().find( wx2std(mNameFilter->GetValue()) ) == std::string::npos )
1121     if ( findnpos(d->GetTypeName(),wx2std(mNameFilter->GetValue())) == true )
1122     {
1123         return false;
1124     }
1125
1126 //EED    if (d->GetDescription().find( wx2std(mDescriptionFilter->GetValue()) ) == std::string::npos )
1127     if ( findnpos(d->GetDescription(),wx2std(mDescriptionFilter->GetValue())) == true )
1128     {
1129         return false;
1130     }
1131
1132 //EED    if (d->GetCategory().find( wx2std(mCategoryFilter->GetValue()) ) == std::string::npos )
1133     if ( findnpos(d->GetCategory(),wx2std(mCategoryFilter->GetValue())) == true )
1134     {
1135         return false;
1136     }
1137
1138     if (!mShowWidgetsFilter->IsChecked())
1139     {
1140         bool found = false;
1141         const BlackBoxDescriptor::OutputDescriptorMapType& imap = d->GetOutputDescriptorMap();
1142         BlackBoxDescriptor::OutputDescriptorMapType::const_iterator in;
1143         for ( in = imap.begin();  in != imap.end(); ++in )
1144         {
1145             if (in->second->GetName() == "Widget" )
1146             {
1147                 found = true;
1148                 break;
1149             }
1150         }
1151         if (found)
1152         {
1153             return false;
1154         }
1155     }
1156
1157     if (mInputTypeFilter->GetValue().size()>0)
1158     {
1159         std::string s = wx2std(mInputTypeFilter->GetValue());
1160         bool found = false;
1161         const BlackBoxDescriptor::InputDescriptorMapType& imap = d->GetInputDescriptorMap();
1162         BlackBoxDescriptor::InputDescriptorMapType::const_iterator in;
1163         for ( in = imap.begin();  in != imap.end(); ++in )
1164         {
1165 //EED           if (in->second->GetTypeName().find(s)!=std::string::npos)
1166                 if ( findnpos( in->second->GetTypeName() , s ) == true )
1167             {
1168                 found = true;
1169                 break;
1170             }
1171         }
1172         if (!found)
1173         {
1174             return false;
1175         }
1176      }
1177
1178     if (mOutputTypeFilter->GetValue().size()>0)
1179     {
1180         std::string s = wx2std(mOutputTypeFilter->GetValue());
1181         bool found = false;
1182         const BlackBoxDescriptor::OutputDescriptorMapType& imap = d->GetOutputDescriptorMap();
1183         BlackBoxDescriptor::OutputDescriptorMapType::const_iterator in;
1184         for ( in = imap.begin();  in != imap.end(); ++in )
1185         {
1186  //EED      if (in->second->GetTypeName().find(s)!=std::string::npos)
1187             if ( findnpos( in->second->GetTypeName() , s ) == true )
1188             {
1189                 found = true;
1190                 break;
1191             }
1192         }
1193         if (!found)
1194         {
1195             return false;
1196         }
1197      }
1198
1199     if (mInputNatureFilter->GetValue().size()>0)
1200     {
1201         std::string s = wx2std(mInputNatureFilter->GetValue());
1202         bool found = false;
1203         const BlackBoxDescriptor::InputDescriptorMapType& imap = d->GetInputDescriptorMap();
1204         BlackBoxDescriptor::InputDescriptorMapType::const_iterator in;
1205         for ( in = imap.begin();  in != imap.end(); ++in )
1206         {
1207 //EED            if (in->second->GetNature().find(s)!=std::string::npos)
1208             if ( findnpos( in->second->GetNature() , s ) == true )
1209             {
1210                 found = true;
1211                 break;
1212             }
1213         }
1214         if (!found)
1215         {
1216             return false;
1217         }
1218      }
1219
1220     if (mOutputNatureFilter->GetValue().size()>0)
1221     {
1222         std::string s = wx2std(mOutputNatureFilter->GetValue());
1223         bool found = false;
1224         const BlackBoxDescriptor::OutputDescriptorMapType& imap = d->GetOutputDescriptorMap();
1225         BlackBoxDescriptor::OutputDescriptorMapType::const_iterator in;
1226         for ( in = imap.begin();  in != imap.end(); ++in )
1227         {
1228 //EED            if (in->second->GetNature().find(s)!=std::string::npos)
1229             if ( findnpos( in->second->GetNature() , s ) == true )
1230             {
1231                 found = true;
1232                 break;
1233             }
1234         }
1235         if (!found)
1236         {
1237             return false;
1238         }
1239      }
1240
1241     return true;
1242
1243   }
1244   //========================================================================
1245
1246   //========================================================================
1247   BEGIN_EVENT_TABLE(WxGUIPackageBrowser2, wxPanel)
1248 //EED    EVT_TEXT_ENTER(id_f1, WxGUIPackageBrowser2::OnFilter )
1249 //EED    EVT_TEXT_ENTER(id_f2, WxGUIPackageBrowser2::OnFilter )
1250 //EED    EVT_TEXT_ENTER(id_f3, WxGUIPackageBrowser2::OnFilter )
1251 //EED    EVT_TEXT_ENTER(id_f4, WxGUIPackageBrowser2::OnFilter )
1252 //EED    EVT_TEXT_ENTER(id_f5, WxGUIPackageBrowser2::OnFilter )
1253 //EED    EVT_TEXT_ENTER(id_f6, WxGUIPackageBrowser2::OnFilter )
1254 //EED    EVT_TEXT_ENTER(id_f7, WxGUIPackageBrowser2::OnFilter )
1255 //EED    EVT_TEXT_ENTER(id_f8, WxGUIPackageBrowser2::OnFilter )
1256
1257     EVT_TEXT(id_f1, WxGUIPackageBrowser2::OnFilter )
1258     EVT_TEXT(id_f2, WxGUIPackageBrowser2::OnFilter )
1259     EVT_TEXT(id_f3, WxGUIPackageBrowser2::OnFilter )
1260     EVT_TEXT(id_f4, WxGUIPackageBrowser2::OnFilter )
1261     EVT_TEXT(id_f5, WxGUIPackageBrowser2::OnFilter )
1262     EVT_TEXT(id_f6, WxGUIPackageBrowser2::OnFilter )
1263     EVT_TEXT(id_f7, WxGUIPackageBrowser2::OnFilter )
1264     EVT_TEXT(id_f8, WxGUIPackageBrowser2::OnFilter )
1265
1266     EVT_CHECKBOX( id_fc1, WxGUIPackageBrowser2::OnFilter )
1267     EVT_CHECKBOX( id_fc2, WxGUIPackageBrowser2::OnFilter )
1268     EVT_CHECKBOX( id_fc3, WxGUIPackageBrowser2::OnFilter )
1269     END_EVENT_TABLE()
1270   //========================================================================
1271
1272
1273
1274   //================================================================
1275   WxGUIPackageBrowser2Window::WxGUIPackageBrowser2Window( wxWindow *parent,
1276                                                           wxString title,
1277                                                           wxSize size)
1278       : wxFrame((wxFrame *)parent, -1, title, wxDefaultPosition, size)
1279   {
1280     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
1281
1282     mBrowser = new WxGUIPackageBrowser2(this);
1283     mBrowser->IncludeAll();
1284     sizer->Add(mBrowser,1,wxGROW);
1285
1286     //    WxGUICommand* com = new WxGUICommand(this,this);
1287     //    sizer->Add(com);
1288
1289     SetSizer(sizer);
1290
1291      // Creates the parent window of all bbtk windows as a child of this
1292 //    Wx::CreateTopWindow(this);
1293     // Add the method OnWxSignal as a Wx::Signal observer
1294     //bbtkAddWxSignalObserver(WxGUIPackageBrowser2Window::OnWxSignal);
1295
1296     SetAutoLayout(true);
1297     Layout();
1298   }
1299   //================================================================
1300
1301   //================================================================
1302   WxGUIPackageBrowser2Window::~WxGUIPackageBrowser2Window()
1303   {
1304   }
1305   //================================================================
1306
1307 } // namespace bbtk
1308
1309
1310 #endif //_USE_WXWIDGETS_