diff --git a/resources.qrc b/resources.qrc index b4e20eb..890d96b 100644 --- a/resources.qrc +++ b/resources.qrc @@ -11,4 +11,9 @@ resources/qml/models/FolderModel.qml resources/translations/en_US/resources.json - + + resources/icons/attachment.svg + resources/icons/edit.svg + resources/icons/trash.svg + + \ No newline at end of file diff --git a/src/core/models/account.cpp b/src/core/models/account.cpp index fdd103e..31829f8 100644 --- a/src/core/models/account.cpp +++ b/src/core/models/account.cpp @@ -24,7 +24,7 @@ QString Account::encryptPassword(const QString& plainText) QByteArray key; bool ok; for (int i = 0; i < 16; ++i) { - char c = QString(keyHex + i * 2, 2).toInt(&ok, 16); + char c = QString::fromLatin1(keyHex + i * 2, 2).toInt(&ok, 16); if (!ok) c = 0; key.append(c); } diff --git a/src/ui/composeview.cpp b/src/ui/composeview.cpp index 57e842c..16df923 100644 --- a/src/ui/composeview.cpp +++ b/src/ui/composeview.cpp @@ -2,6 +2,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -114,6 +117,8 @@ void RichTextEditor::setupToolbar(QVBoxLayout *layout) { ); connect(m_signatureButton, &QToolButton::clicked, this, &RichTextEditor::signatureClicked); m_toolbar->addWidget(m_signatureButton); + QAction *editSigAct = m_signatureMenu->addAction(tr("Editar firmas")); + connect(editSigAct, &QAction::triggered, this, &RichTextEditor::signatureEditRequested); m_toolbar->addSeparator(); @@ -265,6 +270,7 @@ ComposeView::ComposeView(QWidget *parent) : QWidget(parent) { setupUI(); // Connect the rich text editor's signature signal to our slot connect(m_bodyEditor, &RichTextEditor::signatureClicked, this, &ComposeView::onSignatureClicked); + connect(m_bodyEditor, &RichTextEditor::signatureEditRequested, this, &ComposeView::onSignatureEditRequested); } ComposeView::~ComposeView() { @@ -527,6 +533,38 @@ void ComposeView::setupUI() { m_schedulePanel->setVisible(false); mainLayout->addWidget(m_schedulePanel); + // Attachment section + QHBoxLayout *attachmentLayout = new QHBoxLayout(); + QLabel *attachmentLabel = new QLabel(tr("Attachments:")); + attachmentLabel->setFixedWidth(80); + attachmentLabel->setStyleSheet("font-weight: bold; color: #555;"); + attachmentLayout->addWidget(attachmentLabel); + + m_attachButton = new QToolButton(); + m_attachButton->setIcon(QIcon(QStringLiteral(":/icons/attachment.svg"))); + m_attachButton->setToolTip(tr("Add attachment")); + m_attachButton->setIconSize(QSize(20,20)); + m_attachButton->setStyleSheet("QToolButton { border: none; padding: 5px; } QToolButton:hover { background: #e0e0e0; border-radius: 3px; }"); + bool connected = connect(m_attachButton, &QToolButton::clicked, this, &ComposeView::onAddAttachmentClicked); + qDebug() << "Attach button connected:" << connected; + attachmentLayout->addWidget(m_attachButton); + + m_attachmentList = new QListWidget(); + m_attachmentList->setSelectionMode(QAbstractItemView::SingleSelection); + m_attachmentList->setMaximumHeight(60); + m_attachmentList->setStyleSheet("QListWidget { border: 1px solid #d1d1d6; border-radius: 4px; }"); + attachmentLayout->addWidget(m_attachmentList, 1); + + m_removeAttachmentButton = new QToolButton(); + m_removeAttachmentButton->setIcon(QIcon(QStringLiteral(":/icons/trash.svg"))); + m_removeAttachmentButton->setToolTip(tr("Remove selected attachment")); + m_removeAttachmentButton->setIconSize(QSize(20,20)); + m_removeAttachmentButton->setStyleSheet("QToolButton { border: none; padding: 5px; } QToolButton:hover { background: #e0e0e0; border-radius: 3px; }"); + connect(m_removeAttachmentButton, &QToolButton::clicked, this, &ComposeView::onRemoveAttachmentClicked); + attachmentLayout->addWidget(m_removeAttachmentButton); + + mainLayout->addLayout(attachmentLayout); + // Action buttons row QHBoxLayout *actionsLayout = new QHBoxLayout(); @@ -557,7 +595,7 @@ void ComposeView::setupUI() { m_sendSplit->setStyleSheet( "QToolButton { background-color: #1976D2; color: white; border: none; border-radius: 4px; padding: 8px 24px; font-weight: bold; }" "QToolButton:hover { background-color: #1565C0; }" - "QToolButton::menu-button { border-left: 1px solid rgba(255,255,255,0.3); padding-left: 8px; padding-right: 8px; }" + "QToolButton::menu-button { border-left: 1px solid rgba(255,255,255,0.3); padding-left: 8px; padding-right: 8px; width: 40px;}" "QToolButton::menu-button:hover { background-color: #1565C0; border-top-right-radius: 4px; border-bottom-right-radius: 4px; }" ); connect(m_sendSplit, &QToolButton::clicked, this, &ComposeView::onSendClicked); @@ -629,4 +667,30 @@ void ComposeView::startNewEmail(const QString &initialRecipient) { m_toField->setText(initialRecipient); m_toField->setFocus(); } + +void ComposeView::onAddAttachmentClicked() +{ + qDebug() << "Attach button clicked"; + QStringList files = QFileDialog::getOpenFileNames(this, tr("Select Attachments"), QString(), tr("All Files (*)")); + if (files.isEmpty()) + return; + for (const QString &file : files) { + m_attachmentFiles.append(file); + QListWidgetItem *item = new QListWidgetItem(QFileInfo(file).fileName(), m_attachmentList); + item->setToolTip(file); + } + QMessageBox::information(this, tr("Attachments"), tr("Attached %1 file(s).").arg(files.count())); +} + +void ComposeView::onRemoveAttachmentClicked() +{ + QListWidgetItem *item = m_attachmentList->currentItem(); + if (!item) + return; + int row = m_attachmentList->row(item); + m_attachmentList->takeItem(row); + m_attachmentFiles.removeAt(row); + delete item; +} + #include "composeview.moc" \ No newline at end of file diff --git a/src/ui/composeview.h b/src/ui/composeview.h index b6690fe..0ebc098 100644 --- a/src/ui/composeview.h +++ b/src/ui/composeview.h @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -16,6 +15,7 @@ #include #include #include +#include #include "models/EmailCompositionModel.h" #include "services/accountservice.h" @@ -89,6 +89,8 @@ private slots: void onAccountChanged(int index); void onSignatureClicked(); void onSignatureEditRequested(); + void onAddAttachmentClicked(); + void onRemoveAttachmentClicked(); private: void setupUI(); @@ -122,6 +124,11 @@ private: bool m_ccVisible = false; bool m_bccVisible = false; int m_currentAccountId = -1; -}; + // Attachment UI + QToolButton *m_attachButton = nullptr; + QListWidget *m_attachmentList = nullptr; + QToolButton *m_removeAttachmentButton = nullptr; + QStringList m_attachmentFiles; +}; #endif // COMPOSE_VIEW_H \ No newline at end of file diff --git a/src/ui/mainmainwindow.cpp b/src/ui/mainmainwindow.cpp index a0acc6a..f9ee6c7 100644 --- a/src/ui/mainmainwindow.cpp +++ b/src/ui/mainmainwindow.cpp @@ -139,7 +139,7 @@ void MainMainWindow::setupUI() void MainMainWindow::setupSidebar() { m_sidebar = new QListWidget(); - m_sidebar->setFixedWidth(64); + m_sidebar->setFixedWidth(100); m_sidebar->setIconSize(QSize(24, 24)); m_sidebar->setSpacing(4); m_sidebar->setFrameShape(QFrame::NoFrame);