]> Creatis software - bbtk.git/blob - kernel/src/bbtkMessageManager.cxx
Recreated the complete cvs tree because the project architecture deeply changed
[bbtk.git] / kernel / src / bbtkMessageManager.cxx
1    /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkMessageManager.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/01/22 15:02:00 $
7   Version:   $Revision: 1.1.1.1 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18 /**
19  * \file
20  * \brief class MessageManager : Manages the messages displayed by bbtk (code)
21  */
22 #include "bbtkMessageManager.h"
23
24 namespace bbtk 
25 {
26
27   MessageManager::MessageManager() 
28     : mMaxMessageLength(8), mAllLevel(0) 
29     
30   {
31     std::string key;
32     key ="Core";
33     mMessageLevel[key] = 0;
34     mMessageHelp[key] = "Messages generated by the core classes of the lib";
35     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
36     key ="Process";
37     mMessageLevel[key] = 0;
38     mMessageHelp[key] = "Messages related to box processing";
39     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
40     key = "Help";
41     mMessageLevel[key] = 1;
42     mMessageHelp[key] = "Help messages";
43     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
44     key = "Error";
45     mMessageLevel[key] = 0;
46     mMessageHelp[key] = "Error messages";
47     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
48     key = "Warning";
49     mMessageLevel[key] = 1;
50     mMessageHelp[key] = "Warning messages";
51     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
52     key = "Output";
53     mMessageLevel[key] = 1;
54     mMessageHelp[key] = "Output messages";
55     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
56     key = "Debug";
57     mMessageLevel[key] = 0;
58     mMessageHelp[key] = "Debug messages";
59     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
60     key = "Config";
61     mMessageLevel[key] = 0;
62     mMessageHelp[key] = "Configuration related messages";
63     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
64     key = "Data";
65     mMessageLevel[key] = 0;
66     mMessageHelp[key] = "Data related messages";
67     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
68     key = "Wx";
69     mMessageLevel[key] = 0;
70     mMessageHelp[key] = "Widgets related messages";
71     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
72   }
73
74
75
76
77   MessageManager::~MessageManager() 
78   {
79     //      std::cout << "~MessageManager"<<std::endl;
80   }
81   
82
83
84   MessageManager* MessageManager::GetInstance() 
85   { 
86     static MessageManager* m = 0;
87     if (!m) m = new MessageManager();
88     return m; 
89   }
90
91   void MessageManager::RegisterMessageType(std::string key, 
92                                                   std::string help,
93                                                   unsigned char default_level) 
94   {
95     GetInstance()->mMessageLevel[key] = default_level;
96     GetInstance()->mMessageHelp[key] = help;
97     if (GetInstance()->mMaxMessageLength<key.length()) 
98       GetInstance()->mMaxMessageLength = key.length();
99   }
100
101
102
103   void MessageManager::SetMessageLevel(std::string key, 
104                                               unsigned char level) 
105   {
106     std::map<std::string,int>::iterator i;
107     if (key==std::string("All")) {
108       GetInstance()->mAllLevel = level;
109       
110       for (i=GetInstance()->mMessageLevel.begin();
111            i!=GetInstance()->mMessageLevel.end();
112            ++i) 
113         (*i).second = level;
114       
115     }
116     else {
117       i = GetInstance()->mMessageLevel.find(key);
118       if (i!=GetInstance()->mMessageLevel.end()) {
119         (*i).second = level;
120       }
121       else {
122         bbtkWarning("MessageManager::SetMessageLevel : message type=<"
123                     <<key<<"> unregistered");
124       }
125     }
126   }
127
128
129
130   int MessageManager::GetMessageLevel(std::string key) 
131   {
132     int l = GetInstance()->mAllLevel;
133     std::map<std::string,int>::iterator i = 
134       GetInstance()->mMessageLevel.find(key);
135     if (i!=GetInstance()->mMessageLevel.end()) {
136       if ( (*i).second > l ) l = (*i).second;      
137     }
138     return l;
139   }
140
141
142
143   void MessageManager::PrintInfo() 
144   {
145     bbtkMessage("Help",1,"================ Messages =================" 
146                 << bbtkendl);
147     bbtkMessage("Help",1, "Category");
148     for (int k=0;
149          k<(int)(GetInstance()->mMaxMessageLength-8);
150          k++) {
151       bbtkMessageCont("Help",1," "); 
152     }
153     bbtkMessageCont("Help",1,"Level  Nature" << bbtkendl);
154     std::map<std::string,int>::iterator i;
155     std::map<std::string,std::string>::iterator j;  
156     for (i=GetInstance()->mMessageLevel.begin(),
157            j=GetInstance()->mMessageHelp.begin();
158          i!=GetInstance()->mMessageLevel.end();++i,++j) {
159       bbtkMessage("Help",1, (*i).first);
160       for (int k=0;
161            k<(int)(GetInstance()->mMaxMessageLength+2-(*i).first.length());
162            k++) {
163         bbtkMessageCont("Help",1," ");
164       }
165       bbtkMessageCont("Help",1, (*i).second << "\t" 
166                       << (*j).second << bbtkendl);
167     }
168     bbtkMessage("Help",1,"===========================================" 
169                 << bbtkendl);
170   }
171   
172
173 }