]> Creatis software - creaImageIO.git/commitdiff
Added validation function (visible in ok button being enabled or not)
authorcaballero <caballero>
Tue, 24 Feb 2009 16:37:10 +0000 (16:37 +0000)
committercaballero <caballero>
Tue, 24 Feb 2009 16:37:10 +0000 (16:37 +0000)
appli/TestWxGimmickReaderDialog/main.cxx
src2/creaImageIOGimmickView.h
src2/creaImageIOTreeView.h
src2/creaImageIOWxGimmickReaderDialog.cpp
src2/creaImageIOWxGimmickReaderDialog.h
src2/creaImageIOWxGimmickView.cpp
src2/creaImageIOWxGimmickView.h
src2/creaImageIOWxTreeView.cpp
src2/creaImageIOWxTreeView.h

index 8149724adc7b2ea418f298b1252b6d21be57f62f..4ce9a54dd401755af12ad6f2116dfa7f6cef489d 100644 (file)
@@ -31,6 +31,7 @@ bool myApp::OnInit( )
 
    int min_dim = GIMMICK_2D_IMAGE_SELECTION;
    int max_dim = GIMMICK_3D_IMAGE_SELECTION;
+   int output_dim = NATIVE;
    int threads = 1;
 
    creaImageIO::WxGimmickReaderDialog w(0,
@@ -40,6 +41,7 @@ bool myApp::OnInit( )
                                        wxSize(1200,800),
                                        min_dim,
                                        max_dim,
+                                       output_dim,
                                        threads);
    w.ShowModal();
    
index 8407a9179cb22008dbcdd940e934862777b0f10d..a521f8de820c75a4053fa08102dc1e4f52bbb138 100644 (file)
 #define GIMMICK_3D_IMAGE_SELECTION 3
 #define GIMMICK_4D_IMAGE_SELECTION 4
 
+#define NATIVE 0
+#define _2D 2
+#define _3D 3
+
 
 namespace creaImageIO
 {
index fe29f3bddab5635487bcef758a1943289e0c81ab..de4f7f23bd621f474f30e9a97a71a793cf399204 100644 (file)
@@ -10,6 +10,7 @@ namespace creaImageIO
   /**
    * \ingroup View
    */
+       
   //=====================================================================
   
   //=====================================================================
@@ -40,17 +41,37 @@ namespace creaImageIO
     ///Returns the selected data as a vector of vtkImageData (4D)
          virtual void GetSelectedImages(std::vector<vtkImageData*>& s, int dim)
          { GimmickError("INTERNAL ERROR : TreeView::GetSelectedImages not overloaded");}
+
+         ///Sets the maximum dimension allowed for selections
+         void SetMaxDimension(int maxdim){ mSelectionMaxDimension=maxdim; }
+         ///Sets the minimum dimension allowed for selections
+         void SetMinDimension(int mindim){ mSelectionMinDimension=mindim; }
+         ///Sets the output dimension desired for selections
+         void SetOutputDimension(int outdim){ mOutputDimension=outdim; }
     
     protected:
       TreeHandler* GetTreeHandler() { return mTreeHandler; }
+         ///Gets the maximum dimension allowed for selections
+         int GetMaxDimension(){ return mSelectionMaxDimension; }
+         ///Gets the minimum dimension allowed for selections
+         int GetMinDimension(){ return mSelectionMinDimension; }
+         ///Gets the output dimension desired for selections
+         int GetOutputDimension(){ return mOutputDimension; }
 
     private:
       /// The TreeHandler with which it corresponds
       TreeHandler* mTreeHandler;
+         //The selection's maximum dimension
+         int mSelectionMaxDimension;
+         //The selection's minimum dimension
+         int mSelectionMinDimension;
+         //The user desired output dimension
+         int mOutputDimension;
     };
     // EO class TreeView
     //=====================================================================
   
+  
 } // EO namespace creaImageIO
 
 // EOF
index 2bf166168c26db24dc3fc102043e84c04d713b05..c12cd066b3998975b3656588b4bd730b629feb61 100644 (file)
@@ -11,6 +11,7 @@ namespace creaImageIO
                                               const wxSize& size,
                                               int min_dim,
                                                   int max_dim,
+                                                  int out_dim,
                                               int threads)
  :   wxDialog( parent, 
                  id, 
@@ -44,6 +45,7 @@ namespace creaImageIO
                                size,
                                min_dim,
                                max_dim,
+                               out_dim,
                                threads);
       mView->Initialize();
     }
@@ -83,11 +85,20 @@ namespace creaImageIO
       }
   }
 
+  ///Callback method on a selection
+  void WxGimmickReaderDialog::OnValid(wxCommandEvent& event)
+  {
+          if (event.GetInt()==0)
+          {mOkButton->Enable(true);}
+          else
+          {mOkButton->Enable(false);}
+  }
+
 
   
   //================================================================
   BEGIN_EVENT_TABLE(WxGimmickReaderDialog, wxDialog)
-        
+       EVT_COMMAND(wxID_ANY, 0, WxGimmickReaderDialog::OnValid) 
   END_EVENT_TABLE()
   //================================================================
 
index 9526d374e428c154acc08f203113161dfc07a8a4..54f929c044b0f2eb7160c3af039a11dea5085311 100644 (file)
@@ -5,12 +5,13 @@
 
 #include <creaImageIOWxGimmickView.h>
 #include <creaWx.h>
-
+#include "wx/wx.h"
 namespace creaImageIO
 {
   /**
    * \ingroup GUI
    */
+       
   //=====================================================================
  //=====================================================================
   class /*CREAIMAGEIO_EXPORT*/ WxGimmickReaderDialog : public wxDialog
@@ -22,8 +23,9 @@ namespace creaImageIO
                          wxString title,
                          const wxPoint& pos, 
                          const wxSize& size,
-                         int image_min_type = GIMMICK_2D_IMAGE_SELECTION,
-                         int image_max_type = GIMMICK_3D_IMAGE_SELECTION,
+                         int image_min_dim = GIMMICK_2D_IMAGE_SELECTION,
+                         int image_max_dim = GIMMICK_3D_IMAGE_SELECTION,
+                         int output_dim = NATIVE,
                          int threads = 0);
     
     Gimmick* GetGimmick() { return mGimmick; }
@@ -48,11 +50,13 @@ namespace creaImageIO
     void OnSelChanged(EventType& event);
     void OnContextualMenu(EventType& event);
     void OnMenuTest(wxCommandEvent& event);
-       //    void OnValid(wxCommandEvent& event);
+       void OnValid(wxCommandEvent& event);
     //    void OnButtonOk(wxCommandEvent& event);
     //    void OnButtonCancel(wxCommandEvent& event);
 
-    DECLARE_EVENT_TABLE();
+    DECLARE_EVENT_TABLE()
+       
+       
   private :
     
     Gimmick*       mGimmick;
@@ -70,11 +74,11 @@ namespace creaImageIO
 
   }; // class WxGimmickReaderDialog
   //=====================================================================
-
-  
+       
 } // EO namespace creaImageIO
 
 
+
 #endif // USE_WIDGETS
 // EOF
 #endif  
index edcc6843d54b17fb39b4f0aa38cb087c088e4bcc..cec329ba94ba9d9bc30c8651f121d8255b627930 100644 (file)
@@ -63,6 +63,7 @@ namespace creaImageIO
                               const wxPoint& pos, const wxSize& size,
                               int min_dim,
                                   int max_dim,
+                                  int out_dim,
                               int number_of_threads)
     : wxPanel(parent,id,pos,size),
       GimmickView(gimmick),
@@ -99,6 +100,10 @@ namespace creaImageIO
        //Gimmick
        mGimmick=gimmick;
 
+       mSelectionMaxDimension=max_dim;
+       mSelectionMinDimension=min_dim;
+       mOutputDimension=out_dim;
+
     // Create the views
     CreateTreeViews();
 
@@ -181,6 +186,10 @@ namespace creaImageIO
                   name<<"'"<<std::endl);
     // Create the WxTreeView
     WxTreeView* view = new WxTreeView(h,mNotebook,-1);
+       
+       view->SetMaxDimension(mSelectionMaxDimension);
+       view->SetMinDimension(mSelectionMinDimension);
+       view->SetOutputDimension(mOutputDimension);
 
     // TO DO : TEST THAT A VIEW WITH SAME NAME IS NOT
     // ALREADY IN THE MAP
index 1da272979ddbaa4a793ddddc2245a3a6789ede38..235c8f0cd1f4619369e32205b328548a4efa3299 100644 (file)
@@ -32,6 +32,7 @@ namespace creaImageIO
                    const wxPoint& pos, const wxSize& size,
                    int min_dim = GIMMICK_2D_IMAGE_SELECTION,
                        int max_dim = GIMMICK_3D_IMAGE_SELECTION,
+                       int out_dim = NATIVE,
                    int number_of_threads = 0);
       /// Virtual destructor
       virtual ~WxGimmickView();
@@ -84,6 +85,12 @@ namespace creaImageIO
       void OnAddProgress( Gimmick::AddProgress& );
       /// Progress dialog
       wxProgressDialog* mProgressDialog;
+         //The selection's maximum dimension
+         int mSelectionMaxDimension;
+         //The selection's minimum dimension
+         int mSelectionMinDimension;
+         //The user desired output dimension
+         int mOutputDimension;
 
 
       wxString mCurrentDirectory;
index 1b3d20d7d0ff829db0b92e30b4ae12ab1aca9add..bd640783e8a210ffec1bdbec9dfa76f3317fd5fe 100644 (file)
@@ -308,7 +308,7 @@ namespace creaImageIO
 
 
   //================================================================
-  void WxTreeView::OnSelected(wxListEvent& event)
+  void WxTreeView::OnSelectedChanged(wxListEvent& event)
   { 
     GimmickDebugMessage(1,
                        GetTreeHandler()->GetTree().GetLabel()
@@ -454,15 +454,99 @@ namespace creaImageIO
 
   void WxTreeView::ValidateSelectedImages()
   {
-         GimmickMessage(1,
-                       "Hello World Validate"
-                           <<std::endl);
-         /*
-       MyEvent event( MyCommandEvent, 0 );
-       wxString bar( wxT("This is a Foo_DoFirstThing event") );
-       event.SetText( bar );
-       wxPostEvent( this, event );
-       */
+       int level=mLevelList.size();
+       std::vector<tree::Node*> sel=GetSelected(level+1);
+       if(sel.size()>0)
+       {
+               std::vector<tree::Node*>::iterator i;
+               bool valid=true;
+               std::string row;
+               std::string col;
+               std::string plane;
+               
+               //Validation between image sizes
+               for (i=sel.begin(); i!=sel.end() && valid; ++i)
+               {
+                       if(i==sel.begin())
+                       {
+                               row=(*i)->GetAttribute(mLevelList[level-1].key[1]);
+                               col=(*i)->GetAttribute(mLevelList[level-1].key[2]);
+                               plane=(*i)->GetAttribute(mLevelList[level-1].key[3]);
+                       }
+                       else
+                       {
+                               if(((*i)->GetAttribute(mLevelList[level-1].key[1]))!=row ||
+                                       ((*i)->GetAttribute(mLevelList[level-1].key[2]))!=col ||
+                                       ((*i)->GetAttribute(mLevelList[level-1].key[3]))!=plane)
+                                       {
+                                               valid=false;
+                                       }
+                       }
+               }
+
+               GimmickMessage(1,
+                       "State check: Planes:" 
+                       <<plane<<" Cols: "
+                       <<col<<" Rows:"
+                               <<row<<" "
+                               << std::endl);
+               //Dimention validation
+               //Compatibility with maximum 
+               if(valid)
+               {       
+                       int rows;
+                       int cols;
+                       int planes;
+                       std::string s;
+                       std::istringstream t(s);
+                       s=row;
+                       t >> rows;
+                       if(row==""){rows=1;}
+                       s=col;
+                       t >> cols;
+                       if(col==""){cols=1;}
+                       s=plane;
+                       t >> planes;
+                       if(plane==""){planes=1;}
+
+                       int dim = 0;
+                       if (planes>1) dim=3;
+                       else if (cols>1) dim=2;
+                       else if (rows>1) dim=1;
+                   
+                       if (dim == 0) 
+                       {
+                       GimmickMessage(1,
+                               "Unknown image dimension : cannot select !" 
+                               <<dim<<" "
+                               <<plane<<" "
+                               <<col<<" "
+                               <<row<<" "
+                               << std::endl);
+                               valid= false;
+                       }
+                       else if (dim>GetMaxDimension())
+                       {
+                               GimmickMessage(1,"Selecting "<<dim<<"D images is not allowed !" 
+                               << std::endl);
+                               valid= false;
+                       }
+                       if ( dim == GetMaxDimension() )
+                       {
+                               GimmickMessage(1,"Cannot add this image to selection : would result in a "<<dim+1<<"D image !" << std::endl);
+                               valid= false;
+                       }
+               }
+                 
+               //Send an event telling wether the selection is valid or not
+               wxCommandEvent event( 0, GetId() );
+               event.SetEventObject( this );
+               if(valid)
+               {event.SetInt(0);}
+               else
+               {event.SetInt(1);}
+               GetEventHandler()->ProcessEvent( event );
+         }
        
   }
 
@@ -625,9 +709,10 @@ BEGIN_EVENT_TABLE(MyListCtrl, wxListCtrl)
     EVT_LIST_SET_INFO(LIST_CTRL, MyListCtrl::OnSetInfo)
 #endif
   */
-    EVT_LIST_ITEM_SELECTED(-1, WxTreeView::OnSelected)
-  /*
-    EVT_LIST_ITEM_DESELECTED(LIST_CTRL, MyListCtrl::OnDeselected)
+    EVT_LIST_ITEM_SELECTED(-1, WxTreeView::OnSelectedChanged)
+  
+    EVT_LIST_ITEM_DESELECTED(-1, WxTreeView::OnSelectedChanged)
+       /*
     EVT_LIST_KEY_DOWN(LIST_CTRL, MyListCtrl::OnListKeyDown)
     EVT_LIST_ITEM_ACTIVATED(LIST_CTRL, MyListCtrl::OnActivated)
     EVT_LIST_ITEM_FOCUSED(LIST_CTRL, MyListCtrl::OnFocused)
index 6ffc1f52173df045143d4ea55c93130ba355169c..3571c11dce8a6579f7b158656d8dcb27b43ead7e 100644 (file)
@@ -35,13 +35,12 @@ namespace creaImageIO
          virtual void RemoveSelected( int );
 
          /// Callback for selection change
-      void OnSelected(wxListEvent& event);
+      void OnSelectedChanged(wxListEvent& event);
 
-         /// Callback for selection change
+         /// Callback for column click
       void OnColClick(wxListEvent& event);
 
-
-    private:
+       private:
       /// The struct holding the data for one level
       /// Holds the wx control and other data
       /// such as the vector of attribute keys corresponding to the columns
@@ -71,35 +70,19 @@ namespace creaImageIO
       // Updates the view of a level given the selected items of upper level
       // Recursive method
       virtual void RecursiveUpdateLevel( int );
-
+       
+         
 
       DECLARE_EVENT_TABLE()
     };
     // EO class WxTreeView
     //=====================================================================
-  
+
+
+
 } // EO namespace creaImageIO
-/*
-class MyEvent: public wxCommandEvent
-{
-public:
-       MyEvent( wxEventType commandType = MyCommandEvent, int id = 0 )
-       :  wxCommandEvent(commandType, id) { }
-       // You *must* copy here the data to be transported
-       MyEvent( const MyEvent &event )
-       :  wxCommandEvent(event) { this->SetText( event.GetText() ); }
-       // Required for sending with wxPostEvent()
-       wxEvent* Clone() const { return new MyEvent(*this); }
-       wxString GetText() const { return m_Text; }
-       void SetText( const wxString& text ) { m_Text = text; }
-private:
-       wxString m_Text;
-};
-*/
+
+
 #endif // USE_WIDGETS
 // EOF
 #endif