]> Creatis software - bbtk.git/blob - kernel/src/bbtkMessageManager.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkMessageManager.cxx
1    /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkMessageManager.cxx,v $
5   Language:  C++
6   Date:      $Date: 2008/04/23 14:49:27 $
7   Version:   $Revision: 1.10 $
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), mMaxLevel(9)
29     
30   {
31     std::string key;
32     key ="all";
33     mMessageLevel[key] = 0;
34     mMessageHelp[key] = "Minimum level for all kind of messages";
35     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
36     key ="max";
37     mMessageLevel[key] = 9;
38     mMessageHelp[key] = "Maximum level for all kind of messages";
39     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
40     key ="Kernel";
41     mMessageLevel[key] = 0;
42     mMessageHelp[key] = "Messages generated by the core classes of the lib";
43     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
44     key ="Process";
45     mMessageLevel[key] = 0;
46     mMessageHelp[key] = "Messages related to box processing";
47     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
48     key = "Help";
49     mMessageLevel[key] = 1;
50     mMessageHelp[key] = "Help messages";
51     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
52     key = "Error";
53     mMessageLevel[key] = 0;
54     mMessageHelp[key] = "Error messages";
55     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
56     key = "Warning";
57     mMessageLevel[key] = 1;
58     mMessageHelp[key] = "Warning messages";
59     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
60     key = "Output";
61     mMessageLevel[key] = 1;
62     mMessageHelp[key] = "Output messages";
63     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
64     key = "debug";
65     mMessageLevel[key] = 0;
66     mMessageHelp[key] = "Debug messages";
67     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
68     key = "Config";
69     mMessageLevel[key] = 0;
70     mMessageHelp[key] = "Configuration related messages";
71     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
72     key = "data";
73     mMessageLevel[key] = 0;
74     mMessageHelp[key] = "Data related messages";
75     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
76     key = "wx";
77     mMessageLevel[key] = 0;
78     mMessageHelp[key] = "Widgets related messages";
79     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
80     key = "gui";
81     mMessageLevel[key] = 0;
82     mMessageHelp[key] = "Graphical user interface related messages";
83     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
84     key = "object";
85     mMessageLevel[key] = 0;
86     mMessageHelp[key] = "object memory related messages";
87     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
88     key = "package";
89     mMessageLevel[key] = 0;
90     mMessageHelp[key] = "Packages related messages";
91     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
92     key = "connection";
93     mMessageLevel[key] = 0;
94     mMessageHelp[key] = "Connections related messages";
95     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
96     key = "modified";
97     mMessageLevel[key] = 0;
98     mMessageHelp[key] = "Modified related messages";
99     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
100    }
101
102
103
104
105   MessageManager::~MessageManager() 
106   {
107     //      std::cout << "~MessageManager"<<std::endl;
108   }
109   
110
111
112   MessageManager* MessageManager::GetInstance() 
113   { 
114     static MessageManager* m = 0;
115     if (!m) m = new MessageManager();
116     return m; 
117   }
118
119   void MessageManager::RegisterMessageType(std::string key, 
120                                                   std::string help,
121                                                   unsigned char default_level) 
122   {
123     GetInstance()->mMessageLevel[key] = default_level;
124     GetInstance()->mMessageHelp[key] = help;
125     if (GetInstance()->mMaxMessageLength<key.length()) 
126       GetInstance()->mMaxMessageLength = key.length();
127   }
128
129
130
131   void MessageManager::SetMessageLevel(std::string key, 
132                                               unsigned char level) 
133   {
134     std::map<std::string,int>::iterator i;
135     i = GetInstance()->mMessageLevel.find(key);
136     if (i!=GetInstance()->mMessageLevel.end()) 
137       {
138         (*i).second = level;
139       }
140     else 
141       {
142         bbtkWarning("MessageManager::SetMessageLevel : message type=<"
143                     <<key<<"> unregistered");
144       }
145     
146   }
147   
148   
149   
150   int MessageManager::GetMessageLevel(std::string key) 
151   {
152     int l = GetInstance()->mMessageLevel["all"];
153     std::map<std::string,int>::iterator i = 
154       GetInstance()->mMessageLevel.find(key);
155     if (i!=GetInstance()->mMessageLevel.end()) {
156       if ( (*i).second > l ) l = (*i).second;      
157     }
158     int m = GetInstance()->mMessageLevel["max"];
159     if (l>m) l=m;
160     return l;
161   }
162
163
164
165   void MessageManager::PrintInfo() 
166   {
167     bbtkMessage("Help",1,"================ Messages =================" 
168                 << bbtkendl);
169     bbtkMessage("Help",1, "Kind");
170     for (int k=0;
171          k<(int)(GetInstance()->mMaxMessageLength-2);
172          k++) 
173       {
174         bbtkMessageCont("Help",1," "); 
175       }
176     bbtkMessageCont("Help",1,"Level  Nature" << bbtkendl);
177     std::map<std::string,int>::iterator i;
178     std::map<std::string,std::string>::iterator j;  
179     for (i=GetInstance()->mMessageLevel.begin(),
180            j=GetInstance()->mMessageHelp.begin();
181          i!=GetInstance()->mMessageLevel.end();++i,++j) {
182       bbtkMessage("Help",1, (*i).first);
183       for (int k=0;
184            k<(int)(GetInstance()->mMaxMessageLength+2-(*i).first.length());
185            k++) {
186         bbtkMessageCont("Help",1," ");
187       }
188       bbtkMessageCont("Help",1, (*i).second << "\t" 
189                       << (*j).second << bbtkendl);
190     }
191     bbtkMessage("Help",1,"===========================================" 
192                 << bbtkendl);
193   }
194   
195
196 }