advancedsearchdialog.cpp 5.78 KB
Newer Older
1 2
/***************************************************************************
    begin                : Thu Jul 31 00:31:51 2003
3
    copyright            : (C) 2003 - 2004 by Scott Wheeler
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
    email                : wheeler@kde.org
***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include <kcombobox.h>
#include <klineedit.h>
#include <kpushbutton.h>
#include <klocale.h>

#include <qradiobutton.h>
#include <qlabel.h>
Laurent Montel's avatar
Laurent Montel committed
23 24
#include <q3hbox.h>
#include <q3vbox.h>
25
#include <qlayout.h>
Laurent Montel's avatar
Laurent Montel committed
26 27 28
//Added by qt3to4:
#include <QHBoxLayout>
#include <QBoxLayout>
29

30
#include "collectionlist.h"
31
#include "advancedsearchdialog.h"
32
#include "searchwidget.h"
33

34 35 36 37
////////////////////////////////////////////////////////////////////////////////
// public methods
////////////////////////////////////////////////////////////////////////////////

38
AdvancedSearchDialog::AdvancedSearchDialog(const QString &defaultName,
39
					   const PlaylistSearch &defaultSearch,
40 41
                                           QWidget *parent,
                                           const char *name) :
42 43 44 45
    KDialogBase(parent, name, true, i18n("Create Search Playlist"), Ok|Cancel)
{
    makeVBoxMainWidget();

Laurent Montel's avatar
Laurent Montel committed
46
    Q3HBox *box = new Q3HBox(mainWidget());
47 48
    box->setSpacing(5);

Nadeem Hasan's avatar
Nadeem Hasan committed
49
    new QLabel(i18n("Playlist name:"), box);
50
    m_playlistNameLineEdit = new KLineEdit(defaultName, box);
51 52

    QVGroupBox *criteriaGroupBox = new QVGroupBox(i18n("Search Criteria"), mainWidget());
Laurent Montel's avatar
Laurent Montel committed
53
    static_cast<Q3HBox *>(mainWidget())->setStretchFactor(criteriaGroupBox, 1);
54

Laurent Montel's avatar
Laurent Montel committed
55
    Q3HButtonGroup *group = new Q3HButtonGroup(criteriaGroupBox);
56 57
    m_matchAnyButton = new QRadioButton(i18n("Match any of the following"), group);
    m_matchAllButton = new QRadioButton(i18n("Match all of the following"), group);
58

Laurent Montel's avatar
Laurent Montel committed
59
    m_criteria = new Q3VBox(criteriaGroupBox);
60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
    if(defaultSearch.isNull()) {
        m_searchLines.append(new SearchLine(m_criteria));
        m_searchLines.append(new SearchLine(m_criteria));
        m_matchAnyButton->setChecked(true);
    }
    else {
        PlaylistSearch::ComponentList components = defaultSearch.components();
        for(PlaylistSearch::ComponentList::ConstIterator it = components.begin();
            it != components.end();
            ++it)
        {
            SearchLine *s = new SearchLine(m_criteria);
            s->setSearchComponent(*it);
            m_searchLines.append(s);
        }
        if(defaultSearch.searchMode() == PlaylistSearch::MatchAny)
            m_matchAnyButton->setChecked(true);
        else
            m_matchAllButton->setChecked(true);
    }
81 82 83 84

    QWidget *buttons = new QWidget(criteriaGroupBox);
    QBoxLayout *l = new QHBoxLayout(buttons, 0, 5);

85
    KPushButton *clearButton = new KPushButton(KStdGuiItem::clear(), buttons);
86 87
    connect(clearButton, SIGNAL(clicked()), SLOT(clear()));
    l->addWidget(clearButton);
88 89 90

    l->addStretch(1);

91 92 93 94 95 96 97
    m_moreButton = new KPushButton(i18n("More"), buttons);
    connect(m_moreButton, SIGNAL(clicked()), SLOT(more()));
    l->addWidget(m_moreButton);

    m_fewerButton = new KPushButton(i18n("Fewer"), buttons);
    connect(m_fewerButton, SIGNAL(clicked()), SLOT(fewer()));
    l->addWidget(m_fewerButton);
98 99

    m_playlistNameLineEdit->setFocus();
100 101 102 103 104 105
}

AdvancedSearchDialog::~AdvancedSearchDialog()
{

}
106 107 108 109 110 111 112 113 114 115

////////////////////////////////////////////////////////////////////////////////
// public slots
////////////////////////////////////////////////////////////////////////////////

AdvancedSearchDialog::Result AdvancedSearchDialog::exec()
{
    Result r;
    r.result = DialogCode(KDialogBase::exec());
    r.search = m_search;
116
    r.playlistName = m_playlistName;
117 118 119 120 121 122 123 124 125 126 127 128 129 130
    return r;
}

////////////////////////////////////////////////////////////////////////////////
// protected slots
////////////////////////////////////////////////////////////////////////////////

void AdvancedSearchDialog::accept()
{
    m_search.clearPlaylists();
    m_search.clearComponents();

    m_search.addPlaylist(CollectionList::instance());

Laurent Montel's avatar
Laurent Montel committed
131
    Q3ValueListConstIterator<SearchLine *> it = m_searchLines.begin();
132 133 134 135 136 137
    for(; it != m_searchLines.end(); ++it)
        m_search.addComponent((*it)->searchComponent());

    PlaylistSearch::SearchMode m = PlaylistSearch::SearchMode(!m_matchAnyButton->isChecked());
    m_search.setSearchMode(m);

138 139
    m_playlistName = m_playlistNameLineEdit->text();

140 141 142
    KDialogBase::accept();
}

143 144
void AdvancedSearchDialog::clear()
{
Laurent Montel's avatar
Laurent Montel committed
145
    Q3ValueListConstIterator<SearchLine *> it = m_searchLines.begin();
146 147 148 149
    for(; it != m_searchLines.end(); ++it)
        (*it)->clear();
}

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
void AdvancedSearchDialog::more()
{
    SearchLine *searchLine = new SearchLine(m_criteria);
    m_searchLines.append(searchLine);
    searchLine->show();
    updateButtons();
}

void AdvancedSearchDialog::fewer()
{
    SearchLine *searchLine = m_searchLines.last();
    m_searchLines.remove(searchLine);
    delete searchLine;
    updateButtons();
}

////////////////////////////////////////////////////////////////////////////////
// private methods
////////////////////////////////////////////////////////////////////////////////

void AdvancedSearchDialog::updateButtons()
{
    m_moreButton->setEnabled(m_searchLines.count() < 16);
    m_fewerButton->setEnabled(m_searchLines.count() > 1);
}

176
#include "advancedsearchdialog.moc"