diff --git a/hurricane/CMakeLists.txt b/hurricane/CMakeLists.txt index f1697a89..76511e1e 100644 --- a/hurricane/CMakeLists.txt +++ b/hurricane/CMakeLists.txt @@ -54,15 +54,18 @@ IF(NOT BUILD_SHARED_LIBS) NO_DEFAULT_PATH ) MESSAGE(STATUS "Building static libraries.") - IF(Boost_FOUND) - ENDIF(Boost_FOUND) ELSE(NOT BUILD_SHARED_LIBS) MESSAGE(STATUS "Building dynamic libraries.") ENDIF(NOT BUILD_SHARED_LIBS) SET(Boost_USE_STATIC_LIBS ON) MESSAGE(STATUS "Always uses Boost static libraries.") -FIND_PACKAGE(Boost 1.33.1 COMPONENTS regex REQUIRED) +FIND_PACKAGE(Boost 1.35.0 COMPONENTS regex) +IF(NOT Boost_FOUND) + FIND_PACKAGE(Boost 1.33.1 COMPONENTS regex REQUIRED) +ENDIF(NOT Boost_FOUND) +MESSAGE(STATUS "Found Boost libraries ${Boost_LIB_VERSION} in ${Boost_INCLUDE_DIR}") +MESSAGE(STATUS " ${Boost_LIBRARIES}") ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(cmake_modules) diff --git a/hurricane/src/hurricane/Breakpoint.cpp b/hurricane/src/hurricane/Breakpoint.cpp index 04c192bb..f18e41e4 100644 --- a/hurricane/src/hurricane/Breakpoint.cpp +++ b/hurricane/src/hurricane/Breakpoint.cpp @@ -133,7 +133,7 @@ namespace Hurricane { bool Breakpoint::_stop ( unsigned int level, const string& message ) { - if ( _stopCb && ( level <= _stopLevel ) ) + if ( _stopCb && ( level >= _stopLevel ) ) return _stopCb ( message ); return false; diff --git a/hurricane/src/hurricane/Instance.cpp b/hurricane/src/hurricane/Instance.cpp index 865b2bac..349693c8 100644 --- a/hurricane/src/hurricane/Instance.cpp +++ b/hurricane/src/hurricane/Instance.cpp @@ -304,14 +304,13 @@ void Instance::materialize() // ************************* { if (not isMaterialized()) { - cerr << "materialize: " << this << endl; - Box boundingBox = getBoundingBox(); - if (!boundingBox.isEmpty()) { - QuadTree* quadTree = _cell->_getQuadTree(); - quadTree->insert(this); - _cell->_fit(quadTree->getBoundingBox()); - } + Box boundingBox = getBoundingBox(); + if (!boundingBox.isEmpty()) { + QuadTree* quadTree = _cell->_getQuadTree(); + quadTree->insert(this); + _cell->_fit(quadTree->getBoundingBox()); } + } } void Instance::unmaterialize() @@ -376,18 +375,15 @@ void Instance::setTransformation(const Transformation& transformation) void Instance::setPlacementStatus(const PlacementStatus& placementstatus) // ********************************************************************** { - cerr << "setPlacementStatus of " << this << " to " << placementstatus << endl; if (placementstatus != _placementStatus) { invalidate(true); if (_placementStatus == PlacementStatus::UNPLACED) { - cerr << "setPlacementStatus: PLACED/FIXED " << this << endl; materialize (); } else if (placementstatus == PlacementStatus::UNPLACED) unmaterialize (); _placementStatus = placementstatus; - } } @@ -460,12 +456,9 @@ void Instance::_postCreate() end_for; } - cerr << "Initial placement status " << this << " " << _placementStatus << endl; - bool autoMaterialization = not autoMaterializationIsDisabled(); if ( _placementStatus == PlacementStatus::UNPLACED ) { disableAutoMaterialization(); - cerr << "do not materialize: " << this << endl; } Inherit::_postCreate(); diff --git a/hurricane/src/isobar/CMakeLists.txt b/hurricane/src/isobar/CMakeLists.txt index e989b582..419b6640 100644 --- a/hurricane/src/isobar/CMakeLists.txt +++ b/hurricane/src/isobar/CMakeLists.txt @@ -7,6 +7,7 @@ ${PYTHON_INCLUDE_PATH} ) set ( sources ProxyProperty.cpp + PyBreakpoint.cpp PyBox.cpp PyCell.cpp PyCellCollection.cpp @@ -25,6 +26,7 @@ PyLibrary.cpp PyNet.cpp PyNetCollection.cpp + PyNetExternalComponents.cpp PyOccurrence.cpp PyOccurrenceCollection.cpp PyPad.cpp @@ -45,6 +47,7 @@ PyVertical.cpp ) set ( includes hurricane/isobar/ProxyProperty.h + hurricane/isobar/PyBreakpoint.h hurricane/isobar/PyBox.h hurricane/isobar/PyCell.h hurricane/isobar/PyCellCollection.h @@ -63,6 +66,7 @@ hurricane/isobar/PyLibrary.h hurricane/isobar/PyNet.h hurricane/isobar/PyNetCollection.h + hurricane/isobar/PyNetExternalComponents.h hurricane/isobar/PyOccurrence.h hurricane/isobar/PyOccurrenceCollection.h hurricane/isobar/PyPad.h @@ -88,13 +92,15 @@ set ( includes2 hurricane/isobar/Script.h) - install ( FILES ${includes} - ${includes2} DESTINATION include/coriolis2/hurricane/isobar ) - add_library ( isobar ${sources} ${sources2} ) - add_library ( Hurricane MODULE ${sources} ) - set_target_properties ( Hurricane PROPERTIES - COMPILE_FLAGS "${COMPILE_FLAGS} -D__PYTHON_MODULE__=1" - PREFIX "" + install ( FILES ${includes} + ${includes2} DESTINATION include/coriolis2/hurricane/isobar ) + add_library ( isobar ${sources} ${sources2} ) + target_link_libraries ( isobar viewer ) + add_library ( Hurricane MODULE ${sources} ) + target_link_libraries ( Hurricane viewer ) + set_target_properties ( Hurricane PROPERTIES + COMPILE_FLAGS "${COMPILE_FLAGS} -D__PYTHON_MODULE__=1" + PREFIX "" ) - install ( TARGETS isobar DESTINATION lib${LIB_SUFFIX} ) - install ( TARGETS Hurricane DESTINATION ${PYTHON_SITE_PACKAGES} ) + install ( TARGETS isobar DESTINATION lib${LIB_SUFFIX} ) + install ( TARGETS Hurricane DESTINATION ${PYTHON_SITE_PACKAGES} ) diff --git a/hurricane/src/isobar/PyBreakpoint.cpp b/hurricane/src/isobar/PyBreakpoint.cpp new file mode 100644 index 00000000..de20ce4e --- /dev/null +++ b/hurricane/src/isobar/PyBreakpoint.cpp @@ -0,0 +1,141 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | I s o b a r - Hurricane / Python Interface | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyBreakpoint.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include "hurricane/isobar/PyNet.h" +#include "hurricane/isobar/PyComponent.h" +#include "hurricane/isobar/PyComponentCollection.h" +#include "hurricane/isobar/PyBreakpoint.h" + + +namespace Isobar { + +using namespace Hurricane; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Breakpoint,bp,function) + + +// x=================================================================x +// | "PyBreakpoint" Python Module Code Part | +// x=================================================================x + +#if defined(__PYTHON_MODULE__) + + + static void PyBreakpoint_DeAlloc ( PyBreakpoint* self ) + { + trace << "PySingletonObject_DeAlloc(" << hex << self << ")" << endl; + } + + + static PyObject* PyBreakpoint_stop ( PyObject*, PyObject *args ) + { + trace << "PyBreakpoint_stop()" << endl; + + bool result = false; + + HTRY + PyObject* arg0; + PyObject* arg1; + if ( not ParseTwoArg ( "Breakpoint::stop()", args, ":int:string", &arg0, &arg1) ) return NULL; + + result = Breakpoint::stop( (unsigned int)PyInt_AsLong (arg0) + , PyString_AsString(arg1) + ); + HCATCH + + if ( result ) Py_RETURN_TRUE; + Py_RETURN_FALSE; + } + + + static PyObject* PyBreakpoint_setStopLevel ( PyObject*, PyObject* args ) + { + trace << "PyBreakpoint_setStopLevel()" << endl; + + + HTRY + + PyObject* arg0; + if ( not ParseOneArg ( "Breakpoint::setStopLevel()", args, ":int", &arg0) ) return NULL; + + Breakpoint::setStopLevel ( (unsigned int)PyInt_AsLong(arg0) ); + + HCATCH + + Py_RETURN_NONE; + } + + + static PyObject* PyBreakpoint_getStopLevel ( PyObject* ) + { + trace << "PyBreakpoint_getStopLevel()" << endl; + + return Py_BuildValue ( "i", Breakpoint::getStopLevel() ); + + } + + + PyMethodDef PyBreakpoint_Methods[] = + { { "stop" , (PyCFunction)PyBreakpoint_stop, METH_VARARGS|METH_CLASS + , "Sets a breakpoint of the given level." } + , { "setStopLevel", (PyCFunction)PyBreakpoint_setStopLevel, METH_VARARGS|METH_CLASS + , "Sets the level below which breakpoints will be ignoreds." } + , { "getStopLevel", (PyCFunction)PyBreakpoint_getStopLevel, METH_NOARGS|METH_CLASS + , "Returns the level below which breakpoints will be ignoreds." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + PyTypeObjectLinkPyTypeWithoutObject(Breakpoint,Breakpoint) + + + // extern void PyBreakpoint_LinkPyType() + // { + // trace << "PyBreakpoint_LinkType()" << endl; + + // PyTypeBreakpoint.tp_new = (newfunc) PyType_GenericNew; + // PyTypeBreakpoint.tp_dealloc = (destructor)PyBreakpoint_DeAlloc; + // PyTypeBreakpoint.tp_methods = PyBreakpoint_Methods; + // } + + +#else // End of Python Module Code Part. + + +// x=================================================================x +// | "PyBreakpoint" Shared Library Code Part | +// x=================================================================x + + + PyTypeObjectDefinitions(Breakpoint) + + +# endif // End of Shared Library Code Part. + + +} // End of extern "C". + + +} // End of Isobar namespace. + diff --git a/hurricane/src/isobar/PyCellViewer.cpp b/hurricane/src/isobar/PyCellViewer.cpp new file mode 100644 index 00000000..e4309462 --- /dev/null +++ b/hurricane/src/isobar/PyCellViewer.cpp @@ -0,0 +1,137 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | I s o b a r - Hurricane / Python Interface | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyCellViewer.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include "hurricane/isobar/PyCell.h" +#include "hurricane/isobar/PyCellViewer.h" +#include "hurricane/viewer/CellWidget.h" + + +namespace Isobar { + +using namespace Hurricane; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(CellViewer,cw,function) + + +// x=================================================================x +// | "PyCellViewer" Python Module Code Part | +// x=================================================================x + +#if defined(__PYTHON_MODULE__) + + + // Standart Destroy (Attribute). + DirectDestroyAttribute(PyCellViewer_destroy, PyCellViewer) + + + static PyObject* PyCellViewer_getCell ( PyCellViewer* self ) + { + trace << "PyCellViewer_getCell ()" << endl; + + Cell* cell = NULL; + + HTRY + METHOD_HEAD("CellViewer.getCell()") + + cell = cw->getCell (); + HCATCH + + if ( cell == NULL ) Py_RETURN_NONE; + + return PyCell_Link(cell); + } + + + static PyObject* PyCellViewer_setCell ( PyCellViewer* self, PyObject* args ) + { + trace << "PyCellViewer_setCell ()" << endl; + + HTRY + METHOD_HEAD("CellViewer.setCell()") + + PyCell* cell; + if ( not ParseOneArg("CellViewer.setCell()",args,CELL_ARG,(PyObject**)&cell) ) return NULL; + + cw->setCell ( PYCELL_O(cell) ); + HCATCH + + Py_RETURN_NONE; + } + + + static PyObject* PyCellViewer_fit ( PyCellViewer* self ) + { + trace << "PyCellViewer_fit()" << endl; + + HTRY + METHOD_HEAD("CellViewer.fit()") + cw->getCellWidget()->fitToContents(); + HCATCH + + Py_RETURN_NONE; + } + + + // --------------------------------------------------------------- + // PyCellViewer Attribute Method table. + + PyMethodDef PyCellViewer_Methods[] = + { { "getCell" , (PyCFunction)PyCellViewer_getCell , METH_NOARGS + , "Return the currently edited Cell." } + , { "setCell" , (PyCFunction)PyCellViewer_setCell , METH_VARARGS + , "Load a Cell into the viewer." } + , { "fit" , (PyCFunction)PyCellViewer_fit , METH_NOARGS + , "Fit the contents to the viewer's visible area." } + , { "destroy" , (PyCFunction)PyCellViewer_destroy , METH_NOARGS + , "Destroy the associated hurricane object. The python object remains." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + PythonOnlyDeleteMethod(CellViewer) + PyTypeObjectLinkPyType(CellViewer) + + +#else // End of Python Module Code Part. + + +// x=================================================================x +// | "PyCellViewer" Shared Library Code Part | +// x=================================================================x + + + PyTypeObjectDefinitions(CellViewer) + + +# endif // End of Shared Library Code Part. + + +} // End of extern "C". + + +} // End of Isobar namespace. diff --git a/hurricane/src/isobar/PyContact.cpp b/hurricane/src/isobar/PyContact.cpp index 1e6a2bf7..c8c23de8 100644 --- a/hurricane/src/isobar/PyContact.cpp +++ b/hurricane/src/isobar/PyContact.cpp @@ -138,13 +138,16 @@ extern "C" { &PyTypeNet, &pyNet, &PyTypeLayer, &pyLayer, &x, &y, &width, &height)) { contact = Contact::create(PYNET_O(pyNet), PYLAYER_O(pyLayer), x, y, width, height); - } else if (PyArg_ParseTuple(args, "O!O!ll|ll:Contact.create", + } else { + PyErr_Clear (); + if (PyArg_ParseTuple(args, "O!O!ll|ll:Contact.create", &PyTypeComponent, &pyComponent, &PyTypeLayer, &pyLayer, &x, &y, &width, &height)) { contact = Contact::create(PYCOMPONENT_O(pyComponent), PYLAYER_O(pyLayer), x, y, width, height); - } else { - PyErr_SetString ( ConstructorError, "invalid number of parameters for Contact constructor." ); - return ( NULL ); + } else { + PyErr_SetString ( ConstructorError, "invalid number of parameters for Contact constructor." ); + return NULL; + } } diff --git a/hurricane/src/isobar/PyHurricane.cpp b/hurricane/src/isobar/PyHurricane.cpp index 85cc4698..f944f7da 100644 --- a/hurricane/src/isobar/PyHurricane.cpp +++ b/hurricane/src/isobar/PyHurricane.cpp @@ -53,6 +53,7 @@ #include "hurricane/isobar/PyHurricane.h" +#include "hurricane/isobar/PyBreakpoint.h" #include "hurricane/isobar/PyUpdateSession.h" #include "hurricane/isobar/PyDbU.h" #include "hurricane/isobar/PyPoint.h" @@ -73,6 +74,7 @@ #include "hurricane/isobar/PyReferenceCollection.h" #include "hurricane/isobar/PyNet.h" #include "hurricane/isobar/PyNetCollection.h" +#include "hurricane/isobar/PyNetExternalComponents.h" #include "hurricane/isobar/PyHyperNet.h" #include "hurricane/isobar/PyComponent.h" #include "hurricane/isobar/PyComponentCollection.h" @@ -470,31 +472,6 @@ extern "C" { extern "C" { - // --------------------------------------------------------------- - // Attribute Method : "PyNetExternalComponents_getNetExternalComponents ()" - - PyObject* PyNetExternalComponents_getExternalComponents ( PyObject* module, PyObject* args ) - { - trace << "PyNetExternalComponents_getExternalComponents()" << endl; - - PyObject* arg0; - if ( ! ParseOneArg ( "getExternalComponents", args, ":ent", &arg0) ) return ( NULL ); - - PyComponentCollection* pyComponentCollection = NULL; - - HTRY - - Components* components = new Components(NetExternalComponents::get(PYNET_O(arg0))); - - pyComponentCollection = PyObject_NEW(PyComponentCollection, &PyTypeComponentCollection); - if (pyComponentCollection == NULL) { return NULL; } - - pyComponentCollection->_object = components; - - HCATCH - - return ((PyObject*)pyComponentCollection); - } // x-------------------------------------------------------------x // | "PyHurricane" Module Methods | @@ -512,8 +489,6 @@ extern "C" { , { "Point" , PyPoint_create , METH_VARARGS, "Creates a new Point." } , { "Box" , PyBox_create , METH_VARARGS, "Creates a new Box." } , { "Transformation" , PyTransformation_create , METH_VARARGS, "Creates a new Transformation." } - , { "UpdateSession_open" , (PyCFunction)PyUpdateSession_open , METH_NOARGS , "Opens an update session." } - , { "UpdateSession_close" , (PyCFunction)PyUpdateSession_close , METH_NOARGS , "Closes an update session." } , { "DataBase" , (PyCFunction)PyDataBase_create , METH_NOARGS , "Creates the DataBase." } , { "getDataBase" , (PyCFunction)PyDataBase_getDataBase , METH_NOARGS , "Gets the current DataBase." } , { "Library" , (PyCFunction)PyLibrary_create , METH_VARARGS, "Creates a new Library." } @@ -530,7 +505,6 @@ extern "C" { , { "Pad" , (PyCFunction)PyPad_create , METH_VARARGS, "Creates a new Pad." } , { "Path" , (PyCFunction)PyPath_create , METH_VARARGS, "Creates a new Path." } , { "Occurrence" , (PyCFunction)PyOccurrence_create , METH_VARARGS, "Creates a new Occurrence." } - , { "getExternalComponents" , (PyCFunction)PyNetExternalComponents_getExternalComponents, METH_VARARGS, "Returns the components collection of an external net" } , {NULL, NULL, 0, NULL} /* sentinel */ }; @@ -543,6 +517,7 @@ extern "C" { DL_EXPORT(void) initHurricane () { trace << "initHurricane()" << endl; + PyUpdateSession_LinkPyType (); PyPoint_LinkPyType (); PyBox_LinkPyType (); PyTransformation_LinkPyType (); @@ -556,7 +531,7 @@ extern "C" { PyInstanceCollection_LinkPyType (); PyPlugCollection_LinkPyType (); PyNetCollection_LinkPyType (); - PyNetCollection_LinkPyType (); + PyNetExternalComponents_LinkPyType (); PyCellCollection_LinkPyType (); PyPinCollection_LinkPyType (); PySegmentCollection_LinkPyType (); @@ -577,7 +552,9 @@ extern "C" { PyPin_LinkPyType (); PyPlug_LinkPyType (); PyCellViewer_LinkPyType (); + PyBreakpoint_LinkPyType (); + PYTYPE_READY ( UpdateSession ) PYTYPE_READY ( Point ) PYTYPE_READY ( Box ) PYTYPE_READY ( Transformation ) @@ -608,6 +585,8 @@ extern "C" { PYTYPE_READY ( ReferenceCollectionLocator ) PYTYPE_READY ( HyperNet ) PYTYPE_READY ( CellViewer ) + PYTYPE_READY ( NetExternalComponents ) + PYTYPE_READY ( Breakpoint ) PYTYPE_READY_SUB ( Cell , Entity ) PYTYPE_READY_SUB ( Instance , Entity ) @@ -674,7 +653,14 @@ extern "C" { << " Failed to initialize Hurricane module." << endl; return; } - //PyModule_AddObject(module, "Box", (PyObject*)&PyTypeBox); // To add Hurricane.Box type in module -> the Hurricane.Box() method must be renamed + + Py_INCREF ( &PyTypeNetExternalComponents ); + PyModule_AddObject ( module, "NetExternalComponents", (PyObject*)&PyTypeNetExternalComponents ); + Py_INCREF ( &PyTypeUpdateSession ); + PyModule_AddObject ( module, "UpdateSession", (PyObject*)&PyTypeUpdateSession ); + Py_INCREF ( &PyTypeBreakpoint ); + PyModule_AddObject ( module, "Breakpoint", (PyObject*)&PyTypeBreakpoint ); + PyObject* dictionnary = PyModule_GetDict ( module ); diff --git a/hurricane/src/isobar/PyNetExternalComponents.cpp b/hurricane/src/isobar/PyNetExternalComponents.cpp new file mode 100644 index 00000000..f7e7841c --- /dev/null +++ b/hurricane/src/isobar/PyNetExternalComponents.cpp @@ -0,0 +1,133 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | I s o b a r - Hurricane / Python Interface | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PyNetExternalComponents.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include "hurricane/isobar/PyNet.h" +#include "hurricane/isobar/PyComponent.h" +#include "hurricane/isobar/PyComponentCollection.h" +#include "hurricane/isobar/PyNetExternalComponents.h" + + +namespace Isobar { + +using namespace Hurricane; + +extern "C" { + + +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(NetExternalComponents,property,function) + + +// x=================================================================x +// | "PyNetExternalComponents" Python Module Code Part | +// x=================================================================x + +#if defined(__PYTHON_MODULE__) + + + static void PyNetExternalComponents_DeAlloc ( PyNetExternalComponents* self ) + { + trace << "PySingletonObject_DeAlloc(" << hex << self << ")" << endl; + } + + + static PyObject* PyNetExternalComponents_isExternal ( PyObject*, PyObject *args ) + { + trace << "PyNetExternalComponents_isExternal()" << endl; + + bool isExternal = false; + + HTRY + PyObject* arg0; + if ( not ParseOneArg ( "NetExternalComponents.isExternal()", args, COMP_ARG, &arg0) ) return NULL; + + isExternal = NetExternalComponents::isExternal(PYCOMPONENT_O(arg0)); + HCATCH + + if ( isExternal ) Py_RETURN_TRUE; + Py_RETURN_FALSE; + } + + + static PyObject* PyNetExternalComponents_get ( PyObject*, PyObject* args ) + { + trace << "PyNetExternalComponents_getExternalComponents()" << endl; + + PyObject* arg0; + + PyComponentCollection* pyComponentCollection = NULL; + + HTRY + + if ( not ParseOneArg ( "getExternalComponents", args, ":ent", &arg0) ) return NULL; + Components* components = new Components(NetExternalComponents::get(PYNET_O(arg0))); + + pyComponentCollection = PyObject_NEW(PyComponentCollection, &PyTypeComponentCollection); + if (pyComponentCollection == NULL) { return NULL; } + + pyComponentCollection->_object = components; + + HCATCH + + return (PyObject*)pyComponentCollection; + } + + + PyMethodDef PyNetExternalComponents_Methods[] = + { { "isExternal", (PyCFunction)PyNetExternalComponents_isExternal, METH_VARARGS|METH_CLASS + , "Tells if Component belong to the externals of the Net." } + , { "get" , (PyCFunction)PyNetExternalComponents_get , METH_VARARGS|METH_CLASS + , "Returns the Collection of external components of the Net." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + PyTypeObjectLinkPyTypeWithoutObject(NetExternalComponents,NetExternalComponents) + + + // extern void PyNetExternalComponents_LinkPyType() + // { + // trace << "PyNetExternalComponents_LinkType()" << endl; + + // PyTypeNetExternalComponents.tp_new = (newfunc) PyType_GenericNew; + // PyTypeNetExternalComponents.tp_dealloc = (destructor)PyNetExternalComponents_DeAlloc; + // PyTypeNetExternalComponents.tp_methods = PyNetExternalComponents_Methods; + // } + + +#else // End of Python Module Code Part. + + +// x=================================================================x +// | "PyNetExternalComponents" Shared Library Code Part | +// x=================================================================x + + + PyTypeObjectDefinitions(NetExternalComponents) + + +# endif // End of Shared Library Code Part. + + +} // End of extern "C". + + +} // End of Isobar namespace. + diff --git a/hurricane/src/isobar/PyUpdateSession.cpp b/hurricane/src/isobar/PyUpdateSession.cpp index 0c13d98a..db5e0da4 100644 --- a/hurricane/src/isobar/PyUpdateSession.cpp +++ b/hurricane/src/isobar/PyUpdateSession.cpp @@ -1,39 +1,8 @@ // -*- C++ -*- // -// This file is part of the Coriolis Project. -// Copyright (C) Laboratoire LIP6 - Departement ASIM -// Universite Pierre et Marie Curie -// -// Main contributors : -// Christophe Alexandre -// Sophie Belloeil -// Hugo Clément -// Jean-Paul Chaput -// Damien Dupuis -// Christian Masson -// Marek Sroka -// -// The Coriolis Project is free software; you can redistribute it -// and/or modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// The Coriolis Project is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with the Coriolis Project; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// License-Tag -// Authors-Tag -// =================================================================== -// -// $Id: PyUpdateSession.cpp,v 1.12 2006/07/19 14:00:05 xtof Exp $ +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved // // x-----------------------------------------------------------------x // | | @@ -49,6 +18,7 @@ // | | // x-----------------------------------------------------------------x + #include "hurricane/isobar/PyUpdateSession.h" @@ -59,22 +29,24 @@ using namespace Hurricane; extern "C" { +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(UpdateSession,session,function) + + // x=================================================================x -// | "PyUpdateSession" Python Module Code Part | +// | "PyUpdateSession" Python Module Code Part | // x=================================================================x #if defined(__PYTHON_MODULE__) - // x-------------------------------------------------------------x - // | "PyUpdateSession" General Methods | - // x-------------------------------------------------------------x + static void PyUpdateSession_DeAlloc ( PyUpdateSession* self ) + { + trace << "PyUpdateSession_DeAlloc(" << hex << self << ")" << endl; + } + - - // --------------------------------------------------------------- - // Attribute Method : "PyUpdateSession_open ()" - - extern PyObject* PyUpdateSession_open ( PyObject* module ) { + static PyObject* PyUpdateSession_open ( PyObject* ) + { trace << "PyUpdateSession_open()" << endl; HTRY @@ -83,39 +55,48 @@ extern "C" { Py_RETURN_NONE; } + - - - - // --------------------------------------------------------------- - // Attribute Method : "PyUpdateSession_close()" - - extern PyObject* PyUpdateSession_close( PyObject* module ) + static PyObject* PyUpdateSession_close ( PyObject* ) { trace << "PyUpdateSession_close()" << endl; HTRY - UpdateSession::close(); + UpdateSession::close (); HCATCH Py_RETURN_NONE; } + + PyMethodDef PyUpdateSession_Methods[] = + { { "open" , (PyCFunction)PyUpdateSession_open, METH_NOARGS|METH_CLASS + , "Opens a new Update Session." } + , { "close" , (PyCFunction)PyUpdateSession_close, METH_NOARGS|METH_CLASS + , "Closes an Update Session." } + , {NULL, NULL, 0, NULL} /* sentinel */ + }; + + + PyTypeObjectLinkPyTypeWithoutObject(UpdateSession,UpdateSession) + + #else // End of Python Module Code Part. // x=================================================================x -// | "PyUpdateSession" Shared Library Code Part | +// | "PyUpdateSession" Shared Library Code Part | // x=================================================================x -#endif + PyTypeObjectDefinitions(UpdateSession) + + +# endif // End of Shared Library Code Part. } // End of extern "C". - - } // End of Isobar namespace. diff --git a/hurricane/src/isobar/hurricane/isobar/PyBreakpoint.h b/hurricane/src/isobar/hurricane/isobar/PyBreakpoint.h new file mode 100644 index 00000000..1db8e633 --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyBreakpoint.h @@ -0,0 +1,71 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | I s o b a r - Hurricane / Python Interface | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./PyBreakpoint.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + + + + +# ifndef __PY_BREAKPOINT__ +# define __PY_BREAKPOINT__ + + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/Breakpoint.h" + + +namespace Isobar { + + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyBreakpoint". + + typedef struct { + PyObject_HEAD + } PyBreakpoint; + + + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeBreakpoint; + extern PyMethodDef PyBreakpoint_Methods[]; + + extern void PyBreakpoint_LinkPyType (); + + +#define IsPyBreakpoint(v) ( (v)->ob_type == &PyTypeBreakpoint ) +#define PYBREAKPOINT(v) ( (PyBreakpoint*)(v) ) +#define PYBREAKPOINT_O(v) ( PY_BREAKPOINT(v)->_object ) + + +} // End of extern "C". + + + +} // End of Isobar namespace. + + + + +# endif diff --git a/hurricane/src/isobar/hurricane/isobar/PyCellViewer.h b/hurricane/src/isobar/hurricane/isobar/PyCellViewer.h new file mode 100644 index 00000000..69b505b3 --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyCellViewer.h @@ -0,0 +1,68 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | I s o b a r - Hurricane / Python Interface | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./PyCellViewer.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __ISOBAR_CELL_VIEWER__ +#define __ISOBAR_CELL_VIEWER__ + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/viewer/CellViewer.h" + + +namespace Isobar { + + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyCellViewer". + + typedef struct { + PyObject_HEAD + Hurricane::CellViewer* _object; + } PyCellViewer; + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeCellViewer; + extern PyMethodDef PyCellViewer_Methods[]; + + extern PyObject* PyCellViewer_create ( PyObject* self, PyObject* args ); + extern void PyCellViewer_LinkPyType (); + + +#define IsPyCellViewer(v) ( (v)->ob_type == &PyTypeCellViewer ) +#define ISOBARCELLVIEWER(v) ( (PyCellViewer*)(v) ) +#define ISOBARCELLVIEWER_O(v) ( ISOBAR_CELL_VIEWER(v)->_object ) + + +} // End of extern "C". + + +} // End of Isobar namespace. + + +#endif // __ISOBAR_CELL_VIEWER__ diff --git a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h index d5066cef..2539f539 100644 --- a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h +++ b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h @@ -143,6 +143,7 @@ extern "C" { #define NET_LAYER_INTS2_ARG ":ent:layer:int:int" #define NET_LAYER_INTS3_ARG ":ent:layer:int:int:int" #define NET_LAYER_INTS4_ARG ":ent:layer:int:int:int:int" +#define COMP_ARG ":comp" #define COMP_LAYER_INTS2_ARG ":comp:layer:int:int" #define COMP_LAYER_INTS3_ARG ":comp:layer:int:int:int" #define COMP_LAYER_INTS4_ARG ":comp:layer:int:int:int:int" @@ -176,6 +177,11 @@ extern "C" { PyDict_SetItemString ( dictionnary, CONSTANT_NAME, constant ); \ Py_DECREF ( constant ); +#define LoadObjectConstant(DICTIONARY,CONSTANT_VALUE,CONSTANT_NAME) \ + constant = PyInt_FromLong ( (long)CONSTANT_VALUE ); \ + PyDict_SetItemString ( DICTIONARY, CONSTANT_NAME, constant ); \ + Py_DECREF ( constant ); + @@ -253,20 +259,20 @@ extern "C" { // ------------------------------------------------------------------- // Attribute Method Macro For Booleans. -#define DirectSetBoolAttribute(PY_FUNC_NAME,FUNC_NAME,PY_FORMAT,PY_SELF_TYPE,SELF_TYPE) \ - static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \ - { \ - GENERIC_METHOD_HEAD(SELF_TYPE,cobject,"DirectSetBoolAttribute()") \ - \ - PyObject* arg0; \ - if ( ! PyArg_ParseTuple ( args, "O:" PY_FORMAT, &arg0 ) ) \ - return ( NULL ); \ - if(arg0 == Py_True) \ - cobject->FUNC_NAME (true); \ - else \ - cobject->FUNC_NAME (false); \ - \ - Py_RETURN_NONE; \ +#define DirectSetBoolAttribute(PY_FUNC_NAME,FUNC_NAME,STR_FUNC_NAME,PY_SELF_TYPE,SELF_TYPE) \ + static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \ + { \ + GENERIC_METHOD_HEAD(SELF_TYPE,cobject,STR_FUNC_NAME "()") \ + \ + HTRY \ + PyObject* arg0; \ + if ( not PyArg_ParseTuple ( args, "O:" STR_FUNC_NAME, &arg0 ) or PyBool_Check(arg0) ) \ + return NULL; \ + \ + (arg0 == Py_True) ? cobject->FUNC_NAME (true) : cobject->FUNC_NAME (false); \ + HCATCH \ + \ + Py_RETURN_NONE; \ } @@ -278,10 +284,12 @@ extern "C" { { \ GENERIC_METHOD_HEAD(SELF_TYPE,cobject,"DirectSetLongAttribute()") \ \ + HTRY \ PyObject* arg0; \ if ( ! PyArg_ParseTuple ( args, "O:" PY_FORMAT, &arg0 ) ) \ return ( NULL ); \ cobject->FUNC_NAME ( PyInt_AsLong(arg0) ); \ + HCATCH \ \ Py_RETURN_NONE; \ } @@ -599,31 +607,17 @@ extern "C" { PyObject_DEL ( self ); \ } -// ------------------------------------------------------------------- -// Attribute Method For Singleton Deletion. -// # define SingletonDeleteMethod(SELF_TYPE) -// static void Py##SELF_TYPE##_DeAlloc ( Py##SELF_TYPE *self ) -// { -// trace << "PySingletonObject_DeAlloc(" << hex << self << ") " -// << self->ACCESS_OBJECT << endl; -// -// if ( self->ACCESS_OBJECT != NULL ) { -// ostringstream message; -// message << "Never delete singleton "#SELF_TYPE"."; -// PyErr_SetString ( ProxyError, message.str().c_str() ); -// } -// PyObject_DEL ( self ); -// } + // ------------------------------------------------------------------- -// Attribute Method For Singleton Deletion. +// Attribute Method For Python Only Object Deletion. -# define SingletonDeleteMethod(SELF_TYPE) \ - static void Py##SELF_TYPE##_DeAlloc ( Py##SELF_TYPE *self ) \ - { \ - trace << "PySingletonObject_DeAlloc(" << hex << self << ") " \ - << self->ACCESS_OBJECT << endl; \ +# define PythonOnlyDeleteMethod(SELF_TYPE) \ + static void Py##SELF_TYPE##_DeAlloc ( Py##SELF_TYPE *self ) \ + { \ + trace << "PythonOnlyObject_DeAlloc(" << hex << self << ") " \ + << self->ACCESS_OBJECT << endl; \ } @@ -632,23 +626,62 @@ extern "C" { // ------------------------------------------------------------------- // Initialisation Function for PyTypeObject Runtime Link. -#define PyTypeObjectLinkPyType(SELF_TYPE) \ - DirectReprMethod(Py##SELF_TYPE##_Repr, Py##SELF_TYPE, SELF_TYPE) \ - DirectStrMethod (Py##SELF_TYPE##_Str, Py##SELF_TYPE, SELF_TYPE) \ - DirectCmpMethod (Py##SELF_TYPE##_Cmp, IsPy##SELF_TYPE, Py##SELF_TYPE) \ - DirectHashMethod(Py##SELF_TYPE##_Hash, Py##SELF_TYPE) \ - extern void Py##SELF_TYPE##_LinkPyType() { \ - trace << "Py" #SELF_TYPE "_LinkType()" << endl; \ - \ - PyType##SELF_TYPE.tp_dealloc = (destructor)Py##SELF_TYPE##_DeAlloc; \ - PyType##SELF_TYPE.tp_compare = (cmpfunc) Py##SELF_TYPE##_Cmp; \ - PyType##SELF_TYPE.tp_repr = (reprfunc) Py##SELF_TYPE##_Repr; \ - PyType##SELF_TYPE.tp_str = (reprfunc) Py##SELF_TYPE##_Str; \ - PyType##SELF_TYPE.tp_hash = (hashfunc) Py##SELF_TYPE##_Hash; \ - PyType##SELF_TYPE.tp_methods = Py##SELF_TYPE##_Methods; \ +#define PyTypeObjectLinkPyTypeWithoutObject(PY_SELF_TYPE,SELF_TYPE) \ + extern void Py##PY_SELF_TYPE##_LinkPyType() { \ + trace << "Py" #PY_SELF_TYPE "_LinkType()" << endl; \ + \ + PyType##PY_SELF_TYPE.tp_dealloc = (destructor) Py##PY_SELF_TYPE##_DeAlloc; \ + PyType##PY_SELF_TYPE.tp_methods = Py##PY_SELF_TYPE##_Methods; \ } + + +// ------------------------------------------------------------------- +// Initialisation Function for PyTypeObject Runtime Link. + +#define PyTypeObjectLinkPyTypeWithClass(PY_SELF_TYPE,SELF_TYPE) \ + DirectReprMethod(Py##PY_SELF_TYPE##_Repr, Py##PY_SELF_TYPE, SELF_TYPE) \ + DirectStrMethod (Py##PY_SELF_TYPE##_Str, Py##PY_SELF_TYPE, SELF_TYPE) \ + DirectCmpMethod (Py##PY_SELF_TYPE##_Cmp, IsPy##PY_SELF_TYPE, Py##PY_SELF_TYPE) \ + DirectHashMethod(Py##PY_SELF_TYPE##_Hash, Py##SELF_TYPE) \ + extern void Py##PY_SELF_TYPE##_LinkPyType() { \ + trace << "Py" #PY_SELF_TYPE "_LinkType()" << endl; \ + \ + PyType##PY_SELF_TYPE.tp_dealloc = (destructor) Py##PY_SELF_TYPE##_DeAlloc; \ + PyType##PY_SELF_TYPE.tp_compare = (cmpfunc) Py##PY_SELF_TYPE##_Cmp; \ + PyType##PY_SELF_TYPE.tp_repr = (reprfunc) Py##PY_SELF_TYPE##_Repr; \ + PyType##PY_SELF_TYPE.tp_str = (reprfunc) Py##PY_SELF_TYPE##_Str; \ + PyType##PY_SELF_TYPE.tp_hash = (hashfunc) Py##PY_SELF_TYPE##_Hash; \ + PyType##PY_SELF_TYPE.tp_methods = Py##PY_SELF_TYPE##_Methods; \ + } + + + + +// ------------------------------------------------------------------- +// Initialisation Function for PyTypeObject Runtime Link. + +#define PyTypeObjectLinkPyType(SELF_TYPE) \ + PyTypeObjectLinkPyTypeWithClass(SELF_TYPE,SELF_TYPE) + +// #define PyTypeObjectLinkPyType(SELF_TYPE) +// DirectReprMethod(Py##SELF_TYPE##_Repr, Py##SELF_TYPE, SELF_TYPE) +// DirectStrMethod (Py##SELF_TYPE##_Str, Py##SELF_TYPE, SELF_TYPE) +// DirectCmpMethod (Py##SELF_TYPE##_Cmp, IsPy##SELF_TYPE, Py##SELF_TYPE) +// DirectHashMethod(Py##SELF_TYPE##_Hash, Py##SELF_TYPE) +// extern void Py##SELF_TYPE##_LinkPyType() { +// trace << "Py" #SELF_TYPE "_LinkType()" << endl; +// +// PyType##SELF_TYPE.tp_dealloc = (destructor) Py##SELF_TYPE##_DeAlloc; +// PyType##SELF_TYPE.tp_compare = (cmpfunc) Py##SELF_TYPE##_Cmp; +// PyType##SELF_TYPE.tp_repr = (reprfunc) Py##SELF_TYPE##_Repr; +// PyType##SELF_TYPE.tp_str = (reprfunc) Py##SELF_TYPE##_Str; +// PyType##SELF_TYPE.tp_hash = (hashfunc) Py##SELF_TYPE##_Hash; +// PyType##SELF_TYPE.tp_methods = Py##SELF_TYPE##_Methods; +// } + + // Special Initialisation Function for Locator PyTypeObject Runtime Link. #define LocatorPyTypeObjectLinkPyType(PY_SELF_TYPE, SELF_TYPE) \ DirectReprMethod(Py##PY_SELF_TYPE##Locator_Repr, Py##PY_SELF_TYPE##Locator, Locator) \ diff --git a/hurricane/src/isobar/hurricane/isobar/PyNetExternalComponents.h b/hurricane/src/isobar/hurricane/isobar/PyNetExternalComponents.h new file mode 100644 index 00000000..d00a8205 --- /dev/null +++ b/hurricane/src/isobar/hurricane/isobar/PyNetExternalComponents.h @@ -0,0 +1,71 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | I s o b a r - Hurricane / Python Interface | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./PyNetExternalComponents.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + + + + +# ifndef __PY_NET_EXTERNAL_COMPONENTS__ +# define __PY_NET_EXTERNAL_COMPONENTS__ + + +#include "hurricane/isobar/PyHurricane.h" +#include "hurricane/NetExternalComponents.h" + + +namespace Isobar { + + +extern "C" { + +// ------------------------------------------------------------------- +// Python Object : "PyNetExternalComponents". + + typedef struct { + PyObject_HEAD + } PyNetExternalComponents; + + + + +// ------------------------------------------------------------------- +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeNetExternalComponents; + extern PyMethodDef PyNetExternalComponents_Methods[]; + + extern void PyNetExternalComponents_LinkPyType (); + + +#define IsPyNetExternalComponents(v) ( (v)->ob_type == &PyTypeNetExternalComponents ) +#define PYNETEXTERNALCOMPONENTS(v) ( (PyNetExternalComponents*)(v) ) +#define PYNETEXTERNALCOMPONENTS_O(v) ( PY_NET_EXTERNAL_COMPONENTS(v)->_object ) + + +} // End of extern "C". + + + +} // End of Isobar namespace. + + + + +# endif diff --git a/hurricane/src/isobar/hurricane/isobar/PyUpdateSession.h b/hurricane/src/isobar/hurricane/isobar/PyUpdateSession.h index d1956af8..6c34f851 100644 --- a/hurricane/src/isobar/hurricane/isobar/PyUpdateSession.h +++ b/hurricane/src/isobar/hurricane/isobar/PyUpdateSession.h @@ -1,39 +1,8 @@ // -*- C++ -*- // -// This file is part of the Coriolis Project. -// Copyright (C) Laboratoire LIP6 - Departement ASIM -// Universite Pierre et Marie Curie -// -// Main contributors : -// Christophe Alexandre -// Sophie Belloeil -// Hugo Clément -// Jean-Paul Chaput -// Damien Dupuis -// Christian Masson -// Marek Sroka -// -// The Coriolis Project is free software; you can redistribute it -// and/or modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// The Coriolis Project is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with the Coriolis Project; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// License-Tag -// Authors-Tag -// =================================================================== -// -// $Id: PyUpdateSession.h,v 1.8 2006/05/03 14:00:05 jpc Exp $ +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved // // x-----------------------------------------------------------------x // | | @@ -53,12 +22,11 @@ -#ifndef __PYUPDATESESSION__ -#define __PYUPDATESESSION__ +# ifndef __PY_UPDATE_SESSION__ +# define __PY_UPDATE_SESSION__ #include "hurricane/isobar/PyHurricane.h" - #include "hurricane/UpdateSession.h" @@ -67,28 +35,37 @@ namespace Isobar { extern "C" { - // ------------------------------------------------------------------- // Python Object : "PyUpdateSession". + typedef struct { + PyObject_HEAD + } PyUpdateSession; + // ------------------------------------------------------------------- -// Functions & Types exported to "PyHurricane.ccp". +// Functions & Types exported to "PyHurricane.cpp". + + extern PyTypeObject PyTypeUpdateSession; + extern PyMethodDef PyUpdateSession_Methods[]; + + extern void PyUpdateSession_LinkPyType (); + + +#define IsPyUpdateSession(v) ( (v)->ob_type == &PyTypeUpdateSession ) +#define PYUPDATESESSION(v) ( (PyUpdateSession*)(v) ) +#define PYUPDATESESSION_O(v) ( PY_UPDATE_SESSION(v)->_object ) - extern PyObject* PyUpdateSession_open ( PyObject* module ); - extern PyObject* PyUpdateSession_close ( PyObject* module ); - } // End of extern "C". - } // End of Isobar namespace. -#endif +# endif diff --git a/hurricane/src/viewer/BreakpointWidget.cpp b/hurricane/src/viewer/BreakpointWidget.cpp index 84035302..0b16e210 100644 --- a/hurricane/src/viewer/BreakpointWidget.cpp +++ b/hurricane/src/viewer/BreakpointWidget.cpp @@ -23,6 +23,7 @@ // x-----------------------------------------------------------------x +#include #include #include #include @@ -42,6 +43,7 @@ namespace Hurricane { , _message (new QLabel()) , _stopLevel (new QSpinBox()) , _isFinished(false) + , _eventLoop (NULL) { setModal ( false ); setWindowTitle ( "Breakpoint" ); @@ -83,8 +85,15 @@ namespace Hurricane { _isFinished = false; show (); - while ( !_isFinished ) - QApplication::processEvents (); + + // Snipet code from Qt's QDialog. + _eventLoop = new QEventLoop (); + QPointer guard = this; + (void)_eventLoop->exec(QEventLoop::DialogExec); + _eventLoop = NULL; + + if (guard.isNull()) return QDialog::Rejected; + return result(); } @@ -92,6 +101,7 @@ namespace Hurricane { void BreakpointWidget::raiseFinished ( int ) { _isFinished = true; + if ( _eventLoop ) _eventLoop->exit(0); } diff --git a/hurricane/src/viewer/CMakeLists.txt b/hurricane/src/viewer/CMakeLists.txt index fc679018..94cb5fe7 100644 --- a/hurricane/src/viewer/CMakeLists.txt +++ b/hurricane/src/viewer/CMakeLists.txt @@ -116,6 +116,8 @@ qt4_wrap_cpp ( MOC_SRCS ${mocincludes} ) qt4_add_resources ( RCC_SRCS CellViewer.qrc ) - install ( FILES ${exports} DESTINATION include/coriolis2/hurricane/viewer ) add_library ( viewer ${cpps} ${MOC_SRCS} ${RCC_SRCS} ) - install ( TARGETS viewer DESTINATION lib${LIB_SUFFIX} ) + target_link_libraries ( viewer hurricane ${QT_LIBRARIES} ${Boost_LIBRARIES} ) + + install ( FILES ${exports} DESTINATION include/coriolis2/hurricane/viewer ) + install ( TARGETS viewer DESTINATION lib${LIB_SUFFIX} ) diff --git a/hurricane/src/viewer/hurricane/viewer/BreakpointWidget.h b/hurricane/src/viewer/hurricane/viewer/BreakpointWidget.h index de01fa2c..8190d80d 100644 --- a/hurricane/src/viewer/hurricane/viewer/BreakpointWidget.h +++ b/hurricane/src/viewer/hurricane/viewer/BreakpointWidget.h @@ -27,6 +27,7 @@ #define __HURRICANE_BREAKPOINT_WIDGET__ +#include #include class QLabel; class QSpinBox; @@ -50,9 +51,10 @@ namespace Hurricane { void raiseFinished ( int ); private: - QLabel* _message; - QSpinBox* _stopLevel; - bool _isFinished; + QLabel* _message; + QSpinBox* _stopLevel; + bool _isFinished; + QEventLoop* _eventLoop; };