Exemplo n.º 1
0
SearchWidget::SearchWidget(SearchOptions options, SearchMode mode,
                           SearchButtons buttons, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SearchWidget)
{
    ui->setupUi(this);

    setWindowTitle(tr("Search Widget"));

    int labelWidth = fontMetrics().width(ui->labelReplace->text());
    ui->labelFind->setMinimumWidth(labelWidth);
    ui->labelReplace->setMinimumWidth(labelWidth);

    connect(ui->findPrevious, SIGNAL(clicked()), SLOT(handleFindPrevious()));
    connect(ui->findNext, SIGNAL(clicked()), SLOT(handleFindNext()));
    connect(ui->replacePrevious, SIGNAL(clicked()), SLOT(handleReplacePrevious()));
    connect(ui->replaceNext, SIGNAL(clicked()), SLOT(handleReplaceNext()));
    connect(ui->replaceAll, SIGNAL(clicked()), SLOT(handleReplaceAll()));
    connect(ui->close, SIGNAL(clicked()), SLOT(handleClose()));
    connect(ui->searchString, SIGNAL(textChanged(QString)), SLOT(handleSearchStringChanged(QString)));
    connect(ui->replaceString, SIGNAL(textChanged(QString)), SLOT(handleReplaceStringChanged(QString)));

    m_searchOptionsMenu = new QMenu(tr("Search Options"), this);
    m_searchOptionsMenu->setObjectName(objectName());

    m_searchCaseSensitive = new QAction(tr("Case Sensitive"), this);
    m_searchCaseSensitive->setCheckable(true);
    m_searchCaseSensitive->setObjectName(objectName());
    m_searchOptionsMenu->addAction(m_searchCaseSensitive);
    connect(m_searchCaseSensitive, SIGNAL(triggered()), SLOT(handleOptionsChanged()));

    m_searchWholeWordsOnly = new QAction(tr("Whole Words Only"), this);
    m_searchWholeWordsOnly->setCheckable(true);
    m_searchWholeWordsOnly->setObjectName(objectName());
    m_searchOptionsMenu->addAction(m_searchWholeWordsOnly);
    connect(m_searchWholeWordsOnly, SIGNAL(triggered()), SLOT(handleOptionsChanged()));

    m_searchOptionsMenu->addSeparator();

    m_searchRegEx = new QAction(tr("Regular Expression"), this);
    m_searchRegEx->setObjectName(objectName());
    m_searchRegEx->setCheckable(true);
    m_searchOptionsMenu->addAction(m_searchRegEx);

    m_searchWildcard = new QAction(tr("Wildcard Expression"), this);
    m_searchWildcard->setCheckable(true);
    m_searchWildcard->setObjectName(objectName());
    m_searchOptionsMenu->addAction(m_searchWildcard);

    m_searchFixedString = new QAction(tr("Fixed String"), this);
    m_searchFixedString->setCheckable(true);
    m_searchFixedString->setObjectName(objectName());
    m_searchOptionsMenu->addAction(m_searchFixedString);

    m_searchPatternGroup = new QActionGroup(this);
    m_searchPatternGroup->addAction(m_searchRegEx);
    m_searchPatternGroup->addAction(m_searchWildcard);
    m_searchPatternGroup->addAction(m_searchFixedString);
    m_searchWildcard->setChecked(true);

    connect(m_searchPatternGroup, SIGNAL(triggered(QAction*)), SLOT(handleOptionsChanged()));

    ui->searchOptions->setPopupMode(QToolButton::InstantPopup);
    ui->searchOptions->setMenu(m_searchOptionsMenu);

    setSearchButtons(buttons);
    setSearchOptions(options);
    setSearchMode(mode);
}
Exemplo n.º 2
0
/* Find/Replace dialog */
TextFindDialog::TextFindDialog(QPlasmaTextDoc* parent, bool replace)
              : QDialog(parent)
{
    s_findSettings.current = this;
    fDocument = parent;
    setAttribute(Qt::WA_DeleteOnClose);
    if (replace) {
        setWindowTitle(tr("Replace..."));
        setWindowIcon(qStdIcon("edit-find-replace"));
    } else {
        setWindowTitle(tr("Find..."));
        setWindowIcon(qStdIcon("edit-find"));
    }

    fFindText = new QLineEdit(s_findSettings.text, this);
    if (replace)
        fNewText = new QLineEdit(s_findSettings.newText, this);
    else
        fNewText = NULL;
    fCaseSensitive = new QCheckBox(tr("&Case sensitive"), this);
    fRegEx = new QCheckBox(tr("&Regular expression search"), this);
    fWholeWord = new QCheckBox(tr("Match &whole word"), this);
    fReverse = new QCheckBox(tr("Search &up"), this);
    fFindText->selectAll();
    fCaseSensitive->setChecked(s_findSettings.cs);
    fRegEx->setChecked(s_findSettings.regex);
    fWholeWord->setChecked(s_findSettings.wo);
    fReverse->setChecked(s_findSettings.reverse);

    QWidget* buttonPanel = new QWidget(this);
    QPushButton* btnFind = new QPushButton(replace ? tr("&Replace") : tr("&Find"), buttonPanel);
    QPushButton* btnReplaceAll = NULL;
    if (replace) {
        btnReplaceAll = new QPushButton(tr("Replace &All"), buttonPanel);
        fBtnSkip = new QPushButton(tr("&Skip"), buttonPanel);
        fBtnSkip->setEnabled(false);
    }
    QPushButton* btnCancel = new QPushButton(tr("&Cancel"), buttonPanel);

    QGridLayout* buttonLayout = new QGridLayout(buttonPanel);
    buttonLayout->setContentsMargins(0, 0, 0, 0);
    buttonLayout->setVerticalSpacing(4);
    int idx = 0;
    buttonLayout->addWidget(btnFind, idx++, 0);
    if (replace) {
        buttonLayout->addWidget(btnReplaceAll, idx++, 0);
        buttonLayout->addWidget(fBtnSkip, idx++, 0);
    }
    buttonLayout->addWidget(btnCancel, idx++, 0);
    buttonLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), idx, 0);

    QGridLayout* layout = new QGridLayout(this);
    layout->setContentsMargins(8, 8, 8, 8);
    layout->setVerticalSpacing(4);
    layout->setHorizontalSpacing(8);
    idx = 0;
    layout->addWidget(new QLabel(tr("Search string:"), this), idx, 0);
    layout->addWidget(fFindText, idx++, 1);
    if (replace) {
        layout->addWidget(new QLabel(tr("Replace with:"), this), idx, 0);
        layout->addWidget(fNewText, idx++, 1);
    }
    layout->addItem(new QSpacerItem(0, 16, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum), idx++, 0, 1, 2);
    layout->addWidget(fCaseSensitive, idx++, 1);
    layout->addWidget(fRegEx, idx++, 1);
    layout->addWidget(fWholeWord, idx++, 1);
    layout->addWidget(fReverse, idx++, 1);
    layout->addWidget(buttonPanel, 0, 2, idx, 1);

    connect(btnFind, SIGNAL(clicked()), this, SLOT(handleFind()));
    connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
    if (replace) {
        connect(btnReplaceAll, SIGNAL(clicked()), this, SLOT(handleReplaceAll()));
        connect(fBtnSkip, SIGNAL(clicked()), this, SLOT(handleSkip()));
    }

    resize(sizeHint().width() * 1.5, sizeHint().height());
}