diff options
Diffstat (limited to 'tqt3integration')
26 files changed, 2992 insertions, 0 deletions
diff --git a/tqt3integration/CMakeLists.txt b/tqt3integration/CMakeLists.txt new file mode 100644 index 000000000..01ce8a76b --- /dev/null +++ b/tqt3integration/CMakeLists.txt @@ -0,0 +1,14 @@ +################################################# +# +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +add_subdirectory( libqtkde ) +add_subdirectory( module ) +add_subdirectory( utils )
\ No newline at end of file diff --git a/tqt3integration/Makefile.am b/tqt3integration/Makefile.am new file mode 100644 index 000000000..dc0a666a1 --- /dev/null +++ b/tqt3integration/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = libqtkde module utils diff --git a/tqt3integration/README b/tqt3integration/README new file mode 100644 index 000000000..0e81a7ed6 --- /dev/null +++ b/tqt3integration/README @@ -0,0 +1,36 @@ +Qt/KDE UI integration. Makes Qt-only apps use several KDE dialogs without any modifications +to these applications. Can be turned off by setting $QT_NO_KDE_INTEGRATION. + +Installation: +Just plain make && make install. +Additionally 'make generate' needs to be done in utils/, and Qt needs to be patched using the sources +generated in utils/qt . Patch should be applied, the .cpp/.h files belong to src/kernel/ , +the .h file additionally should go to include/private . + + + + +===== + +- nastavovat WM_CLASS i vsem poddialogum tech, ktere se zobrazuji? + +v kded nesmi byt nic, co znovu vstupuje do event loop + - udelat na to test + - spravit tdewallet + +blokovat uzivatelsky vstup, jako to dela kapp pro dcop + +obcas se dela demand-attention v taskbaru +- navic je problem s focus stealing prevention, kdyz aplikace nejdriv zobrazi jen samotny dialog + - delat updateUserTimestamp? + +filedialogs + - pamatovat si working directory pro kazdou dcop konexi, a pouzit, kdyz neni dano? + - vraceni selectedFilter uplne nefunguje, protoze KFileDialog nevraci cely filter (*.cpp|C++ File), alen jen *.cpp + +getColor() + - KColorDialog neumi alpha channel - ale to mac taky ne + +getFont() + - zmenil jsem QFont* def na const QFont& def, tj. vzdy je k dispozici, neexistence se da null hodnotou diff --git a/tqt3integration/configure.in.in b/tqt3integration/configure.in.in new file mode 100644 index 000000000..8e36cc206 --- /dev/null +++ b/tqt3integration/configure.in.in @@ -0,0 +1,5 @@ +qtkdelibdir="\${kde_moduledir}/plugins/integration" +KDE_EXPAND_MAKEVAR(ac_qtkdelibdir,qtkdelibdir) +AC_SUBST(qtkdelibdir) +AC_SUBST(ac_qtkdelibdir) +dnl AC_OUTPUT(qtkdeintegration/utils/qt/in/qtkdeintegration_x11_0.cpp) diff --git a/tqt3integration/libqtkde/CMakeLists.txt b/tqt3integration/libqtkde/CMakeLists.txt new file mode 100644 index 000000000..44952e35f --- /dev/null +++ b/tqt3integration/libqtkde/CMakeLists.txt @@ -0,0 +1,33 @@ +################################################# +# +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/tqt3integration/utils/ + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + +##### libqtkde (shared) #################### + +tde_add_library( qtkde SHARED AUTOMOC + SOURCES qtkde.cpp + VERSION 0.0.0 + LINK tdeui-shared + DEPENDENCIES generate_tqt3_bindings + DESTINATION "${PLUGIN_INSTALL_DIR}/plugins/integration/" +)
\ No newline at end of file diff --git a/tqt3integration/libqtkde/Makefile.am b/tqt3integration/libqtkde/Makefile.am new file mode 100644 index 000000000..8675e19dd --- /dev/null +++ b/tqt3integration/libqtkde/Makefile.am @@ -0,0 +1,15 @@ +qtkdelib_LTLIBRARIES = libqtkde.la + +libqtkde_la_SOURCES = qtkde.cpp +libqtkde_la_LIBADD = -lDCOP +libqtkde_la_LDFLAGS = $(all_libraries) -module -no-undefined -avoid-version + +CLEANFILES = qtkde_functions.cpp + +INCLUDES = $(all_includes) +METASOURCES = AUTO + +qtkde.lo : qtkde_functions.cpp + +qtkde_functions.cpp : ../utils/qtkde_functions.cpp + cp -f ../utils/qtkde_functions.cpp . || exit 1 diff --git a/tqt3integration/libqtkde/qtkde.cpp b/tqt3integration/libqtkde/qtkde.cpp new file mode 100644 index 000000000..96ad72429 --- /dev/null +++ b/tqt3integration/libqtkde/qtkde.cpp @@ -0,0 +1,147 @@ + /* + * 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 "qtkde.h" + +#include <assert.h> +#include <dcopclient.h> +#include <dcoptypes.h> +#include <tqapplication.h> +#include <tqregexp.h> +#include <tqstringlist.h> +#include <tqwidget.h> +#include <unistd.h> + +#include <X11/Xlib.h> + +extern Time tqt_x_time; + +static TQString convertFileFilter( const TQString& filter ) + { + if( filter.isEmpty()) + return filter; + TQString f2 = filter; + f2.replace( '\n', ";;" ); // TQt says separator is ";;", but it also silently accepts newline + f2.replace( '/', "\\/" ); // escape /'s for KFileDialog + TQStringList items = TQStringList::split( ";;", f2 ); + TQRegExp reg( "\\((.*)\\)" ); + for( TQStringList::Iterator it = items.begin(); + it != items.end(); + ++it ) + { + if( reg.search( *it )) + *it = reg.cap( 1 ) + '|' + *it; + } + return items.join( "\n" ); + } + +static TQString convertBackFileFilter( const TQString& filter ) + { + if( filter.isEmpty()) + return filter; + TQStringList items = TQStringList::split( "\n", filter ); + for( TQStringList::Iterator it = items.begin(); + it != items.end(); + ++it ) + { + int pos = (*it).find( '|' ); + if( pos >= 0 ) + (*it) = (*it).mid( pos + 1 ); + } + return items.join( ";;" ); + } + +static DCOPClient* dcopClient() + { + DCOPClient* dcop = DCOPClient::mainClient(); + if( dcop == NULL ) + { + static DCOPClient* dcop_private; + if( dcop_private == NULL ) + { + dcop_private = new DCOPClient; + dcop_private->attach(); + } + dcop = dcop_private; + } + static bool prepared = false; + if( !prepared ) + { + assert( tqApp != NULL ); // TODO + prepared = true; + dcop->bindToApp(); + if( !tqApp->inherits( "TDEApplication" )) // KApp takes care of input blocking + { + static qtkde_EventLoop* loop = new qtkde_EventLoop; + TQObject::connect( dcop, TQT_SIGNAL( blockUserInput( bool )), loop, TQT_SLOT( block( bool ))); + } + } + return dcop; + } + +// defined in qapplication_x11.cpp +typedef int (*QX11EventFilter) (XEvent*); +extern QX11EventFilter tqt_set_x11_event_filter (QX11EventFilter filter); + +static QX11EventFilter old_filter; + +static int input_filter( XEvent* e ) + { + switch( e->type ) + { + case ButtonPress: + case ButtonRelease: + case KeyPress: + case KeyRelease: + case MotionNotify: + case EnterNotify: + case LeaveNotify: + return true; + default: + break; + } + if( old_filter != NULL ) + return old_filter( e ); + return false; + } + +void qtkde_EventLoop::block( bool b ) + { + if( b ) + old_filter = tqt_set_x11_event_filter( input_filter ); + else + tqt_set_x11_event_filter( old_filter ); + } + +// duped in kded module +static TQString getHostname() + { + char hostname[ 256 ]; + if( gethostname( hostname, 255 ) == 0 ) + { + hostname[ 255 ] = '\0'; + return hostname; + } + return ""; + } + +#include "tqtkde_functions.cpp" + +#include "qtkde.moc" diff --git a/tqt3integration/libqtkde/qtkde.h b/tqt3integration/libqtkde/qtkde.h new file mode 100644 index 000000000..8ee2c061d --- /dev/null +++ b/tqt3integration/libqtkde/qtkde.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 _TQTKDE_H +#define _TQTKDE_H + +#include <tqobject.h> + +class qtkde_EventLoop + : public TQObject + { + Q_OBJECT + + public slots: + void block( bool ); + }; + +#endif diff --git a/tqt3integration/module/CMakeLists.txt b/tqt3integration/module/CMakeLists.txt new file mode 100644 index 000000000..dd7a62ebe --- /dev/null +++ b/tqt3integration/module/CMakeLists.txt @@ -0,0 +1,42 @@ +################################################# +# +# (C) 2011 Timothy Pearson +# kb9vqf (AT) pearsoncomputing.net +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/tqt3integration/utils/ + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + +##### service desktop file(s) ########################## + +install( FILES kdeintegration.desktop DESTINATION ${SERVICES_INSTALL_DIR}/kded ) + +##### kded_kdeintegration (module) ##################### + +set( target kded_kdeintegration ) + +set( ${target}_SRCS + module.cpp +) + +tde_add_kpart( ${target} AUTOMOC + SOURCES ${${target}_SRCS} + LINK tdeinit_kded-shared + DEPENDENCIES generate_tqt3_bindings + DESTINATION ${PLUGIN_INSTALL_DIR} +)
\ No newline at end of file diff --git a/tqt3integration/module/Makefile.am b/tqt3integration/module/Makefile.am new file mode 100644 index 000000000..1012d5e7a --- /dev/null +++ b/tqt3integration/module/Makefile.am @@ -0,0 +1,21 @@ +INCLUDES= $(all_includes) + +kde_module_LTLIBRARIES = kded_kdeintegration.la + +kded_kdeintegration_la_SOURCES = module.cpp +kded_kdeintegration_la_METASOURCES = AUTO +kded_kdeintegration_la_LDFLAGS = $(all_libraries) -module -avoid-version +kded_kdeintegration_la_LIBADD = $(LIB_TDEIO) + +CLEANFILES = module_functions.cpp module_functions.h + +servicesdir = $(kde_servicesdir)/kded +services_DATA = kdeintegration.desktop + +module.lo : module_functions.cpp module_functions.h + +module_functions.cpp : ../utils/module_functions.cpp + cp -f ../utils/module_functions.cpp . || exit 1 + +module_functions.h : ../utils/module_functions.h + cp -f ../utils/module_functions.h . || exit 1 diff --git a/tqt3integration/module/kdeintegration.desktop b/tqt3integration/module/kdeintegration.desktop new file mode 100644 index 000000000..406c1fd39 --- /dev/null +++ b/tqt3integration/module/kdeintegration.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service + +X-TDE-ServiceTypes=KDEDModule +X-TDE-ModuleType=Library +X-TDE-Library=kdeintegration +X-TDE-Factory=kdeintegration +X-TDE-Kded-autoload=false +X-TDE-Kded-load-on-demand=true + +Name=TDE Integration Module +Comment=Module for integrating UI of non-TDE applications diff --git a/tqt3integration/module/module.cpp b/tqt3integration/module/module.cpp new file mode 100644 index 000000000..79ac1325f --- /dev/null +++ b/tqt3integration/module/module.cpp @@ -0,0 +1,378 @@ + /* + * 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 "module.h" + +#include <assert.h> +#include <dcopclient.h> +#include <tdeapplication.h> +#include <kdebug.h> +#include <tdefiledialog.h> +#include <tdeglobalsettings.h> +#include <tdelocale.h> +#include <tderecentdocument.h> +#include <twin.h> +#include <tqtimer.h> +#include <stdlib.h> +#include <unistd.h> +#include <tdemessagebox.h> + +#include <X11/Xutil.h> + +extern "C" +{ + KDE_EXPORT KDEDModule *create_kdeintegration( const TQCString& obj ) + { + return new KDEIntegration::Module( obj ); + } +}; + +namespace KDEIntegration +{ + +static void prepareDialog( TQWidget* w, long parent, const TQCString& wmclass1, const TQCString& wmclass2 ) + { + XClassHint hints; + hints.res_name = ( char* ) ( const char* ) wmclass1; + hints.res_class = ( char* ) ( const char* ) wmclass2; + XSetClassHint( tqt_xdisplay(), w->winId(), &hints ); + KWin::setMainWindow( w, parent ); + KWin::setState( w->winId(), NET::Modal ); + KWin::WindowInfo info = KWin::windowInfo( parent, (unsigned long)NET::WMGeometry ); + if( info.valid()) + w->move( info.geometry().x() + ( info.geometry().width() - w->width())/2, + info.geometry().y() + ( info.geometry().height()- w->height())/2 ); + } + +// duped in qtkde +static TQString getHostname() + { + char hostname[ 256 ]; + if( gethostname( hostname, 255 ) == 0 ) + { + hostname[ 255 ] = '\0'; + return hostname; + } + return ""; + } + +bool Module::initializeIntegration( const TQString& hostname ) + { + if( hostname != getHostname()) + return false; + // multihead support in KDE is just a hack, it wouldn't work very well anyway + if( TDEGlobalSettings::isMultiHead()) + return false; + return true; + } + +void* Module::getOpenFileNames( const TQString& filter, TQString workingDirectory, long parent, + const TQCString& name, const TQString& caption, TQString /*selectedFilter*/, bool multiple, + const TQCString& wmclass1, const TQCString& wmclass2 ) + { + KFileDialog* dlg = new KFileDialog( workingDirectory, filter, 0, name.isEmpty() ? "filedialog" : name, false); + prepareDialog( dlg, parent, wmclass1, wmclass2 ); + dlg->setOperationMode( KFileDialog::Opening ); + dlg->setMode(( multiple ? KFile::Files : KFile::File ) | KFile::LocalOnly ); + dlg->setPlainCaption( caption.isNull() ? i18n("Open") : caption ); +// TODO dlg->ops->clearHistory(); + connect( dlg, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + dlg->show(); + return dlg; + } + +void* Module::getSaveFileName( const TQString& initialSelection, const TQString& filter, + TQString workingDirectory, long parent, const TQCString& name, const TQString& caption, TQString /*selectedFilter*/, + const TQCString& wmclass1, const TQCString& wmclass2 ) + { + TQString initial = workingDirectory; + if( !initialSelection.isEmpty()) + { + if( initial.right( 1 ) != TQChar( '/' )) + initial += '/'; + initial += initialSelection; + } + bool specialDir = initial.at(0) == ':'; + KFileDialog* dlg = new KFileDialog( specialDir ? initial : TQString(), filter, 0, + name.isEmpty() ? "filedialog" : name, false); + if ( !specialDir ) + dlg->setSelection( initial ); // may also be a filename + prepareDialog( dlg, parent, wmclass1, wmclass2 ); + dlg->setOperationMode( KFileDialog::Saving ); + dlg->setPlainCaption( caption.isNull() ? i18n("Save As") : caption ); + connect( dlg, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + dlg->show(); + return dlg; + } + + +void* Module::getExistingDirectory( const TQString& initialDirectory, long parent, + const TQCString& name, const TQString& caption, const TQCString& wmclass1, const TQCString& wmclass2 ) + { + KDirSelectDialog* dlg = new KDirSelectDialog( initialDirectory, true, 0, + name.isEmpty() ? name : "kdirselect dialog", false ); + prepareDialog( dlg, parent, wmclass1, wmclass2 ); + dlg->setPlainCaption( caption.isNull() ? i18n( "Select Folder" ) : caption ); + connect( dlg, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + dlg->show(); + return dlg; + } + +void* Module::getColor( const TQColor& color, long parent, const TQCString& name, + const TQCString& wmclass1, const TQCString& wmclass2 ) + { + KColorDialog* dlg = new KColorDialog( NULL, name.isEmpty() ? name : "colordialog", true ); + dlg->setModal( false ); // KColorDialog creates its buttons depending on modality :( + if( color.isValid()) + dlg->setColor( color ); + prepareDialog( dlg, parent, wmclass1, wmclass2 ); + dlg->setPlainCaption( i18n( "Select Color" )); + connect( dlg, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + dlg->show(); + return dlg; + } + +void* Module::getFont( bool /*ok*/, const TQFont& def, long parent, const TQCString& name, + const TQCString& wmclass1, const TQCString& wmclass2 ) + { + TDEFontDialog* dlg = new TDEFontDialog( NULL, name.isEmpty() ? name : "Font Selector", false, false ); + dlg->setFont( def, false ); + prepareDialog( dlg, parent, wmclass1, wmclass2 ); + dlg->setPlainCaption( i18n( "Select Font" )); + connect( dlg, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + dlg->show(); + return dlg; + } + +namespace +{ +struct btns + { + int buttons[ 3 ]; + }; +} +static TQMap< KDialogBase*, btns > msgbox1_buttons; + +void* Module::messageBox1( int type, long parent, const TQString& caption, const TQString& text, + int button0, int button1, int button2, const TQCString& wmclass1, const TQCString& wmclass2 ) + { + static const char* const caps[ 4 ] + = { I18N_NOOP( "Information" ), I18N_NOOP( "Question" ), I18N_NOOP( "Warning" ), I18N_NOOP( "Error" )}; + int buttons[ 3 ] = { button0 & TQMessageBox::ButtonMask, + button1 & TQMessageBox::ButtonMask, button2 & TQMessageBox::ButtonMask }; + KGuiItem buttonItems[ 3 ]; + for( int i = 0; + i < 3; + ++i ) + switch( buttons[ i ] ) + { + case TQMessageBox::Ok: + buttonItems[ i ] = KStdGuiItem::ok(); + break; + case TQMessageBox::Cancel: + buttonItems[ i ] = KStdGuiItem::cancel(); + break; + case TQMessageBox::Yes: + buttonItems[ i ] = KStdGuiItem::yes(); + break; + case TQMessageBox::No: + buttonItems[ i ] = KStdGuiItem::no(); + break; + case TQMessageBox::Abort: + buttonItems[ i ] = KGuiItem( i18n( "&Abort" )); + break; + case TQMessageBox::Retry: + buttonItems[ i ] = KGuiItem( "&Retry" ); + break; + case TQMessageBox::Ignore: + buttonItems[ i ] = KGuiItem( "&Ignore" ); + break; + case TQMessageBox::YesAll: + buttonItems[ i ] = KStdGuiItem::yes(); + buttonItems[ i ].setText( i18n( "Yes to &All" )); + break; + case TQMessageBox::NoAll: + buttonItems[ i ] = KStdGuiItem::no(); + buttonItems[ i ].setText( i18n( "N&o to All" )); + break; + default: + break; + }; + KDialogBase::ButtonCode defaultButton = KDialogBase::NoDefault; + if( button0 & TQMessageBox::Default ) + defaultButton = KDialogBase::Yes; + else if( button1 & TQMessageBox::Default ) + defaultButton = KDialogBase::No; + else if( button2 & TQMessageBox::Default ) + defaultButton = KDialogBase::Cancel; + else // TODO KDialogBase's handling of NoDefault has strange focus effects + defaultButton = KDialogBase::Yes; + KDialogBase::ButtonCode escapeButton = KDialogBase::Cancel; + if( button0 & TQMessageBox::Escape ) + escapeButton = KDialogBase::Yes; + else if( button1 & TQMessageBox::Escape ) + escapeButton = KDialogBase::No; + else if( button2 & TQMessageBox::Escape ) + escapeButton = KDialogBase::Cancel; + KDialogBase *dialog= new KDialogBase( + caption.isEmpty() ? i18n( caps[ type ] ) : caption, + KDialogBase::Yes + | ( buttons[ 1 ] == TQMessageBox::NoButton ? 0 : int( KDialogBase::No )) + | ( buttons[ 2 ] == TQMessageBox::NoButton ? 0 : int( KDialogBase::Cancel )), + defaultButton, escapeButton, + NULL, "messageBox2", true, true, + buttonItems[ 0 ], buttonItems[ 1 ],buttonItems[ 2 ] ); + bool checkboxResult = false; + KMessageBox::createKMessageBox(dialog, static_cast< TQMessageBox::Icon >( type ), text, TQStringList(), + TQString(), + &checkboxResult, KMessageBox::Notify | KMessageBox::NoExec); + prepareDialog( dialog, parent, wmclass1, wmclass2 ); + dialog->setPlainCaption( caption ); + connect( dialog, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + btns b; + b.buttons[ 0 ] = buttons[ 0 ]; + b.buttons[ 1 ] = buttons[ 1 ]; + b.buttons[ 2 ] = buttons[ 2 ]; + msgbox1_buttons[ dialog ] = b; + dialog->show(); + return dialog; + } + +void* Module::messageBox2( int type, long parent, const TQString& caption, const TQString& text, const TQString& button0Text, + const TQString& button1Text, const TQString& button2Text, int defaultButton, int escapeButton, + const TQCString& wmclass1, const TQCString& wmclass2 ) + { + static KDialogBase::ButtonCode map[ 4 ] + = { KDialogBase::NoDefault, KDialogBase::Yes, KDialogBase::No, KDialogBase::Cancel }; + static const char* const caps[ 4 ] + = { I18N_NOOP( "Information" ), I18N_NOOP( "Question" ), I18N_NOOP( "Warning" ), I18N_NOOP( "Error" )}; + KDialogBase *dialog= new KDialogBase( + caption.isEmpty() ? i18n( caps[ type ] ) : caption, + KDialogBase::Yes + | ( button1Text.isEmpty() ? 0 : int( KDialogBase::No )) + | ( button2Text.isEmpty() ? 0 : int( KDialogBase::Cancel )), + map[ defaultButton + 1 ], map[ escapeButton + 1 ], + NULL, "messageBox2", true, true, + button0Text.isEmpty() ? KStdGuiItem::ok() : KGuiItem( button0Text ), button1Text,button2Text); + bool checkboxResult = false; + KMessageBox::createKMessageBox(dialog, static_cast< TQMessageBox::Icon >( type ), text, TQStringList(), + TQString(), + &checkboxResult, KMessageBox::Notify | KMessageBox::NoExec); + prepareDialog( dialog, parent, wmclass1, wmclass2 ); + dialog->setPlainCaption( caption ); + connect( dialog, TQT_SIGNAL( dialogDone( int )), TQT_SLOT( dialogDone( int ))); + dialog->show(); + return dialog; + } + +void Module::dialogDone( int result ) + { + void* handle = (void*)sender(); // TODO? + JobData job = jobs[ handle ]; + switch( job.type ) + { + case JobData::GetOpenFileNames: + { + KFileDialog* dlg = static_cast< KFileDialog* >( handle ); + post_getOpenFileNames( dlg, result == TQDialog::Accepted ? dlg->selectedFiles() : TQStringList(), + dlg->baseURL().path(), dlg->currentFilter()); + dlg->deleteLater(); + break; + } + case JobData::GetSaveFileName: + { + KFileDialog* dlg = static_cast< KFileDialog* >( handle ); + TQString filename = result == TQDialog::Accepted ? dlg->selectedFile() : TQString(); + if (!filename.isEmpty()) + TDERecentDocument::add(filename); + post_getSaveFileName( dlg, filename, dlg->baseURL().path(), dlg->currentFilter()); + dlg->deleteLater(); + break; + } + case JobData::GetExistingDirectory: + { + KDirSelectDialog* dlg = static_cast< KDirSelectDialog* >( handle ); + post_getExistingDirectory( dlg, result == TQDialog::Accepted ? dlg->url().path() : TQString()); + dlg->deleteLater(); + break; + } + case JobData::GetColor: + { + KColorDialog* dlg = static_cast< KColorDialog* >( handle ); + post_getColor( dlg, result == TQDialog::Accepted ? dlg->color() : TQColor()); + dlg->deleteLater(); + break; + } + case JobData::GetFont: + { + TDEFontDialog* dlg = static_cast< TDEFontDialog* >( handle ); + post_getFont( dlg, result == TQDialog::Accepted ? dlg->font() : TQFont(), result == TQDialog::Accepted ); + dlg->deleteLater(); + break; + } + case JobData::MessageBox1: + { + KDialogBase* dlg = static_cast< KDialogBase* >( handle ); + btns b = msgbox1_buttons[ dlg ]; + int res; + if( result == KDialogBase::Cancel ) + res = b.buttons[ 2 ]; + else if( result == KDialogBase::Yes ) + res = b.buttons[ 0 ]; + else + res = b.buttons[ 1 ]; + msgbox1_buttons.remove( dlg ); + post_messageBox1( dlg, res ); +// if (checkboxResult) +// saveDontShowAgainYesNo(dontAskAgainName, res); + dlg->deleteLater(); + break; + } + case JobData::MessageBox2: + { + KDialogBase* dlg = static_cast< KDialogBase* >( handle ); + int res; + if( result == KDialogBase::Cancel ) + res = 2; + else if( result == KDialogBase::Yes ) + res = 0; + else if( result == KDialogBase::No ) + res = 1; + else + res = -1; + post_messageBox2( dlg, res ); +// if (checkboxResult) +// saveDontShowAgainYesNo(dontAskAgainName, res); + dlg->deleteLater(); + break; + } + } + } + +Module::Module( const TQCString& obj ) + : KDEDModule( obj ) + { + } + +#include "module_functions.cpp" + +} // namespace + +#include "module.moc" diff --git a/tqt3integration/module/module.h b/tqt3integration/module/module.h new file mode 100644 index 000000000..1d805bcc7 --- /dev/null +++ b/tqt3integration/module/module.h @@ -0,0 +1,160 @@ + /* + * 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 _INTEGRATION_MODULE_H_ +#define _INTEGRATION_MODULE_H_ + +#include <kcolordialog.h> +#include <kdedmodule.h> +#include <kdirselectdialog.h> +#include <tdefiledialog.h> +#include <tdefontdialog.h> +#include <kdialogbase.h> + +class DCOPClientTransaction; + +namespace KDEIntegration +{ + +class Module + : public KDEDModule + { + Q_OBJECT + + public: + Module( const TQCString& obj ); + // DCOP + virtual bool process(const TQCString &fun, const TQByteArray &data, + TQCString &replyType, TQByteArray &replyData); + virtual QCStringList functions(); + virtual QCStringList interfaces(); + private slots: + void dialogDone( int result ); + private: + struct JobData + { + DCOPClientTransaction* transaction; + enum + { + GetOpenFileNames, + GetSaveFileName, + GetExistingDirectory, + GetColor, + GetFont, + MessageBox1, + MessageBox2 + } type; + }; + TQMap< void*, JobData > jobs; +#include "module_functions.h" + }; + +class KFileDialog + : public ::KFileDialog + { + Q_OBJECT + + public: + KFileDialog(const TQString& startDir, const TQString& filter, + TQWidget *parent, const char *name, bool modal) + : ::KFileDialog( startDir, filter, parent, name, modal ) + {} + signals: + void dialogDone( int result ); + protected: + virtual void done( int r ) { ::KFileDialog::done( r ); emit dialogDone( r ); } + }; + + +class KDirSelectDialog + : public ::KDirSelectDialog + { + Q_OBJECT + + public: + KDirSelectDialog(const TQString& startDir, bool localOnly, + TQWidget *parent, const char *name, bool modal) + : ::KDirSelectDialog( startDir, localOnly, parent, name, modal ) + {} + signals: + void dialogDone( int result ); + protected: + virtual void done( int r ) { ::KDirSelectDialog::done( r ); emit dialogDone( r ); } + }; + + +class KColorDialog + : public ::KColorDialog + { + Q_OBJECT + + public: + KColorDialog( TQWidget *parent, const char *name, bool modal ) + : ::KColorDialog( parent, name, modal ) + {} + signals: + void dialogDone( int result ); + protected: + virtual void done( int r ) { ::KColorDialog::done( r ); emit dialogDone( r ); } // hmm? + }; + +class TDEFontDialog + : public ::TDEFontDialog + { + Q_OBJECT + + public: + TDEFontDialog( TQWidget *parent, const char *name, bool onlyFixed, bool modal, + const TQStringList &fontlist = TQStringList(), bool makeFrame = true, + bool diff = false, TQButton::ToggleState *sizeIsRelativeState = 0L ) + : ::TDEFontDialog( parent, name, onlyFixed, modal, fontlist, makeFrame, diff, sizeIsRelativeState ) + {} + signals: + void dialogDone( int result ); + protected: + virtual void done( int r ) { ::TDEFontDialog::done( r ); emit dialogDone( r ); } + }; + +class KDialogBase + : public ::KDialogBase + { + Q_OBJECT + + public: + KDialogBase( const TQString &caption, int buttonMask=Yes|No|Cancel, + ButtonCode defaultButton=Yes, ButtonCode escapeButton=Cancel, + TQWidget *parent=0, const char *name=0, + bool modal=true, bool separator=false, + const KGuiItem &yes = KStdGuiItem::yes(), // i18n("&Yes") + const KGuiItem &no = KStdGuiItem::no(), // i18n("&No"), + const KGuiItem &cancel = KStdGuiItem::cancel()) // i18n("&Cancel") + : ::KDialogBase( caption, buttonMask, defaultButton, escapeButton, parent, name, modal, separator, + yes, no, cancel ) + {} + signals: + void dialogDone( int result ); + protected: + virtual void done( int r ) { ::KDialogBase::done( r ); emit dialogDone( r ); } + }; + + +} // namespace + +#endif 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 |