diff options
Diffstat (limited to 'tools/designer/app/main.cpp')
-rw-r--r-- | tools/designer/app/main.cpp | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/tools/designer/app/main.cpp b/tools/designer/app/main.cpp new file mode 100644 index 000000000..a3046eec0 --- /dev/null +++ b/tools/designer/app/main.cpp @@ -0,0 +1,228 @@ +/********************************************************************** +** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. +** +** This file is part of TQt Designer. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free TQt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing retquirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at [email protected]. +** +** Licensees holding valid TQt Commercial licenses may use this file in +** accordance with the TQt Commercial License Agreement provided with +** the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include "qplatformdefs.h" + +// SCO OpenServer redefines raise -> kill +#if defined(raise) +# undef raise +#endif + +#include "mainwindow.h" +#include "formwindow.h" + +#include "designerapp.h" + +#include <qtextstream.h> +#include <qobjectlist.h> +#include <qsettings.h> +#include <qsplashscreen.h> +#include <qdir.h> + +#include <stdlib.h> +#include <signal.h> + +// SCO OpenServer redefines raise -> kill +#if defined(raise) +# undef raise +#endif + +#if defined(Q_WS_WIN) +#include <qt_windows.h> +#include <process.h> +#endif + +#if defined(Q_OS_UNIX) +#if defined(Q_C_CALLBACKS) +extern "C" { +#endif + +static void signalHandler( QT_SIGNAL_ARGS ) +{ + TQFile f( TQDir::homeDirPath() + "/.designerargs" ); + f.open( IO_ReadOnly ); + TQString args; + f.readLine( args, f.size() ); + TQStringList lst = TQStringList::split( " ", args ); + for ( TQStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) { + TQString arg = (*it).stripWhiteSpace(); + if ( arg[0] != '-' ) { + TQObjectList* l = MainWindow::self->queryList( "FormWindow" ); + FormWindow* fw = (FormWindow*) l->first(); +#if 0 // ### what's this dead code for? + FormWindow* totop; +#endif + bool haveit = FALSE; + while ( fw ) { + haveit = haveit || fw->fileName() == arg; +#if 0 // ### what's this dead code for? + if ( haveit ) + totop = fw; +#endif + fw = (FormWindow*) l->next(); + } + if ( !haveit ) + MainWindow::self->openFormWindow( arg ); + } + } + MainWindow::self->raise(); + MainWindow::self->setActiveWindow(); +} + +#if defined(Q_C_CALLBACKS) +} +#endif + +#endif + +#if defined(Q_C_CALLBACKS) +extern "C" { +#endif + +static void exitHandler( QT_SIGNAL_ARGS ) +{ + TQDir d( TQDir::homeDirPath() ); + d.remove( ".designerpid" ); + exit( -1 ); +} + +#if defined(Q_C_CALLBACKS) +} +#endif + +int main( int argc, char *argv[] ) +{ + TQApplication::setColorSpec( TQApplication::ManyColor ); + + DesignerApplication a( argc, argv ); + + DesignerApplication::setOverrideCursor( TQt::WaitCursor ); + + bool creatPid = FALSE; + if ( a.argc() > 1 ) { + TQString arg1 = a.argv()[ 1 ]; + if ( arg1 == "-client" ) { + TQFile pf( TQDir::homeDirPath() + "/.designerpid" ); + if ( pf.exists() && pf.open( IO_ReadOnly ) ) { + TQString pidStr; + pf.readLine( pidStr, pf.size() ); + TQFile f( TQDir::homeDirPath() + "/.designerargs" ); + f.open( IO_WriteOnly ); + TQTextStream ts( &f ); + for ( int i = 1; i < a.argc(); ++i ) + ts << a.argv()[ i ] << " "; + ts << endl; + f.close(); +#if defined(Q_OS_UNIX) + if ( kill( pidStr.toInt(), SIGUSR1 ) == -1 ) + creatPid = TRUE; + else + return 0; +#elif defined(Q_OS_WIN32) + if ( !GetProcessVersion( pidStr.toUInt() ) ) { + creatPid = TRUE; + } else { + if ( a.winVersion() & TQt::WV_NT_based ) + SendMessage( HWND_BROADCAST, RegisterWindowMessage((TCHAR*)"QT_DESIGNER_OPEN_FILE"), 0, 0 ); + else + SendMessage( HWND_BROADCAST, RegisterWindowMessageA("QT_DESIGNER_OPEN_FILE"), 0, 0 ); + return 0; + } +#endif + } else { + creatPid = TRUE; + } + } else if(arg1 == "-debug_stderr") { + extern bool debugToStderr; //outputwindow.cpp + debugToStderr = TRUE; + } + } + + if ( creatPid ) { + TQFile pf( TQDir::homeDirPath() + "/.designerpid" ); + pf.open( IO_WriteOnly ); + TQTextStream ts( &pf ); +#if defined(Q_OS_UNIX) + signal( SIGUSR1, signalHandler ); +#endif + ts << getpid() << endl; + + pf.close(); + signal( SIGABRT, exitHandler ); + signal( SIGFPE, exitHandler ); + signal( SIGILL, exitHandler ); + signal( SIGINT, exitHandler ); + signal( SIGSEGV, exitHandler ); + signal( SIGTERM, exitHandler ); + } + + extern void qInitImages_designercore(); + qInitImages_designercore(); + + TQSettings config; + TQString keybase = DesignerApplication::settingsKey(); + config.insertSearchPath( TQSettings::Windows, "/Trolltech" ); + TQStringList pluginPaths = config.readListEntry( keybase + "PluginPaths" ); + if (pluginPaths.count()) + TQApplication::setLibraryPaths(pluginPaths); + + TQSplashScreen *splash = a.showSplash(); + + MainWindow *mw = new MainWindow( creatPid ); + a.setMainWidget( mw ); +#if defined(QT_NON_COMMERCIAL) + mw->setCaption( "TQt Designer by Trolltech for non-commercial use" ); +#else + mw->setCaption( "TQt Designer by Trolltech" ); +#endif + if ( config.readBoolEntry( keybase + "Geometries/MainwindowMaximized", FALSE ) ) { + int x = config.readNumEntry( keybase + "Geometries/MainwindowX", 0 ); + int y = config.readNumEntry( keybase + "Geometries/MainwindowY", 0 ); + mw->move( x, y ); + mw->showMaximized(); + } else { + mw->show(); + } + if ( splash ) + splash->finish( mw ); + delete splash; + + TQApplication::restoreOverrideCursor(); + for ( int i = 1; i < a.argc(); ++i ) { + TQString arg = a.argv()[ i ]; + if ( arg[0] != '-' ) + mw->fileOpen( "", "", arg ); + } + + return a.exec(); +} |