diff --git a/resources/css/style.css b/resources/css/style.css index 30d4074..9941d6b 100644 --- a/resources/css/style.css +++ b/resources/css/style.css @@ -214,16 +214,19 @@ QTabBar::close-button { show-decoration-selected: 0; } +#categorySelector QScrollBar, #languageSelector QScrollBar { width: 5px; border: none; outline: none; } +#categorySelector QScrollBar::handle, #languageSelector QScrollBar::handle { background-color: grey; } +#categorySelector::item:selected, #languageSelector::item:selected { background-color: white; color: black; diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 30aa0bb..913e8e6 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -215,6 +215,12 @@ void ContentManager::setCurrentLanguage(QString language) emit(remoteParamsChanged()); } +void ContentManager::setCurrentCategoryFilter(QString category) +{ + m_categoryFilter = category.toLower(); + emit(remoteParamsChanged()); +} + #define CATALOG_HOST "library.kiwix.org" #define CATALOG_PORT 80 #define CATALOG_URL "library.kiwix.org" @@ -224,6 +230,9 @@ void ContentManager::updateRemoteLibrary() { query.addQueryItem("lang", m_currentLanguage); } query.addQueryItem("count", QString::number(0)); + if (m_categoryFilter != "all") { + query.addQueryItem("tag", m_categoryFilter); + } QUrl url; url.setScheme("http"); url.setHost(CATALOG_HOST); diff --git a/src/contentmanager.h b/src/contentmanager.h index 47111d9..073d3e8 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -23,6 +23,8 @@ public: void setLocal(bool local); QStringList getDownloadIds(); void setCurrentLanguage(QString language); + void setCurrentCategoryFilter(QString category); + private: Library* mp_library; kiwix::Library m_remoteLibrary; @@ -31,6 +33,7 @@ private: bool m_local = true; QString m_currentLanguage; QString m_searchQuery; + QString m_categoryFilter = "all"; QStringList getBookIds(); diff --git a/src/contentmanagerside.cpp b/src/contentmanagerside.cpp index 71f8625..fb7f845 100644 --- a/src/contentmanagerside.cpp +++ b/src/contentmanagerside.cpp @@ -21,10 +21,15 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) : this, [=](bool checked) { mp_ui->localFileButton->setStyleSheet( checked ?"*{font-weight: bold}" : "");}); mp_ui->localFileButton->setStyleSheet("*{font-weight: bold}"); + mp_languageButton = mp_ui->languageButton; mp_languageSelector = mp_ui->languageSelector; connect(mp_languageButton, &QCheckBox::toggled, this, [=](bool checked) { mp_languageSelector->setHidden(!checked); }); mp_languageSelector->setHidden(true); + mp_categoryButton = mp_ui->categoryButton; + mp_categorySelector = mp_ui->categorySelector; + connect(mp_categoryButton, &QCheckBox::toggled, this, [=](bool checked) { mp_categorySelector->setHidden(!checked); }); + mp_categorySelector->setHidden(true); for (auto lang: @@ -198,12 +203,43 @@ ContentManagerSide::ContentManagerSide(QWidget *parent) : } } + for (auto category: { + "All", + "Gutenberg", + "Other", + "Phet", + "Psiram", + "Stack_exchange", + "Ted", + "Vikidia", + "Wikibooks", + "Wikinews", + "Wikipedia", + "Wikiquote", + "Wikisource", + "Wikispecies", + "Wikiversity", + "Wikivoyage", + "Wiktionary" + }) + { + auto c = QString(category); + auto item = new KListWidgetItem(c); + mp_categorySelector->addItem(item); + if (c == "All") + { + item->setSelected(true); + } + } + } ContentManagerSide::~ContentManagerSide() { delete mp_ui; } + + void ContentManagerSide::setContentManager(ContentManager *contentManager) { mp_contentManager = contentManager; @@ -217,5 +253,13 @@ void ContentManagerSide::setContentManager(ContentManager *contentManager) return; } auto locale = QLocale(QLocale::Language(item->data(Qt::UserRole).toInt())); - mp_contentManager->setCurrentLanguage(locale.name().split("_").at(0));}); + mp_contentManager->setCurrentLanguage(locale.name().split("_").at(0)); + }); + connect(mp_categorySelector, &QListWidget::itemSelectionChanged, + this, [=]() { + auto item = mp_categorySelector->selectedItems().at(0); + if (!item) return; + auto category = item->text(); + mp_contentManager->setCurrentCategoryFilter(category); + }); } diff --git a/src/contentmanagerside.h b/src/contentmanagerside.h index b56115c..9cfd911 100644 --- a/src/contentmanagerside.h +++ b/src/contentmanagerside.h @@ -25,6 +25,8 @@ private: ContentManager* mp_contentManager; QCheckBox* mp_languageButton; QListWidget* mp_languageSelector; + QCheckBox* mp_categoryButton; + QListWidget* mp_categorySelector; }; #endif // CONTENTMANAGERSIDE_H diff --git a/src/contentmanagerside.ui b/src/contentmanagerside.ui index 53954c7..74d705f 100644 --- a/src/contentmanagerside.ui +++ b/src/contentmanagerside.ui @@ -43,7 +43,7 @@ true - + 0 @@ -94,9 +94,6 @@ 1 - - ArrowCursor - QFrame::NoFrame @@ -115,24 +112,43 @@ QAbstractScrollArea::AdjustToContents - - QAbstractItemView::SelectItems - - - QAbstractItemView::ScrollPerPixel - - false + true Browse By Category + + + + + 0 + 1 + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustToContents + + + diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 988cbff..61621f0 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 836 - 519 + 1024 + 576