Switch to unified view

a/dirbrowser/dirbrowser.cpp b/dirbrowser/dirbrowser.cpp
...
...
120
            }
120
            }
121
        }
121
        }
122
    }
122
    }
123
}
123
}
124
124
125
    
125
void DirBrowser::addTab()
126
void DirBrowser::addTab()
126
{
127
{
127
    QWidget *tab = new QWidget(this);
128
    QWidget *tab = new QWidget(this);
128
    tab->setObjectName(QString::fromUtf8("tab"));
129
    tab->setObjectName(QString::fromUtf8("tab"));
129
    QVBoxLayout* vl = new QVBoxLayout(tab);
130
    QVBoxLayout* vl = new QVBoxLayout(tab);
...
...
149
    QWidget *w = ui->tabs->widget(i);
150
    QWidget *w = ui->tabs->widget(i);
150
    ui->tabs->removeTab(i);
151
    ui->tabs->removeTab(i);
151
    delete w;
152
    delete w;
152
}
153
}
153
154
155
static const QString UPnPSearchCheat(
156
    "Album/Artist etc.: just enter a value.<br>"
157
    "UPnP search string example:<br>"
158
    "upnp:artist contains \"bach\" and "
159
    "dc:title contains \"allegro\""
160
    );
161
154
// Adjust the search panel according the the server caps for the
162
// Adjust the search panel according the the server caps for the
155
// active tab
163
// active tab
156
void DirBrowser::onCurrentTabChanged(int)
164
void DirBrowser::onCurrentTabChanged(int)
157
{
165
{
158
    CDBrowser *cdb = currentBrowser();
166
    CDBrowser *cdb = currentBrowser();
159
    set<string> caps;
167
    set<string> caps;
160
    if (cdb)
168
    if (cdb)
161
        cdb->getSearchCaps(caps);
169
        cdb->getSearchCaps(caps);
170
    QString strcaps = u8s2qs("<i></i>Server searchable fields: ") +
171
                             u8s2qs(stringsToString(caps));
172
162
    while(ui->propsCMB->count())
173
    while(ui->propsCMB->count())
163
        ui->propsCMB->removeItem(0);
174
        ui->propsCMB->removeItem(0);
164
    if (caps.empty()) {
175
    if (caps.empty()) {
165
        ui->serverSearchCB->setCheckState(Qt::Unchecked);
176
        ui->serverSearchCB->setCheckState(Qt::Unchecked);
166
        ui->serverSearchCB->setEnabled(false);
177
        ui->serverSearchCB->setEnabled(false);
...
...
179
                ui->propsCMB->addItem(u8s2qs(it->second),
190
                ui->propsCMB->addItem(u8s2qs(it->second),
180
                                      QVariant(u8s2qs(it->first)));
191
                                      QVariant(u8s2qs(it->first)));
181
            }
192
            }
182
            scs += u8s2qs(it->first.c_str()) + " ";
193
            scs += u8s2qs(it->first.c_str()) + " ";
183
        }
194
        }
184
        qDebug() << "Search caps: " << scs;
195
        ui->propsCMB->addItem(tr("UPnP search string"),
196
                              QVariant(u8s2qs("*")));
197
        ui->propsCMB->setToolTip(strcaps);
198
        ui->searchCMB->setToolTip(UPnPSearchCheat);
185
        onSearchKindChanged(ui->serverSearchCB->checkState());
199
        onSearchKindChanged(ui->serverSearchCB->checkState());
186
    }
200
    }
187
}
201
}
188
202
189
static QString escapeAmpersand(const QString& in)
203
static QString escapeAmpersand(const QString& in)
...
...
273
        if (!text.isEmpty()) {
287
        if (!text.isEmpty()) {
274
            doSearch(text, false);
288
            doSearch(text, false);
275
        }
289
        }
276
    }
290
    }
277
}
291
}
292
278
void DirBrowser::searchNext()
293
void DirBrowser::searchNext()
279
{
294
{
280
    doSearch(ui->searchCMB->currentText(), false);
295
    doSearch(ui->searchCMB->currentText().trimmed(), false);
281
}
296
}
282
297
283
void DirBrowser::searchPrev()
298
void DirBrowser::searchPrev()
284
{
299
{
285
    doSearch(ui->searchCMB->currentText(), true);
300
    doSearch(ui->searchCMB->currentText().trimmed(), true);
286
}
301
}
287
302
288
void DirBrowser::returnPressedInSearch()
303
void DirBrowser::returnPressedInSearch()
289
{
304
{
290
    if (ui->propsCMB->isEnabled()) {
305
    if (ui->propsCMB->isEnabled()) {
...
...
297
    }
312
    }
298
}
313
}
299
314
300
void DirBrowser::serverSearch()
315
void DirBrowser::serverSearch()
301
{
316
{
302
    QString text = ui->searchCMB->lineEdit()->text();
317
    QString text = ui->searchCMB->lineEdit()->text().trimmed();
303
    int i = ui->propsCMB->currentIndex();
318
    int i = ui->propsCMB->currentIndex();
304
    string prop = qs2utf8s(ui->propsCMB->itemData(i).toString());
319
    string prop = qs2utf8s(ui->propsCMB->itemData(i).toString());
305
    if (text != "") {
320
    if (text != "") {
306
        string iss = qs2utf8s(text);
321
        string iss = qs2utf8s(text);
322
        // prop can be either a field name (e.g. dc:date,
323
        // upnp:artist), or "*" in which case the user is responsible
324
        // for entering an appropriate search"
307
        string ss(prop);
325
        string ss;
326
        if (prop == "*") {
327
            ss = iss;
328
        } else {
329
            ss.assign(prop);
308
        ss += " contains \"";
330
            ss += " contains \"";
309
        for (unsigned i = 0; i < iss.size(); i++) {
331
            for (unsigned i = 0; i < iss.size(); i++) {
310
            if (iss[i] == '"' || iss[i] == '\\')
332
                if (iss[i] == '"' || iss[i] == '\\')
311
                ss += string("\\");
333
                    ss += string("\\");
312
            ss += iss[i];
334
                ss += iss[i];
335
            }
336
            ss += '"';
313
        }
337
        } 
314
        ss += '"';
315
        CDBrowser *cdb = currentBrowser();
338
        CDBrowser *cdb = currentBrowser();
316
        if (cdb)
339
        if (cdb)
317
            cdb->search(ss);
340
            cdb->search(ss);
318
    }
341
    }
319
}
342
}