aboutsummaryrefslogtreecommitdiffstats
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp208
1 files changed, 36 insertions, 172 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 04182ec..023119f 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1,18 +1,13 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "src/archive/base_archive.h"
-#include "src/finddialog.h"
-#include "src/list_item.h"
#include "src/command_line.h"
#include "src/settingsdialog.h"
-#include "src/net/instance.h"
+#include "src/widgets/tab_activity_list.h"
#include <QFileDialog>
#include <QInputDialog>
#include <QMessageBox>
-#include <QRandomGenerator>
-#include <QClipboard>
-#include <QMimeData>
#include <QtConcurrent/QtConcurrent>
MainWindow::MainWindow(QWidget *parent)
@@ -20,11 +15,7 @@ MainWindow::MainWindow(QWidget *parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
- status_info_widget = new StatusInfoWidget(this);
- ui->gridLayout->addWidget(status_info_widget, 1, 1);
- connect(ui->buttonCopy, &QPushButton::clicked, ui->actionCopy_status, &QAction::trigger);
- connect(ui->buttonRandom, &QPushButton::clicked, ui->actionRandom_status, &QAction::trigger);
- connect(ui->buttonSearch, &QPushButton::clicked, ui->actionFind, &QAction::trigger);
+ create_initial_tabs();
connect(&archive_thread_watcher, &QFutureWatcher<Archive::InitError>::finished, this, &MainWindow::archive_thread_watcher_done);
}
@@ -33,6 +24,35 @@ MainWindow::~MainWindow()
delete ui;
}
+void MainWindow::create_initial_tabs() {
+ activity_list_tab = new TabActivityList(&data_archive);
+ ui->tabWidget->addTab(activity_list_tab, tr("Activity List"));
+ activity_list_tab->view_actions = {
+ .actionAll_toots = ui->actionAll_toots,
+ .actionPublic_toots = ui->actionPublic_toots,
+ .actionUnlisted_toots = ui->actionUnlisted_toots,
+ .actionPrivate_toots = ui->actionPrivate_toots,
+ .actionDirect_messages = ui->actionDirect_messages,
+ .actionOnly_with_attachment = ui->actionOnly_with_attachment
+ };
+
+ connect(ui->actionAll_toots, &QAction::triggered, activity_list_tab, &TabActivityList::actionAll_toots_triggered);
+ connect(ui->actionPublic_toots, &QAction::triggered, activity_list_tab, &TabActivityList::actionPublic_toots_triggered);
+ connect(ui->actionUnlisted_toots, &QAction::triggered, activity_list_tab, &TabActivityList::actionUnlisted_toots_triggered);
+ connect(ui->actionPrivate_toots, &QAction::triggered, activity_list_tab, &TabActivityList::actionPrivate_toots_triggered);
+ connect(ui->actionDirect_messages, &QAction::triggered, activity_list_tab, &TabActivityList::actionDirect_messages_triggered);
+ connect(ui->actionOnly_with_attachment, &QAction::triggered, activity_list_tab, &TabActivityList::actionOnly_with_attachment_triggered);
+ connect(ui->actionReblogs, &QAction::triggered, activity_list_tab, &TabActivityList::actionReblogs_triggered);
+ connect(ui->actionRandom_status, &QAction::triggered, activity_list_tab, &TabActivityList::on_buttonRandom_clicked);
+ connect(ui->actionCopy_status, &QAction::triggered, activity_list_tab, &TabActivityList::on_buttonCopy_clicked);
+ connect(ui->actionFind, &QAction::triggered, activity_list_tab, &TabActivityList::on_buttonSearch_clicked);
+ connect(ui->actionOpen_URL, &QAction::triggered, activity_list_tab, &TabActivityList::actionOpen_URL_triggered);
+ connect(ui->menuView, &QMenu::aboutToHide, activity_list_tab, &TabActivityList::menuView_aboutToHide);
+ connect(this, &MainWindow::new_archive_opened, activity_list_tab, &TabActivityList::relist_statuses);
+
+ // TODO: Add the "+" tab for opening new tabs
+}
+
void MainWindow::act_command_line(CommandLineParsedOptions &options, QCommandLineParser &parser) {
switch (options.result) {
case CommandLineError:
@@ -86,159 +106,6 @@ void MainWindow::on_actionAbout_triggered(bool checked) {
QMessageBox::information(this, "title", "text");
}
-void MainWindow::on_listWidget_itemActivated(QListWidgetItem *item) {
- StatusListItem* status = dynamic_cast<StatusListItem*>(item);
- if (status != nullptr) {
- status_info_widget->show_list_item(status);
- }
-}
-
-void MainWindow::on_actionRandom_status_triggered(bool checked) {
- if (data_archive == nullptr) return; // No archive open, avoids crashing
-
- int index = QRandomGenerator::global()->bounded(ui->listWidget->count());
- QListWidgetItem* item = ui->listWidget->item(index);
- on_listWidget_itemActivated(item);
- ui->listWidget->setCurrentItem(item);
-}
-
-void MainWindow::on_actionCopy_status_triggered(bool checked) {
- if (data_archive == nullptr or ui->listWidget->selectedItems().isEmpty()) return;
-
- StatusListItem* item = dynamic_cast<StatusListItem*>(ui->listWidget->selectedItems()[0]);
- if (item != nullptr) {
- QString status_text = data_archive->get_html_status_text(item->get_status_index());
- QMimeData* clipboard_data = new QMimeData;
- clipboard_data->setHtml(status_text);
- QGuiApplication::clipboard()->setMimeData(clipboard_data);
- }
-}
-
-void MainWindow::on_actionFind_triggered(bool checked) {
- if (!find_dialog) {
- find_dialog = new FindDialog(this);
- find_dialog->set_qlist_widget(ui->listWidget);
- connect(find_dialog, &FindDialog::item_selected, this, &MainWindow::select_list_item);
- connect(this, &MainWindow::search_text_changed, find_dialog, &FindDialog::set_search_text);
- connect(find_dialog, &FindDialog::search_text_changed, this, &MainWindow::set_search_text);
-
- if (not ui->textInputSearch->text().isEmpty())
- emit search_text_changed(ui->textInputSearch->text(), true);
- }
-
- find_dialog->show();
- find_dialog->raise();
- find_dialog->activateWindow();
-}
-
-void MainWindow::select_list_item(QListWidgetItem* item) {
- on_listWidget_itemActivated(item);
-}
-
-void MainWindow::on_textInputSearch_textEdited(const QString &text) {
- emit search_text_changed(text);
-}
-
-void MainWindow::set_search_text(const QString &text) {
- ui->textInputSearch->setText(text);
-}
-
-void MainWindow::on_actionOpen_URL_triggered(bool checked) {
- bool ok;
- QString url = QInputDialog::getText(this, tr("Open status from URL"), tr("Status URL:"), QLineEdit::Normal, "https://…", &ok);
-
- // TODO: Move all of this to another thread
- // TODO: Reuse the Instance object
- // Really hacky code but works as a PoC and allows testing
- if (ok and not url.isEmpty()) {
- Instance* instance = Instance::create_instance();
- APPost* post = instance->get_post_from_url(url);
- // Activity will be freed by StatusInfoWidget
- APActivity* activity = new APActivity({.object = post});
- status_info_widget->do_process_activity(activity);
- delete instance; instance = nullptr;
- } else return;
-}
-
-void MainWindow::relist_statuses() {
- if (data_archive) {
- ui->listWidget->clear();
- data_archive->update_status_list(view_filters, ui->listWidget);
- view_filters_changed = false;
- }
-}
-
-// Function used to reset filters when we have detected that the "All toots" toggle has been toggled on or shouldn't be toggled anymore
-void MainWindow::reset_view_filters() {
- if (ui->actionAll_toots->isChecked())
- view_filters = {true, true, true, true, view_filters.includeReblogs, view_filters.onlyWithAttachment};
- else
- view_filters = {false, false, false, false, view_filters.includeReblogs, view_filters.onlyWithAttachment};
-}
-
-void MainWindow::on_actionAll_toots_triggered(bool checked) {
- ui->actionAll_toots->setChecked(true);
- ui->actionPublic_toots->setChecked(false);
- ui->actionUnlisted_toots->setChecked(false);
- ui->actionPrivate_toots->setChecked(false);
- ui->actionDirect_messages->setChecked(false);
- ui->actionOnly_with_attachment->setChecked(false);
-
- reset_view_filters();
- relist_statuses();
-}
-
-void MainWindow::on_actionPublic_toots_triggered(bool checked) {
- if (ui->actionAll_toots->isChecked()) {
- ui->actionAll_toots->setChecked(false);
- reset_view_filters();
- }
- view_filters.includePublic = checked;
- view_filters_changed = true;
-}
-
-void MainWindow::on_actionUnlisted_toots_triggered(bool checked) {
- if (ui->actionAll_toots->isChecked()) {
- ui->actionAll_toots->setChecked(false);
- reset_view_filters();
- }
- view_filters.includeUnlisted = checked;
- view_filters_changed = true;
-}
-
-void MainWindow::on_actionPrivate_toots_triggered(bool checked) {
- if (ui->actionAll_toots->isChecked()) {
- ui->actionAll_toots->setChecked(false);
- reset_view_filters();
- }
- view_filters.includePrivate = checked;
- view_filters_changed = true;
-}
-
-void MainWindow::on_actionDirect_messages_triggered(bool checked) {
- if (ui->actionAll_toots->isChecked()) {
- ui->actionAll_toots->setChecked(false);
- reset_view_filters();
- }
- view_filters.includeDirect = checked;
- view_filters_changed = true;
-}
-
-void MainWindow::on_actionOnly_with_attachment_triggered(bool checked) {
- view_filters.onlyWithAttachment = checked;
- view_filters_changed = true;
-}
-
-void MainWindow::on_actionReblogs_triggered(bool checked) {
- view_filters.includeReblogs = checked;
- view_filters_changed = true;
-}
-
-void MainWindow::on_menuView_aboutToHide() {
- if (view_filters_changed)
- relist_statuses();
-}
-
void MainWindow::open_file(const QString &filename) {
if (data_archive) {
delete data_archive;
@@ -247,6 +114,8 @@ void MainWindow::open_file(const QString &filename) {
open_file_filename = filename;
+ // BUG: the overwritten cursor seems to get "lost" and revert in moc_mainwindow.cpp (after the end of the function we're in) when opening a file through a file dialog.
+ // The cursor behaves properly when opening a file throught the command line.
QApplication::setOverrideCursor(Qt::WaitCursor);
data_archive = Archive::create_archive(ArchiveType::MASTODON, filename);
@@ -275,18 +144,13 @@ void MainWindow::finish_open_file(const Archive::InitError& parse_error) {
break;
}
- ui->listWidget->clear();
-
if (parse_error == Archive::NoError) {
- data_archive->update_status_list(view_filters, ui->listWidget);
+ emit new_archive_opened();
}
-
- QApplication::restoreOverrideCursor();
+ // The cursor is restored in TabActivityList::relist_statuses()
}
void MainWindow::archive_thread_watcher_done() {
Archive::InitError result = archive_thread_watcher.result();
-
- if (result)
- finish_open_file(result);
+ finish_open_file(result);
}