File indexing completed on 2025-02-02 04:11:21

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "clipboard_inspector.hpp"
0008 #include <QTabWidget>
0009 #include <QClipboard>
0010 #include <QGuiApplication>
0011 #include <QMimeData>
0012 #include <QPlainTextEdit>
0013 #include <QVBoxLayout>
0014 #include <QTextBlock>
0015 #include <QPushButton>
0016 
0017 
0018 using namespace glaxnimate::gui;
0019 
0020 ClipboardInspector::ClipboardInspector(QWidget* parent)
0021     : QDialog(parent)
0022 {
0023     resize(1024, 1024);
0024 
0025     auto lay = new QVBoxLayout(this);
0026     setLayout(lay);
0027 
0028     auto tab = new QTabWidget(this);
0029     lay->addWidget(tab);
0030     load(tab);
0031 
0032     QPushButton* button = new QPushButton(this);
0033     button->setText("Reload");
0034     lay->addWidget(button);
0035     connect(button, &QPushButton::clicked, this, [this, tab]{
0036         while ( tab->count() )
0037             delete tab->widget(0);
0038         load(tab);
0039     });
0040 }
0041 
0042 void ClipboardInspector::load(QTabWidget* tab)
0043 {
0044     auto data = QGuiApplication::clipboard()->mimeData();
0045 
0046     for ( const auto& format : data->formats() )
0047     {
0048         QPlainTextEdit* widget = new QPlainTextEdit(this);
0049         auto bytes = data->data(format);
0050         widget->appendPlainText(bytes);
0051         if ( !format.contains("json") && !format.contains("text") && !format.contains("xml") )
0052         {
0053             widget->appendPlainText("\n\n\n");
0054             widget->appendPlainText(bytes.toHex());
0055         }
0056         widget->setTextCursor(QTextCursor(widget->document()->findBlockByLineNumber(0)));
0057         tab->addTab(widget, format);
0058     }
0059 }