author | zautrix <zautrix> | 2005-01-18 23:10:44 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-01-18 23:10:44 (UTC) |
commit | c626089f47244d0c0a9ba73bcd12f42927acb28f (patch) (unidiff) | |
tree | 2f0ca8591dab470ed3ddd6c2af860c2a8081db97 /microkde | |
parent | bfb2947510c52f9c6b35c35786490f261adf30e3 (diff) | |
download | kdepimpi-c626089f47244d0c0a9ba73bcd12f42927acb28f.zip kdepimpi-c626089f47244d0c0a9ba73bcd12f42927acb28f.tar.gz kdepimpi-c626089f47244d0c0a9ba73bcd12f42927acb28f.tar.bz2 |
fix
-rw-r--r-- | microkde/kdecore/klocale.cpp | 2 | ||||
-rw-r--r-- | microkde/kresources/configpage.cpp | 7 | ||||
-rw-r--r-- | microkde/kresources/configwidget.h | 2 |
3 files changed, 4 insertions, 7 deletions
diff --git a/microkde/kdecore/klocale.cpp b/microkde/kdecore/klocale.cpp index aec74fa..7f31ab1 100644 --- a/microkde/kdecore/klocale.cpp +++ b/microkde/kdecore/klocale.cpp | |||
@@ -1,267 +1,267 @@ | |||
1 | #include <qregexp.h> | 1 | #include <qregexp.h> |
2 | #include <qapplication.h> | 2 | #include <qapplication.h> |
3 | 3 | ||
4 | #include "kdebug.h" | 4 | #include "kdebug.h" |
5 | #include "kcalendarsystemgregorian.h" | 5 | #include "kcalendarsystemgregorian.h" |
6 | 6 | ||
7 | #include "klocale.h" | 7 | #include "klocale.h" |
8 | 8 | ||
9 | #include <qstringlist.h> | 9 | #include <qstringlist.h> |
10 | 10 | ||
11 | #define COLLECT_TRANSLATION | 11 | //#define COLLECT_TRANSLATION |
12 | 12 | ||
13 | 13 | ||
14 | QDict<QString> *mLocaleDict = 0; | 14 | QDict<QString> *mLocaleDict = 0; |
15 | void setLocaleDict( QDict<QString> * dict ) | 15 | void setLocaleDict( QDict<QString> * dict ) |
16 | { | 16 | { |
17 | mLocaleDict = dict; | 17 | mLocaleDict = dict; |
18 | 18 | ||
19 | } | 19 | } |
20 | 20 | ||
21 | #ifdef COLLECT_TRANSLATION | 21 | #ifdef COLLECT_TRANSLATION |
22 | 22 | ||
23 | QStringList missingTrans; | 23 | QStringList missingTrans; |
24 | QStringList existingTrans1; | 24 | QStringList existingTrans1; |
25 | QStringList existingTrans2; | 25 | QStringList existingTrans2; |
26 | 26 | ||
27 | void addMissing(const char *text) | 27 | void addMissing(const char *text) |
28 | { | 28 | { |
29 | 29 | ||
30 | QString mis ( text ); | 30 | QString mis ( text ); |
31 | if ( !missingTrans.contains( mis ) ) | 31 | if ( !missingTrans.contains( mis ) ) |
32 | missingTrans.append(mis); | 32 | missingTrans.append(mis); |
33 | 33 | ||
34 | } | 34 | } |
35 | void addExist(const char *text,QString trans ) | 35 | void addExist(const char *text,QString trans ) |
36 | { | 36 | { |
37 | //return; | 37 | //return; |
38 | QString mis ( text ); | 38 | QString mis ( text ); |
39 | if ( !existingTrans1.contains( mis ) ) { | 39 | if ( !existingTrans1.contains( mis ) ) { |
40 | existingTrans1.append(mis); | 40 | existingTrans1.append(mis); |
41 | existingTrans2.append(trans); | 41 | existingTrans2.append(trans); |
42 | 42 | ||
43 | } | 43 | } |
44 | 44 | ||
45 | } | 45 | } |
46 | 46 | ||
47 | #include <qfile.h> | 47 | #include <qfile.h> |
48 | #include <qtextstream.h> | 48 | #include <qtextstream.h> |
49 | #include <qtextcodec.h> | 49 | #include <qtextcodec.h> |
50 | #endif | 50 | #endif |
51 | void dumpMissing() | 51 | void dumpMissing() |
52 | { | 52 | { |
53 | #ifdef COLLECT_TRANSLATION | 53 | #ifdef COLLECT_TRANSLATION |
54 | QString fileName = "/tmp/usernewtrans.txt"; | 54 | QString fileName = "/tmp/usernewtrans.txt"; |
55 | QFile file( fileName ); | 55 | QFile file( fileName ); |
56 | if (!file.open( IO_WriteOnly ) ) { | 56 | if (!file.open( IO_WriteOnly ) ) { |
57 | return ; | 57 | return ; |
58 | } | 58 | } |
59 | QTextStream ts( &file ); | 59 | QTextStream ts( &file ); |
60 | ts.setCodec( QTextCodec::codecForName("utf8") ); | 60 | ts.setCodec( QTextCodec::codecForName("utf8") ); |
61 | 61 | ||
62 | int i; | 62 | int i; |
63 | for ( i = 0; i< missingTrans.count(); ++i ) { | 63 | for ( i = 0; i< missingTrans.count(); ++i ) { |
64 | 64 | ||
65 | QString text = missingTrans[i].replace( QRegExp("\n"),"\\n" ); | 65 | QString text = missingTrans[i].replace( QRegExp("\n"),"\\n" ); |
66 | ts << "{ \""<<text<< "\",\""<< text <<"\" },\n"; | 66 | ts << "{ \""<<text<< "\",\""<< text <<"\" },\n"; |
67 | 67 | ||
68 | } | 68 | } |
69 | file.close(); | 69 | file.close(); |
70 | { | 70 | { |
71 | QString fileName = "/tmp/usertrans.txt"; | 71 | QString fileName = "/tmp/usertrans.txt"; |
72 | QFile file( fileName ); | 72 | QFile file( fileName ); |
73 | if (!file.open( IO_WriteOnly ) ) { | 73 | if (!file.open( IO_WriteOnly ) ) { |
74 | return ; | 74 | return ; |
75 | } | 75 | } |
76 | QTextStream ts( &file ); | 76 | QTextStream ts( &file ); |
77 | ts.setCodec( QTextCodec::codecForName("utf8") ); | 77 | ts.setCodec( QTextCodec::codecForName("utf8") ); |
78 | 78 | ||
79 | int i; | 79 | int i; |
80 | for ( i = 0; i< existingTrans1.count(); ++i ) { | 80 | for ( i = 0; i< existingTrans1.count(); ++i ) { |
81 | 81 | ||
82 | QString text = existingTrans1[i].replace( QRegExp("\n"),"\\n" ); | 82 | QString text = existingTrans1[i].replace( QRegExp("\n"),"\\n" ); |
83 | QString text2 = existingTrans2[i].replace( QRegExp("\n"),"\\n" ); | 83 | QString text2 = existingTrans2[i].replace( QRegExp("\n"),"\\n" ); |
84 | ts << "{ \""<<text<< "\",\""<< text2 <<"\" },\n"; | 84 | ts << "{ \""<<text<< "\",\""<< text2 <<"\" },\n"; |
85 | 85 | ||
86 | } | 86 | } |
87 | file.close(); | 87 | file.close(); |
88 | } | 88 | } |
89 | #endif | 89 | #endif |
90 | } | 90 | } |
91 | QString i18n(const char *text) | 91 | QString i18n(const char *text) |
92 | { | 92 | { |
93 | if ( ! mLocaleDict ) { | 93 | if ( ! mLocaleDict ) { |
94 | #ifdef COLLECT_TRANSLATION | 94 | #ifdef COLLECT_TRANSLATION |
95 | addMissing( text ); | 95 | addMissing( text ); |
96 | #endif | 96 | #endif |
97 | return QString( text ); | 97 | return QString( text ); |
98 | } | 98 | } |
99 | else { | 99 | else { |
100 | QString* ret = mLocaleDict->find(QString(text)) ; | 100 | QString* ret = mLocaleDict->find(QString(text)) ; |
101 | if ( ret == 0 ) { | 101 | if ( ret == 0 ) { |
102 | #ifdef COLLECT_TRANSLATION | 102 | #ifdef COLLECT_TRANSLATION |
103 | addMissing( text ); | 103 | addMissing( text ); |
104 | #endif | 104 | #endif |
105 | return QString( text ); | 105 | return QString( text ); |
106 | } | 106 | } |
107 | else { | 107 | else { |
108 | if ( (*ret).isEmpty() ) { | 108 | if ( (*ret).isEmpty() ) { |
109 | #ifdef COLLECT_TRANSLATION | 109 | #ifdef COLLECT_TRANSLATION |
110 | addMissing( text ); | 110 | addMissing( text ); |
111 | #endif | 111 | #endif |
112 | return QString( text ); | 112 | return QString( text ); |
113 | } | 113 | } |
114 | else { | 114 | else { |
115 | #ifdef COLLECT_TRANSLATION | 115 | #ifdef COLLECT_TRANSLATION |
116 | addExist( text, *ret ); | 116 | addExist( text, *ret ); |
117 | #endif | 117 | #endif |
118 | return (*ret); | 118 | return (*ret); |
119 | } | 119 | } |
120 | } | 120 | } |
121 | } | 121 | } |
122 | 122 | ||
123 | } | 123 | } |
124 | 124 | ||
125 | QString i18n(const char *,const char *text) | 125 | QString i18n(const char *,const char *text) |
126 | { | 126 | { |
127 | return i18n( text ); | 127 | return i18n( text ); |
128 | } | 128 | } |
129 | 129 | ||
130 | QString i18n(const char *text1, const char *textn, int num) | 130 | QString i18n(const char *text1, const char *textn, int num) |
131 | { | 131 | { |
132 | if ( num == 1 ) return i18n( text1 ); | 132 | if ( num == 1 ) return i18n( text1 ); |
133 | else { | 133 | else { |
134 | QString text = i18n( textn ); | 134 | QString text = i18n( textn ); |
135 | int pos = text.find( "%n" ); | 135 | int pos = text.find( "%n" ); |
136 | if ( pos >= 0 ) text.replace( pos, 2, QString::number( num ) ); | 136 | if ( pos >= 0 ) text.replace( pos, 2, QString::number( num ) ); |
137 | return text; | 137 | return text; |
138 | } | 138 | } |
139 | } | 139 | } |
140 | 140 | ||
141 | inline void put_it_in( QChar *buffer, uint& index, const QString &s ) | 141 | inline void put_it_in( QChar *buffer, uint& index, const QString &s ) |
142 | { | 142 | { |
143 | for ( uint l = 0; l < s.length(); l++ ) | 143 | for ( uint l = 0; l < s.length(); l++ ) |
144 | buffer[index++] = s.at( l ); | 144 | buffer[index++] = s.at( l ); |
145 | } | 145 | } |
146 | 146 | ||
147 | inline void put_it_in( QChar *buffer, uint& index, int number ) | 147 | inline void put_it_in( QChar *buffer, uint& index, int number ) |
148 | { | 148 | { |
149 | buffer[index++] = number / 10 + '0'; | 149 | buffer[index++] = number / 10 + '0'; |
150 | buffer[index++] = number % 10 + '0'; | 150 | buffer[index++] = number % 10 + '0'; |
151 | } | 151 | } |
152 | 152 | ||
153 | static int readInt(const QString &str, uint &pos) | 153 | static int readInt(const QString &str, uint &pos) |
154 | { | 154 | { |
155 | if (!str.at(pos).isDigit()) return -1; | 155 | if (!str.at(pos).isDigit()) return -1; |
156 | int result = 0; | 156 | int result = 0; |
157 | for (; str.length() > pos && str.at(pos).isDigit(); pos++) | 157 | for (; str.length() > pos && str.at(pos).isDigit(); pos++) |
158 | { | 158 | { |
159 | result *= 10; | 159 | result *= 10; |
160 | result += str.at(pos).digitValue(); | 160 | result += str.at(pos).digitValue(); |
161 | } | 161 | } |
162 | 162 | ||
163 | return result; | 163 | return result; |
164 | } | 164 | } |
165 | 165 | ||
166 | KLocale::KLocale() : mCalendarSystem( 0 ) | 166 | KLocale::KLocale() : mCalendarSystem( 0 ) |
167 | { | 167 | { |
168 | 168 | ||
169 | m_decimalSymbol = "."; | 169 | m_decimalSymbol = "."; |
170 | m_positiveSign = ""; | 170 | m_positiveSign = ""; |
171 | m_negativeSign = "-"; | 171 | m_negativeSign = "-"; |
172 | m_thousandsSeparator = ","; | 172 | m_thousandsSeparator = ","; |
173 | 173 | ||
174 | 174 | ||
175 | 175 | ||
176 | 176 | ||
177 | mWeekStartsMonday = true; | 177 | mWeekStartsMonday = true; |
178 | mHourF24Format = true; | 178 | mHourF24Format = true; |
179 | mIntDateFormat = Default; | 179 | mIntDateFormat = Default; |
180 | mIntTimeFormat = Default; | 180 | mIntTimeFormat = Default; |
181 | mLanguage = 0; | 181 | mLanguage = 0; |
182 | mDateFormat = "%a %Y %b %d"; | 182 | mDateFormat = "%a %Y %b %d"; |
183 | mDateFormatShort = "%Y-%m-%d"; | 183 | mDateFormatShort = "%Y-%m-%d"; |
184 | mTimeZoneList << ("-11:00 US/Samoa") | 184 | mTimeZoneList << ("-11:00 US/Samoa") |
185 | << ("-10:00 US/Hawaii") | 185 | << ("-10:00 US/Hawaii") |
186 | << ("-09:00 US/Alaska") | 186 | << ("-09:00 US/Alaska") |
187 | << ("-08:00 US/Pacific") | 187 | << ("-08:00 US/Pacific") |
188 | << ("-07:00 US/Mountain") | 188 | << ("-07:00 US/Mountain") |
189 | << ("-06:00 US/Central") | 189 | << ("-06:00 US/Central") |
190 | << ("-05:00 US/Eastern") | 190 | << ("-05:00 US/Eastern") |
191 | << ("-04:00 Brazil/West") | 191 | << ("-04:00 Brazil/West") |
192 | << ("-03:00 Brazil/East") | 192 | << ("-03:00 Brazil/East") |
193 | << ("-02:00 Brazil/DeNoronha") | 193 | << ("-02:00 Brazil/DeNoronha") |
194 | << ("-01:00 Atlantic/Azores") | 194 | << ("-01:00 Atlantic/Azores") |
195 | << (" 00:00 Europe/London(UTC)") | 195 | << (" 00:00 Europe/London(UTC)") |
196 | << ("+01:00 Europe/Oslo(CET)") | 196 | << ("+01:00 Europe/Oslo(CET)") |
197 | << ("+02:00 Europe/Helsinki") | 197 | << ("+02:00 Europe/Helsinki") |
198 | << ("+03:00 Europe/Moscow") | 198 | << ("+03:00 Europe/Moscow") |
199 | << ("+04:00 Indian/Mauritius") | 199 | << ("+04:00 Indian/Mauritius") |
200 | << ("+05:00 Indian/Maldives") | 200 | << ("+05:00 Indian/Maldives") |
201 | << ("+06:00 Indian/Chagos") | 201 | << ("+06:00 Indian/Chagos") |
202 | << ("+07:00 Asia/Bangkok") | 202 | << ("+07:00 Asia/Bangkok") |
203 | << ("+08:00 Asia/Hongkong") | 203 | << ("+08:00 Asia/Hongkong") |
204 | << ("+09:00 Asia/Tokyo") | 204 | << ("+09:00 Asia/Tokyo") |
205 | << ("+10:00 Asia/Vladivostok") | 205 | << ("+10:00 Asia/Vladivostok") |
206 | << ("+11:00 Asia/Magadan") | 206 | << ("+11:00 Asia/Magadan") |
207 | << ("+12:00 Asia/Kamchatka") | 207 | << ("+12:00 Asia/Kamchatka") |
208 | // << (" xx:xx User defined offset") | 208 | // << (" xx:xx User defined offset") |
209 | << i18n (" Local Time"); | 209 | << i18n (" Local Time"); |
210 | mSouthDaylight = false; | 210 | mSouthDaylight = false; |
211 | mTimeZoneOffset = 0; | 211 | mTimeZoneOffset = 0; |
212 | daylightEnabled = false; | 212 | daylightEnabled = false; |
213 | } | 213 | } |
214 | 214 | ||
215 | void KLocale::setDateFormat( QString s ) | 215 | void KLocale::setDateFormat( QString s ) |
216 | { | 216 | { |
217 | mDateFormat = s; | 217 | mDateFormat = s; |
218 | } | 218 | } |
219 | 219 | ||
220 | void KLocale::setDateFormatShort( QString s ) | 220 | void KLocale::setDateFormatShort( QString s ) |
221 | { | 221 | { |
222 | mDateFormatShort = s; | 222 | mDateFormatShort = s; |
223 | } | 223 | } |
224 | 224 | ||
225 | void KLocale::setHore24Format ( bool b ) | 225 | void KLocale::setHore24Format ( bool b ) |
226 | { | 226 | { |
227 | mHourF24Format = b; | 227 | mHourF24Format = b; |
228 | } | 228 | } |
229 | void KLocale::setWeekStartMonday( bool b ) | 229 | void KLocale::setWeekStartMonday( bool b ) |
230 | { | 230 | { |
231 | mWeekStartsMonday = b; | 231 | mWeekStartsMonday = b; |
232 | } | 232 | } |
233 | 233 | ||
234 | KLocale::IntDateFormat KLocale::getIntDateFormat( ) | 234 | KLocale::IntDateFormat KLocale::getIntDateFormat( ) |
235 | { | 235 | { |
236 | return mIntDateFormat; | 236 | return mIntDateFormat; |
237 | 237 | ||
238 | } | 238 | } |
239 | void KLocale::setIntDateFormat( KLocale::IntDateFormat i ) | 239 | void KLocale::setIntDateFormat( KLocale::IntDateFormat i ) |
240 | { | 240 | { |
241 | mIntDateFormat = i; | 241 | mIntDateFormat = i; |
242 | } | 242 | } |
243 | KLocale::IntDateFormat KLocale::getIntTimeFormat( ) | 243 | KLocale::IntDateFormat KLocale::getIntTimeFormat( ) |
244 | { | 244 | { |
245 | return mIntTimeFormat; | 245 | return mIntTimeFormat; |
246 | 246 | ||
247 | } | 247 | } |
248 | void KLocale::setIntTimeFormat( KLocale::IntDateFormat i ) | 248 | void KLocale::setIntTimeFormat( KLocale::IntDateFormat i ) |
249 | { | 249 | { |
250 | mIntTimeFormat = i; | 250 | mIntTimeFormat = i; |
251 | } | 251 | } |
252 | 252 | ||
253 | void KLocale::setLanguage( int i ) | 253 | void KLocale::setLanguage( int i ) |
254 | { | 254 | { |
255 | mLanguage = i; | 255 | mLanguage = i; |
256 | } | 256 | } |
257 | int KLocale::language( ) | 257 | int KLocale::language( ) |
258 | { | 258 | { |
259 | return mLanguage; | 259 | return mLanguage; |
260 | } | 260 | } |
261 | QString KLocale::translate( const char *index ) const | 261 | QString KLocale::translate( const char *index ) const |
262 | { | 262 | { |
263 | return i18n( index ); | 263 | return i18n( index ); |
264 | } | 264 | } |
265 | 265 | ||
266 | QString KLocale::translate( const char *, const char *fallback) const | 266 | QString KLocale::translate( const char *, const char *fallback) const |
267 | { | 267 | { |
diff --git a/microkde/kresources/configpage.cpp b/microkde/kresources/configpage.cpp index 533be51..011e47e 100644 --- a/microkde/kresources/configpage.cpp +++ b/microkde/kresources/configpage.cpp | |||
@@ -204,330 +204,327 @@ void ConfigPage::load() | |||
204 | info.mConfig = new KConfig( locateLocal( "config", "kcalrc" ) ); | 204 | info.mConfig = new KConfig( locateLocal( "config", "kcalrc" ) ); |
205 | } else { | 205 | } else { |
206 | QString configFile = locateLocal( "config", QString( "kresources/%1/stdrc" ).arg( family ) ); | 206 | QString configFile = locateLocal( "config", QString( "kresources/%1/stdrc" ).arg( family ) ); |
207 | info.mConfig = new KConfig( configFile ); | 207 | info.mConfig = new KConfig( configFile ); |
208 | } | 208 | } |
209 | info.mManager->readConfig( info.mConfig ); | 209 | info.mManager->readConfig( info.mConfig ); |
210 | 210 | ||
211 | mInfoMap.append( info ); | 211 | mInfoMap.append( info ); |
212 | } | 212 | } |
213 | } | 213 | } |
214 | } | 214 | } |
215 | } | 215 | } |
216 | mCurrentManager = 0; | 216 | mCurrentManager = 0; |
217 | 217 | ||
218 | mFamilyCombo->insertStringList( mFamilyMap ); | 218 | mFamilyCombo->insertStringList( mFamilyMap ); |
219 | 219 | ||
220 | int currentFamily = mConfig->readNumEntry( "CurrentFamily", 0 ); | 220 | int currentFamily = mConfig->readNumEntry( "CurrentFamily", 0 ); |
221 | mFamilyCombo->setCurrentItem( currentFamily ); | 221 | mFamilyCombo->setCurrentItem( currentFamily ); |
222 | slotFamilyChanged( currentFamily ); | 222 | slotFamilyChanged( currentFamily ); |
223 | } | 223 | } |
224 | 224 | ||
225 | void ConfigPage::save() | 225 | void ConfigPage::save() |
226 | { | 226 | { |
227 | saveResourceSettings(); | 227 | saveResourceSettings(); |
228 | 228 | ||
229 | QValueList<ResourcePageInfo>::Iterator it; | 229 | QValueList<ResourcePageInfo>::Iterator it; |
230 | for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) | 230 | for ( it = mInfoMap.begin(); it != mInfoMap.end(); ++it ) |
231 | (*it).mManager->writeConfig( (*it).mConfig ); | 231 | (*it).mManager->writeConfig( (*it).mConfig ); |
232 | 232 | ||
233 | emit changed( false ); | 233 | emit changed( false ); |
234 | } | 234 | } |
235 | 235 | ||
236 | void ConfigPage::defaults() | 236 | void ConfigPage::defaults() |
237 | { | 237 | { |
238 | } | 238 | } |
239 | 239 | ||
240 | void ConfigPage::slotFamilyChanged( int pos ) | 240 | void ConfigPage::slotFamilyChanged( int pos ) |
241 | { | 241 | { |
242 | if ( pos < 0 || pos >= (int)mFamilyMap.count() ) | 242 | if ( pos < 0 || pos >= (int)mFamilyMap.count() ) |
243 | return; | 243 | return; |
244 | 244 | ||
245 | saveResourceSettings(); | 245 | saveResourceSettings(); |
246 | 246 | ||
247 | mFamily = mFamilyMap[ pos ]; | 247 | mFamily = mFamilyMap[ pos ]; |
248 | 248 | ||
249 | //US qDebug("ConfigPage::slotFamilyChanged 4 family=%s", mFamily.latin1()); | 249 | //US qDebug("ConfigPage::slotFamilyChanged 4 family=%s", mFamily.latin1()); |
250 | 250 | ||
251 | mCurrentManager = mInfoMap[ pos ].mManager; | 251 | mCurrentManager = mInfoMap[ pos ].mManager; |
252 | mCurrentConfig = mInfoMap[ pos ].mConfig; | 252 | mCurrentConfig = mInfoMap[ pos ].mConfig; |
253 | 253 | ||
254 | if ( !mCurrentManager ) | 254 | if ( !mCurrentManager ) |
255 | kdDebug(5650) << "ERROR: cannot create ResourceManager<Resource>( mFamily )" << endl; | 255 | kdDebug(5650) << "ERROR: cannot create ResourceManager<Resource>( mFamily )" << endl; |
256 | 256 | ||
257 | mListView->clear(); | 257 | mListView->clear(); |
258 | 258 | ||
259 | if ( mCurrentManager->isEmpty() ) { | 259 | if ( mCurrentManager->isEmpty() ) { |
260 | //US qDebug("ConfigPage::slotFamilyChanged 4.1 mCurrentManager=%ul", mCurrentManager ); | 260 | //US qDebug("ConfigPage::slotFamilyChanged 4.1 mCurrentManager=%ul", mCurrentManager ); |
261 | 261 | ||
262 | defaults(); | 262 | defaults(); |
263 | } | 263 | } |
264 | 264 | ||
265 | Resource *standardResource = mCurrentManager->standardResource(); | 265 | Resource *standardResource = mCurrentManager->standardResource(); |
266 | 266 | ||
267 | //US qDebug("ConfigPage::slotFamilyChanged 4.4 resourcename=%s", standardResource->resourceName().latin1()); | 267 | //US qDebug("ConfigPage::slotFamilyChanged 4.4 resourcename=%s", standardResource->resourceName().latin1()); |
268 | 268 | ||
269 | 269 | ||
270 | Manager<Resource>::Iterator it; | 270 | Manager<Resource>::Iterator it; |
271 | for ( it = mCurrentManager->begin(); it != mCurrentManager->end(); ++it ) { | 271 | for ( it = mCurrentManager->begin(); it != mCurrentManager->end(); ++it ) { |
272 | ConfigViewItem *item = new ConfigViewItem( mListView, *it ); | 272 | ConfigViewItem *item = new ConfigViewItem( mListView, *it ); |
273 | if ( *it == standardResource ) | 273 | if ( *it == standardResource ) |
274 | item->setStandard( true ); | 274 | item->setStandard( true ); |
275 | } | 275 | } |
276 | 276 | ||
277 | if ( mListView->childCount() == 0 ) { | 277 | if ( mListView->childCount() == 0 ) { |
278 | //US qDebug("ConfigPage::slotFamilyChanged 4.5 "); | 278 | //US qDebug("ConfigPage::slotFamilyChanged 4.5 "); |
279 | 279 | ||
280 | defaults(); | 280 | defaults(); |
281 | emit changed( true ); | 281 | emit changed( true ); |
282 | mCurrentManager->writeConfig( mCurrentConfig ); | 282 | mCurrentManager->writeConfig( mCurrentConfig ); |
283 | } else { | 283 | } else { |
284 | //US qDebug("ConfigPage::slotFamilyChanged 4.6 "); | 284 | //US qDebug("ConfigPage::slotFamilyChanged 4.6 "); |
285 | 285 | ||
286 | if ( !standardResource ) { | 286 | if ( !standardResource ) { |
287 | KMessageBox::sorry( this, i18n( "There is no standard resource!<br> Please select one." ) ); | 287 | KMessageBox::sorry( this, i18n( "There is no standard resource!<br> Please select one." ) ); |
288 | 288 | ||
289 | //US qDebug("ConfigPage::slotFamilyChanged 4.7" ); | 289 | //US qDebug("ConfigPage::slotFamilyChanged 4.7" ); |
290 | 290 | ||
291 | } | 291 | } |
292 | 292 | ||
293 | emit changed( false ); | 293 | emit changed( false ); |
294 | } | 294 | } |
295 | } | 295 | } |
296 | 296 | ||
297 | void ConfigPage::slotAdd() | 297 | void ConfigPage::slotAdd() |
298 | { | 298 | { |
299 | if ( !mCurrentManager ) | 299 | if ( !mCurrentManager ) |
300 | return; | 300 | return; |
301 | 301 | ||
302 | QStringList types = mCurrentManager->resourceTypeNames(); | 302 | QStringList types = mCurrentManager->resourceTypeNames(); |
303 | QStringList descs = mCurrentManager->resourceTypeDescriptions(); | 303 | QStringList descs = mCurrentManager->resourceTypeDescriptions(); |
304 | bool ok = false; | 304 | bool ok = false; |
305 | 305 | ||
306 | QString desc; | 306 | QString desc; |
307 | 307 | ||
308 | desc = QInputDialog::getItem( i18n( "Resource Configuration" ), | 308 | desc = QInputDialog::getItem( i18n( "Resource Configuration" ), |
309 | i18n( "Select type of the new resource:" ), descs, 0, | 309 | i18n( "Select type of the new resource:" ), descs, 0, |
310 | false, &ok, this ); | 310 | false, &ok, this ); |
311 | 311 | ||
312 | if ( !ok ) | 312 | if ( !ok ) |
313 | return; | 313 | return; |
314 | 314 | ||
315 | QString type = types[ descs.findIndex( desc ) ]; | 315 | QString type = types[ descs.findIndex( desc ) ]; |
316 | 316 | ||
317 | // Create new resource | 317 | // Create new resource |
318 | Resource *resource = mCurrentManager->createResource( type ); | 318 | Resource *resource = mCurrentManager->createResource( type ); |
319 | if ( !resource ) { | 319 | if ( !resource ) { |
320 | KMessageBox::error( this, i18n("Unable to create resource of type '%1'.") | 320 | KMessageBox::error( this, i18n("Unable to create resource of type '%1'.") |
321 | .arg( type ) ); | 321 | .arg( type ) ); |
322 | return; | 322 | return; |
323 | } | 323 | } |
324 | 324 | ||
325 | resource->setResourceName( type + "-resource" ); | 325 | resource->setResourceName( type + "-resource" ); |
326 | 326 | ||
327 | ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); | 327 | ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); |
328 | 328 | ||
329 | if ( dlg.exec() ) { | 329 | if ( dlg.exec() ) { |
330 | mCurrentManager->add( resource ); | 330 | mCurrentManager->add( resource ); |
331 | 331 | ||
332 | ConfigViewItem *item = new ConfigViewItem( mListView, resource ); | 332 | ConfigViewItem *item = new ConfigViewItem( mListView, resource ); |
333 | 333 | ||
334 | mLastItem = item; | 334 | mLastItem = item; |
335 | 335 | ||
336 | // if there are only read-only resources we'll set this resource | 336 | // if there are only read-only resources we'll set this resource |
337 | // as standard resource | 337 | // as standard resource |
338 | if ( !resource->readOnly() ) { | 338 | if ( !resource->readOnly() ) { |
339 | bool onlyReadOnly = true; | 339 | bool onlyReadOnly = true; |
340 | QListViewItem *it = mListView->firstChild(); | 340 | QListViewItem *it = mListView->firstChild(); |
341 | while ( it != 0 ) { | 341 | while ( it != 0 ) { |
342 | ConfigViewItem *confIt = static_cast<ConfigViewItem*>( it ); | 342 | ConfigViewItem *confIt = static_cast<ConfigViewItem*>( it ); |
343 | if ( !confIt->readOnly() && confIt != item ) | 343 | if ( !confIt->readOnly() && confIt != item ) |
344 | onlyReadOnly = false; | 344 | onlyReadOnly = false; |
345 | 345 | ||
346 | it = it->itemBelow(); | 346 | it = it->itemBelow(); |
347 | } | 347 | } |
348 | 348 | ||
349 | if ( onlyReadOnly ) | 349 | if ( onlyReadOnly ) |
350 | item->setStandard( true ); | 350 | item->setStandard( true ); |
351 | } | 351 | } |
352 | 352 | ||
353 | emit changed( true ); | 353 | emit changed( true ); |
354 | } else { | 354 | } else { |
355 | delete resource; | 355 | delete resource; |
356 | resource = 0; | 356 | resource = 0; |
357 | } | 357 | } |
358 | } | 358 | } |
359 | 359 | ||
360 | void ConfigPage::slotRemove() | 360 | void ConfigPage::slotRemove() |
361 | { | 361 | { |
362 | if ( !mCurrentManager ) | 362 | if ( !mCurrentManager ) |
363 | return; | 363 | return; |
364 | 364 | ||
365 | QListViewItem *item = mListView->currentItem(); | 365 | QListViewItem *item = mListView->currentItem(); |
366 | ConfigViewItem *confItem = static_cast<ConfigViewItem*>( item ); | 366 | ConfigViewItem *confItem = static_cast<ConfigViewItem*>( item ); |
367 | 367 | ||
368 | if ( !confItem ) | 368 | if ( !confItem ) |
369 | return; | 369 | return; |
370 | 370 | ||
371 | if ( confItem->standard() ) { | 371 | if ( confItem->standard() ) { |
372 | KMessageBox::sorry( this, i18n( "You cannot remove your standard resource!\n Please select a new standard resource first." ) ); | 372 | KMessageBox::sorry( this, i18n( "You cannot remove your standard resource!\n Please select a new standard resource first." ) ); |
373 | return; | 373 | return; |
374 | } | 374 | } |
375 | 375 | ||
376 | mCurrentManager->remove( confItem->resource() ); | 376 | mCurrentManager->remove( confItem->resource() ); |
377 | 377 | ||
378 | if ( item == mLastItem ) | 378 | if ( item == mLastItem ) |
379 | mLastItem = 0; | 379 | mLastItem = 0; |
380 | 380 | ||
381 | mListView->takeItem( item ); | 381 | mListView->takeItem( item ); |
382 | delete item; | 382 | delete item; |
383 | 383 | ||
384 | emit changed( true ); | 384 | emit changed( true ); |
385 | } | 385 | } |
386 | 386 | ||
387 | void ConfigPage::slotEdit() | 387 | void ConfigPage::slotEdit() |
388 | { | 388 | { |
389 | if ( !mCurrentManager ) | 389 | if ( !mCurrentManager ) |
390 | return; | 390 | return; |
391 | 391 | ||
392 | QListViewItem *item = mListView->currentItem(); | 392 | QListViewItem *item = mListView->currentItem(); |
393 | ConfigViewItem *configItem = static_cast<ConfigViewItem*>( item ); | 393 | ConfigViewItem *configItem = static_cast<ConfigViewItem*>( item ); |
394 | if ( !configItem ) | 394 | if ( !configItem ) |
395 | return; | 395 | return; |
396 | 396 | ||
397 | Resource *resource = configItem->resource(); | 397 | Resource *resource = configItem->resource(); |
398 | 398 | ||
399 | ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); | 399 | ConfigDialog dlg( this, mFamily, resource, "KRES::ConfigDialog" ); |
400 | 400 | ||
401 | if ( dlg.exec() ) { | 401 | if ( dlg.exec() ) { |
402 | configItem->setText( 0, resource->resourceName() ); | 402 | configItem->setText( 0, resource->resourceName() ); |
403 | configItem->setText( 1, resource->type() ); | 403 | configItem->setText( 1, resource->type() ); |
404 | 404 | ||
405 | if ( configItem->standard() && configItem->readOnly() ) { | 405 | if ( configItem->standard() && configItem->readOnly() ) { |
406 | KMessageBox::sorry( this, i18n( "You cannot use a read-only<br> resource as standard!" ) ); | 406 | KMessageBox::sorry( this, i18n( "You cannot use a read-only<br> resource as standard!" ) ); |
407 | configItem->setStandard( false ); | 407 | configItem->setStandard( false ); |
408 | } | 408 | } |
409 | 409 | ||
410 | mCurrentManager->resourceChanged( resource ); | 410 | mCurrentManager->resourceChanged( resource ); |
411 | emit changed( true ); | 411 | emit changed( true ); |
412 | } | 412 | } |
413 | } | 413 | } |
414 | 414 | ||
415 | void ConfigPage::slotStandard() | 415 | void ConfigPage::slotStandard() |
416 | { | 416 | { |
417 | if ( !mCurrentManager ) | 417 | if ( !mCurrentManager ) |
418 | return; | 418 | return; |
419 | 419 | ||
420 | ConfigViewItem *item = static_cast<ConfigViewItem*>( mListView->currentItem() ); | 420 | ConfigViewItem *item = static_cast<ConfigViewItem*>( mListView->currentItem() ); |
421 | if ( !item ) | 421 | if ( !item ) |
422 | return; | 422 | return; |
423 | 423 | ||
424 | if ( item->readOnly() ) { | 424 | if ( item->readOnly() ) { |
425 | KMessageBox::sorry( this, i18n( "You cannot use a read-only<br>resource as standard!" ) ); | 425 | KMessageBox::sorry( this, i18n( "You cannot use a read-only<br>resource as standard!" ) ); |
426 | return; | 426 | return; |
427 | } | 427 | } |
428 | 428 | ||
429 | if ( !item->isOn() ) { | 429 | if ( !item->isOn() ) { |
430 | KMessageBox::sorry( this, i18n( "You cannot use an inactive<br>resource as standard!" ) ); | 430 | KMessageBox::sorry( this, i18n( "You cannot use an inactive<br>resource as standard!" ) ); |
431 | return; | 431 | return; |
432 | } | 432 | } |
433 | 433 | ||
434 | QListViewItem *it = mListView->firstChild(); | 434 | QListViewItem *it = mListView->firstChild(); |
435 | while ( it != 0 ) { | 435 | while ( it != 0 ) { |
436 | ConfigViewItem *configItem = static_cast<ConfigViewItem*>( it ); | 436 | ConfigViewItem *configItem = static_cast<ConfigViewItem*>( it ); |
437 | if ( configItem->standard() ) | 437 | if ( configItem->standard() ) |
438 | configItem->setStandard( false ); | 438 | configItem->setStandard( false ); |
439 | it = it->itemBelow(); | 439 | it = it->itemBelow(); |
440 | } | 440 | } |
441 | 441 | ||
442 | item->setStandard( true ); | 442 | item->setStandard( true ); |
443 | mCurrentManager->setStandardResource( item->resource() ); | 443 | mCurrentManager->setStandardResource( item->resource() ); |
444 | emit changed( true ); | 444 | emit changed( true ); |
445 | 445 | ||
446 | } | 446 | } |
447 | 447 | ||
448 | void ConfigPage::slotSelectionChanged() | 448 | void ConfigPage::slotSelectionChanged() |
449 | { | 449 | { |
450 | bool state = ( mListView->currentItem() != 0 ); | 450 | bool state = ( mListView->currentItem() != 0 ); |
451 | 451 | ||
452 | mRemoveButton->setEnabled( state ); | 452 | mRemoveButton->setEnabled( state ); |
453 | mEditButton->setEnabled( state ); | 453 | mEditButton->setEnabled( state ); |
454 | mStandardButton->setEnabled( state ); | 454 | mStandardButton->setEnabled( state ); |
455 | } | 455 | } |
456 | 456 | ||
457 | void ConfigPage::resourceAdded( Resource* resource ) | 457 | void ConfigPage::resourceAdded( Resource* resource ) |
458 | { | 458 | { |
459 | qDebug("ConfigPage::resourceAdded : %s", resource->resourceName().latin1()); | 459 | qDebug("ConfigPage::resourceAdded : %s", resource->resourceName().latin1()); |
460 | kdDebug(5650) << "ConfigPage::resourceAdded( " << resource->resourceName() << " )" << endl; | ||
461 | ConfigViewItem *item = new ConfigViewItem( mListView, resource ); | 460 | ConfigViewItem *item = new ConfigViewItem( mListView, resource ); |
462 | 461 | ||
463 | // FIXME: this sucks. This should be in the config file, | 462 | // FIXME: this sucks. This should be in the config file, |
464 | // or application-dependent, in which case it's always Off | 463 | // or application-dependent, in which case it's always Off |
465 | item->setOn( false ); | 464 | item->setOn( false ); |
466 | 465 | ||
467 | mLastItem = item; | 466 | mLastItem = item; |
468 | 467 | ||
469 | emit changed( true ); | 468 | emit changed( true ); |
470 | } | 469 | } |
471 | 470 | ||
472 | void ConfigPage::resourceModified( Resource* resource ) | 471 | void ConfigPage::resourceModified( Resource* resource ) |
473 | { | 472 | { |
474 | qDebug("ConfigPage::resourceModified : %s", resource->resourceName().latin1()); | 473 | qDebug("ConfigPage::resourceModified : %s", resource->resourceName().latin1()); |
475 | kdDebug(5650) << "ConfigPage::resourceModified( " << resource->resourceName() << " )" << endl; | ||
476 | } | 474 | } |
477 | 475 | ||
478 | void ConfigPage::resourceDeleted( Resource* resource ) | 476 | void ConfigPage::resourceDeleted( Resource* resource ) |
479 | { | 477 | { |
480 | qDebug("ConfigPage::resourceDeleted : %s", resource->resourceName().latin1()); | 478 | qDebug("ConfigPage::resourceDeleted : %s", resource->resourceName().latin1()); |
481 | kdDebug(5650) << "ConfigPage::resourceDeleted( " << resource->resourceName() << " )" << endl; | ||
482 | } | 479 | } |
483 | 480 | ||
484 | void ConfigPage::slotItemClicked( QListViewItem *item ) | 481 | void ConfigPage::slotItemClicked( QListViewItem *item ) |
485 | { | 482 | { |
486 | ConfigViewItem *configItem = static_cast<ConfigViewItem *>( item ); | 483 | ConfigViewItem *configItem = static_cast<ConfigViewItem *>( item ); |
487 | if ( !configItem ) return; | 484 | if ( !configItem ) return; |
488 | 485 | ||
489 | if ( configItem->standard() && !configItem->isOn() ) { | 486 | if ( configItem->standard() && !configItem->isOn() ) { |
490 | KMessageBox::sorry( this, i18n( "You cannot deactivate the<br>standard resource. Choose<br>another standard resource first." ) ); | 487 | KMessageBox::sorry( this, i18n( "You cannot deactivate the<br>standard resource. Choose<br>another standard resource first." ) ); |
491 | configItem->setOn( true ); | 488 | configItem->setOn( true ); |
492 | return; | 489 | return; |
493 | } | 490 | } |
494 | 491 | ||
495 | if ( configItem->isOn() != configItem->resource()->isActive() ) { | 492 | if ( configItem->isOn() != configItem->resource()->isActive() ) { |
496 | emit changed( true ); | 493 | emit changed( true ); |
497 | } | 494 | } |
498 | } | 495 | } |
499 | 496 | ||
500 | void ConfigPage::saveResourceSettings() | 497 | void ConfigPage::saveResourceSettings() |
501 | { | 498 | { |
502 | qDebug("ConfigPage::saveResourceSettings() begin"); | 499 | //qDebug("ConfigPage::saveResourceSettings() begin"); |
503 | 500 | ||
504 | if ( mCurrentManager ) { | 501 | if ( mCurrentManager ) { |
505 | 502 | ||
506 | QListViewItem *item = mListView->firstChild(); | 503 | QListViewItem *item = mListView->firstChild(); |
507 | while ( item ) { | 504 | while ( item ) { |
508 | ConfigViewItem *configItem = static_cast<ConfigViewItem*>( item ); | 505 | ConfigViewItem *configItem = static_cast<ConfigViewItem*>( item ); |
509 | 506 | ||
510 | // check if standard resource | 507 | // check if standard resource |
511 | if ( configItem->standard() && !configItem->readOnly() && | 508 | if ( configItem->standard() && !configItem->readOnly() && |
512 | configItem->isOn() ) { | 509 | configItem->isOn() ) { |
513 | 510 | ||
514 | mCurrentManager->setStandardResource( configItem->resource() ); | 511 | mCurrentManager->setStandardResource( configItem->resource() ); |
515 | } | 512 | } |
516 | 513 | ||
517 | // check if active or passive resource | 514 | // check if active or passive resource |
518 | configItem->resource()->setActive( configItem->isOn() ); | 515 | configItem->resource()->setActive( configItem->isOn() ); |
519 | 516 | ||
520 | item = item->nextSibling(); | 517 | item = item->nextSibling(); |
521 | } | 518 | } |
522 | mCurrentManager->writeConfig( mCurrentConfig ); | 519 | mCurrentManager->writeConfig( mCurrentConfig ); |
523 | 520 | ||
524 | if ( !mCurrentManager->standardResource() ) | 521 | if ( !mCurrentManager->standardResource() ) |
525 | KMessageBox::sorry( this, i18n( "There is no valid standard resource!<br>Please select one which is neither read-only nor inactive." ) ); | 522 | KMessageBox::sorry( this, i18n( "There is no valid standard resource!<br>Please select one which is neither read-only nor inactive." ) ); |
526 | } | 523 | } |
527 | 524 | ||
528 | qDebug("ConfigPage::saveResourceSettings() end"); | 525 | //qDebug("ConfigPage::saveResourceSettings() end"); |
529 | 526 | ||
530 | } | 527 | } |
531 | 528 | ||
532 | //US #include "configpage.moc" | 529 | //US #include "configpage.moc" |
533 | 530 | ||
diff --git a/microkde/kresources/configwidget.h b/microkde/kresources/configwidget.h index b97e278..aecdda9 100644 --- a/microkde/kresources/configwidget.h +++ b/microkde/kresources/configwidget.h | |||
@@ -1,61 +1,61 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of libkresources. | 2 | This file is part of libkresources. |
3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> | 3 | Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> |
4 | Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> | 4 | Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> |
5 | 5 | ||
6 | This library is free software; you can redistribute it and/or | 6 | This library is free software; you can redistribute it and/or |
7 | modify it under the terms of the GNU Library General Public | 7 | modify it under the terms of the GNU Library General Public |
8 | License as published by the Free Software Foundation; either | 8 | License as published by the Free Software Foundation; either |
9 | version 2 of the License, or (at your option) any later version. | 9 | version 2 of the License, or (at your option) any later version. |
10 | 10 | ||
11 | This library is distributed in the hope that it will be useful, | 11 | This library is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | Library General Public License for more details. | 14 | Library General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU Library General Public License | 16 | You should have received a copy of the GNU Library General Public License |
17 | along with this library; see the file COPYING.LIB. If not, write to | 17 | along with this library; see the file COPYING.LIB. If not, write to |
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
19 | Boston, MA 02111-1307, USA. | 19 | Boston, MA 02111-1307, USA. |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #ifndef KRESOURCES_CONFIGWIDGET_H | 22 | #ifndef KRESOURCES_CONFIGWIDGET_H |
23 | #define KRESOURCES_CONFIGWIDGET_H | 23 | #define KRESOURCES_CONFIGWIDGET_H |
24 | 24 | ||
25 | #include <qwidget.h> | 25 | #include <qwidget.h> |
26 | 26 | ||
27 | #include <kconfig.h> | 27 | #include <kconfig.h> |
28 | 28 | ||
29 | #include "resource.h" | 29 | #include "resource.h" |
30 | 30 | ||
31 | namespace KRES { | 31 | namespace KRES { |
32 | 32 | ||
33 | class ConfigWidget : public QWidget | 33 | class ConfigWidget : public QWidget |
34 | { | 34 | { |
35 | Q_OBJECT | 35 | Q_OBJECT |
36 | 36 | ||
37 | public: | 37 | public: |
38 | ConfigWidget( QWidget *parent = 0, const char *name = 0 ); | 38 | ConfigWidget( QWidget *parent = 0, const char *name = 0 ); |
39 | 39 | ||
40 | /** | 40 | /** |
41 | Sets the widget to 'edit' mode. Reimplement this method if you are | 41 | Sets the widget to 'edit' mode. Reimplement this method if you are |
42 | interested in the mode change (to disable some GUI element for | 42 | interested in the mode change (to disable some GUI element for |
43 | example). By default the widget is in 'create new' mode. | 43 | example). By default the widget is in 'create new' mode. |
44 | */ | 44 | */ |
45 | virtual void setInEditMode( bool value ); | 45 | virtual void setInEditMode( bool value ); |
46 | 46 | ||
47 | public slots: | 47 | public slots: |
48 | virtual void loadSettings( Resource *resource ); | 48 | virtual void loadSettings( Resource *resource ); |
49 | virtual void saveSettings( Resource *resource ); | 49 | virtual void saveSettings( Resource *resource ); |
50 | 50 | ||
51 | signals: | 51 | signals: |
52 | void setReadOnly( bool value ); | 52 | void setReadOnly( bool value ); |
53 | void setPersistentReadOnly( bool value ); | 53 | void setPersistentReadOnly( bool value ); |
54 | 54 | void setIncludeInSync(bool); | |
55 | 55 | ||
56 | protected: | 56 | protected: |
57 | Resource* mResource; | 57 | Resource* mResource; |
58 | }; | 58 | }; |
59 | 59 | ||
60 | } | 60 | } |
61 | #endif | 61 | #endif |