KDocTools
genshortcutents.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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
00063
00064
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( "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( "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