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