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

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

?? qmultilineedit.cpp

?? qtopia-phone-2.2.0下公共的控件實(shí)現(xiàn)源代碼。
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/************************************************************************ $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 ) );    }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线色视频| 亚洲电影一区二区| 国产亚洲欧洲997久久综合| 精品国产一区二区三区忘忧草| 91精品国产欧美一区二区| 91精品国产手机| 日韩欧美国产一区在线观看| 欧美一级免费大片| 亚洲精品一区在线观看| 久久青草欧美一区二区三区| 久久精品无码一区二区三区| 国产日产欧产精品推荐色| 欧美激情一区二区三区在线| 国产精品午夜电影| 亚洲色欲色欲www在线观看| 亚洲精品伦理在线| 婷婷中文字幕综合| 免费高清在线一区| 国产成人亚洲精品狼色在线| 99精品欧美一区| 精品视频色一区| 日韩一区二区免费电影| 国产亚洲一区二区三区四区| 最近日韩中文字幕| 亚洲成人高清在线| 国产一区激情在线| 国产999精品久久久久久| 一本一本大道香蕉久在线精品 | 欧洲另类一二三四区| 7777精品伊人久久久大香线蕉的 | 美女免费视频一区二区| 激情伊人五月天久久综合| 不卡视频一二三| 欧美日韩精品一区二区| 欧美大片一区二区| 国产精品女同互慰在线看| 一区二区三区精品视频| 久88久久88久久久| 91在线一区二区| 欧美精品高清视频| 久久久www成人免费毛片麻豆 | 亚洲国产精品久久久久婷婷884 | 免费不卡在线视频| 成人午夜免费视频| 欧美夫妻性生活| 国产拍揄自揄精品视频麻豆| 亚洲午夜国产一区99re久久| 狠狠v欧美v日韩v亚洲ⅴ| 97精品国产露脸对白| 91麻豆精品国产自产在线| 国产欧美一区二区在线| 亚洲高清三级视频| 亚洲高清视频在线| 国产欧美一区二区精品仙草咪| 亚洲免费观看高清在线观看| 日韩va亚洲va欧美va久久| www.亚洲色图| 日韩精品最新网址| 一区二区三区四区在线播放| 国产在线精品一区二区三区不卡| 666欧美在线视频| 国产精品美女久久久久aⅴ| 日日骚欧美日韩| 成人高清视频免费观看| 欧美大片一区二区三区| 亚洲午夜久久久久久久久电影网| 成人免费av资源| 日韩免费性生活视频播放| 亚洲精品视频在线看| 福利一区在线观看| 精品入口麻豆88视频| 亚洲电影一级片| 色综合久久88色综合天天6| 日本一区二区三区国色天香 | 国产 日韩 欧美大片| 69p69国产精品| 一区二区三区日韩在线观看| 成人激情免费网站| 26uuu精品一区二区在线观看| 日韩国产欧美在线播放| 色天天综合色天天久久| 国产精品久久看| 国产成人免费高清| 精品少妇一区二区三区在线播放 | 久久精品噜噜噜成人88aⅴ| 欧美日韩一区不卡| 亚洲综合偷拍欧美一区色| jlzzjlzz国产精品久久| 中文字幕国产一区二区| 国产高清不卡一区| 精品电影一区二区| 久久国产精品99久久久久久老狼| 欧美群妇大交群中文字幕| 亚洲一级二级在线| 色国产综合视频| 亚洲精品老司机| 色94色欧美sute亚洲13| 亚洲另类在线视频| 色婷婷精品大在线视频 | 一本大道久久a久久综合婷婷| 国产精品三级视频| 不卡一区二区中文字幕| 国产精品情趣视频| 不卡一区中文字幕| 亚洲欧美另类图片小说| jizz一区二区| 亚洲精品va在线观看| 在线日韩一区二区| 婷婷久久综合九色国产成人| 欧美电影一区二区| 精品一区二区在线播放| 26uuu另类欧美亚洲曰本| 激情六月婷婷综合| 国产日产精品1区| 91在线丨porny丨国产| 亚洲自拍都市欧美小说| 欧美日韩成人一区| 国产一区欧美二区| 中文字幕av一区二区三区| 97精品久久久午夜一区二区三区 | 色综合色综合色综合色综合色综合 | 欧美一区二区三区不卡| 久久精品国产亚洲一区二区三区| 日韩欧美第一区| 国产成人啪免费观看软件| 国产精品久久久久影院| 欧美天堂亚洲电影院在线播放| 日韩精品久久久久久| 欧美v亚洲v综合ⅴ国产v| 岛国精品在线观看| 一二三区精品视频| 91精品久久久久久久99蜜桃 | 北条麻妃国产九九精品视频| 自拍偷在线精品自拍偷无码专区| 欧美日韩一级片在线观看| 精品一区二区免费看| 国产精品久久久久天堂| 色偷偷久久人人79超碰人人澡| 国产91综合一区在线观看| 亚洲一区二区三区中文字幕在线 | 午夜亚洲福利老司机| 精品日韩成人av| 99免费精品在线观看| 性感美女久久精品| 久久久久久久电影| 欧美喷潮久久久xxxxx| 国产麻豆精品久久一二三| 一区二区三区日本| 亚洲精品一区在线观看| 欧洲激情一区二区| 国产一区在线不卡| 亚洲国产精品一区二区www在线| 久久久噜噜噜久久中文字幕色伊伊| 不卡电影一区二区三区| 婷婷综合久久一区二区三区| 国产精品久久二区二区| 91精品国产综合久久久蜜臀图片| 成人av网站在线观看| 日韩精彩视频在线观看| 亚洲人妖av一区二区| 日韩精品一区国产麻豆| aaa欧美大片| 国产伦精一区二区三区| 亚洲一本大道在线| 中文字幕成人在线观看| 欧美大白屁股肥臀xxxxxx| 色婷婷国产精品综合在线观看| 蜜臀精品久久久久久蜜臀| 一区二区三区高清在线| 国产午夜亚洲精品午夜鲁丝片| 欧美日本在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 国产综合色精品一区二区三区| 亚洲国产成人91porn| 亚洲免费电影在线| 国产欧美日韩综合| 精品免费视频一区二区| 欧美日韩大陆一区二区| 色婷婷综合久久| av在线不卡免费看| 国产一区二区91| 韩国精品一区二区| 美国欧美日韩国产在线播放| 亚洲久草在线视频| 国产精品美女久久久久久久久| 精品久久人人做人人爽| 欧美精品在线视频| 欧美三级电影精品| 91久久人澡人人添人人爽欧美| 国产v综合v亚洲欧| 国产露脸91国语对白| 麻豆精品视频在线| 美女爽到高潮91| 美女在线观看视频一区二区| 日本欧美一区二区在线观看| 亚洲香肠在线观看| 亚洲国产一区二区视频| 一区二区成人在线| 亚洲一二三区不卡| 亚洲sss视频在线视频|