VirtualBox

Changeset 85893 in vbox


Ignore:
Timestamp:
Aug 26, 2020 5:26:53 PM (4 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9510. Add a context menu to copy the vm configuration table to the clipboard.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.cpp

    r83978 r85893  
    1919
    2020/* Qt includes: */
     21#include <QAction>
    2122#include <QApplication>
     23#include <QClipboard>
    2224#include <QHeaderView>
     25#include <QMenu>
    2326#include <QTableWidget>
    2427#include <QTextDocument>
     
    3942    , m_pMainLayout(0)
    4043    , m_pTableWidget(0)
     44    , m_pCopyWholeTableAction(0)
    4145    , m_iColumCount(3)
    4246    , m_iRowLeftMargin(0.2 * qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin))
     
    5660{
    5761    createTableItems();
     62}
     63
     64void UIInformationConfiguration::sltHandleTableContextMenuRequest(const QPoint &position)
     65{
     66    if (!m_pCopyWholeTableAction)
     67        return;
     68
     69    QMenu menu(this);
     70    menu.addAction(m_pCopyWholeTableAction);
     71    menu.exec(mapToGlobal(position));
     72}
     73
     74void UIInformationConfiguration::sltCopyTableToClipboard()
     75{
     76    QClipboard *pClipboard = QApplication::clipboard();
     77    if (!pClipboard)
     78        return;
     79    pClipboard->setText(tableData(), QClipboard::Clipboard);
    5880}
    5981
     
    6991    m_strUSBTitle = QApplication::translate("UIVMInformationDialog", "USB");
    7092    m_strSharedFoldersTitle = QApplication::translate("UIVMInformationDialog", "Shared Folders");
     93    if (m_pCopyWholeTableAction)
     94        m_pCopyWholeTableAction->setText(QApplication::translate("UIVMInformationDialog", "Copy All"));
    7195    createTableItems();
    7296}
     
    160184        m_pTableWidget->setFocusPolicy(Qt::NoFocus);
    161185        m_pTableWidget->setSelectionMode(QAbstractItemView::NoSelection);
     186        m_pTableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
     187        connect(m_pTableWidget, &QTableWidget::customContextMenuRequested,
     188            this, &UIInformationConfiguration::sltHandleTableContextMenuRequest);
    162189        m_pMainLayout->addWidget(m_pTableWidget);
    163190    }
     191    m_pCopyWholeTableAction = new QAction(this);
     192    connect(m_pCopyWholeTableAction, &QAction::triggered,
     193            this, &UIInformationConfiguration::sltCopyTableToClipboard);
    164194}
    165195
     
    217247    return textDocument.toPlainText();
    218248}
     249
     250QString UIInformationConfiguration::tableData() const
     251{
     252    AssertReturn(m_pTableWidget, QString());
     253    AssertReturn(m_pTableWidget->columnCount() == 3, QString());
     254    QStringList data;
     255    for (int i = 0; i < m_pTableWidget->rowCount(); ++i)
     256    {
     257        /* Skip the first column as it contains only icon and no text: */
     258        QTableWidgetItem *pItem = m_pTableWidget->item(i, 1);
     259        QString strColumn1 = pItem ? pItem->text() : QString();
     260        pItem = m_pTableWidget->item(i, 2);
     261        QString strColumn2 = pItem ? pItem->text() : QString();
     262        if (strColumn2.isEmpty())
     263            data << strColumn1;
     264        else
     265            data << strColumn1 << ": " << strColumn2;
     266        data << "\n";
     267    }
     268    return data.join(QString());
     269}
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationConfiguration.h

    r83978 r85893  
    6060
    6161    void sltMachineDataChanged();
     62    void sltHandleTableContextMenuRequest(const QPoint &position);
     63    void sltCopyTableToClipboard();
    6264
    6365private:
     
    7173    void resetTable();
    7274    QString removeHtmlFromString(const QString &strOriginal);
     75    QString tableData() const;
    7376
    7477    CMachine m_machine;
     
    7679    QVBoxLayout *m_pMainLayout;
    7780    QTableWidget *m_pTableWidget;
     81    QAction *m_pCopyWholeTableAction;
     82
    7883    const int m_iColumCount;
    7984    const int m_iRowLeftMargin;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.cpp

    r85891 r85893  
    7373    void updateClipboardMode(KClipboardMode enmMode = KClipboardMode_Max);
    7474    void updateDnDMode(KDnDMode enmMode = KDnDMode_Max);
    75     QString tableData();
     75    QString tableData() const;
    7676
    7777protected:
     
    416416}
    417417
    418 QString UIRuntimeInfoWidget::tableData()
    419 {
    420     QStringList stringData;
     418QString UIRuntimeInfoWidget::tableData() const
     419{
     420    AssertReturn(columnCount() == 3, QString());
     421    QStringList data;
    421422    for (int i = 0; i < rowCount(); ++i)
    422423    {
    423         /* Skip the first column as it is used for icon: */
    424         for (int j = 1; j < columnCount(); ++j)
    425         {
    426             QTableWidgetItem *pItem = item(i, j);
    427             if (!pItem || pItem->text().isEmpty())
    428                 continue;
    429             stringData << pItem->text();
    430             if (j == 1)
    431                 stringData << ": ";
    432         }
    433         stringData << "\n";
    434     }
    435     return stringData.join(QString());
    436 }
    437 
     424        /* Skip the first column as it contains only icon and no text: */
     425        QTableWidgetItem *pItem = item(i, 1);
     426        QString strColumn1 = pItem ? pItem->text() : QString();
     427        pItem = item(i, 2);
     428        QString strColumn2 = pItem ? pItem->text() : QString();
     429        if (strColumn2.isEmpty())
     430            data << strColumn1;
     431        else
     432            data << strColumn1 << ": " << strColumn2;
     433        data << "\n";
     434    }
     435    return data.join(QString());
     436}
    438437
    439438void UIRuntimeInfoWidget::updateInfoRow(InfoRow enmLine, const QString &strColumn0, const QString &strColumn1)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette