diff options
Diffstat (limited to 'tqt3integration/utils')
-rw-r--r-- | tqt3integration/utils/CMakeLists.txt | 44 | ||||
-rw-r--r-- | tqt3integration/utils/Makefile.am | 19 | ||||
-rw-r--r-- | tqt3integration/utils/gen.cpp | 970 | ||||
-rw-r--r-- | tqt3integration/utils/gen.txt | 546 | ||||
-rw-r--r-- | tqt3integration/utils/qt/CMakeLists.txt | 12 | ||||
-rw-r--r-- | tqt3integration/utils/qt/Makefile.am | 1 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/CMakeLists.txt | 12 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/qt.patch | 270 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake | 1 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp | 73 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp | 81 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h | 35 | ||||
-rw-r--r-- | tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h | 28 |
13 files changed, 2092 insertions, 0 deletions
diff --git a/tqt3integration/utils/CMakeLists.txt b/tqt3integration/utils/CMakeLists.txt new file mode 100644 index 000000000..8386a95f7 --- /dev/null +++ b/tqt3integration/utils/CMakeLists.txt @@ -0,0 +1,44 @@ +################################################# +# +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_subdirectory( qt ) + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + +##### gen (internal executable) ######################## + +tde_add_executable( gen AUTOMOC + SOURCES + gen.cpp + LINK kdecore-shared +) + +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qtkde_functions.cpp ${CMAKE_CURRENT_BINARY_DIR}/module_functions.cpp ${CMAKE_CURRENT_BINARY_DIR}/module_functions.h + COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/qt + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gen ${CMAKE_CURRENT_SOURCE_DIR}/gen.txt + COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/qt/in/qtkdeintegration_x11_0.cpp ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_1.cpp ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11.cpp.gen ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_2.cpp > ${CMAKE_CURRENT_BINARY_DIR}/qt/qtkdeintegration_x11.cpp + COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_p_1.h ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11_p.h.gen ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qtkdeintegration_x11_p_2.h > ${CMAKE_CURRENT_BINARY_DIR}/qt/qtkdeintegration_x11_p.h + COMMAND rm -f ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11.cpp.gen ${CMAKE_CURRENT_BINARY_DIR}/qtkdeintegration_x11_p.h.gen +# COMMAND cp -f ${CMAKE_CURRENT_SOURCE_DIR}/qt/in/qt.patch ${CMAKE_CURRENT_BINARY_DIR}/qt/ + DEPENDS gen +) +ADD_CUSTOM_TARGET(generate_tqt3_bindings DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qtkde_functions.cpp)
\ No newline at end of file diff --git a/tqt3integration/utils/Makefile.am b/tqt3integration/utils/Makefile.am new file mode 100644 index 000000000..f4f22e3b8 --- /dev/null +++ b/tqt3integration/utils/Makefile.am @@ -0,0 +1,19 @@ +noinst_PROGRAMS = gen +gen_SOURCES = gen.cpp +gen_LDADD = $(LIB_KDECORE) +gen_LDFLAGS = $(all_libraries) +INCLUDES = $(all_includes) +CLEANFILES = qtkde_functions.cpp module_functions.cpp module_functions.h generated +SUBDIRS = qt + +generate: generated + +generated: gen gen.txt + ./gen || exit 1 + cat qt/in/qtkdeintegration_x11_0.cpp qt/in/qtkdeintegration_x11_1.cpp qtkdeintegration_x11.cpp.gen qt/in/qtkdeintegration_x11_2.cpp >qt/qtkdeintegration_x11.cpp + cat qt/in/qtkdeintegration_x11_p_1.h qtkdeintegration_x11_p.h.gen qt/in/qtkdeintegration_x11_p_2.h >qt/qtkdeintegration_x11_p.h + rm -f qtkdeintegration_x11.cpp.gen qtkdeintegration_x11_p.h.gen + cp -f qt/in/qt.patch qt/ + touch generated + +qtkde_functions.cpp module_functions.cpp module_functions.h : generated diff --git a/tqt3integration/utils/gen.cpp b/tqt3integration/utils/gen.cpp new file mode 100644 index 000000000..178d67a3b --- /dev/null +++ b/tqt3integration/utils/gen.cpp @@ -0,0 +1,970 @@ + /* + * This file is part of the Trinity Desktop Environment + * + * Original file taken from the OpenSUSE kdebase builds + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <qfile.h> +#include <qstring.h> +#include <qvaluelist.h> +#include <stdlib.h> + +// TODO includes, forwards + + +/* + +FUNCTION <name> + RETURN_TYPE <type> + DELAYED_RETURN - use DCOP transaction in kded module, function will take some time to finish + SKIP_QT - don't generate in qt file + ONLY_QT - generate only in qt file + ADD_APPINFO - generate wmclass arguments + ARG <name> + TYPE <type> + ORIG_TYPE <type> - for example when the function accepts QWidget*, but WId is really used + ORIG_CONVERSION <conversion> + IGNORE + NEEDS_DEREF + CONST_REF + OUT_ARGUMENT + CONVERSION <function> + BACK_CONVERSION <function> - for out arguments + CREATE <function> - doesn't exist in Qt, create in qtkde using function + PARENT - the argument is a parent window to be used for windows + ENDARG +ENDFUNCTION + +*/ + +struct Arg + { + Arg() : ignore( false ), needs_deref( false ), const_ref( false ), out_argument( false ), parent( false ) {} + QString name; + QString type; + QString orig_type; + QString orig_conversion; + bool ignore; + bool needs_deref; + bool const_ref; + bool out_argument; + QString conversion; + QString back_conversion; + QString create; + bool parent; + }; + +struct Function + { + Function() : delayed_return( false ), skip_qt( false ), only_qt( false ), add_appinfo( false ) {} + QString name; + QString return_type; + bool delayed_return; + bool skip_qt; + bool only_qt; + bool add_appinfo; + QValueList< Arg > args; + void stripNonOutArguments(); + void stripCreatedArguments(); + }; + +void Function::stripNonOutArguments() + { + QValueList< Arg > new_args; + for( QValueList< Arg >::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& arg = (*it); + if( arg.out_argument ) + new_args.append( arg ); + } + args = new_args; + } + +void Function::stripCreatedArguments() + { + QValueList< Arg > new_args; + for( QValueList< Arg >::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& arg = (*it); + if( arg.create.isEmpty()) + new_args.append( arg ); + } + args = new_args; + } + +QValueList< Function > functions; + +QFile* input_file = NULL; +QTextStream* input_stream = NULL; +static QString last_line; +int last_lineno = 0; + +#define check( arg ) my_check( __FILE__, __LINE__, arg ) +#define error() my_error( __FILE__, __LINE__ ) + +void my_error( const char* file, int line ) + { + fprintf( stderr, "Error: %s: %d\n", file, line ); + fprintf( stderr, "Line %d: %s\n", last_lineno, last_line.utf8().data()); + abort(); + } + +void my_check( const char* file, int line, bool arg ) + { + if( !arg ) + my_error( file, line ); + } + +void openInputFile( const QString& filename ) + { + check( input_file == NULL ); + input_file = new QFile( filename ); + printf("[INFO] Reading bindings definitions from file %s\n\r", filename.ascii()); + if( !input_file->open( IO_ReadOnly )) + error(); + input_stream = new QTextStream( input_file ); + last_lineno = 0; + } + +QString getInputLine() + { + while( !input_stream->atEnd()) + { + QString line = input_stream->readLine().stripWhiteSpace(); + ++last_lineno; + last_line = line; + if( line.isEmpty() || line[ 0 ] == '#' ) + continue; + return line; + } + return QString::null; + } + +void closeInputFile() + { + delete input_stream; + delete input_file; + input_stream = NULL; + input_file = NULL; + } + +void parseArg( Function& function, const QString& details ) + { + Arg arg; + arg.name = details; + QString line = getInputLine(); + while( !line.isNull() ) + { + if( line.startsWith( "ENDARG" )) + { + check( !arg.type.isEmpty()); + function.args.append( arg ); + return; + } + else if( line.startsWith( "TYPE" )) + { + check( arg.type.isEmpty()); + arg.type = line.mid( strlen( "TYPE" )).stripWhiteSpace(); + } + else if( line.startsWith( "ORIG_TYPE" )) + { + check( arg.orig_type.isEmpty()); + arg.orig_type = line.mid( strlen( "ORIG_TYPE" )).stripWhiteSpace(); + } + else if( line.startsWith( "ORIG_CONVERSION" )) + { + check( arg.orig_conversion.isEmpty()); + arg.orig_conversion = line.mid( strlen( "ORIG_CONVERSION" )).stripWhiteSpace(); + } + else if( line.startsWith( "IGNORE" )) + { + check( !arg.out_argument ); + arg.ignore = true; + } + else if( line.startsWith( "NEEDS_DEREF" )) + { + check( !arg.const_ref ); + arg.needs_deref = true; + } + else if( line.startsWith( "CONST_REF" )) + { + check( !arg.needs_deref ); + check( !arg.out_argument ); + arg.const_ref = true; + } + else if( line.startsWith( "OUT_ARGUMENT" )) + { + check( !arg.ignore ); + check( !arg.const_ref ); + arg.out_argument = true; + } + else if( line.startsWith( "CONVERSION" )) + { + check( arg.conversion.isEmpty()); + arg.conversion = line.mid( strlen( "CONVERSION" )).stripWhiteSpace(); + } + else if( line.startsWith( "BACK_CONVERSION" )) + { + check( arg.back_conversion.isEmpty()); + arg.back_conversion = line.mid( strlen( "BACK_CONVERSION" )).stripWhiteSpace(); + } + else if( line.startsWith( "CREATE" )) + { + check( arg.create.isEmpty()); + arg.create = line.mid( strlen( "CREATE" )).stripWhiteSpace(); + } + else if( line.startsWith( "PARENT" )) + { + arg.parent = true; + } + else + error(); + line = getInputLine(); + } + error(); + } + +void parseFunction( const QString& details ) + { + Function function; + function.name = details; + QString line = getInputLine(); + while( !line.isNull() ) + { + if( line.startsWith( "ENDFUNCTION" )) + { + if( function.add_appinfo ) + { + Arg arg; + arg.name = "wmclass1"; + arg.type = "QCString"; + arg.const_ref = true; + arg.create = "qAppName"; + function.args.append( arg ); + arg.name = "wmclass2"; + arg.create = "qAppClass"; + function.args.append( arg ); + } + check( !function.return_type.isEmpty()); + functions.append( function ); + return; + } + else if( line.startsWith( "RETURN_TYPE" )) + { + check( function.return_type.isEmpty()); + function.return_type = line.mid( strlen( "RETURN_TYPE" )).stripWhiteSpace(); + } + else if( line.startsWith( "DELAYED_RETURN" )) + function.delayed_return = true; + else if( line.startsWith( "SKIP_QT" )) + function.skip_qt = true; + else if( line.startsWith( "ONLY_QT" )) + function.only_qt = true; + else if( line.startsWith( "ADD_APPINFO" )) + function.add_appinfo = true; + else if( line.startsWith( "ARG" )) + { + parseArg( function, line.mid( strlen( "ARG" )).stripWhiteSpace()); + } + else + error(); + line = getInputLine(); + } + error(); + } + +void parse(TQString filename) + { + openInputFile( filename ); + QString line = getInputLine(); + while( !line.isNull() ) + { + if( line.startsWith( "FUNCTION" )) + { + parseFunction( line.mid( strlen( "FUNCTION" )).stripWhiteSpace()); + } + else + error(); + line = getInputLine(); + } + closeInputFile(); + } + +QString makeIndent( int indent ) + { + return indent > 0 ? QString().fill( ' ', indent ) : ""; + } + +void generateFunction( QTextStream& stream, const Function& function, const QString name, + int indent, bool staticf, bool orig_type, bool ignore_deref, int ignore_level ) + { + QString line; + line += makeIndent( indent ); + if( staticf ) + line += "static "; + line += function.return_type + " " + name + "("; + bool need_comma = false; + for( QValueList< Arg >::ConstIterator it = function.args.begin(); + it != function.args.end(); + ++it ) + { + const Arg& arg = (*it); + if( ignore_level >= 2 && arg.ignore ) + continue; + if( need_comma ) + { + line += ","; + if( line.length() > 80 ) + { + stream << line << "\n"; + line = makeIndent( indent + 4 ); + } + else + line += " "; + } + else + line += " "; + need_comma = true; + if( orig_type && !arg.orig_type.isEmpty()) + line += arg.orig_type; + else + { + if( arg.const_ref ) + line += "const "; + line += arg.type; + if( !ignore_deref && arg.needs_deref ) + line += "*"; + if( arg.const_ref ) + line += "&"; + } + if( ignore_level >= 1 && arg.ignore ) + line += " /*" + arg.name + "*/"; + else + line += " " + arg.name; + } + line += " )"; + stream << line; + } + +void generateQtH() + { + QFile file( "qtkdeintegration_x11_p.h.gen" ); + if( !file.open( IO_WriteOnly )) + error(); + QTextStream stream( &file ); + for( QValueList< Function >::ConstIterator it = functions.begin(); + it != functions.end(); + ++it ) + { + Function f = *it; + if( f.skip_qt ) + continue; + f.stripCreatedArguments(); + generateFunction( stream, f, f.name, 8, + true /*static*/, true /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ ); + stream << ";\n"; + } + } + +void generateQtCpp() + { + QFile file( "qtkdeintegration_x11.cpp.gen" ); + if( !file.open( IO_WriteOnly )) + error(); + QTextStream stream( &file ); + for( QValueList< Function >::ConstIterator it = functions.begin(); + it != functions.end(); + ++it ) + { + Function f = *it; + if( f.only_qt ) + continue; + f.stripCreatedArguments(); + generateFunction( stream, f, "(*qtkde_" + f.name + ")", 0, + true /*static*/, false /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ ); + stream << ";\n"; + } + stream << +"\n" +"void QKDEIntegration::initLibrary()\n" +" {\n" +" if( !inited )\n" +" {\n" +" enable = false;\n" +" inited = true;\n" +" QString libpath = findLibrary();\n" +" if( libpath.isEmpty())\n" +" return;\n" +" QLibrary lib( libpath );\n" +" if( !QFile::exists( lib.library())) // avoid stupid Qt warning\n" +" return;\n" +" lib.setAutoUnload( false );\n"; + for( QValueList< Function >::ConstIterator it = functions.begin(); + it != functions.end(); + ++it ) + { + Function function = *it; + if( function.only_qt ) + continue; + stream << makeIndent( 8 ) + "qtkde_" + function.name + " = (\n"; + function.stripCreatedArguments(); + generateFunction( stream, function, "(*)", 12, + false /*static*/, false /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ ); + stream << "\n" + makeIndent( 12 ) + ")\n"; + stream << makeIndent( 12 ) + "lib.resolve(\"" + (*it).name + "\");\n"; + stream << makeIndent( 8 ) + "if( qtkde_" + (*it).name + " == NULL )\n"; + stream << makeIndent( 12 ) + "return;\n"; + } + stream << +" enable = qtkde_initializeIntegration();\n" +" }\n" +" }\n" +"\n"; + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + Function function = *it1; + if( function.skip_qt || function.only_qt ) + continue; + function.stripCreatedArguments(); + generateFunction( stream, function, "QKDEIntegration::" + function.name, 0, + false /*static*/, true /*orig type*/, false /*ignore deref*/, 0 /*ignore level*/ ); + stream << "\n"; + stream << makeIndent( 4 ) + "{\n"; + stream << makeIndent( 4 ) + "return qtkde_" + function.name + "(\n"; + stream << makeIndent( 8 ); + bool need_comma = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( need_comma ) + stream << ", "; + need_comma = true; + if( !arg.orig_conversion.isEmpty()) + { + stream << arg.orig_conversion + "( " + arg.name + " )"; + } + else + stream << arg.name; + } + stream << " );\n"; + stream << makeIndent( 4 ) + "}\n"; + } + } + +void generateQt() + { + generateQtH(); + generateQtCpp(); + } + +void generateQtKde() + { + QFile file( "qtkde_functions.cpp" ); + if( !file.open( IO_WriteOnly )) + error(); + QTextStream stream( &file ); + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + const Function& function = *it1; + if( function.only_qt ) + continue; + Function stripped_function = function; + stripped_function.stripCreatedArguments(); + stream << "extern \"C\"\n"; + generateFunction( stream, stripped_function, stripped_function.name, 0, + false /*static*/, false /*orig type*/, false /*ignore deref*/, 1 /*ignore level*/ ); + stream << "\n"; + stream << +" {\n" +" if( qt_xdisplay() != NULL )\n" +" XSync( qt_xdisplay(), False );\n"; + QString parent_arg; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + if( arg.parent ) + { + parent_arg = arg.name; + break; + } + } + if( !parent_arg.isEmpty()) + { + stream << " if( " << parent_arg << " == 0 )\n"; + stream << " DCOPRef( \"kded\", \"MainApplication-Interface\" ).call( \"updateUserTimestamp\", qt_x_time );\n"; + } + stream << +" QByteArray data, replyData;\n" +" QCString replyType;\n"; + if( !function.args.isEmpty()) + { + stream << " QDataStream datastream( data, IO_WriteOnly );\n"; + stream << " datastream"; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + stream << " << "; + if( !(arg.conversion).isNull() ) + stream << arg.conversion + "( "; + if( !arg.create.isEmpty()) + stream << arg.create + "()"; + else + { + if( arg.needs_deref ) + stream << "( " << arg.name << " != NULL ? *" << arg.name << " : " << arg.type << "())"; + else + stream << arg.name; + } + if( !(arg.conversion).isNull() ) + stream << " )"; + } + stream << ";\n"; + } + stream << " if( !dcopClient()->call( \"kded\", \"kdeintegration\",\"" + function.name + "("; + bool need_comma = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + if( need_comma ) + stream << ","; + need_comma = true; + stream << arg.type; + } + stream << ")\", data, replyType, replyData, true ))\n"; + stream << " {\n"; + if( function.return_type != "void" ) + { + stream << " " + function.return_type << " ret;\n"; + stream << " dcopTypeInit( ret ); // set to false/0/whatever\n"; + stream << " return ret;\n"; + } + else + stream << " return;\n"; + stream << " }\n"; + bool return_data = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + !return_data && it2 != function.args.end(); + ++it2 ) + { + if( (*it2).out_argument ) + return_data = true; + } + if( return_data || function.return_type != "void" ) + stream << " QDataStream replystream( replyData, IO_ReadOnly );\n"; + if( function.return_type != "void" ) + { + stream << " " + function.return_type << " ret;\n"; + stream << " replystream >> ret;\n"; + } + if( return_data ) + { + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.out_argument && arg.needs_deref ) + stream << " " << arg.type << " " << arg.name + "_dummy;\n"; + } + stream << " replystream"; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.out_argument ) + { + stream << " >> "; + if( !(arg.back_conversion).isNull() ) + stream << arg.name + "_dummy"; + else + { + if( arg.needs_deref ) + stream << "( " << arg.name << " != NULL ? *" << arg.name << " : " << arg.name << "_dummy )"; + else + stream << arg.name; + } + } + } + stream << ";\n"; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.out_argument && (!(arg.back_conversion).isNull()) ) + stream << " if( " << arg.name << " != NULL )\n" + << makeIndent( 8 ) << "*" << arg.name << " = " << arg.back_conversion << "( " << arg.name + "_dummy );\n"; + } + } + if( function.return_type != "void" ) + stream << " return ret;\n"; + stream << " }\n"; + stream << "\n"; + } + } + +void generateKdeDcop( QTextStream& stream ) + { + stream << +"bool Module::process(const QCString &fun, const QByteArray &data,\n" +" QCString &replyType, QByteArray &replyData)\n" +" {\n"; + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + const Function& function = *it1; + if( function.only_qt ) + continue; + stream << " if( fun == \"" + function.name + "("; + bool need_comma = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + if( need_comma ) + stream << ","; + need_comma = true; + stream << arg.type; + } + stream << ")\" )\n"; + stream << " {\n"; + if( function.delayed_return ) + stream << " pre_" + function.name + "( data );\n"; + else + { + stream << " pre_" + function.name + "( data, replyData );\n"; + stream << " replyType = \"" << function.return_type << "\";\n"; + } + stream << " return true;\n"; + stream << " }\n"; + } + stream << +" return KDEDModule::process( fun, data, replyType, replyData );\n" +" }\n" +"\n"; + stream << +"QCStringList Module::functions()\n" +" {\n" +" QCStringList funcs = KDEDModule::functions();\n"; + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + const Function& function = *it1; + if( function.only_qt ) + continue; + stream << " funcs << \"" + function.name + "("; + bool need_comma = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + if( need_comma ) + stream << ","; + need_comma = true; + stream << arg.type; + } + stream << ")\";\n"; + } + stream << +" return funcs;\n" +" }\n" +"\n" +"QCStringList Module::interfaces()\n" +" {\n" +" QCStringList ifaces = KDEDModule::interfaces();\n" +" ifaces << \"KDEIntegration\";\n" +" return ifaces;\n" +" }\n" +"\n"; + } + +void generateKdePreStub( QTextStream& stream ) + { + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + const Function& function = *it1; + if( function.only_qt ) + continue; + stream << "void Module::pre_" + function.name + "( const QByteArray& " + + ( function.args.isEmpty() ? "" : "data" ) + + ( function.delayed_return ? "" : ", QByteArray& replyData" ) + + " )\n"; + stream << " {\n"; + if( function.delayed_return ) + { + stream << " JobData job;\n"; + stream << " job.transaction = kapp->dcopClient()->beginTransaction();\n"; + stream << " job.type = JobData::" + QString( function.name[ 0 ].upper()) + function.name.mid( 1 ) + ";\n"; + } + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + stream << " " + arg.type + " " + arg.name + ";\n"; + } + if( !function.args.isEmpty()) + { + stream << " QDataStream datastream( data, IO_ReadOnly );\n"; + stream << " datastream"; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + stream << " >> " + arg.name; + } + stream << ";\n"; + } + if( function.delayed_return ) + stream << " void* handle = " + function.name + "( "; + else + stream << " post_" + function.name + "( " + function.name + "( "; + bool need_comma = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.ignore ) + continue; + if( need_comma ) + stream << ", "; + need_comma = true; + stream << arg.name; + } + if( function.delayed_return ) + { + stream << " );\n"; + stream << " jobs[ handle ] = job;\n"; + } + else + stream << " ), replyData );\n"; + stream << " }\n"; + stream << "\n"; + } + } + +void generateKdePostStub( QTextStream& stream ) + { + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + const Function& function = *it1; + if( function.only_qt ) + continue; + stream << "void Module::post_" + function.name + "( "; + bool needs_comma = false; + if( function.delayed_return ) + { + stream << "void* handle"; + needs_comma = true; + } + if( function.return_type != "void" ) + { + if( needs_comma ) + stream << ", "; + needs_comma = true; + stream << function.return_type + " ret"; + } + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.out_argument ) + { + if( needs_comma ) + stream << ", "; + needs_comma = true; + stream << arg.type + " " + arg.name; + } + } + if( !function.delayed_return ) + stream << ( needs_comma ? "," : "" ) << " QByteArray& replyData"; + stream << " )\n"; + stream << " {\n"; + if( function.delayed_return ) + { + stream << " assert( jobs.contains( handle ));\n"; + stream << " JobData job = jobs[ handle ];\n"; + stream << " jobs.remove( handle );\n"; + stream << " QByteArray replyData;\n"; + stream << " QCString replyType = \"qtkde\";\n"; + } + bool return_data = false; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + !return_data && it2 != function.args.end(); + ++it2 ) + { + if( (*it2).out_argument ) + return_data = true; + } + if( function.return_type != "void" || return_data ) + stream << " QDataStream replystream( replyData, IO_WriteOnly );\n"; + if( function.return_type != "void" ) + stream << " replystream << ret;\n"; + if( return_data ) + { + stream << " replystream"; + for( QValueList< Arg >::ConstIterator it2 = function.args.begin(); + it2 != function.args.end(); + ++it2 ) + { + const Arg& arg = (*it2); + if( arg.out_argument ) + stream << " << " + arg.name; + } + stream << ";\n"; + } + if( function.delayed_return ) + stream << " kapp->dcopClient()->endTransaction( job.transaction, replyType, replyData );\n"; + stream << " }\n"; + stream << "\n"; + } + } + +void generateKdeStubs( QTextStream& stream ) + { + generateKdePreStub( stream ); + generateKdePostStub( stream ); +// TODO udelat i predbezne deklarace pro skutecne funkce? + } + +void generateKdeCpp() + { + QFile file( "module_functions.cpp" ); + if( !file.open( IO_WriteOnly )) + error(); + QTextStream stream( &file ); + generateKdeDcop( stream ); + generateKdeStubs( stream ); + } + +void generateKdeH() + { + QFile file( "module_functions.h" ); + if( !file.open( IO_WriteOnly )) + error(); + QTextStream stream( &file ); + for( QValueList< Function >::ConstIterator it1 = functions.begin(); + it1 != functions.end(); + ++it1 ) + { + const Function& function = *it1; + if( function.only_qt ) + continue; + Function real_function = function; + if( function.delayed_return ) + real_function.return_type = "void*"; + generateFunction( stream, real_function, real_function.name, 8, + false /*static*/, false /*orig type*/, true /*ignore deref*/, 2 /*ignore level*/ ); + stream << ";\n"; + stream << makeIndent( 8 ) + "void pre_" + function.name + "( const QByteArray& data" + + ( function.delayed_return ? "" : ", QByteArray& replyData" ) + " );\n"; + Function post_function = function; + post_function.stripNonOutArguments(); + if( function.return_type != "void" ) + { + Arg return_arg; + return_arg.name = "ret"; + return_arg.type = function.return_type; + post_function.args.prepend( return_arg ); + } + if( function.delayed_return ) + { + Arg handle_arg; + handle_arg.name = "handle"; + handle_arg.type = "void*"; + post_function.args.prepend( handle_arg ); + } + else + { + Arg handle_arg; + handle_arg.name = "replyData"; + handle_arg.type = "QByteArray&"; + post_function.args.append( handle_arg ); + } + post_function.return_type = "void"; + generateFunction( stream, post_function, "post_" + post_function.name, 8, + false /*static*/, false /*orig type*/, true /*ignore deref*/, 2 /*ignore level*/ ); + stream << ";\n"; + } + } + +void generateKde() + { + generateKdeCpp(); + generateKdeH(); + } + +void generate() + { + generateQt(); + generateQtKde(); + generateKde(); + } + +int main (int argc, char *argv[]) + { + if (argc > 1) { + parse(TQString(argv[1])); + } + else { + parse(TQString("gen.txt")); + } + generate(); + return 0; + } diff --git a/tqt3integration/utils/gen.txt b/tqt3integration/utils/gen.txt new file mode 100644 index 000000000..2bd4b1b3b --- /dev/null +++ b/tqt3integration/utils/gen.txt @@ -0,0 +1,546 @@ +# bool initializeIntegration() +# +FUNCTION initializeIntegration + RETURN_TYPE bool + ARG hostname + TYPE QString + CONST_REF + CREATE getHostname + ENDARG +ENDFUNCTION +# QStringList getOpenFileNames( const QString &filter, +# QString* workingDirectory, QWidget *parent, const char* name, +# const QString& caption, QString* selectedFilter, bool multiple ); +# +FUNCTION getOpenFileNames + RETURN_TYPE QStringList + DELAYED_RETURN + ADD_APPINFO + ARG filter + TYPE QString + CONST_REF + CONVERSION convertFileFilter + ENDARG + ARG workingDirectory + TYPE QString + NEEDS_DEREF + OUT_ARGUMENT + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE QCString + CONST_REF + ORIG_TYPE const char* + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG selectedFilter + TYPE QString + NEEDS_DEREF + OUT_ARGUMENT + CONVERSION convertFileFilter + BACK_CONVERSION convertBackFileFilter + ENDARG + ARG multiple + TYPE bool + ENDARG +ENDFUNCTION + +# QString getSaveFileName( const QString &initialSelection, +# const QString &filter, QString* workingDirectory, QWidget *parent, +# const char* name, const QString& caption, QString* selectedFilter ); +# +FUNCTION getSaveFileName + RETURN_TYPE QString + DELAYED_RETURN + ADD_APPINFO + ARG initialSelection + TYPE QString + CONST_REF + ENDARG + ARG filter + TYPE QString + CONST_REF + CONVERSION convertFileFilter + ENDARG + ARG workingDirectory + TYPE QString + NEEDS_DEREF + OUT_ARGUMENT + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE QCString + CONST_REF + ORIG_TYPE const char* + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG selectedFilter + TYPE QString + NEEDS_DEREF + OUT_ARGUMENT + CONVERSION convertFileFilter + BACK_CONVERSION convertBackFileFilter + ENDARG +ENDFUNCTION + +# QString getExistingDirectory( const QString &initialDirectory, +# QWidget* parent, const char* name, const QString& caption ); +# +FUNCTION getExistingDirectory + RETURN_TYPE QString + DELAYED_RETURN + ADD_APPINFO + ARG initialDirectory + TYPE QString + CONST_REF + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE QCString + CONST_REF + ORIG_TYPE const char* + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG +ENDFUNCTION + +# QColor getColor( const QColor& color, QWidget* parent, const char* name ); +# +FUNCTION getColor + RETURN_TYPE QColor + DELAYED_RETURN + ADD_APPINFO + ARG color + TYPE QColor + CONST_REF + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE QCString + CONST_REF + ORIG_TYPE const char* + ENDARG +ENDFUNCTION + +# QFont getFont( bool* ok, const QFont* def, QWidget *parent, const char* name); +FUNCTION getFont + RETURN_TYPE QFont + DELAYED_RETURN + ADD_APPINFO + ARG ok + TYPE bool + NEEDS_DEREF + OUT_ARGUMENT + ENDARG + ARG def + TYPE QFont + ORIG_TYPE const QFont* + ORIG_CONVERSION fontPtrToFontRef + CONST_REF + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE QCString + CONST_REF + ORIG_TYPE const char* + ENDARG +ENDFUNCTION + +# int messageBox1( int type, QWidget *parent, const QString& caption, const QString& text, +# int button0, int button1, int button2 ); +FUNCTION messageBox1 + RETURN_TYPE int + DELAYED_RETURN + ADD_APPINFO + ARG type + TYPE int + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int information( QWidget *parent, const QString& caption, const QString& text, +# int button0, int button1, int button2 ); +FUNCTION information + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int question( QWidget *parent, const QString& caption, const QString& text, +# int button0, int button1, int button2 ); +FUNCTION question + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int warning( QWidget *parent, const QString& caption, const QString& text, +# int button0, int button1, int button2 ); +FUNCTION warning + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int critical( QWidget *parent, const QString& caption, const QString& text, +# int button0, int button1, int button2 ); +FUNCTION critical + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int messageBox2( int type, QWidget* parent, const QString& caption, const QString& text, +# const QString& button0Text, const QString& button1Text, const QString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION messageBox2 + RETURN_TYPE int + DELAYED_RETURN + ADD_APPINFO + ARG type + TYPE int + ENDARG + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0Text + TYPE QString + CONST_REF + ENDARG + ARG button1Text + TYPE QString + CONST_REF + ENDARG + ARG button2Text + TYPE QString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int information( QWidget* parent, const QString& caption, const QString& text, +# const QString& button0Text, const QString& button1Text, const QString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION information + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0Text + TYPE QString + CONST_REF + ENDARG + ARG button1Text + TYPE QString + CONST_REF + ENDARG + ARG button2Text + TYPE QString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int question( QWidget* parent, const QString& caption, const QString& text, +# const QString& button0Text, const QString& button1Text, const QString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION question + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0Text + TYPE QString + CONST_REF + ENDARG + ARG button1Text + TYPE QString + CONST_REF + ENDARG + ARG button2Text + TYPE QString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int warning( QWidget* parent, const QString& caption, const QString& text, +# const QString& button0Text, const QString& button1Text, const QString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION warning + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0Text + TYPE QString + CONST_REF + ENDARG + ARG button1Text + TYPE QString + CONST_REF + ENDARG + ARG button2Text + TYPE QString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int critical( QWidget* parent, const QString& caption, const QString& text, +# const QString& button0Text, const QString& button1Text, const QString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION critical + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE QWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE QString + CONST_REF + ENDARG + ARG text + TYPE QString + CONST_REF + ENDARG + ARG button0Text + TYPE QString + CONST_REF + ENDARG + ARG button1Text + TYPE QString + CONST_REF + ENDARG + ARG button2Text + TYPE QString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION diff --git a/tqt3integration/utils/qt/CMakeLists.txt b/tqt3integration/utils/qt/CMakeLists.txt new file mode 100644 index 000000000..de5ffb4e8 --- /dev/null +++ b/tqt3integration/utils/qt/CMakeLists.txt @@ -0,0 +1,12 @@ +################################################# +# +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_subdirectory( in )
\ No newline at end of file diff --git a/tqt3integration/utils/qt/Makefile.am b/tqt3integration/utils/qt/Makefile.am new file mode 100644 index 000000000..c4667d0bd --- /dev/null +++ b/tqt3integration/utils/qt/Makefile.am @@ -0,0 +1 @@ +CLEANFILES = qt.patch qtkdeintegration_x11.cpp qtkdeintegration_x11_p.h diff --git a/tqt3integration/utils/qt/in/CMakeLists.txt b/tqt3integration/utils/qt/in/CMakeLists.txt new file mode 100644 index 000000000..e6fa392d5 --- /dev/null +++ b/tqt3integration/utils/qt/in/CMakeLists.txt @@ -0,0 +1,12 @@ +################################################# +# +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +configure_file( qtkdeintegration_x11_0.cpp.cmake qtkdeintegration_x11_0.cpp @ONLY )
\ No newline at end of file diff --git a/tqt3integration/utils/qt/in/qt.patch b/tqt3integration/utils/qt/in/qt.patch new file mode 100644 index 000000000..578388440 --- /dev/null +++ b/tqt3integration/utils/qt/in/qt.patch @@ -0,0 +1,270 @@ +--- src/dialogs/qfiledialog.cpp.sav 2004-12-08 15:39:41.000000000 +0100 ++++ src/dialogs/qfiledialog.cpp 2004-12-13 16:53:40.000000000 +0100 +@@ -92,6 +92,10 @@ + #include "qvbox.h" + #include "qwidgetstack.h" + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + #ifdef Q_WS_WIN + #ifdef QT_THREAD_SUPPORT + # include <private/qmutexpool_p.h> +@@ -3428,7 +3432,11 @@ QString QFileDialog::getOpenFileName( co + if ( workingDirectory->isNull() ) + *workingDirectory = QDir::currentDirPath(); + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, ++ caption, selectedFilter, false ).first(); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetOpenFileName( initialSelection, filter, workingDirectory, + parent, name, caption, selectedFilter ); +@@ -3546,7 +3554,11 @@ QString QFileDialog::getSaveFileName( co + if ( workingDirectory->isNull() ) + *workingDirectory = QDir::currentDirPath(); + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory, ++ parent, name, caption, selectedFilter ); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetSaveFileName( initialSelection, filter, workingDirectory, + parent, name, caption, selectedFilter ); +@@ -4433,7 +4445,17 @@ QString QFileDialog::getExistingDirector + if ( workingDirectory ) + wd = *workingDirectory; + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ QString initialDir; ++ if ( !dir.isEmpty() ) { ++ QUrlOperator u( dir ); ++ if ( QFileInfo( u.path() ).isDir() ) ++ initialDir = dir; ++ } else ++ initialDir = QString::null; ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption ); ++#elif defined(Q_WS_WIN) + QString initialDir; + if ( !dir.isEmpty() ) { + QUrlOperator u( dir ); +@@ -5586,7 +5608,10 @@ QStringList QFileDialog::getOpenFileName + } + } + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true ); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter ); + #elif defined(Q_WS_MAC) +--- src/dialogs/qmessagebox.cpp.sav 2003-12-22 12:24:32.000000000 +0100 ++++ src/dialogs/qmessagebox.cpp 2005-01-05 18:05:29.638723917 +0100 +@@ -54,6 +54,12 @@ + #endif + + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ ++extern bool qt_use_native_dialogs; ++ + // Internal class - don't touch + + class QMessageBoxLabel : public QLabel +@@ -1104,6 +1110,10 @@ int QMessageBox::information( QWidget *p + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Information, + button0, button1, button2, + parent, "qt_msgbox_information", TRUE, +@@ -1151,6 +1161,10 @@ int QMessageBox::question( QWidget *pare + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Question, + button0, button1, button2, + parent, "qt_msgbox_information", TRUE, +@@ -1199,6 +1213,10 @@ int QMessageBox::warning( QWidget *paren + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Warning, + button0, button1, button2, + parent, "qt_msgbox_warning", TRUE, +@@ -1247,6 +1265,10 @@ int QMessageBox::critical( QWidget *pare + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Critical, + button0, button1, button2, + parent, "qt_msgbox_critical", TRUE, +@@ -1394,6 +1416,11 @@ int QMessageBox::information( QWidget *p + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::information( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Information, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1436,6 +1463,11 @@ int QMessageBox::question( QWidget *pare + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::question( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Question, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1480,6 +1512,11 @@ int QMessageBox::warning( QWidget *paren + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::warning( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Warning, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1520,6 +1557,11 @@ int QMessageBox::critical( QWidget *pare + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::critical( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Critical, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +--- src/dialogs/qfontdialog.cpp.sav 2004-08-12 14:32:06.000000000 +0200 ++++ src/dialogs/qfontdialog.cpp 2004-12-13 19:02:31.000000000 +0100 +@@ -56,6 +56,10 @@ + #include <private/qfontdata_p.h> + #include <qvalidator.h> + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + /*! + \class QFontDialog qfontdialog.h + \ingroup dialogs +@@ -384,9 +388,15 @@ QFont QFontDialog::getFont( bool *ok, QW + return getFont( ok, 0, parent, name ); + } + ++extern bool qt_use_native_dialogs; ++ + QFont QFontDialog::getFont( bool *ok, const QFont *def, + QWidget *parent, const char* name) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getFont( ok, def, parent, name ); ++#endif + QFont result; + if ( def ) + result = *def; +--- src/dialogs/qcolordialog.cpp.sav 2004-04-30 12:00:05.000000000 +0200 ++++ src/dialogs/qcolordialog.cpp 2004-12-13 16:53:40.000000000 +0100 +@@ -60,6 +60,10 @@ QRgb macGetRgba( QRgb initial, bool *ok, + QColor macGetColor( const QColor& initial, QWidget *parent, const char *name ); + #endif + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + //////////// QWellArray BEGIN + + struct QWellArrayData; +@@ -1478,7 +1482,10 @@ QColorDialog::QColorDialog(QWidget* pare + QColor QColorDialog::getColor( const QColor& initial, QWidget *parent, + const char *name ) + { +-#if defined(Q_WS_MAC) ++#if defined(Q_WS_X11) ++ if( QKDEIntegration::enabled()) ++ return QKDEIntegration::getColor( initial, parent, name ); ++#elif defined(Q_WS_MAC) + return macGetColor(initial, parent, name); + #endif + +@@ -1516,6 +1523,13 @@ QRgb QColorDialog::getRgba( QRgb initial + QWidget *parent, const char* name ) + { + #if defined(Q_WS_MAC) ++ if( QKDEIntegration::enabled()) { ++ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name ); ++ if( ok ) ++ *ok = color.isValid(); ++ return color.rgba(); ++ } ++#elif defined(Q_WS_MAC) + return macGetRgba(initial, ok, parent, name); + #endif + +--- src/kernel/qt_x11.pri.sav 2004-11-15 17:51:45.000000000 +0100 ++++ src/kernel/qt_x11.pri 2004-12-13 16:53:40.000000000 +0100 +@@ -10,6 +10,9 @@ unix { + + SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp + PRECOMPILED_HEADER = kernel/qt_pch.h ++ ++ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp ++ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h + } + + nas { +--- src/kernel/qt.h.sav 2004-02-16 15:05:19.000000000 +0100 ++++ src/kernel/qt.h 2004-12-13 16:53:40.000000000 +0100 +@@ -313,6 +313,10 @@ + #endif // Private headers + + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + #ifdef Q_WS_MAC + #include <qaquastyle.h> + #include <qmacstyle_mac.h> diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake b/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake new file mode 100644 index 000000000..37b84a776 --- /dev/null +++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake @@ -0,0 +1 @@ +#define QTKDELIBDIR @PLUGIN_INSTALL_DIR@/plugins/integration diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp b/tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp new file mode 100644 index 000000000..0fe1b3baf --- /dev/null +++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_1.cpp @@ -0,0 +1,73 @@ + /* + * This file is part of the Trinity Desktop Environment + * + * Original file taken from the OpenSUSE kdebase builds + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qtkdeintegration_x11_p.h" + +#include <qcolordialog.h> +#include <qfiledialog.h> +#include <qfontdialog.h> +#include <qlibrary.h> +#include <qregexp.h> +#include <qmessagebox.h> +#include <qapplication.h> +#include <stdlib.h> + +bool QKDEIntegration::inited = false; +bool QKDEIntegration::enable = false; + +bool QKDEIntegration::enabled() + { + if( !inited ) + initLibrary(); + return enable; + } + +static QCString findLibrary() + { + if( getenv( "KDE_FULL_SESSION" ) == NULL ) + return ""; + if( getenv( "KDE_FULL_SESSION" )[ 0 ] != 't' && getenv( "KDE_FULL_SESSION" )[ 0 ] != '1' ) + return ""; + if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL + || getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' ) + { + return QCString( QTKDELIBDIR ) + "/libqtkde"; + } + return ""; + } + +static long parentToWinId( const QWidget* w ) + { + if( w != NULL ) + return w->topLevelWidget()->winId(); + // try to find some usable parent + if( qApp->activeWindow() && w != qApp->activeWindow()) + return qApp->activeWindow()->winId(); + if( qApp->mainWidget() && w != qApp->mainWidget()) + return qApp->mainWidget()->winId(); + return 0; + } + +inline static QFont fontPtrToFontRef( const QFont* f ) + { + return f != NULL ? *f : QFont(); + } + +// --- diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp b/tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp new file mode 100644 index 000000000..d22f5e9af --- /dev/null +++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_2.cpp @@ -0,0 +1,81 @@ + /* + * This file is part of the Trinity Desktop Environment + * + * Original file taken from the OpenSUSE kdebase builds + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +// --- + +int QKDEIntegration::information( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Information, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::question( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Question, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::warning( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Warning, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::critical( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Critical, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::information( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Information, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::question( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Question, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::warning( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Warning, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::critical( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Critical, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h new file mode 100644 index 000000000..118e861e7 --- /dev/null +++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_1.h @@ -0,0 +1,35 @@ + /* + * This file is part of the Trinity Desktop Environment + * + * Original file taken from the OpenSUSE kdebase builds + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QKDEINTEGRATION_H +#define QKDEINTEGRATION_H + +#include <qstringlist.h> + +class QLibrary; +class QWidget; +class QColor; +class QFont; + +class QKDEIntegration + { + public: + static bool enabled(); +// --- diff --git a/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h new file mode 100644 index 000000000..4ce56ff97 --- /dev/null +++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_p_2.h @@ -0,0 +1,28 @@ + /* + * This file is part of the Trinity Desktop Environment + * + * Original file taken from the OpenSUSE kdebase builds + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +// --- + private: + static void initLibrary(); + static bool inited; + static bool enable; + }; + +#endif |