mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
feature/support_insert_multiple_mimedata (#2339)
* feature/support_insert_multiple_mimedata * format * reset * adj * adj isProcess * adj func name * adj logic and name
This commit is contained in:
parent
075380749c
commit
c255cd54ed
@ -529,6 +529,11 @@ void MarkdownEditor::handleInsertFromMimeData(const QMimeData *p_source, bool *p
|
||||
*p_handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (processMultipleUrlsFromMimeData(p_source)) {
|
||||
*p_handled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bool MarkdownEditor::processHtmlFromMimeData(const QMimeData *p_source)
|
||||
@ -610,9 +615,13 @@ bool MarkdownEditor::processImageFromMimeData(const QMimeData *p_source)
|
||||
|
||||
bool MarkdownEditor::processUrlFromMimeData(const QMimeData *p_source)
|
||||
{
|
||||
const auto urls = p_source->urls();
|
||||
if (urls.size() > 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QUrl url;
|
||||
if (p_source->hasUrls()) {
|
||||
const auto urls = p_source->urls();
|
||||
if (urls.size() == 1) {
|
||||
url = urls[0];
|
||||
}
|
||||
@ -781,6 +790,68 @@ bool MarkdownEditor::processUrlFromMimeData(const QMimeData *p_source)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MarkdownEditor::processMultipleUrlsFromMimeData(const QMimeData *p_source) {
|
||||
const auto urls = p_source->urls();
|
||||
if (urls.size() <= 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isProcessed = false;
|
||||
// Judgment if all QMimeData are images.
|
||||
bool isAllImage = true;
|
||||
for (const QUrl &url : urls) {
|
||||
if (!PathUtils::isImageUrl(PathUtils::urlToPath(url))) {
|
||||
isAllImage = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SelectDialog dialog(tr("Insert From Clipboard (%n items)", "", urls.size()), this);
|
||||
if (isAllImage) {
|
||||
dialog.addSelection(tr("Insert As Image"), 0);
|
||||
}
|
||||
if (m_buffer->isAttachmentSupported()) {
|
||||
dialog.addSelection(tr("Attach And Insert Link"), 1);
|
||||
}
|
||||
dialog.setMinimumWidth(400);
|
||||
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
switch (dialog.getSelection()) {
|
||||
case 0:
|
||||
{
|
||||
// Insert As Image.
|
||||
for (const QUrl &url : urls) {
|
||||
insertImageFromUrl(PathUtils::urlToPath(url), true);
|
||||
m_textEdit->insertPlainText("\n\n");
|
||||
}
|
||||
isProcessed = true;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
// Attach And Insert Link.
|
||||
QStringList fileList;
|
||||
for (const QUrl &url : urls) {
|
||||
fileList << url.toLocalFile();
|
||||
}
|
||||
fileList = m_buffer->addAttachment(QString(), fileList);
|
||||
enterInsertModeIfApplicable();
|
||||
for (int i = 0; i < fileList.length(); ++i) {
|
||||
vte::MarkdownUtils::typeLink(
|
||||
m_textEdit, QFileInfo(fileList[i]).fileName(),
|
||||
getRelativeLink(fileList[i]));
|
||||
|
||||
m_textEdit->insertPlainText("\n\n");
|
||||
}
|
||||
isProcessed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isProcessed;
|
||||
}
|
||||
|
||||
void MarkdownEditor::insertImageFromMimeData(const QMimeData *p_source)
|
||||
{
|
||||
QImage image = qvariant_cast<QImage>(p_source->imageData());
|
||||
@ -799,8 +870,11 @@ void MarkdownEditor::insertImageFromMimeData(const QMimeData *p_source)
|
||||
}
|
||||
}
|
||||
|
||||
void MarkdownEditor::insertImageFromUrl(const QString &p_url)
|
||||
void MarkdownEditor::insertImageFromUrl(const QString &p_url, bool p_quiet)
|
||||
{
|
||||
if (p_quiet) {
|
||||
insertImageToBufferFromLocalFile("", "", p_url, 0);
|
||||
} else {
|
||||
ImageInsertDialog dialog(tr("Insert Image From URL"), "", "", "", false, this);
|
||||
dialog.setImagePath(p_url);
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
@ -821,6 +895,7 @@ void MarkdownEditor::insertImageFromUrl(const QString &p_url)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString MarkdownEditor::getRelativeLink(const QString &p_path)
|
||||
{
|
||||
|
@ -165,9 +165,12 @@ namespace vnotex
|
||||
// Return true if it is processed.
|
||||
bool processUrlFromMimeData(const QMimeData *p_source);
|
||||
|
||||
// Return true if it is processed.
|
||||
bool processMultipleUrlsFromMimeData(const QMimeData *p_source);
|
||||
|
||||
void insertImageFromMimeData(const QMimeData *p_source);
|
||||
|
||||
void insertImageFromUrl(const QString &p_url);
|
||||
void insertImageFromUrl(const QString &p_url, bool p_quiet = false);
|
||||
|
||||
QString getRelativeLink(const QString &p_path);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user