亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? qmultilineedit.cpp

?? qtopia-phone-2.2.0下公共的控件實(shí)現(xiàn)源代碼。
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/************************************************************************ $Id: qt/src/widgets/qmultilineedit.cpp   2.3.12   edited 2005-10-27 $**** Implementation of QMultiLineEdit widget class**** Created : 961005**** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.**** This file is part of the widgets module of the Qt GUI Toolkit.**** This file may be distributed under the terms of the Q Public License** as defined by Trolltech AS of Norway and appearing in the file** LICENSE.QPL included in the packaging of this file.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition** 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** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Qt Commercial License Agreements.** See http://www.trolltech.com/qpl/ for QPL licensing information.** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "qmultilineedit.h"#ifndef QT_NO_MULTILINEEDIT#include "qpainter.h"#include "qscrollbar.h"#include "qclipboard.h"#include "qpixmap.h"#include "qregexp.h"#include "qapplication.h"#include "qdragobject.h"#include "qpopupmenu.h"#include "qtimer.h"#include "qdict.h"#include <ctype.h>#ifdef _WS_QWS_#include <qwsdisplay_qws.h>#ifndef QT_NO_QWS_IM#include "../kernel/qinputcontext_p.h"#endif#endif#ifdef QT_KEYPAD_MODEextern bool qt_modalEditingEnabled;#endifclass QMultiLineEditCommand{public:    enum Commands { Invalid, Begin, End, Insert, Delete };    virtual ~QMultiLineEditCommand() {};    virtual Commands type() { return Invalid; };    virtual int terminator() { return 0; }    virtual bool merge( QMultiLineEditCommand* ) { return FALSE;}};class QBeginCommand : public QMultiLineEditCommand{public:    QBeginCommand() {}    int terminator() { return 1; }    Commands type() { return Begin; };};class QEndCommand : public QMultiLineEditCommand{public:    QEndCommand() {}    int terminator() { return -1; }    Commands type() { return End; };};// QMultiLineEditUndoRedo methodsclass QDelTextCmd : public QMultiLineEditCommand{public:    int mOffset;    QString mStr;    // have to handle deletion of current selection    QDelTextCmd(int offset, const QString &str )	: mOffset( offset ),	  mStr ( str )    {    }    Commands type() { return Delete; };    bool merge( QMultiLineEditCommand* other)    {	if ( other->type() == type() ) {	    QDelTextCmd* o = (QDelTextCmd*) other;	    if ( mOffset + int(mStr.length()) == o->mOffset ) {		o->mStr.prepend( mStr );		o->mOffset = mOffset;		return TRUE;	    }	}	return FALSE;    }};class QInsTextCmd : public QDelTextCmd{public:    QInsTextCmd(int offset,const QString &str )	: QDelTextCmd( offset, str )    {    }    Commands type() { return Insert; };    bool merge( QMultiLineEditCommand* other)    {	if ( other->type() == type() ) {	    QInsTextCmd* o = (QInsTextCmd*) other;	    if ( mOffset == o->mOffset + int(o->mStr.length()) ) {		o->mStr += mStr;		return TRUE;	    }	}	return FALSE;    }};// NOT REVISED/*!  \class QMultiLineEdit qmultilineedit.h  \brief The QMultiLineEdit widget is a simple editor for inputting text.  \ingroup advanced  The QMultiLineEdit widget provides multiple line text input and display.  It is intended for moderate amounts of text. There are no arbitrary  limitations, but if you try to handle megabytes of data, performance  will suffer.  Per default, the edit widget does not perform any word  wrapping. This can be adjusted by calling setWordWrap(). Both  dynamic wrapping according to the visible width or a fixed number of  character or pixels is supported.  The widget can be used to display text by calling setReadOnly(TRUE)  The default key bindings are described in keyPressEvent(); they cannot  be customized except by inheriting the class.  <img src=qmlined-m.png> <img src=qmlined-w.png>*/static const char * const arrow_xpm[] = {    "     8     8        2            1",    ". c None",    "# c #000000",    "........",    "..####..",    "..#####.",    ".....##.",    ".#..###.",    ".#####..",    ".####...",    ".#####.."};enum {    IdUndo,    IdRedo,#ifndef QT_NO_CLIPBOARD    IdCut,    IdCopy,    IdPaste,    IdPasteSpecial,#endif    IdClear,    IdSelectAll,    IdCount};struct QMultiLineData{    QMultiLineData() :	isHandlingEvent(FALSE),	edited(FALSE),	maxLineWidth(0),	align(Qt::AlignLeft),	maxlines(-1),	maxlinelen(-1),	maxlen(-1),	wordwrap( QMultiLineEdit::NoWrap ),	wrapcol( -1 ),	wrappolicy( QMultiLineEdit::AtWhiteSpace ),	// This doesn't use font bearings, as textWidthWithTabs does that.	// This is just an aesthetics value.	// It should probably be QMAX(0,3-fontMetrics().minLeftBearing()) though,	// as bearings give some border anyway.	lr_marg(3),	marg_extra(0),	echomode(QMultiLineEdit::Normal),	val(0),	dnd_primed(FALSE),	dnd_forcecursor(FALSE),	undo( TRUE ),	undodepth( 256 )    {#ifndef QT_NO_QWS_IM		preeditStartY = -1;#endif#ifdef QT_KEYPAD_MODE	deleteAllTimerId = -1;	extraNewLineCount = 0;#endif	undoList.setAutoDelete( TRUE );	redoList.setAutoDelete( TRUE );	clearChartable();    }    bool isHandlingEvent;    bool edited;    int  maxLineWidth;    int	 scrollTime;    int	 scrollAccel;    int  align;    int  numlines;    int  maxlines;    int  maxlinelen;    int  maxlen;    QMultiLineEdit::WordWrap wordwrap;    int wrapcol;    QMultiLineEdit::WrapPolicy wrappolicy;    int lr_marg;    int marg_extra;    QMultiLineEdit::EchoMode echomode;    const QValidator* val;    bool dnd_primed; // If TRUE, user has pressed    bool dnd_forcecursor; // If TRUE show cursor for DND feedback,    // even if !hasFocus()    QList<QMultiLineEditCommand> undoList;    QList<QMultiLineEditCommand> redoList;    bool undo;    int undodepth;    short chartable[256];    void clearChartable()    {	int i = 256;	while ( i )	    chartable[--i] = 0;    }    QPixmap arrow;    QPoint dnd_startpos;    QTimer *blinkTimer, *scrollTimer;#ifndef QT_NO_QWS_IM    int preeditStartX, preeditStartY, preeditEndX, preeditEndY;    int preeditCPos, preeditLength, preeditSelLen;#endif#ifdef QT_KEYPAD_MODE    QString orgTxt;    int extraNewLineCount;    int deleteAllTimerId;#endif#ifndef QT_NO_DRAGANDDROP    QTimer *dnd_timer;#endif};#ifndef QT_NO_QWS_IMbool QMultiLineEdit::composeMode() const{    return  d->preeditStartY >= 0;}#endifstatic bool inBlinkTimer = FALSE;#ifndef QT_NO_QWS_IMextern QBrush *qt_im_compose_background;#endif#define CLEAR_UNDO {d->undoList.clear(); emit undoAvailable( FALSE );\    d->redoList.clear(); emit redoAvailable( FALSE );}void QMultiLineEdit::addUndoCmd(QMultiLineEditCommand* c){    if ( d->undoList.isEmpty() )	emit undoAvailable(TRUE);    else if ( c->merge( d->undoList.last() ) ) {	delete c;	return;    }    if ( int(d->undoList.count()) >= d->undodepth )	d->undoList.removeFirst();    d->undoList.append(c);    if ( !d->redoList.isEmpty() ) {	d->redoList.clear();	emit redoAvailable( FALSE );    }}void QMultiLineEdit::addRedoCmd(QMultiLineEditCommand* c){    if ( d->redoList.isEmpty() )	emit redoAvailable(TRUE);    d->redoList.append(c);}static const int initialScrollTime = 50; // mark text scroll timestatic const int initialScrollAccel = 5; // mark text scroll accel (0=fastest)static const int scroll_margin = 16;     // auto-scroll edge in DND#define WORD_WRAP ( d->wordwrap != QMultiLineEdit::NoWrap )#define DYNAMIC_WRAP ( d->wordwrap == QMultiLineEdit::WidgetWidth )#define FIXED_WIDTH_WRAP ( d->wordwrap == QMultiLineEdit::FixedPixelWidth )#define FIXED_COLUMN_WRAP ( d->wordwrap == QMultiLineEdit::FixedColumnWidth )#define BREAK_WITHIN_WORDS ( d->wrappolicy == QMultiLineEdit::Anywhere )static int defTabStop = 8;static int tabStopDist( const QFontMetrics &fm ){    int dist;    dist = fm.width( QChar('x' ));    if( dist == 0 )       dist = fm.maxWidth();    return defTabStop*dist;}/*!  Sets the distance between tab stops for all QMultiLineEdit instances  to \a ex, which is measured in multiples of the width of a lower case 'x'  in the widget's font. The initial value is 8.  \warning This function does not cause a redraw. It is best to call  it before any QMultiLineEdit widgets are shown.  \sa defaultTabStop()*/void QMultiLineEdit::setDefaultTabStop( int ex ){    defTabStop = ex;}/*!  Returns the distance between tab stops.  \sa setDefaultTabStop();*/int QMultiLineEdit::defaultTabStop(){    return defTabStop;}static int textWidthWithTabs( const QFontMetrics &fm, const QString &s, uint start, uint nChars, int align ){    if ( s.isEmpty() )	return 0;    int dist = -fm.leftBearing( s[(int)start] );    int i = start;    int tabDist = -1; // lazy eval    while ( (uint)i < s.length() && (uint)i < start+nChars ) {	if ( s[i] == '\t' && align == Qt::AlignLeft ) {	    if ( tabDist<0 )		tabDist = tabStopDist(fm);	    dist = ( (dist+tabDist+1)/tabDist ) * tabDist;	    i++;	} else {	    int ii = i;	    while ( (uint)i < s.length() && (uint)i < start + nChars && ( align != Qt::AlignLeft || s[i] != '\t' ) )		i++;	    dist += fm.width( s.mid(ii,i-ii) );	}    }    return dist;}static int xPosToCursorPos( const QString &s, const QFontMetrics &fm,			    int xPos, int width, int align ){    int i = 0;    int	  dist;    int tabDist;    if ( s.isEmpty() )	return 0;    if ( xPos > width )	xPos = width;    if ( xPos <= 0 )	return 0;    dist    = -fm.leftBearing( s[0] );    if ( align == Qt::AlignCenter || align == Qt::AlignHCenter )	dist = ( width - textWidthWithTabs( fm, s, 0, s.length(), align ) ) / 2;    else if ( align == Qt::AlignRight )	dist = width - textWidthWithTabs( fm, s, 0, s.length(), align );    int     distBeforeLastTab = dist;    tabDist = tabStopDist(fm);    while ( (uint)i < s.length() && dist < xPos ) {	if ( s[i] == '\t' && align == Qt::AlignLeft ) {	    distBeforeLastTab = dist;	    dist = (dist/tabDist + 1) * tabDist;	} else {	    dist += fm.width( s[i] );	}	i++;    }    if ( dist > xPos ) {	if ( dist > width ) {	    i--;	} else {	    if ( s[i-1] == '\t' && align == Qt::AlignLeft ) { // dist equals a tab stop position		if ( xPos - distBeforeLastTab < (dist - distBeforeLastTab)/2 )		    i--;	    } else {		if ( fm.width(s[i-1])/2 < dist-xPos )		    i--;	    }	}    }    return i;}/*!  Constructs a new, empty, QMultiLineEdit.*/QMultiLineEdit::QMultiLineEdit( QWidget *parent , const char *name )    :QTableView( parent, name, WNorthWestGravity | WRepaintNoErase ){    d = new QMultiLineData;    QFontMetrics fm( font() );    setCellHeight( fm.lineSpacing() );    setNumCols( 1 );    contents = new QList<QMultiLineEditRow>;    contents->setAutoDelete( TRUE );    cursorX = 0; cursorY = 0;    curXPos = 0;    setTableFlags( Tbl_autoVScrollBar|Tbl_autoHScrollBar|		   Tbl_smoothVScrolling |		   Tbl_clipCellPainting		   );    setFrameStyle( QFrame::WinPanel | QFrame::Sunken );#ifdef QT_KEYPAD_MODE    if( qt_modalEditingEnabled ) {	setBackgroundMode( PaletteBackground ); // Until modal    } else#else    setBackgroundMode( PaletteBase );#endif    setWFlags( WResizeNoErase );    setKeyCompression( TRUE );    setFocusPolicy( WheelFocus );#ifndef QT_NO_CURSOR    setCursor( ibeamCursor );    verticalScrollBar()->setCursor( arrowCursor );    horizontalScrollBar()->setCursor( arrowCursor );#endif    readOnly 	   = FALSE;    cursorOn	   = FALSE;    markIsOn	   = FALSE;    dragScrolling  = FALSE;    dragMarking    = FALSE;    textDirty	   = FALSE;    wordMark	   = FALSE;    overWrite	   = FALSE;    markAnchorX    = 0;    markAnchorY    = 0;    markDragX      = 0;    markDragY      = 0;    d->blinkTimer = new QTimer( this );    connect( d->blinkTimer, SIGNAL( timeout() ),	     this, SLOT( blinkTimerTimeout() ) );    d->scrollTimer = new QTimer( this );    connect( d->scrollTimer, SIGNAL( timeout() ),	     this, SLOT( scrollTimerTimeout() ) );#ifndef QT_NO_DRAGANDDROP    d->dnd_timer = new QTimer( this );    connect( d->dnd_timer, SIGNAL( timeout() ),	     this, SLOT( dndTimeout() ) );#endif    d->scrollTime = 0;    dummy = TRUE;    int w  = textWidth( QString::fromLatin1("") );    contents->append( new QMultiLineEditRow(QString::fromLatin1(""), w) );    (void)setNumRowsAndTruncate();    setWidth( w );    setAcceptDrops(TRUE);    if ( d->maxlines >= 0 && d->maxlines <= 6 ) {	setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );    } else {	setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );    }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
youjizz久久| 久久久99精品久久| 亚洲靠逼com| 色综合久久88色综合天天免费| 国产日韩视频一区二区三区| 国产乱人伦偷精品视频免下载| 久久亚洲精品小早川怜子| 国产美女在线精品| 亚洲国产精品成人综合色在线婷婷 | 欧美成人精品二区三区99精品| 青青青爽久久午夜综合久久午夜 | 欧美videofree性高清杂交| 精品制服美女久久| 欧美国产禁国产网站cc| 99亚偷拍自图区亚洲| 亚洲欧美日韩中文播放| 在线一区二区观看| 国产精品久久久久影院亚瑟| 97久久超碰精品国产| 一区二区三区在线观看网站| 国产自产视频一区二区三区| 国产精品美女久久久久aⅴ | 欧美岛国在线观看| 国产成a人无v码亚洲福利| 亚洲人成在线观看一区二区| 精品视频在线看| 韩国一区二区三区| 亚洲色图欧美在线| 日韩一区二区三| 91免费观看国产| 另类小说图片综合网| 久久嫩草精品久久久精品一| 91亚洲资源网| 国产真实乱偷精品视频免| 亚洲视频一区在线观看| 欧美tickling网站挠脚心| 国产精品萝li| 欧美午夜影院一区| 国产成人精品网址| 午夜精品视频一区| 国产精品成人免费精品自在线观看| 欧美日韩一区在线| 中文字幕一区二区三区精华液 | 亚洲一区欧美一区| 国产情人综合久久777777| 欧美日韩国产一级| 99精品欧美一区二区三区综合在线| 日韩精品视频网站| 亚洲欧洲制服丝袜| 国产欧美日韩视频在线观看| 欧美电影一区二区| 91国偷自产一区二区三区成为亚洲经典 | 精品久久久久久久人人人人传媒| 成人99免费视频| 国产综合久久久久久鬼色| 亚洲影视在线播放| 中文字幕亚洲电影| 国产日韩欧美一区二区三区乱码| 宅男噜噜噜66一区二区66| 一本大道久久a久久综合| 欧美激情一区在线观看| 精品国产乱码久久久久久老虎| 欧美午夜电影在线播放| 色综合久久久久久久久久久| 成人综合激情网| 国产91精品一区二区麻豆网站 | 久久精品欧美一区二区三区麻豆| 91精品午夜视频| 欧美日韩精品福利| 欧美日韩激情一区二区| 日韩av一级电影| 午夜精品久久久久影视| 樱桃视频在线观看一区| 亚洲欧洲综合另类在线| 国产精品久久久久影视| 中文一区二区在线观看| 国产无一区二区| 中文字幕精品—区二区四季| 久久综合九色欧美综合狠狠 | 日韩欧美一区二区不卡| 91麻豆精品国产91久久久久久| 欧美三级一区二区| 欧美三区在线观看| 欧美日韩国产片| 欧美日韩免费观看一区二区三区| 色综合久久99| 色88888久久久久久影院按摩| 色网综合在线观看| 欧美午夜精品免费| 欧美日韩成人激情| 日韩一区二区三区观看| 国产麻豆日韩欧美久久| 国产精品夜夜嗨| 成人av免费在线观看| av在线不卡观看免费观看| 91在线观看成人| 欧美人妇做爰xxxⅹ性高电影| 欧美丰满一区二区免费视频| 欧美一区二区免费视频| 欧美一级二级在线观看| 久久这里只有精品首页| 中文字幕电影一区| 一区二区免费视频| 久久久久久毛片| 亚洲三级在线观看| 图片区小说区区亚洲影院| 激情图片小说一区| av欧美精品.com| 欧美日韩极品在线观看一区| 日韩欧美国产高清| 国产精品入口麻豆九色| 一区2区3区在线看| 久草这里只有精品视频| 成人国产精品视频| 欧美日本精品一区二区三区| 成人avav影音| 91精品国产入口| 国产日韩精品久久久| 亚洲区小说区图片区qvod| 免费成人在线视频观看| 成人精品视频一区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲综合无码一区二区| 美女网站视频久久| 色综合久久中文综合久久97| 337p亚洲精品色噜噜狠狠| 日本一区二区综合亚洲| 亚洲.国产.中文慕字在线| 国产精品一区不卡| 在线精品视频一区二区三四 | 欧美激情艳妇裸体舞| 亚洲风情在线资源站| 国产不卡在线播放| 欧美高清激情brazzers| 亚洲天堂免费看| 激情综合亚洲精品| 91精品在线麻豆| 亚洲人成精品久久久久| 国产成人精品亚洲日本在线桃色 | 欧美国产综合色视频| 日本色综合中文字幕| 91激情五月电影| 国产精品私人影院| 国内精品嫩模私拍在线| 欧美精品 日韩| 亚洲男女毛片无遮挡| 丁香亚洲综合激情啪啪综合| 日韩视频中午一区| 亚洲高清免费在线| 色综合天天综合在线视频| 国产日韩欧美一区二区三区综合| 开心九九激情九九欧美日韩精美视频电影 | 久久精品视频一区二区三区| 日韩经典中文字幕一区| 97精品久久久久中文字幕| 337p日本欧洲亚洲大胆精品| 欧美一区二区三区免费| 亚洲图片欧美色图| 91蜜桃在线免费视频| 中文字幕在线不卡一区二区三区| 精品在线观看免费| 欧美一区二区免费| 日韩国产欧美在线观看| 欧美色综合影院| 亚洲一区在线观看免费观看电影高清| 国产成人在线网站| 国产午夜亚洲精品不卡| 国产一区二区三区免费观看| 懂色av一区二区三区蜜臀| 国产精品无人区| 91在线免费看| 中文字幕一区二区三区在线播放| 成人爱爱电影网址| 亚洲欧洲在线观看av| 91网站黄www| 亚洲最大色网站| 欧美色图天堂网| 天天爽夜夜爽夜夜爽精品视频| 欧美日韩一级二级| 日本在线不卡视频| 精品国精品国产| 国产激情视频一区二区三区欧美| 26uuu亚洲婷婷狠狠天堂| 国产精品情趣视频| 91成人网在线| 视频一区二区国产| 欧美大胆一级视频| 丰满亚洲少妇av| 亚洲精品少妇30p| 6080日韩午夜伦伦午夜伦| 美国毛片一区二区三区| 26uuu精品一区二区在线观看| 国产盗摄女厕一区二区三区| 国产精品不卡一区二区三区| 色呦呦国产精品| 日韩激情在线观看| 久久精品一区二区| 日本精品一区二区三区四区的功能| 亚洲3atv精品一区二区三区| 久久久精品日韩欧美|