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..da78e6a99 --- /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 tdecore-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..0d46eb92f --- /dev/null +++ b/tqt3integration/utils/Makefile.am @@ -0,0 +1,19 @@ +noinst_PROGRAMS = gen +gen_SOURCES = gen.cpp +gen_LDADD = $(LIB_TDECORE) +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..80e597742 --- /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 tdebase 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 <tqfile.h> +#include <tqstring.h> +#include <tqvaluelist.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 TQWidget*, 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 TQt, 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 ) {} + TQString name; + TQString type; + TQString orig_type; + TQString orig_conversion; + bool ignore; + bool needs_deref; + bool const_ref; + bool out_argument; + TQString conversion; + TQString back_conversion; + TQString create; + bool parent; + }; + +struct Function + { + Function() : delayed_return( false ), skip_qt( false ), only_qt( false ), add_appinfo( false ) {} + TQString name; + TQString return_type; + bool delayed_return; + bool skip_qt; + bool only_qt; + bool add_appinfo; + TQValueList< Arg > args; + void stripNonOutArguments(); + void stripCreatedArguments(); + }; + +void Function::stripNonOutArguments() + { + TQValueList< Arg > new_args; + for( TQValueList< 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() + { + TQValueList< Arg > new_args; + for( TQValueList< Arg >::ConstIterator it = args.begin(); + it != args.end(); + ++it ) + { + const Arg& arg = (*it); + if( arg.create.isEmpty()) + new_args.append( arg ); + } + args = new_args; + } + +TQValueList< Function > functions; + +TQFile* input_file = NULL; +TQTextStream* input_stream = NULL; +static TQString 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 TQString& filename ) + { + check( input_file == NULL ); + input_file = new TQFile( filename ); + printf("[INFO] Reading bindings definitions from file %s\n", filename.ascii()); + if( !input_file->open( IO_ReadOnly )) + error(); + input_stream = new TQTextStream( input_file ); + last_lineno = 0; + } + +TQString getInputLine() + { + while( !input_stream->atEnd()) + { + TQString line = input_stream->readLine().stripWhiteSpace(); + ++last_lineno; + last_line = line; + if( line.isEmpty() || line[ 0 ] == '#' ) + continue; + return line; + } + return TQString(); + } + +void closeInputFile() + { + delete input_stream; + delete input_file; + input_stream = NULL; + input_file = NULL; + } + +void parseArg( Function& function, const TQString& details ) + { + Arg arg; + arg.name = details; + TQString 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 TQString& details ) + { + Function function; + function.name = details; + TQString line = getInputLine(); + while( !line.isNull() ) + { + if( line.startsWith( "ENDFUNCTION" )) + { + if( function.add_appinfo ) + { + Arg arg; + arg.name = "wmclass1"; + arg.type = "TQCString"; + arg.const_ref = true; + arg.create = "tqAppName"; + function.args.append( arg ); + arg.name = "wmclass2"; + arg.create = "tqAppClass"; + 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 ); + TQString line = getInputLine(); + while( !line.isNull() ) + { + if( line.startsWith( "FUNCTION" )) + { + parseFunction( line.mid( strlen( "FUNCTION" )).stripWhiteSpace()); + } + else + error(); + line = getInputLine(); + } + closeInputFile(); + } + +TQString makeIndent( int indent ) + { + return indent > 0 ? TQString().fill( ' ', indent ) : ""; + } + +void generateFunction( TQTextStream& stream, const Function& function, const TQString name, + int indent, bool staticf, bool orig_type, bool ignore_deref, int ignore_level ) + { + TQString line; + line += makeIndent( indent ); + if( staticf ) + line += "static "; + line += function.return_type + " " + name + "("; + bool need_comma = false; + for( TQValueList< 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 generateTQtH() + { + TQFile file( "qtkdeintegration_x11_p.h.gen" ); + if( !file.open( IO_WriteOnly )) + error(); + TQTextStream stream( &file ); + for( TQValueList< 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 generateTQtCpp() + { + TQFile file( "qtkdeintegration_x11.cpp.gen" ); + if( !file.open( IO_WriteOnly )) + error(); + TQTextStream stream( &file ); + for( TQValueList< 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 TQKDEIntegration::initLibrary()\n" +" {\n" +" if( !inited )\n" +" {\n" +" enable = false;\n" +" inited = true;\n" +" TQString libpath = findLibrary();\n" +" if( libpath.isEmpty())\n" +" return;\n" +" TQLibrary lib( libpath );\n" +" if( !TQFile::exists( lib.library())) // avoid stupid TQt warning\n" +" return;\n" +" lib.setAutoUnload( false );\n"; + for( TQValueList< 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( TQValueList< 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( TQValueList< 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 generateTQt() + { + generateTQtH(); + generateTQtCpp(); + } + +void generateTQtKde() + { + TQFile file( "tqtkde_functions.cpp" ); + if( !file.open( IO_WriteOnly )) + error(); + TQTextStream stream( &file ); + for( TQValueList< 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( tqt_xdisplay() != NULL )\n" +" XSync( tqt_xdisplay(), False );\n"; + TQString parent_arg; + for( TQValueList< 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\", tqt_x_time );\n"; + } + stream << +" TQByteArray data, replyData;\n" +" TQCString replyType;\n"; + if( !function.args.isEmpty()) + { + stream << " TQDataStream datastream( data, IO_WriteOnly );\n"; + stream << " datastream"; + for( TQValueList< 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( TQValueList< 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( TQValueList< 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 << " TQDataStream replystream( replyData, IO_ReadOnly );\n"; + if( function.return_type != "void" ) + { + stream << " " + function.return_type << " ret;\n"; + stream << " replystream >> ret;\n"; + } + if( return_data ) + { + for( TQValueList< 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( TQValueList< 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( TQValueList< 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( TQTextStream& stream ) + { + stream << +"bool Module::process(const TQCString &fun, const TQByteArray &data,\n" +" TQCString &replyType, TQByteArray &replyData)\n" +" {\n"; + for( TQValueList< 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( TQValueList< 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( TQValueList< 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( TQValueList< 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( TQTextStream& stream ) + { + for( TQValueList< 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 TQByteArray& " + + ( function.args.isEmpty() ? "" : "data" ) + + ( function.delayed_return ? "" : ", TQByteArray& replyData" ) + + " )\n"; + stream << " {\n"; + if( function.delayed_return ) + { + stream << " JobData job;\n"; + stream << " job.transaction = kapp->dcopClient()->beginTransaction();\n"; + stream << " job.type = JobData::" + TQString( function.name[ 0 ].upper()) + function.name.mid( 1 ) + ";\n"; + } + for( TQValueList< 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 << " TQDataStream datastream( data, IO_ReadOnly );\n"; + stream << " datastream"; + for( TQValueList< 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( TQValueList< 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( TQTextStream& stream ) + { + for( TQValueList< 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( TQValueList< 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 ? "," : "" ) << " TQByteArray& 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 << " TQByteArray replyData;\n"; + stream << " TQCString replyType = \"qtkde\";\n"; + } + bool return_data = false; + for( TQValueList< 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 << " TQDataStream replystream( replyData, IO_WriteOnly );\n"; + if( function.return_type != "void" ) + stream << " replystream << ret;\n"; + if( return_data ) + { + stream << " replystream"; + for( TQValueList< 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( TQTextStream& stream ) + { + generateKdePreStub( stream ); + generateKdePostStub( stream ); +// TODO udelat i predbezne deklarace pro skutecne funkce? + } + +void generateKdeCpp() + { + TQFile file( "module_functions.cpp" ); + if( !file.open( IO_WriteOnly )) + error(); + TQTextStream stream( &file ); + generateKdeDcop( stream ); + generateKdeStubs( stream ); + } + +void generateKdeH() + { + TQFile file( "module_functions.h" ); + if( !file.open( IO_WriteOnly )) + error(); + TQTextStream stream( &file ); + for( TQValueList< 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 TQByteArray& data" + + ( function.delayed_return ? "" : ", TQByteArray& 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 = "TQByteArray&"; + 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() + { + generateTQt(); + generateTQtKde(); + 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..4befc9645 --- /dev/null +++ b/tqt3integration/utils/gen.txt @@ -0,0 +1,546 @@ +# bool initializeIntegration() +# +FUNCTION initializeIntegration + RETURN_TYPE bool + ARG hostname + TYPE TQString + CONST_REF + CREATE getHostname + ENDARG +ENDFUNCTION +# TQStringList getOpenFileNames( const TQString &filter, +# TQString* workingDirectory, TQWidget *parent, const char* name, +# const TQString& caption, TQString* selectedFilter, bool multiple ); +# +FUNCTION getOpenFileNames + RETURN_TYPE TQStringList + DELAYED_RETURN + ADD_APPINFO + ARG filter + TYPE TQString + CONST_REF + CONVERSION convertFileFilter + ENDARG + ARG workingDirectory + TYPE TQString + NEEDS_DEREF + OUT_ARGUMENT + ENDARG + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE TQCString + CONST_REF + ORIG_TYPE const char* + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG selectedFilter + TYPE TQString + NEEDS_DEREF + OUT_ARGUMENT + CONVERSION convertFileFilter + BACK_CONVERSION convertBackFileFilter + ENDARG + ARG multiple + TYPE bool + ENDARG +ENDFUNCTION + +# TQString getSaveFileName( const TQString &initialSelection, +# const TQString &filter, TQString* workingDirectory, TQWidget *parent, +# const char* name, const TQString& caption, TQString* selectedFilter ); +# +FUNCTION getSaveFileName + RETURN_TYPE TQString + DELAYED_RETURN + ADD_APPINFO + ARG initialSelection + TYPE TQString + CONST_REF + ENDARG + ARG filter + TYPE TQString + CONST_REF + CONVERSION convertFileFilter + ENDARG + ARG workingDirectory + TYPE TQString + NEEDS_DEREF + OUT_ARGUMENT + ENDARG + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE TQCString + CONST_REF + ORIG_TYPE const char* + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG selectedFilter + TYPE TQString + NEEDS_DEREF + OUT_ARGUMENT + CONVERSION convertFileFilter + BACK_CONVERSION convertBackFileFilter + ENDARG +ENDFUNCTION + +# TQString getExistingDirectory( const TQString &initialDirectory, +# TQWidget* parent, const char* name, const TQString& caption ); +# +FUNCTION getExistingDirectory + RETURN_TYPE TQString + DELAYED_RETURN + ADD_APPINFO + ARG initialDirectory + TYPE TQString + CONST_REF + ENDARG + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE TQCString + CONST_REF + ORIG_TYPE const char* + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG +ENDFUNCTION + +# TQColor getColor( const TQColor& color, TQWidget* parent, const char* name ); +# +FUNCTION getColor + RETURN_TYPE TQColor + DELAYED_RETURN + ADD_APPINFO + ARG color + TYPE TQColor + CONST_REF + ENDARG + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE TQCString + CONST_REF + ORIG_TYPE const char* + ENDARG +ENDFUNCTION + +# TQFont getFont( bool* ok, const TQFont* def, TQWidget *parent, const char* name); +FUNCTION getFont + RETURN_TYPE TQFont + DELAYED_RETURN + ADD_APPINFO + ARG ok + TYPE bool + NEEDS_DEREF + OUT_ARGUMENT + ENDARG + ARG def + TYPE TQFont + ORIG_TYPE const TQFont* + ORIG_CONVERSION fontPtrToFontRef + CONST_REF + ENDARG + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG name + TYPE TQCString + CONST_REF + ORIG_TYPE const char* + ENDARG +ENDFUNCTION + +# int messageBox1( int type, TQWidget *parent, const TQString& caption, const TQString& 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 TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int information( TQWidget *parent, const TQString& caption, const TQString& text, +# int button0, int button1, int button2 ); +FUNCTION information + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int question( TQWidget *parent, const TQString& caption, const TQString& text, +# int button0, int button1, int button2 ); +FUNCTION question + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int warning( TQWidget *parent, const TQString& caption, const TQString& text, +# int button0, int button1, int button2 ); +FUNCTION warning + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int critical( TQWidget *parent, const TQString& caption, const TQString& text, +# int button0, int button1, int button2 ); +FUNCTION critical + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0 + TYPE int + ENDARG + ARG button1 + TYPE int + ENDARG + ARG button2 + TYPE int + ENDARG +ENDFUNCTION + +# int messageBox2( int type, TQWidget* parent, const TQString& caption, const TQString& text, +# const TQString& button0Text, const TQString& button1Text, const TQString& 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 TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0Text + TYPE TQString + CONST_REF + ENDARG + ARG button1Text + TYPE TQString + CONST_REF + ENDARG + ARG button2Text + TYPE TQString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int information( TQWidget* parent, const TQString& caption, const TQString& text, +# const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION information + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0Text + TYPE TQString + CONST_REF + ENDARG + ARG button1Text + TYPE TQString + CONST_REF + ENDARG + ARG button2Text + TYPE TQString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int question( TQWidget* parent, const TQString& caption, const TQString& text, +# const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION question + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0Text + TYPE TQString + CONST_REF + ENDARG + ARG button1Text + TYPE TQString + CONST_REF + ENDARG + ARG button2Text + TYPE TQString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int warning( TQWidget* parent, const TQString& caption, const TQString& text, +# const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION warning + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0Text + TYPE TQString + CONST_REF + ENDARG + ARG button1Text + TYPE TQString + CONST_REF + ENDARG + ARG button2Text + TYPE TQString + CONST_REF + ENDARG + ARG defaultButton + TYPE int + ENDARG + ARG escapeButton + TYPE int + ENDARG +ENDFUNCTION + +# int critical( TQWidget* parent, const TQString& caption, const TQString& text, +# const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, +# int defaultButton, int escapeButton ); +FUNCTION critical + RETURN_TYPE int + DELAYED_RETURN + ONLY_QT + ARG parent + TYPE long + ORIG_TYPE TQWidget* + ORIG_CONVERSION parentToWinId + PARENT + ENDARG + ARG caption + TYPE TQString + CONST_REF + ENDARG + ARG text + TYPE TQString + CONST_REF + ENDARG + ARG button0Text + TYPE TQString + CONST_REF + ENDARG + ARG button1Text + TYPE TQString + CONST_REF + ENDARG + ARG button2Text + TYPE TQString + 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..ea2e04194 --- /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 && tqApp->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 && tqApp->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 && tqApp->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..b0d5fd517 --- /dev/null +++ b/tqt3integration/utils/qt/in/qtkdeintegration_x11_0.cpp.cmake @@ -0,0 +1 @@ +#define TQTKDELIBDIR @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..947109afd --- /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 tdebase 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 "tqtkdeintegration_x11_p.h" + +#include <tqcolordialog.h> +#include <tqfiledialog.h> +#include <tqfontdialog.h> +#include <tqlibrary.h> +#include <tqregexp.h> +#include <tqmessagebox.h> +#include <tqapplication.h> +#include <stdlib.h> + +bool TQKDEIntegration::inited = false; +bool TQKDEIntegration::enable = false; + +bool TQKDEIntegration::enabled() + { + if( !inited ) + initLibrary(); + return enable; + } + +static TQCString findLibrary() + { + if( getenv( "TDE_FULL_SESSION" ) == NULL ) + return ""; + if( getenv( "TDE_FULL_SESSION" )[ 0 ] != 't' && getenv( "TDE_FULL_SESSION" )[ 0 ] != '1' ) + return ""; + if( getenv( "TQT_NO_KDE_INTEGRATION" ) == NULL + || getenv( "TQT_NO_KDE_INTEGRATION" )[ 0 ] == '0' ) + { + return TQCString( TQTKDELIBDIR ) + "/libqtkde"; + } + return ""; + } + +static long parentToWinId( const TQWidget* w ) + { + if( w != NULL ) + return w->topLevelWidget()->winId(); + // try to find some usable parent + if( tqApp->activeWindow() && w != tqApp->activeWindow()) + return tqApp->activeWindow()->winId(); + if( tqApp->mainWidget() && w != tqApp->mainWidget()) + return tqApp->mainWidget()->winId(); + return 0; + } + +inline static TQFont fontPtrToFontRef( const TQFont* f ) + { + return f != NULL ? *f : TQFont(); + } + +// --- 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..ffd8d1fe6 --- /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 tdebase 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 TQKDEIntegration::information( TQWidget* parent, const TQString& caption, + const TQString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + TQMessageBox::Information, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int TQKDEIntegration::question( TQWidget* parent, const TQString& caption, + const TQString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + TQMessageBox::Question, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int TQKDEIntegration::warning( TQWidget* parent, const TQString& caption, + const TQString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + TQMessageBox::Warning, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int TQKDEIntegration::critical( TQWidget* parent, const TQString& caption, + const TQString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + TQMessageBox::Critical, parentToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int TQKDEIntegration::information( TQWidget* parent, const TQString& caption, + const TQString& text, const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + TQMessageBox::Information, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int TQKDEIntegration::question( TQWidget* parent, const TQString& caption, + const TQString& text, const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + TQMessageBox::Question, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int TQKDEIntegration::warning( TQWidget* parent, const TQString& caption, + const TQString& text, const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + TQMessageBox::Warning, parentToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int TQKDEIntegration::critical( TQWidget* parent, const TQString& caption, + const TQString& text, const TQString& button0Text, const TQString& button1Text, const TQString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + TQMessageBox::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..2a23b74b7 --- /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 tdebase 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 TQKDEINTEGRATION_H +#define TQKDEINTEGRATION_H + +#include <tqstringlist.h> + +class TQLibrary; +class TQWidget; +class TQColor; +class TQFont; + +class TQKDEIntegration + { + 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..63d569fc0 --- /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 tdebase 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 |