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

📄 editorinterfaceimpl.cpp

📁 Linux下的基于X11的图形开发环境。
💻 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 "editorinterfaceimpl.h"#include <viewmanager.h>#include "cppeditor.h"#include <private/qrichtext_p.h>#include <qapplication.h>#include "completion.h"#include <designerinterface.h>#include <qtimer.h>EditorInterfaceImpl::EditorInterfaceImpl()    : EditorInterface(), viewManager( 0 ), dIface( 0 ){    updateTimer = new QTimer( this );    connect( updateTimer, SIGNAL( timeout() ),	     this, SLOT( update() ) );}EditorInterfaceImpl::~EditorInterfaceImpl(){    updateTimer->stop();    delete (ViewManager*)viewManager;    if ( dIface )	dIface->release();}QRESULT EditorInterfaceImpl::queryInterface( const QUuid &uuid, QUnknownInterface** iface ){    *iface = 0;    if ( uuid == IID_QUnknown )	*iface = (QUnknownInterface*)this;    else if ( uuid == IID_Editor )	*iface = (EditorInterface*)this;    else	return QE_NOINTERFACE;    (*iface)->addRef();    return QS_OK;}QWidget *EditorInterfaceImpl::editor( bool readonly,				      QWidget *parent, QUnknownInterface *iface ){    if ( !viewManager ) {	( (EditorInterfaceImpl*)this )->viewManager = new ViewManager( parent, 0 );	( (EditorInterfaceImpl*)this )->viewManager->showMarkerWidget( FALSE );	if ( iface )	    iface->queryInterface( IID_Designer, (QUnknownInterface**) &dIface );	CppEditor *e = new CppEditor( QString::null, viewManager, "editor", dIface );	e->setEditable( !readonly );	e->installEventFilter( this );	connect( e, SIGNAL( intervalChanged() ), this, SLOT( intervalChanged() ) );	QApplication::sendPostedEvents( viewManager, QEvent::ChildInserted );    }    return viewManager->currentView();}void EditorInterfaceImpl::setText( const QString &txt ){    if ( !viewManager || !viewManager->currentView() )	return;    CppEditor *e = (CppEditor*)viewManager->currentView();    disconnect( e, SIGNAL( modificationChanged( bool ) ), this, SLOT( modificationChanged( bool ) ) );    e->setText( txt );    e->setModified( FALSE );    connect( e, SIGNAL( modificationChanged( bool ) ), this, SLOT( modificationChanged( bool ) ) );}QString EditorInterfaceImpl::text() const{    if ( !viewManager || !viewManager->currentView() )	return QString::null;    QString txt = ( (CppEditor*)viewManager->currentView() )->text();    if ( !txt.isEmpty() && !txt.endsWith("\n") )	txt += "\n";    return txt;}bool EditorInterfaceImpl::isUndoAvailable() const{    if ( !viewManager || !viewManager->currentView() )	return FALSE;    return ( (CppEditor*)viewManager->currentView() )->isUndoAvailable();}bool EditorInterfaceImpl::isRedoAvailable() const{    if ( !viewManager || !viewManager->currentView() )	return FALSE;    return ( (CppEditor*)viewManager->currentView() )->isRedoAvailable();}void EditorInterfaceImpl::undo(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->undo();}void EditorInterfaceImpl::redo(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->redo();}void EditorInterfaceImpl::cut(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->cut();}void EditorInterfaceImpl::copy(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->copy();}void EditorInterfaceImpl::paste(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->paste();}void EditorInterfaceImpl::selectAll(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->selectAll();}bool EditorInterfaceImpl::find( const QString &expr, bool cs, bool wo, bool forward, bool startAtCursor ){    if ( !viewManager || !viewManager->currentView() )	return FALSE;    CppEditor *e = (CppEditor*)viewManager->currentView();    if ( startAtCursor )	return e->find( expr, cs, wo, forward );    int dummy = 0;    return e->find( expr, cs, wo, forward, &dummy, &dummy );}bool EditorInterfaceImpl::replace( const QString &find, const QString &replace, bool cs, bool wo,				   bool forward, bool startAtCursor, bool replaceAll ){    if ( !viewManager || !viewManager->currentView() )	return FALSE;    CppEditor *e = (CppEditor*)viewManager->currentView();    bool ok = FALSE;    if ( startAtCursor ) {	ok = e->find( find, cs, wo, forward );    } else {	int dummy = 0;	ok =  e->find( find, cs, wo, forward, &dummy, &dummy );    }    if ( ok ) {	e->removeSelectedText();	e->insert( replace, FALSE, FALSE );    }    if ( !replaceAll || !ok ) {	if ( ok )	    e->setSelection( e->textCursor()->paragraph()->paragId(),			     e->textCursor()->index() - replace.length(),			     e->textCursor()->paragraph()->paragId(),			     e->textCursor()->index() );	return ok;    }    bool ok2 = TRUE;    while ( ok2 ) {	ok2 = e->find( find, cs, wo, forward );	if ( ok2 ) {	    e->removeSelectedText();	    e->insert( replace, FALSE, FALSE );	}    }    return TRUE;}void EditorInterfaceImpl::gotoLine( int line ){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->setCursorPosition( line, 0 );}void EditorInterfaceImpl::indent(){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->QTextEdit::indent();}void EditorInterfaceImpl::splitView(){#if 0    if ( !viewManager || !viewManager->currentView() )	return;    QTextDocument *doc = ( (CppEditor*)viewManager->currentView() )->document();    CppEditor *editor = new CppEditor( QString::null, viewManager, "editor" );    editor->setDocument( doc );#endif}void EditorInterfaceImpl::scrollTo( const QString &txt, const QString & ){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->sync();    QTextDocument *doc = ( (CppEditor*)viewManager->currentView() )->document();    QTextParagraph *p = doc->firstParagraph();    while ( p ) {	if ( p->string()->toString().find( txt ) != -1 ) {	    ( (CppEditor*)viewManager->currentView() )->setCursorPosition( p->paragId() + 2, 0 );	    break;	}	p = p->next();    }    ( (CppEditor*)viewManager->currentView() )->setFocus();}void EditorInterfaceImpl::setContext( QObject *this_ ){    if ( !viewManager || !viewManager->currentView() )	return;    ( (CppEditor*)viewManager->currentView() )->completionManager()->setContext( this_ );}void EditorInterfaceImpl::setError( int line ){    if ( !viewManager )	return;    viewManager->setError( line );}void EditorInterfaceImpl::readSettings(){    if ( !viewManager )	return;    ( (CppEditor*)viewManager->currentView() )->configChanged();}void EditorInterfaceImpl::modificationChanged( bool m ){    if ( viewManager && dIface )	dIface->setModified( m, viewManager->currentView() );}void EditorInterfaceImpl::setModified( bool m ){    if ( !viewManager )	return;    ( (CppEditor*)viewManager->currentView() )->setModified( m );}bool EditorInterfaceImpl::isModified() const{    if ( !viewManager )	return FALSE;    return ( (CppEditor*)viewManager->currentView() )->isModified();}bool EditorInterfaceImpl::eventFilter( QObject *o, QEvent *e ){    if ( e->type() == QEvent::KeyPress )	updateTimer->stop();    else if ( e->type() == QEvent::FocusOut )	update();    return QObject::eventFilter( o, e );}int EditorInterfaceImpl::numLines() const{    if ( !viewManager || !viewManager->currentView() )	return 0;    return ( (CppEditor*)viewManager->currentView() )->paragraphs();}void EditorInterfaceImpl::intervalChanged(){    if ( !dIface )	return;    updateTimer->start( 2000, TRUE );}void EditorInterfaceImpl::update(){    if ( !dIface )	return;    dIface->updateFunctionList();}void EditorInterfaceImpl::onBreakPointChange( QObject *receiver, const char *slot ){    if ( !viewManager )	return;    connect( viewManager, SIGNAL( markersChanged() ), receiver, slot );}

⌨️ 快捷键说明

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