formfile.cpp
来自「qt-x11-free-3.0.3.tar.gz minigui图形界面工具」· C++ 代码 · 共 694 行 · 第 1/2 页
CPP
694 行
/************************************************************************ 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 <qregexp.h>#include <qstatusbar.h>static QString make_func_pretty( const QString &s ){ QString res = s; if ( res.find( ")" ) - res.find( "(" ) == 1 ) return res; res.replace( QRegExp( "[(]" ), "( " ); res.replace( QRegExp( "[)]" ), " )" ); res.replace( QRegExp( "&" ), " &" ); res.replace( QRegExp( "[*]" ), " *" ); res.replace( QRegExp( "," ), ", " ); res.replace( QRegExp( ":" ), " : " ); res = res.simplifyWhiteSpace(); return res;}FormFile::FormFile( const QString &fn, bool temp, Project *p ) : filename( fn ), fileNameTemp( temp ), pro( p ), fw( 0 ), ed( 0 ), timeStamp( 0, fn + codeExtension() ), codeEdited( FALSE ){ LanguageInterface *iface = MetaDataBase::languageInterface( pro->language() ); if ( iface ) seperateSource = iface->supports( LanguageInterface::StoreFormCodeSeperate ); else seperateSource = FALSE; 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 ); if ( seperateSource ) parseCode( cod, FALSE );}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(){ bool createSource = TRUE; QString txt; LanguageInterface *iface = MetaDataBase::languageInterface( pro->language() ); if ( iface && iface->supports( LanguageInterface::StoreFormCodeSeperate ) ) { createSource = FALSE; txt = cod; } if ( createSource ) { QValueList<MetaDataBase::Slot> slotList = MetaDataBase::slotList( formWindow() ); QMap<QString, QString> bodies = MetaDataBase::functionBodies( formWindow() ); for ( QValueList<MetaDataBase::Slot>::Iterator it = slotList.begin(); it != slotList.end(); ++it ) { if ( (*it).language != pro->language() ) continue; QString sl( (*it).slot ); QString comments = MetaDataBase::functionComments( formWindow(), sl ); if ( !comments.isEmpty() ) txt += comments + "\n"; txt += iface->createFunctionStart( formWindow()->name(), make_func_pretty( sl ), ( (*it).returnType.isEmpty() ? QString( "void" ) : (*it).returnType ) ); QMap<QString, QString>::Iterator bit = bodies.find( MetaDataBase::normalizeSlot( (*it).slot ) ); if ( bit != bodies.end() ) txt += "\n" + *bit + "\n\n"; else txt += "\n" + iface->createEmptyFunction() + "\n\n"; } } return txt;}bool FormFile::save( bool withMsgBox ){ if ( !formWindow() ) return TRUE; if ( fileNameTemp ) return saveAs(); if ( !isModified() ) return TRUE; if ( ed ) ed->save(); else loadCode(); if ( 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 ) ) { 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" ); } } } } if ( isModified( WFormCode ) && seperateSource ) { 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 ) ) { 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" ); } } } } Resource resource( MainWindow::self ); resource.setWidget( formWindow() ); bool formCodeOnly = isModified( WFormCode ) && !isModified( WFormWindow ) && seperateSource; if ( !resource.save( pro->makeAbsolute( filename ), formCodeOnly ) ) { MainWindow::self->statusBar()->message( tr( "Failed to save file '%1'.").arg( filename ), 5000 ); return saveAs(); } MainWindow::self->statusBar()->message( tr( "'%1' saved.").arg( formCodeOnly ? codeFile() : filename ), 3000 ); timeStamp.update(); setModified( FALSE ); return TRUE;}bool FormFile::saveAs(){ QString f = pro->makeAbsolute( fileName() ); if ( fileNameTemp ) f = pro->makeAbsolute( QString( formWindow()->name() ).lower() + ".ui" ); bool saved = FALSE; 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( formWindow()->name() ), &MainWindow::self->lastSaveFilter ); 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 ) ed->setCaption( tr( "Edit %1" ).arg( formWindow()->name() ) ); setModified( TRUE ); return save();}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 ); MainWindow::self->workspace()->update(); break; case 2: // cancel return FALSE; default: break; } setModified( FALSE ); 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 );}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?