00001 #ifndef PEN_MANAGER_H_IS_INCLUDED 00002 #define PEN_MANAGER_H_IS_INCLUDED 00003 00004 /*! 00005 * \file pen_manager.H 00006 * \brief Contains the defintion of the PenManager class. 00007 * 00008 * \sa pen_manager.C pen.H pen.C 00009 * 00010 */ 00011 00012 #include <vector> 00013 00014 #include "geom/fsa.H" 00015 00016 class Pen; 00017 00018 class PenManager { 00019 00020 public: 00021 00022 PenManager(State *start_in) 00023 : start(start_in), cur_pen_idx(0) { } 00024 00025 ~PenManager(); 00026 00027 //! \name Pen Accessor Functions 00028 //@{ 00029 00030 void add_pen(Pen *pen); 00031 00032 void select_pen(Pen *pen); 00033 00034 long num_pens() const 00035 { return pens.size(); } 00036 00037 Pen *cur_pen() const 00038 { return pens.size() > 0 ? pens[cur_pen_idx] : 0; } 00039 00040 void next_pen() 00041 { cycle_pen(1); } 00042 void prev_pen() 00043 { cycle_pen(-1); } 00044 00045 //@} 00046 00047 private: 00048 00049 // Not copy constructable or assignable: 00050 PenManager(const PenManager&); 00051 PenManager &operator=(const PenManager&); 00052 00053 State *start; 00054 00055 void cycle_pen(int idx_change); 00056 00057 std::vector<Pen*> pens; 00058 00059 long cur_pen_idx; 00060 00061 }; 00062 00063 #endif // PEN_MANAGER_H_IS_INCLUDED