Baseline for wino-mail-dtkqt UI migration
This commit is contained in:
@@ -59,6 +59,12 @@ void MailListView::setupUI() {
|
||||
m_tableView->setModel(m_proxyModel);
|
||||
|
||||
connect(m_tableView, &QTableView::clicked, this, &MailListView::onRowSelected);
|
||||
connect(m_tableView, &QTableView::doubleClicked, this, [this](const QModelIndex &index) {
|
||||
if (!index.isValid()) return;
|
||||
QModelIndex sourceIndex = m_proxyModel->mapToSource(index);
|
||||
int mailId = sourceIndex.data(EmailListModel::IdRole).toInt();
|
||||
emit emailOpenRequested(mailId);
|
||||
});
|
||||
|
||||
layout->addWidget(m_tableView);
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ public:
|
||||
|
||||
signals:
|
||||
void emailSelected(int mailId);
|
||||
void emailOpenRequested(int mailId);
|
||||
void composeRequested();
|
||||
|
||||
private slots:
|
||||
|
||||
@@ -164,12 +164,21 @@ void MainMainWindow::setupMailPage() {
|
||||
m_mailListView = new MailListView();
|
||||
connect(m_mailListView, &MailListView::emailSelected, this, &MainMainWindow::onEmailSelected);
|
||||
connect(m_mailListView, &MailListView::composeRequested, this, &MainMainWindow::onComposeRequested);
|
||||
connect(m_mailListView, &MailListView::emailOpenRequested, this, [this](int mailId) {
|
||||
openMailInIndependentWindow(mailId);
|
||||
});
|
||||
m_folderSplitter->addWidget(m_mailListView);
|
||||
|
||||
// Reader
|
||||
m_emailViewer = new ReaderView();
|
||||
m_emailViewer->setMinimumWidth(350);
|
||||
connect(m_emailViewer, &ReaderView::replyRequested, this, &MainMainWindow::onReaderReplyRequested);
|
||||
connect(m_emailViewer, &ReaderView::detachRequested, this, [this]() {
|
||||
std::optional<MailItem> currentItem = MailItemDao::findById(m_emailModel->getCurrentMailId());
|
||||
if (currentItem) {
|
||||
openMailInIndependentWindow(currentItem->id());
|
||||
}
|
||||
});
|
||||
m_folderSplitter->addWidget(m_emailViewer);
|
||||
|
||||
// Default sizes: folder 240, list 380, reader flex
|
||||
@@ -248,6 +257,24 @@ void MainMainWindow::onNewMessage() {
|
||||
switchToPage(PageCompose);
|
||||
}
|
||||
|
||||
void MainMainWindow::openMailInIndependentWindow(int mailId) {
|
||||
std::optional<MailItem> item = MailItemDao::findById(mailId);
|
||||
if (!item.has_value()) return;
|
||||
|
||||
QMainWindow *detachedWin = new QMainWindow();
|
||||
detachedWin->setWindowTitle(QString("Mail - %1").arg(item->subject()));
|
||||
|
||||
ReaderView *detachedReader = new ReaderView();
|
||||
detachedReader->setMailItem(&item.value());
|
||||
|
||||
detachedWin->setCentralWidget(detachedReader);
|
||||
detachedWin->resize(800, 600);
|
||||
detachedWin->setAttribute(Qt::WA_DeleteOnClose);
|
||||
detachedWin->show();
|
||||
|
||||
statusBar()->showMessage("Opened mail in independent window", 3000);
|
||||
}
|
||||
|
||||
void MainMainWindow::createToolBar() {
|
||||
m_toolBar = addToolBar("Main Toolbar");
|
||||
m_toolBar->setMovable(false);
|
||||
|
||||
@@ -34,6 +34,7 @@ private slots:
|
||||
void onComposeRequested();
|
||||
void onReaderReplyRequested(const MailItem *item);
|
||||
void onNewMessage();
|
||||
void openMailInIndependentWindow(int mailId);
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
|
||||
@@ -40,9 +40,13 @@ void ReaderView::setupUI() {
|
||||
m_forwardButton = new QPushButton("Forward");
|
||||
m_deleteButton = new QPushButton("Delete");
|
||||
m_deleteButton->setStyleSheet("color: red;");
|
||||
|
||||
|
||||
QPushButton *m_detachButton = new QPushButton("独立 (Independent)");
|
||||
m_detachButton->setToolTip("Open in separate window");
|
||||
|
||||
actionsLayout->addWidget(m_replyButton);
|
||||
actionsLayout->addWidget(m_forwardButton);
|
||||
actionsLayout->addWidget(m_detachButton);
|
||||
actionsLayout->addStretch();
|
||||
actionsLayout->addWidget(m_deleteButton);
|
||||
|
||||
@@ -59,6 +63,8 @@ void ReaderView::setupUI() {
|
||||
connect(m_replyButton, &QPushButton::clicked, [this]() {
|
||||
if (m_bodyViewer->toPlainText().isEmpty()) return;
|
||||
});
|
||||
|
||||
connect(m_detachButton, &QPushButton::clicked, this, &ReaderView::detachRequested);
|
||||
}
|
||||
|
||||
void ReaderView::setMailItem(const MailItem* item) {
|
||||
|
||||
@@ -21,6 +21,8 @@ signals:
|
||||
void replyRequested(const MailItem* item);
|
||||
void forwardRequested(const MailItem* item);
|
||||
void deleteRequested(const MailItem* item);
|
||||
void detachRequested();
|
||||
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
|
||||
Reference in New Issue
Block a user