aboutsummaryrefslogtreecommitdiffstats
path: root/src/widgets/status_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/status_info.h')
-rw-r--r--src/widgets/status_info.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/widgets/status_info.h b/src/widgets/status_info.h
new file mode 100644
index 0000000..988f930
--- /dev/null
+++ b/src/widgets/status_info.h
@@ -0,0 +1,56 @@
+#pragma once
+#include <QWidget>
+#include <QLocale>
+#include <QThread>
+#include "./ui_status_info.h"
+#include "src/activitypub/apactivity.h"
+#include "src/activitypub/apbase.h"
+#include "src/list_item.h"
+
+class StatusInfoWidgetWorker : public QObject {
+ Q_OBJECT
+
+public slots:
+ void process_item(StatusListItem* item);
+ void process_activity(APActivity* activity);
+ void set_text_zone_width(int width) {render_info.text_zone_width = width;}
+
+signals:
+ void itemProcessed(const QString &html, APActivity* activity = nullptr);
+
+private:
+ QLocale locale_context;
+ HtmlRenderDetails render_info = {0, &locale_context};
+};
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class StatusInfo; }
+QT_END_NAMESPACE
+
+class StatusInfoWidget : public QWidget {
+ Q_OBJECT
+
+public:
+ StatusInfoWidget(QWidget *parent = nullptr);
+ ~StatusInfoWidget();
+
+ void resizeEvent(QResizeEvent* event);
+
+public slots:
+ void show_list_item(StatusListItem* status); // Call from GUI thread
+ void postProcess(const QString &html, APActivity* activity);
+
+signals:
+ // These signals are called privetely by StatusInfoWidget
+ void do_process_item(StatusListItem* item);
+ void do_process_activity(APActivity* activity);
+
+private:
+ Ui::StatusInfo* ui;
+ QThread worker_thread;
+ StatusInfoWidgetWorker worker;
+
+ // Used for determining if we are dealing with a new list item or not
+ StatusListItem* displayed_item = nullptr;
+ APActivity* displayed_activity = nullptr;
+};