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

📄 kwqfilebutton.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 "KWQFileButton.h"#include "KWQLogging.h"#include "KWQAssertions.h"#include "KWQKHTMLPart.h"#include "khtmlview.h"#include "WebCoreViewFactory.h"// NSString *WebCoreFileButtonFilenameChanged = @"WebCoreFileButtonFilenameChanged";// NSString *WebCoreFileButtonClicked = @"WebCoreFileButtonClicked";// listeners for text input events.extern "C" {// static void// changed(GtkWidget *widget, KWQFileButton* btn)// {//     btn->filenameChanged(NULL);// }static gbooleankeypressed(GtkWidget *widget, GdkEventKey *event, KWQFileButton* btn){    if (event->keyval == GDK_Return)        btn->filenameChanged();        return FALSE;	}    static voidbutton_clicked(GtkButton *button, gpointer data){    ASSERT(data);    KWQFileButton * btn = static_cast<KWQFileButton *>(data);    btn->clicked();}static voidfilename_changed(GtkButton *button, gpointer data){    ASSERT(data);    KWQFileButton * btn = static_cast<KWQFileButton *>(data);    btn->filenameChanged();}static voidclose_selection(GtkButton *button, gpointer data){    ASSERT(data);        KWQFileButton * btn = static_cast<KWQFileButton *>(data);    btn->closeSelection();}}// @interface KWQFileButtonAdapter : NSObject// {//     KWQFileButton *button;// }// - initWithKWQFileButton:(KWQFileButton *)button;// @endKWQFileButton::KWQFileButton(KHTMLPart *part,  QWidget * parent, const char * name, int f)    : QWidget(parent, name, f)    , m_part(part)    , m_clicked(this, SIGNAL(clicked()))    , m_textChanged(this, SIGNAL(textChanged(const QString &)))    , m_chooser(0)//     , m_adapter([[KWQFileButtonAdapter alloc] initWithKWQFileButton:this]){    m_entry = gtk_entry_new();    QCString cstr(WebCoreViewFactory::sharedFactory()->fileButtonDefaultLabel());        m_button = gtk_button_new_with_label(static_cast<const char*>(cstr));       GtkWidget *hbox = gtk_hbox_new(false, 10);        gtk_box_pack_start(GTK_BOX(hbox), m_entry, false, false, 0);    gtk_box_pack_start(GTK_BOX(hbox), m_button, false, false, 0);        setGtkWidget(hbox);    gint hid;    hid = g_signal_connect( G_OBJECT(m_entry),			    "key-press-event",			    G_CALLBACK(::keypressed),			    this );    hid = g_signal_connect( G_OBJECT(m_button),			    "clicked",			    G_CALLBACK(::button_clicked),			    this );#if 0 // QLineEdit emiting clicked signal disabled atm. theres no "clicked" signal in gtk    hid = g_signal_connect( G_OBJECT(m_entry),			    "clicked",			    G_CALLBACK(::clicked),			    this );#endif}KWQFileButton::~KWQFileButton(){    if (m_chooser) {        gtk_widget_destroy(m_chooser);    }//     _adapter->button = 0;//     delete _adapter;}void KWQFileButton::setFilename(const QString &f){    GtkWidget *edit = getGtkEntryWidget();    QCString str = f.utf8();    gtk_entry_set_text( GTK_ENTRY(edit), static_cast<const char*>(str) );}QString KWQFileButton::filename(){    GtkWidget *edit = getGtkEntryWidget();    return QString::fromUtf8( gtk_entry_get_text(GTK_ENTRY(edit)) );}QSize KWQFileButton::sizeForCharacterWidth(int characters) const{    ASSERT(characters > 0);    GtkWidget *w;    GtkRequisition req, req2;    // get the size from input    w = getGtkEntryWidget();        gtk_entry_set_width_chars( GTK_ENTRY(w), characters );            gtk_widget_size_request( w, &req );    // get the size from button    w = getGtkButtonWidget();    gtk_widget_size_request( w, &req2 );           return QSize( req.width + req2.width + 10, QMAX(req.height, req2.height) );}QRect KWQFileButton::frameGeometry() const{    return QWidget::frameGeometry();}void KWQFileButton::setFrameGeometry(const QRect &rect){    QWidget::setFrameGeometry(rect);}int KWQFileButton::baselinePosition(int height) const{    return (int) ((15.0f/20.0f)*(float)height);}void KWQFileButton::filenameChanged(){    if (m_chooser) {        const QString filename(gtk_file_selection_get_filename (GTK_FILE_SELECTION (m_chooser)));           setFilename(filename);            closeSelection();    }    m_textChanged.call(filename());}void KWQFileButton::closeSelection(){    if (m_chooser) {        gtk_widget_destroy(m_chooser);    }    m_chooser = 0;}void KWQFileButton::clicked(){    if (m_chooser) return;        /* Create the selector */        m_chooser = gtk_file_selection_new("Upload file");    gtk_window_set_destroy_with_parent(GTK_WINDOW(m_chooser), true);        g_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (m_chooser)->ok_button),                      "clicked",                      G_CALLBACK (::filename_changed),                      (gpointer) this);    g_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (m_chooser)->cancel_button),                      "clicked",                      G_CALLBACK (::close_selection),                      (gpointer) this);     /* Display that dialog */        gtk_widget_show (m_chooser);        m_clicked.call();}QWidget::FocusPolicy KWQFileButton::focusPolicy() const{    FocusPolicy policy = QWidget::focusPolicy();    return policy == TabFocus ? StrongFocus : policy;}// @implementation KWQFileButtonAdapter// - initWithKWQFileButton:(KWQFileButton *)b// {//     [super init];//     button = b;//     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(filenameChanged:)//         name:WebCoreFileButtonFilenameChanged object:b->getView()];//     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clicked:)//         name:WebCoreFileButtonClicked object:b->getView()];//     return self;// }// - (void)dealloc// {//     [[NSNotificationCenter defaultCenter] removeObserver:self];//     [super dealloc];// }// - (void)filenameChanged:(NSNotification *)notification// {//     button->filenameChanged();// }// -(void)clicked:(NSNotification *)notification// {//     button->sendConsumedMouseUp();//     button->clicked();// }// @end

⌨️ 快捷键说明

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