⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kwqtextedit.cpp

📁 khtml在gtk上的移植版本
💻 CPP
字号:
/* * 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.  */#include <gtk/gtk.h>#include "KWQTextEdit.h"#include "KWQAssertions.h"//#include "KWQTextArea.h"#include "KWQLogging.h"extern "C" {#if 0 // remove warnings --psalmistatic void button_press(GtkWidget* widget, GdkEventButton *event, gpointer data){    QTextEdit* edit = static_cast<QTextEdit*>(data);    edit->clicked();}#endifstatic void text_changed(GtkWidget *textbuffer, gpointer data){    QTextEdit* edit = static_cast<QTextEdit*>(data);    edit->textChanged();}}QTextEdit::QTextEdit(QWidget * parent, const char * name, int f)    : QScrollView(parent,name,f)    , _clicked(this, SIGNAL(clicked()))    , _textChanged(this, SIGNAL(textChanged())){    _textview = gtk_text_view_new();    _textbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(_textview));#if 0    g_signal_connect( G_OBJECT(_textview),		      "button_press_event", 		      G_CALLBACK(::button_press),		      this );#endif        g_signal_connect( G_OBJECT(_textbuf),		      "changed", 		      G_CALLBACK(::text_changed),		      this );    GtkWidget *sw = gtk_scrolled_window_new (NULL,NULL);    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);        gtk_container_add(GTK_CONTAINER (sw), _textview);    setGtkWidget(sw);    setReadOnly(false);    setVScrollBarMode(QScrollView::Auto);    setHScrollBarMode(QScrollView::Auto);}void QTextEdit::setText(const QString &string){    QCString cstr( string.utf8() );    gtk_text_buffer_set_text(_textbuf,			     static_cast<const char*>(cstr),			     cstr.length());}QString QTextEdit::text() const{    GtkTextIter s,e;    gtk_text_buffer_get_start_iter(_textbuf, &s);    gtk_text_buffer_get_end_iter(_textbuf, &e);        gchar *cbuf = gtk_text_buffer_get_text(_textbuf, &s, &e, FALSE);    QString str(QString::fromUtf8(cbuf));    g_free(cbuf);        return str;}QString QTextEdit::textWithHardLineBreaks() const{    LOG(NotYetImplemented, "KWIQ");    return text();}void QTextEdit::getCursorPosition(int *paragraph, int *index) const{    LOG(NotYetImplemented, "KWIQ");#if 0    GtkTextMark *mark = gtk_text_buffer_get_insert(_textbuf);    GtkTextIter s;    gtk_text_buffer_get_iter_at_mark(_textbuf,&s,mark);    // FIXME: QTextEdit uses paragraph:index, gtktextview uses line,offset    *index = gtk_text_iter_get_offset(&s);    *paragraph = gtk_text_iter_get_line(&s);    #endif}void QTextEdit::setCursorPosition(int paragraph, int index){    LOG(NotYetImplemented,"KWIQ");#if 0    GtkTextMark *mark = gtk_text_buffer_get_insert(_textbuf);    GtkTextIter s;    gtk_text_buffer_get_iter_at_mark(_textbuf,&s,mark);    // FIXME: QTextEdit uses paragraph:index, gtktextview uses line,offset    gtk_text_iter_set_line(&s, paragraph);    gtk_text_iter_set_offset(&s,index);#endif}QTextEdit::WrapStyle QTextEdit::wordWrap() const{    bool wrap = gtk_text_view_get_wrap_mode( GTK_TEXT_VIEW(_textview) ) == GTK_WRAP_WORD ;    return wrap ? WidgetWidth : NoWrap;}void QTextEdit::setWordWrap(WrapStyle style){    GtkWrapMode wrap =  (style == WidgetWidth) ? GTK_WRAP_WORD : GTK_WRAP_NONE;    gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW(_textview), wrap );}void QTextEdit::setTextFormat(TextFormat){}void QTextEdit::setTabStopWidth(int){}bool QTextEdit::isReadOnly() const{    return !gtk_text_view_get_editable(GTK_TEXT_VIEW (_textview));}void QTextEdit::setReadOnly(bool flag){    gtk_text_view_set_editable(GTK_TEXT_VIEW (_textview), flag?FALSE:TRUE);}bool QTextEdit::isDisabled() const{    return !QWidget::isEnabled();}void QTextEdit::setDisabled(bool flag){    QWidget::setEnabled(!flag);}     void QTextEdit::selectAll(){    GtkTextIter s,e;    GtkTextMark *sel_mark;    gtk_text_buffer_get_start_iter( _textbuf, &s );    gtk_text_buffer_get_end_iter( _textbuf, &e );    gtk_text_buffer_place_cursor( _textbuf, &s );        sel_mark = gtk_text_buffer_get_selection_bound( _textbuf );    gtk_text_buffer_move_mark( _textbuf, sel_mark, &e );}void QTextEdit::setFont(const QFont &font){    QWidget::setFont(font);}void QTextEdit::clicked(){    _clicked.call();}void QTextEdit::setAlignment(AlignmentFlags alignment){#if 0    KWQ_BLOCK_EXCEPTIONS;    KWQTextArea *textArea = getView();    [textArea setAlignment:KWQNSTextAlignmentForAlignmentFlags(alignment)];    KWQ_UNBLOCK_EXCEPTIONS;#endif    LOG(NotYetImplemented,"KWIQ");}void QTextEdit::setWritingDirection(QPainter::TextDirection direction){    QWidget::setWritingDirection(direction);} QSize QTextEdit::sizeWithColumnsAndRows(int numColumns, int numRows) const{    LOG(NotYetImplemented,"KWIQ");    //FIXME: KWIQ: implement sizeWithColumnsAndRows    return QSize((int)(numColumns * 15), (int)(numRows * 15));}bool QTextEdit::checksDescendantsForFocus() const{    return true;}bool QTextEdit::hasFocus() const{    return GTK_WIDGET_HAS_FOCUS (_textview);}void QTextEdit::setFocus(){    if (hasFocus()) {        return;    }    g_return_if_fail(GTK_WIDGET_CAN_FOCUS (_textview));    gtk_widget_grab_focus(_textview);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -