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.
tdevelop/kdevdesigner/designer/sourceeditor.cpp

321 lines
7.5 KiB

/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of TQt 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.
**
** Licensees holding valid TQt Enterprise Edition or TQt Professional Edition
** 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
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about TQt Commercial License Agreements.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include <kiconloader.h>
#include "sourceeditor.h"
#include "formwindow.h"
#include "metadatabase.h"
#include "project.h"
#include "mainwindow.h"
#include "../interfaces/languageinterface.h"
#include <tqregexp.h>
#include "project.h"
#include "sourcefile.h"
#include "hierarchyview.h"
#include <tqmessagebox.h>
#include <tqtextstream.h>
#include "kdevdesigner_part.h"
SourceEditor::SourceEditor( TQWidget *parent, EditorInterface *iface, LanguageInterface *liface )
: TQVBox( parent, 0, WDestructiveClose ), iFace( iface ), lIface( liface ), obj( 0 ), pro( 0 )
{
iFace->addRef();
lIface->addRef();
editor = iFace->editor( MainWindow::self->areEditorsReadOnly(),
this, MainWindow::self->designerInterface() );
iFace->onBreakPointChange( MainWindow::self, TQT_SLOT( breakPointsChanged() ) );
resize( 600, 400 );
setIcon( SmallIcon( "designer_filenew.png" , KDevDesignerPartFactory::instance()) );
}
SourceEditor::~SourceEditor()
{
saveBreakPoints();
editor = 0;
if ( formWindow() ) {
formWindow()->formFile()->setCodeEdited( FALSE );
formWindow()->formFile()->setEditor( 0 );
} else if ( sourceFile() ) {
sourceFile()->setEditor( 0 );
if ( MainWindow::self->objectHierarchy()->sourceEditor() == this )
MainWindow::self->objectHierarchy()->setFormWindow( 0, 0 );
}
iFace->release();
lIface->release();
MainWindow::self->editorClosed( this );
}
void SourceEditor::setObject( TQObject *o, Project *p )
{
if ( sourceFile() )
sourceFile()->setEditor( 0 );
if ( formWindow() ) {
formWindow()->formFile()->setCodeEdited( FALSE );
formWindow()->formFile()->setEditor( 0 );
}
if ( ::tqt_cast<FormWindow*>(o) )
( (FormWindow*)o )->formFile()->setCodeEdited( TRUE );
save();
bool changed = FALSE;
if ( &(*obj) != o ) {
saveBreakPoints();
changed = TRUE;
}
obj = o;
pro = p;
if ( formWindow() ) {
if ( formWindow()->isFake() )
setCaption( formWindow()->project()->objectForFakeForm( formWindow() )->name() );
else
setCaption( obj->name() );
} else {
setCaption( sourceFile()->fileName() );
}
if ( sourceFile() )
sourceFile()->setEditor( this );
else if ( formWindow() )
formWindow()->formFile()->setEditor( this );
iFace->setText( sourceOfObject( obj, lang, iFace, lIface ) );
if ( pro && formWindow() ) {
if ( formWindow()->isFake() )
iFace->setContext( pro->objectForFakeFormFile( formWindow()->formFile() ) );
else
iFace->setContext( formWindow()->mainContainer() );
} else {
iFace->setContext( 0 );
}
if ( changed || sourceFile() )
iFace->setBreakPoints( MetaDataBase::breakPoints( o ) );
MainWindow::self->objectHierarchy()->showClasses( this );
}
TQString SourceEditor::sourceOfObject( TQObject *o, const TQString &,
EditorInterface *, LanguageInterface * )
{
TQString txt;
if ( !o )
return txt;
if ( ::tqt_cast<FormWindow*>(o) )
txt = ( (FormWindow*)o )->formFile()->code();
else if ( ::tqt_cast<SourceFile*>(o) )
txt = ( (SourceFile*)o )->text();
return txt;
}
void SourceEditor::setFunction( const TQString &func, const TQString &clss )
{
iFace->scrollTo( lIface->createFunctionStart( obj->name(), func, "", "" ), clss );
}
void SourceEditor::setClass( const TQString &clss )
{
iFace->scrollTo( clss, TQString() );
}
void SourceEditor::closeEvent( TQCloseEvent *e )
{
e->accept();
if ( !obj )
return;
if ( formWindow() ) {
save();
formWindow()->formFile()->cm = formWindow()->formFile()->isModified();
} else {
if ( !sourceFile()->closeEvent() )
e->ignore();
}
}
void SourceEditor::save()
{
if ( !obj )
return;
if ( formWindow() )
formWindow()->formFile()->syncCode();
else if ( sourceFile() && sourceFile()->editor() )
sourceFile()->setText( iFace->text() );
}
TQString SourceEditor::language() const
{
return lang;
}
void SourceEditor::setLanguage( const TQString &l )
{
lang = l;
}
void SourceEditor::editCut()
{
iFace->cut();
}
void SourceEditor::editCopy()
{
iFace->copy();
}
void SourceEditor::editPaste()
{
iFace->paste();
}
bool SourceEditor::editIsUndoAvailable()
{
return iFace->isUndoAvailable();
}
bool SourceEditor::editIsRedoAvailable()
{
return iFace->isRedoAvailable();
}
void SourceEditor::editUndo()
{
iFace->undo();
}
void SourceEditor::editRedo()
{
iFace->redo();
}
void SourceEditor::editSelectAll()
{
iFace->selectAll();
}
void SourceEditor::configChanged()
{
iFace->readSettings();
}
void SourceEditor::setModified( bool b )
{
iFace->setModified( b );
}
void SourceEditor::refresh( bool allowSave )
{
if ( allowSave )
save();
bool oldMod = iFace->isModified();
iFace->setText( sourceOfObject( obj, lang, iFace, lIface ) );
iFace->setModified( oldMod );
}
void SourceEditor::resetContext()
{
if ( pro && formWindow() ) {
if ( formWindow()->isFake() )
iFace->setContext( pro->objectForFakeFormFile( formWindow()->formFile() ) );
else
iFace->setContext( formWindow()->mainContainer() );
} else {
iFace->setContext( 0 );
}
}
void SourceEditor::setFocus()
{
if ( formWindow() )
formWindow()->formFile()->setCodeEdited( TRUE );
if ( editor )
editor->setFocus();
}
int SourceEditor::numLines() const
{
return iFace->numLines();
}
void SourceEditor::saveBreakPoints()
{
if ( !obj )
return;
TQValueList<uint> l;
iFace->breakPoints( l );
MetaDataBase::setBreakPoints( obj, l );
}
void SourceEditor::clearStep()
{
iFace->clearStep();
}
void SourceEditor::clearStackFrame()
{
iFace->clearStackFrame();
}
void SourceEditor::resetBreakPoints()
{
iFace->setBreakPoints( MetaDataBase::breakPoints( obj ) );
}
TQString SourceEditor::text() const
{
return iFace->text();
}
bool SourceEditor::isModified() const
{
return iFace->isModified();
}
void SourceEditor::checkTimeStamp()
{
if ( formWindow() )
formWindow()->formFile()->checkTimeStamp();
else if ( sourceFile() )
sourceFile()->checkTimeStamp();
}
bool SourceEditor::saveAs()
{
if ( formWindow() )
return formWindow()->formFile()->saveAs();
else if ( sourceFile() )
return sourceFile()->saveAs();
return FALSE;
}
SourceFile *SourceEditor::sourceFile() const
{
if ( !::tqt_cast<SourceFile*>((TQObject *)obj) )
return 0;
return (SourceFile*)(TQObject*)obj;
}
FormWindow *SourceEditor::formWindow() const
{
if ( !::tqt_cast<FormWindow*>((TQObject *)obj) )
return 0;
return (FormWindow*)(TQObject*)obj;
}