Mercurial > projects > qtd
diff demos/browser/urllineedit.d @ 73:7bfd46c330dc
more porting
author | mandel |
---|---|
date | Fri, 22 May 2009 10:59:00 +0000 |
parents | 71b382c10ef6 |
children | 37caa90ce503 |
line wrap: on
line diff
--- a/demos/browser/urllineedit.d Wed May 20 22:44:31 2009 +0000 +++ b/demos/browser/urllineedit.d Fri May 22 10:59:00 2009 +0000 @@ -41,338 +41,328 @@ module urllineedit; -import QtCore.QUrl; -import QtGui.QWidget; -import QtGui.QStyleOptionFrame; +import qt.core.QUrl; +import qt.core.QEvent; +import qt.core.QDebug; + +import qt.gui.QWidget; +import qt.gui.QStyleOptionFrame; +import qt.gui.QApplication; +import qt.gui.QCompleter; +import qt.gui.QFocusEvent; +import qt.gui.QHBoxLayout; +import qt.gui.QLabel; +import qt.gui.QLineEdit; +import qt.gui.QPainter; +import qt.gui.QStyle; +import qt.gui.QStyleOptionFrameV2; import browserapplication; import searchlineedit; import webview; -import QtCore.QEvent; -import QtGui.QApplication; -import QtGui.QCompleter; -import QtGui.QFocusEvent; -import QtGui.QHBoxLayout; -import QtGui.QLabel; -import QtGui.QLineEdit; -import QtGui.QPainter; -import QtGui.QStyle; -import QtGui.QStyleOptionFrameV2; - -import QtCore.QDebug; - - -/* -QT_BEGIN_NAMESPACE -class QLineEdit; -QT_END_NAMESPACE - -class ClearButton; -*/ class ExLineEdit : public QWidget { - Q_OBJECT +public: + + this(QWidget parent = null) + { + super(parent); + + m_leftWidget = 0; + m_lineEdit = new QLineEdit(this); + m_clearButton = 0; -public: - this(QWidget *parent = null) -{ - super(parent); - - m_leftWidget = 0; - m_lineEdit = new QLineEdit(this); - m_clearButton = 0; - - setFocusPolicy(m_lineEdit.focusPolicy()); - setAttribute(Qt.WA_InputMethodEnabled); - setSizePolicy(m_lineEdit.sizePolicy()); - setBackgroundRole(m_lineEdit.backgroundRole()); - setMouseTracking(true); - setAcceptDrops(true); - setAttribute(Qt.WA_MacShowFocusRect, true); - QPalette p = m_lineEdit.palette(); - setPalette(p); + setFocusPolicy(m_lineEdit.focusPolicy()); + setAttribute(Qt.WA_InputMethodEnabled); + setSizePolicy(m_lineEdit.sizePolicy()); + setBackgroundRole(m_lineEdit.backgroundRole()); + setMouseTracking(true); + setAcceptDrops(true); + setAttribute(Qt.WA_MacShowFocusRect, true); + QPalette p = m_lineEdit.palette(); + setPalette(p); - // line edit - m_lineEdit.setFrame(false); - m_lineEdit.setFocusProxy(this); - m_lineEdit.setAttribute(Qt.WA_MacShowFocusRect, false); - QPalette clearPalette = m_lineEdit.palette(); - clearPalette.setBrush(QPalette::Base, QBrush(Qt.transparent)); - m_lineEdit.setPalette(clearPalette); + // line edit + m_lineEdit.setFrame(false); + m_lineEdit.setFocusProxy(this); + m_lineEdit.setAttribute(Qt.WA_MacShowFocusRect, false); + QPalette clearPalette = m_lineEdit.palette(); + clearPalette.setBrush(QPalette.Base, QBrush(Qt.transparent)); + m_lineEdit.setPalette(clearPalette); - // clearButton - m_clearButton = new ClearButton(this); - connect(m_clearButton, SIGNAL(clicked()), - m_lineEdit, SLOT(clear())); - connect(m_lineEdit, SIGNAL(textChanged(const QString&)), - m_clearButton, SLOT(textChanged(const QString&))); -} + // clearButton + m_clearButton = new ClearButton(this); + m_clearButton.clicked.connect(&m_lineEdit.clear); + m_lineEdit.textChanged.connect(&m_clearButton.textChanged); + } - inline QLineEdit *lineEdit() { return m_lineEdit; } + QLineEdit lineEdit() { return m_lineEdit; } - void setLeftWidget(QWidget *widget) -{ - m_leftWidget = widget; -} + void setLeftWidget(QWidget widget) + { + m_leftWidget = widget; + } - QWidget *leftWidget() -{ - return m_leftWidget; -} + QWidget leftWidget() + { + return m_leftWidget; + } - QSize sizeHint() -{ - m_lineEdit.setFrame(true); - QSize size = m_lineEdit.sizeHint(); - m_lineEdit.setFrame(false); - return size; -} + QSize sizeHint() + { + m_lineEdit.setFrame(true); + QSize size = m_lineEdit.sizeHint(); + m_lineEdit.setFrame(false); + return size; + } - QVariant inputMethodQuery(Qt.InputMethodQuery property) -{ - return m_lineEdit.inputMethodQuery(property); -} + QVariant inputMethodQuery(Qt.InputMethodQuery property) + { + return m_lineEdit.inputMethodQuery(property); + } protected: - void focusInEvent(QFocusEvent *event) -{ - m_lineEdit.event(event); - QWidget::focusInEvent(event); -} + + void focusInEvent(QFocusEvent event) + { + m_lineEdit.event(event); + QWidget.focusInEvent(event); + } + + void focusOutEvent(QFocusEvent event) + { + m_lineEdit.event(event); + + if (m_lineEdit.completer()) { + m_lineEdit.completer().activated.connect(& m_lineEdit.setText); + m_lineEdit.completer().highlighted.connect(&m_lineEdit._q_completionHighlighted); + } + QWidget.focusOutEvent(event); + } - void focusOutEvent(QFocusEvent *event) -{ - m_lineEdit.event(event); + void keyPressEvent(QKeyEvent event) + { + m_lineEdit.event(event); + } - if (m_lineEdit.completer()) { - connect(m_lineEdit.completer(), SIGNAL(activated(QString)), - m_lineEdit, SLOT(setText(QString))); - connect(m_lineEdit.completer(), SIGNAL(highlighted(QString)), - m_lineEdit, SLOT(_q_completionHighlighted(QString))); - } - QWidget::focusOutEvent(event); -} + void paintEvent(QPaintEvent event) + { + QPainter p(this); + QStyleOptionFrameV2 panel; + initStyleOption(&panel); + style().drawPrimitive(QStyle.PE_PanelLineEdit, &panel, &p, this); + } + + void resizeEvent(QResizeEvent event) + { + assert(m_leftWidget); + updateGeometries(); + QWidget.resizeEvent(event); + } + + void inputMethodEvent(QInputMethodEvent e) + { + m_lineEdit.event(e); + } - void keyPressEvent(QKeyEvent *event) -{ - m_lineEdit.event(event); -} + bool event(QEvent event) + { + if (event.type() == QEvent.ShortcutOverride) + return m_lineEdit.event(event); + return QWidget.event(event); + } + +protected: + + void updateGeometries() + { + QStyleOptionFrameV2 panel; + initStyleOption(&panel); + QRect rect = style().subElementRect(QStyle.SE_LineEditContents, &panel, this); + + int height = rect.height(); + int width = rect.width(); + + int m_leftWidgetHeight = m_leftWidget.height(); + m_leftWidget.setGeometry(rect.x() + 2, rect.y() + (height - m_leftWidgetHeight)/2, + m_leftWidget.width(), m_leftWidget.height()); + + int clearButtonWidth = this.height(); + m_lineEdit.setGeometry(m_leftWidget.x() + m_leftWidget.width(), 0, + width - clearButtonWidth - m_leftWidget.width(), this.height()); - void paintEvent(QPaintEvent *event) -{ - QPainter p(this); - QStyleOptionFrameV2 panel; - initStyleOption(&panel); - style().drawPrimitive(QStyle::PE_PanelLineEdit, &panel, &p, this); -} + m_clearButton.setGeometry(this.width() - clearButtonWidth, 0, + clearButtonWidth, this.height()); + } - void resizeEvent(QResizeEvent *event) -{ - Q_ASSERT(m_leftWidget); - updateGeometries(); - QWidget::resizeEvent(event); -} - - void inputMethodEvent(QInputMethodEvent *e) -{ - m_lineEdit.event(e); + void initStyleOption(QStyleOptionFrameV2 option) + { + option.initFrom(this); + option.rect = contentsRect(); + option.lineWidth = style().pixelMetric(QStyle.PM_DefaultFrameWidth, option, this); + option.midLineWidth = 0; + option.state |= QStyle.State_Sunken; + if (m_lineEdit.isReadOnly()) + option.state |= QStyle.State_ReadOnly; + version(QT_KEYPAD_NAVIGATION) + { + if (hasEditFocus()) + option.state |= QStyle.State_HasEditFocus; + } + else + { + option.features = QStyleOptionFrameV2.None; + } + } + + QWidget m_leftWidget; + QLineEdit m_lineEdit; + ClearButton m_clearButton; } - bool event(QEvent *event) -{ - if (event.type() == QEvent::ShortcutOverride) - return m_lineEdit.event(event); - return QWidget::event(event); -} - -protected: - void updateGeometries() -{ - QStyleOptionFrameV2 panel; - initStyleOption(&panel); - QRect rect = style().subElementRect(QStyle::SE_LineEditContents, &panel, this); - - int height = rect.height(); - int width = rect.width(); - - int m_leftWidgetHeight = m_leftWidget.height(); - m_leftWidget.setGeometry(rect.x() + 2, rect.y() + (height - m_leftWidgetHeight)/2, - m_leftWidget.width(), m_leftWidget.height()); - - int clearButtonWidth = this.height(); - m_lineEdit.setGeometry(m_leftWidget.x() + m_leftWidget.width(), 0, - width - clearButtonWidth - m_leftWidget.width(), this.height()); - - m_clearButton.setGeometry(this.width() - clearButtonWidth, 0, - clearButtonWidth, this.height()); -} - - void initStyleOption(QStyleOptionFrameV2 *option) -{ - option.initFrom(this); - option.rect = contentsRect(); - option.lineWidth = style().pixelMetric(QStyle::PM_DefaultFrameWidth, option, this); - option.midLineWidth = 0; - option.state |= QStyle::State_Sunken; - if (m_lineEdit.isReadOnly()) - option.state |= QStyle::State_ReadOnly; -version(QT_KEYPAD_NAVIGATION) - if (hasEditFocus()) - option.state |= QStyle::State_HasEditFocus; -} - option.features = QStyleOptionFrameV2::None; -} - - QWidget *m_leftWidget; - QLineEdit *m_lineEdit; - ClearButton *m_clearButton; -}; class UrlIconLabel : public QLabel { +public: -public: - this(QWidget *parent) -{ - super(parent); - m_webView = 0; - setMinimumWidth(16); - setMinimumHeight(16); -} + this(QWidget parent) + { + super(parent); + m_webView = 0; + setMinimumWidth(16); + setMinimumHeight(16); + } - - WebView *m_webView; + WebView m_webView; protected: - void mousePressEvent(QMouseEvent *event) -{ - if (event.button() == Qt.LeftButton) - m_dragStartPos = event.pos(); - QLabel::mousePressEvent(event); -} + + void mousePressEvent(QMouseEvent event) + { + if (event.button() == Qt.LeftButton) + m_dragStartPos = event.pos(); + QLabel.mousePressEvent(event); + } - void mouseMoveEvent(QMouseEvent *event) -{ - if (event.buttons() == Qt.LeftButton - && (event.pos() - m_dragStartPos).manhattanLength() > QApplication::startDragDistance() - && m_webView) { - QDrag *drag = new QDrag(this); - QMimeData *mimeData = new QMimeData; - mimeData.setText(QString::fromUtf8(m_webView.url().toEncoded())); - QList<QUrl> urls; - urls.append(m_webView.url()); - mimeData.setUrls(urls); - drag.setMimeData(mimeData); - drag.exec(); - } -} + void mouseMoveEvent(QMouseEvent event) + { + if (event.buttons() == Qt.LeftButton + && (event.pos() - m_dragStartPos).manhattanLength() > QApplication.startDragDistance() + && m_webView) { + QDrag drag = new QDrag(this); + QMimeData mimeData = new QMimeData; + mimeData.setText(QString.fromUtf8(m_webView.url().toEncoded())); + QList<QUrl> urls; + urls.append(m_webView.url()); + mimeData.setUrls(urls); + drag.setMimeData(mimeData); + drag.exec(); + } + } private: - QPoint m_dragStartPos; + QPoint m_dragStartPos; } -//class UrlIconLabel; -//class WebView; class UrlLineEdit : public ExLineEdit { - Q_OBJECT +public: -public: - this(QWidget *parent = null) -{ - super(parent); - m_webView = 0; - m_iconLabel = 0; - // icon - m_iconLabel = new UrlIconLabel(this); - m_iconLabel.resize(16, 16); - setLeftWidget(m_iconLabel); - m_defaultBaseColor = palette().color(QPalette::Base); + this(QWidget parent = null) + { + super(parent); + m_webView = 0; + m_iconLabel = 0; + // icon + m_iconLabel = new UrlIconLabel(this); + m_iconLabel.resize(16, 16); + setLeftWidget(m_iconLabel); + m_defaultBaseColor = palette().color(QPalette.Base); - webViewIconChanged(); -} - void setWebView(WebView *webView) -{ - Q_ASSERT(!m_webView); - m_webView = webView; - m_iconLabel.m_webView = webView; - connect(webView, SIGNAL(urlChanged(const QUrl &)), - this, SLOT(webViewUrlChanged(const QUrl &))); - connect(webView, SIGNAL(loadFinished(bool)), - this, SLOT(webViewIconChanged())); - connect(webView, SIGNAL(iconChanged()), - this, SLOT(webViewIconChanged())); - connect(webView, SIGNAL(loadProgress(int)), - this, SLOT(update())); -} + webViewIconChanged(); + } + + void setWebView(WebView webView) + { + assert(!m_webView); + m_webView = webView; + m_iconLabel.m_webView = webView; + webView.urlChanged.connect(&this.webViewUrlChanged); + webView.loadFinished.connect(&this.webViewIconChanged); + webView.iconChanged.connect(&this.webViewIconChanged); + webView.loadProgress.connect(&this.update); + } protected: - void paintEvent(QPaintEvent *event) -{ - QPalette p = palette(); - if (m_webView && m_webView.url().scheme() == QLatin1String("https")) { - QColor lightYellow(248, 248, 210); - p.setBrush(QPalette::Base, generateGradient(lightYellow)); - } else { - p.setBrush(QPalette::Base, m_defaultBaseColor); - } - setPalette(p); - ExLineEdit::paintEvent(event); + + void paintEvent(QPaintEvent event) + { + QPalette p = palette(); + if (m_webView && m_webView.url().scheme() == QLatin1String("https")) { + QColor lightYellow(248, 248, 210); + p.setBrush(QPalette.Base, generateGradient(lightYellow)); + } else { + p.setBrush(QPalette.Base, m_defaultBaseColor); + } + setPalette(p); + ExLineEdit.paintEvent(event); - QPainter painter(this); - QStyleOptionFrameV2 panel; - initStyleOption(&panel); - QRect backgroundRect = style().subElementRect(QStyle::SE_LineEditContents, &panel, this); - if (m_webView && !hasFocus()) { - int progress = m_webView.progress(); - QColor loadingColor = QColor(116, 192, 250); - painter.setBrush(generateGradient(loadingColor)); - painter.setPen(Qt.transparent); - int mid = backgroundRect.width() / 100 * progress; - QRect progressRect(backgroundRect.x(), backgroundRect.y(), mid, backgroundRect.height()); - painter.drawRect(progressRect); - } -} + QPainter painter(this); + QStyleOptionFrameV2 panel; + initStyleOption(&panel); + QRect backgroundRect = style().subElementRect(QStyle.SE_LineEditContents, &panel, this); + if (m_webView && !hasFocus()) { + int progress = m_webView.progress(); + QColor loadingColor = QColor(116, 192, 250); + painter.setBrush(generateGradient(loadingColor)); + painter.setPen(Qt.transparent); + int mid = backgroundRect.width() / 100 * progress; + QRect progressRect(backgroundRect.x(), backgroundRect.y(), mid, backgroundRect.height()); + painter.drawRect(progressRect); + } + } - void focusOutEvent(QFocusEvent *event); -{ - if (m_lineEdit.text().isEmpty() && m_webView) - m_lineEdit.setText(QString::fromUtf8(m_webView.url().toEncoded())); - ExLineEdit::focusOutEvent(event); -} - -private slots: - void webViewUrlChanged(const QUrl &url) -{ - m_lineEdit.setText(QString::fromUtf8(url.toEncoded())); - m_lineEdit.setCursorPosition(0); -} - - void webViewIconChanged() -{ - QUrl url = (m_webView) ? m_webView.url() : QUrl(); - QIcon icon = BrowserApplication::instance().icon(url); - QPixmap pixmap(icon.pixmap(16, 16)); - m_iconLabel.setPixmap(pixmap); -} + void focusOutEvent(QFocusEvent event); + { + if (m_lineEdit.text().isEmpty() && m_webView) + m_lineEdit.setText(QString.fromUtf8(m_webView.url().toEncoded())); + ExLineEdit.focusOutEvent(event); + } private: - QLinearGradient generateGradient(const QColor &color) -{ - QLinearGradient gradient(0, 0, 0, height()); - gradient.setColorAt(0, m_defaultBaseColor); - gradient.setColorAt(0.15, color.lighter(120)); - gradient.setColorAt(0.5, color); - gradient.setColorAt(0.85, color.lighter(120)); - gradient.setColorAt(1, m_defaultBaseColor); - return gradient; + + void webViewUrlChanged(QUrl url) + { + m_lineEdit.setText(QString.fromUtf8(url.toEncoded())); + m_lineEdit.setCursorPosition(0); + } + + void webViewIconChanged() + { + QUrl url = (m_webView) ? m_webView.url() : QUrl(); + QIcon icon = BrowserApplication.instance().icon(url); + QPixmap pixmap(icon.pixmap(16, 16)); + m_iconLabel.setPixmap(pixmap); + } + +private: + + QLinearGradient generateGradient(QColor color) + { + QLinearGradient gradient(0, 0, 0, height()); + gradient.setColorAt(0, m_defaultBaseColor); + gradient.setColorAt(0.15, color.lighter(120)); + gradient.setColorAt(0.5, color); + gradient.setColorAt(0.85, color.lighter(120)); + gradient.setColorAt(1, m_defaultBaseColor); + return gradient; + } + + WebView m_webView; + UrlIconLabel m_iconLabel; + QColor m_defaultBaseColor; } - - WebView *m_webView; - UrlIconLabel *m_iconLabel; - QColor m_defaultBaseColor; -}