From 5e123c68d7717558db354bd045bf334f0904f7d2 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 17 Oct 2009 15:05:50 +0000 Subject: * move classes for searching into an own folder (new classes will be added soon) * Postpone the creation of the searchcompleter, until the editor gets focused. This improves the startup time of Dolphin (reading all available tags is an expensive operation). svn path=/trunk/KDE/kdebase/apps/; revision=1036658 --- src/CMakeLists.txt | 4 +- src/dolphinmainwindow.cpp | 2 +- src/dolphinsearchbox.cpp | 305 ----------------------------- src/dolphinsearchbox.h | 99 ---------- src/dolphinsearchcommands.desktop | 276 --------------------------- src/search/dolphinsearchbox.cpp | 318 +++++++++++++++++++++++++++++++ src/search/dolphinsearchbox.h | 96 ++++++++++ src/search/dolphinsearchcommands.desktop | 276 +++++++++++++++++++++++++++ 8 files changed, 693 insertions(+), 683 deletions(-) delete mode 100644 src/dolphinsearchbox.cpp delete mode 100644 src/dolphinsearchbox.h delete mode 100644 src/dolphinsearchcommands.desktop create mode 100644 src/search/dolphinsearchbox.cpp create mode 100644 src/search/dolphinsearchbox.h create mode 100644 src/search/dolphinsearchcommands.desktop (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3186489b4..180170fbd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,7 +105,6 @@ set(dolphin_SRCS dolphinmainwindow.cpp dolphinnewmenu.cpp dolphinviewcontainer.cpp - dolphinsearchbox.cpp dolphindirlister.cpp dolphincontextmenu.cpp filterbar.cpp @@ -122,6 +121,7 @@ set(dolphin_SRCS panels/folders/treeviewcontextmenu.cpp panels/folders/folderspanel.cpp panels/folders/paneltreeview.cpp + search/dolphinsearchbox.cpp settings/behaviorsettingspage.cpp settings/columnviewsettingspage.cpp settings/contextmenusettingspage.cpp @@ -256,7 +256,7 @@ install(TARGETS kcm_dolphingeneral DESTINATION ${PLUGIN_INSTALL_DIR} ) install( FILES dolphin.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) install( FILES settings/dolphin_directoryviewpropertysettings.kcfg settings/dolphin_generalsettings.kcfg settings/dolphin_columnmodesettings.kcfg settings/dolphin_iconsmodesettings.kcfg settings/dolphin_detailsmodesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR} ) install( FILES dolphinui.rc DESTINATION ${DATA_INSTALL_DIR}/dolphin ) -install( FILES dolphinsearchcommands.desktop DESTINATION ${DATA_INSTALL_DIR}/dolphin ) +install( FILES search/dolphinsearchcommands.desktop DESTINATION ${DATA_INSTALL_DIR}/dolphin ) install( FILES kcm/kcmdolphinviewmodes.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) install( FILES kcm/kcmdolphinnavigation.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) install( FILES kcm/kcmdolphinservices.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index f491ea8e0..6134632ae 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -27,9 +27,9 @@ #include "dolphinapplication.h" #include "dolphinnewmenu.h" +#include "search/dolphinsearchbox.h" #include "settings/dolphinsettings.h" #include "settings/dolphinsettingsdialog.h" -#include "dolphinsearchbox.h" #include "dolphinviewcontainer.h" #include "panels/folders/folderspanel.h" #include "panels/places/placespanel.h" diff --git a/src/dolphinsearchbox.cpp b/src/dolphinsearchbox.cpp deleted file mode 100644 index d9a82ccd6..000000000 --- a/src/dolphinsearchbox.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2009 by Peter Penz * - * Copyright (C) 2009 by Matthias Fuchs * - * * - * 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. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ -#include "dolphinsearchbox.h" - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_NEPOMUK -#include -#include -#endif //HAVE_NEPOMUK - - -DolphinSearchCompleter::DolphinSearchCompleter(KLineEdit* linedit) : - QObject(0), - q(linedit), - m_completer(0), - m_completionModel(0), - m_wordStart(-1), - m_wordEnd(-1) -{ -} - -void DolphinSearchCompleter::init() -{ - m_completionModel = new QStandardItemModel(this); - -#ifdef HAVE_NEPOMUK - if (!Nepomuk::ResourceManager::instance()->init()) { - //read all currently set tags - //NOTE if the user changes tags elsewhere they won't get updated here - QList tags = Nepomuk::Tag::allTags(); - foreach (const Nepomuk::Tag& tag, tags) { - const QString tagText = tag.label(); - addCompletionItem(tagText, - "tag:\"" + tagText + '\"', - i18nc("Tag as in Nepomuk::Tag", "Tag"), - QString(), - KIcon("mail-tagged")); - } - } -#endif //HAVE_NEPOMUK - - //load the completions stored in the desktop file - KDesktopFile file(KStandardDirs::locate("data", "dolphin/dolphinsearchcommands.desktop")); - foreach (const QString &group, file.groupList()) { - KConfigGroup cg(&file, group); - const QString displayed = cg.readEntry("Name", QString()); - const QString usedForCompletition = cg.readEntry("Completion", QString()); - const QString description = cg.readEntry("Comment", QString()); - const QString toolTip = cg.readEntry("GenericName", QString()); - const QString icon = cg.readEntry("Icon", QString()); - - if (icon.isEmpty()) { - addCompletionItem(displayed, usedForCompletition, description, toolTip); - } else { - addCompletionItem(displayed, usedForCompletition, description, toolTip, KIcon(icon)); - } - } - - m_completionModel->sort(0, Qt::AscendingOrder); - - m_completer = new QCompleter(m_completionModel, this); - m_completer->setWidget(q); - m_completer->setCaseSensitivity(Qt::CaseInsensitive); - QTreeView *view = new QTreeView; - m_completer->setPopup(view); - view->setRootIsDecorated(false); - view->setHeaderHidden(true); - - connect(q, SIGNAL(textEdited(QString)), this, SLOT(slotTextEdited(QString))); - connect(m_completer, SIGNAL(activated(QModelIndex)), this, SLOT(completionActivated(QModelIndex))); - connect(m_completer, SIGNAL(highlighted(QModelIndex)), this, SLOT(highlighted(QModelIndex))); -} - -void DolphinSearchCompleter::addCompletionItem(const QString& displayed, const QString& usedForCompletition, const QString& description, const QString& toolTip, const KIcon& icon) -{ - if (displayed.isEmpty() || usedForCompletition.isEmpty()) { - return; - } - - QList items; - QStandardItem *item = new QStandardItem(); - item->setData(QVariant(displayed), Qt::DisplayRole); - item->setData(QVariant(usedForCompletition), Qt::UserRole); - item->setData(QVariant(toolTip), Qt::ToolTipRole); - items << item; - - item = new QStandardItem(description); - if (!icon.isNull()) { - item->setIcon(icon); - } - item->setData(QVariant(toolTip), Qt::ToolTipRole); - items << item; - - m_completionModel->insertRow(m_completionModel->rowCount(), items); -} - -void DolphinSearchCompleter::findText(int* wordStart, int* wordEnd, QString* newWord, int cursorPos, const QString &input) -{ - --cursorPos;//decrease to get a useful position (not the end of the word e.g.) - - if (!wordStart || !wordEnd) { - return; - } - - *wordStart = -1; - *wordEnd = -1; - - //the word might contain "" and thus maybe spaces - if (input.contains('\"')) { - int tempStart = -1; - int tempEnd = -1; - - do { - tempStart = input.indexOf('\"', tempEnd + 1); - tempEnd = input.indexOf('\"', tempStart + 1); - if ((cursorPos >= tempStart) && (cursorPos <= tempEnd)) { - *wordStart = tempStart; - *wordEnd = tempEnd; - break; - } else if ((tempEnd == -1) && (cursorPos >= tempStart)) { - //one " found, so probably the beginning of the new word - *wordStart = tempStart; - break; - } - } while ((tempStart != -1) && (tempEnd != -1)); - } - - if (*wordEnd > -1) { - *wordEnd = input.indexOf(' ', *wordEnd) - 1; - } else { - *wordEnd = input.indexOf(' ', cursorPos) - 1; - } - if (*wordEnd < 0) { - *wordEnd = input.length() - 1; - } - - if (*wordStart > -1) { - *wordStart = input.lastIndexOf(' ', *wordStart + 1) + 1; - } else { - *wordStart = input.lastIndexOf(' ', cursorPos) + 1; - } - if (*wordStart < 0) { - *wordStart = 0; - } - - - QString word = input.mid(*wordStart, *wordEnd - *wordStart + 1); - - //remove opening braces or negations ('-' = not) at the beginning - while (word.count() && ((word[0] == '(') || (word[0] == '-'))) { - word.remove(0, 1); - ++(*wordStart); - } - - //remove ending braces at the end - while (word.count() && (word[word.count() - 1] == ')')) { - word.remove(word.count() - 1, 1); - --(*wordEnd); - } - - if (newWord) { - *newWord = word; - } -} - -void DolphinSearchCompleter::slotTextEdited(const QString& text) -{ - findText(&m_wordStart, &m_wordEnd, &m_userText, q->cursorPosition(), text); - - if (!m_userText.isEmpty()) { - const int role = m_completer->completionRole(); - - //change the role used for comparison depending on what the user entered - if (m_userText.contains(':') || m_userText.contains('\"')) { - //assume that m_userText contains searchinformation like 'tag:"..."' - if (role != Qt::UserRole) { - m_completer->setCompletionRole(Qt::UserRole); - } - } else if (role != Qt::EditRole) { - m_completer->setCompletionRole(Qt::EditRole); - } - - m_completer->setCompletionPrefix(m_userText); - m_completer->complete(); - } -} - -void DolphinSearchCompleter::highlighted(const QModelIndex& index) -{ - QString text = q->text(); - int wordStart; - int wordEnd; - - findText(&wordStart, &wordEnd, 0, q->cursorPosition(), text); - - QString replace = index.sibling(index.row(), 0).data(Qt::UserRole).toString(); - //show the originally entered text - if (replace.isEmpty()) { - replace = m_userText; - } - - text.replace(wordStart, wordEnd - wordStart + 1, replace); - q->setText(text); - q->setCursorPosition(wordStart + replace.length()); -} - -void DolphinSearchCompleter::activated(const QModelIndex& index) -{ - if ((m_wordStart == -1) || (m_wordStart == -1)) { - return; - } - - const QString replace = index.sibling(index.row(), 0).data(Qt::UserRole).toString(); - QString newText = q->text(); - newText.replace(m_wordStart, m_wordEnd - m_wordStart + 1, replace); - q->setText(newText); -} - -DolphinSearchBox::DolphinSearchBox(QWidget* parent) : - QWidget(parent), - m_searchInput(0), - m_searchButton(0), - m_completer(0) -{ - QHBoxLayout* hLayout = new QHBoxLayout(this); - hLayout->setMargin(0); - hLayout->setSpacing(0); - - m_searchInput = new KLineEdit(this); - m_searchInput->setClearButtonShown(true); - m_searchInput->setMinimumWidth(150); - m_searchInput->setClickMessage(i18nc("@label:textbox", "Search...")); - hLayout->addWidget(m_searchInput); - connect(m_searchInput, SIGNAL(returnPressed()), - this, SLOT(emitSearchSignal())); - - m_completer = new DolphinSearchCompleter(m_searchInput); - m_completer->init(); - - m_searchButton = new QToolButton(this); - m_searchButton->setAutoRaise(true); - m_searchButton->setIcon(KIcon("edit-find")); - m_searchButton->setToolTip(i18nc("@info:tooltip", "Click to begin the search")); - hLayout->addWidget(m_searchButton); - connect(m_searchButton, SIGNAL(clicked()), - this, SLOT(emitSearchSignal())); -} - -DolphinSearchBox::~DolphinSearchBox() -{ - delete m_completer; -} - -bool DolphinSearchBox::event(QEvent* event) -{ - if (event->type() == QEvent::Polish) { - m_searchInput->setFont(KGlobalSettings::generalFont()); - } else if (event->type() == QEvent::KeyPress) { - if (static_cast(event)->key() == Qt::Key_Escape) { - m_searchInput->clear(); - } - } - return QWidget::event(event); -} - -void DolphinSearchBox::emitSearchSignal() -{ - emit search(KUrl("nepomuksearch:/" + m_searchInput->text())); -} - -#include "dolphinsearchbox.moc" diff --git a/src/dolphinsearchbox.h b/src/dolphinsearchbox.h deleted file mode 100644 index c518d6a1d..000000000 --- a/src/dolphinsearchbox.h +++ /dev/null @@ -1,99 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2009 by Peter Penz * - * Copyright (C) 2009 by Matthias Fuchs * - * * - * 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. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ -#ifndef DOLPHINSEARCHBOX_H -#define DOLPHINSEARCHBOX_H - -#include - -#include - -class KLineEdit; -class KUrl; -class QCompleter; -class QModelIndex; -class QStandardItemModel; -class QToolButton; - -/** - * @brief used for completition for the DolphinSearchBox - */ -class DolphinSearchCompleter : public QObject -{ - Q_OBJECT - public: - DolphinSearchCompleter(KLineEdit *linedit); - - void init(); - - public slots: - void highlighted(const QModelIndex& index); - void activated(const QModelIndex& index); - void slotTextEdited(const QString &text); - - private: - void addCompletionItem(const QString& displayed, const QString& usedForCompletition, const QString& description = QString(), const QString& toolTip = QString(), const KIcon& icon = KIcon()); - - void findText(int* wordStart, int* wordEnd, QString* newWord, int cursorPos, const QString &input); - - private: - KLineEdit* q; - QCompleter* m_completer; - QStandardItemModel* m_completionModel; - QString m_userText; - int m_wordStart; - int m_wordEnd; -}; - -/** - * @brief Input box for searching files with Nepomuk. - */ -class DolphinSearchBox : public QWidget -{ - Q_OBJECT - -public: - DolphinSearchBox(QWidget* parent = 0); - virtual ~DolphinSearchBox(); - -protected: - virtual bool event(QEvent* event); - -signals: - /** - * Is emitted when the user pressed Return or Enter - * and provides the Nepomuk URL that should be used - * for searching. - */ - void search(const KUrl& url); - -private slots: - void emitSearchSignal(); - - - - -private: - KLineEdit* m_searchInput; - QToolButton* m_searchButton; - - DolphinSearchCompleter* m_completer; -}; - -#endif diff --git a/src/dolphinsearchcommands.desktop b/src/dolphinsearchcommands.desktop deleted file mode 100644 index 303f8d0cf..000000000 --- a/src/dolphinsearchcommands.desktop +++ /dev/null @@ -1,276 +0,0 @@ -# Name -- what is displayed in the first column -# Comment -- what is displayed in the second column -# Completion -- what is returned as completion item - -[dolphin and] -#ctx: and as in a logic operator to connect search terms -Name=and -Comment=logic operator and -Comment[csb]=logiczny òperatora ë -Comment[en_GB]=logic operator and -Comment[eo]=logika operatoro "kaj" -Comment[et]=Loogiline JA -Comment[is]=rökaðgerðin og -Comment[nl]=logische operator en -Comment[pt]=operador lógico 'e' -Comment[pt_BR]=operador lógico 'e' -Comment[sv]=logisk operator och -Comment[tr]=mantıksal işleç olarak ve -Comment[uk]=булівська дія «ТА» -Comment[x-test]=xxlogic operator andxx -Comment[zh_TW]=邏輯運算上的「且」(and) -Completion=and - -[dolphin or] -#ctx: or as in a logic operator to connect search terms -Name=or -Comment=logic operator or -Comment[csb]=logiczny òperatora abò -Comment[en_GB]=logic operator or -Comment[eo]=logika operatoro "aŭ" -Comment[et]=Loogiline VÕI -Comment[is]=rökaðgerðin eða -Comment[nl]=logische operator of -Comment[pt]=operador lógico 'ou' -Comment[pt_BR]=operador lógico 'ou' -Comment[sv]=logisk operator eller -Comment[tr]=mantıksal işleç olarak veya -Comment[uk]=булівська дія «АБО» -Comment[x-test]=xxlogic operator orxx -Comment[zh_TW]=邏輯運算上的「或」(or) -Completion=or - -[dolphin not] -#ctx: not as in a logic operator to connect search terms -Name=not -Comment=logic operator not -Comment[csb]=logiczny òperatora nié -Comment[en_GB]=logic operator not -Comment[eo]=logika operatoro "ne" -Comment[et]=Loogiline EI -Comment[is]=rökaðgerðin ekki -Comment[nl]=logische operator niet -Comment[pt]=operador lógico 'não' -Comment[pt_BR]=operador lógico 'não' -Comment[sv]=logisk operator inte -Comment[tr]=mantıksal işleç olarak değil -Comment[uk]=булівська дія «НЕ» -Comment[x-test]=xxlogic operator notxx -Comment[zh_TW]=邏輯運算上的「否」(not) -Completion=- - -[dolphin fileExtension] -Name=File extension -Name[csb]=Rozszérzenié lopka -Name[en_GB]=File extension -Name[eo]=Dosier-sufikso -Name[et]=Faililaiend -Name[is]=Skráarending -Name[nl]=Bestandsextensie -Name[pt]=Extensão do ficheiro -Name[pt_BR]=Extensão do arquivo -Name[sv]=Filändelse -Name[tr]=Dosya uzantısı -Name[uk]=Суфікс назви файла -Name[x-test]=xxFile extensionxx -Name[zh_TW]=副檔名 -Comment=for example txt -Comment[csb]=na przëmiôr txt -Comment[en_GB]=for example txt -Comment[eo]=ekzemple "txt" -Comment[et]=näiteks txt -Comment[is]=til dæmis txt -Comment[nl]=bijvoorbeeld txt -Comment[pt]=por exemplo 'txt' -Comment[pt_BR]=por exemplo, 'txt' -Comment[sv]=till exempel txt -Comment[tr]=örneğin txt -Comment[uk]=наприклад, txt -Comment[x-test]=xxfor example txtxx -Comment[zh_TW]=例如 txt -Completion=fileExtension: -Icon=preferences-desktop-filetype-association - -[dolphin rating] -#ctx: rating of nepomuk resources -Name=Rating -#NOTE "=" does not work here, ":" does -Comment=1 to 10, for example >=7 -Comment[csb]=1 do 10, na przëmiôr >=7 -Comment[en_GB]=1 to 10, for example >=7 -Comment[eo]=1 ĝis 10, ekzemple >=7 -Comment[et]=1 kuni 10, näiteks 7 -Comment[is]=1 til 10, til dæmis >=7 -Comment[nl]=1 tot 10, bijvoorbeeld >=7 -Comment[pt]=1 a 10, por exemplo >=7 -Comment[pt_BR]=1 a 10, por exemplo, >=7 -Comment[sv]=1 till 10, till exempel: >=7 -Comment[tr]=1'den 10'a kadar, örnek >=7 -Comment[uk]=Від 1 до 10, наприклад, >=7 -Comment[x-test]=xx1 to 10, for example >=7xx -Comment[zh_TW]=1 到 10,例如 >=7 -GenericName=Use <, <=, :, >= and >. -GenericName[csb]=Brëkùjë <, <=, :, >= ë >. -GenericName[en_GB]=Use <, <=, :, >= and >. -GenericName[eo]=Uzu <, <=, :, >= kaj >. -GenericName[et]=Kasuta <, <=, :, >= ja >. -GenericName[is]=Notaðu <, <=, :, >= og >. -GenericName[nl]=Gebruik <, <=, :, >= en >. -GenericName[pt]=Use o <, <=, :, >= e o >. -GenericName[pt_BR]=Use o <, <=, :, >= e o >. -GenericName[sv]=Använd <, <=, :, >= och >. -GenericName[tr]=<, <=, :, >= ve > kullanın. -GenericName[uk]=Використовуйте <, <=, :, >= і >. -GenericName[x-test]=xxUse <, <=, :, >= and >.xx -GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 -Completion=rating -Icon=favorites - -[dolphin tag] -#ctx: Tag as in Nepomuk::Tag", "Tag" -Name=Tag -Comment=Tag -Comment[csb]=Znakòwnik -Comment[en_GB]=Tag -Comment[eo]=Marko -Comment[et]=Silt -Comment[gu]=ટેગ -Comment[is]=Merki -Comment[nl]=Tag -Comment[pt]=Marca -Comment[pt_BR]=Etiqueta -Comment[sv]=Etikett -Comment[tr]=Etiket -Comment[uk]=Мітка -Comment[x-test]=xxTagxx -Comment[zh_TW]=標籤 -Completion=tag: -Icon=mail-tagged - -[dolphin title] -#ctx: The title of a song etc. -Name=Title -Completion=title: - -[dolphin filesize] -Name=File size -Name[csb]=Miara lopka -Name[en_GB]=File size -Name[eo]=Dosiergrandeco -Name[et]=Faili suurus -Name[gu]=ફાઇલ કદ -Name[is]=Skráarstærð -Name[nl]=Bestandsgrootte -Name[pt]=Tamanho do ficheiro -Name[pt_BR]=Tamanho do arquivo -Name[sv]=Filstorlek -Name[tr]=Dosya boyutu -Name[uk]=Розмір файла -Name[x-test]=xxFile sizexx -Name[zh_TW]=檔案大小 -Comment=in bytes, for example >1000 -Comment[csb]=w bajtach, na przëmiôr >1000 -Comment[en_GB]=in bytes, for example >1000 -Comment[et]=baitides, näiteks >1000 -Comment[is]=í bætum, til dæmis >1000 -Comment[nl]=in bytes, bijvoorbeeld >1000 -Comment[pt]=em 'bytes', por exemplo > 1000 -Comment[pt_BR]=em bytes, por exemplo, > 1000 -Comment[sv]=i byte, till exempel > 1000 -Comment[tr]=bayt olarak, örnek >1000 -Comment[uk]=у байтах, наприклад, >1000 -Comment[x-test]=xxin bytes, for example >1000xx -Comment[zh_TW]=單位為位元,例如 >1000 -GenericName=Use <, <=, :, >= and >. -GenericName[csb]=Brëkùjë <, <=, :, >= ë >. -GenericName[en_GB]=Use <, <=, :, >= and >. -GenericName[eo]=Uzu <, <=, :, >= kaj >. -GenericName[et]=Kasuta <, <=, :, >= ja >. -GenericName[is]=Notaðu <, <=, :, >= og >. -GenericName[nl]=Gebruik <, <=, :, >= en >. -GenericName[pt]=Use o <, <=, :, >= e o >. -GenericName[pt_BR]=Use o <, <=, :, >= e o >. -GenericName[sv]=Använd <, <=, :, >= och >. -GenericName[tr]=<, <=, :, >= ve > kullanın. -GenericName[uk]=Використовуйте <, <=, :, >= і >. -GenericName[x-test]=xxUse <, <=, :, >= and >.xx -GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 -Completion=contentSize - -[dolphin contentsize] -Name=Content size -Name[csb]=Miara zamkłoscë -Name[en_GB]=Content size -Name[et]=Sisu suurus -Name[gu]=વિગત કદ -Name[is]=Stærð innihalds -Name[nl]=Grootte van de inhoud -Name[pt]=Tamanho do conteúdo -Name[pt_BR]=Tamanho do conteúdo -Name[sv]=Innehållets storlek -Name[tr]=İçerik boyutu -Name[uk]=Розмір вмісту -Name[x-test]=xxContent sizexx -Name[zh_TW]=內容大小 -Comment=in bytes -Comment[csb]=w bajtach -Comment[en_GB]=in bytes -Comment[et]=baitides -Comment[gu]=બાઈટ્સ માં -Comment[is]=í bætum -Comment[nl]=in bytes -Comment[pt]=em 'bytes' -Comment[pt_BR]=em bytes -Comment[sv]=i byte -Comment[tr]=bayt olarak -Comment[uk]=у байтах -Comment[x-test]=xxin bytesxx -Comment[zh_TW]=單位為位元 -GenericName=Use <, <=, :, >= and >. -GenericName[csb]=Brëkùjë <, <=, :, >= ë >. -GenericName[en_GB]=Use <, <=, :, >= and >. -GenericName[eo]=Uzu <, <=, :, >= kaj >. -GenericName[et]=Kasuta <, <=, :, >= ja >. -GenericName[is]=Notaðu <, <=, :, >= og >. -GenericName[nl]=Gebruik <, <=, :, >= en >. -GenericName[pt]=Use o <, <=, :, >= e o >. -GenericName[pt_BR]=Use o <, <=, :, >= e o >. -GenericName[sv]=Använd <, <=, :, >= och >. -GenericName[tr]=<, <=, :, >= ve > kullanın. -GenericName[uk]=Використовуйте <, <=, :, >= і >. -GenericName[x-test]=xxUse <, <=, :, >= and >.xx -GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 -Completion=contentSize - -[dolphin lastmodified] -#ctx: When the resource was last modified -Name=Last modified -Comment=for example >1999-10-10 -Comment[csb]=na przëmiôr >1999-10-10 -Comment[en_GB]=for example >1999-10-10 -Comment[eo]=Ekzemple >1999-10-10 -Comment[et]=näiteks >1999-10-10 -Comment[is]=til dæmis >1999-10-10 -Comment[nl]=bijvoorbeeld >2009-10-10 -Comment[pt]=por exemplo > 1999-10-10 -Comment[pt_BR]=por exemplo, > 1999-10-10 -Comment[sv]=till exempel > 1999-10-10 -Comment[tr]=örnek >1999-10-10 -Comment[uk]=наприклад, >1999-10-10 -Comment[x-test]=xxfor example >1999-10-10xx -Comment[zh_TW]=例如 >1999-10-10 -GenericName=Use <, <=, :, >= and >. -GenericName[csb]=Brëkùjë <, <=, :, >= ë >. -GenericName[en_GB]=Use <, <=, :, >= and >. -GenericName[eo]=Uzu <, <=, :, >= kaj >. -GenericName[et]=Kasuta <, <=, :, >= ja >. -GenericName[is]=Notaðu <, <=, :, >= og >. -GenericName[nl]=Gebruik <, <=, :, >= en >. -GenericName[pt]=Use o <, <=, :, >= e o >. -GenericName[pt_BR]=Use o <, <=, :, >= e o >. -GenericName[sv]=Använd <, <=, :, >= och >. -GenericName[tr]=<, <=, :, >= ve > kullanın. -GenericName[uk]=Використовуйте <, <=, :, >= і >. -GenericName[x-test]=xxUse <, <=, :, >= and >.xx -GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 -Completion=lastModified diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp new file mode 100644 index 000000000..d224575ea --- /dev/null +++ b/src/search/dolphinsearchbox.cpp @@ -0,0 +1,318 @@ +/*************************************************************************** + * Copyright (C) 2009 by Peter Penz * + * Copyright (C) 2009 by Matthias Fuchs * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ +#include "dolphinsearchbox.h" + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_NEPOMUK +#include +#include +#endif + +DolphinSearchCompleter::DolphinSearchCompleter(KLineEdit* linedit) : + QObject(0), + q(linedit), + m_completer(0), + m_completionModel(0), + m_wordStart(-1), + m_wordEnd(-1) +{ + m_completionModel = new QStandardItemModel(this); + +#ifdef HAVE_NEPOMUK + if (!Nepomuk::ResourceManager::instance()->init()) { + //read all currently set tags + //NOTE if the user changes tags elsewhere they won't get updated here + QList tags = Nepomuk::Tag::allTags(); + foreach (const Nepomuk::Tag& tag, tags) { + const QString tagText = tag.label(); + addCompletionItem(tagText, + "tag:\"" + tagText + '\"', + i18nc("Tag as in Nepomuk::Tag", "Tag"), + QString(), + KIcon("mail-tagged")); + } + } +#endif //HAVE_NEPOMUK + + // load the completions stored in the desktop file + KDesktopFile file(KStandardDirs::locate("data", "dolphin/dolphinsearchcommands.desktop")); + foreach (const QString &group, file.groupList()) { + KConfigGroup cg(&file, group); + const QString displayed = cg.readEntry("Name", QString()); + const QString usedForCompletition = cg.readEntry("Completion", QString()); + const QString description = cg.readEntry("Comment", QString()); + const QString toolTip = cg.readEntry("GenericName", QString()); + const QString icon = cg.readEntry("Icon", QString()); + + if (icon.isEmpty()) { + addCompletionItem(displayed, usedForCompletition, description, toolTip); + } else { + addCompletionItem(displayed, usedForCompletition, description, toolTip, KIcon(icon)); + } + } + + m_completionModel->sort(0, Qt::AscendingOrder); + + m_completer = new QCompleter(m_completionModel, this); + m_completer->setWidget(q); + m_completer->setCaseSensitivity(Qt::CaseInsensitive); + QTreeView *view = new QTreeView; + m_completer->setPopup(view); + view->setRootIsDecorated(false); + view->setHeaderHidden(true); + + connect(q, SIGNAL(textEdited(QString)), this, SLOT(slotTextEdited(QString))); + connect(m_completer, SIGNAL(activated(QModelIndex)), this, SLOT(completionActivated(QModelIndex))); + connect(m_completer, SIGNAL(highlighted(QModelIndex)), this, SLOT(highlighted(QModelIndex))); +} + +void DolphinSearchCompleter::addCompletionItem(const QString& displayed, const QString& usedForCompletition, const QString& description, const QString& toolTip, const KIcon& icon) +{ + if (displayed.isEmpty() || usedForCompletition.isEmpty()) { + return; + } + + QList items; + QStandardItem *item = new QStandardItem(); + item->setData(QVariant(displayed), Qt::DisplayRole); + item->setData(QVariant(usedForCompletition), Qt::UserRole); + item->setData(QVariant(toolTip), Qt::ToolTipRole); + items << item; + + item = new QStandardItem(description); + if (!icon.isNull()) { + item->setIcon(icon); + } + item->setData(QVariant(toolTip), Qt::ToolTipRole); + items << item; + + m_completionModel->insertRow(m_completionModel->rowCount(), items); +} + +void DolphinSearchCompleter::findText(int* wordStart, int* wordEnd, QString* newWord, int cursorPos, const QString &input) +{ + --cursorPos;//decrease to get a useful position (not the end of the word e.g.) + + if (!wordStart || !wordEnd) { + return; + } + + *wordStart = -1; + *wordEnd = -1; + + // the word might contain "" and thus maybe spaces + if (input.contains('\"')) { + int tempStart = -1; + int tempEnd = -1; + + do { + tempStart = input.indexOf('\"', tempEnd + 1); + tempEnd = input.indexOf('\"', tempStart + 1); + if ((cursorPos >= tempStart) && (cursorPos <= tempEnd)) { + *wordStart = tempStart; + *wordEnd = tempEnd; + break; + } else if ((tempEnd == -1) && (cursorPos >= tempStart)) { + //one " found, so probably the beginning of the new word + *wordStart = tempStart; + break; + } + } while ((tempStart != -1) && (tempEnd != -1)); + } + + if (*wordEnd > -1) { + *wordEnd = input.indexOf(' ', *wordEnd) - 1; + } else { + *wordEnd = input.indexOf(' ', cursorPos) - 1; + } + if (*wordEnd < 0) { + *wordEnd = input.length() - 1; + } + + if (*wordStart > -1) { + *wordStart = input.lastIndexOf(' ', *wordStart + 1) + 1; + } else { + *wordStart = input.lastIndexOf(' ', cursorPos) + 1; + } + if (*wordStart < 0) { + *wordStart = 0; + } + + + QString word = input.mid(*wordStart, *wordEnd - *wordStart + 1); + + //remove opening braces or negations ('-' = not) at the beginning + while (word.count() && ((word[0] == '(') || (word[0] == '-'))) { + word.remove(0, 1); + ++(*wordStart); + } + + //remove ending braces at the end + while (word.count() && (word[word.count() - 1] == ')')) { + word.remove(word.count() - 1, 1); + --(*wordEnd); + } + + if (newWord) { + *newWord = word; + } +} + +void DolphinSearchCompleter::slotTextEdited(const QString& text) +{ + findText(&m_wordStart, &m_wordEnd, &m_userText, q->cursorPosition(), text); + + if (!m_userText.isEmpty()) { + const int role = m_completer->completionRole(); + + //change the role used for comparison depending on what the user entered + if (m_userText.contains(':') || m_userText.contains('\"')) { + //assume that m_userText contains searchinformation like 'tag:"..."' + if (role != Qt::UserRole) { + m_completer->setCompletionRole(Qt::UserRole); + } + } else if (role != Qt::EditRole) { + m_completer->setCompletionRole(Qt::EditRole); + } + + m_completer->setCompletionPrefix(m_userText); + m_completer->complete(); + } +} + +void DolphinSearchCompleter::highlighted(const QModelIndex& index) +{ + QString text = q->text(); + int wordStart; + int wordEnd; + + findText(&wordStart, &wordEnd, 0, q->cursorPosition(), text); + + QString replace = index.sibling(index.row(), 0).data(Qt::UserRole).toString(); + //show the originally entered text + if (replace.isEmpty()) { + replace = m_userText; + } + + text.replace(wordStart, wordEnd - wordStart + 1, replace); + q->setText(text); + q->setCursorPosition(wordStart + replace.length()); +} + +void DolphinSearchCompleter::activated(const QModelIndex& index) +{ + if ((m_wordStart == -1) || (m_wordStart == -1)) { + return; + } + + const QString replace = index.sibling(index.row(), 0).data(Qt::UserRole).toString(); + QString newText = q->text(); + newText.replace(m_wordStart, m_wordEnd - m_wordStart + 1, replace); + q->setText(newText); +} + +DolphinSearchBox::DolphinSearchBox(QWidget* parent) : + QWidget(parent), + m_searchInput(0), + m_searchButton(0), + m_completer(0) +{ + QHBoxLayout* hLayout = new QHBoxLayout(this); + hLayout->setMargin(0); + hLayout->setSpacing(0); + + m_searchInput = new KLineEdit(this); + m_searchInput->setClearButtonShown(true); + m_searchInput->setMinimumWidth(150); + m_searchInput->setClickMessage(i18nc("@label:textbox", "Search...")); + m_searchInput->installEventFilter(this); + hLayout->addWidget(m_searchInput); + connect(m_searchInput, SIGNAL(textEdited(const QString&)), + this, SLOT(slotTextEdited(const QString&))); + connect(m_searchInput, SIGNAL(returnPressed()), + this, SLOT(emitSearchSignal())); + + m_searchButton = new QToolButton(this); + m_searchButton->setAutoRaise(true); + m_searchButton->setIcon(KIcon("edit-find")); + m_searchButton->setToolTip(i18nc("@info:tooltip", "Click to begin the search")); + hLayout->addWidget(m_searchButton); + connect(m_searchButton, SIGNAL(clicked()), + this, SLOT(emitSearchSignal())); +} + +DolphinSearchBox::~DolphinSearchBox() +{ +} + +bool DolphinSearchBox::event(QEvent* event) +{ + if (event->type() == QEvent::Polish) { + m_searchInput->setFont(KGlobalSettings::generalFont()); + } else if (event->type() == QEvent::KeyPress) { + if (static_cast(event)->key() == Qt::Key_Escape) { + m_searchInput->clear(); + } + } + return QWidget::event(event); +} + +bool DolphinSearchBox::eventFilter(QObject* watched, QEvent* event) +{ + if ((watched == m_searchInput) && (event->type() == QEvent::FocusIn)) { + // Postpone the creation of the search completer until + // the search box is used. This decreases the startup time + // of Dolphin. + Q_ASSERT(m_completer == 0); + m_completer = new DolphinSearchCompleter(m_searchInput); + m_searchInput->removeEventFilter(this); + } + + return QWidget::eventFilter(watched, event); +} + + +void DolphinSearchBox::emitSearchSignal() +{ + emit search(KUrl("nepomuksearch:/" + m_searchInput->text())); +} + +void DolphinSearchBox::slotTextEdited(const QString& text) +{ +} + +#include "dolphinsearchbox.moc" diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h new file mode 100644 index 000000000..93c033bb8 --- /dev/null +++ b/src/search/dolphinsearchbox.h @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2009 by Peter Penz * + * Copyright (C) 2009 by Matthias Fuchs * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ +#ifndef DOLPHINSEARCHBOX_H +#define DOLPHINSEARCHBOX_H + +#include + +#include + +class KLineEdit; +class KUrl; +class QCompleter; +class QModelIndex; +class QStandardItemModel; +class QToolButton; + +/** + * @brief used for completition for the DolphinSearchBox + */ +class DolphinSearchCompleter : public QObject +{ + Q_OBJECT + public: + DolphinSearchCompleter(KLineEdit *linedit); + + public slots: + void highlighted(const QModelIndex& index); + void activated(const QModelIndex& index); + void slotTextEdited(const QString &text); + + private: + void addCompletionItem(const QString& displayed, const QString& usedForCompletition, const QString& description = QString(), const QString& toolTip = QString(), const KIcon& icon = KIcon()); + + void findText(int* wordStart, int* wordEnd, QString* newWord, int cursorPos, const QString &input); + + private: + KLineEdit* q; + QCompleter* m_completer; + QStandardItemModel* m_completionModel; + QString m_userText; + int m_wordStart; + int m_wordEnd; +}; + +/** + * @brief Input box for searching files with Nepomuk. + */ +class DolphinSearchBox : public QWidget +{ + Q_OBJECT + +public: + DolphinSearchBox(QWidget* parent = 0); + virtual ~DolphinSearchBox(); + +protected: + virtual bool event(QEvent* event); + virtual bool eventFilter(QObject* watched, QEvent* event); + +signals: + /** + * Is emitted when the user pressed Return or Enter + * and provides the Nepomuk URL that should be used + * for searching. + */ + void search(const KUrl& url); + +private slots: + void emitSearchSignal(); + void slotTextEdited(const QString& text); + +private: + KLineEdit* m_searchInput; + QToolButton* m_searchButton; + + DolphinSearchCompleter* m_completer; +}; + +#endif diff --git a/src/search/dolphinsearchcommands.desktop b/src/search/dolphinsearchcommands.desktop new file mode 100644 index 000000000..303f8d0cf --- /dev/null +++ b/src/search/dolphinsearchcommands.desktop @@ -0,0 +1,276 @@ +# Name -- what is displayed in the first column +# Comment -- what is displayed in the second column +# Completion -- what is returned as completion item + +[dolphin and] +#ctx: and as in a logic operator to connect search terms +Name=and +Comment=logic operator and +Comment[csb]=logiczny òperatora ë +Comment[en_GB]=logic operator and +Comment[eo]=logika operatoro "kaj" +Comment[et]=Loogiline JA +Comment[is]=rökaðgerðin og +Comment[nl]=logische operator en +Comment[pt]=operador lógico 'e' +Comment[pt_BR]=operador lógico 'e' +Comment[sv]=logisk operator och +Comment[tr]=mantıksal işleç olarak ve +Comment[uk]=булівська дія «ТА» +Comment[x-test]=xxlogic operator andxx +Comment[zh_TW]=邏輯運算上的「且」(and) +Completion=and + +[dolphin or] +#ctx: or as in a logic operator to connect search terms +Name=or +Comment=logic operator or +Comment[csb]=logiczny òperatora abò +Comment[en_GB]=logic operator or +Comment[eo]=logika operatoro "aŭ" +Comment[et]=Loogiline VÕI +Comment[is]=rökaðgerðin eða +Comment[nl]=logische operator of +Comment[pt]=operador lógico 'ou' +Comment[pt_BR]=operador lógico 'ou' +Comment[sv]=logisk operator eller +Comment[tr]=mantıksal işleç olarak veya +Comment[uk]=булівська дія «АБО» +Comment[x-test]=xxlogic operator orxx +Comment[zh_TW]=邏輯運算上的「或」(or) +Completion=or + +[dolphin not] +#ctx: not as in a logic operator to connect search terms +Name=not +Comment=logic operator not +Comment[csb]=logiczny òperatora nié +Comment[en_GB]=logic operator not +Comment[eo]=logika operatoro "ne" +Comment[et]=Loogiline EI +Comment[is]=rökaðgerðin ekki +Comment[nl]=logische operator niet +Comment[pt]=operador lógico 'não' +Comment[pt_BR]=operador lógico 'não' +Comment[sv]=logisk operator inte +Comment[tr]=mantıksal işleç olarak değil +Comment[uk]=булівська дія «НЕ» +Comment[x-test]=xxlogic operator notxx +Comment[zh_TW]=邏輯運算上的「否」(not) +Completion=- + +[dolphin fileExtension] +Name=File extension +Name[csb]=Rozszérzenié lopka +Name[en_GB]=File extension +Name[eo]=Dosier-sufikso +Name[et]=Faililaiend +Name[is]=Skráarending +Name[nl]=Bestandsextensie +Name[pt]=Extensão do ficheiro +Name[pt_BR]=Extensão do arquivo +Name[sv]=Filändelse +Name[tr]=Dosya uzantısı +Name[uk]=Суфікс назви файла +Name[x-test]=xxFile extensionxx +Name[zh_TW]=副檔名 +Comment=for example txt +Comment[csb]=na przëmiôr txt +Comment[en_GB]=for example txt +Comment[eo]=ekzemple "txt" +Comment[et]=näiteks txt +Comment[is]=til dæmis txt +Comment[nl]=bijvoorbeeld txt +Comment[pt]=por exemplo 'txt' +Comment[pt_BR]=por exemplo, 'txt' +Comment[sv]=till exempel txt +Comment[tr]=örneğin txt +Comment[uk]=наприклад, txt +Comment[x-test]=xxfor example txtxx +Comment[zh_TW]=例如 txt +Completion=fileExtension: +Icon=preferences-desktop-filetype-association + +[dolphin rating] +#ctx: rating of nepomuk resources +Name=Rating +#NOTE "=" does not work here, ":" does +Comment=1 to 10, for example >=7 +Comment[csb]=1 do 10, na przëmiôr >=7 +Comment[en_GB]=1 to 10, for example >=7 +Comment[eo]=1 ĝis 10, ekzemple >=7 +Comment[et]=1 kuni 10, näiteks 7 +Comment[is]=1 til 10, til dæmis >=7 +Comment[nl]=1 tot 10, bijvoorbeeld >=7 +Comment[pt]=1 a 10, por exemplo >=7 +Comment[pt_BR]=1 a 10, por exemplo, >=7 +Comment[sv]=1 till 10, till exempel: >=7 +Comment[tr]=1'den 10'a kadar, örnek >=7 +Comment[uk]=Від 1 до 10, наприклад, >=7 +Comment[x-test]=xx1 to 10, for example >=7xx +Comment[zh_TW]=1 到 10,例如 >=7 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=rating +Icon=favorites + +[dolphin tag] +#ctx: Tag as in Nepomuk::Tag", "Tag" +Name=Tag +Comment=Tag +Comment[csb]=Znakòwnik +Comment[en_GB]=Tag +Comment[eo]=Marko +Comment[et]=Silt +Comment[gu]=ટેગ +Comment[is]=Merki +Comment[nl]=Tag +Comment[pt]=Marca +Comment[pt_BR]=Etiqueta +Comment[sv]=Etikett +Comment[tr]=Etiket +Comment[uk]=Мітка +Comment[x-test]=xxTagxx +Comment[zh_TW]=標籤 +Completion=tag: +Icon=mail-tagged + +[dolphin title] +#ctx: The title of a song etc. +Name=Title +Completion=title: + +[dolphin filesize] +Name=File size +Name[csb]=Miara lopka +Name[en_GB]=File size +Name[eo]=Dosiergrandeco +Name[et]=Faili suurus +Name[gu]=ફાઇલ કદ +Name[is]=Skráarstærð +Name[nl]=Bestandsgrootte +Name[pt]=Tamanho do ficheiro +Name[pt_BR]=Tamanho do arquivo +Name[sv]=Filstorlek +Name[tr]=Dosya boyutu +Name[uk]=Розмір файла +Name[x-test]=xxFile sizexx +Name[zh_TW]=檔案大小 +Comment=in bytes, for example >1000 +Comment[csb]=w bajtach, na przëmiôr >1000 +Comment[en_GB]=in bytes, for example >1000 +Comment[et]=baitides, näiteks >1000 +Comment[is]=í bætum, til dæmis >1000 +Comment[nl]=in bytes, bijvoorbeeld >1000 +Comment[pt]=em 'bytes', por exemplo > 1000 +Comment[pt_BR]=em bytes, por exemplo, > 1000 +Comment[sv]=i byte, till exempel > 1000 +Comment[tr]=bayt olarak, örnek >1000 +Comment[uk]=у байтах, наприклад, >1000 +Comment[x-test]=xxin bytes, for example >1000xx +Comment[zh_TW]=單位為位元,例如 >1000 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=contentSize + +[dolphin contentsize] +Name=Content size +Name[csb]=Miara zamkłoscë +Name[en_GB]=Content size +Name[et]=Sisu suurus +Name[gu]=વિગત કદ +Name[is]=Stærð innihalds +Name[nl]=Grootte van de inhoud +Name[pt]=Tamanho do conteúdo +Name[pt_BR]=Tamanho do conteúdo +Name[sv]=Innehållets storlek +Name[tr]=İçerik boyutu +Name[uk]=Розмір вмісту +Name[x-test]=xxContent sizexx +Name[zh_TW]=內容大小 +Comment=in bytes +Comment[csb]=w bajtach +Comment[en_GB]=in bytes +Comment[et]=baitides +Comment[gu]=બાઈટ્સ માં +Comment[is]=í bætum +Comment[nl]=in bytes +Comment[pt]=em 'bytes' +Comment[pt_BR]=em bytes +Comment[sv]=i byte +Comment[tr]=bayt olarak +Comment[uk]=у байтах +Comment[x-test]=xxin bytesxx +Comment[zh_TW]=單位為位元 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=contentSize + +[dolphin lastmodified] +#ctx: When the resource was last modified +Name=Last modified +Comment=for example >1999-10-10 +Comment[csb]=na przëmiôr >1999-10-10 +Comment[en_GB]=for example >1999-10-10 +Comment[eo]=Ekzemple >1999-10-10 +Comment[et]=näiteks >1999-10-10 +Comment[is]=til dæmis >1999-10-10 +Comment[nl]=bijvoorbeeld >2009-10-10 +Comment[pt]=por exemplo > 1999-10-10 +Comment[pt_BR]=por exemplo, > 1999-10-10 +Comment[sv]=till exempel > 1999-10-10 +Comment[tr]=örnek >1999-10-10 +Comment[uk]=наприклад, >1999-10-10 +Comment[x-test]=xxfor example >1999-10-10xx +Comment[zh_TW]=例如 >1999-10-10 +GenericName=Use <, <=, :, >= and >. +GenericName[csb]=Brëkùjë <, <=, :, >= ë >. +GenericName[en_GB]=Use <, <=, :, >= and >. +GenericName[eo]=Uzu <, <=, :, >= kaj >. +GenericName[et]=Kasuta <, <=, :, >= ja >. +GenericName[is]=Notaðu <, <=, :, >= og >. +GenericName[nl]=Gebruik <, <=, :, >= en >. +GenericName[pt]=Use o <, <=, :, >= e o >. +GenericName[pt_BR]=Use o <, <=, :, >= e o >. +GenericName[sv]=Använd <, <=, :, >= och >. +GenericName[tr]=<, <=, :, >= ve > kullanın. +GenericName[uk]=Використовуйте <, <=, :, >= і >. +GenericName[x-test]=xxUse <, <=, :, >= and >.xx +GenericName[zh_TW]=請使用 <, <=, :, >= 與 >。 +Completion=lastModified -- cgit v1.3