Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members

Simple_UI_Tie.hxx

00001 
00002 // 
00003 // Copyright (C) 2006 James M. Lawrence.  All rights reserved.
00004 // 
00005 // software: esve-1.0.3
00006 // file: esve/components/dimn/Simple_UI_Tie.hxx
00007 // 
00008 // Redistribution and use in source and binary forms, with or without
00009 // modification, are permitted provided that the following conditions
00010 // are met:
00011 // 
00012 // 1. Redistributions of source code must retain the above copyright
00013 //    notice, this list of conditions and the following disclaimer.
00014 // 
00015 // 2. The origin of this software must not be misrepresented; you must
00016 //    not claim that you wrote the original software.  If you use this
00017 //    software in a product, an acknowledgment in the product 
00018 //    documentation would be appreciated but is not required.
00019 // 
00020 // 3. Altered source versions must be plainly marked as such, and must
00021 //    not be misrepresented as being the original software.
00022 // 
00023 // 4. The name of the author may not be used to endorse or promote
00024 //    products derived from this software without specific prior written
00025 //    permission.
00026 // 
00027 // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY,
00028 // AND WITH NO CLAIM AS TO ITS SUITABILITY FOR ANY PURPOSE.  IN NO EVENT
00029 // SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM WHATSOEVER MADE IN CONNECTION
00030 // TO THIS SOFTWARE.
00031 // 
00033 
00034 #ifndef esve_components_dimn_Simple_UI_Tie_hxx
00035 #define esve_components_dimn_Simple_UI_Tie_hxx
00036 
00037 #include <esve/components/dimn/Valuator.hxx>
00038 #include <esve/components/dimn/Valuator_Struct_Tie.hxx>
00039 #include <esve/components/dimn/Valuator_Class_Tie.hxx>
00040 #include <esve/components/dimn/Simple_UI.hxx>
00041 #include <esve/types/quat.hxx>
00042 #include <esve/types/pure.hxx>
00043 #include <esve/types/complex.hxx>
00044 
00045 namespace esve { namespace components { namespace dimn {
00046 
00060 
00062 //
00063 // Simple_UI_Tie
00064 //
00066 
00067 template< typename T_Target >
00068 class Simple_UI_Tie
00069     : public components::dimn::Valuator_Handler<types::real>,
00070       public components::dimn::Valuator_Handler<types::complex>,
00071       public components::dimn::Valuator_Handler<types::pure>,
00072       public components::dimn::Valuator_Handler<types::quat>
00073 {
00074 private:
00075     Simple_UI_Tie( const Simple_UI_Tie & ) ;
00076     Simple_UI_Tie & operator=( const Simple_UI_Tie & ) ;
00077 
00078     struct m_Tie
00079         :
00080         public Valuator_Struct_Tie<T_Target, types::real>,
00081         public Valuator_Struct_Tie<T_Target, types::complex>,
00082         public Valuator_Struct_Tie<T_Target, types::pure>,
00083         public Valuator_Struct_Tie<T_Target, types::quat>,
00084 
00085         public Valuator_Class_Tie<T_Target, types::real>,
00086         public Valuator_Class_Tie<T_Target, types::complex>,
00087         public Valuator_Class_Tie<T_Target, types::pure>,
00088         public Valuator_Class_Tie<T_Target, types::quat>
00089     {
00090         m_Tie( Simple_UI & ui, T_Target & target ) ;
00091 
00092         using Valuator_Struct_Tie<T_Target, types::real>::create_valuator ;
00093         using Valuator_Struct_Tie<T_Target, types::complex>::create_valuator ;
00094         using Valuator_Struct_Tie<T_Target, types::pure>::create_valuator ;
00095         using Valuator_Struct_Tie<T_Target, types::quat>::create_valuator ;
00096 
00097         using Valuator_Class_Tie<T_Target, types::real>::create_valuator ;
00098         using Valuator_Class_Tie<T_Target, types::complex>::create_valuator ;
00099         using Valuator_Class_Tie<T_Target, types::pure>::create_valuator ;
00100         using Valuator_Class_Tie<T_Target, types::quat>::create_valuator ;
00101 
00102         using Valuator_Struct_Tie<T_Target, types::real>::tie ;
00103         using Valuator_Struct_Tie<T_Target, types::complex>::tie ;
00104         using Valuator_Struct_Tie<T_Target, types::pure>::tie ;
00105         using Valuator_Struct_Tie<T_Target, types::quat>::tie ;
00106 
00107         using Valuator_Class_Tie<T_Target, types::real>::tie ;
00108         using Valuator_Class_Tie<T_Target, types::complex>::tie ;
00109         using Valuator_Class_Tie<T_Target, types::pure>::tie ;
00110         using Valuator_Class_Tie<T_Target, types::quat>::tie ;
00111 
00112         bool handle_valuator( const Valuator<types::real> & ) ;
00113         bool handle_valuator( const Valuator<types::complex> & ) ;
00114         bool handle_valuator( const Valuator<types::pure> & ) ;
00115         bool handle_valuator( const Valuator<types::quat> & ) ;
00116     } ;
00117 
00118     m_Tie m_tie ;
00119 
00120 public:
00121     typedef T_Target Target ;
00122 
00126     typedef types::real Target::* Real_Member ;
00127     typedef types::complex Target::* Complex_Member ;
00128     typedef types::pure Target::* Pure_Member ;
00129     typedef types::quat Target::* Quat_Member ;
00131 
00138     typedef types::real (Target::*Real_Reader)() const ;
00139     typedef void (Target::*Real_Writer)( types::real ) ;
00140 
00141     typedef const types::complex & (Target::*Complex_Reader)() const ;
00142     typedef void (Target::*Complex_Writer)( const types::complex & ) ;
00143 
00144     typedef const types::pure & (Target::*Pure_Reader)() const ;
00145     typedef void (Target::*Pure_Writer)( const types::pure & ) ;
00146 
00147     typedef const types::quat & (Target::*Quat_Reader)() const ;
00148     typedef void (Target::*Quat_Writer)( const types::quat & ) ;
00150 
00152     Simple_UI_Tie( components::dimn::Simple_UI & ui,
00153                    Target & data ) ;
00154 
00159     Valuator<types::real> &
00160     create_valuator( Real_Member member,
00161                      const std::string & name = "" )
00162     {
00163         return m_tie.create_valuator(member, name) ;
00164     }
00165 
00166     Valuator<types::complex> &
00167     create_valuator( Complex_Member member,
00168                      const std::string & name = "" )
00169     {
00170         return m_tie.create_valuator(member, name) ;
00171     }
00172 
00173     Valuator<types::pure> &
00174     create_valuator( Pure_Member member,
00175                      const std::string & name = "" )
00176     {
00177         return m_tie.create_valuator(member, name) ;
00178     }
00179 
00180     Valuator<types::quat> &
00181     create_valuator( Quat_Member member,
00182                      const std::string & name = "" )
00183     {
00184         return m_tie.create_valuator(member, name) ;
00185     }
00187 
00192     Valuator<types::real> &
00193     create_valuator( Real_Reader reader,
00194                      Real_Writer writer,
00195                      const std::string & name = "" )
00196     {
00197         return m_tie.create_valuator(reader, writer, name) ;
00198     }
00199 
00200     Valuator<types::complex> &
00201     create_valuator( Complex_Reader reader,
00202                      Complex_Writer writer,
00203                      const std::string & name = "" )
00204     {
00205         return m_tie.create_valuator(reader, writer, name) ;
00206     }
00207 
00208     Valuator<types::pure> &
00209     create_valuator( Pure_Reader reader,
00210                      Pure_Writer writer,
00211                      const std::string & name = "" )
00212     {
00213         return m_tie.create_valuator(reader, writer, name) ;
00214     }
00215 
00216     Valuator<types::quat> &
00217     create_valuator( Quat_Reader reader,
00218                      Quat_Writer writer,
00219                      const std::string & name = "" )
00220     {
00221         return m_tie.create_valuator(reader, writer, name) ;
00222     }
00224 
00229     void tie( Valuator<types::real> & valuator,
00230               Real_Member member )
00231     {
00232         m_tie.tie(valuator, member) ;
00233     }
00234 
00235     void tie( Valuator<types::complex> & valuator,
00236               Complex_Member member )
00237     {
00238         m_tie.tie(valuator, member) ;
00239     }
00240 
00241     void tie( Valuator<types::pure> & valuator,
00242               Pure_Member member )
00243     {
00244         m_tie.tie(valuator, member) ;
00245     }
00246 
00247     void tie( Valuator<types::quat> & valuator,
00248               Quat_Member member )
00249     {
00250         m_tie.tie(valuator, member) ;
00251     }
00253 
00258     void tie( Valuator<types::real> & valuator,
00259               Real_Reader reader,
00260               Real_Writer writer )
00261     {
00262         m_tie.tie(valuator, reader, writer) ;
00263     }
00264 
00265     void tie( Valuator<types::complex> & valuator,
00266               Complex_Reader reader,
00267               Complex_Writer writer )
00268     {
00269         m_tie.tie(valuator, reader, writer) ;
00270     }
00271 
00272     void tie( Valuator<types::pure> & valuator,
00273               Pure_Reader reader,
00274               Pure_Writer writer )
00275     {
00276         m_tie.tie(valuator, reader, writer) ;
00277     }
00278 
00279     void tie( Valuator<types::quat> & valuator,
00280               Quat_Reader reader,
00281               Quat_Writer writer )
00282     {
00283         m_tie.tie(valuator, reader, writer) ;
00284     }
00286 
00287     ~Simple_UI_Tie() ;
00288 
00289 protected:
00290     bool handle_valuator( const Valuator<types::real> & v ) ;
00291     bool handle_valuator( const Valuator<types::complex> & v ) ;
00292     bool handle_valuator( const Valuator<types::pure> & v ) ;
00293     bool handle_valuator( const Valuator<types::quat> & v ) ;
00294 } ;
00295 
00296 }}} // namespace esve::components::dimn
00297 
00298 #include <esve/components/dimn/Simple_UI_Tie.template.cxx>
00299 
00300 #endif
00301 

Generated on Tue May 30 11:40:53 2006 for esve by doxygen 1.3.4