templateinterface.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "templateinterface.h"
00020 #include "document.h"
00021 #include <stdaddressbook.h>
00022 #include <addressee.h>
00023 #include <qstring.h>
00024 #include <klocale.h>
00025 #include <kglobal.h>
00026 #include <qdatetime.h>
00027 #include <qregexp.h>
00028 #include <kmessagebox.h>
00029 #include <kcalendarsystem.h>
00030 #include <unistd.h>
00031
00032 #include <kdebug.h>
00033
00034 using namespace KTextEditor;
00035
00036 unsigned int TemplateInterface::globalTemplateInterfaceNumber = 0;
00037
00038 TemplateInterface::TemplateInterface()
00039 {
00040 myTemplateInterfaceNumber = globalTemplateInterfaceNumber++;
00041 }
00042
00043 TemplateInterface::~TemplateInterface()
00044 {}
00045
00046 uint TemplateInterface::templateInterfaceNumber () const
00047 {
00048 return myTemplateInterfaceNumber;
00049 }
00050
00051 void TemplateInterface::setTemplateInterfaceDCOPSuffix ( const QCString &suffix )
00052 {}
00053
00054 #define INITKABC do { \
00055 if (addrBook==0) { \
00056 addrBook=KABC::StdAddressBook::self(); \
00057 userAddress=addrBook->whoAmI(); \
00058 if (userAddress.isEmpty()) { \
00059 \
00060 KMessageBox::sorry(parentWindow,i18n("The template needs information about you, please set your identity in your addressbook"));\
00061 return false; \
00062 } \
00063 } \
00064 } while(false)
00065
00066 bool TemplateInterface::expandMacros( QMap<QString, QString> &map, QWidget *parentWindow )
00067 {
00068 KABC::StdAddressBook *addrBook = 0;
00069 KABC::Addressee userAddress;
00070 QDateTime datetime = QDateTime::currentDateTime();
00071 QDate date = datetime.date();
00072 QTime time = datetime.time();
00073
00074 QMap<QString,QString>::Iterator it;
00075 for ( it = map.begin(); it != map.end(); ++it )
00076 {
00077 QString placeholder = it.key();
00078 if ( map[ placeholder ].isEmpty() )
00079 {
00080 if ( placeholder == "index" ) map[ placeholder ] = "i";
00081 else if ( placeholder == "loginname" )
00082 {}
00083 else if ( placeholder == "firstname" )
00084 {
00085 INITKABC;
00086 map[ placeholder ] = userAddress.givenName();
00087 }
00088 else if ( placeholder == "lastname" )
00089 {
00090 INITKABC;
00091 map[ placeholder ] = userAddress.familyName();
00092 }
00093 else if ( placeholder == "fullname" )
00094 {
00095 INITKABC;
00096 map[ placeholder ] = userAddress.assembledName();
00097 }
00098 else if ( placeholder == "email" )
00099 {
00100 INITKABC;
00101 map[ placeholder ] = userAddress.preferredEmail();
00102 }
00103 else if ( placeholder == "date" )
00104 {
00105 map[ placeholder ] = KGlobal::locale() ->formatDate( date, true );
00106 }
00107 else if ( placeholder == "time" )
00108 {
00109 map[ placeholder ] = KGlobal::locale() ->formatTime( time, true, false );
00110 }
00111 else if ( placeholder == "year" )
00112 {
00113 map[ placeholder ] = KGlobal::locale() ->calendar() ->yearString( date, false );
00114 }
00115 else if ( placeholder == "month" )
00116 {
00117 map[ placeholder ] = QString::number( KGlobal::locale() ->calendar() ->month( date ) );
00118 }
00119 else if ( placeholder == "day" )
00120 {
00121 map[ placeholder ] = QString::number( KGlobal::locale() ->calendar() ->day( date ) );
00122 }
00123 else if ( placeholder == "hostname" )
00124 {
00125 char hostname[ 256 ];
00126 hostname[ 0 ] = 0;
00127 gethostname( hostname, 255 );
00128 hostname[ 255 ] = 0;
00129 map[ placeholder ] = QString::fromLocal8Bit( hostname );
00130 }
00131 else if ( placeholder == "cursor" )
00132 {
00133 map[ placeholder ] = "|";
00134 }
00135 else map[ placeholder ] = placeholder;
00136 }
00137 }
00138 return true;
00139 }
00140
00141 bool TemplateInterface::insertTemplateText ( uint line, uint column, const QString &templateString, const QMap<QString, QString> &initialValues, QWidget *parentWindow )
00142 {
00143 QMap<QString, QString> enhancedInitValues( initialValues );
00144
00145 QRegExp rx( "[$%]\\{([^}\\s]+)\\}" );
00146 rx.setMinimal( true );
00147 int pos = 0;
00148 int opos = 0;
00149
00150 while ( pos >= 0 )
00151 {
00152 pos = rx.search( templateString, pos );
00153
00154 if ( pos > -1 )
00155 {
00156 if ( ( pos - opos ) > 0 )
00157 {
00158 if ( templateString[ pos - 1 ] == '\\' )
00159 {
00160 pos = opos = pos + 1;
00161 continue;
00162 }
00163 }
00164 QString placeholder = rx.cap( 1 );
00165 if ( ! enhancedInitValues.contains( placeholder ) )
00166 enhancedInitValues[ placeholder ] = "";
00167
00168 pos += rx.matchedLength();
00169 opos = pos;
00170 }
00171 }
00172
00173 return expandMacros( enhancedInitValues, parentWindow )
00174 && insertTemplateTextImplementation( line, column, templateString, enhancedInitValues, parentWindow );
00175 }
00176
00177
00178
00179 TemplateInterface *KTextEditor::templateInterface ( KTextEditor::Document *doc )
00180 {
00181 if ( !doc )
00182 return 0;
00183
00184 return static_cast<TemplateInterface*>( doc->qt_cast( "KTextEditor::TemplateInterface" ) );
00185 }
00186
|