Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

pen_manager.C

Go to the documentation of this file.
00001 /*!
00002  *  \file pen_manager.C
00003  *  \brief Contains the implementation of the PenManager class.
00004  *
00005  *  \sa pen_manager.H pen.H pen.C
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    // Active the Pen if it is the first one to be added:
00038    if(pens.size() == 1){
00039       
00040       // Make sure no other pens were thought to be current:
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    // Do nothing if the specified pen is not part of the manager:
00067    if(pen_idx == -1)
00068       return;
00069    
00070    // Do nothing if the specified pen is already the current pen:
00071    if(pen_idx == cur_pen_idx)
00072       return;
00073    
00074    // Switch to the specified pen:
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    // Do nothing if there are no pens or one pen:
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 }

Generated on Mon Sep 18 11:39:32 2006 for jot by  doxygen 1.4.4