home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / signal_accumulators.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-01-23  |  2.4 KB  |  88 lines

  1. #ifndef K3DSDK_SIGNAL_ACCUMULATORS_H
  2. #define K3DSDK_SIGNAL_ACCUMULATORS_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2004, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this program; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. #include "log.h"
  24. #include <iostream>
  25.  
  26. namespace k3d
  27. {
  28.  
  29. namespace signal
  30. {
  31.  
  32. /** Defines a signal accumulator for libsigc++ signals that require slots returning bool.
  33. iff any slot returns "false", signal emission is stopped immediately and the signal will
  34. return "false".  Otherwise, the signal will return "true".  This is handy for signals that
  35. represent some action that any observer can cancel, e.g. a document object can prevent
  36. the application from closing if the document hasn't been saved. */
  37.  
  38. class  cancelable
  39. {
  40. public:
  41.     typedef bool result_type;
  42.  
  43.     template<typename IteratorT>
  44.     result_type operator()(IteratorT First, IteratorT Last)
  45.     {
  46.         for(; First != Last; ++First)
  47.             {
  48.                 if(false == *First)
  49.                     return false;
  50.             }
  51.  
  52.         return true;
  53.     }
  54. };
  55.  
  56. /** Defines a signal accumulator for libsigc++ signals that require slots returning bool.
  57. iff any slot returns "true", signal emission is stopped immediately and the signal will
  58. return "true".  Otherwise, the signal will return "false".  This is handy for signals that
  59. represent some event that is "consumed" by an observer, e.g. a keyboard event that
  60. might-or-might-not be used in a hotkey.  If used, emission of the event should stop;
  61. if not, it should continue. */
  62.  
  63. class  consumable
  64. {
  65. public:
  66.     typedef bool result_type;
  67.  
  68.     /// New implementation for use with libsigc++ 2.0
  69.     template<typename IteratorT>
  70.     result_type operator()(IteratorT First, IteratorT Last)
  71.     {
  72.         for(; First != Last; ++First)
  73.             {
  74.                 if(true == *First)
  75.                     return true;
  76.             }
  77.  
  78.         return false;
  79.     }
  80. };
  81.  
  82. } // namespace signal
  83.  
  84. } // namespace k3d
  85.  
  86. #endif // !K3DSDK_SIGNAL_ACCUMULATORS_H
  87.  
  88.