mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
AttachmentList: support copying file path of attachment
This commit is contained in:
parent
e27907e5b4
commit
0484656c1f
@ -287,6 +287,11 @@ void VAttachmentList::handleContextMenuRequested(QPoint p_pos)
|
|||||||
if (selectedSize == 1) {
|
if (selectedSize == 1) {
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
|
|
||||||
|
QAction *copyPathAct = new QAction(tr("Copy File Path"), &menu);
|
||||||
|
connect(copyPathAct, &QAction::triggered,
|
||||||
|
this, &VAttachmentList::copyAttachmentFilePath);
|
||||||
|
menu.addAction(copyPathAct);
|
||||||
|
|
||||||
QAction *fileInfoAct = new QAction(VIconUtils::menuIcon(":/resources/icons/note_info.svg"),
|
QAction *fileInfoAct = new QAction(VIconUtils::menuIcon(":/resources/icons/note_info.svg"),
|
||||||
tr("&Info (Rename)\t%1").arg(VUtils::getShortcutText(c_infoShortcutSequence)),
|
tr("&Info (Rename)\t%1").arg(VUtils::getShortcutText(c_infoShortcutSequence)),
|
||||||
&menu);
|
&menu);
|
||||||
@ -306,7 +311,7 @@ void VAttachmentList::handleItemActivated(QListWidgetItem *p_item)
|
|||||||
if (p_item) {
|
if (p_item) {
|
||||||
Q_ASSERT(m_file);
|
Q_ASSERT(m_file);
|
||||||
|
|
||||||
QString name = p_item->text();
|
QString name = p_item->data(Qt::UserRole).toString();
|
||||||
QString folderPath = m_file->fetchAttachmentFolderPath();
|
QString folderPath = m_file->fetchAttachmentFolderPath();
|
||||||
QUrl url = QUrl::fromLocalFile(QDir(folderPath).filePath(name));
|
QUrl url = QUrl::fromLocalFile(QDir(folderPath).filePath(name));
|
||||||
QDesktopServices::openUrl(url);
|
QDesktopServices::openUrl(url);
|
||||||
@ -698,3 +703,17 @@ void VAttachmentList::attachmentInfo()
|
|||||||
item->setText(name);
|
item->setText(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VAttachmentList::copyAttachmentFilePath()
|
||||||
|
{
|
||||||
|
QListWidgetItem *item = m_attachmentList->currentItem();
|
||||||
|
if (!item) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString name = item->data(Qt::UserRole).toString();
|
||||||
|
QString filePath = QDir(m_file->fetchAttachmentFolderPath()).filePath(name);
|
||||||
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
|
clipboard->setText(filePath);
|
||||||
|
g_mainWin->showStatusMessage(tr("Attachment file path copied %1").arg(filePath));
|
||||||
|
}
|
||||||
|
@ -52,6 +52,8 @@ private slots:
|
|||||||
|
|
||||||
void attachmentInfo();
|
void attachmentInfo();
|
||||||
|
|
||||||
|
void copyAttachmentFilePath();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupUI();
|
void setupUI();
|
||||||
|
|
||||||
|
@ -873,10 +873,6 @@ void VMdEditor::insertFromMimeData(const QMimeData *p_source)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (processTextFromMimeData(p_source)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
VTextEdit::insertFromMimeData(p_source);
|
VTextEdit::insertFromMimeData(p_source);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1840,19 +1836,36 @@ bool VMdEditor::processImageFromMimeData(const QMimeData *p_source)
|
|||||||
|
|
||||||
bool VMdEditor::processUrlFromMimeData(const QMimeData *p_source)
|
bool VMdEditor::processUrlFromMimeData(const QMimeData *p_source)
|
||||||
{
|
{
|
||||||
if (!p_source->hasUrls()) {
|
QUrl url;
|
||||||
|
if (p_source->hasUrls()) {
|
||||||
|
QList<QUrl> urls = p_source->urls();
|
||||||
|
if (urls.size() == 1) {
|
||||||
|
url = urls[0];
|
||||||
|
}
|
||||||
|
} else if (p_source->hasText()) {
|
||||||
|
// Try to get URL from text.
|
||||||
|
QString text = p_source->text();
|
||||||
|
if (QFileInfo::exists(text)) {
|
||||||
|
url = QUrl::fromLocalFile(text);
|
||||||
|
} else {
|
||||||
|
url = QUrl(text);
|
||||||
|
if (url.scheme() != "https" && url.scheme() != "http") {
|
||||||
|
url.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!url.isValid()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QUrl> urls = p_source->urls();
|
bool isImage = VUtils::isImageURL(url);
|
||||||
if (urls.size() == 1) {
|
bool isLocalFile = url.isLocalFile()
|
||||||
bool isImage = VUtils::isImageURL(urls[0]);
|
&& QFileInfo::exists(url.toLocalFile());
|
||||||
bool isLocalFile = urls[0].isLocalFile()
|
|
||||||
&& QFileInfo::exists(urls[0].toLocalFile());
|
|
||||||
|
|
||||||
QString localTextFilePath;
|
QString localTextFilePath;
|
||||||
if (!isImage && isLocalFile) {
|
if (!isImage && isLocalFile) {
|
||||||
localTextFilePath = urls[0].toLocalFile();
|
localTextFilePath = url.toLocalFile();
|
||||||
QMimeDatabase mimeDatabase;
|
QMimeDatabase mimeDatabase;
|
||||||
const QMimeType mimeType = mimeDatabase.mimeTypeForFile(localTextFilePath);
|
const QMimeType mimeType = mimeDatabase.mimeTypeForFile(localTextFilePath);
|
||||||
if (mimeType.isValid() && !mimeType.inherits(QStringLiteral("text/plain"))) {
|
if (mimeType.isValid() && !mimeType.inherits(QStringLiteral("text/plain"))) {
|
||||||
@ -1882,15 +1895,15 @@ bool VMdEditor::processUrlFromMimeData(const QMimeData *p_source)
|
|||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
// Insert As Image.
|
// Insert As Image.
|
||||||
m_editOps->insertImageFromURL(urls[0]);
|
m_editOps->insertImageFromURL(url);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
// Insert As Image Link.
|
// Insert As Image Link.
|
||||||
insertImageLink("", urls[0].isLocalFile() ? urls[0].toString(QUrl::EncodeSpaces)
|
insertImageLink("", url.isLocalFile() ? url.toString(QUrl::EncodeSpaces)
|
||||||
: urls[0].toString());
|
: url.toString());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1902,20 +1915,25 @@ bool VMdEditor::processUrlFromMimeData(const QMimeData *p_source)
|
|||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
// Insert As Link.
|
// Insert As Link.
|
||||||
|
QString linkText;
|
||||||
|
if (isLocalFile) {
|
||||||
|
linkText = QFileInfo(url.toLocalFile()).fileName();
|
||||||
|
}
|
||||||
|
|
||||||
QString ut;
|
QString ut;
|
||||||
if (relativeLink) {
|
if (relativeLink) {
|
||||||
QDir dir(m_file->fetchBasePath());
|
QDir dir(m_file->fetchBasePath());
|
||||||
ut = dir.relativeFilePath(urls[0].toLocalFile());
|
ut = dir.relativeFilePath(url.toLocalFile());
|
||||||
ut = QUrl(ut).toString(QUrl::EncodeSpaces);
|
ut = QUrl(ut).toString(QUrl::EncodeSpaces);
|
||||||
} else {
|
} else {
|
||||||
ut = urls[0].isLocalFile() ? urls[0].toString(QUrl::EncodeSpaces)
|
ut = url.isLocalFile() ? url.toString(QUrl::EncodeSpaces)
|
||||||
: urls[0].toString();
|
: url.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
VInsertLinkDialog ld(QObject::tr("Insert Link"),
|
VInsertLinkDialog ld(QObject::tr("Insert Link"),
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
linkText,
|
||||||
ut,
|
ut,
|
||||||
false,
|
false,
|
||||||
this);
|
this);
|
||||||
@ -1935,7 +1953,7 @@ bool VMdEditor::processUrlFromMimeData(const QMimeData *p_source)
|
|||||||
if (p_source->hasText()) {
|
if (p_source->hasText()) {
|
||||||
m_editOps->insertText(p_source->text());
|
m_editOps->insertText(p_source->text());
|
||||||
} else {
|
} else {
|
||||||
m_editOps->insertText(urls[0].toString());
|
m_editOps->insertText(url.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1956,53 +1974,6 @@ bool VMdEditor::processUrlFromMimeData(const QMimeData *p_source)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VMdEditor::processTextFromMimeData(const QMimeData *p_source)
|
|
||||||
{
|
|
||||||
if (!p_source->hasText()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString text = p_source->text();
|
|
||||||
if (VUtils::isImageURLText(text)) {
|
|
||||||
// The text is a URL to an image.
|
|
||||||
VSelectDialog dialog(tr("Insert From Clipboard"), this);
|
|
||||||
dialog.addSelection(tr("Insert As Image"), 0);
|
|
||||||
dialog.addSelection(tr("Insert As Text"), 1);
|
|
||||||
dialog.addSelection(tr("Insert As Image Link"), 2);
|
|
||||||
|
|
||||||
if (dialog.exec() == QDialog::Accepted) {
|
|
||||||
int selection = dialog.getSelection();
|
|
||||||
if (selection == 0) {
|
|
||||||
// Insert as image.
|
|
||||||
QUrl url;
|
|
||||||
if (QFileInfo::exists(text)) {
|
|
||||||
url = QUrl::fromLocalFile(text);
|
|
||||||
} else {
|
|
||||||
url = QUrl(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url.isValid()) {
|
|
||||||
m_editOps->insertImageFromURL(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else if (selection == 2) {
|
|
||||||
// Insert as link.
|
|
||||||
insertImageLink("", text);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Q_ASSERT(p_source->hasText());
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VMdEditor::replaceTextWithLocalImages(QString &p_text)
|
void VMdEditor::replaceTextWithLocalImages(QString &p_text)
|
||||||
|
@ -313,8 +313,6 @@ private:
|
|||||||
|
|
||||||
bool processUrlFromMimeData(const QMimeData *p_source);
|
bool processUrlFromMimeData(const QMimeData *p_source);
|
||||||
|
|
||||||
bool processTextFromMimeData(const QMimeData *p_source);
|
|
||||||
|
|
||||||
void replaceTextWithLocalImages(QString &p_text);
|
void replaceTextWithLocalImages(QString &p_text);
|
||||||
|
|
||||||
PegMarkdownHighlighter *m_pegHighlighter;
|
PegMarkdownHighlighter *m_pegHighlighter;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user