Skip to content

Commit

Permalink
Library list pinning behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
sgourdas authored and kelson42 committed May 21, 2024
1 parent ba6fee9 commit 3b895c6
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 23 deletions.
25 changes: 10 additions & 15 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(app->getAction(KiwixApp::ToggleFullscreenAction), &QAction::triggered,
this, &MainWindow::toggleFullScreen);
connect(app->getAction(KiwixApp::ToggleReadingListAction), &QAction::toggled,
this, &MainWindow::when_ReadingList_toggled);
this, &MainWindow::readingListToggled);
connect(app->getAction(KiwixApp::AboutAction), &QAction::triggered,
mp_about, &QDialog::show);
connect(app->getAction(KiwixApp::DonateAction), &QAction::triggered,
Expand All @@ -57,12 +57,11 @@ MainWindow::MainWindow(QWidget *parent) :
mp_ui->mainToolBar, &TopWidget::updateBackForwardButtons);
connect(mp_ui->tabBar, &TabBar::tabDisplayed,
this, [=](TabType tabType) {
when_libraryPageDisplayed(tabType == TabType::LibraryTab);
tabChanged(tabType);
});

connect(mp_ui->tabBar, &TabBar::currentTitleChanged,
&(mp_ui->mainToolBar->getSearchBar()), &SearchBar::currentTitleChanged);

// This signal emited more often than the history really updated
// but for now we have no better signal for it.
connect(mp_ui->tabBar, &TabBar::currentTitleChanged,
Expand Down Expand Up @@ -120,8 +119,7 @@ bool MainWindow::eventFilter(QObject* /*object*/, QEvent* event)
return false;
}


void MainWindow::when_ReadingList_toggled(bool state)
void MainWindow::readingListToggled(bool state)
{
if (state) {
mp_ui->sideBar->setCurrentWidget(mp_ui->readinglistbar);
Expand All @@ -132,19 +130,16 @@ void MainWindow::when_ReadingList_toggled(bool state)
}
}

void MainWindow::when_libraryPageDisplayed(bool showed)
void MainWindow::tabChanged(TabType tabType)
{
auto app = KiwixApp::instance();

// When library sidebar appeared, or hidden, reading list is always hidden.
app->getAction(KiwixApp::ToggleReadingListAction)->setChecked(false);

if (showed) {
QAction *readingList = KiwixApp::instance()->getAction(KiwixApp::ToggleReadingListAction);
if (tabType == TabType::SettingsTab) {
mp_ui->sideBar->hide();
} else if(tabType == TabType::LibraryTab) {
mp_ui->sideBar->setCurrentWidget(mp_ui->contentmanagerside);
mp_ui->sideBar->show();
}
else {
mp_ui->sideBar->hide();
} else {
readingListToggled(readingList->isChecked());
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ class MainWindow : public QMainWindow

private slots:
void toggleFullScreen();
void when_ReadingList_toggled(bool state);
void when_libraryPageDisplayed(bool showed);
void tabChanged(TabBar::TabType);
void readingListToggled(bool state);
void hideTabAndTop();
void showTabAndTop();

Expand Down
54 changes: 49 additions & 5 deletions src/readinglistbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,19 @@ ReadingListBar::ReadingListBar(QWidget *parent) :
ui->setupUi(this);
connect(KiwixApp::instance()->getLibrary(), &Library::bookmarksChanged,
this, &ReadingListBar::setupList);
connect(ui->listWidget, &QListWidget::itemActivated,
this, &ReadingListBar::on_itemActivated);
connect(ui->listWidget, &QListWidget::itemClicked,
this, &ReadingListBar::onItemClicked);
connect(ui->listWidget, &QListWidget::itemDoubleClicked,
this, &ReadingListBar::onItemDoubleClicked);
connect(ui->listWidget, &QListWidget::itemPressed,
this, [this](QListWidgetItem* item) {
onItemPressed(item, QGuiApplication::mouseButtons());
});
connect(ui->listWidget, &QListWidget::itemActivated,
this, [this](QListWidgetItem* item) {
onItemActivated(item, QGuiApplication::mouseButtons());
});

setupList();

ui->label->setText(gt("reading-list-title"));
Expand All @@ -25,7 +36,6 @@ ReadingListBar::~ReadingListBar()
delete ui;
}


void ReadingListBar::setupList()
{
auto library = KiwixApp::instance()->getLibrary();
Expand Down Expand Up @@ -60,13 +70,47 @@ void ReadingListBar::setupList()
}
}

void ReadingListBar::on_itemActivated(QListWidgetItem* item)
// Receives single clicks
void ReadingListBar::onItemClicked(QListWidgetItem* item)
{
clickKind = 1;
QTimer::singleShot(QApplication::doubleClickInterval(), [=]() { // Give time for a double click be handled
if (clickKind == 1) {
openUrl(item, false);
}
});
}

// Receives double clicks
void ReadingListBar::onItemDoubleClicked(QListWidgetItem* item)
{
clickKind = 2;
openUrl(item, true);
}

// Receives single and middle click
void ReadingListBar::onItemPressed(QListWidgetItem* item, Qt::MouseButtons buttons)
{
if (buttons & Qt::MiddleButton) {
openUrl(item, true);
}
}

// Receives left clicks and activation key
void ReadingListBar::onItemActivated(QListWidgetItem* item, Qt::MouseButtons buttons)
{
if (!buttons) { // clicks are handled elsewhere, handle only the activation key case
openUrl(item, true);
}
}

void ReadingListBar::openUrl(QListWidgetItem* item, bool newTab)
{
int index = ui->listWidget->row(item);
auto bookmark = KiwixApp::instance()->getLibrary()->getBookmarks(true).at(index);
QUrl url;
url.setScheme("zim");
url.setHost(QString::fromStdString(bookmark.getBookId())+".zim");
url.setPath(QString::fromStdString(bookmark.getUrl()));
KiwixApp::instance()->openUrl(url);
KiwixApp::instance()->openUrl(url, newTab);
}
7 changes: 6 additions & 1 deletion src/readinglistbar.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,14 @@ class ReadingListBar : public QWidget

public slots:
void setupList();
void on_itemActivated(QListWidgetItem *item);
void onItemClicked(QListWidgetItem* item);
void onItemDoubleClicked(QListWidgetItem *item);
void onItemPressed(QListWidgetItem* item, Qt::MouseButtons buttons);
void onItemActivated(QListWidgetItem *item, Qt::MouseButtons buttons);
private:
Ui::readinglistbar *ui;
int clickKind;
void openUrl(QListWidgetItem* item, bool newTab);
};

#endif // READINGLISTBAR_H

0 comments on commit 3b895c6

Please sign in to comment.