tbx  0.7.3
deleteonhidden.h
1 /*
2  * tbx RISC OS toolbox library
3  *
4  * Copyright (C) 2010-2015 Alan Buckley All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 
25 #ifndef TBX_DELETEONHIDDEN_H_
26 #define TBX_DELETEONHIDDEN_H_
27 
28 #include "hasbeenhiddenlistener.h"
29 #include "object.h"
30 
31 namespace tbx
32 {
40  template<class T> class DeleteClassOnHidden : public tbx::HasBeenHiddenListener
41  {
42  T *_class_to_delete;
43  public:
50  DeleteClassOnHidden(T *class_to_delete) : _class_to_delete(class_to_delete) {}
56  virtual void has_been_hidden(const EventInfo &hidden_event)
57  {
58  delete _class_to_delete;
59  delete this;
60  }
61  };
62 
70  {
71  public:
72  virtual ~DeleteObjectOnHidden() {}
73 
80  virtual void has_been_hidden(const EventInfo &hidden_event)
81  {
82  hidden_event.id_block().self_object().delete_object();
83  delete this;
84  }
85  };
86 
96  {
97  T *_class_to_delete;
98  public:
105  DeleteClassAndObjectOnHidden(T *class_to_delete) : _class_to_delete(class_to_delete) {}
112  virtual void has_been_hidden(const EventInfo &hidden_event)
113  {
114  delete _class_to_delete;
115  hidden_event.id_block().self_object().delete_object();
116  delete this;
117  }
118  };
119 }
120 
121 #endif /* DELETEONHIDDEN_H_ */
virtual void has_been_hidden(const EventInfo &hidden_event)
Overridden has_been_hidden call back to delete the toolbox object that raised the event...
Definition: deleteonhidden.h:80
Object self_object() const
Get the object the event occured on.
Definition: eventrouter.cc:1615
virtual void has_been_hidden(const EventInfo &hidden_event)
Delete the given C++ class and this object on event received.
Definition: deleteonhidden.h:56
DeleteClassOnHidden(T *class_to_delete)
Constructor parsing object to delete when the toolbox object is hidden.
Definition: deleteonhidden.h:50
DeleteClassAndObjectOnHidden(T *class_to_delete)
Constructor parsing object to delete when the toolbox object is hidden.
Definition: deleteonhidden.h:105
Templated object has been hidden listener to delete a C++ object when a toolbox object gets hidden...
Definition: deleteonhidden.h:40
Class to delete a toolbox object when it has been hidden.
Definition: deleteonhidden.h:69
Class to provide information on a toolbox event.
Definition: eventinfo.h:48
void delete_object()
Delete the underlying toolbox object.
Definition: object.cc:89
Listener for an object has been hidden event.
Definition: hasbeenhiddenlistener.h:36
virtual void has_been_hidden(const EventInfo &hidden_event)
Delete the given C++ class, the toolbox object and this C++ object on event received.
Definition: deleteonhidden.h:112
const IdBlock & id_block() const
IdBlock for the current event.
Definition: eventinfo.h:71
Templated object has been hidden listener to delete a C++ object and the toolbox object that generate...
Definition: deleteonhidden.h:95