KDocTools
genshortcutents.cpp
Go to the documentation of this file.
00001 /* 00002 * genshortcutents.cpp - Copyright 2005 Frerich Raabe <raabe@kde.org> 00003 * 00004 * Redistribution and use in source and binary forms, with or without 00005 * modification, are permitted provided that the following conditions 00006 * are met: 00007 * 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 00014 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00015 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00016 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00017 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00018 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00019 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00020 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00021 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00022 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00023 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00024 */ 00025 #include "kaboutdata.h" 00026 #include "kcomponentdata.h" 00027 #include "kcmdlineargs.h" 00028 #include "klocale.h" 00029 #include "kstandardshortcut.h" 00030 00031 #include <QtCore/QDate> 00032 #include <QtCore/QFile> 00033 #include <QtCore/QCoreApplication> 00034 #include <QtCore/QTextStream> 00035 #include <QtCore/QStringList> 00036 00037 static QString keyAsMarkup( const QString &key ) 00038 { 00039 if ( key == "Alt" || key == "Ctrl" || key == "Enter" || key == "Esc" || 00040 key == "Shift" || key == "Tab" ) { 00041 return QString('&' + key + ';'); 00042 } 00043 if ( key == "Left" || key == "Right" || key == "Up" || key == "Down" ) { 00044 return QString("<keysym>" + key + " Arrow</keysym>"); 00045 } 00046 if ( key == "Backspace" || key == "Menu" ) { 00047 return QString("<keysym>" + key + "</keysym>"); 00048 } 00049 if ( key == "Plus" ) { 00050 return QString("<keycap>+</keycap>"); 00051 } 00052 if ( key == "Minus" ) { 00053 return QString("<keycap>-</keycap>"); 00054 } 00055 return QString("<keycap>" + key + "</keycap>"); 00056 } 00057 00058 static QString entityForAccel( KStandardShortcut::StandardShortcut accel ) 00059 { 00060 QString markup = "<!ENTITY KeyCombo_"; 00061 00062 /* We use a switch so that the compiler gives us warning messages in 00063 * case KStandardShortcut::StandardShortcut gets extended (which means we have to 00064 * extend this code, too). 00065 */ 00066 switch ( accel ) { 00067 case KStandardShortcut::AccelNone: 00068 break; 00069 case KStandardShortcut::Open: 00070 markup += "Open"; 00071 break; 00072 case KStandardShortcut::OpenRecent: 00073 markup += "OpenRecent"; 00074 break; 00075 case KStandardShortcut::New: 00076 markup += "New"; 00077 break; 00078 case KStandardShortcut::Close: 00079 markup += "Close"; 00080 break; 00081 case KStandardShortcut::Save: 00082 markup += "Save"; 00083 break; 00084 case KStandardShortcut::SaveAs: 00085 markup += "SaveAs"; 00086 break; 00087 case KStandardShortcut::Print: 00088 markup += "Print"; 00089 break; 00090 case KStandardShortcut::Quit: 00091 markup += "Quit"; 00092 break; 00093 case KStandardShortcut::Undo: 00094 markup += "Undo"; 00095 break; 00096 case KStandardShortcut::Redo: 00097 markup += "Redo"; 00098 break; 00099 case KStandardShortcut::Cut: 00100 markup += "Cut"; 00101 break; 00102 case KStandardShortcut::Copy: 00103 markup += "Copy"; 00104 break; 00105 case KStandardShortcut::Paste: 00106 markup += "Paste"; 00107 break; 00108 case KStandardShortcut::SelectAll: 00109 markup += "SelectAll"; 00110 break; 00111 case KStandardShortcut::Deselect: 00112 markup += "Deselect"; 00113 break; 00114 case KStandardShortcut::DeleteWordBack: 00115 markup += "DeleteWordBack"; 00116 break; 00117 case KStandardShortcut::DeleteWordForward: 00118 markup += "DeleteWordForward"; 00119 break; 00120 case KStandardShortcut::Find: 00121 markup += "Find"; 00122 break; 00123 case KStandardShortcut::FindNext: 00124 markup += "FindNext"; 00125 break; 00126 case KStandardShortcut::FindPrev: 00127 markup += "FindPrev"; 00128 break; 00129 case KStandardShortcut::Replace: 00130 markup += "Replace"; 00131 break; 00132 case KStandardShortcut::Home: 00133 markup += "Home"; 00134 break; 00135 case KStandardShortcut::Begin: 00136 markup += "Begin"; 00137 break; 00138 case KStandardShortcut::End: 00139 markup += "End"; 00140 break; 00141 case KStandardShortcut::Prior: 00142 markup += "Prior"; 00143 break; 00144 case KStandardShortcut::Next: 00145 markup += "Next"; 00146 break; 00147 case KStandardShortcut::GotoLine: 00148 markup += "GotoLine"; 00149 break; 00150 case KStandardShortcut::AddBookmark: 00151 markup += "AddBookmark"; 00152 break; 00153 case KStandardShortcut::ZoomIn: 00154 markup += "ZoomIn"; 00155 break; 00156 case KStandardShortcut::ZoomOut: 00157 markup += "ZoomOut"; 00158 break; 00159 case KStandardShortcut::Up: 00160 markup += "Up"; 00161 break; 00162 case KStandardShortcut::Back: 00163 markup += "Back"; 00164 break; 00165 case KStandardShortcut::Forward: 00166 markup += "Forward"; 00167 break; 00168 case KStandardShortcut::Reload: 00169 markup += "Reload"; 00170 break; 00171 case KStandardShortcut::ShowMenubar: 00172 markup += "ShowMenubar"; 00173 break; 00174 case KStandardShortcut::Help: 00175 markup += "Help"; 00176 break; 00177 case KStandardShortcut::WhatsThis: 00178 markup += "WhatsThis"; 00179 break; 00180 case KStandardShortcut::TextCompletion: 00181 markup += "TextCompletion"; 00182 break; 00183 case KStandardShortcut::PrevCompletion: 00184 markup += "PrevCompletion"; 00185 break; 00186 case KStandardShortcut::NextCompletion: 00187 markup += "NextCompletion"; 00188 break; 00189 case KStandardShortcut::SubstringCompletion: 00190 markup += "SubstringCompletion"; 00191 break; 00192 case KStandardShortcut::RotateUp: 00193 markup += "RotateUp"; 00194 break; 00195 case KStandardShortcut::RotateDown: 00196 markup += "RotateDown"; 00197 break; 00198 case KStandardShortcut::TabNext: 00199 markup += "TabNext"; 00200 break; 00201 case KStandardShortcut::TabPrev: 00202 markup += "TabPrev"; 00203 break; 00204 case KStandardShortcut::FullScreen: 00205 markup += "FullScreen"; 00206 break; 00207 case KStandardShortcut::BackwardWord: 00208 markup += "BackwardWord"; 00209 break; 00210 case KStandardShortcut::ForwardWord: 00211 markup += "ForwardWord"; 00212 break; 00213 case KStandardShortcut::BeginningOfLine: 00214 markup += "BeginningOfLine"; 00215 break; 00216 case KStandardShortcut::EndOfLine: 00217 markup += "EndOfLine"; 00218 break; 00219 case KStandardShortcut::PasteSelection: 00220 markup += "PastSelection"; 00221 break; 00222 case KStandardShortcut::Revert: 00223 markup += "Revert"; 00224 break; 00225 case KStandardShortcut::PrintPreview: 00226 markup += "PrintPreview"; 00227 break; 00228 case KStandardShortcut::Mail: 00229 markup += "Mail"; 00230 break; 00231 case KStandardShortcut::Clear: 00232 markup += "Clear"; 00233 break; 00234 case KStandardShortcut::ActualSize: 00235 markup += "ActualSize"; 00236 break; 00237 case KStandardShortcut::FitToPage: 00238 markup += "FitToPage"; 00239 break; 00240 case KStandardShortcut::FitToWidth: 00241 markup += "FitToWidth"; 00242 break; 00243 case KStandardShortcut::FitToHeight: 00244 markup += "FitToHeight"; 00245 break; 00246 case KStandardShortcut::Zoom: 00247 markup += "Zoom"; 00248 break; 00249 case KStandardShortcut::Goto: 00250 markup += "Goto"; 00251 break; 00252 case KStandardShortcut::GotoPage: 00253 markup += "GotoPage"; 00254 break; 00255 case KStandardShortcut::DocumentBack: 00256 markup += "DocumentBack"; 00257 break; 00258 case KStandardShortcut::DocumentForward: 00259 markup += "DocumentForward"; 00260 break; 00261 case KStandardShortcut::EditBookmarks: 00262 markup += "EditBookmarks"; 00263 break; 00264 case KStandardShortcut::Spelling: 00265 markup += "Spelling"; 00266 break; 00267 case KStandardShortcut::ShowToolbar: 00268 markup += "ShowToolbar"; 00269 break; 00270 case KStandardShortcut::ShowStatusbar: 00271 markup += "ShowStatusbar"; 00272 break; 00273 case KStandardShortcut::SaveOptions: 00274 markup += "SaveOptions"; 00275 break; 00276 case KStandardShortcut::KeyBindings: 00277 markup += "KeyBindings"; 00278 break; 00279 case KStandardShortcut::Preferences: 00280 markup += "Preferences"; 00281 break; 00282 case KStandardShortcut::ConfigureToolbars: 00283 markup += "ConfigureToolbars"; 00284 break; 00285 case KStandardShortcut::ConfigureNotifications: 00286 markup += "ConfigureNotifications"; 00287 break; 00288 case KStandardShortcut::TipofDay: 00289 markup += "TipofDay"; 00290 break; 00291 case KStandardShortcut::ReportBug: 00292 markup += "ReportBug"; 00293 break; 00294 case KStandardShortcut::SwitchApplicationLanguage: 00295 markup += "SwitchApplicationLanguage"; 00296 break; 00297 case KStandardShortcut::AboutApp: 00298 markup += "AboutApp"; 00299 break; 00300 case KStandardShortcut::AboutKDE: 00301 markup += "AboutKDE"; 00302 break; 00303 case KStandardShortcut::StandardShortcutCount: 00304 break; 00305 } 00306 00307 markup += "\t\""; 00308 00309 QString internalStr = KStandardShortcut::shortcut( accel ).toString(); 00310 QString firstSequence = internalStr.left( internalStr.indexOf( ';' ) ); 00311 const QStringList keys = firstSequence.split( '+',QString::SkipEmptyParts ); 00312 if ( keys.empty() ) { 00313 return QString(); 00314 } 00315 00316 if ( keys.count() == 1 ) { 00317 if ( keys.first().startsWith( QLatin1String("XF86") ) ) { 00318 return QString(); 00319 } 00320 markup += keyAsMarkup( keys.first() ); 00321 } else { 00322 markup += "<keycombo action=\"Simul\">"; 00323 foreach( const QString &key, keys ) { 00324 if ( key.startsWith( QLatin1String("XF86") ) ) { 00325 continue; 00326 } 00327 markup += keyAsMarkup( key ); 00328 } 00329 markup += "</keycombo>"; 00330 } 00331 markup += "\">"; 00332 return markup; 00333 } 00334 00335 int main( int argc, char **argv ) 00336 { 00337 KCmdLineOptions cmdLineOptions; 00338 cmdLineOptions.add("o"); 00339 cmdLineOptions.add("output <file>", ki18n("Output file"), "kde-standard-accels.entities"); 00340 00341 KAboutData aboutData( "genshortcutents", 0, ki18n("genshortcutents"), "1.0", 00342 ki18n( "Generates DocBook entities for key shortcuts of standard actions" )); 00343 00344 KCmdLineArgs::init( argc, argv, &aboutData ); 00345 KCmdLineArgs::addCmdLineOptions( cmdLineOptions ); 00346 00347 KComponentData componentData( &aboutData ); 00348 QCoreApplication app( KCmdLineArgs::qtArgc(), KCmdLineArgs::qtArgv() ); 00349 00350 KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); 00351 00352 const QString outputFileName = args->getOption( "output" ); 00353 QFile outputFile( outputFileName ); 00354 if ( !outputFile.open( QIODevice::WriteOnly ) ) { 00355 qDebug( "Failed to open %s for writing.", qPrintable( outputFileName ) ); 00356 return 1; 00357 } 00358 00359 QTextStream stream( &outputFile ); 00360 stream << "<!-- Generated by " 00361 << aboutData.programName() + ' ' 00362 << aboutData.version() + " on " 00363 << QDateTime::currentDateTime().toString() + ".\n"; 00364 stream << " Do not bother to fiddle with this, your modifications will be\n" 00365 << " overwritten as soon as the file is regenerated. -->\n"; 00366 stream << "\n"; 00367 00368 for ( unsigned int i = 0; i < KStandardShortcut::StandardShortcutCount; ++i ) { 00369 stream << entityForAccel( static_cast<KStandardShortcut::StandardShortcut>(i) ) << "\n"; 00370 } 00371 } 00372
KDE 4.6 API Reference