Mercurial > hg > orthanc-stone
diff Framework/Layers/ILayerSource.h @ 251:192e6e349e69 am-2
first usage of new message system (in SDL only)
author | am@osimis.io |
---|---|
date | Mon, 02 Jul 2018 18:13:46 +0200 |
parents | e2fe9352f240 |
children | 40b21c1f8b8d |
line wrap: on
line diff
--- a/Framework/Layers/ILayerSource.h Mon Jul 02 16:36:17 2018 +0200 +++ b/Framework/Layers/ILayerSource.h Mon Jul 02 18:13:46 2018 +0200 @@ -13,7 +13,7 @@ * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. **/ @@ -23,47 +23,80 @@ #include "ILayerRenderer.h" #include "../Toolbox/Slice.h" +#include "../../Framework/Messages/IObservable.h" +#include "../../Framework/Messages/IMessage.h" namespace OrthancStone { - class ILayerSource : public boost::noncopyable + class ILayerSource : public boost::noncopyable, public IObservable { public: - class IObserver : public boost::noncopyable + struct SliceChangedMessage : public IMessage + { + const Slice& slice; + SliceChangedMessage(const Slice& slice) + : IMessage(MessageType_SliceChanged), + slice(slice) + { + } + }; + + struct LayerReadyMessage : public IMessage { - public: - virtual ~IObserver() + std::auto_ptr<ILayerRenderer>& layer; + const CoordinateSystem3D& slice; + bool isError; + + LayerReadyMessage(std::auto_ptr<ILayerRenderer>& layer, + const CoordinateSystem3D& slice, + bool isError) // TODO Shouldn't this be separate as NotifyLayerError? + : IMessage(MessageType_LayerReady), + layer(layer), + slice(slice), + isError(isError) { } + }; - // Triggered as soon as the source has enough information to - // answer to "GetExtent()" - virtual void NotifyGeometryReady(const ILayerSource& source) = 0; - - virtual void NotifyGeometryError(const ILayerSource& source) = 0; - - // Triggered if the content of several slices in the source - // volume has changed - virtual void NotifyContentChange(const ILayerSource& source) = 0; + // class IObserver : public boost::noncopyable + // { + // public: + // virtual ~IObserver() + // { + // } + + // // Triggered as soon as the source has enough information to + // // answer to "GetExtent()" + // virtual void NotifyGeometryReady(const ILayerSource& source) = 0; + + // virtual void NotifyGeometryError(const ILayerSource& source) = 0; - // Triggered if the content of some individual slice in the - // source volume has changed - virtual void NotifySliceChange(const ILayerSource& source, - const Slice& slice) = 0; - - // The layer must be deleted by the observer that releases the - // std::auto_ptr - virtual void NotifyLayerReady(std::auto_ptr<ILayerRenderer>& layer, - const ILayerSource& source, - const CoordinateSystem3D& slice, - bool isError) = 0; // TODO Shouldn't this be separate as NotifyLayerError? - }; + // // Triggered if the content of several slices in the source + // // volume has changed + // virtual void NotifyContentChange(const ILayerSource& source) = 0; + + // // Triggered if the content of some individual slice in the + // // source volume has changed + // virtual void NotifySliceChange(const ILayerSource& source, + // const Slice& slice) = 0; + + // // The layer must be deleted by the observer that releases the + // // std::auto_ptr + // virtual void NotifyLayerReady(std::auto_ptr<ILayerRenderer>& layer, + // const ILayerSource& source, + // const CoordinateSystem3D& slice, + // bool isError) = 0; // TODO Shouldn't this be separate as NotifyLayerError? + // }; + ILayerSource(MessageBroker& broker) + : IObservable(broker) + {} + virtual ~ILayerSource() { } - virtual void Register(IObserver& observer) = 0; + // virtual void Register(IObserver& observer) = 0; virtual bool GetExtent(std::vector<Vector>& points, const CoordinateSystem3D& viewportSlice) = 0;