📄 formfile.cpp
字号:
/************************************************************************ 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 + -