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::New:
00073 markup += "New";
00074 break;
00075 case KStandardShortcut::Close:
00076 markup += "Close";
00077 break;
00078 case KStandardShortcut::Save:
00079 markup += "Save";
00080 break;
00081 case KStandardShortcut::Print:
00082 markup += "Print";
00083 break;
00084 case KStandardShortcut::Quit:
00085 markup += "Quit";
00086 break;
00087 case KStandardShortcut::Undo:
00088 markup += "Undo";
00089 break;
00090 case KStandardShortcut::Redo:
00091 markup += "Redo";
00092 break;
00093 case KStandardShortcut::Cut:
00094 markup += "Cut";
00095 break;
00096 case KStandardShortcut::Copy:
00097 markup += "Copy";
00098 break;
00099 case KStandardShortcut::Paste:
00100 markup += "Paste";
00101 break;
00102 case KStandardShortcut::SelectAll:
00103 markup += "SelectAll";
00104 break;
00105 case KStandardShortcut::Deselect:
00106 markup += "Deselect";
00107 break;
00108 case KStandardShortcut::DeleteWordBack:
00109 markup += "DeleteWordBack";
00110 break;
00111 case KStandardShortcut::DeleteWordForward:
00112 markup += "DeleteWordForward";
00113 break;
00114 case KStandardShortcut::Find:
00115 markup += "Find";
00116 break;
00117 case KStandardShortcut::FindNext:
00118 markup += "FindNext";
00119 break;
00120 case KStandardShortcut::FindPrev:
00121 markup += "FindPrev";
00122 break;
00123 case KStandardShortcut::Replace:
00124 markup += "Replace";
00125 break;
00126 case KStandardShortcut::Home:
00127 markup += "Home";
00128 break;
00129 case KStandardShortcut::Begin:
00130 markup += "Begin";
00131 break;
00132 case KStandardShortcut::End:
00133 markup += "End";
00134 break;
00135 case KStandardShortcut::Prior:
00136 markup += "Prior";
00137 break;
00138 case KStandardShortcut::Next:
00139 markup += "Next";
00140 break;
00141 case KStandardShortcut::GotoLine:
00142 markup += "GotoLine";
00143 break;
00144 case KStandardShortcut::AddBookmark:
00145 markup += "AddBookmark";
00146 break;
00147 case KStandardShortcut::ZoomIn:
00148 markup += "ZoomIn";
00149 break;
00150 case KStandardShortcut::ZoomOut:
00151 markup += "ZoomOut";
00152 break;
00153 case KStandardShortcut::Up:
00154 markup += "Up";
00155 break;
00156 case KStandardShortcut::Back:
00157 markup += "Back";
00158 break;
00159 case KStandardShortcut::Forward:
00160 markup += "Forward";
00161 break;
00162 case KStandardShortcut::Reload:
00163 markup += "Reload";
00164 break;
00165 case KStandardShortcut::ShowMenubar:
00166 markup += "ShowMenubar";
00167 break;
00168 case KStandardShortcut::Help:
00169 markup += "Help";
00170 break;
00171 case KStandardShortcut::WhatsThis:
00172 markup += "WhatsThis";
00173 break;
00174 case KStandardShortcut::TextCompletion:
00175 markup += "TextCompletion";
00176 break;
00177 case KStandardShortcut::PrevCompletion:
00178 markup += "PrevCompletion";
00179 break;
00180 case KStandardShortcut::NextCompletion:
00181 markup += "NextCompletion";
00182 break;
00183 case KStandardShortcut::SubstringCompletion:
00184 markup += "SubstringCompletion";
00185 break;
00186 case KStandardShortcut::RotateUp:
00187 markup += "RotateUp";
00188 break;
00189 case KStandardShortcut::RotateDown:
00190 markup += "RotateDown";
00191 break;
00192 case KStandardShortcut::TabNext:
00193 markup += "TabNext";
00194 break;
00195 case KStandardShortcut::TabPrev:
00196 markup += "TabPrev";
00197 break;
00198 case KStandardShortcut::FullScreen:
00199 markup += "FullScreen";
00200 break;
00201 case KStandardShortcut::BackwardWord:
00202 markup += "BackwardWord";
00203 break;
00204 case KStandardShortcut::ForwardWord:
00205 markup += "ForwardWord";
00206 break;
00207 case KStandardShortcut::BeginningOfLine:
00208 markup += "BeginningOfLine";
00209 break;
00210 case KStandardShortcut::EndOfLine:
00211 markup += "EndOfLine";
00212 break;
00213 case KStandardShortcut::PasteSelection:
00214 markup += "PastSelection";
00215 break;
00216 case KStandardShortcut::StandardShortcutCount:
00217 break;
00218 }
00219
00220 markup += "\t\"";
00221
00222 QString internalStr = KStandardShortcut::shortcut( accel ).toString();
00223 QString firstSequence = internalStr.left( internalStr.indexOf( ';' ) );
00224 const QStringList keys = firstSequence.split( '+',QString::SkipEmptyParts );
00225 if ( keys.empty() ) {
00226 return QString();
00227 }
00228
00229 if ( keys.count() == 1 ) {
00230 if ( keys.first().startsWith( "XF86" ) ) {
00231 return QString();
00232 }
00233 markup += keyAsMarkup( keys.first() );
00234 } else {
00235 markup += "<keycombo action=\"Simul\">";
00236 foreach( const QString &key, keys ) {
00237 if ( key.startsWith( "XF86" ) ) {
00238 continue;
00239 }
00240 markup += keyAsMarkup( key );
00241 }
00242 markup += "</keycombo>";
00243 }
00244 markup += "\">";
00245 return markup;
00246 }
00247
00248 int main( int argc, char **argv )
00249 {
00250 KCmdLineOptions cmdLineOptions;
00251 cmdLineOptions.add("o");
00252 cmdLineOptions.add("output <file>", ki18n("Output file"), "kde-standard-accels.entities");
00253
00254 KAboutData aboutData( "genshortcutents", 0, ki18n("genshortcutents"), "1.0",
00255 ki18n( "Generates DocBook entities for key shortcuts of standard actions" ));
00256
00257 KCmdLineArgs::init( argc, argv, &aboutData );
00258 KCmdLineArgs::addCmdLineOptions( cmdLineOptions );
00259
00260 KComponentData componentData( &aboutData );
00261 QCoreApplication app( KCmdLineArgs::qtArgc(), KCmdLineArgs::qtArgv() );
00262
00263 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
00264
00265 const QString outputFileName = args->getOption( "output" );
00266 QFile outputFile( outputFileName );
00267 if ( !outputFile.open( QIODevice::WriteOnly ) ) {
00268 qDebug( "Failed to open %s for writing.", qPrintable( outputFileName ) );
00269 return 1;
00270 }
00271
00272 QTextStream stream( &outputFile );
00273 stream << "<!-- Generated by "
00274 << aboutData.programName() + ' '
00275 << aboutData.version() + " on "
00276 << QDateTime::currentDateTime().toString() + ".\n";
00277 stream << " Do not bother to fiddle with this, your modifications will be\n"
00278 << " overwritten as soon as the file is regenerated. -->\n";
00279 stream << "\n";
00280
00281 for ( unsigned int i = 0; i < KStandardShortcut::StandardShortcutCount; ++i ) {
00282 stream << entityForAccel( static_cast<KStandardShortcut::StandardShortcut>(i) ) << "\n";
00283 }
00284 }
00285