예제 #1
0
// Adjust the search panel according the the server caps for the
// active tab
void DirBrowser::onCurrentTabChanged(int)
{
    CDBrowser *cdb = currentBrowser();
    set<string> caps;
    if (cdb)
        cdb->getSearchCaps(caps);
    while(ui->propsCMB->count())
        ui->propsCMB->removeItem(0);
    if (caps.empty()) {
        ui->serverSearchCB->setCheckState(Qt::Unchecked);
        ui->serverSearchCB->setEnabled(false);
    } else {
        ui->serverSearchCB->setEnabled(true);
        QString scs;
        vector<pair<string, string> > props;
        props.push_back(pair<string,string>("upnp:artist", "Artist"));
        props.push_back(pair<string,string>("upnp:album", "Album"));
        props.push_back(pair<string,string>("dc:title", "Title"));
        props.push_back(pair<string,string>("upnp:genre", "Genre"));
        for (vector<pair<string, string> >::iterator it = props.begin(); 
             it != props.end(); it++) {
            if (caps.find("*") != caps.end() || 
                caps.find(it->first) != caps.end()) {
                ui->propsCMB->addItem(u8s2qs(it->second),
                                      QVariant(u8s2qs(it->first)));
            }
            scs += u8s2qs(it->first.c_str()) + " ";
        }
        qDebug() << "Search caps: " << scs;
        onSearchKindChanged(ui->serverSearchCB->checkState());
    }
}
예제 #2
0
void DirBrowser::onBrowseInNewTab(QString UDN,
                                  vector<CDBrowser::CtPathElt> path)
{
    //qDebug() << "onBrowseInNewTab(): " << UDN;
    addTab();
    CDBrowser *cdb = currentBrowser();
    if (cdb) 
        cdb->browseIn(UDN, path);
}
예제 #3
0
// Perform text search in current tab. 
// @param next if true, we look for the next match of the
// current search, trying to advance and possibly wrapping around. Else is
// false, the search string has been modified, we search for the new string, 
// starting from the current position
void DirBrowser::doSearch(const QString& text, bool reverse)
{
    qDebug() << "DirBrowser::doSearch: text " << text << " reverse " << reverse;

    CDBrowser *cdb = currentBrowser();
    if (cdb == 0) {
	return;
    }
    QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
    if (reverse)
        options |= QWebPage::FindBackward;

    cdb->findText(text, options);
}
예제 #4
0
void DirBrowser::serverSearch()
{
    QString text = ui->searchCMB->lineEdit()->text();
    int i = ui->propsCMB->currentIndex();
    string prop = qs2utf8s(ui->propsCMB->itemData(i).toString());
    if (text != "") {
        string iss = qs2utf8s(text);
        string ss(prop);
        ss += " contains \"";
        for (unsigned i = 0; i < iss.size(); i++) {
            if (iss[i] == '"' || iss[i] == '\\')
                ss += string("\\");
            ss += iss[i];
        }
        ss += '"';
        CDBrowser *cdb = currentBrowser();
        if (cdb)
            cdb->search(ss);
    }
}
예제 #5
0
void DirBrowser::onSortprefs()
{
    static map<string, string>  allSortCrits;
    static map<string, string>  allSortCritsRev;
    if (allSortCrits.empty()) {
        allSortCrits["Track Number"] = "upnp:originalTrackNumber";
        allSortCrits["Track Title"] = "dc:title";
        allSortCrits["Date"] = "dc:date";
        allSortCrits["Artist"] = "upnp:artist";
        allSortCrits["Album Title"] = "upnp:album";
        allSortCrits["URI"] = "uri";

        for (map<string, string>::iterator it = allSortCrits.begin(); 
             it != allSortCrits.end(); it++) {
            allSortCritsRev[it->second] = it->first;
        }
    }

    QStringList qcrits = CSettingsStorage::getInstance()->getSortCrits();
    vector<string> crits;
    if (qcrits.size() == 0) {
        qcrits.push_back("upnp:artist");
        qcrits.push_back("upnp:album");
        qcrits.push_back("upnp:originalTrackNumber");
        qcrits.push_back("dc:title");
        qcrits.push_back("dc:date");
        qcrits.push_back("uri");
    }

    for (int i = 0; i < qcrits.size(); i++) {
        string nm = allSortCritsRev[qs2utf8s(qcrits[i])];
        if (nm == "") {
            // Bummer. Limp along and hope for the best
            nm = qs2utf8s(qcrits[i]);
        }
        crits.push_back(nm);
    }

    int sortkind = CSettingsStorage::getInstance()->getSortKind();
    SortprefsDLG dlg(crits);
    switch (sortkind) {
    case CSettingsStorage::SK_NOSORT:
    default:
        dlg.noSortRB->setChecked(true);
        break;
    case CSettingsStorage::SK_MINIMFNORDER:
        dlg.minimfnRB->setChecked(true);
        break;
    case CSettingsStorage::SK_CUSTOM:
        dlg.sortRB->setChecked(true);
        break;
    }
        
    if (dlg.exec()) {
        sortkind = CSettingsStorage::SK_NOSORT;
        if (dlg.minimfnRB->isChecked()) {
            sortkind = CSettingsStorage::SK_MINIMFNORDER;
        } else if (dlg.sortRB->isChecked()) {
            sortkind = CSettingsStorage::SK_CUSTOM;
        }
        CSettingsStorage::getInstance()->setSortKind(sortkind);
        qcrits.clear();
        for (int i = 0; i < dlg.critsLW->count(); i++) {
            QString val = 
                dlg.critsLW->item(i)->data(Qt::DisplayRole).toString();
            //qDebug() << "Sort nm: " << val;
            val = u8s2qs(allSortCrits[qs2utf8s(val)]);
            if (val != "") {
                qcrits += val;
                //qDebug() << "Sort crit: " << val;
            }
        }
        CSettingsStorage::getInstance()->setSortCrits(qcrits);
        currentBrowser()->refresh();
    }        
}
예제 #6
0
BrowserBar::~BrowserBar()
{
    KConfig* const config = Amarok::config( "BrowserBar" );
    config->writeEntry( "CurrentPane", m_currentIndex != -1 ? QString(currentBrowser()->name()) : QString::null );
    config->writeEntry( "Width", m_browserBox->width() );
}