]> Creatis software - bbtk.git/blob - kernel/src/bbtkMessageManager.cxx
4d673d4d029535b8aa885e525bd8b12361cb590b
[bbtk.git] / kernel / src / bbtkMessageManager.cxx
1 /*=========================================================================                                                                               
2   Program:   bbtk
3   Module:    $RCSfile: bbtkMessageManager.cxx,v $
4   Language:  C++
5   Date:      $Date: 2009/05/19 10:19:23 $
6   Version:   $Revision: 1.15 $
7 =========================================================================*/
8
9 /* ---------------------------------------------------------------------
10
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
13 *
14 *  This software is governed by the CeCILL-B license under French law and 
15 *  abiding by the rules of distribution of free software. You can  use, 
16 *  modify and/ or redistribute the software under the terms of the CeCILL-B 
17 *  license as circulated by CEA, CNRS and INRIA at the following URL 
18 *  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
19 *  or in the file LICENSE.txt.
20 *
21 *  As a counterpart to the access to the source code and  rights to copy,
22 *  modify and redistribute granted by the license, users are provided only
23 *  with a limited warranty  and the software's author,  the holder of the
24 *  economic rights,  and the successive licensors  have only  limited
25 *  liability. 
26 *
27 *  The fact that you are presently reading this means that you have had
28 *  knowledge of the CeCILL-B license and that you accept its terms.
29 * ------------------------------------------------------------------------ */                                                                         
30
31 /**
32  * \file
33  * \brief class MessageManager : Manages the messages displayed by bbtk (code)
34  */
35 #include "bbtkMessageManager.h"
36
37 namespace bbtk 
38 {
39
40   MessageManager::MessageManager() 
41     : mMaxMessageLength(8)//, mAllLevel(0), mMaxLevel(9)
42     
43   {
44     std::string key;
45     key ="all";
46     mMessageLevel[key] = 0;
47     mMessageHelp[key] = "Minimum level for all kind of messages";
48     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
49     key ="max";
50     mMessageLevel[key] = 9;
51     mMessageHelp[key] = "Maximum level for all kind of messages";
52     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
53     key ="Kernel";
54     mMessageLevel[key] = 0;
55     mMessageHelp[key] = "Messages generated by the core classes of the lib";
56     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
57     key ="process";
58     mMessageLevel[key] = 0;
59     mMessageHelp[key] = "Messages related to box processing";
60     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
61     key = "Help";
62     mMessageLevel[key] = 1;
63     mMessageHelp[key] = "Help messages";
64     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
65     key = "Error";
66     mMessageLevel[key] = 0;
67     mMessageHelp[key] = "Error messages";
68     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
69     key = "Warning";
70     mMessageLevel[key] = 1;
71     mMessageHelp[key] = "Warning messages";
72     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
73     key = "Output";
74     mMessageLevel[key] = 1;
75     mMessageHelp[key] = "Output messages";
76     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
77     key = "debug";
78     mMessageLevel[key] = 0;
79     mMessageHelp[key] = "Debug messages";
80     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
81     key = "Config";
82     mMessageLevel[key] = 0;
83     mMessageHelp[key] = "Configuration related messages";
84     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
85     key = "data";
86     mMessageLevel[key] = 0;
87     mMessageHelp[key] = "Data related messages";
88     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
89     key = "widget";
90     mMessageLevel[key] = 0;
91     mMessageHelp[key] = "Widgets related messages";
92     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
93     key = "wx";
94     mMessageLevel[key] = 0;
95     mMessageHelp[key] = "wxWidgets related messages";
96     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
97     key = "qt";
98     mMessageLevel[key] = 0;
99     mMessageHelp[key] = "Qt related messages";
100     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
101     key = "gui";
102     mMessageLevel[key] = 0;
103     mMessageHelp[key] = "Graphical user interface related messages";
104     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
105     key = "object";
106     mMessageLevel[key] = 0;
107     mMessageHelp[key] = "object memory related messages";
108     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
109     key = "package";
110     mMessageLevel[key] = 0;
111     mMessageHelp[key] = "Packages related messages";
112     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
113     key = "connection";
114     mMessageLevel[key] = 0;
115     mMessageHelp[key] = "Connections related messages";
116     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
117     key = "change";
118     mMessageLevel[key] = 0;
119     mMessageHelp[key] = "Box i/o changes related messages";
120     if (mMaxMessageLength<key.length()) mMaxMessageLength = key.length();
121    }
122
123
124
125
126   MessageManager::~MessageManager() 
127   {
128     //      std::cout << "~MessageManager"<<std::endl;
129   }
130   
131
132
133   MessageManager* MessageManager::GetInstance() 
134   { 
135     static MessageManager* m = 0;
136     if (!m) m = new MessageManager();
137     return m; 
138   }
139
140   bool MessageManager::RegisterMessageType(std::string key, 
141                                                   std::string help,
142                                                   unsigned char default_level) 
143   {
144     GetInstance()->mMessageLevel[key] = default_level;
145     GetInstance()->mMessageHelp[key] = help;
146     if (GetInstance()->mMaxMessageLength<key.length()) 
147       GetInstance()->mMaxMessageLength = key.length();
148     return true;
149   }
150   
151
152
153
154   void MessageManager::SetMessageLevel(std::string key, 
155                                               unsigned char level) 
156   {
157     std::map<std::string,int>::iterator i;
158     i = GetInstance()->mMessageLevel.find(key);
159     if (i!=GetInstance()->mMessageLevel.end()) 
160       {
161         (*i).second = level;
162       }
163     else 
164       {
165         bbtkWarning("MessageManager::SetMessageLevel : message type=<"
166                     <<key<<"> unregistered");
167       }
168     
169   }
170   
171   
172   
173   int MessageManager::GetMessageLevel(std::string key) 
174   {
175     int l = GetInstance()->mMessageLevel["all"];
176     std::map<std::string,int>::iterator i = 
177       GetInstance()->mMessageLevel.find(key);
178     if (i!=GetInstance()->mMessageLevel.end()) {
179       if ( (*i).second > l ) l = (*i).second;      
180     }
181     int m = GetInstance()->mMessageLevel["max"];
182     if (l>m) l=m;
183     return l;
184   }
185
186
187
188   void MessageManager::PrintInfo() 
189   {
190     bbtkMessage("Help",1,"================ Messages =================" 
191                 << bbtkendl);
192     bbtkMessage("Help",1, "Kind");
193     for (int k=0;
194          k<(int)(GetInstance()->mMaxMessageLength-2);
195          k++) 
196       {
197         bbtkMessageCont("Help",1," "); 
198       }
199     bbtkMessageCont("Help",1,"Level  Nature" << bbtkendl);
200     std::map<std::string,int>::iterator i;
201     std::map<std::string,std::string>::iterator j;  
202     for (i=GetInstance()->mMessageLevel.begin(),
203            j=GetInstance()->mMessageHelp.begin();
204          i!=GetInstance()->mMessageLevel.end();++i,++j) {
205       bbtkMessage("Help",1, (*i).first);
206       for (int k=0;
207            k<(int)(GetInstance()->mMaxMessageLength+2-(*i).first.length());
208            k++) {
209         bbtkMessageCont("Help",1," ");
210       }
211       bbtkMessageCont("Help",1, (*i).second << "\t" 
212                       << (*j).second << bbtkendl);
213     }
214     bbtkMessage("Help",1,"===========================================" 
215                 << bbtkendl);
216   }
217   
218
219 }