示例#1
0
/*
 * Copyright 2000-2015 Rochus Keller <mailto:[email protected]>
 *
 * This file is part of the CARA (Computer Aided Resonance Assignment,
 * see <http://cara.nmr.ch/>) NMR Application Framework (NAF) library.
 *
 * The following is the license that applies to this copy of the
 * library. For a license to use the library under conditions
 * other than those described here, please email to [email protected].
 *
 * GNU General Public License Usage
 * This file may be used under the terms of the GNU General Public
 * License (GPL) versions 2.0 or 3.0 as published by the Free Software
 * Foundation and appearing in the file LICENSE.GPL included in
 * the packaging of this file. Please review the following information
 * to ensure GNU General Public Licensing requirements will be met:
 * http://www.fsf.org/licensing/licenses/info/GPLv2.html and
 * http://www.gnu.org/copyleft/gpl.html.
 */

#include <QTextEdit>
#include "QtlTextEdit.h"
#include "Enums.h"
#include <QString>
#include <QMenu>
#include <QList>
#include <QPoint>
#include <QUrl>
#include <QTextCursor>
#include <QTextCharFormat>
#include <QInputContext>
#include <Script/ObjectInstaller.h>
#include <Script/ValueInstaller.h>
#include "Variant.h"
using namespace Qtl;
using namespace Lua;


int TextEdit::alignment(lua_State * L) // const : Qt::Alignment
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	Lua::Util::push( L, obj->alignment() );
	return 1;
}
int TextEdit::anchorAt(lua_State * L) // ( const QPoint & pos ) const : QString
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	QPointF* p = ValueInstaller2<QPointF>::check( L, 2 );
	lua_pushstring(L, obj->anchorAt( p->toPoint() ).toLatin1() );
	return 1;
}
int TextEdit::canPaste(lua_State * L) // const : bool
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	Lua::Util::push( L, obj->canPaste() );
	return 1;
}
int TextEdit::createStandardContextMenu(lua_State * L) // const : QMenu*
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	ObjectPeer::pushPeer( L, obj->createStandardContextMenu(), true);
	return 1;
}
int TextEdit::currentCharFormat(lua_State * L) // const : QTextCharFormat
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	QTextCharFormat* res = ValueInstaller2<QTextCharFormat>::create( L );
	*res = 	obj->currentCharFormat();
	return 1;
}
int TextEdit::currentFont(lua_State * L) // const : QFont
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	QFont* res = ValueInstaller2<QFont>::create( L );
	*res = 	obj->currentFont();
	return 1;
}/*
int TextEdit::cursorForPosition(lua_State * L) // ( const QPoint & pos ) const : QTextCursor
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1);
	QPoint* p = ValueInstaller2<QPoint>::check( L, 2 );
	QTextCursor* res = ValueInstaller2<QTextCursor>::create( L );
	*res = 	obj->cursorForPosition(  p->toPoint() );
	return 1;
}*/
int TextEdit::cursorRect(lua_State * L) // ( const QTextCursor & cursor ) const : QRect
// const : QRect
{
	QTextEdit* obj = ObjectHelper<QTextEdit>::check( L, 1 );
	QRectF* res = ValueInstaller2<QRectF>::create( L );
	if(QTextCursor* cursor = ValueInstaller2<QTextCursor>::check( L, 2 ))
	{
		*res = obj->cursorRect( *cursor );
	}
	else
	{
		*res = 	obj->cursorRect();
	}
	return 1;
}
示例#2
0
QRect QTextEditProto::cursorRect() const
{
  QTextEdit *item = qscriptvalue_cast<QTextEdit*>(thisObject());
  if (item)
    return item->cursorRect();
  return QRect();
}
void QAccessibleTextEdit::scrollToSubstring(int startIndex, int endIndex)
{
    QTextEdit *edit = textEdit();

    QTextCursor cursor = textCursor();
    cursor.setPosition(startIndex);
    QRect r = edit->cursorRect(cursor);

    cursor.setPosition(endIndex);
    r.setBottomRight(edit->cursorRect(cursor).bottomRight());

    r.moveTo(r.x() + edit->horizontalScrollBar()->value(),
             r.y() + edit->verticalScrollBar()->value());

    // E V I L, but ensureVisible is not public
    if (!QMetaObject::invokeMethod(edit, "_q_ensureVisible", Q_ARG(QRectF, r)))
        qWarning("AccessibleTextEdit::scrollToSubstring failed!");
}
	QMap<int, QList<QRectF>> TextDocumentAdapter::GetTextPositions (const QString& text, Qt::CaseSensitivity cs)
	{
		const auto& pageSize = Doc_->pageSize ();
		const auto pageHeight = pageSize.height ();

		QTextEdit hackyEdit;
		hackyEdit.setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
		hackyEdit.setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOff);
		hackyEdit.setFixedSize (Doc_->pageSize ().toSize ());
		hackyEdit.setDocument (Doc_.get ());
		Doc_->setPageSize (pageSize);

		const auto tdFlags = cs == Qt::CaseSensitive ?
				QTextDocument::FindCaseSensitively :
				QTextDocument::FindFlags ();

		QMap<int, QList<QRectF>> result;
		auto cursor = Doc_->find (text, 0, tdFlags);
		while (!cursor.isNull ())
		{
			auto endRect = hackyEdit.cursorRect (cursor);
			auto startCursor = cursor;
			startCursor.setPosition (cursor.selectionStart ());
			auto rect = hackyEdit.cursorRect (startCursor);

			const int pageNum = rect.y () / pageHeight;
			rect.moveTop (rect.y () - pageHeight * pageNum);
			endRect.moveTop (endRect.y () - pageHeight * pageNum);

			if (rect.y () != endRect.y ())
			{
				rect.setWidth (pageSize.width () - rect.x ());
				endRect.setX (0);
			}
			auto bounding = rect | endRect;

			result [pageNum] << bounding;

			cursor = Doc_->find (text, cursor, tdFlags);
		}
		return result;
	}
bool QWordCompleter::eventFilter(QObject *o, QEvent *e)
{
    if(widget()->inherits("QTextEdit") && e->type() == QEvent::KeyPress){
        QKeyEvent* ke = static_cast<QKeyEvent*>(e);
        switch (ke->key()) {
        case Qt::Key_Space:
            if(ke->modifiers().testFlag(Qt::ControlModifier)){
                QTextEdit* textEdit = qobject_cast<QTextEdit*>(widget());
                QTextCursor textCursor = textEdit->textCursor();
                textCursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor);
                if(textCursor.selectedText().length() >= minCompletionPrefixLength){
                    setCompletionPrefix(textCursor.selectedText());
                    QRect rect = QRect(textEdit->cursorRect().bottomLeft(), QSize(100, 5));
                    complete(rect);
                }
                return true;
            }
            break;
        case Qt::Key_Enter:
        case Qt::Key_Return:
        case Qt::Key_Tab:
            if(popup()->isVisible()){
                popup()->hide();
                if(popup()->currentIndex().isValid()){
                    emit activated(popup()->currentIndex());
                    emit activated(popup()->currentIndex().data(completionRole()).toString());
                }
                return true;
            }
        default:
            break;
        }
    }
    return QCompleter::eventFilter(o, e);

}