/*
* Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import "KWQTextEdit.h"
#import "KWQAssertions.h"
#import "KWQExceptions.h"
#import "KWQTextArea.h"
QTextEdit::QTextEdit(QWidget *parent)
: _clicked(this, SIGNAL(clicked()))
, _textChanged(this, SIGNAL(textChanged()))
{
KWQ_BLOCK_EXCEPTIONS;
KWQTextArea *textView = [[KWQTextArea alloc] initWithQTextEdit:this];
setView(textView);
[textView release];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::setText(const QString &string)
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView setText:string.getNSString()];
KWQ_UNBLOCK_EXCEPTIONS;
}
QString QTextEdit::text() const
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
return QString::fromNSString([textView text]);
KWQ_UNBLOCK_EXCEPTIONS;
return QString();
}
QString QTextEdit::textWithHardLineBreaks() const
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
return QString::fromNSString([textView textWithHardLineBreaks]);
KWQ_UNBLOCK_EXCEPTIONS;
return QString();
}
void QTextEdit::getCursorPosition(int *paragraph, int *index) const
{
KWQTextArea *textView = (KWQTextArea *)getView();
if (index)
*index = 0;
if (paragraph)
*paragraph = 0;
KWQ_BLOCK_EXCEPTIONS;
[textView getCursorPositionAsIndex:index inParagraph:paragraph];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::setCursorPosition(int paragraph, int index)
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView setCursorPositionToIndex:index inParagraph:paragraph];
KWQ_UNBLOCK_EXCEPTIONS;
}
QTextEdit::WrapStyle QTextEdit::wordWrap() const
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
return [textView wordWrap] ? WidgetWidth : NoWrap;
KWQ_UNBLOCK_EXCEPTIONS;
return NoWrap;
}
void QTextEdit::setWordWrap(WrapStyle style)
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView setWordWrap:style == WidgetWidth];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::setTextFormat(TextFormat)
{
}
void QTextEdit::setTabStopWidth(int)
{
}
bool QTextEdit::isReadOnly() const
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
return ![textView isEditable];
KWQ_UNBLOCK_EXCEPTIONS;
return false;
}
void QTextEdit::setReadOnly(bool flag)
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView setEditable:!flag];
KWQ_UNBLOCK_EXCEPTIONS;
}
bool QTextEdit::isDisabled() const
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
return ![textView isEnabled];
KWQ_UNBLOCK_EXCEPTIONS;
return false;
}
void QTextEdit::setDisabled(bool flag)
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView setEnabled:!flag];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::selectAll()
{
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView selectAll];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::setFont(const QFont &font)
{
QWidget::setFont(font);
KWQTextArea *textView = (KWQTextArea *)getView();
KWQ_BLOCK_EXCEPTIONS;
[textView setFont:font.getNSFont()];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::clicked()
{
_clicked.call();
}
void QTextEdit::setAlignment(AlignmentFlags alignment)
{
KWQ_BLOCK_EXCEPTIONS;
ASSERT(alignment == AlignLeft || alignment == AlignRight);
KWQTextArea *textArea = getView();
[textArea setAlignment:(alignment == AlignRight ? NSRightTextAlignment : NSLeftTextAlignment)];
KWQ_UNBLOCK_EXCEPTIONS;
}
void QTextEdit::setWritingDirection(QPainter::TextDirection direction)
{
KWQ_BLOCK_EXCEPTIONS;
KWQTextArea *textArea = getView();
[textArea setBaseWritingDirection:(direction == QPainter::RTL ? NSWritingDirectionRightToLeft : NSWritingDirectionLeftToRight)];
KWQ_UNBLOCK_EXCEPTIONS;
}
QSize QTextEdit::sizeWithColumnsAndRows(int numColumns, int numRows) const
{
KWQTextArea *textArea = getView();
NSSize size = {0,0};
KWQ_BLOCK_EXCEPTIONS;
size = [textArea sizeWithColumns:numColumns rows:numRows];
KWQ_UNBLOCK_EXCEPTIONS;
return QSize((int)ceil(size.width), (int)ceil(size.height));
}
bool QTextEdit::checksDescendantsForFocus() const
{
return true;
}