00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <iostream>
00010
00011 using namespace std;
00012
00013 #include "gest/pen.H"
00014
00015 #include "pen_manager.H"
00016
00017 PenManager::~PenManager()
00018 {
00019
00020 for(unsigned long i = 0; i < pens.size(); ++i){
00021
00022 delete pens[i];
00023 pens[i] = 0;
00024
00025 }
00026
00027 pens.clear();
00028
00029 }
00030
00031 void
00032 PenManager::add_pen(Pen *pen)
00033 {
00034
00035 pens.push_back(pen);
00036
00037
00038 if(pens.size() == 1){
00039
00040
00041 assert(cur_pen_idx == 0);
00042
00043 pens[cur_pen_idx]->activate(start);
00044
00045 }
00046
00047 }
00048
00049 void
00050 PenManager::select_pen(Pen *pen)
00051 {
00052
00053 long pen_idx = -1;
00054
00055 for(unsigned i = 0; i < pens.size(); ++i){
00056
00057 if(pens[i] == pen){
00058
00059 pen_idx = i;
00060 break;
00061
00062 }
00063
00064 }
00065
00066
00067 if(pen_idx == -1)
00068 return;
00069
00070
00071 if(pen_idx == cur_pen_idx)
00072 return;
00073
00074
00075 if(pens[cur_pen_idx]->deactivate(start)){
00076
00077 cur_pen_idx = pen_idx;
00078
00079 pens[cur_pen_idx]->activate(start);
00080
00081 } else {
00082
00083 cerr << "PenManager::select_pen() - "
00084 << "Pen change failed! Current pen refuses to deactivate!!"
00085 << endl;
00086
00087 }
00088
00089 }
00090
00091 void
00092 PenManager::cycle_pen(int idx_change)
00093 {
00094
00095
00096 if((pens.size() == 0) || (pens.size() == 1))
00097 return;
00098
00099 if(pens[cur_pen_idx]->deactivate(start)){
00100
00101 do {
00102
00103 idx_change += pens.size();
00104
00105 } while(idx_change < 0);
00106
00107 cur_pen_idx = (cur_pen_idx + idx_change) % pens.size();
00108
00109 pens[cur_pen_idx]->activate(start);
00110
00111 } else {
00112
00113 cerr << "PenManager::cycle_pen() - "
00114 << "Pen change failed! Current pen refuses to deactivate!!"
00115 << endl;
00116
00117 }
00118
00119 }