mirror of
https://git.wownero.com/wowlet/wowlet.git
synced 2024-08-15 01:03:14 +00:00
Forum post widget showing latest from forum.wownero.com
This commit is contained in:
parent
ac1ed1873a
commit
c02e084dcf
12 changed files with 402 additions and 9 deletions
|
@ -433,7 +433,6 @@ void AppContext::onWSMessage(const QJsonObject &msg) {
|
||||||
QJsonArray crypto_rates = msg.value("data").toArray();
|
QJsonArray crypto_rates = msg.value("data").toArray();
|
||||||
AppContext::prices->cryptoPricesReceived(crypto_rates);
|
AppContext::prices->cryptoPricesReceived(crypto_rates);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(cmd == "fiat_rates") {
|
else if(cmd == "fiat_rates") {
|
||||||
QJsonObject fiat_rates = msg.value("data").toObject();
|
QJsonObject fiat_rates = msg.value("data").toObject();
|
||||||
AppContext::prices->fiatPricesReceived(fiat_rates);
|
AppContext::prices->fiatPricesReceived(fiat_rates);
|
||||||
|
@ -442,17 +441,18 @@ void AppContext::onWSMessage(const QJsonObject &msg) {
|
||||||
QJsonArray reddit_data = msg.value("data").toArray();
|
QJsonArray reddit_data = msg.value("data").toArray();
|
||||||
this->onWSReddit(reddit_data);
|
this->onWSReddit(reddit_data);
|
||||||
}
|
}
|
||||||
|
else if(cmd == "forum") {
|
||||||
|
QJsonArray forum_data = msg.value("data").toArray();
|
||||||
|
this->onWSForum(forum_data);
|
||||||
|
}
|
||||||
else if(cmd == "funding_proposals") {
|
else if(cmd == "funding_proposals") {
|
||||||
auto ccs_data = msg.value("data").toArray();
|
auto ccs_data = msg.value("data").toArray();
|
||||||
this->onWSCCS(ccs_data);
|
this->onWSCCS(ccs_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(cmd == "suchwow") {
|
else if(cmd == "suchwow") {
|
||||||
QJsonArray such_data = msg.value("data").toArray();
|
QJsonArray such_data = msg.value("data").toArray();
|
||||||
emit suchWowUpdated(such_data);
|
emit suchWowUpdated(such_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(cmd == "txFiatHistory") {
|
else if(cmd == "txFiatHistory") {
|
||||||
auto txFiatHistory_data = msg.value("data").toObject();
|
auto txFiatHistory_data = msg.value("data").toObject();
|
||||||
AppContext::txFiatHistory->onWSData(txFiatHistory_data);
|
AppContext::txFiatHistory->onWSData(txFiatHistory_data);
|
||||||
|
@ -507,6 +507,23 @@ void AppContext::onWSNodes(const QJsonArray &nodes) {
|
||||||
this->nodes->onWSNodesReceived(l);
|
this->nodes->onWSNodesReceived(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AppContext::onWSForum(const QJsonArray& forum_data) {
|
||||||
|
QList<QSharedPointer<ForumPost>> l;
|
||||||
|
|
||||||
|
for (auto &&entry: forum_data) {
|
||||||
|
auto obj = entry.toObject();
|
||||||
|
auto forumPost = new ForumPost(
|
||||||
|
obj.value("title").toString(),
|
||||||
|
obj.value("author").toString(),
|
||||||
|
obj.value("permalink").toString(),
|
||||||
|
obj.value("comments").toInt());
|
||||||
|
QSharedPointer<ForumPost> r = QSharedPointer<ForumPost>(forumPost);
|
||||||
|
l.append(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
emit forumUpdated(l);
|
||||||
|
}
|
||||||
|
|
||||||
void AppContext::onWSReddit(const QJsonArray& reddit_data) {
|
void AppContext::onWSReddit(const QJsonArray& reddit_data) {
|
||||||
QList<QSharedPointer<RedditPost>> l;
|
QList<QSharedPointer<RedditPost>> l;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "utils/txfiathistory.h"
|
#include "utils/txfiathistory.h"
|
||||||
#include "utils/WowletSeed.h"
|
#include "utils/WowletSeed.h"
|
||||||
#include "widgets/RedditPost.h"
|
#include "widgets/RedditPost.h"
|
||||||
|
#include "widgets/ForumPost.h"
|
||||||
#include "widgets/CCSEntry.h"
|
#include "widgets/CCSEntry.h"
|
||||||
#include "utils/RestoreHeightLookup.h"
|
#include "utils/RestoreHeightLookup.h"
|
||||||
#include "utils/nodes.h"
|
#include "utils/nodes.h"
|
||||||
|
@ -160,6 +161,7 @@ private slots:
|
||||||
void onWSMessage(const QJsonObject& msg);
|
void onWSMessage(const QJsonObject& msg);
|
||||||
void onWSCCS(const QJsonArray &ccs_data);
|
void onWSCCS(const QJsonArray &ccs_data);
|
||||||
void onWSReddit(const QJsonArray& reddit_data);
|
void onWSReddit(const QJsonArray& reddit_data);
|
||||||
|
void onWSForum(const QJsonArray& forum_data);
|
||||||
|
|
||||||
void onMoneySpent(const QString &txId, quint64 amount);
|
void onMoneySpent(const QString &txId, quint64 amount);
|
||||||
void onMoneyReceived(const QString &txId, quint64 amount);
|
void onMoneyReceived(const QString &txId, quint64 amount);
|
||||||
|
@ -198,6 +200,7 @@ signals:
|
||||||
void wsConnected();
|
void wsConnected();
|
||||||
void wsDisconnected();
|
void wsDisconnected();
|
||||||
void redditUpdated(QList<QSharedPointer<RedditPost>> &posts);
|
void redditUpdated(QList<QSharedPointer<RedditPost>> &posts);
|
||||||
|
void forumUpdated(QList<QSharedPointer<ForumPost>> &posts);
|
||||||
void nodesUpdated(QList<QSharedPointer<WowletNode>> &nodes);
|
void nodesUpdated(QList<QSharedPointer<WowletNode>> &nodes);
|
||||||
void ccsUpdated(QList<QSharedPointer<CCSEntry>> &entries);
|
void ccsUpdated(QList<QSharedPointer<CCSEntry>> &entries);
|
||||||
void suchWowUpdated(const QJsonArray &such_data);
|
void suchWowUpdated(const QJsonArray &such_data);
|
||||||
|
|
|
@ -182,6 +182,7 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
||||||
connect(ui->ccsWidget, &CCSWidget::selected, this, &MainWindow::showSendScreen);
|
connect(ui->ccsWidget, &CCSWidget::selected, this, &MainWindow::showSendScreen);
|
||||||
connect(m_ctx, &AppContext::ccsUpdated, ui->ccsWidget->model(), &CCSModel::updateEntries);
|
connect(m_ctx, &AppContext::ccsUpdated, ui->ccsWidget->model(), &CCSModel::updateEntries);
|
||||||
connect(m_ctx, &AppContext::redditUpdated, ui->redditWidget->model(), &RedditModel::updatePosts);
|
connect(m_ctx, &AppContext::redditUpdated, ui->redditWidget->model(), &RedditModel::updatePosts);
|
||||||
|
connect(m_ctx, &AppContext::forumUpdated, ui->forumWidget->model(), &ForumModel::updatePosts);
|
||||||
connect(m_ctx, &AppContext::suchWowUpdated, ui->suchWowWidget, &SuchWowWidget::onWS);
|
connect(m_ctx, &AppContext::suchWowUpdated, ui->suchWowWidget, &SuchWowWidget::onWS);
|
||||||
connect(ui->suchWowWidget, &SuchWowWidget::donate, this, &MainWindow::suchDonate);
|
connect(ui->suchWowWidget, &SuchWowWidget::donate, this, &MainWindow::suchDonate);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "calcwindow.h"
|
#include "calcwindow.h"
|
||||||
#include "widgets/ccswidget.h"
|
#include "widgets/ccswidget.h"
|
||||||
#include "widgets/redditwidget.h"
|
#include "widgets/redditwidget.h"
|
||||||
|
#include "widgets/forumwidget.h"
|
||||||
#include "widgets/tickerwidget.h"
|
#include "widgets/tickerwidget.h"
|
||||||
#include "widgets/xmrigwidget.h"
|
#include "widgets/xmrigwidget.h"
|
||||||
#include "utils/networking.h"
|
#include "utils/networking.h"
|
||||||
|
@ -83,8 +84,10 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TabsHome {
|
enum TabsHome {
|
||||||
CCS,
|
FORUM,
|
||||||
REDDIT
|
REDDIT,
|
||||||
|
SUCHWOW,
|
||||||
|
WFS
|
||||||
};
|
};
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
|
@ -101,9 +101,31 @@
|
||||||
<property name="documentMode">
|
<property name="documentMode">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<widget class="QWidget" name="tab_4">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Forum</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="ForumWidget" name="forumWidget" native="true"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QWidget" name="tab_2">
|
<widget class="QWidget" name="tab_2">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>/r/Wownero</string>
|
<string>Reddit</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
|
@ -326,7 +348,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1156</width>
|
<width>1156</width>
|
||||||
<height>20</height>
|
<height>22</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
|
@ -755,6 +777,12 @@
|
||||||
<header>widgets/suchwowwidget.h</header>
|
<header>widgets/suchwowwidget.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>ForumWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>widgets/forumwidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="assets.qrc"/>
|
<include location="assets.qrc"/>
|
||||||
|
|
104
src/model/ForumModel.cpp
Normal file
104
src/model/ForumModel.cpp
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#include "ForumModel.h"
|
||||||
|
|
||||||
|
ForumModel::ForumModel(QObject *parent)
|
||||||
|
: QAbstractTableModel(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ForumModel::clear() {
|
||||||
|
beginResetModel();
|
||||||
|
|
||||||
|
m_posts.clear();
|
||||||
|
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ForumModel::updatePosts(const QList<QSharedPointer<ForumPost>>& posts) {
|
||||||
|
beginResetModel();
|
||||||
|
|
||||||
|
m_posts.clear();
|
||||||
|
for (const auto& post : posts) {
|
||||||
|
m_posts.push_back(post);
|
||||||
|
}
|
||||||
|
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ForumModel::rowCount(const QModelIndex &parent) const{
|
||||||
|
if (parent.isValid()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return m_posts.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ForumModel::columnCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
if (parent.isValid()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return ModelColumn::COUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant ForumModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (!index.isValid() || index.row() < 0 || index.row() >= m_posts.count())
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
QSharedPointer<ForumPost> post = m_posts.at(index.row());
|
||||||
|
|
||||||
|
if(role == Qt::DisplayRole) {
|
||||||
|
switch(index.column()) {
|
||||||
|
case Title:
|
||||||
|
return post->title;
|
||||||
|
case Author:
|
||||||
|
return post->author;
|
||||||
|
case Comments:
|
||||||
|
return QString::number(post->comments);
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (role == Qt::TextAlignmentRole) {
|
||||||
|
switch(index.column()) {
|
||||||
|
case Comments:
|
||||||
|
return Qt::AlignRight;
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant ForumModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if (role != Qt::DisplayRole) {
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
if (orientation == Qt::Horizontal)
|
||||||
|
{
|
||||||
|
switch(section) {
|
||||||
|
case Title:
|
||||||
|
return QString("Forum Post");
|
||||||
|
case Author:
|
||||||
|
return QString("Author");
|
||||||
|
case Comments:
|
||||||
|
return QString("Comments");
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSharedPointer<ForumPost> ForumModel::post(int row) {
|
||||||
|
if (row < 0 || row >= m_posts.size()) {
|
||||||
|
qCritical("%s: no forum post for index %d", __FUNCTION__, row);
|
||||||
|
return QSharedPointer<ForumPost>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_posts.at(row);
|
||||||
|
}
|
41
src/model/ForumModel.h
Normal file
41
src/model/ForumModel.h
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#ifndef WOWLET_FORUMMODEL_H
|
||||||
|
#define WOWLET_FORUMMODEL_H
|
||||||
|
|
||||||
|
#include <QAbstractTableModel>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
|
||||||
|
#include "widgets/ForumPost.h"
|
||||||
|
|
||||||
|
class ForumModel : public QAbstractTableModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum ModelColumn
|
||||||
|
{
|
||||||
|
Title = 0,
|
||||||
|
Author,
|
||||||
|
Comments,
|
||||||
|
COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit ForumModel(QObject *parent);
|
||||||
|
|
||||||
|
int rowCount(const QModelIndex &parent) const override;
|
||||||
|
int columnCount(const QModelIndex &parent) const override;
|
||||||
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
void updatePosts(const QList<QSharedPointer<ForumPost>>& posts);
|
||||||
|
|
||||||
|
QSharedPointer<ForumPost> post(int row);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<QSharedPointer<ForumPost>> m_posts;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //WOWLET_FORUMMODEL_H
|
|
@ -22,7 +22,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
|
||||||
{Config::warnOnStagenet,{QS("warnOnStagenet"), true}},
|
{Config::warnOnStagenet,{QS("warnOnStagenet"), true}},
|
||||||
{Config::warnOnTestnet,{QS("warnOnTestnet"), true}},
|
{Config::warnOnTestnet,{QS("warnOnTestnet"), true}},
|
||||||
{Config::warnOnAlpha,{QS("warnOnAlpha"), true}},
|
{Config::warnOnAlpha,{QS("warnOnAlpha"), true}},
|
||||||
{Config::homeWidget,{QS("homeWidget"), "ccs"}},
|
{Config::homeWidget,{QS("homeWidget"), 0}},
|
||||||
{Config::donateBeg,{QS("donateBeg"), 1}},
|
{Config::donateBeg,{QS("donateBeg"), 1}},
|
||||||
{Config::skin,{QS("skin"), "light"}},
|
{Config::skin,{QS("skin"), "light"}},
|
||||||
{Config::openVRSkin,{QS("openVRSkin"), "default"}},
|
{Config::openVRSkin,{QS("openVRSkin"), "default"}},
|
||||||
|
|
19
src/widgets/ForumPost.h
Normal file
19
src/widgets/ForumPost.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#ifndef WOWLET_FORUMPOST_H
|
||||||
|
#define WOWLET_FORUMPOST_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
struct ForumPost {
|
||||||
|
ForumPost(const QString &title, const QString &author, const QString &permalink, int comments)
|
||||||
|
: title(title), author(author), permalink(permalink), comments(comments){};
|
||||||
|
|
||||||
|
QString title;
|
||||||
|
QString author;
|
||||||
|
QString permalink;
|
||||||
|
int comments;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //WOWLET_FORUMPOST_H
|
74
src/widgets/forumwidget.cpp
Normal file
74
src/widgets/forumwidget.cpp
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
#include <QTableWidget>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
|
||||||
|
#include "model/ForumModel.h"
|
||||||
|
#include "forumwidget.h"
|
||||||
|
#include "ui_forumwidget.h"
|
||||||
|
#include "utils/utils.h"
|
||||||
|
#include "utils/config.h"
|
||||||
|
|
||||||
|
ForumWidget::ForumWidget(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::ForumWidget),
|
||||||
|
m_model(new ForumModel(this)),
|
||||||
|
m_contextMenu(new QMenu(this))
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->tableView->setModel(m_model);
|
||||||
|
this->setupTable();
|
||||||
|
|
||||||
|
m_contextMenu->addAction("View thread", this, &ForumWidget::linkClicked);
|
||||||
|
m_contextMenu->addAction("Copy link", this, &ForumWidget::copyUrl);
|
||||||
|
connect(ui->tableView, &QHeaderView::customContextMenuRequested, this, &ForumWidget::showContextMenu);
|
||||||
|
|
||||||
|
connect(ui->tableView, &QTableView::doubleClicked, this, &ForumWidget::linkClicked);
|
||||||
|
|
||||||
|
ui->tableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
|
}
|
||||||
|
|
||||||
|
ForumModel* ForumWidget::model() {
|
||||||
|
return m_model;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ForumWidget::linkClicked() {
|
||||||
|
QModelIndex index = ui->tableView->currentIndex();
|
||||||
|
auto post = m_model->post(index.row());
|
||||||
|
|
||||||
|
if (post)
|
||||||
|
Utils::externalLinkWarning(this, post->permalink);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ForumWidget::copyUrl() {
|
||||||
|
QModelIndex index = ui->tableView->currentIndex();
|
||||||
|
auto post = m_model->post(index.row());
|
||||||
|
|
||||||
|
if (post) {
|
||||||
|
Utils::copyToClipboard(post->permalink);
|
||||||
|
emit setStatusText("Link copied to clipboard", true, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ForumWidget::setupTable() {
|
||||||
|
ui->tableView->verticalHeader()->setVisible(false);
|
||||||
|
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
|
|
||||||
|
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
|
ui->tableView->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::Stretch);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ForumWidget::showContextMenu(const QPoint &pos) {
|
||||||
|
QModelIndex index = ui->tableView->indexAt(pos);
|
||||||
|
if (!index.isValid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_contextMenu->exec(ui->tableView->viewport()->mapToGlobal(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
ForumWidget::~ForumWidget() {
|
||||||
|
delete ui;
|
||||||
|
}
|
42
src/widgets/forumwidget.h
Normal file
42
src/widgets/forumwidget.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
// Copyright (c) 2020-2021, The Monero Project.
|
||||||
|
|
||||||
|
#ifndef FORUMWIDGET_H
|
||||||
|
#define FORUMWIDGET_H
|
||||||
|
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QItemSelection>
|
||||||
|
|
||||||
|
#include "model/ForumModel.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class ForumWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
class ForumWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ForumWidget(QWidget *parent = nullptr);
|
||||||
|
~ForumWidget();
|
||||||
|
ForumModel* model();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void linkClicked();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void setStatusText(const QString &msg, bool override, int timeout);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupTable();
|
||||||
|
void showContextMenu(const QPoint &pos);
|
||||||
|
void copyUrl();
|
||||||
|
|
||||||
|
Ui::ForumWidget *ui;
|
||||||
|
ForumModel* const m_model;
|
||||||
|
QMenu *m_contextMenu;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FORUMWIDGET_H
|
61
src/widgets/forumwidget.ui
Normal file
61
src/widgets/forumwidget.ui
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ForumWidget</class>
|
||||||
|
<widget class="QWidget" name="ForumWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>492</width>
|
||||||
|
<height>409</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QTableView" name="tableView">
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::SingleSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="selectionBehavior">
|
||||||
|
<enum>QAbstractItemView::SelectRows</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="horizontalHeaderStretchLastSection">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
<slots>
|
||||||
|
<slot>linkClicked()</slot>
|
||||||
|
</slots>
|
||||||
|
</ui>
|
Loading…
Reference in a new issue