block.cc

Go to the documentation of this file.
00001 
00003 
00004 //
00005 // Copyright (c) 1999-2004 California Institute of Technology
00006 // Copyright (c) 2004-2007 University of Southern California
00007 // Rob Peters <rjpeters at usc dot edu>
00008 //
00009 // created: Sat Jun 26 12:29:34 1999
00010 // commit: $Id: block.cc 10065 2007-04-12 05:54:56Z rjpeters $
00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/visx/block.cc $
00012 //
00013 // --------------------------------------------------------------------
00014 //
00015 // This file is part of GroovX.
00016 //   [http://ilab.usc.edu/rjpeters/groovx/]
00017 //
00018 // GroovX is free software; you can redistribute it and/or modify it
00019 // under the terms of the GNU General Public License as published by
00020 // the Free Software Foundation; either version 2 of the License, or
00021 // (at your option) any later version.
00022 //
00023 // GroovX is distributed in the hope that it will be useful, but
00024 // WITHOUT ANY WARRANTY; without even the implied warranty of
00025 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00026 // General Public License for more details.
00027 //
00028 // You should have received a copy of the GNU General Public License
00029 // along with GroovX; if not, write to the Free Software Foundation,
00030 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00031 //
00033 
00034 #ifndef GROOVX_VISX_BLOCK_CC_UTC20050626084016_DEFINED
00035 #define GROOVX_VISX_BLOCK_CC_UTC20050626084016_DEFINED
00036 
00037 #include "visx/block.h"
00038 
00039 #include "io/ioproxy.h"
00040 #include "io/reader.h"
00041 #include "io/readutils.h"
00042 #include "io/writer.h"
00043 #include "io/writeutils.h"
00044 
00045 #include "nub/log.h"
00046 #include "nub/ref.h"
00047 
00048 #include "rutz/fstring.h"
00049 
00050 #define GVX_DYNAMIC_TRACE_EXPR Block::tracer.status()
00051 #include "rutz/trace.h"
00052 #include "rutz/debug.h"
00053 GVX_DBG_REGISTER
00054 
00056 //
00057 // File scope data
00058 //
00060 
00061 rutz::tracer Block::tracer;
00062 
00063 namespace
00064 {
00065   io::version_id BLOCK_SVID = 3;
00066 }
00067 
00069 //
00070 // Block creators
00071 //
00073 
00074 Block* Block::make()
00075 {
00076 GVX_TRACE("Block::make");
00077   return new Block;
00078 }
00079 
00080 Block::Block() :
00081   itsParent( 0 )
00082 {
00083 GVX_TRACE("Block::Block");
00084 }
00085 
00086 Block::~Block() throw()
00087 {}
00088 
00089 io::version_id Block::class_version_id() const
00090 {
00091 GVX_TRACE("Block::class_version_id");
00092   return BLOCK_SVID;
00093 }
00094 
00095 void Block::read_from(io::reader& reader)
00096 {
00097 GVX_TRACE("Block::read_from");
00098 
00099   reader.ensure_version_id("Block", 3,
00100                            "Try cvs tag xml_conversion_20040526",
00101                            SRC_POS);
00102 
00103   reader.read_base_class("ElementContainer",
00104                        io::make_proxy<ElementContainer>(this));
00105 }
00106 
00107 void Block::write_to(io::writer& writer) const
00108 {
00109 GVX_TRACE("Block::write_to");
00110 
00111   writer.ensure_output_version_id("Block", BLOCK_SVID, 3,
00112                               "Try groovx0.8a7", SRC_POS);
00113 
00114   writer.write_base_class("ElementContainer",
00115                         io::make_const_proxy<ElementContainer>(this));
00116 }
00117 
00119 //
00120 // Block's Element interface
00121 //
00123 
00124 const nub::soft_ref<Toglet>& Block::getWidget() const
00125 {
00126 GVX_TRACE("Block::getWidget");
00127   GVX_PRECONDITION( itsParent != 0 );
00128   return itsParent->getWidget();
00129 }
00130 
00131 void Block::vxRun(Element& e)
00132 {
00133 GVX_TRACE("Block::vxRun");
00134 
00135   if ( isComplete() ) return;
00136 
00137   GVX_PRECONDITION( &e != 0 );
00138 
00139   nub::log( vxInfo() );
00140 
00141   itsParent = &e;
00142 
00143   currentElement()->vxRun(*this);
00144 }
00145 
00146 void Block::vxEndTrialHook()
00147 {
00148 GVX_TRACE("Block::vxEndTrialHook");
00149 
00150   if (itsParent != 0)
00151     itsParent->vxEndTrialHook();
00152 }
00153 
00154 void Block::vxAllChildrenFinished()
00155 {
00156 GVX_TRACE("Block::vxAllChildrenFinished");
00157 
00158   // Release our current parent, then pass control onto it.
00159   Element* p = itsParent;
00160   itsParent = 0;
00161   GVX_ASSERT( p != 0 );
00162   p->vxReturn(CHILD_OK);
00163 }
00164 
00165 static const char __attribute__((used)) vcid_groovx_visx_block_cc_utc20050626084016[] = "$Id: block.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00166 #endif // !GROOVX_VISX_BLOCK_CC_UTC20050626084016_DEFINED

The software described here is Copyright (c) 1998-2005, Rob Peters.
This page was generated Wed Dec 3 06:49:41 2008 by Doxygen version 1.5.5.