⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formfile.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ Copyright (C) 2000 Trolltech AS.  All rights reserved.**** This file is part of Qt Designer.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "formfile.h"#include "timestamp.h"#include "project.h"#include "formwindow.h"#include "command.h"#include "sourceeditor.h"#include "mainwindow.h"#include "../interfaces/languageinterface.h"#include "resource.h"#include "workspace.h"#include <qmessagebox.h>#include <qfile.h>#include <qstatusbar.h>#include "propertyeditor.h"#include <qworkspace.h>#include <stdlib.h>#include "designerappiface.h"#include <qapplication.h>static QString make_func_pretty( const QString &s ){    QString res = s;    if ( res.find( ")" ) - res.find( "(" ) == 1 )	return res;    res.replace( "(", "( " );    res.replace( ")", " )" );    res.replace( "&", " &" );    res.replace( "*", " *" );    res.replace( ",", ", " );    res.replace( ":", " : " );    res = res.simplifyWhiteSpace();    return res;}FormFile::FormFile( const QString &fn, bool temp, Project *p, const char *name )    : filename( fn ), fileNameTemp( temp ), pro( p ), fw( 0 ), ed( 0 ),      timeStamp( 0, fn + codeExtension() ), codeEdited( FALSE ), pkg( FALSE ),      cm( FALSE ){    MetaDataBase::addEntry( this );    fake = qstrcmp( name, "qt_fakewindow" ) == 0;    codeFileStat = FormFile::None;    pro->addFormFile( this );    loadCode();    if ( !temp )	checkFileName( FALSE );}FormFile::~FormFile(){    pro->removeFormFile( this );    if ( formWindow() )	formWindow()->setFormFile( 0 );}void FormFile::setFormWindow( FormWindow *f ){    if ( f == fw )	return;    if ( fw )	fw->setFormFile( 0 );    fw = f;    if ( fw )	fw->setFormFile( this );    parseCode( cod, FALSE );    QTimer::singleShot( 0, this, SLOT( notifyFormWindowChange() ) );}void FormFile::setEditor( SourceEditor *e ){    ed = e;}void FormFile::setFileName( const QString &fn ){    if ( fn == filename )	return;    if ( fn.isEmpty() ) {	fileNameTemp = TRUE;	if ( filename.find( "unnamed" ) != 0 )	    filename = createUnnamedFileName();	return;    }    filename = fn;    timeStamp.setFileName( filename + codeExtension() );    cod = "";    loadCode();}void FormFile::setCode( const QString &c ){    cod = c;}FormWindow *FormFile::formWindow() const{    return fw;}SourceEditor *FormFile::editor() const{    return ed;}QString FormFile::fileName() const{    return filename;}QString FormFile::absFileName() const{    return pro->makeAbsolute( filename );}QString FormFile::codeFile() const{    return filename + codeExtension();}QString FormFile::code(){    return cod;}bool FormFile::save( bool withMsgBox, bool ignoreModified ){    if ( fileNameTemp )	return saveAs();    if ( !ignoreModified && !isModified() )	return TRUE;    if ( ed )	ed->save();    if ( formWindow() && isModified( WFormWindow ) ) {	if ( withMsgBox ) {	    if ( !formWindow()->checkCustomWidgets() )		return FALSE;	}	if ( QFile::exists( pro->makeAbsolute( filename ) ) ) {	    QString fn( pro->makeAbsolute( filename ) );#if defined(Q_OS_WIN32)	    fn += ".bak";#else	    fn += "~";#endif	    QFile f( pro->makeAbsolute( filename ) );	    if ( f.open( IO_ReadOnly ) ) {		QFile f2( fn );		if ( f2.open( IO_WriteOnly | IO_Translate ) ) {		    QCString data( f.size() );		    f.readBlock( data.data(), f.size() );		    f2.writeBlock( data );		} else {		    QMessageBox::warning( MainWindow::self, "Save", "The file " +					  codeFile() + " could not be saved" );		}	    }	}    }    cm = FALSE;    if ( isModified( WFormCode ) ) {	if ( QFile::exists( pro->makeAbsolute( codeFile() ) ) ) {	    QString fn( pro->makeAbsolute( codeFile() ) );#if defined(Q_OS_WIN32)	    fn += ".bak";#else	    fn += "~";#endif	    QFile f( pro->makeAbsolute( codeFile() ) );	    if ( f.open( IO_ReadOnly ) ) {		QFile f2( fn );		if ( f2.open( IO_WriteOnly | IO_Translate) ) {		    QCString data( f.size() );		    f.readBlock( data.data(), f.size() );		    f2.writeBlock( data );		} else if ( qApp->type() != QApplication::Tty ) {		    QMessageBox::warning( MainWindow::self, "Save", "The file " +					  codeFile() + " could not be saved" );		}	    }	}    }    if ( formWindow() ) {	Resource resource( MainWindow::self );	resource.setWidget( formWindow() );	bool formCodeOnly = isModified( WFormCode ) && !isModified( WFormWindow );	if ( !resource.save( pro->makeAbsolute( filename ), formCodeOnly ) ) {	    if ( MainWindow::self )		MainWindow::self->statusBar()->message( tr( "Failed to save file '%1'.").arg( filename ),							5000 );	    return saveAs();	}	if ( MainWindow::self )	    MainWindow::self->statusBar()->message( tr( "'%1' saved.").						    arg( formCodeOnly ? codeFile() : filename ),						    3000 );    } else {	Resource::saveFormCode( this, MetaDataBase::languageInterface( pro->language() ) );    }    timeStamp.update();    setModified( FALSE );    return TRUE;}bool FormFile::saveAs( bool ignoreModified ){    QString f = pro->makeAbsolute( fileName() );    if ( fileNameTemp && formWindow() ) {	f = QString( formWindow()->name() ).lower();	f.replace( "::", "_" );	f = pro->makeAbsolute( f + ".ui" );    }    bool saved = FALSE;    if ( ignoreModified ) {	QString dir = QStringList::split( ':', pro->iFace()->customSetting( "QTSCRIPT_PACKAGES" ) ).first();	f = QFileInfo( f ).fileName();	f.prepend( dir + "/" );    }    while ( !saved ) {	QString fn = QFileDialog::getSaveFileName( f,					       tr( "Qt User-Interface Files (*.ui)" ) + ";;" +					       tr( "All Files (*)" ), MainWindow::self, 0,					       tr( "Save Form '%1' As ...").arg( formName() ),					       MainWindow::self ? &MainWindow::self->lastSaveFilter : 0 );	if ( fn.isEmpty() )	    return FALSE;	QFileInfo fi( fn );	if ( fi.extension() != "ui" )	    fn += ".ui";	fileNameTemp = FALSE;	filename = pro->makeRelative( fn );	QFileInfo relfi( filename );	if ( relfi.exists() ) {	    if ( QMessageBox::warning( MainWindow::self, tr( "File Already Exists" ),		tr( "The file already exists. Do you wish to overwrite it?" ),		QMessageBox::Yes,		QMessageBox::No ) == QMessageBox::Yes ) {		saved = TRUE;	    } else {		filename = f;	    }	} else {	    saved = TRUE;	}    }    if ( !checkFileName( TRUE ) ) {	filename = f;	return FALSE;    }    pro->setModified( TRUE );    timeStamp.setFileName( pro->makeAbsolute( codeFile() ) );    if ( ed && formWindow() )	ed->setCaption( tr( "Edit %1" ).arg( formWindow()->name() ) );    setModified( TRUE );    return save( TRUE, ignoreModified );}bool FormFile::close(){    if ( editor() ) {	editor()->save();	editor()->close();    }    if ( formWindow() )	return formWindow()->close();    return TRUE;}bool FormFile::closeEvent(){    if ( !isModified() && fileNameTemp ) {	pro->removeFormFile( this );	return TRUE;    }    if ( !isModified() )	return TRUE;    if ( editor() )	editor()->save();    switch ( QMessageBox::warning( MainWindow::self, tr( "Save Form" ),				   tr( "Save changes to form '%1'?" ).arg( filename ),				   tr( "&Yes" ), tr( "&No" ), tr( "&Cancel" ), 0, 2 ) ) {    case 0: // save	if ( !save() )	    return FALSE;    case 1: // don't save	loadCode();	if ( ed )	    ed->editorInterface()->setText( cod );	if ( fileNameTemp )	    pro->removeFormFile( this );	if ( MainWindow::self )	    MainWindow::self->workspace()->update();	break;    case 2: // cancel	return FALSE;    default:	break;    }    setModified( FALSE );    if ( MainWindow::self )	MainWindow::self->updateFunctionList();    setCodeEdited( FALSE );    return TRUE;}void FormFile::setModified( bool m, int who ){    if ( ( who & WFormWindow ) == WFormWindow )	setFormWindowModified( m );    if ( ( who & WFormCode ) == WFormCode )	setCodeModified( m );}bool FormFile::isModified( int who ){    if ( who == WFormWindow )	return isFormWindowModified();    if ( who == WFormCode )	return isCodeModified();    return isCodeModified() || isFormWindowModified();}bool FormFile::isFormWindowModified() const{    if ( !formWindow()  || !formWindow()->commandHistory() )	return FALSE;    return formWindow()->commandHistory()->isModified();}bool FormFile::isCodeModified() const{    if ( !editor() )	return cm;    return editor()->isModified();}void FormFile::setFormWindowModified( bool m ){    bool b = isFormWindowModified();    if ( m == b )	return;    if ( !formWindow() || !formWindow()->commandHistory() )	return;    formWindow()->commandHistory()->setModified( m );    emit somethingChanged( this );}void FormFile::setCodeModified( bool m ){    bool b = isCodeModified();    if ( m == b )	return;    emit somethingChanged( this );    cm = TRUE;    if ( !editor() )	return;    editor()->setModified( m );}void FormFile::showFormWindow(){    if ( !MainWindow::self )	return;    if ( formWindow() ) {	if ( ( formWindow()->hasFocus() ||	      MainWindow::self->qWorkspace()->activeWindow() == formWindow() ) &&	     MainWindow::self->propertyeditor()->formWindow() != formWindow() ) {	    MainWindow::self->propertyeditor()->setWidget( formWindow()->currentWidget(), formWindow() );	    MainWindow::self->objectHierarchy()->setFormWindow( formWindow(),								formWindow()->currentWidget() );	}	formWindow()->setFocus();	return;    }    MainWindow::self->openFormWindow( pro->makeAbsolute( filename ), TRUE, this );}bool FormFile::setupUihFile( bool askForUih ){    if ( !pro->isCpp() || !askForUih ) {	if ( !hasFormCode() ) {	    createFormCode();	    setModified( TRUE );	}	codeFileStat = FormFile::Ok;	return TRUE;    }    if ( codeFileStat != FormFile::Ok && !ed ) {	if ( hasFormCode() ) {	    int i = QMessageBox::information( MainWindow::self, tr( "Using ui.h file" ),	                                      tr( "An \"ui.h\" file for this form already exists.\n"					      "Do you want to use it or create a new one?" ),	                                      tr( "Use existing" ), tr( "Create new" ),					      tr( "Cancel" ), 2, 2 );	    if ( i == 2 )		return FALSE;	    if ( i == 1 )		createFormCode();	} else {	    if ( QMessageBox::Yes != QMessageBox::information( MainWindow::self, tr( "Creating ui.h file" ),						 tr( "Do you want to create an new \"ui.h\" file?" ),						 QMessageBox::Yes, QMessageBox::No ) )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -