You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qt3/tools/designer/app/main.cpp

229 lines
6.1 KiB

/**********************************************************************
** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
**
** This file is part of Qt 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 Qt Foundation.
**
** Please review the following information to ensure GNU General
** Public Licensing requirements 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 sales@trolltech.com.
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt 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 )
{
QFile f( QDir::homeDirPath() + "/.designerargs" );
f.open( IO_ReadOnly );
QString args;
f.readLine( args, f.size() );
QStringList lst = QStringList::split( " ", args );
for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
QString arg = (*it).stripWhiteSpace();
if ( arg[0] != '-' ) {
QObjectList* 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 )
{
QDir d( QDir::homeDirPath() );
d.remove( ".designerpid" );
exit( -1 );
}
#if defined(Q_C_CALLBACKS)
}
#endif
int main( int argc, char *argv[] )
{
QApplication::setColorSpec( QApplication::ManyColor );
DesignerApplication a( argc, argv );
DesignerApplication::setOverrideCursor( Qt::WaitCursor );
bool creatPid = FALSE;
if ( a.argc() > 1 ) {
QString arg1 = a.argv()[ 1 ];
if ( arg1 == "-client" ) {
QFile pf( QDir::homeDirPath() + "/.designerpid" );
if ( pf.exists() && pf.open( IO_ReadOnly ) ) {
QString pidStr;
pf.readLine( pidStr, pf.size() );
QFile f( QDir::homeDirPath() + "/.designerargs" );
f.open( IO_WriteOnly );
QTextStream 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() & Qt::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 ) {
QFile pf( QDir::homeDirPath() + "/.designerpid" );
pf.open( IO_WriteOnly );
QTextStream 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();
QSettings config;
QString keybase = DesignerApplication::settingsKey();
config.insertSearchPath( QSettings::Windows, "/Trolltech" );
QStringList pluginPaths = config.readListEntry( keybase + "PluginPaths" );
if (pluginPaths.count())
QApplication::setLibraryPaths(pluginPaths);
QSplashScreen *splash = a.showSplash();
MainWindow *mw = new MainWindow( creatPid );
a.setMainWidget( mw );
#if defined(QT_NON_COMMERCIAL)
mw->setCaption( "Qt Designer by Trolltech for non-commercial use" );
#else
mw->setCaption( "Qt 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;
QApplication::restoreOverrideCursor();
for ( int i = 1; i < a.argc(); ++i ) {
QString arg = a.argv()[ i ];
if ( arg[0] != '-' )
mw->fileOpen( "", "", arg );
}
return a.exec();
}