diff options
author | Michele Calgaro <[email protected]> | 2019-04-21 23:22:20 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2019-04-21 23:22:20 +0900 |
commit | dba036816b279bc1539a9f3894fbc414665d2bce (patch) | |
tree | 29e4bf00bafe515e7afdd02168d65a47a3f9fbc0 /tqtinterface/qt4/tools/designer/editor | |
parent | 6f1b4f0c7505a049d992a33f6e409b7c75732d4b (diff) | |
download | experimental-dba036816b279bc1539a9f3894fbc414665d2bce.tar.gz experimental-dba036816b279bc1539a9f3894fbc414665d2bce.zip |
Removed unnecessary and/or TDE-unrelated code.
Signed-off-by: Michele Calgaro <[email protected]>
Signed-off-by: Slávek Banko <[email protected]>
Diffstat (limited to 'tqtinterface/qt4/tools/designer/editor')
23 files changed, 0 insertions, 5480 deletions
diff --git a/tqtinterface/qt4/tools/designer/editor/arghintwidget.cpp b/tqtinterface/qt4/tools/designer/editor/arghintwidget.cpp deleted file mode 100644 index 1f5a7c9..0000000 --- a/tqtinterface/qt4/tools/designer/editor/arghintwidget.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "arghintwidget.h" -#include <tqbutton.h> -#include <tqlabel.h> -#include <tqlayout.h> -#include <tqpainter.h> -#include <tqpixmap.h> - -static const char * left_xpm[] = { -"16 16 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ", -" ", -" + ", -" ++ ", -" +++ ", -" ++++ ", -" +++++ ", -" ++++++ ", -" ++++++ ", -" +++++ ", -" ++++ ", -" +++ ", -" ++ ", -" + ", -" ", -" "}; - -static const char * right_xpm[] = { -"16 16 3 1", -" c None", -". c #FFFFFF", -"+ c #000000", -" ", -" ", -" + ", -" ++ ", -" +++ ", -" ++++ ", -" +++++ ", -" ++++++ ", -" ++++++ ", -" +++++ ", -" ++++ ", -" +++ ", -" ++ ", -" + ", -" ", -" "}; - -static const char * left_disabled_xpm[] = { -"16 16 3 1", -" c None", -". c #FFFFFF", -"+ c darkgray", -" ", -" ", -" + ", -" ++ ", -" +++ ", -" ++++ ", -" +++++ ", -" ++++++ ", -" ++++++ ", -" +++++ ", -" ++++ ", -" +++ ", -" ++ ", -" + ", -" ", -" "}; - -static const char * right_disabled_xpm[] = { -"16 16 3 1", -" c None", -". c #FFFFFF", -"+ c darkgray", -" ", -" ", -" + ", -" ++ ", -" +++ ", -" ++++ ", -" +++++ ", -" ++++++ ", -" ++++++ ", -" +++++ ", -" ++++ ", -" +++ ", -" ++ ", -" + ", -" ", -" "}; - -class ArrowButton : public TQButton -{ - TQ_OBJECT - -public: - enum Dir { Left, Right }; - - ArrowButton( TQWidget *parent, const char *name, Dir d ); - void drawButton( TQPainter *p ); - -private: - TQPixmap pix, pix_disabled; - -}; - -ArrowButton::ArrowButton( TQWidget *parent, const char *name, Dir d ) - : TQButton( parent, name ) -{ - setFixedSize( 16, 16 ); - if ( d == Left ) { - pix = TQPixmap( left_xpm ); - pix_disabled = TQPixmap( left_disabled_xpm ); - } else { - pix = TQPixmap( right_xpm ); - pix_disabled = TQPixmap( right_disabled_xpm ); - } -} - -void ArrowButton::drawButton( TQPainter *p ) -{ - if ( isDown() ) - p->fillRect( 0, 0, width(), height(), darkGray ); - else - p->fillRect( 0, 0, width(), height(), lightGray ); - if ( isEnabled() ) - p->drawPixmap( 0, 0, pix ); - else - p->drawPixmap( 0, 0, pix_disabled ); -} - - -ArgHintWidget::ArgHintWidget( TQWidget *parent, const char*name ) - : TQFrame( parent, name, WType_Popup ), curFunc( 0 ), numFuncs( 0 ) -{ - setFrameStyle( TQFrame::Box | TQFrame::Plain ); - setLineWidth( 1 ); - setBackgroundColor( white ); - TQHBoxLayout *hbox = new TQHBoxLayout( this ); - hbox->setMargin( 1 ); - hbox->addWidget( ( prev = new ArrowButton( this, "editor_left_btn", ArrowButton::Left ) ) ); - hbox->addWidget( ( funcLabel = new TQLabel( this, "editor_func_lbl" ) ) ); - hbox->addWidget( ( next = new ArrowButton( this, "editor_right_btn", ArrowButton::Right ) ) ); - funcLabel->setBackgroundColor( white ); - funcLabel->tqsetAlignment( AlignCenter ); - connect( prev, TQT_SIGNAL( clicked() ), this, TQT_SLOT( gotoPrev() ) ); - connect( next, TQT_SIGNAL( clicked() ), this, TQT_SLOT( gotoNext() ) ); - updateState(); - setFocusPolicy( NoFocus ); - prev->setFocusPolicy( NoFocus ); - next->setFocusPolicy( NoFocus ); - funcLabel->setFocusPolicy( NoFocus ); -} - -void ArgHintWidget::setFunctionText( int func, const TQString &text ) -{ - funcs.replace( func, text ); - if ( func == curFunc ) { - funcLabel->clear(); - funcLabel->setText( text ); - } -} - -void ArgHintWidget::setNumFunctions( int num ) -{ - funcs.clear(); - numFuncs = num; - curFunc = 0; - updateState(); -} - -void ArgHintWidget::gotoPrev() -{ - if ( curFunc > 0 ) { - curFunc--; - funcLabel->setText( funcs[ curFunc ] ); - updateState(); - } -} - -void ArgHintWidget::gotoNext() -{ - if ( curFunc < numFuncs - 1 ) { - curFunc++; - funcLabel->setText( funcs[ curFunc ] ); - updateState(); - } -} - -void ArgHintWidget::updateState() -{ - prev->setEnabled( curFunc > 0 ); - next->setEnabled( curFunc < numFuncs - 1 ); -} - -void ArgHintWidget::retqlayout() -{ - funcLabel->setText( "" ); - funcLabel->setText( funcs[ curFunc ] ); -} - -#include "arghintwidget.tqmoc" diff --git a/tqtinterface/qt4/tools/designer/editor/arghintwidget.h b/tqtinterface/qt4/tools/designer/editor/arghintwidget.h deleted file mode 100644 index d5c6d43..0000000 --- a/tqtinterface/qt4/tools/designer/editor/arghintwidget.h +++ /dev/null @@ -1,69 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef ARGHINTWIDGET_H -#define ARGHINTWIDGET_H - -#include <tqframe.h> - -class TQLabel; -class ArrowButton; - -class ArgHintWidget : public TQFrame -{ - TQ_OBJECT - -public: - ArgHintWidget( TQWidget *parent, const char*name ); - - void setFunctionText( int func, const TQString &text ); - void setNumFunctions( int num ); - -public Q_SLOTS: - void retqlayout(); - void gotoPrev(); - void gotoNext(); - -private: - void updateState(); - -private: - int curFunc; - int numFuncs; - TQMap<int, TQString> funcs; - TQLabel *funcLabel; - ArrowButton *prev, *next; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/browser.cpp b/tqtinterface/qt4/tools/designer/editor/browser.cpp deleted file mode 100644 index 32eba0c..0000000 --- a/tqtinterface/qt4/tools/designer/editor/browser.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "browser.h" -#include "editor.h" -#include <private/tqrichtext_p.h> - - -EditorBrowser::EditorBrowser( Editor *e ) - : curEditor( e ), oldHighlightedParag( 0 ) -{ - curEditor = e; - - // ### disabled for now -// curEditor->viewport()->installEventFilter( this ); -// curEditor->installEventFilter( this ); - - TQFont fn( curEditor->font() ); - fn.setUnderline( TRUE ); - highlightedFormat = new TQTextFormat( fn, blue ); -} - -EditorBrowser::~EditorBrowser() -{ - delete highlightedFormat; -} - -bool EditorBrowser::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( ::tqqt_cast<Editor*>(o->parent()) || ::tqqt_cast<Editor*>(o) ) { - TQMouseEvent *me; - TQKeyEvent *ke; - switch ( e->type() ) { - case TQEvent::MouseMove: - me = (TQMouseEvent*)e; - if ( ( me->state() & ControlButton ) == ControlButton ) { - curEditor->viewport()->setCursor( pointingHandCursor ); - TQTextCursor c( curEditor->document() ); - curEditor->placeCursor( curEditor->viewportToContents( me->pos() ), &c ); - TQTextCursor from, to; - if ( oldHighlightedParag ) { - oldHighlightedParag->setEndState( -1 ); - oldHighlightedParag->format(); - oldHighlightedParag = 0; - } - if ( findCursor( c, from, to ) && from.paragraph() == to.paragraph() ) { - // avoid collision with other selections - for ( int i = 0; i < curEditor->document()->numSelections(); ++i ) - curEditor->document()->removeSelection( i ); - from.paragraph()->setFormat( from.index(), to.index() - from.index() + 1, highlightedFormat, FALSE ); - lastWord = from.paragraph()->string()->toString().mid( from.index(), to.index() - from.index() + 1 ); - oldHighlightedParag = from.paragraph(); - } else { - lastWord = ""; - } - curEditor->repaintChanged(); - return TRUE; - } - break; - case TQEvent::MouseButtonPress: { - bool killEvent = !lastWord.isEmpty(); - if ( !lastWord.isEmpty() ) - showHelp( lastWord ); - lastWord = ""; - curEditor->viewport()->setCursor( ibeamCursor ); - if ( oldHighlightedParag ) { - oldHighlightedParag->setEndState( -1 ); - oldHighlightedParag->format(); - curEditor->repaintChanged(); - oldHighlightedParag = 0; - } - if ( killEvent ) - return TRUE; - } break; - case TQEvent::KeyRelease: - lastWord = ""; - ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Control ) { - curEditor->viewport()->setCursor( ibeamCursor ); - if ( oldHighlightedParag ) { - oldHighlightedParag->setEndState( -1 ); - oldHighlightedParag->format(); - curEditor->repaintChanged(); - oldHighlightedParag = 0; - } - } - default: - break; - } - } - return FALSE; -} - -void EditorBrowser::setCurrentEdior( Editor *e ) -{ - curEditor = e; - curEditor->installEventFilter( this ); -} - -void EditorBrowser::addEditor( Editor *e ) -{ - e->installEventFilter( this ); -} - -bool EditorBrowser::findCursor( const TQTextCursor &c, TQTextCursor &from, TQTextCursor &to ) -{ - from = c; - while ( from.paragraph()->at( from.index() )->c != ' ' && from.paragraph()->at( from.index() )->c != '\t' && from.index() > 0 ) - from.gotoLeft(); - if ( from.paragraph()->at( from.index() )->c == ' ' || from.paragraph()->at( from.index() )->c == '\t' ) - from.gotoRight(); - to = c; - while ( to.paragraph()->at( to.index() )->c != ' ' && to.paragraph()->at( to.index() )->c != '\t' && - to.index() < to.paragraph()->length() - 1 ) - to.gotoRight(); - if ( to.paragraph()->at( to.index() )->c == ' ' || to.paragraph()->at( to.index() )->c == '\t' ) - to.gotoLeft(); - return TRUE; -} diff --git a/tqtinterface/qt4/tools/designer/editor/browser.h b/tqtinterface/qt4/tools/designer/editor/browser.h deleted file mode 100644 index f8d53c2..0000000 --- a/tqtinterface/qt4/tools/designer/editor/browser.h +++ /dev/null @@ -1,66 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef BROWSER_H -#define BROWSER_H - -#include <tqobject.h> - -class Editor; -class TQTextCursor; -class TQTextParagraph; -class TQTextFormat; - -class EditorBrowser : public TQObject -{ - TQ_OBJECT - -public: - EditorBrowser( Editor *e ); - ~EditorBrowser(); - - bool eventFilter( TQObject *o, TQEvent *e ); - virtual void setCurrentEdior( Editor *e ); - virtual void addEditor( Editor *e ); - virtual bool findCursor( const TQTextCursor &c, TQTextCursor &from, TQTextCursor &to ); - virtual void showHelp( const TQString & ) {} - -protected: - Editor *curEditor; - TQTextParagraph *oldHighlightedParag; - TQString lastWord; - TQTextFormat *highlightedFormat; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/cindent.cpp b/tqtinterface/qt4/tools/designer/editor/cindent.cpp deleted file mode 100644 index ef4f748..0000000 --- a/tqtinterface/qt4/tools/designer/editor/cindent.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "cindent.h" -#include "tqregexp.h" - -extern int indentForBottomLine( const TQStringList& program, TQChar typedIn ); -extern void setTabSize( int s ); -extern void setIndentSize( int s ); - -CIndent::CIndent() - : TQTextIndent(), tabSize( 8 ), indentSize( 4 ), - autoIndent( TRUE ), keepTabs( TRUE ), lastDoc( 0 ) -{ -} - -static int indentation( const TQString &s ) -{ - if ( s.simplifyWhiteSpace().length() == 0 ) - return 0; - int i = 0; - int ind = 0; - while ( i < (int)s.length() ) { - TQChar c = s.at( i ); - if ( c == ' ' ) - ind++; - else if ( c == '\t' ) - ind += 8; - else - break; - ++i; - } - return ind; -} - -void CIndent::tabify( TQString &s ) -{ - if ( !keepTabs ) - return; - int i = 0; - for ( ;; ) { - for ( int j = i; j < (int)s.length(); ++j ) { - if ( s[ j ] != ' ' && s[ j ] != '\t' ) { - if ( j > i ) { - TQString t = s.mid( i, j - i ); - int spaces = 0; - for ( int k = 0; k < (int)t.length(); ++k ) - spaces += ( t[ k ] == ' ' ? 1 : tabSize ); - s.remove( i, t.length() ); - int tabs = spaces / tabSize; - spaces = spaces - ( tabSize * tabs ); - TQString tmp; - tmp.fill( ' ', spaces ); - if ( spaces > 0 ) - s.insert( i, tmp ); - tmp.fill( '\t', tabs ); - if ( tabs > 0 ) - s.insert( i, tmp ); - } - break; - } - } - i = s.find( '\n', i ); - if ( i == -1 ) - break; - ++i; - } -} - -void CIndent::indentLine( TQTextParagraph *p, int &oldIndent, int &newIndent ) -{ - TQString indentString; - indentString.fill( ' ', newIndent ); - indentString.append( "a" ); - tabify( indentString ); - indentString.remove( indentString.length() - 1, 1 ); - newIndent = indentString.length(); - oldIndent = 0; - while ( p->length() > 0 && ( p->at( 0 )->c == ' ' || p->at( 0 )->c == '\t' ) ) { - ++oldIndent; - p->remove( 0, 1 ); - } - if ( p->string()->length() == 0 ) - p->append( " " ); - if ( !indentString.isEmpty() ) - p->insert( 0, indentString ); -} - - -void CIndent::indent( TQTextDocument *doc, TQTextParagraph *p, int *oldIndent, int *newIndent ) -{ - lastDoc = doc; - int oi = indentation( p->string()->toString() ); - TQStringList code; - TQTextParagraph *parag = doc->firstParagraph(); - while ( parag ) { - code << parag->string()->toString(); - if ( parag == p ) - break; - parag = parag->next(); - } - - int ind = indentForBottomLine( code, TQChar::null ); - indentLine( p, oi, ind ); - if ( oldIndent ) - *oldIndent = oi; - if ( newIndent ) - *newIndent = ind; -} - -void CIndent::reindent() -{ - if ( !lastDoc ) - return; - // #### this is sloooooooow (O(n^2)) - TQTextParagraph *parag = lastDoc->firstParagraph(); - while ( parag ) { - indent( lastDoc, parag, 0, 0 ); - parag = parag->next(); - } -} - -void CIndent::setTabSize( int ts ) -{ - tabSize = ts; - ::setTabSize( ts ); -} - -void CIndent::setIndentSize( int is ) -{ - indentSize = is; - ::setIndentSize( is ); -} diff --git a/tqtinterface/qt4/tools/designer/editor/cindent.h b/tqtinterface/qt4/tools/designer/editor/cindent.h deleted file mode 100644 index 6e7e122..0000000 --- a/tqtinterface/qt4/tools/designer/editor/cindent.h +++ /dev/null @@ -1,63 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef CINDENT_H -#define CINDENT_H - -#include <private/tqrichtext_p.h> - -class CIndent : public TQTextIndent -{ -public: - CIndent(); - virtual ~CIndent() {} - void indent( TQTextDocument *doc, TQTextParagraph *parag, int *oldIndent, int *newIndent ); - - void setTabSize( int ts ); - void setIndentSize( int is ); - void setAutoIndent( bool ai ) { autoIndent = ai; reindent(); } - void setKeepTabs( bool kt ) { keepTabs = kt; } - -private: - void reindent(); - void indentLine( TQTextParagraph *p, int &oldIndent, int &newIndent ); - void tabify( TQString &s ); - -public: - int tabSize, indentSize; - bool autoIndent, keepTabs; - TQTextDocument *lastDoc; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/completion.cpp b/tqtinterface/qt4/tools/designer/editor/completion.cpp deleted file mode 100644 index d3a92b2..0000000 --- a/tqtinterface/qt4/tools/designer/editor/completion.cpp +++ /dev/null @@ -1,714 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "completion.h" -#include "paragdata.h" -#include "editor.h" -#include <tqlistbox.h> -#include <tqvbox.h> -#include <tqmap.h> -#include <private/tqrichtext_p.h> -#include <tqapplication.h> -#include <tqregexp.h> -#include "arghintwidget.h" -#include <tqsizegrip.h> -#include <tqtimer.h> - -static TQColor getColor( const TQString &type ) -{ - if ( type == "function" || type == "slot" || type == "package" ) - return TQt::blue; - else if ( type == "variable" || type == "widget" || type == "dir" ) - return TQt::darkRed; - else if ( type == "object" || type == "class" ) - return TQt::darkBlue; - else if ( type == "property" ) - return TQt::darkGreen; - else if ( type == "enum" ) - return TQt::darkYellow; - return TQt::black; -} - -class CompletionItem : public TQListBoxItem -{ -public: - CompletionItem( TQListBox *lb, const TQString &txt, const TQString &t, const TQString &p, - const TQString &pre, const TQString &p2 ) - : TQListBoxItem( lb ), type( t ), postfix( p ), prefix( pre ), postfix2( p2 ), - parag( 0 ), lastState( FALSE ) { setText( txt ); } - ~CompletionItem() { delete parag; } - void paint( TQPainter *painter ) { - if ( lastState != isSelected() ) { - delete parag; - parag = 0; - } - lastState = isSelected(); - if ( !parag ) - setupParagraph(); - parag->paint( *painter, listBox()->tqcolorGroup() ); - } - - int height( const TQListBox * ) const { - if ( !parag ) - ( (CompletionItem*)this )->setupParagraph(); - return parag->rect().height(); - } - int width( const TQListBox * ) const { - if ( !parag ) - ( (CompletionItem*)this )->setupParagraph(); - return parag->rect().width() - 2; - } - TQString text() const { return TQListBoxItem::text() + postfix; } - -private: - void setupParagraph(); - TQString type, postfix, prefix, postfix2; - TQTextParagraph *parag; - bool lastState; - -}; - -void CompletionItem::setupParagraph() { - if ( !parag ) { - TQTextFormatter *formatter; - formatter = new TQTextFormatterBreakWords; - formatter->setWrapEnabled( FALSE ); - parag = new TQTextParagraph( 0 ); - parag->setTabStops( listBox()->fontMetrics().width( "propertyXXXX" ) ); - parag->pseudoDocument()->pFormatter = formatter; - parag->insert( 0, " " + type + ( type.isEmpty() ? " " : "\t" ) + prefix + - TQListBoxItem::text() + postfix + postfix2 ); - bool selCol = isSelected() && listBox()->tqcolorGroup().highlightedText() != listBox()->tqcolorGroup().text(); - TQColor sc = selCol ? listBox()->tqcolorGroup().highlightedText() : getColor( type ); - TQTextFormat *f1 = parag->formatCollection()->format( listBox()->font(), sc ); - TQTextFormat *f3 = parag->formatCollection()->format( listBox()->font(), isSelected() ? - listBox()->tqcolorGroup().highlightedText() : - listBox()->tqcolorGroup().text() ); - TQFont f( listBox()->font() ); - f.setBold( TRUE ); - TQTextFormat *f2 = - parag->formatCollection()->format( f, isSelected() ? listBox()->tqcolorGroup().highlightedText() : - listBox()->tqcolorGroup().text() ); - parag->setFormat( 1, type.length() + 1, f1 ); - parag->setFormat( type.length() + 2, prefix.length() + TQListBoxItem::text().length(), f2 ); - if ( !postfix.isEmpty() ) - parag->setFormat( type.length() + 2 + prefix.length() + TQListBoxItem::text().length(), - postfix.length(), f3 ); - parag->setFormat( type.length() + 2 + prefix.length() + TQListBoxItem::text().length() + postfix.length(), - postfix2.length(), f3 ); - f1->removeRef(); - f2->removeRef(); - f3->removeRef(); - parag->format(); - } -} - - -EditorCompletion::EditorCompletion( Editor *e ) -{ - enabled = TRUE; - lastDoc = 0; - completionPopup = new TQVBox( e->tqtopLevelWidget(), 0, WType_Popup ); - completionPopup->setFrameStyle( TQFrame::Box | TQFrame::Plain ); - completionPopup->setLineWidth( 1 ); - functionLabel = new ArgHintWidget( e->tqtopLevelWidget(), "editor_function_lbl" ); - functionLabel->hide(); - completionListBox = new TQListBox( completionPopup, "editor_completion_lb" ); - completionListBox->setFrameStyle( TQFrame::NoFrame ); - completionListBox->installEventFilter( this ); - completionListBox->setHScrollBarMode( TQScrollView::AlwaysOn ); - completionListBox->setVScrollBarMode( TQScrollView::AlwaysOn ); - completionListBox->setCornerWidget( new TQSizeGrip( completionListBox, "editor_cornerwidget" ) ); - completionPopup->installEventFilter( this ); - functionLabel->installEventFilter( this ); - completionPopup->setFocusProxy( completionListBox ); - completionOffset = 0; - curEditor = e; - curEditor->installEventFilter( this ); -} - -EditorCompletion::~EditorCompletion() -{ - delete completionPopup; - delete functionLabel; -} - -void EditorCompletion::addCompletionEntry( const TQString &s, TQTextDocument *, bool strict ) -{ - TQChar key( s[ 0 ] ); - TQMap<TQChar, TQStringList>::Iterator it = completionMap.find( key ); - if ( it == completionMap.end() ) { - completionMap.insert( key, TQStringList( s ) ); - } else { - if ( strict ) { - TQStringList::Iterator sit; - for ( sit = (*it).begin(); sit != (*it).end(); ) { - TQStringList::Iterator it2 = sit; - ++sit; - if ( (*it2).length() > s.length() && (*it2).left( s.length() ) == s ) { - if ( (*it2)[ (int)s.length() ].isLetter() && (*it2)[ (int)s.length() ].upper() != (*it2)[ (int)s.length() ] ) - return; - } else if ( s.length() > (*it2).length() && s.left( (*it2).length() ) == *it2 ) { - if ( s[ (int)(*it2).length() ].isLetter() && s[ (int)(*it2).length() ].upper() != s[ (int)(*it2).length() ] ) - (*it).remove( it2 ); - } - } - } - (*it).append( s ); - } -} - -TQValueList<CompletionEntry> EditorCompletion::completionList( const TQString &s, TQTextDocument *doc ) const -{ - if ( doc ) - ( (EditorCompletion*)this )->updateCompletionMap( doc ); - - TQChar key( s[ 0 ] ); - TQMap<TQChar, TQStringList>::ConstIterator it = completionMap.find( key ); - if ( it == completionMap.end() ) - return TQValueList<CompletionEntry>(); - TQStringList::ConstIterator it2 = (*it).begin(); - TQValueList<CompletionEntry> lst; - int len = s.length(); - for ( ; it2 != (*it).end(); ++it2 ) { - CompletionEntry c; - c.type = ""; - c.text = *it2; - c.postfix = ""; - c.prefix = ""; - c.postfix2 = ""; - if ( (int)(*it2).length() > len && (*it2).left( len ) == s && lst.find( c ) == lst.end() ) - lst << c; - } - - return lst; -} - -void EditorCompletion::updateCompletionMap( TQTextDocument *doc ) -{ - bool strict = TRUE; - if ( doc != lastDoc ) - strict = FALSE; - lastDoc = doc; - TQTextParagraph *s = doc->firstParagraph(); - if ( !s->extraData() ) - s->setExtraData( new ParagData ); - while ( s ) { - if ( s->length() == ( (ParagData*)s->extraData() )->lastLengthForCompletion ) { - s = s->next(); - continue; - } - - TQChar c; - TQString buffer; - for ( int i = 0; i < s->length(); ++i ) { - c = s->at( i )->c; - if ( c.isLetter() || c.isNumber() || c == '_' || c == '#' ) { - buffer += c; - } else { - addCompletionEntry( buffer, doc, strict ); - buffer = TQString(); - } - } - if ( !buffer.isEmpty() ) - addCompletionEntry( buffer, doc, strict ); - - ( (ParagData*)s->extraData() )->lastLengthForCompletion = s->length(); - s = s->next(); - } -} - -bool EditorCompletion::doCompletion() -{ - searchString = ""; - if ( !curEditor ) - return FALSE; - - TQTextCursor *cursor = curEditor->textCursor(); - TQTextDocument *doc = curEditor->document(); - - if ( cursor->index() > 0 && cursor->paragraph()->at( cursor->index() - 1 )->c == '.' && - ( cursor->index() == 1 || cursor->paragraph()->at( cursor->index() - 2 )->c != '.' ) ) - return doObjectCompletion(); - - int idx = cursor->index(); - if ( idx == 0 ) - return FALSE; - TQChar c = cursor->paragraph()->at( idx - 1 )->c; - if ( !c.isLetter() && !c.isNumber() && c != '_' && c != '#' ) - return FALSE; - - TQString s; - idx--; - completionOffset = 1; - for (;;) { - s.prepend( TQString( cursor->paragraph()->at( idx )->c ) ); - idx--; - if ( idx < 0 ) - break; - if ( !cursor->paragraph()->at( idx )->c.isLetter() && - !cursor->paragraph()->at( idx )->c.isNumber() && - cursor->paragraph()->at( idx )->c != '_' && - cursor->paragraph()->at( idx )->c != '#' ) - break; - completionOffset++; - } - - searchString = s; - - TQValueList<CompletionEntry> lst( completionList( s, doc ) ); - if ( lst.count() > 1 ) { - TQTextStringChar *chr = cursor->paragraph()->at( cursor->index() ); - int h = cursor->paragraph()->lineHeightOfChar( cursor->index() ); - int x = cursor->paragraph()->rect().x() + chr->x; - int y, dummy; - cursor->paragraph()->lineHeightOfChar( cursor->index(), &dummy, &y ); - y += cursor->paragraph()->rect().y(); - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it = lst.begin(); it != lst.end(); ++it ) - (void)new CompletionItem( completionListBox, (*it).text, (*it).type, (*it).postfix, - (*it).prefix, (*it).postfix2 ); - cList = lst; - completionPopup->resize( completionListBox->tqsizeHint() + - TQSize( completionListBox->verticalScrollBar()->width() + 4, - completionListBox->horizontalScrollBar()->height() + 4 ) ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setFocus(); - if ( curEditor->mapToGlobal( TQPoint( 0, y ) ).y() + h + completionPopup->height() < TQApplication::desktop()->height() ) - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y + h ) ) ) ); - else - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y - completionPopup->height() ) ) ) ); - completionPopup->show(); - } else if ( lst.count() == 1 ) { - curEditor->insert( lst.first().text.mid( completionOffset, 0xFFFFFF ), - (uint) ( TQTextEdit::RedoIndentation | - TQTextEdit::CheckNewLines | - TQTextEdit::RemoveSelected ) ); - } else { - return FALSE; - } - - return TRUE; -} - -bool EditorCompletion::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( !enabled ) - return FALSE; - if ( e->type() == TQEvent::KeyPress && ::tqqt_cast<Editor*>(o)) { - curEditor = (Editor*)o; - TQKeyEvent *ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Tab ) { - TQString s = curEditor->textCursor()->paragraph()->string()->toString(). - left( curEditor->textCursor()->index() ); - if ( curEditor->document()->hasSelection( TQTextDocument::Standard ) || - s.simplifyWhiteSpace().isEmpty() ) { - if ( curEditor->document()->indent() ) { - curEditor->indent(); - int i = 0; - for ( ; i < curEditor->textCursor()->paragraph()->length() - 1; ++i ) { - if ( curEditor->textCursor()->paragraph()->at( i )->c != ' ' && - curEditor->textCursor()->paragraph()->at( i )->c != '\t' ) - break; - } - curEditor->drawCursor( FALSE ); - curEditor->textCursor()->setIndex( i ); - curEditor->drawCursor( TRUE ); - } else { - curEditor->insert( "\t" ); - } - return TRUE; - } - } - - if ( functionLabel->isVisible() ) { - if ( ke->key() == Key_Up && ( ke->state() & ControlButton ) == ControlButton ) { - functionLabel->gotoPrev(); - return TRUE; - } else if ( ke->key() == Key_Down && ( ke->state() & ControlButton ) == ControlButton ) { - functionLabel->gotoNext(); - return TRUE; - } - } - - if ( ke->text().length() && !( ke->state() & AltButton ) && - ( !ke->ascii() || ke->ascii() >= 32 ) || - ( ke->text() == "\t" && !( ke->state() & ControlButton ) ) ) { - if ( ke->key() == Key_Tab ) { - if ( curEditor->textCursor()->index() == 0 && - curEditor->textCursor()->paragraph()->isListItem() ) - return FALSE; - if ( doCompletion() ) - return TRUE; - } else if ( ke->key() == Key_Period && - ( curEditor->textCursor()->index() == 0 || - curEditor->textCursor()->paragraph()->at( curEditor->textCursor()->index() - 1 )->c != '.' ) - || - ke->key() == Key_Greater && - curEditor->textCursor()->index() > 0 && - curEditor->textCursor()->paragraph()->at( curEditor->textCursor()->index() - 1 )->c == '-' ) { - doObjectCompletion(); - } else { - if ( !doArgumentHint( ke->text() == "(" ) ) - functionLabel->hide(); - } - } - } else if ( o == completionPopup || o == completionListBox || - o == completionListBox->viewport() ) { - if ( e->type() == TQEvent::KeyPress ) { - TQKeyEvent *ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Enter || ke->key() == Key_Return || ke->key() == Key_Tab ) { - if ( ke->key() == Key_Tab && completionListBox->count() > 1 && - completionListBox->currentItem() < (int)completionListBox->count() - 1 ) { - completionListBox->setCurrentItem( completionListBox->currentItem() + 1 ); - return TRUE; - } - completeCompletion(); - return TRUE; - } else if ( ke->key() == Key_Left || ke->key() == Key_Right || - ke->key() == Key_Up || ke->key() == Key_Down || - ke->key() == Key_Home || ke->key() == Key_End || - ke->key() == Key_Prior || ke->key() == Key_Next ) { - return FALSE; - } else if ( ke->key() != Key_Shift && ke->key() != Key_Control && - ke->key() != Key_Alt ) { - int l = searchString.length(); - if ( ke->key() == Key_Backspace ) { - searchString.remove( searchString.length() - 1, 1 ); - } else { - searchString += ke->text(); - l = 1; - } - if ( !l || !continueComplete() ) { - completionPopup->close(); - curEditor->setFocus(); - } - TQApplication::sendEvent( curEditor, e ); - return TRUE; - } - } else if ( e->type() == TQEvent::MouseButtonDblClick ) { - completeCompletion(); - return TRUE; - } - } - if ( o == functionLabel || ::tqqt_cast<Editor*>(o) && functionLabel->isVisible() ) { - if ( e->type() == TQEvent::KeyPress ) { - TQKeyEvent *ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Escape ) { - functionLabel->hide(); - } else { - if ( !doArgumentHint( ke->text() == "(" ) ) - functionLabel->hide(); - if ( o == functionLabel ) { - TQApplication::sendEvent( curEditor, e ); - return TRUE; - } - } - } - } - return FALSE; -} - -void EditorCompletion::completeCompletion() -{ - int idx = curEditor->textCursor()->index(); - TQString s = completionListBox->currentText().mid( searchString.length() ); - curEditor->insert( s, (uint) ( TQTextEdit::RedoIndentation | - TQTextEdit::CheckNewLines | - TQTextEdit::RemoveSelected ) ); - int i = s.find( '(' ); - completionPopup->close(); - curEditor->setFocus(); - if ( i != -1 && i < (int)s.length() ) { - curEditor->setCursorPosition( curEditor->textCursor()->paragraph()->paragId(), idx + i + 1 ); - doArgumentHint( FALSE ); - } -} - -void EditorCompletion::setCurrentEdior( Editor *e ) -{ - curEditor = e; - curEditor->installEventFilter( this ); -} - -void EditorCompletion::addEditor( Editor *e ) -{ - e->installEventFilter( this ); -} - -bool EditorCompletion::doObjectCompletion() -{ - searchString = ""; - TQString object; - int i = curEditor->textCursor()->index(); - i--; - TQTextParagraph *p = curEditor->textCursor()->paragraph(); - for (;;) { - if ( i < 0 ) - break; - if ( p->at( i )->c == ' ' || p->at( i )->c == '\t' ) - break; - object.prepend( p->at( i )->c ); - i--; - } - - if ( object[ (int)object.length() - 1 ] == '-' ) - object.remove( object.length() - 1, 1 ); - - if ( object.isEmpty() ) - return FALSE; - return doObjectCompletion( object ); -} - -bool EditorCompletion::doObjectCompletion( const TQString & ) -{ - return FALSE; -} - -static void strip( TQString &txt ) -{ - int i = txt.find( "(" ); - if ( i == -1 ) - return; - txt = txt.left( i ); -} - -bool EditorCompletion::continueComplete() -{ - if ( searchString.isEmpty() ) { - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it = cList.begin(); it != cList.end(); ++it ) - (void)new CompletionItem( completionListBox, (*it).text, (*it).type, - (*it).postfix, (*it).prefix, (*it).postfix2 ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setSelected( completionListBox->currentItem(), TRUE ); - return TRUE; - } - - TQListBoxItem *i = completionListBox->findItem( searchString ); - if ( !i ) - return FALSE; - - TQString txt1 = i->text(); - TQString txt2 = searchString; - strip( txt1 ); - strip( txt2 ); - if ( txt1 == txt2 && !i->next() ) - return FALSE; - - TQValueList<CompletionEntry> res; - for ( TQValueList<CompletionEntry>::ConstIterator it = cList.begin(); it != cList.end(); ++it ) { - if ( (*it).text.left( searchString.length() ) == searchString ) - res << *it; - } - if ( res.isEmpty() ) - return FALSE; - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it2 = res.begin(); it2 != res.end(); ++it2 ) - (void)new CompletionItem( completionListBox, (*it2).text, (*it2).type, - (*it2).postfix, (*it2).prefix, (*it2).postfix2 ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setSelected( completionListBox->currentItem(), TRUE ); - return TRUE; -} - -bool EditorCompletion::doArgumentHint( bool useIndex ) -{ - TQTextCursor *cursor = curEditor->textCursor(); - int i = cursor->index() ; - if ( !useIndex ) { - bool foundParen = FALSE; - int closeParens = 0; - while ( i >= 0 ) { - if ( cursor->paragraph()->at( i )->c == ')' && i != cursor->index() ) - closeParens++; - if ( cursor->paragraph()->at( i )->c == '(' ) { - closeParens--; - if ( closeParens == -1 ) { - foundParen = TRUE; - break; - } - } - --i; - } - - if ( !foundParen ) - return FALSE; - } - int j = i - 1; - bool foundSpace = FALSE; - bool foundNonSpace = FALSE; - while ( j >= 0 ) { - if ( foundNonSpace && ( cursor->paragraph()->at( j )->c == ' ' || cursor->paragraph()->at( j )->c == ',' ) ) { - foundSpace = TRUE; - break; - } - if ( !foundNonSpace && ( cursor->paragraph()->at( j )->c != ' ' || cursor->paragraph()->at( j )->c != ',' ) ) - foundNonSpace = TRUE; - --j; - } - if ( foundSpace ) - ++j; - j = TQMAX( j, 0 ); - TQString function( cursor->paragraph()->string()->toString().mid( j, i - j + 1 ) ); - TQString part = cursor->paragraph()->string()->toString().mid( j, cursor->index() - j + 1 ); - function = function.simplifyWhiteSpace(); - for (;;) { - if ( function[ (int)function.length() - 1 ] == '(' ) { - function.remove( function.length() - 1, 1 ); - function = function.simplifyWhiteSpace(); - } else if ( function[ (int)function.length() - 1 ] == ')' ) { - function.remove( function.length() - 1, 1 ); - function = function.simplifyWhiteSpace(); - } else { - break; - } - } - - TQChar sep; - TQString pre, post; - TQValueList<TQStringList> argl = functionParameters( function, sep, pre, post ); - if ( argl.isEmpty() ) - return FALSE; - - TQString label; - int w = 0; - int num = 0; - if ( !functionLabel->isVisible() ) - functionLabel->setNumFunctions( (int)argl.count() ); - for ( TQValueList<TQStringList>::Iterator vit = argl.begin(); vit != argl.end(); ++vit, ++num ) { - TQStringList args = *vit; - int argNum = 0; - int inParen = 0; - for ( int k = 0; k < (int)part.length(); ++k ) { - if ( part[ k ] == sep && inParen < 2 ) - argNum++; - if ( part[ k ] == '(' ) - inParen++; - if ( part[ k ] == ')' ) - inParen--; - } - - TQString func = function; - int pnt = -1; - pnt = func.findRev( '.' ); - if ( pnt == -1 ) - func.findRev( '>' ); - if ( pnt != -1 ) - func = func.mid( pnt + 1 ); - - TQString s = func + "( "; - if ( s[ 0 ] == '\"' ) - s.remove( (uint)0, 1 ); - i = 0; - for ( TQStringList::Iterator it = args.begin(); it != args.end(); ++it, ++i ) { - if ( i == argNum ) - s += "<b>" + *it + "</b>"; - else - s += *it; - if ( i < (int)args.count() - 1 ) - s += ", "; - else - s += " "; - } - s += ")"; - s.prepend( pre ); - s.append( post ); - label += "<p>" + s + "</p>"; - functionLabel->setFunctionText( num, s ); - w = TQMAX( w, functionLabel->fontMetrics().width( s ) + 10 ); - } - w += 16; - if ( label.isEmpty() ) - return FALSE; - if ( functionLabel->isVisible() ) { - functionLabel->resize( w + 50, TQMAX( functionLabel->fontMetrics().height(), 16 ) ); - } else { - TQTextStringChar *chr = cursor->paragraph()->at( cursor->index() ); - int h = cursor->paragraph()->lineHeightOfChar( cursor->index() ); - int x = cursor->paragraph()->rect().x() + chr->x; - int y, dummy; - cursor->paragraph()->lineHeightOfChar( cursor->index(), &dummy, &y ); - y += cursor->paragraph()->rect().y(); - functionLabel->resize( w + 50, TQMAX( functionLabel->fontMetrics().height(), 16 ) ); - functionLabel->move( curEditor->mapToGlobal( curEditor->contentsToViewport( TQPoint( x, y + h ) ) ) ); - if ( functionLabel->x() + functionLabel->width() > TQApplication::desktop()->width() ) - functionLabel->move( TQMAX( 0, TQApplication::desktop()->width() - functionLabel->width() ), - functionLabel->y() ); - functionLabel->show(); - curEditor->setFocus(); - } - TQTimer::singleShot( 0, functionLabel, TQT_SLOT( retqlayout() ) ); - - return TRUE; -} - -TQValueList<TQStringList> EditorCompletion::functionParameters( const TQString &, TQChar &, TQString &, TQString & ) -{ - return TQValueList<TQStringList>(); -} - -void EditorCompletion::setContext( TQObject * ) -{ -} - -void EditorCompletion::showCompletion( const TQValueList<CompletionEntry> &lst ) -{ - TQTextCursor *cursor = curEditor->textCursor(); - TQTextStringChar *chr = cursor->paragraph()->at( cursor->index() ); - int h = cursor->paragraph()->lineHeightOfChar( cursor->index() ); - int x = cursor->paragraph()->rect().x() + chr->x; - int y, dummy; - cursor->paragraph()->lineHeightOfChar( cursor->index(), &dummy, &y ); - y += cursor->paragraph()->rect().y(); - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it = lst.begin(); it != lst.end(); ++it ) - (void)new CompletionItem( completionListBox, (*it).text, (*it).type, - (*it).postfix, (*it).prefix, (*it).postfix2 ); - cList = lst; - completionPopup->resize( completionListBox->tqsizeHint() + - TQSize( completionListBox->verticalScrollBar()->width() + 4, - completionListBox->horizontalScrollBar()->height() + 4 ) ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setFocus(); - if ( curEditor->mapToGlobal( TQPoint( 0, y ) ).y() + h + completionPopup->height() < TQApplication::desktop()->height() ) - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y + h ) ) ) ); - else - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y - completionPopup->height() ) ) ) ); - - completionPopup->show(); -} diff --git a/tqtinterface/qt4/tools/designer/editor/completion.h b/tqtinterface/qt4/tools/designer/editor/completion.h deleted file mode 100644 index a3ab598..0000000 --- a/tqtinterface/qt4/tools/designer/editor/completion.h +++ /dev/null @@ -1,110 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef COMPLETION_H -#define COMPLETION_H - -#include <tqstring.h> -#include <tqstringlist.h> -#include <tqobject.h> -#include <tqmap.h> - -class TQTextDocument; -class Editor; -class TQVBox; -class TQListBox; -class ArgHintWidget; - -struct CompletionEntry -{ - TQString type; - TQString text; - TQString postfix; - TQString prefix; - TQString postfix2; - - bool operator==( const CompletionEntry &c ) const { - return ( c.type == type && - c.text == text && - c.postfix == postfix && - c.prefix == prefix && - c.postfix2 == postfix2 ); - } -}; - -class EditorCompletion : public TQObject -{ - TQ_OBJECT - -public: - EditorCompletion( Editor *e ); - ~EditorCompletion(); - - virtual void addCompletionEntry( const TQString &s, TQTextDocument *doc, bool strict ); - virtual TQValueList<CompletionEntry> completionList( const TQString &s, TQTextDocument *doc ) const; - virtual void updateCompletionMap( TQTextDocument *doc ); - - bool eventFilter( TQObject *o, TQEvent *e ); - virtual void setCurrentEdior( Editor *e ); - virtual bool doCompletion(); - virtual bool doObjectCompletion(); - virtual bool doObjectCompletion( const TQString &object ); - virtual bool doArgumentHint( bool useIndex ); - - virtual void addEditor( Editor *e ); - virtual TQValueList<TQStringList> functionParameters( const TQString &func, TQChar &, TQString &prefix, TQString &postfix ); - - virtual void setContext( TQObject *this_ ); - - void setEnabled( bool b ) { enabled = b; } - -protected: - virtual bool continueComplete(); - virtual void showCompletion( const TQValueList<CompletionEntry> &lst ); - virtual void completeCompletion(); - -protected: - TQVBox *completionPopup; - TQListBox *completionListBox; - ArgHintWidget *functionLabel; - int completionOffset; - Editor *curEditor; - TQString searchString; - TQValueList<CompletionEntry> cList; - TQMap<TQChar, TQStringList> completionMap; - bool enabled; - TQTextDocument *lastDoc; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/conf.cpp b/tqtinterface/qt4/tools/designer/editor/conf.cpp deleted file mode 100644 index a9e5679..0000000 --- a/tqtinterface/qt4/tools/designer/editor/conf.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "conf.h" -#include <tqapplication.h> -#include <tqfont.h> -#include <tqcolor.h> -#include <tqsettings.h> - -TQMap<TQString, ConfigStyle> Config::defaultStyles() -{ - ConfigStyle s; - TQMap<TQString, ConfigStyle> styles; - int normalSize = tqApp->font().pointSize(); - TQString normalFamily = tqApp->font().family(); - TQString commentFamily = "times"; - int normalWeight = tqApp->font().weight(); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::black; - styles.insert( "Standard", s ); - - s.font = TQFont( commentFamily, normalSize, normalWeight, TRUE ); - s.color = TQt::red; - styles.insert( "Comment", s ); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::blue; - styles.insert( "Number", s ); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::darkGreen; - styles.insert( "String", s ); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::darkMagenta; - styles.insert( "Type", s ); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::darkYellow; - styles.insert( "Keyword", s ); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::darkBlue; - styles.insert( "Preprocessor", s ); - - s.font = TQFont( normalFamily, normalSize, normalWeight ); - s.color = TQt::darkRed; - styles.insert( "Label", s ); - - return styles; -} - -TQMap<TQString, ConfigStyle> Config::readStyles( const TQString &path ) -{ - TQMap<TQString, ConfigStyle> styles; - styles = defaultStyles(); - - TQString family; - int size = 10; - bool bold = FALSE, italic = FALSE, underline = FALSE; - int red = 0, green = 0, blue = 0; - - TQString elements[] = { - "Comment", - "Number", - "String", - "Type", - "Keyword", - "Preprocessor", - "Label", - "Standard", - TQString() - }; - - for ( int i = 0; elements[ i ] != TQString(); ++i ) { - TQSettings settings; - bool ok = TRUE; - for (;;) { - family = settings.readEntry( path + elements[ i ] + "/family", TQString(), &ok ); - if ( !ok ) - break; - size = settings.readNumEntry( path + elements[ i ] + "/size", 10, &ok ); - if ( !ok ) - break; - bold = settings.readBoolEntry( path + elements[ i ] + "/bold", FALSE, &ok ); - if ( !ok ) - break; - italic = settings.readBoolEntry( path + elements[ i ] + "/italic", FALSE, &ok ); - if ( !ok ) - break; - underline = settings.readBoolEntry( path + elements[ i ] + "/underline", FALSE, &ok ); - if ( !ok ) - break; - red = settings.readNumEntry( path + elements[ i ] + "/red", 0, &ok ); - if ( !ok ) - break; - green = settings.readNumEntry( path + elements[ i ] + "/green", 0, &ok ); - if ( !ok ) - break; - blue = settings.readNumEntry( path + elements[ i ] + "/blue", 0, &ok ); - if ( !ok ) - break; - break; - } - if ( !ok ) - continue; - TQFont f( family ); - f.setPointSize( size ); - f.setBold( bold ); - f.setItalic( italic ); - f.setUnderline( underline ); - TQColor c( red, green, blue ); - ConfigStyle s; - s.font = f; - s.color = c; - styles.remove( elements[ i ] ); - styles.insert( elements[ i ], s ); - } - return styles; -} - -void Config::saveStyles( const TQMap<TQString, ConfigStyle> &styles, const TQString &path ) -{ - TQString elements[] = { - "Comment", - "Number", - "String", - "Type", - "Keyword", - "Preprocessor", - "Label", - "Standard", - TQString() - }; - - TQSettings settings; - for ( int i = 0; elements[ i ] != TQString(); ++i ) { - settings.writeEntry( path + "/" + elements[ i ] + "/family", styles[ elements[ i ] ].font.family() ); - settings.writeEntry( path + "/" + elements[ i ] + "/size", styles[ elements[ i ] ].font.pointSize() ); - settings.writeEntry( path + "/" + elements[ i ] + "/bold", styles[ elements[ i ] ].font.bold() ); - settings.writeEntry( path + "/" + elements[ i ] + "/italic", styles[ elements[ i ] ].font.italic() ); - settings.writeEntry( path + "/" + elements[ i ] + "/underline", styles[ elements[ i ] ].font.underline() ); - settings.writeEntry( path + "/" + elements[ i ] + "/red", styles[ elements[ i ] ].color.red() ); - settings.writeEntry( path + "/" + elements[ i ] + "/green", styles[ elements[ i ] ].color.green() ); - settings.writeEntry( path + "/" + elements[ i ] + "/blue", styles[ elements[ i ] ].color.blue() ); - } -} - -bool Config::completion( const TQString &path ) -{ - TQSettings settings; - bool ret = settings.readBoolEntry( path + "/completion", TRUE ); - return ret; -} - -bool Config::wordWrap( const TQString &path ) -{ - TQSettings settings; - bool ret = settings.readBoolEntry( path + "/wordWrap", TRUE ); - return ret; -} - -bool Config::parenMatching( const TQString &path ) -{ - TQSettings settings; - bool ret = settings.readBoolEntry( path + "/parenMatching", TRUE ); - return ret; -} - -int Config::indentTabSize( const TQString &path ) -{ - TQSettings settings; - int ret = settings.readNumEntry( path + "/indentTabSize", 8 ); - return ret; -} - -int Config::indentIndentSize( const TQString &path ) -{ - TQSettings settings; - int ret = settings.readNumEntry( path + "/indentIndentSize", 4 ); - return ret; -} - -bool Config::indentKeepTabs( const TQString &path ) -{ - TQSettings settings; - bool ret = settings.readBoolEntry( path + "/indentKeepTabs", TRUE ); - return ret; -} - -bool Config::indentAutoIndent( const TQString &path ) -{ - TQSettings settings; - bool ret = settings.readBoolEntry( path + "/indentAutoIndent", TRUE ); - return ret; -} - -void Config::setCompletion( bool b, const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/completion", b ); -} - -void Config::setWordWrap( bool b, const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/wordWrap", b ); -} - -void Config::setParenMatching( bool b,const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/parenMatching", b ); -} - -void Config::setIndentTabSize( int s, const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/indentTabSize", s ); -} - -void Config::setIndentIndentSize( int s, const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/indentIndentSize", s ); -} - -void Config::setIndentKeepTabs( bool b, const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/indentKeepTabs", b ); -} - -void Config::setIndentAutoIndent( bool b, const TQString &path ) -{ - TQSettings settings; - settings.writeEntry( path + "/indentAutoIndent", b ); -} diff --git a/tqtinterface/qt4/tools/designer/editor/conf.h b/tqtinterface/qt4/tools/designer/editor/conf.h deleted file mode 100644 index 7869a7f..0000000 --- a/tqtinterface/qt4/tools/designer/editor/conf.h +++ /dev/null @@ -1,75 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef CONF_H -#define CONF_H - -#include <tqfont.h> -#include <tqcolor.h> -#include <tqmap.h> - -struct ConfigStyle -{ - TQFont font; - TQColor color; - - TQ_DUMMY_COMPARISON_OPERATOR( ConfigStyle ) -}; - -struct Config -{ - TQMap<TQString, ConfigStyle> styles; - bool hasCompletion, hasParenMatching, hasWordWrap; - - static TQMap<TQString, ConfigStyle> defaultStyles(); - static TQMap<TQString, ConfigStyle> readStyles( const TQString &path ); - static void saveStyles( const TQMap<TQString, ConfigStyle> &styles, const TQString &path ); - static bool completion( const TQString &path ); - static bool wordWrap( const TQString &path ); - static bool parenMatching( const TQString &path ); - static int indentTabSize( const TQString &path ); - static int indentIndentSize( const TQString &path ); - static bool indentKeepTabs( const TQString &path ); - static bool indentAutoIndent( const TQString &path ); - - static void setCompletion( bool b, const TQString &path ); - static void setWordWrap( bool b, const TQString &path ); - static void setParenMatching( bool b,const TQString &path ); - static void setIndentTabSize( int s, const TQString &path ); - static void setIndentIndentSize( int s, const TQString &path ); - static void setIndentKeepTabs( bool b, const TQString &path ); - static void setIndentAutoIndent( bool b, const TQString &path ); - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/editor.cpp b/tqtinterface/qt4/tools/designer/editor/editor.cpp deleted file mode 100644 index 9a1ee42..0000000 --- a/tqtinterface/qt4/tools/designer/editor/editor.cpp +++ /dev/null @@ -1,251 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "editor.h" -#include "parenmatcher.h" -#include <tqfile.h> -#include <private/tqrichtext_p.h> -#include "conf.h" -#include <tqapplication.h> -#include <tqpopupmenu.h> -#include <tqaccel.h> - -Editor::Editor( const TQString &fn, TQWidget *parent, const char *name ) - : TQTextEdit( parent, name ), hasError( FALSE ) -{ - document()->setFormatter( new TQTextFormatterBreakInWords ); - if ( !fn.isEmpty() ) - load( fn ); - setHScrollBarMode( TQScrollView::AlwaysOff ); - setVScrollBarMode( TQScrollView::AlwaysOn ); - document()->setUseFormatCollection( FALSE ); - parenMatcher = new ParenMatcher; - connect( this, TQT_SIGNAL( cursorPositionChanged( TQTextCursor * ) ), - this, TQT_SLOT( cursorPosChanged( TQTextCursor * ) ) ); - cfg = new Config; - document()->addSelection( Error ); - document()->addSelection( Step ); - document()->setSelectionColor( Error, red ); - document()->setSelectionColor( Step, yellow ); - document()->setInvertSelectionText( Error, FALSE ); - document()->setInvertSelectionText( Step, FALSE ); - document()->addSelection( ParenMatcher::Match ); - document()->addSelection( ParenMatcher::Mismatch ); - document()->setSelectionColor( ParenMatcher::Match, TQColor( 204, 232, 195 ) ); - document()->setSelectionColor( ParenMatcher::Mismatch, TQt::magenta ); - document()->setInvertSelectionText( ParenMatcher::Match, FALSE ); - document()->setInvertSelectionText( ParenMatcher::Mismatch, FALSE ); - - accelComment = new TQAccel( this ); - accelComment->connectItem( accelComment->insertItem( ALT + Key_C ), - this, TQT_SLOT( commentSelection() ) ); - accelUncomment = new TQAccel( this ); - accelUncomment->connectItem( accelUncomment->insertItem( ALT + Key_U ), - this, TQT_SLOT( uncommentSelection() ) ); - editable = TRUE; -} - -Editor::~Editor() -{ - delete cfg; - delete parenMatcher; -} - -void Editor::cursorPosChanged( TQTextCursor *c ) -{ - if ( parenMatcher->match( c ) ) - repaintChanged(); - if ( hasError ) { - emit clearErrorMarker(); - hasError = FALSE; - } -} - -void Editor::load( const TQString &fn ) -{ - filename = fn; - TQFile f( filename ); - if ( !f.open( IO_ReadOnly ) ) - return; - TQCString txt; - txt.resize( f.size() ); - f.readBlock( txt.data(), f.size() ); - TQString s( TQString::tqfromLatin1( txt ) ); - setText( s ); -} - -void Editor::save( const TQString &fn ) -{ - if ( !filename.isEmpty() ) - filename = fn; -} - -void Editor::configChanged() -{ - document()->tqinvalidate(); - viewport()->tqrepaint( FALSE ); -} - -void Editor::setErrorSelection( int line ) -{ - TQTextParagraph *p = document()->paragAt( line ); - if ( !p ) - return; - TQTextCursor c( document() ); - c.setParagraph( p ); - c.setIndex( 0 ); - document()->removeSelection( Error ); - document()->setSelectionStart( Error, c ); - c.gotoLineEnd(); - document()->setSelectionEnd( Error, c ); - hasError = TRUE; - viewport()->tqrepaint( FALSE ); -} - -void Editor::setStepSelection( int line ) -{ - TQTextParagraph *p = document()->paragAt( line ); - if ( !p ) - return; - TQTextCursor c( document() ); - c.setParagraph( p ); - c.setIndex( 0 ); - document()->removeSelection( Step ); - document()->setSelectionStart( Step, c ); - c.gotoLineEnd(); - document()->setSelectionEnd( Step, c ); - viewport()->tqrepaint( FALSE ); -} - -void Editor::clearStepSelection() -{ - document()->removeSelection( Step ); - viewport()->tqrepaint( FALSE ); -} - -void Editor::doChangeInterval() -{ - emit intervalChanged(); - TQTextEdit::doChangeInterval(); -} - -void Editor::commentSelection() -{ - TQTextParagraph *start = document()->selectionStartCursor( TQTextDocument::Standard ).paragraph(); - TQTextParagraph *end = document()->selectionEndCursor( TQTextDocument::Standard ).paragraph(); - if ( !start || !end ) - start = end = textCursor()->paragraph(); - while ( start ) { - if ( start == end && textCursor()->index() == 0 ) - break; - start->insert( 0, "//" ); - if ( start == end ) - break; - start = start->next(); - } - document()->removeSelection( TQTextDocument::Standard ); - repaintChanged(); - setModified( TRUE ); -} - -void Editor::uncommentSelection() -{ - TQTextParagraph *start = document()->selectionStartCursor( TQTextDocument::Standard ).paragraph(); - TQTextParagraph *end = document()->selectionEndCursor( TQTextDocument::Standard ).paragraph(); - if ( !start || !end ) - start = end = textCursor()->paragraph(); - while ( start ) { - if ( start == end && textCursor()->index() == 0 ) - break; - while ( start->at( 0 )->c == '/' ) - start->remove( 0, 1 ); - if ( start == end ) - break; - start = start->next(); - } - document()->removeSelection( TQTextDocument::Standard ); - repaintChanged(); - setModified( TRUE ); -} - -TQPopupMenu *Editor::createPopupMenu( const TQPoint &p ) -{ - TQPopupMenu *menu = TQTextEdit::createPopupMenu( p ); - menu->insertSeparator(); - menu->insertItem( tr( "C&omment Code\tAlt+C" ), this, TQT_SLOT( commentSelection() ) ); - menu->insertItem( tr( "Unco&mment Code\tAlt+U" ), this, TQT_SLOT( uncommentSelection() ) ); - return menu; -} - -bool Editor::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( ( e->type() == TQEvent::FocusIn || e->type() == TQEvent::FocusOut ) && - ( o == this || o == viewport() ) ) { - accelUncomment->setEnabled( e->type() == TQEvent::FocusIn ); - accelComment->setEnabled( e->type() == TQEvent::FocusIn ); - } - return TQTextEdit::eventFilter( o, e ); -} - -void Editor::doKeyboardAction( KeyboardAction action ) -{ - if ( !editable ) - return; - TQTextEdit::doKeyboardAction( action ); -} - -void Editor::keyPressEvent( TQKeyEvent *e ) -{ - if ( editable ) { - TQTextEdit::keyPressEvent( e ); - return; - } - - switch ( e->key() ) { - case Key_Left: - case Key_Right: - case Key_Up: - case Key_Down: - case Key_Home: - case Key_End: - case Key_Prior: - case Key_Next: - case Key_Direction_L: - case Key_Direction_R: - TQTextEdit::keyPressEvent( e ); - break; - default: - e->accept(); - break; - } -} diff --git a/tqtinterface/qt4/tools/designer/editor/editor.h b/tqtinterface/qt4/tools/designer/editor/editor.h deleted file mode 100644 index 8926c25..0000000 --- a/tqtinterface/qt4/tools/designer/editor/editor.h +++ /dev/null @@ -1,111 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef EDITOR_H -#define EDITOR_H - -#include <tqtextedit.h> - -struct Config; -class ParenMatcher; -class EditorCompletion; -class EditorBrowser; -class TQAccel; - -class Editor : public TQTextEdit -{ - TQ_OBJECT - -public: - enum Selection { - Error = 3, - Step = 4 - }; - - Editor( const TQString &fn, TQWidget *parent, const char *name ); - ~Editor(); - virtual void load( const TQString &fn ); - virtual void save( const TQString &fn ); - TQTextDocument *document() const { return TQTextEdit::document(); } - void placeCursor( const TQPoint &p, TQTextCursor *c ) { TQTextEdit::placeCursor( p, c ); } - void setDocument( TQTextDocument *doc ) { TQTextEdit::setDocument( doc ); } - TQTextCursor *textCursor() const { return TQTextEdit::textCursor(); } - void repaintChanged() { TQTextEdit::repaintChanged(); } - - virtual EditorCompletion *completionManager() { return 0; } - virtual EditorBrowser *browserManager() { return 0; } - virtual void configChanged(); - - Config *config() { return cfg; } - - void setErrorSelection( int line ); - void setStepSelection( int line ); - void clearStepSelection(); - void clearSelections(); - - virtual bool supportsErrors() const { return TRUE; } - virtual bool supportsBreakPoints() const { return TRUE; } - virtual void makeFunctionVisible( TQTextParagraph * ) {} - - void drawCursor( bool b ) { TQTextEdit::drawCursor( b ); } - - TQPopupMenu *createPopupMenu( const TQPoint &p ); - bool eventFilter( TQObject *o, TQEvent *e ); - - void setEditable( bool b ) { editable = b; } - -protected: - void doKeyboardAction( KeyboardAction action ); - void keyPressEvent( TQKeyEvent *e ); - -Q_SIGNALS: - void clearErrorMarker(); - void intervalChanged(); - -private Q_SLOTS: - void cursorPosChanged( TQTextCursor *c ); - void doChangeInterval(); - void commentSelection(); - void uncommentSelection(); - -protected: - ParenMatcher *parenMatcher; - TQString filename; - Config *cfg; - bool hasError; - TQAccel *accelComment, *accelUncomment; - bool editable; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/editor.pro b/tqtinterface/qt4/tools/designer/editor/editor.pro deleted file mode 100644 index 2a184ba..0000000 --- a/tqtinterface/qt4/tools/designer/editor/editor.pro +++ /dev/null @@ -1,40 +0,0 @@ -TEMPLATE = lib -CONFIG += qt warn_on staticlib -CONFIG -= dll -HEADERS = editor.h \ - parenmatcher.h \ - completion.h \ - viewmanager.h \ - markerwidget.h\ - conf.h \ - browser.h \ - arghintwidget.h \ - cindent.h - -SOURCES = editor.cpp \ - parenmatcher.cpp \ - completion.cpp \ - viewmanager.cpp \ - markerwidget.cpp \ - conf.cpp \ - browser.cpp \ - arghintwidget.cpp \ - cindent.cpp \ - yyindent.cpp - -FORMS = preferences.ui - -TARGET = editor -DESTDIR = ../../../lib -VERSION = 1.0.0 - -INCLUDEPATH += $$QT_SOURCE_TREE/tools/designer/interfaces - -target.path=$$libs.path - -INSTALLS += target - -unix { - TQMAKE_CFLAGS += $$TQMAKE_CFLAGS_SHLIB - TQMAKE_CXXFLAGS += $$TQMAKE_CXXFLAGS_SHLIB -} diff --git a/tqtinterface/qt4/tools/designer/editor/markerwidget.cpp b/tqtinterface/qt4/tools/designer/editor/markerwidget.cpp deleted file mode 100644 index a6d82ae..0000000 --- a/tqtinterface/qt4/tools/designer/editor/markerwidget.cpp +++ /dev/null @@ -1,491 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "markerwidget.h" -#include "viewmanager.h" -#include <private/tqrichtext_p.h> -#include "editor.h" -#include <tqpainter.h> -#include <tqpopupmenu.h> -#include "paragdata.h" - -static const char * error_xpm[] = { -"15 15 35 1", -" c None", -". c #FF0000", -"+ c #F50F0F", -"@ c #BF5F5F", -"# c #FF1010", -"$ c #FF7878", -"% c #FF0A0A", -"& c #FF0606", -"* c #FF1414", -"= c #FFFFFF", -"- c #FFA3A3", -"; c #FF0707", -"> c #FF0202", -", c #FF9898", -"' c #FF8888", -") c #D04747", -"! c #FFA7A7", -"~ c #FF9D9D", -"{ c #FFB1B1", -"] c #FF0C0C", -"^ c #F90A0A", -"/ c #FFB5B5", -"( c #FF0909", -"_ c #A08F8F", -": c #FFACAC", -"< c #FF0303", -"[ c #9F8F8F", -"} c #FB0606", -"| c #9F9090", -"1 c #CE4949", -"2 c #999999", -"3 c #FF1919", -"4 c #F70C0C", -"5 c #A38A8A", -"6 c #B37272", -" .... ", -" ........ ", -" .........+@ ", -" ..#$%..&$*.+ ", -" ..$=-;>,='..) ", -"...%-=!~={]..^ ", -"....;!==/(...._", -"....>~==:<....[", -"...&,=/:=!;..}|", -" ..$={(<!='..12", -" ..*']..;'3.45 ", -" +........462 ", -" @+......462 ", -" )^..}152 ", -" _[|2 "}; - -static const char * breakpoint_xpm[] = { -"15 15 3 1", -" c None", -". c #8B0000", -"+ c #FFFFFF", -" ....... ", -" ......... ", -" ........... ", -" ............. ", -"..+.+++.+..++..", -".+.+.+.+.+.+.+.", -".+...+.+.+.+.+.", -"..+..+.+.+.++..", -"...+.+.+.+.+...", -".+.+.+.+.+.+...", -"..+..+..+..+...", -" ............. ", -" ........... ", -" ......... ", -" ....... " }; - -static const char * step_xpm[] = { -"16 16 128 2", -" c None", -". c #B4B6BF", -"+ c #7893D8", -"@ c #8D95BF", -"# c #B8BFC1", -"$ c #B6D1E6", -"% c #7193E6", -"& c #8893C2", -"* c #B3BDC4", -"= c #AAD2EC", -"- c #9AD0FF", -"; c #6690EF", -"> c #8894C8", -", c #AFBAC4", -"' c #95BFEC", -") c #99CBFF", -"! c #8EC3FF", -"~ c #6D95F0", -"{ c #8792CA", -"] c #9DA7C3", -"^ c #8BA2E3", -"/ c #809AE0", -"( c #8398D1", -"_ c #93A0CC", -": c #ACB3CB", -"< c #B4B9C4", -"[ c #B6BAC4", -"} c #93A4CC", -"| c #82B0F5", -"1 c #8BBCFF", -"2 c #8EC0FF", -"3 c #8FC1FF", -"4 c #6594F4", -"5 c #7381CC", -"6 c #81A7E9", -"7 c #D0F5FF", -"8 c #C1EBFF", -"9 c #AEDAFF", -"0 c #A2D1FC", -"a c #A3C8F3", -"b c #AACAE6", -"c c #B4CFE9", -"d c #ADCCF9", -"e c #84B2FF", -"f c #82B4FF", -"g c #86B7FF", -"h c #88B7FF", -"i c #83B4FF", -"j c #5F8AF3", -"k c #7585C8", -"l c #77A4F3", -"m c #ABDFFF", -"n c #9CCAFF", -"o c #96C7FF", -"p c #97C8FF", -"q c #95C5FF", -"r c #9DCCFF", -"s c #A0CDFF", -"t c #90C0FF", -"u c #82AFFF", -"v c #7FAFFF", -"w c #7DAEFF", -"x c #79AAFF", -"y c #6C9EFF", -"z c #4366EB", -"A c #6894F2", -"B c #93C6FF", -"C c #82B3FF", -"D c #7AABFF", -"E c #73A5FF", -"F c #71A3FF", -"G c #6C9DFF", -"H c #699BFF", -"I c #76A8FF", -"J c #7EB0FF", -"K c #7BADFF", -"L c #74A5FF", -"M c #608BFF", -"N c #3462FF", -"O c #2444E5", -"P c #577AE0", -"Q c #5D90FF", -"R c #4C7AFF", -"S c #3B66FF", -"T c #335CF9", -"U c #365AF1", -"V c #3858E5", -"W c #3959E0", -"X c #416CF9", -"Y c #75A5FF", -"Z c #78A9FF", -"` c #74A4FF", -" . c #6191FF", -".. c #3059FF", -"+. c #1B37F1", -"@. c #6A75C7", -"#. c #828BC1", -"$. c #4358D8", -"%. c #374BDA", -"&. c #4759CA", -"*. c #636CC4", -"=. c #8489C0", -"-. c #9DA1C1", -";. c #A3A6BF", -">. c #7486CB", -",. c #6E98F5", -"'. c #719EFF", -"). c #608DFF", -"!. c #315EFF", -"~. c #1432F4", -"{. c #5C63C8", -"]. c #B1B4B9", -"^. c #B3BABB", -"/. c #ABB4C3", -"(. c #7299E9", -"_. c #5486FF", -":. c #224EFF", -"<. c #1733F2", -"[. c #7079C5", -"}. c #5C7DE9", -"|. c #2450FF", -"1. c #1B39EC", -"2. c #7077C5", -"3. c #3A54E1", -"4. c #1E36EA", -"5. c #858CBF", -"6. c #525FCB", -"7. c #727CBC", -" ", -" . + @ ", -" # $ % & ", -" * = - ; > ", -" , ' ) ! ~ { ", -"] ^ / ( _ : < [ } | 1 2 3 4 5 ", -"6 7 8 9 0 a b c d e f g h i j k ", -"l m n o p q r s t u v u w x y z ", -"A B C D E F G H I J K D L M N O ", -"P Q R S T U V W X Y Z ` ...+.@.", -"#.$.%.&.*.=.-.;.>.,.'.).!.~.{. ", -" ].^. /.(._.:.<.[. ", -" }.|.1.2. ", -" 3.4.5. ", -" 6.7. ", -" "}; - -static const char *stack_frame_xpm[]={ -"16 16 2 1", -". c None", -"# c #00c000", -"................", -".###............", -".#####..........", -".#######........", -".#########......", -".###########....", -".#############..", -".##############.", -".##############.", -".#############..", -".###########....", -".#########......", -".#######........", -".#####..........", -".###............", -"................"}; - -static TQPixmap *errorPixmap = 0; -static TQPixmap *breakpointPixmap = 0; -static TQPixmap *stepPixmap = 0; -static TQPixmap *stackFrame = 0; - -MarkerWidget::MarkerWidget( ViewManager *parent, const char*name ) - : TQWidget( parent, name, WRepaintNoErase | WStaticContents | WResizeNoErase ), viewManager( parent ) -{ - if ( !errorPixmap ) { - errorPixmap = new TQPixmap( error_xpm ); - breakpointPixmap = new TQPixmap( breakpoint_xpm ); - stepPixmap = new TQPixmap( step_xpm ); - stackFrame = new TQPixmap( stack_frame_xpm ); - } -} - -void MarkerWidget::paintEvent( TQPaintEvent * ) -{ - buffer.fill( backgroundColor() ); - - TQTextParagraph *p = ( (Editor*)viewManager->currentView() )->document()->firstParagraph(); - TQPainter painter( &buffer ); - int yOffset = ( (Editor*)viewManager->currentView() )->contentsY(); - while ( p ) { - if ( !p->isVisible() ) { - p = p->next(); - continue; - } - if ( p->rect().y() + p->rect().height() - yOffset < 0 ) { - p = p->next(); - continue; - } - if ( p->rect().y() - yOffset > height() ) - break; - if ( !((p->paragId() + 1) % 10) ) { - painter.save(); - painter.setPen( tqcolorGroup().dark() ); - painter.drawText( 0, p->rect().y() - yOffset, width() - 20, p->rect().height(), - TQt::AlignRight | TQt::AlignTop, TQString::number( p->paragId() + 1 ) ); - painter.restore(); - } - ParagData *paragData = (ParagData*)p->extraData(); - if ( paragData ) { - switch ( paragData->marker ) { - case ParagData::Error: - painter.drawPixmap( 3, p->rect().y() + - ( p->rect().height() - errorPixmap->height() ) / 2 - - yOffset, *errorPixmap ); - break; - case ParagData::Breakpoint: - painter.drawPixmap( 3, p->rect().y() + - ( p->rect().height() - breakpointPixmap->height() ) / 2 - - yOffset, *breakpointPixmap ); - break; - default: - break; - } - switch ( paragData->lineState ) { - case ParagData::FunctionStart: - painter.setPen( tqcolorGroup().foreground() ); - painter.setBrush( tqcolorGroup().base() ); - painter.drawLine( width() - 11, p->rect().y() - yOffset, - width() - 11, p->rect().y() + p->rect().height() - yOffset ); - painter.drawRect( width() - 15, p->rect().y() + ( p->rect().height() - 9 ) / 2 - yOffset, 9, 9 ); - painter.drawLine( width() - 13, p->rect().y() + ( p->rect().height() - 9 ) / 2 - yOffset + 4, - width() - 9, p->rect().y() + - ( p->rect().height() - 9 ) / 2 - yOffset + 4 ); - if ( !paragData->functionOpen ) - painter.drawLine( width() - 11, - p->rect().y() + ( p->rect().height() - 9 ) / 2 - yOffset + 2, - width() - 11, - p->rect().y() + - ( p->rect().height() - 9 ) / 2 - yOffset + 6 ); - break; - case ParagData::InFunction: - painter.setPen( tqcolorGroup().foreground() ); - painter.drawLine( width() - 11, p->rect().y() - yOffset, - width() - 11, p->rect().y() + p->rect().height() - yOffset ); - break; - case ParagData::FunctionEnd: - painter.setPen( tqcolorGroup().foreground() ); - painter.drawLine( width() - 11, p->rect().y() - yOffset, - width() - 11, p->rect().y() + p->rect().height() - yOffset ); - painter.drawLine( width() - 11, p->rect().y() + p->rect().height() - yOffset, - width() - 7, p->rect().y() + p->rect().height() - yOffset ); - break; - default: - break; - } - if ( paragData->step ) - painter.drawPixmap( 3, p->rect().y() + - ( p->rect().height() - stepPixmap->height() ) / 2 - - yOffset, *stepPixmap ); - if ( paragData->stackFrame ) - painter.drawPixmap( 3, p->rect().y() + - ( p->rect().height() - stackFrame->height() ) / 2 - - yOffset, *stackFrame ); - } - p = p->next(); - } - painter.end(); - - bitBlt( this, 0, 0, &buffer ); -} - -void MarkerWidget::resizeEvent( TQResizeEvent *e ) -{ - buffer.resize( e->size() ); - TQWidget::resizeEvent( e ); -} - -void MarkerWidget::mousePressEvent( TQMouseEvent *e ) -{ - if ( e->button() != LeftButton ) - return; - bool supports = ( (Editor*)viewManager->currentView() )->supportsBreakPoints(); - TQTextParagraph *p = ( (Editor*)viewManager->currentView() )->document()->firstParagraph(); - int yOffset = ( (Editor*)viewManager->currentView() )->contentsY(); - while ( p ) { - if ( e->y() >= p->rect().y() - yOffset && e->y() <= p->rect().y() + p->rect().height() - yOffset ) { - TQTextParagraphData *d = p->extraData(); - if ( !d ) - return; - ParagData *data = (ParagData*)d; - if ( supports && ( e->x() < width() - 15 ) ) { - if ( data->marker == ParagData::Breakpoint ) { - data->marker = ParagData::NoMarker; - } else { - bool ok = TRUE; - isBreakpointPossible( ok, ( (Editor*)viewManager->currentView() )->text(), p->paragId() ); - if ( ok ) - data->marker = ParagData::Breakpoint; - else - emit showMessage( tr( "<font color=red>Can't set breakpoint here!</font>" ) ); - } - } else { - if ( data->lineState == ParagData::FunctionStart ) { - if ( data->functionOpen ) - emit collapseFunction( p ); - else - emit expandFunction( p ); - } - } - break; - } - p = p->next(); - } - doRepaint(); - emit markersChanged(); -} - -void MarkerWidget::contextMenuEvent( TQContextMenuEvent *e ) -{ - TQPopupMenu m( 0, "editor_breakpointsmenu" ); - - int toggleBreakPoint = 0; -// int editBreakpoints = 0; - - TQTextParagraph *p = ( (Editor*)viewManager->currentView() )->document()->firstParagraph(); - int yOffset = ( (Editor*)viewManager->currentView() )->contentsY(); - bool supports = ( (Editor*)viewManager->currentView() )->supportsBreakPoints(); - while ( p && supports ) { - if ( e->y() >= p->rect().y() - yOffset && e->y() <= p->rect().y() + p->rect().height() - yOffset ) { - if ( ( (ParagData*)p->extraData() )->marker == ParagData::Breakpoint ) - toggleBreakPoint = m.insertItem( tr( "Clear Breakpoint\tF9" ) ); - else - toggleBreakPoint = m.insertItem( tr( "Set Breakpoint\tF9" ) ); -// editBreakpoints = m.insertItem( tr( "Edit Breakpoints..." ) ); - m.insertSeparator(); - break; - } - p = p->next(); - } - - const int collapseAll = m.insertItem( tr( "Collapse All" ) ); - const int expandAll = m.insertItem( tr( "Expand All" ) ); - const int collapseFunctions = m.insertItem( tr( "Collapse all Functions" ) ); - const int expandFunctions = m.insertItem( tr( "Expand all Functions" ) ); - - int res = m.exec( e->globalPos() ); - if ( res == -1) - return; - - if ( res == collapseAll ) { - emit collapse( TRUE ); - } else if ( res == collapseFunctions ) { - emit collapse( FALSE ); - } else if ( res == expandAll ) { - emit expand( TRUE ); - } else if ( res == expandFunctions ) { - emit expand( FALSE ); - } else if ( res == toggleBreakPoint ) { - if ( ( (ParagData*)p->extraData() )->marker == ParagData::Breakpoint ) { - ( (ParagData*)p->extraData() )->marker = ParagData::NoMarker; - } else { - bool ok; - isBreakpointPossible( ok, ( (Editor*)viewManager->currentView() )->text(), p->paragId() ); - if ( ok ) - ( (ParagData*)p->extraData() )->marker = ParagData::Breakpoint; - else - emit showMessage( tr( "<font color=red>Can't set breakpoint here!</font>" ) ); - } -// } else if ( res == editBreakpoints ) { -// emit editBreakPoints(); - } - doRepaint(); - emit markersChanged(); -} diff --git a/tqtinterface/qt4/tools/designer/editor/markerwidget.h b/tqtinterface/qt4/tools/designer/editor/markerwidget.h deleted file mode 100644 index 431f0d3..0000000 --- a/tqtinterface/qt4/tools/designer/editor/markerwidget.h +++ /dev/null @@ -1,75 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef MARKERWIDGET_H -#define MARKERWIDGET_H - -#include <tqwidget.h> -#include <tqpixmap.h> - -class ViewManager; -class TQTextParagraph; - -class MarkerWidget : public TQWidget -{ - TQ_OBJECT - -public: - MarkerWidget( ViewManager *parent, const char*name ); - -Q_SIGNALS: - void markersChanged(); - void expandFunction( TQTextParagraph *p ); - void collapseFunction( TQTextParagraph *p ); - void collapse( bool all /*else only functions*/ ); - void expand( bool all /*else only functions*/ ); - void editBreakPoints(); - void isBreakpointPossible( bool &possible, const TQString &code, int line ); - void showMessage( const TQString &msg ); - -public Q_SLOTS: - void doRepaint() { tqrepaint( FALSE ); } - -protected: - void paintEvent( TQPaintEvent *e ); - void resizeEvent( TQResizeEvent *e ); - void mousePressEvent( TQMouseEvent *e ); - void contextMenuEvent( TQContextMenuEvent *e ); - -private: - TQPixmap buffer; - ViewManager *viewManager; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/paragdata.h b/tqtinterface/qt4/tools/designer/editor/paragdata.h deleted file mode 100644 index 23ed6b5..0000000 --- a/tqtinterface/qt4/tools/designer/editor/paragdata.h +++ /dev/null @@ -1,65 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef PARAGDATA_H -#define PARAGDATA_H - -#include "parenmatcher.h" -#include <private/tqrichtext_p.h> - -struct ParagData : public TQTextParagraphData -{ -public: - enum MarkerType { NoMarker, Error, Breakpoint }; - enum LineState { FunctionStart, InFunction, FunctionEnd, Invalid }; - - ParagData() : lastLengthForCompletion( -1 ), marker( NoMarker ), - lineState( Invalid ), functionOpen( TRUE ), step( FALSE ), stackFrame( FALSE ) {} - ~ParagData() {} - void join( TQTextParagraphData *data ) { - ParagData *d = (ParagData*)data; - if ( marker == NoMarker ) - marker = d->marker; - lineState = d->lineState; - } - ParenList parenList; - int lastLengthForCompletion; - MarkerType marker; - LineState lineState; - bool functionOpen; - bool step; - bool stackFrame; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/parenmatcher.cpp b/tqtinterface/qt4/tools/designer/editor/parenmatcher.cpp deleted file mode 100644 index 990962c..0000000 --- a/tqtinterface/qt4/tools/designer/editor/parenmatcher.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "parenmatcher.h" -#include "paragdata.h" - -#include "tqtextedit.h" -#include <private/tqrichtext_p.h> -#include <tqapplication.h> - -ParenMatcher::ParenMatcher() -{ - enabled = TRUE; -} - -bool ParenMatcher::match( TQTextCursor *cursor ) -{ - if ( !enabled ) - return FALSE; - bool ret = FALSE; - - TQChar c( cursor->paragraph()->at( cursor->index() )->c ); - bool ok1 = FALSE; - bool ok2 = FALSE; - if ( c == '{' || c == '(' || c == '[' ) { - ok1 = checkOpenParen( cursor ); - ret = ok1 || ret; - } else if ( cursor->index() > 0 ) { - c = cursor->paragraph()->at( cursor->index() - 1 )->c; - if ( c == '}' || c == ')' || c == ']' ) { - ok2 = checkClosedParen( cursor ); - ret = ok2 || ret; - } - } - - return ret; -} - -bool ParenMatcher::checkOpenParen( TQTextCursor *cursor ) -{ - if ( !cursor->paragraph()->extraData() ) - return FALSE; - ParenList parenList = ( (ParagData*)cursor->paragraph()->extraData() )->parenList; - - Paren openParen, closedParen; - TQTextParagraph *closedParenParag = cursor->paragraph(); - - int i = 0; - int ignore = 0; - bool foundOpen = FALSE; - TQChar c = cursor->paragraph()->at( cursor->index() )->c; - for (;;) { - if ( !foundOpen ) { - if ( i >= (int)parenList.count() ) - goto bye; - openParen = parenList[ i ]; - if ( openParen.pos != cursor->index() ) { - ++i; - continue; - } else { - foundOpen = TRUE; - ++i; - } - } - - if ( i >= (int)parenList.count() ) { - for (;;) { - closedParenParag = closedParenParag->next(); - if ( !closedParenParag ) - goto bye; - if ( closedParenParag->extraData() && - ( (ParagData*)closedParenParag->extraData() )->parenList.count() > 0 ) { - parenList = ( (ParagData*)closedParenParag->extraData() )->parenList; - break; - } - } - i = 0; - } - - closedParen = parenList[ i ]; - if ( closedParen.type == Paren::Open ) { - ignore++; - ++i; - continue; - } else { - if ( ignore > 0 ) { - ignore--; - ++i; - continue; - } - - int id = Match; - if ( c == '{' && closedParen.chr != '}' || - c == '(' && closedParen.chr != ')' || - c == '[' && closedParen.chr != ']' ) - id = Mismatch; - cursor->document()->setSelectionStart( id, *cursor ); - int tidx = cursor->index(); - TQTextParagraph *tstring = cursor->paragraph(); - cursor->setParagraph( closedParenParag ); - cursor->setIndex( closedParen.pos + 1 ); - cursor->document()->setSelectionEnd( id, *cursor ); - cursor->setParagraph( tstring ); - cursor->setIndex( tidx ); - return TRUE; - } - } - - bye: - return FALSE; -} - -bool ParenMatcher::checkClosedParen( TQTextCursor *cursor ) -{ - if ( !cursor->paragraph()->extraData() ) - return FALSE; - ParenList parenList = ( (ParagData*)cursor->paragraph()->extraData() )->parenList; - - Paren openParen, closedParen; - TQTextParagraph *openParenParag = cursor->paragraph(); - - int i = (int)parenList.count() - 1; - int ignore = 0; - bool foundClosed = FALSE; - TQChar c = cursor->paragraph()->at( cursor->index() - 1 )->c; - for (;;) { - if ( !foundClosed ) { - if ( i < 0 ) - goto bye; - closedParen = parenList[ i ]; - if ( closedParen.pos != cursor->index() - 1 ) { - --i; - continue; - } else { - foundClosed = TRUE; - --i; - } - } - - if ( i < 0 ) { - for (;;) { - openParenParag = openParenParag->prev(); - if ( !openParenParag ) - goto bye; - if ( openParenParag->extraData() && - ( (ParagData*)openParenParag->extraData() )->parenList.count() > 0 ) { - parenList = ( (ParagData*)openParenParag->extraData() )->parenList; - break; - } - } - i = (int)parenList.count() - 1; - } - - openParen = parenList[ i ]; - if ( openParen.type == Paren::Closed ) { - ignore++; - --i; - continue; - } else { - if ( ignore > 0 ) { - ignore--; - --i; - continue; - } - - int id = Match; - if ( c == '}' && openParen.chr != '{' || - c == ')' && openParen.chr != '(' || - c == ']' && openParen.chr != '[' ) - id = Mismatch; - cursor->document()->setSelectionStart( id, *cursor ); - int tidx = cursor->index(); - TQTextParagraph *tstring = cursor->paragraph(); - cursor->setParagraph( openParenParag ); - cursor->setIndex( openParen.pos ); - cursor->document()->setSelectionEnd( id, *cursor ); - cursor->setParagraph( tstring ); - cursor->setIndex( tidx ); - return TRUE; - } - } - - bye: - return FALSE; -} diff --git a/tqtinterface/qt4/tools/designer/editor/parenmatcher.h b/tqtinterface/qt4/tools/designer/editor/parenmatcher.h deleted file mode 100644 index 2aa843b..0000000 --- a/tqtinterface/qt4/tools/designer/editor/parenmatcher.h +++ /dev/null @@ -1,78 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef PARENMATCHER_H -#define PARENMATCHER_H - -#include <tqstring.h> -#include <tqvaluelist.h> - -class TQTextCursor; - -struct Paren -{ - Paren() : type( Open ), chr( ' ' ), pos( -1 ) {} - Paren( int t, const TQChar &c, int p ) : type( (Type)t ), chr( c ), pos( p ) {} - enum Type { Open, Closed }; - Type type; - TQChar chr; - int pos; - - TQ_DUMMY_COMPARISON_OPERATOR( Paren ) -}; - -typedef TQValueList<Paren> ParenList; - -class ParenMatcher -{ -public: - enum Selection { - Match = 1, - Mismatch - }; - - ParenMatcher(); - - virtual bool match( TQTextCursor *c ); - - void setEnabled( bool b ) { enabled = b; } - -private: - bool checkOpenParen( TQTextCursor *c ); - bool checkClosedParen( TQTextCursor *c ); - - bool enabled; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/preferences.ui b/tqtinterface/qt4/tools/designer/editor/preferences.ui deleted file mode 100644 index 9b65ef2..0000000 --- a/tqtinterface/qt4/tools/designer/editor/preferences.ui +++ /dev/null @@ -1,510 +0,0 @@ -<!DOCTYPE UI><UI version="3.0" stdsetdef="1"> -<class>PreferencesBase</class> -<comment>********************************************************************* -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** This file is part of Qt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free Qt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with -** the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -*********************************************************************</comment> -<widget class="TQWidget"> - <property name="name"> - <cstring>PreferencesBase</cstring> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>362</width> - <height>396</height> - </rect> - </property> - <property name="caption"> - <string>Form1</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>6</number> - </property> - <property name="spacing"> - <number>6</number> - </property> - <widget class="TQGroupBox" row="0" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>GroupBox2</cstring> - </property> - <property name="frameShape"> - <enum>Box</enum> - </property> - <property name="frameShadow"> - <enum>Sunken</enum> - </property> - <property name="title"> - <string>S&yntax Highlighting</string> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>11</number> - </property> - <property name="spacing"> - <number>6</number> - </property> - <widget class="TQLabel" row="0" column="0"> - <property name="name"> - <cstring>TextLabel1</cstring> - </property> - <property name="text"> - <string>&Element:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>listElements</cstring> - </property> - </widget> - <widget class="TQLayoutWidget" row="1" column="1" rowspan="3" colspan="1"> - <property name="name"> - <cstring>Layout1</cstring> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>0</number> - </property> - <property name="spacing"> - <number>6</number> - </property> - <widget class="TQCheckBox" row="2" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>checkBold</cstring> - </property> - <property name="text"> - <string>&Bold</string> - </property> - </widget> - <widget class="TQToolButton" row="5" column="1"> - <property name="name"> - <cstring>buttonColor</cstring> - </property> - <property name="sizePolicy"> - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - <widget class="TQComboBox" row="0" column="1"> - <property name="name"> - <cstring>comboFamily</cstring> - </property> - <property name="editable"> - <bool>true</bool> - </property> - </widget> - <widget class="TQLabel" row="0" column="0"> - <property name="name"> - <cstring>TextLabel2</cstring> - </property> - <property name="text"> - <string>&Family:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>comboFamily</cstring> - </property> - </widget> - <widget class="TQCheckBox" row="4" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>checkUnderline</cstring> - </property> - <property name="text"> - <string>&Underline</string> - </property> - </widget> - <widget class="TQSpinBox" row="1" column="1"> - <property name="name"> - <cstring>spinSize</cstring> - </property> - <property name="minValue"> - <number>1</number> - </property> - </widget> - <widget class="TQCheckBox" row="3" column="0" rowspan="1" colspan="2"> - <property name="name"> - <cstring>checkItalic</cstring> - </property> - <property name="text"> - <string>&Italic</string> - </property> - </widget> - <widget class="TQLabel" row="5" column="0"> - <property name="name"> - <cstring>TextLabel4</cstring> - </property> - <property name="text"> - <string>Change co&lor:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>buttonColor</cstring> - </property> - </widget> - <widget class="TQLabel" row="1" column="0"> - <property name="name"> - <cstring>TextLabel3</cstring> - </property> - <property name="text"> - <string>&Size:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>spinSize</cstring> - </property> - </widget> - </grid> - </widget> - <widget class="TQListBox" row="1" column="0"> - <item> - <property name="text"> - <string>Comment</string> - </property> - </item> - <item> - <property name="text"> - <string>Number</string> - </property> - </item> - <item> - <property name="text"> - <string>String</string> - </property> - </item> - <item> - <property name="text"> - <string>Type</string> - </property> - </item> - <item> - <property name="text"> - <string>Keyword</string> - </property> - </item> - <item> - <property name="text"> - <string>Preprocessor</string> - </property> - </item> - <item> - <property name="text"> - <string>Label</string> - </property> - </item> - <item> - <property name="text"> - <string>Standard</string> - </property> - </item> - <property name="name"> - <cstring>listElements</cstring> - </property> - </widget> - <widget class="TQLabel" row="2" column="0"> - <property name="name"> - <cstring>TextLabel2_2</cstring> - </property> - <property name="text"> - <string>&Preview:</string> - </property> - <property name="buddy" stdset="0"> - <cstring>editPreview</cstring> - </property> - </widget> - <widget class="TQLineEdit" row="3" column="0"> - <property name="name"> - <cstring>editPreview</cstring> - </property> - <property name="text"> - <string>Some Text</string> - </property> - </widget> - <spacer row="4" column="1"> - <property name="name"> - <cstring>Spacer2</cstring> - </property> - <property name="orientation"> - <enum>Vertical</enum> - </property> - <property name="sizeType"> - <enum>Expanding</enum> - </property> - <property name="tqsizeHint"> - <size> - <width>20</width> - <height>0</height> - </size> - </property> - </spacer> - </grid> - </widget> - <widget class="TQGroupBox" row="1" column="0"> - <property name="name"> - <cstring>GroupBox3</cstring> - </property> - <property name="title"> - <string>Optio&ns</string> - </property> - <vbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>11</number> - </property> - <property name="spacing"> - <number>6</number> - </property> - <widget class="TQCheckBox"> - <property name="name"> - <cstring>checkWordWrap</cstring> - </property> - <property name="text"> - <string>&Word Wrap</string> - </property> - </widget> - <widget class="TQCheckBox"> - <property name="name"> - <cstring>checkCompletion</cstring> - </property> - <property name="text"> - <string>Comple&tion</string> - </property> - </widget> - <widget class="TQCheckBox"> - <property name="name"> - <cstring>checkParenMatching</cstring> - </property> - <property name="text"> - <string>Parentheses &Matching</string> - </property> - </widget> - </vbox> - </widget> - <widget class="TQGroupBox" row="1" column="1"> - <property name="name"> - <cstring>GroupBox3_2</cstring> - </property> - <property name="title"> - <string>Indentation</string> - </property> - <vbox> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>11</number> - </property> - <property name="spacing"> - <number>6</number> - </property> - <widget class="TQLayoutWidget"> - <property name="name"> - <cstring>Layout2</cstring> - </property> - <grid> - <property name="name"> - <cstring>unnamed</cstring> - </property> - <property name="margin"> - <number>0</number> - </property> - <property name="spacing"> - <number>6</number> - </property> - <widget class="TQSpinBox" row="0" column="1"> - <property name="name"> - <cstring>spinTabSize</cstring> - </property> - <property name="value"> - <number>8</number> - </property> - </widget> - <widget class="TQLabel" row="0" column="0"> - <property name="name"> - <cstring>TextLabel1_2</cstring> - </property> - <property name="text"> - <string>Tab Size:</string> - </property> - </widget> - <widget class="TQSpinBox" row="1" column="1"> - <property name="name"> - <cstring>spinIndentSize</cstring> - </property> - <property name="value"> - <number>4</number> - </property> - </widget> - <widget class="TQLabel" row="1" column="0"> - <property name="name"> - <cstring>TextLabel2_3</cstring> - </property> - <property name="text"> - <string>Indent Size:</string> - </property> - </widget> - </grid> - </widget> - <widget class="TQCheckBox"> - <property name="name"> - <cstring>checkKeepTabs</cstring> - </property> - <property name="text"> - <string>Keep Tabs</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - <widget class="TQCheckBox"> - <property name="name"> - <cstring>checkAutoIndent</cstring> - </property> - <property name="text"> - <string>Auto Indent</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </vbox> - </widget> - </grid> -</widget> -<connections> - <connection> - <sender>spinSize</sender> - <signal>valueChanged(int)</signal> - <receiver>PreferencesBase</receiver> - <slot>sizeChanged(int)</slot> - </connection> - <connection> - <sender>checkBold</sender> - <signal>toggled(bool)</signal> - <receiver>PreferencesBase</receiver> - <slot>boldChanged(bool)</slot> - </connection> - <connection> - <sender>checkItalic</sender> - <signal>toggled(bool)</signal> - <receiver>PreferencesBase</receiver> - <slot>italicChanged(bool)</slot> - </connection> - <connection> - <sender>checkUnderline</sender> - <signal>toggled(bool)</signal> - <receiver>PreferencesBase</receiver> - <slot>underlineChanged(bool)</slot> - </connection> - <connection> - <sender>buttonColor</sender> - <signal>clicked()</signal> - <receiver>PreferencesBase</receiver> - <slot>colorClicked()</slot> - </connection> - <connection> - <sender>comboFamily</sender> - <signal>activated(const QString&)</signal> - <receiver>PreferencesBase</receiver> - <slot>familyChanged(const QString&)</slot> - </connection> - <connection> - <sender>listElements</sender> - <signal>highlighted(const QString&)</signal> - <receiver>PreferencesBase</receiver> - <slot>elementChanged(const QString&)</slot> - </connection> -</connections> -<tabstops> - <tabstop>listElements</tabstop> - <tabstop>editPreview</tabstop> - <tabstop>comboFamily</tabstop> - <tabstop>spinSize</tabstop> - <tabstop>checkBold</tabstop> - <tabstop>checkItalic</tabstop> - <tabstop>checkUnderline</tabstop> - <tabstop>checkWordWrap</tabstop> - <tabstop>checkCompletion</tabstop> - <tabstop>checkParenMatching</tabstop> -</tabstops> -<includes> - <include location="global" impldecl="in declaration">qmap.h</include> - <include location="local" impldecl="in declaration">conf.h</include> - <include location="global" impldecl="in implementation">qpalette.h</include> - <include location="global" impldecl="in implementation">qlineedit.h</include> - <include location="global" impldecl="in implementation">qpixmap.h</include> - <include location="global" impldecl="in implementation">qcombobox.h</include> - <include location="global" impldecl="in implementation">qfontdatabase.h</include> - <include location="local" impldecl="in implementation">editor.h</include> - <include location="global" impldecl="in implementation">qpushbutton.h</include> - <include location="global" impldecl="in implementation">qcheckbox.h</include> - <include location="global" impldecl="in implementation">qcolordialog.h</include> - <include location="global" impldecl="in implementation">qsettings.h</include> - <include location="local" impldecl="in implementation">preferences.ui.h</include> -</includes> -<variables> - <variable>QString path;</variable> - <variable>QMap<QString, ConfigStyle> styles;</variable> - <variable>ConfigStyle currentStyle;</variable> - <variable>QString currentElement;</variable> -</variables> -<Q_SLOTS> - <slot>init()</slot> - <slot>destroy()</slot> - <slot>colorClicked()</slot> - <slot>reInit()</slot> - <slot>save()</slot> - <slot>updatePreview()</slot> - <slot>boldChanged( bool b )</slot> - <slot>elementChanged( const QString & element )</slot> - <slot>familyChanged( const QString & f )</slot> - <slot>italicChanged( bool b )</slot> - <slot>setColorPixmap( const QColor & c )</slot> - <slot>setPath( const QString & p )</slot> - <slot>sizeChanged( int s )</slot> - <slot>underlineChanged( bool b )</slot> -</Q_SLOTS> -<layoutdefaults spacing="6" margin="11"/> -</UI> diff --git a/tqtinterface/qt4/tools/designer/editor/preferences.ui.h b/tqtinterface/qt4/tools/designer/editor/preferences.ui.h deleted file mode 100644 index 7e1cdb3..0000000 --- a/tqtinterface/qt4/tools/designer/editor/preferences.ui.h +++ /dev/null @@ -1,181 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -void PreferencesBase::init() -{ - TQFontDatabase fdb; - comboFamily->insertStringList( fdb.families() ); - listElements->setCurrentItem( listElements->firstItem() ); - currentElement = ""; -} - -void PreferencesBase::destroy() -{ - -} - -void PreferencesBase::colorClicked() -{ - TQColor c = TQColorDialog::getColor( currentStyle.color, this, "editor_getcolor_dlg" ); - if ( c.isValid() ) { - currentStyle.color = c; - setColorPixmap( c ); - } -} - -void PreferencesBase::reInit() -{ - styles = Config::readStyles( path ); - currentElement = ""; - elementChanged( "Comment" ); - for ( int i = 0; i < comboFamily->count(); ++i ) { - if ( listElements->text( i ) == "Comment" ) { - listElements->setCurrentItem( i ); - break; - } - } - checkWordWrap->setChecked( Config::wordWrap( path ) ); - checkCompletion->setChecked( Config::completion( path ) ); - checkParenMatching->setChecked( Config::parenMatching( path ) ); - spinTabSize->setValue( Config::indentTabSize( path ) ); - spinIndentSize->setValue( Config::indentIndentSize( path ) ); - checkKeepTabs->setChecked( Config::indentKeepTabs( path ) ); - checkAutoIndent->setChecked( Config::indentAutoIndent( path ) ); -} - -void PreferencesBase::save() -{ - if ( !currentElement.isEmpty() ) { - styles.remove( currentElement ); - styles.insert( currentElement, currentStyle ); - currentElement = ""; - } - - TQSettings settings; - Config::saveStyles( styles, path ); - Config::setWordWrap( checkWordWrap->isChecked(), path ); - Config::setCompletion( checkCompletion->isChecked(), path ); - Config::setParenMatching( checkParenMatching->isChecked(), path ); - Config::setIndentTabSize( spinTabSize->value(), path ); - Config::setIndentIndentSize( spinIndentSize->value(), path ); - Config::setIndentKeepTabs( checkKeepTabs->isChecked(), path ); - Config::setIndentAutoIndent( checkAutoIndent->isChecked(), path ); -} - -void PreferencesBase::updatePreview() -{ - editPreview->setFont( currentStyle.font ); - TQPalette pal = editPreview->palette(); - pal.setColor( TQPalette::Active, TQColorGroup::Text, currentStyle.color ); - pal.setColor( TQPalette::Active, TQColorGroup::Foreground, currentStyle.color ); - editPreview->setPalette( pal ); -} - -void PreferencesBase::boldChanged( bool b ) -{ - currentStyle.font.setBold( b ); - updatePreview(); -} - -void PreferencesBase::elementChanged( const TQString &element ) -{ - if ( !currentElement.isEmpty() ) { - styles.remove( currentElement ); - styles.insert( currentElement, currentStyle ); - currentElement = ""; - } - TQMap<TQString, ConfigStyle>::Iterator it = styles.find( element ); - if ( it == styles.end() ) - return; - ConfigStyle s = *it; - currentStyle = s; - comboFamily->lineEdit()->setText( s.font.family() ); - spinSize->setValue( s.font.pointSize() ); - checkBold->setChecked( s.font.bold() ); - checkItalic->setChecked( s.font.italic() ); - checkUnderline->setChecked( s.font.underline() ); - setColorPixmap( s.color ); - currentElement = element; - updatePreview(); -} - -void PreferencesBase::familyChanged( const TQString &f ) -{ - TQString oldFamily = currentStyle.font.family(); - currentStyle.font.setFamily( f ); - if ( currentElement == "Standard" ) { - for ( TQMap<TQString, ConfigStyle>::Iterator it = styles.begin(); it != styles.end(); ++it ) { - if ( (*it).font.family() == oldFamily ) - (*it).font.setFamily( f ); - } - } - updatePreview(); -} - -void PreferencesBase::italicChanged( bool b ) -{ - currentStyle.font.setItalic( b ); - updatePreview(); -} - -void PreferencesBase::setColorPixmap( const TQColor &c ) -{ - TQPixmap pm( 20, 20 ); - pm.fill( c ); - buttonColor->setPixmap( pm ); - updatePreview(); -} - -void PreferencesBase::setPath( const TQString &p ) -{ - path = p; -} - -void PreferencesBase::sizeChanged( int s ) -{ - int oldSize = currentStyle.font.pointSize(); - currentStyle.font.setPointSize( s ); - if ( currentElement == "Standard" ) { - for ( TQMap<TQString, ConfigStyle>::Iterator it = styles.begin(); it != styles.end(); ++it ) { - if ( (*it).font.pointSize() == oldSize ) - (*it).font.setPointSize( s ); - } - } - updatePreview(); -} - -void PreferencesBase::underlineChanged( bool b ) -{ - currentStyle.font.setUnderline( b ); - updatePreview(); -} diff --git a/tqtinterface/qt4/tools/designer/editor/viewmanager.cpp b/tqtinterface/qt4/tools/designer/editor/viewmanager.cpp deleted file mode 100644 index 50760d4..0000000 --- a/tqtinterface/qt4/tools/designer/editor/viewmanager.cpp +++ /dev/null @@ -1,276 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "viewmanager.h" -#include "editor.h" -#include "markerwidget.h" -#include <tqlayout.h> -#include <private/tqrichtext_p.h> -#include "paragdata.h" -#include <tqobjectlist.h> -#include <tqlabel.h> -#include <tqtimer.h> - -ViewManager::ViewManager( TQWidget *parent, const char *name ) - : TQWidget( parent, name ), curView( 0 ) -{ - TQHBoxLayout *l = new TQHBoxLayout( this ); - markerWidget = new MarkerWidget( this, "editor_markerwidget" ); - connect( markerWidget, TQT_SIGNAL( markersChanged() ), - this, TQT_SIGNAL( markersChanged() ) ); - connect( markerWidget, TQT_SIGNAL( collapseFunction( TQTextParagraph * ) ), - this, TQT_SIGNAL( collapseFunction( TQTextParagraph * ) ) ); - connect( markerWidget, TQT_SIGNAL( expandFunction( TQTextParagraph * ) ), - this, TQT_SIGNAL( expandFunction( TQTextParagraph * ) ) ); - connect( markerWidget, TQT_SIGNAL( collapse( bool ) ), - this, TQT_SIGNAL( collapse( bool ) ) ); - connect( markerWidget, TQT_SIGNAL( expand( bool ) ), - this, TQT_SIGNAL( expand( bool ) ) ); - connect( markerWidget, TQT_SIGNAL( editBreakPoints() ), - this, TQT_SIGNAL( editBreakPoints() ) ); - connect( markerWidget, TQT_SIGNAL( isBreakpointPossible( bool&, const TQString &, int ) ), - this, TQT_SIGNAL( isBreakpointPossible( bool&, const TQString &, int ) ) ); - connect( markerWidget, TQT_SIGNAL( showMessage( const TQString & ) ), - this, TQT_SLOT( showMessage( const TQString & ) ) ); - messageTimer = new TQTimer( this ); - connect( messageTimer, TQT_SIGNAL( timeout() ), this, TQT_SLOT( cleartqStatusBar() ) ); - markerWidget->setFixedWidth( fontMetrics().width( "0000" ) + 20 ); - l->addWidget( markerWidget ); - tqlayout = new TQVBoxLayout( l ); -} - -void ViewManager::addView( TQWidget *view ) -{ - tqlayout->addWidget( view ); - curView = view; - connect( ( (Editor*)curView )->verticalScrollBar(), TQT_SIGNAL( valueChanged( int ) ), - markerWidget, TQT_SLOT( doRepaint() ) ); - connect( (Editor*)curView, TQT_SIGNAL( textChanged() ), - markerWidget, TQT_SLOT( doRepaint() ) ); - connect( (Editor*)curView, TQT_SIGNAL( clearErrorMarker() ), - this, TQT_SLOT( clearErrorMarker() ) ); - posLabel = new TQLabel( this, "editor_poslabel" ); - posLabel->tqsetAlignment( TQt::AlignVCenter | TQt::AlignRight ); - posLabel->setText( " Line: 1 Col: 1" ); - posLabel->setFrameStyle( TQFrame::Sunken | TQFrame::Panel ); - posLabel->setLineWidth( 1 ); - posLabel->setFixedHeight( posLabel->fontMetrics().height() ); - tqlayout->addWidget( posLabel ); - connect( curView, TQT_SIGNAL( cursorPositionChanged( int, int ) ), - this, TQT_SLOT( cursorPositionChanged( int, int ) ) ); -} - -TQWidget *ViewManager::currentView() const -{ - return curView; -} - -void ViewManager::childEvent( TQChildEvent *e ) -{ - if ( e->type() == TQEvent::ChildInserted && ::tqqt_cast<Editor*>(e->child()) ) - addView( (TQWidget*)e->child() ); - TQWidget::childEvent( e ); -} - -void ViewManager::setError( int line ) -{ - TQTextParagraph *p = ( (Editor*)curView )->document()->paragAt( line ); - if ( p ) { - ( (Editor*)curView )->setErrorSelection( line ); - ( (Editor*)curView )->setCursorPosition( line, 0 ); - ( (Editor*)curView )->viewport()->setFocus(); - ( (Editor*)curView )->makeFunctionVisible( p ); - ParagData *paragData = (ParagData*)p->extraData(); - if ( !paragData ) - paragData = new ParagData; - paragData->marker = ParagData::Error; - p->setExtraData( paragData ); - markerWidget->doRepaint(); - } -} - -void ViewManager::setStep( int line ) -{ - TQTextParagraph *p = ( (Editor*)curView )->document()->firstParagraph(); - while ( p ) { - if ( p->extraData() ) - ( (ParagData*)p->extraData() )->step = FALSE; - p = p->next(); - } - p = ( (Editor*)curView )->document()->paragAt( line ); - if ( p ) { - ( (Editor*)curView )->setStepSelection( line ); - ( (Editor*)curView )->setCursorPosition( line, 0 ); - ( (Editor*)curView )->viewport()->setFocus(); - ( (Editor*)curView )->makeFunctionVisible( p ); - ParagData *paragData = (ParagData*)p->extraData(); - if ( !paragData ) - paragData = new ParagData; - paragData->step = TRUE; - p->setExtraData( paragData ); - markerWidget->doRepaint(); - } -} - -void ViewManager::clearStep() -{ - ( (Editor*)curView )->clearStepSelection(); - TQTextParagraph *p = ( (Editor*)curView )->document()->firstParagraph(); - while ( p ) { - if ( p->extraData() ) - ( (ParagData*)p->extraData() )->step = FALSE; - p = p->next(); - } - markerWidget->doRepaint(); -} - -void ViewManager::setStackFrame( int line ) -{ - TQTextParagraph *p = ( (Editor*)curView )->document()->paragAt( line ); - if ( p ) { - ( (Editor*)curView )->sync(); - ( (Editor*)curView )->setCursorPosition( line, 0 ); - ( (Editor*)curView )->ensureCursorVisible(); - ( (Editor*)curView )->viewport()->setFocus(); - ( (Editor*)curView )->makeFunctionVisible( p ); - ParagData *paragData = (ParagData*)p->extraData(); - if ( !paragData ) - paragData = new ParagData; - paragData->stackFrame = TRUE; - p->setExtraData( paragData ); - markerWidget->doRepaint(); - } -} - -void ViewManager::clearStackFrame() -{ - TQTextParagraph *p = ( (Editor*)curView )->document()->firstParagraph(); - while ( p ) { - if ( p->extraData() ) { - ( (ParagData*)p->extraData() )->stackFrame = FALSE; - if ( ( (ParagData*)p->extraData() )->marker == ParagData::Error ) - ( (ParagData*)p->extraData() )->marker = ParagData::NoMarker; - } - p = p->next(); - } - markerWidget->doRepaint(); -} - -void ViewManager::resizeEvent( TQResizeEvent *e ) -{ - TQWidget::resizeEvent( e ); - markerWidget->doRepaint(); -} - -void ViewManager::clearErrorMarker() -{ - TQTextParagraph *p = ( (Editor*)curView )->document()->firstParagraph(); - while ( p ) { - if ( p->extraData() ) - ( (ParagData*)p->extraData() )->marker = ParagData::NoMarker; - p = p->next(); - } - markerWidget->doRepaint(); -} - -void ViewManager::setBreakPoints( const TQValueList<uint> &l ) -{ - TQTextParagraph *p = ( (Editor*)curView )->document()->firstParagraph(); - int i = 0; - while ( p ) { - if ( l.find( i ) != l.end() ) { - if ( !p->extraData() ) { - ParagData *data = new ParagData; - p->setExtraData( data ); - } - ParagData *data = (ParagData*)p->extraData(); - data->marker = ParagData::Breakpoint; - } else if ( p->extraData() ) { - ParagData *data = (ParagData*)p->extraData(); - data->marker = ParagData::NoMarker; - } - p = p->next(); - ++i; - } - markerWidget->doRepaint(); -} - -TQValueList<uint> ViewManager::breakPoints() const -{ - TQValueList<uint> l; - int i = 0; - TQTextParagraph *p = ( (Editor*)curView )->document()->firstParagraph(); - while ( p ) { - if ( p->extraData() && - ( (ParagData*)p->extraData() )->marker == ParagData::Breakpoint ) - l << i; - p = p->next(); - ++i; - } - return l; -} - -void ViewManager::showMarkerWidget( bool b ) -{ - if ( b ) - markerWidget->show(); - else - markerWidget->hide(); -} - -void ViewManager::emitMarkersChanged() -{ - emit markersChanged(); -} - -void ViewManager::cursorPositionChanged( int row, int col ) -{ - posLabel->setText( TQString( " Line: %1 Col: %2" ).arg( row + 1 ).arg( col + 1 ) ); -} - -void ViewManager::showMessage( const TQString &msg ) -{ - int row; - int col; - ( (TQTextEdit*)currentView() )->getCursorPosition( &row, &col ); - posLabel->setText( msg ); - messageTimer->start( 1000, TRUE ); -} - -void ViewManager::cleartqStatusBar() -{ - int row; - int col; - ( (TQTextEdit*)currentView() )->getCursorPosition( &row, &col ); - posLabel->setText( TQString( " Line: %1 Col: %2" ).arg( row + 1 ).arg( col + 1 ) ); -} diff --git a/tqtinterface/qt4/tools/designer/editor/viewmanager.h b/tqtinterface/qt4/tools/designer/editor/viewmanager.h deleted file mode 100644 index c6402db..0000000 --- a/tqtinterface/qt4/tools/designer/editor/viewmanager.h +++ /dev/null @@ -1,100 +0,0 @@ - /********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#ifndef VIEWMANAGER_H -#define VIEWMANAGER_H - -#include <tqwidget.h> -#include <tqvaluelist.h> - -class TQChildEvent; -class MarkerWidget; -class TQVBoxLayout; -class TQTQt::DockArea; -class TQTextParagraph; -class TQLabel; -class TQTimer; - -class ViewManager : public TQWidget -{ - TQ_OBJECT - -public: - ViewManager( TQWidget *parent, const char *name ); - - void addView( TQWidget *view ); - TQWidget *currentView() const; - void showMarkerWidget( bool ); - - void setError( int line ); - void setStep( int line ); - void setStackFrame( int line ); - void clearStep(); - void clearStackFrame(); - void setBreakPoints( const TQValueList<uint> &l ); - TQValueList<uint> breakPoints() const; - - void emitMarkersChanged(); - MarkerWidget *marker_widget() const { return markerWidget; } - -Q_SIGNALS: - void markersChanged(); - void expandFunction( TQTextParagraph *p ); - void collapseFunction( TQTextParagraph *p ); - void collapse( bool all /*else only functions*/ ); - void expand( bool all /*else only functions*/ ); - void editBreakPoints(); - void isBreakpointPossible( bool &possible, const TQString &code, int line ); - -protected Q_SLOTS: - void clearErrorMarker(); - void cursorPositionChanged( int row, int col ); - void showMessage( const TQString &msg ); - void cleartqStatusBar(); - -protected: - void childEvent( TQChildEvent *e ); - void resizeEvent( TQResizeEvent *e ); - -private: - TQWidget *curView; - MarkerWidget *markerWidget; - TQVBoxLayout *tqlayout; - TQTQt::DockArea *dockArea; - TQLabel *posLabel; - TQString extraText; - TQTimer *messageTimer; - -}; - -#endif diff --git a/tqtinterface/qt4/tools/designer/editor/yyindent.cpp b/tqtinterface/qt4/tools/designer/editor/yyindent.cpp deleted file mode 100644 index 1942ce8..0000000 --- a/tqtinterface/qt4/tools/designer/editor/yyindent.cpp +++ /dev/null @@ -1,1170 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at [email protected]. -** -** Licensees holding valid TQt Commercial 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 WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -/* - This file is a self-contained interactive indenter for C++ and TQt - Script. - - The general problem of indenting a C++ program is ill posed. On the - one hand, an indenter has to analyze programs written in a - free-form formal language that is best described in terms of - tokens, not characters, not lines. On the other hand, indentation - applies to lines and white space characters matter, and otherwise - the programs to indent are formally invalid in general, as they are - begin edited. - - The approach taken here works line by line. We receive a program - consisting of N lines or more, and we want to compute the - indentation appropriate for the Nth line. Lines beyond the Nth - lines are of no concern to us, so for simplicity we pretend the - program has exactly N lines and we call the Nth line the "bottom - line". Typically, we have to indent the bottom line when it's still - empty, so we concentrate our analysis on the N - 1 lines that - precede. - - By inspecting the (N - 1)-th line, the (N - 2)-th line, ... - backwards, we determine the kind of the bottom line and indent it - accordingly. - - * The bottom line is a comment line. See - bottomLineStartsInCComment() and - indentWhenBottomLineStartsInCComment(). - * The bottom line is a continuation line. See isContinuationLine() - and indentForContinuationLine(). - * The bottom line is a standalone line. See - indentForStandaloneLine(). - - Certain tokens that influence the indentation, notably braces, are - looked for in the lines. This is done by simple string comparison, - without a real tokenizer. Confusing constructs such as comments and - string literals are removed beforehand. -*/ - -#include <tqregexp.h> - -/* qmake ignore TQ_OBJECT */ - -/* - The indenter avoids getting stuck in almost infinite loops by - imposing arbitrary limits on the number of lines it analyzes when - looking for a construct. - - For example, the indenter never considers more than BigRoof lines - backwards when looking for the start of a C-style comment. -*/ -static const int SmallRoof = 40; -static const int BigRoof = 400; - -/* - The indenter supports a few parameters: - - * ppHardwareTabSize is the size of a '\t' in your favorite editor. - * ppIndentSize is the size of an indentation, or software tab - size. - * ppContinuationIndentSize is the extra indent for a continuation - line, when there is nothing to align against on the previous - line. - * ppCommentOffset is the indentation within a C-style comment, - when it cannot be picked up. -*/ - -static int ppHardwareTabSize = 8; -static int ppIndentSize = 4; -static int ppContinuationIndentSize = 8; - -static const int ppCommentOffset = 2; - -void setTabSize( int size ) -{ - ppHardwareTabSize = size; -} - -void setIndentSize( int size ) -{ - ppIndentSize = size; - ppContinuationIndentSize = 2 * size; -} - -static TQRegExp *literal = 0; -static TQRegExp *label = 0; -static TQRegExp *inlineCComment = 0; -static TQRegExp *braceX = 0; -static TQRegExp *iflikeKeyword = 0; - -/* - Returns the first non-space character in the string t, or - TQChar::null if the string is made only of white space. -*/ -static TQChar firstNonWhiteSpace( const TQString& t ) -{ - int i = 0; - while ( i < (int) t.length() ) { - if ( !t[i].isSpace() ) - return t[i]; - i++; - } - return TQChar::null; -} - -/* - Returns TRUE if string t is made only of white space; otherwise - returns FALSE. -*/ -static bool isOnlyWhiteSpace( const TQString& t ) -{ - return firstNonWhiteSpace( t ).isNull(); -} - -/* - Assuming string t is a line, returns the column number of a given - index. Column numbers and index are identical for strings that don't - contain '\t's. -*/ -int columnForIndex( const TQString& t, int index ) -{ - int col = 0; - if ( index > (int) t.length() ) - index = t.length(); - - for ( int i = 0; i < index; i++ ) { - if ( t[i] == TQChar('\t') ) { - col = ( (col / ppHardwareTabSize) + 1 ) * ppHardwareTabSize; - } else { - col++; - } - } - return col; -} - -/* - Returns the indentation size of string t. -*/ -int indentOfLine( const TQString& t ) -{ - return columnForIndex( t, t.find(firstNonWhiteSpace(t)) ); -} - -/* - Replaces t[k] by ch, unless t[k] is '\t'. Tab characters are better - left alone since they break the "index equals column" rule. No - provisions are taken against '\n' or '\r', which shouldn't occur in - t anyway. -*/ -static inline void eraseChar( TQString& t, int k, TQChar ch ) -{ - if ( t[k] != '\t' ) - t[k] = ch; -} - -/* - Removes some nefast constructs from a code line and returns the - resulting line. -*/ -static TQString trimmedCodeLine( const TQString& t ) -{ - TQString trimmed = t; - int k; - - /* - Replace character and string literals by X's, since they may - contain confusing characters (such as '{' and ';'). "Hello!" is - replaced by XXXXXXXX. The literals are rigourously of the same - length before and after; otherwise, we would break tqalignment of - continuation lines. - */ - k = 0; - while ( (k = trimmed.find(*literal, k)) != -1 ) { - for ( int i = 0; i < literal->matchedLength(); i++ ) - eraseChar( trimmed, k + i, 'X' ); - k += literal->matchedLength(); - } - - /* - Replace inline C-style comments by spaces. Other comments are - handled elsewhere. - */ - k = 0; - while ( (k = trimmed.find(*inlineCComment, k)) != -1 ) { - for ( int i = 0; i < inlineCComment->matchedLength(); i++ ) - eraseChar( trimmed, k + i, ' ' ); - k += inlineCComment->matchedLength(); - } - - /* - Replace goto and switch labels by whitespace, but be careful - with this case: - - foo1: bar1; - bar2; - */ - while ( trimmed.findRev(':') != -1 && trimmed.find(*label) != -1 ) { - TQString cap1 = label->cap( 1 ); - int pos1 = label->pos( 1 ); - int stop = cap1.length(); - - if ( pos1 + stop < (int) trimmed.length() && ppIndentSize < stop ) - stop = ppIndentSize; - - int i = 0; - while ( i < stop ) { - eraseChar( trimmed, pos1 + i, ' ' ); - i++; - } - while ( i < (int) cap1.length() ) { - eraseChar( trimmed, pos1 + i, ';' ); - i++; - } - } - - /* - Remove C++-style comments. - */ - k = trimmed.find( "//" ); - if ( k != -1 ) - trimmed.truncate( k ); - - return trimmed; -} - -/* - Returns '(' if the last parenthesis is opening, ')' if it is - closing, and TQChar::null if there are no parentheses in t. -*/ -static inline TQChar lastParen( const TQString& t ) -{ - int i = t.length(); - while ( i > 0 ) { - i--; - if ( t[i] == TQChar('(') || t[i] == TQChar(')') ) - return t[i]; - } - return TQChar::null; -} - -/* - Returns TRUE if typedIn the same as okayCh or is null; otherwise - returns FALSE. -*/ -static inline bool okay( TQChar typedIn, TQChar okayCh ) -{ - return typedIn == TQChar::null || typedIn == okayCh; -} - -/* - The "linizer" is a group of functions and variables to iterate - through the source code of the program to indent. The program is - given as a list of strings, with the bottom line being the line to - indent. The actual program might contain extra lines, but those are - uninteresting and not passed over to us. -*/ - -struct LinizerState -{ - TQString line; - int braceDepth; - bool leftBraceFollows; - - TQStringList::ConstIterator iter; - bool inCComment; - bool pendingRightBrace; -}; - -static TQStringList *yyProgram = 0; -static LinizerState *yyLinizerState = 0; - -// shorthands -static const TQString *yyLine = 0; -static const int *yyBraceDepth = 0; -static const bool *yyLeftBraceFollows = 0; - -/* - Saves and restores the state of the global linizer. This enables - backtracking. -*/ -#define YY_SAVE() \ - LinizerState savedState = *yyLinizerState -#define YY_RESTORE() \ - *yyLinizerState = savedState - -/* - Advances to the previous line in yyProgram and update yyLine - accordingly. yyLine is cleaned from comments and other damageable - constructs. Empty lines are skipped. -*/ -static bool readLine() -{ - int k; - - yyLinizerState->leftBraceFollows = - ( firstNonWhiteSpace(yyLinizerState->line) == TQChar('{') ); - - do { - if ( yyLinizerState->iter == yyProgram->begin() ) { - yyLinizerState->line = TQString(); - return FALSE; - } - - --yyLinizerState->iter; - yyLinizerState->line = *yyLinizerState->iter; - - yyLinizerState->line = trimmedCodeLine( yyLinizerState->line ); - - /* - Remove C-style comments that span multiple lines. If the - bottom line starts in a C-style comment, we are not aware - of that and eventually yyLine will contain a slash-aster. - - Notice that both if's can be executed, since - yyLinizerState->inCComment is potentially set to FALSE in - the first if. The order of the if's is also important. - */ - - if ( yyLinizerState->inCComment ) { - TQString slashAster( "/*" ); - - k = yyLinizerState->line.find( slashAster ); - if ( k == -1 ) { - yyLinizerState->line = TQString(); - } else { - yyLinizerState->line.truncate( k ); - yyLinizerState->inCComment = FALSE; - } - } - - if ( !yyLinizerState->inCComment ) { - TQString asterSlash( "*/" ); - - k = yyLinizerState->line.find( asterSlash ); - if ( k != -1 ) { - for ( int i = 0; i < k + 2; i++ ) - eraseChar( yyLinizerState->line, i, ' ' ); - yyLinizerState->inCComment = TRUE; - } - } - - /* - Remove preprocessor directives. - */ - k = 0; - while ( k < (int) yyLinizerState->line.length() ) { - TQChar ch = yyLinizerState->line[k]; - if ( ch == TQChar('#') ) { - yyLinizerState->line = TQString(); - } else if ( !ch.isSpace() ) { - break; - } - k++; - } - - /* - Remove trailing spaces. - */ - k = yyLinizerState->line.length(); - while ( k > 0 && yyLinizerState->line[k - 1].isSpace() ) - k--; - yyLinizerState->line.truncate( k ); - - /* - '}' increment the brace depth and '{' decrements it and not - the other way around, as we are parsing backwards. - */ - yyLinizerState->braceDepth += - yyLinizerState->line.contains( '}' ) - - yyLinizerState->line.contains( '{' ); - - /* - We use a dirty trick for - - } else ... - - We don't count the '}' yet, so that it's more or less - equivalent to the friendly construct - - } - else ... - */ - if ( yyLinizerState->pendingRightBrace ) - yyLinizerState->braceDepth++; - yyLinizerState->pendingRightBrace = - ( yyLinizerState->line.find(*braceX) == 0 ); - if ( yyLinizerState->pendingRightBrace ) - yyLinizerState->braceDepth--; - } while ( yyLinizerState->line.isEmpty() ); - - return TRUE; -} - -/* - Resets the linizer to its initial state, with yyLine containing the - line above the bottom line of the program. -*/ -static void startLinizer() -{ - yyLinizerState->braceDepth = 0; - yyLinizerState->inCComment = FALSE; - yyLinizerState->pendingRightBrace = FALSE; - - yyLine = &yyLinizerState->line; - yyBraceDepth = &yyLinizerState->braceDepth; - yyLeftBraceFollows = &yyLinizerState->leftBraceFollows; - - yyLinizerState->iter = yyProgram->end(); - --yyLinizerState->iter; - yyLinizerState->line = *yyLinizerState->iter; - readLine(); -} - -/* - Returns TRUE if the start of the bottom line of yyProgram (and - potentially the whole line) is part of a C-style comment; otherwise - returns FALSE. -*/ -static bool bottomLineStartsInCComment() -{ - TQString slashAster( "/*" ); - TQString asterSlash( "*/" ); - - /* - We could use the linizer here, but that would slow us down - terribly. We are better to trim only the code lines we need. - */ - TQStringList::ConstIterator p = yyProgram->end(); - --p; // skip bottom line - - for ( int i = 0; i < BigRoof; i++ ) { - if ( p == yyProgram->begin() ) - return FALSE; - --p; - - if ( (*p).find(slashAster) != -1 || (*p).find(asterSlash) != -1 ) { - TQString trimmed = trimmedCodeLine( *p ); - - if ( trimmed.find(slashAster) != -1 ) { - return TRUE; - } else if ( trimmed.find(asterSlash) != -1 ) { - return FALSE; - } - } - } - return FALSE; -} - -/* - Returns the recommended indent for the bottom line of yyProgram - assuming that it starts in a C-style comment, a condition that is - tested elsewhere. - - Essentially, we're trying to align against some text on the previous - line. -*/ -static int indentWhenBottomLineStartsInCComment() -{ - int k = yyLine->findRev( "/*" ); - if ( k == -1 ) { - /* - We found a normal text line in a comment. Align the - bottom line with the text on this line. - */ - return indentOfLine( *yyLine ); - } else { - /* - The C-style comment starts on this line. If there is - text on the same line, align with it. Otherwise, align - with the slash-aster plus a given offset. - */ - int indent = columnForIndex( *yyLine, k ); - k += 2; - while ( k < (int) yyLine->length() ) { - if ( !(*yyLine)[k].isSpace() ) - return columnForIndex( *yyLine, k ); - k++; - } - return indent + ppCommentOffset; - } -} - -/* - A function called match...() modifies the linizer state. If it - returns TRUE, yyLine is the top line of the matched construct; - otherwise, the linizer is left in an unknown state. - - A function called is...() keeps the linizer state intact. -*/ - -/* - Returns TRUE if the current line (and upwards) forms a braceless - control statement; otherwise returns FALSE. - - The first line of the following example is a "braceless control - statement": - - if ( x ) - y; -*/ -static bool matchBracelessControlStatement() -{ - int delimDepth = 0; - - if ( yyLine->endsWith("else") ) - return TRUE; - - if ( !yyLine->endsWith(")") ) - return FALSE; - - for ( int i = 0; i < SmallRoof; i++ ) { - int j = yyLine->length(); - while ( j > 0 ) { - j--; - TQChar ch = (*yyLine)[j]; - - switch ( ch.tqunicode() ) { - case ')': - delimDepth++; - break; - case '(': - delimDepth--; - if ( delimDepth == 0 ) { - if ( yyLine->find(*iflikeKeyword) != -1 ) { - /* - We have - - if ( x ) - y - - "if ( x )" is not part of the statement - "y". - */ - return TRUE; - } - } - if ( delimDepth == -1 ) { - /* - We have - - if ( (1 + - 2) - - and not - - if ( 1 + - 2 ) - */ - return FALSE; - } - break; - case '{': - case '}': - case ';': - /* - We met a statement separator, but not where we - expected it. What follows is probably a weird - continuation line. Be careful with ';' in for, - though. - */ - if ( ch != TQChar(';') || delimDepth == 0 ) - return FALSE; - } - } - - if ( !readLine() ) - break; - } - return FALSE; -} - -/* - Returns TRUE if yyLine is an unfinished line; otherwise returns - FALSE. - - In many places we'll use the terms "standalone line", "unfinished - line" and "continuation line". The meaning of these should be - evident from this code example: - - a = b; // standalone line - c = d + // unfinished line - e + // unfinished continuation line - f + // unfinished continuation line - g; // continuation line -*/ -static bool isUnfinishedLine() -{ - bool unf = FALSE; - - YY_SAVE(); - - if ( yyLine->isEmpty() ) - return FALSE; - - TQChar lastCh = (*yyLine)[(int) yyLine->length() - 1]; - if ( TQString("{};").find(lastCh) == -1 && !yyLine->endsWith("...") ) { - /* - It doesn't end with ';' or similar. If it's neither - "TQ_OBJECT" nor "if ( x )", it must be an unfinished line. - */ - unf = ( yyLine->contains("TQ_OBJECT") == 0 && - !matchBracelessControlStatement() ); - } else if ( lastCh == TQChar(';') ) { - if ( lastParen(*yyLine) == TQChar('(') ) { - /* - Exception: - - for ( int i = 1; i < 10; - */ - unf = TRUE; - } else if ( readLine() && yyLine->endsWith(";") && - lastParen(*yyLine) == TQChar('(') ) { - /* - Exception: - - for ( int i = 1; - i < 10; - */ - unf = TRUE; - } - } - - YY_RESTORE(); - return unf; -} - -/* - Returns TRUE if yyLine is a continuation line; otherwise returns - FALSE. -*/ -static bool isContinuationLine() -{ - bool cont = FALSE; - - YY_SAVE(); - if ( readLine() ) - cont = isUnfinishedLine(); - YY_RESTORE(); - return cont; -} - -/* - Returns the recommended indent for the bottom line of yyProgram, - assuming it's a continuation line. - - We're trying to align the continuation line against some parenthesis - or other bracked left opened on a previous line, or some interesting - operator such as '='. -*/ -static int indentForContinuationLine() -{ - int braceDepth = 0; - int delimDepth = 0; - - bool leftBraceFollowed = *yyLeftBraceFollows; - - for ( int i = 0; i < SmallRoof; i++ ) { - int hook = -1; - - int j = yyLine->length(); - while ( j > 0 && hook < 0 ) { - j--; - TQChar ch = (*yyLine)[j]; - - switch ( ch.tqunicode() ) { - case ')': - case ']': - delimDepth++; - break; - case '}': - braceDepth++; - break; - case '(': - case '[': - delimDepth--; - /* - An unclosed delimiter is a good place to align at, - at least for some styles (including Trolltech's). - */ - if ( delimDepth == -1 ) - hook = j; - break; - case '{': - braceDepth--; - /* - A left brace followed by other stuff on the same - line is typically for an enum or an initializer. - Such a brace must be treated just like the other - delimiters. - */ - if ( braceDepth == -1 ) { - if ( j < (int) yyLine->length() - 1 ) { - hook = j; - } else { - return 0; // shouldn't happen - } - } - break; - case '=': - /* - An equal sign is a very natural tqalignment hook - because it's usually the operator with the lowest - precedence in statements it appears in. Case in - point: - - int x = 1 + - 2; - - However, we have to beware of constructs such as - default arguments and explicit enum constant - values: - - void foo( int x = 0, - int y = 0 ); - - And not - - void foo( int x = 0, - int y = 0 ); - - These constructs are caracterized by a ',' at the - end of the unfinished lines or by unbalanced - parentheses. - */ - if ( TQString("!=<>").find((*yyLine)[j - 1]) == -1 && - (*yyLine)[j + 1] != '=' ) { - if ( braceDepth == 0 && delimDepth == 0 && - j < (int) yyLine->length() - 1 && - !yyLine->endsWith(",") && - (yyLine->contains('(') == yyLine->contains(')')) ) - hook = j; - } - } - } - - if ( hook >= 0 ) { - /* - Yes, we have a delimiter or an operator to align - against! We don't really align against it, but rather - against the following token, if any. In this example, - the following token is "11": - - int x = ( 11 + - 2 ); - - If there is no such token, we use a continuation indent: - - static TQRegExp foo( TQString( - "foo foo foo foo foo foo foo foo foo") ); - */ - hook++; - while ( hook < (int) yyLine->length() ) { - if ( !(*yyLine)[hook].isSpace() ) - return columnForIndex( *yyLine, hook ); - hook++; - } - return indentOfLine( *yyLine ) + ppContinuationIndentSize; - } - - if ( braceDepth != 0 ) - break; - - /* - The line's delimiters are balanced. It looks like a - continuation line or something. - */ - if ( delimDepth == 0 ) { - if ( leftBraceFollowed ) { - /* - We have - - int main() - { - - or - - Bar::Bar() - : Foo( x ) - { - - The "{" should be flush left. - */ - if ( !isContinuationLine() ) - return indentOfLine( *yyLine ); - } else if ( isContinuationLine() || yyLine->endsWith(",") ) { - /* - We have - - x = a + - b + - c; - - or - - int t[] = { - 1, 2, 3, - 4, 5, 6 - - The "c;" should fall right under the "b +", and the - "4, 5, 6" right under the "1, 2, 3,". - */ - return indentOfLine( *yyLine ); - } else { - /* - We have - - stream << 1 + - 2; - - We could, but we don't, try to analyze which - operator has precedence over which and so on, to - obtain the excellent result - - stream << 1 + - 2; - - We do have a special trick above for the assignment - operator above, though. - */ - return indentOfLine( *yyLine ) + ppContinuationIndentSize; - } - } - - if ( !readLine() ) - break; - } - return 0; -} - -/* - Returns the recommended indent for the bottom line of yyProgram if - that line is standalone (or should be indented likewise). - - Indenting a standalone line is tricky, mostly because of braceless - control statements. Grossly, we are looking backwards for a special - line, a "hook line", that we can use as a starting point to indent, - and then modify the indentation level according to the braces met - along the way to that hook. - - Let's consider a few examples. In all cases, we want to indent the - bottom line. - - Example 1: - - x = 1; - y = 2; - - The hook line is "x = 1;". We met 0 opening braces and 0 closing - braces. Therefore, "y = 2;" inherits the indent of "x = 1;". - - Example 2: - - if ( x ) { - y; - - The hook line is "if ( x ) {". No matter what precedes it, "y;" has - to be indented one level deeper than the hook line, since we met one - opening brace along the way. - - Example 3: - - if ( a ) - while ( b ) { - c; - } - d; - - To indent "d;" correctly, we have to go as far as the "if ( a )". - Compare with - - if ( a ) { - while ( b ) { - c; - } - d; - - Still, we're striving to go back as little as possible to accomodate - people with irregular indentation schemes. A hook line near at hand - is much more reliable than a remote one. -*/ -static int indentForStandaloneLine() -{ - for ( int i = 0; i < SmallRoof; i++ ) { - if ( !*yyLeftBraceFollows ) { - YY_SAVE(); - - if ( matchBracelessControlStatement() ) { - /* - The situation is this, and we want to indent "z;": - - if ( x && - y ) - z; - - yyLine is "if ( x &&". - */ - return indentOfLine( *yyLine ) + ppIndentSize; - } - YY_RESTORE(); - } - - if ( yyLine->endsWith(";") || yyLine->contains('{') > 0 ) { - /* - The situation is possibly this, and we want to indent - "z;": - - while ( x ) - y; - z; - - We return the indent of "while ( x )". In place of "y;", - any arbitrarily complex compound statement can appear. - */ - - if ( *yyBraceDepth > 0 ) { - do { - if ( !readLine() ) - break; - } while ( *yyBraceDepth > 0 ); - } - - LinizerState hookState; - - while ( isContinuationLine() ) - readLine(); - hookState = *yyLinizerState; - - readLine(); - if ( *yyBraceDepth <= 0 ) { - do { - if ( !matchBracelessControlStatement() ) - break; - hookState = *yyLinizerState; - } while ( readLine() ); - } - - *yyLinizerState = hookState; - - while ( isContinuationLine() ) - readLine(); - - /* - Never trust lines containing only '{' or '}', as some - people (Richard M. Stallman) format them weirdly. - */ - if ( yyLine->stripWhiteSpace().length() > 1 ) - return indentOfLine( *yyLine ) - *yyBraceDepth * ppIndentSize; - } - - if ( !readLine() ) - return -*yyBraceDepth * ppIndentSize; - } - return 0; -} - -/* - Constructs global variables used by the indenter. -*/ -static void initializeIndenter() -{ - literal = new TQRegExp( "([\"'])(?:\\\\.|[^\\\\])*\\1" ); - literal->setMinimal( TRUE ); - label = new TQRegExp( - "^\\s*((?:case\\b([^:]|::)+|[a-zA-Z_0-9]+)(?:\\s+Q_SLOTS)?:)(?!:)" ); - inlineCComment = new TQRegExp( "/\\*.*\\*/" ); - inlineCComment->setMinimal( TRUE ); - braceX = new TQRegExp( "^\\s*\\}\\s*(?:else|catch)\\b" ); - iflikeKeyword = new TQRegExp( "\\b(?:catch|do|for|if|while)\\b" ); - - yyLinizerState = new LinizerState; -} - -/* - Destroys global variables used by the indenter. -*/ -static void terminateIndenter() -{ - delete literal; - delete label; - delete inlineCComment; - delete braceX; - delete iflikeKeyword; - delete yyLinizerState; -} - -/* - Returns the recommended indent for the bottom line of program. - Unless null, typedIn stores the character of yyProgram that - triggered reindentation. - - This function works better if typedIn is set properly; it is - slightly more conservative if typedIn is completely wild, and - slighly more liberal if typedIn is always null. The user might be - annoyed by the liberal behavior. -*/ -int indentForBottomLine( const TQStringList& program, TQChar typedIn ) -{ - if ( program.isEmpty() ) - return 0; - - initializeIndenter(); - - yyProgram = new TQStringList( program ); - startLinizer(); - - const TQString& bottomLine = program.last(); - TQChar firstCh = firstNonWhiteSpace( bottomLine ); - int indent; - - if ( bottomLineStartsInCComment() ) { - /* - The bottom line starts in a C-style comment. Indent it - smartly, unless the user has already played around with it, - in which case it's better to leave her stuff alone. - */ - if ( isOnlyWhiteSpace(bottomLine) ) { - indent = indentWhenBottomLineStartsInCComment(); - } else { - indent = indentOfLine( bottomLine ); - } - } else if ( okay(typedIn, '#') && firstCh == TQChar('#') ) { - /* - Preprocessor directives go flush left. - */ - indent = 0; - } else { - if ( isUnfinishedLine() ) { - indent = indentForContinuationLine(); - } else { - indent = indentForStandaloneLine(); - } - - if ( okay(typedIn, '}') && firstCh == TQChar('}') ) { - /* - A closing brace is one level more to the left than the - code it follows. - */ - indent -= ppIndentSize; - } else if ( okay(typedIn, ':') ) { - TQRegExp caseLabel( - "\\s*(?:case\\b(?:[^:]|::)+" - "|(?:public|protected|private|Q_SIGNALS|default)(?:\\s+Q_SLOTS)?\\s*" - ")?:.*" ); - - if ( caseLabel.exactMatch(bottomLine) ) { - /* - Move a case label (or the ':' in front of a - constructor initialization list) one level to the - left, but only if the user did not play around with - it yet. Some users have exotic tastes in the - matter, and most users probably are not patient - enough to wait for the final ':' to format their - code properly. - - We don't attempt the same for goto labels, as the - user is probably the middle of "foo::bar". (Who - uses goto, anyway?) - */ - if ( indentOfLine(bottomLine) <= indent ) - indent -= ppIndentSize; - else - indent = indentOfLine( bottomLine ); - } - } - } - delete yyProgram; - terminateIndenter(); - return TQMAX( 0, indent ); -} - -#ifdef TQ_TEST_YYINDENT -/* - Test driver. -*/ - -#include <tqfile.h> -#include <tqtextstream.h> - -#include <errno.h> - -static TQString fileContents( const TQString& fileName ) -{ - TQFile f( fileName ); - if ( !f.open(IO_ReadOnly) ) { - qWarning( "yyindent error: Cannot open file '%s' for reading: %s", - fileName.latin1(), strerror(errno) ); - return TQString(); - } - - TQTextStream t( &f ); - TQString contents = t.read(); - f.close(); - if ( contents.isEmpty() ) - qWarning( "yyindent error: File '%s' is empty", fileName.latin1() ); - return contents; -} - -int main( int argc, char **argv ) -{ - if ( argc != 2 ) { - qWarning( "usage: yyindent file.cpp" ); - return 1; - } - - TQString code = fileContents( argv[1] ); - TQStringList program = TQStringList::split( '\n', code, TRUE ); - TQStringList p; - TQString out; - - while ( !program.isEmpty() && program.last().stripWhiteSpace().isEmpty() ) - program.remove( program.fromLast() ); - - TQStringList::ConstIterator line = program.begin(); - while ( line != program.end() ) { - p.push_back( *line ); - TQChar typedIn = firstNonWhiteSpace( *line ); - if ( p.last().endsWith(":") ) - typedIn = ':'; - - int indent = indentForBottomLine( p, typedIn ); - - if ( !(*line).stripWhiteSpace().isEmpty() ) { - for ( int j = 0; j < indent; j++ ) - out += " "; - out += (*line).stripWhiteSpace(); - } - out += "\n"; - ++line; - } - - while ( out.endsWith("\n") ) - out.truncate( out.length() - 1 ); - - printf( "%s\n", out.latin1() ); - return 0; -} -#endif |