/**************************************************************************** | |
** | |
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). | |
** All rights reserved. | |
** Contact: Nokia Corporation (qt-info@nokia.com) | |
** | |
** This file is part of the QtSCriptTools module of the Qt Toolkit. | |
** | |
** $QT_BEGIN_LICENSE:LGPL$ | |
** GNU Lesser General Public License Usage | |
** This file may be used under the terms of the GNU Lesser General Public | |
** License version 2.1 as published by the Free Software Foundation and | |
** appearing in the file LICENSE.LGPL included in the packaging of this | |
** file. Please review the following information to ensure the GNU Lesser | |
** General Public License version 2.1 requirements will be met: | |
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | |
** | |
** In addition, as a special exception, Nokia gives you certain additional | |
** rights. These rights are described in the Nokia Qt LGPL Exception | |
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | |
** | |
** GNU General Public License Usage | |
** Alternatively, this file may be used under the terms of the GNU General | |
** Public License version 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 the GNU General | |
** Public License version 3.0 requirements will be met: | |
** http://www.gnu.org/copyleft/gpl.html. | |
** | |
** Other Usage | |
** Alternatively, this file may be used in accordance with the terms and | |
** conditions contained in a signed written agreement between you and Nokia. | |
** | |
** | |
** | |
** | |
** | |
** $QT_END_LICENSE$ | |
** | |
****************************************************************************/ | |
#include "qscriptdebuggercodefinderwidget_p.h" | |
#include "qscriptdebuggercodefinderwidgetinterface_p_p.h" | |
#include <QtGui/qboxlayout.h> | |
#include <QtGui/qlineedit.h> | |
#include <QtGui/qcheckbox.h> | |
#include <QtGui/qlabel.h> | |
#include <QtGui/qtoolbutton.h> | |
#include <QtGui/qevent.h> | |
#include <QtCore/qdebug.h> | |
QT_BEGIN_NAMESPACE | |
class QScriptDebuggerCodeFinderWidgetPrivate | |
: public QScriptDebuggerCodeFinderWidgetInterfacePrivate | |
{ | |
Q_DECLARE_PUBLIC(QScriptDebuggerCodeFinderWidget) | |
public: | |
QScriptDebuggerCodeFinderWidgetPrivate(); | |
~QScriptDebuggerCodeFinderWidgetPrivate(); | |
// private slots | |
void _q_updateButtons(); | |
void _q_onTextChanged(const QString &); | |
void _q_next(); | |
void _q_previous(); | |
int findOptions() const; | |
QLineEdit *editFind; | |
QCheckBox *checkCase; | |
QLabel *labelWrapped; | |
QToolButton *toolNext; | |
QToolButton *toolClose; | |
QToolButton *toolPrevious; | |
QCheckBox *checkWholeWords; | |
}; | |
QScriptDebuggerCodeFinderWidgetPrivate::QScriptDebuggerCodeFinderWidgetPrivate() | |
{ | |
} | |
QScriptDebuggerCodeFinderWidgetPrivate::~QScriptDebuggerCodeFinderWidgetPrivate() | |
{ | |
} | |
void QScriptDebuggerCodeFinderWidgetPrivate::_q_updateButtons() | |
{ | |
if (editFind->text().isEmpty()) { | |
toolPrevious->setEnabled(false); | |
toolNext->setEnabled(false); | |
} else { | |
toolPrevious->setEnabled(true); | |
toolNext->setEnabled(true); | |
} | |
} | |
int QScriptDebuggerCodeFinderWidgetPrivate::findOptions() const | |
{ | |
int flags = 0; | |
if (checkCase->isChecked()) | |
flags |= QTextDocument::FindCaseSensitively; | |
if (checkWholeWords->isChecked()) | |
flags |= QTextDocument::FindWholeWords; | |
return flags; | |
} | |
void QScriptDebuggerCodeFinderWidgetPrivate::_q_onTextChanged(const QString &text) | |
{ | |
emit q_func()->findRequest(text, findOptions() | 0x100); | |
} | |
void QScriptDebuggerCodeFinderWidgetPrivate::_q_next() | |
{ | |
emit q_func()->findRequest(editFind->text(), findOptions()); | |
} | |
void QScriptDebuggerCodeFinderWidgetPrivate::_q_previous() | |
{ | |
emit q_func()->findRequest(editFind->text(), findOptions() | QTextDocument::FindBackward); | |
} | |
QScriptDebuggerCodeFinderWidget::QScriptDebuggerCodeFinderWidget(QWidget *parent) | |
: QScriptDebuggerCodeFinderWidgetInterface( | |
*new QScriptDebuggerCodeFinderWidgetPrivate, parent, 0) | |
{ | |
Q_D(QScriptDebuggerCodeFinderWidget); | |
QString system = QLatin1String("win"); | |
QHBoxLayout *hboxLayout = new QHBoxLayout(this); | |
#ifdef Q_OS_MAC | |
system = QLatin1String("mac"); | |
#else | |
hboxLayout->setSpacing(6); | |
hboxLayout->setMargin(0); | |
#endif | |
d->toolClose = new QToolButton(this); | |
d->toolClose->setIcon(QIcon(QString::fromUtf8(":/qt/scripttools/debugging/images/%1/closetab.png").arg(system))); | |
d->toolClose->setAutoRaise(true); | |
d->toolClose->setText(tr("Close")); | |
hboxLayout->addWidget(d->toolClose); | |
d->editFind = new QLineEdit(this); | |
d->editFind->setMinimumSize(QSize(150, 0)); | |
connect(d->editFind, SIGNAL(textChanged(QString)), | |
this, SLOT(_q_updateButtons())); | |
connect(d->editFind, SIGNAL(returnPressed()), | |
this, SLOT(_q_next())); | |
hboxLayout->addWidget(d->editFind); | |
d->toolPrevious = new QToolButton(this); | |
d->toolPrevious->setAutoRaise(true); | |
d->toolPrevious->setText(tr("Previous")); | |
d->toolPrevious->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); | |
d->toolPrevious->setIcon(QIcon(QString::fromUtf8(":/qt/scripttools/debugging/images/%1/previous.png").arg(system))); | |
hboxLayout->addWidget(d->toolPrevious); | |
d->toolNext = new QToolButton(this); | |
d->toolNext->setAutoRaise(true); | |
d->toolNext->setText(tr("Next")); | |
d->toolNext->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); | |
d->toolNext->setIcon(QIcon(QString::fromUtf8(":/qt/scripttools/debugging/images/%1/next.png").arg(system))); | |
hboxLayout->addWidget(d->toolNext); | |
d->checkCase = new QCheckBox(tr("Case Sensitive"), this); | |
hboxLayout->addWidget(d->checkCase); | |
d->checkWholeWords = new QCheckBox(tr("Whole words"), this); | |
hboxLayout->addWidget(d->checkWholeWords); | |
d->labelWrapped = new QLabel(this); | |
d->labelWrapped->setMinimumSize(QSize(0, 20)); | |
d->labelWrapped->setMaximumSize(QSize(115, 20)); | |
d->labelWrapped->setTextFormat(Qt::RichText); | |
d->labelWrapped->setScaledContents(true); | |
d->labelWrapped->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); | |
d->labelWrapped->setText(tr("<img src=\":/qt/scripttools/debugging/images/wrap.png\"> Search wrapped")); | |
hboxLayout->addWidget(d->labelWrapped); | |
QSpacerItem *spacerItem = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); | |
hboxLayout->addItem(spacerItem); | |
setMinimumWidth(minimumSizeHint().width()); | |
d->labelWrapped->hide(); | |
d->_q_updateButtons(); | |
setFocusProxy(d->editFind); | |
QObject::connect(d->toolClose, SIGNAL(clicked()), this, SLOT(hide())); | |
QObject::connect(d->editFind, SIGNAL(textChanged(QString)), | |
this, SLOT(_q_onTextChanged(QString))); | |
QObject::connect(d->toolNext, SIGNAL(clicked()), this, SLOT(_q_next())); | |
QObject::connect(d->toolPrevious, SIGNAL(clicked()), this, SLOT(_q_previous())); | |
} | |
QScriptDebuggerCodeFinderWidget::~QScriptDebuggerCodeFinderWidget() | |
{ | |
} | |
int QScriptDebuggerCodeFinderWidget::findOptions() const | |
{ | |
Q_D(const QScriptDebuggerCodeFinderWidget); | |
return d->findOptions(); | |
} | |
QString QScriptDebuggerCodeFinderWidget::text() const | |
{ | |
Q_D(const QScriptDebuggerCodeFinderWidget); | |
return d->editFind->text(); | |
} | |
void QScriptDebuggerCodeFinderWidget::setText(const QString &text) | |
{ | |
Q_D(const QScriptDebuggerCodeFinderWidget); | |
d->editFind->setText(text); | |
} | |
void QScriptDebuggerCodeFinderWidget::setOK(bool ok) | |
{ | |
Q_D(QScriptDebuggerCodeFinderWidget); | |
QPalette p = d->editFind->palette(); | |
QColor c; | |
if (ok) | |
c = Qt::white; | |
else | |
c = QColor(255, 102, 102); | |
p.setColor(QPalette::Active, QPalette::Base, c); | |
d->editFind->setPalette(p); | |
if (!ok) | |
d->labelWrapped->hide(); | |
} | |
void QScriptDebuggerCodeFinderWidget::setWrapped(bool wrapped) | |
{ | |
Q_D(QScriptDebuggerCodeFinderWidget); | |
d->labelWrapped->setVisible(wrapped); | |
} | |
void QScriptDebuggerCodeFinderWidget::keyPressEvent(QKeyEvent *e) | |
{ | |
if (e->key() == Qt::Key_Escape) | |
hide(); | |
else | |
QScriptDebuggerCodeFinderWidgetInterface::keyPressEvent(e); | |
} | |
QT_END_NAMESPACE | |
#include "moc_qscriptdebuggercodefinderwidget_p.cpp" |