VirtualBox

Changeset 70574 in vbox


Ignore:
Timestamp:
Jan 13, 2018 1:18:15 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120261
Message:

FE/Qt bugref:9072: Logviewer bookmarks can be now managed through line number widget of the plain text edit

Location:
trunk/src/VBox/Frontends/VirtualBox/src/logviewer
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.cpp

    r70559 r70574  
    8282    m_pMainLayout->addWidget(m_pTextEdit);
    8383
    84     connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pTextEdit), &UIVMLogViewerTextEdit::sigContextMenuBookmarkAction,
     84    connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pTextEdit), &UIVMLogViewerTextEdit::sigAddBookmark,
    8585            this, &UIVMLogPage::sltAddBookmark);
     86    connect(qobject_cast<UIVMLogViewerTextEdit*>(m_pTextEdit), &UIVMLogViewerTextEdit::sigDeleteBookmark,
     87            this, &UIVMLogPage::sltDeleteBookmark);
    8688}
    8789
     
    186188}
    187189
     190void UIVMLogPage::deleteBookmark(LogBookmark bookmark)
     191{
     192    int index = -1;
     193    for(int i = 0; i < m_bookmarkVector.size(); ++i)
     194    {
     195        if(m_bookmarkVector.at(i).first)
     196        {
     197            index = i;
     198            break;
     199        }
     200    }
     201    if(index != -1)
     202        deleteBookmark(index);
     203}
     204
     205
    188206void UIVMLogPage::deleteAllBookmarks()
    189207{
     
    211229{
    212230    m_bookmarkVector.push_back(bookmark);
     231    updateTextEditBookmarkLineSet();
     232    emit sigBookmarksUpdated();
     233}
     234
     235void UIVMLogPage::sltDeleteBookmark(LogBookmark bookmark)
     236{
     237    deleteBookmark(bookmark);
    213238    updateTextEditBookmarkLineSet();
    214239    emit sigBookmarksUpdated();
  • trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogPage.h

    r70559 r70574  
    8282
    8383    void deleteBookmark(int index);
     84    void deleteBookmark(LogBookmark bookmark);
    8485
    8586    const QVector<LogBookmark>& bookmarkVector() const;
     
    9394
    9495    void sltAddBookmark(LogBookmark bookmark);
     96    void sltDeleteBookmark(LogBookmark bookmark);
    9597
    9698private:
  • trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.cpp

    r70559 r70574  
    113113    UILineNumberArea(UIVMLogViewerTextEdit *textEdit)
    114114        :QWidget(textEdit)
    115         , m_pTextEdit(textEdit){}
     115        , m_pTextEdit(textEdit)
     116    {
     117        setMouseTracking(true);
     118    }
    116119
    117120    QSize sizeHint() const
    118121    {
     122        if(!m_pTextEdit)
     123            return QSize();
    119124        return QSize(m_pTextEdit->lineNumberAreaWidth(), 0);
    120125    }
     
    124129    void paintEvent(QPaintEvent *event)
    125130    {
    126         m_pTextEdit->lineNumberAreaPaintEvent(event);
     131        if(m_pTextEdit)
     132            m_pTextEdit->lineNumberAreaPaintEvent(event);
     133    }
     134
     135    void mouseMoveEvent(QMouseEvent *pEvent)
     136    {
     137        m_pTextEdit->setMouseCursorLine(m_pTextEdit->lineNumberForPos(pEvent->pos()));
     138        repaint();
     139    }
     140
     141    void mousePressEvent(QMouseEvent *pEvent)
     142    {
     143        m_pTextEdit->toggleBookmark(m_pTextEdit->bookmarkForPos(pEvent->pos()));
    127144    }
    128145
     
    135152    :QPlainTextEdit(parent)
    136153    , m_pLineNumberArea(0)
    137 {
    138 
     154    , m_mouseCursorLine(-1)
     155{
     156    setMouseTracking(true);
    139157    //setStyleSheet("background-color: rgba(240, 240, 240, 75%) ");
    140158    prepare();
     
    203221            if (m_bookmarkLineSet.contains(blockNumber + 1))
    204222            {
    205                 painter.setBackgroundMode(Qt::OpaqueMode);
    206                 painter.setBackground(QBrush(Qt::red));
     223                QPainterPath path;
     224                path.addRect(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing());
     225                painter.fillPath(path, QColor(204, 255, 51, 125));
     226                painter.drawPath(path);
    207227            }
    208             else
     228            if((blockNumber + 1) == m_mouseCursorLine)
    209229            {
    210                 painter.setBackgroundMode(Qt::TransparentMode);
     230                painter.setPen(Qt::red);
     231                painter.drawRect(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing());
    211232            }
     233
    212234            painter.setPen(Qt::black);
    213235            painter.drawText(0, top, m_pLineNumberArea->width(), m_pLineNumberArea->fontMetrics().lineSpacing(),
     
    225247    QMenu *menu = createStandardContextMenu();
    226248    QAction *pAction = menu->addAction(tr("Bookmark"));
    227     QTextBlock block = cursorForPosition(pEvent->pos()).block();
    228     m_iContextMenuBookmark.first = block.firstLineNumber();
    229     m_iContextMenuBookmark.second = block.text();
    230 
     249    m_iContextMenuBookmark = bookmarkForPos(pEvent->pos());
    231250    if (pAction)
    232251        connect(pAction, &QAction::triggered, this, &UIVMLogViewerTextEdit::sltBookmark);
     
    246265    QRect cr = contentsRect();
    247266    m_pLineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));
     267}
     268
     269void UIVMLogViewerTextEdit::mouseMoveEvent(QMouseEvent *pEvent)
     270{
     271    setMouseCursorLine(lineNumberForPos(pEvent->pos()));
     272    m_pLineNumberArea->repaint();
    248273}
    249274
     
    267292void UIVMLogViewerTextEdit::sltBookmark()
    268293{
    269     emit sigContextMenuBookmarkAction(m_iContextMenuBookmark);
     294    emit sigAddBookmark(m_iContextMenuBookmark);
    270295}
    271296
     
    315340}
    316341
     342int  UIVMLogViewerTextEdit::lineNumberForPos(const QPoint &position)
     343{
     344    QTextBlock block = cursorForPosition(position).block();
     345    return block.firstLineNumber() + 1;
     346}
     347
     348QPair<int, QString> UIVMLogViewerTextEdit::bookmarkForPos(const QPoint &position)
     349{
     350    QTextBlock block = cursorForPosition(position).block();
     351    return QPair<int, QString>(block.firstLineNumber() + 1, block.text());
     352}
     353
     354void UIVMLogViewerTextEdit::setMouseCursorLine(int lineNumber)
     355{
     356    m_mouseCursorLine = lineNumber;
     357}
     358
     359void UIVMLogViewerTextEdit::toggleBookmark(const QPair<int, QString>& bookmark)
     360{
     361    int lineNumber = bookmark.first;
     362
     363    if(m_bookmarkLineSet.contains(lineNumber))
     364        emit sigDeleteBookmark(bookmark);
     365    else
     366        emit sigAddBookmark(bookmark);
     367}
     368
    317369#include "UIVMLogViewerTextEdit.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/logviewer/UIVMLogViewerTextEdit.h

    r70559 r70574  
    3232signals:
    3333
    34     void sigContextMenuBookmarkAction(QPair<int, QString> bookmark);
     34    void sigAddBookmark(QPair<int, QString> bookmark);
     35    void sigDeleteBookmark(QPair<int, QString> bookmark);
    3536
    3637public:
     
    5051protected:
    5152
    52     void contextMenuEvent(QContextMenuEvent *pEvent);
    53     void resizeEvent(QResizeEvent *pEvent);
     53    void contextMenuEvent(QContextMenuEvent *pEvent) /* override */;
     54    void resizeEvent(QResizeEvent *pEvent) /* override */;
     55    void mouseMoveEvent(QMouseEvent *pEvent) /* override */;
    5456
    5557private slots:
     
    6466    void prepare();
    6567    void prepareWidgets();
    66 
    67     /* Line number and text at the context menu position */
     68    QPair<int, QString> bookmarkForPos(const QPoint &position);
     69    int  lineNumberForPos(const QPoint &position);
     70    void setMouseCursorLine(int lineNumber);
     71    /** If bookmark exists this function removes it, if not it adds the bookmark. */
     72    void toggleBookmark(const QPair<int, QString>& bookmark);
     73    /** Line number and text at the context menu position */
    6874    QPair<int, QString>  m_iContextMenuBookmark;
    6975    QWidget             *m_pLineNumberArea;
     76    /** Set of bookmarked lines. This set is updated from UIVMLogPage. This set is
     77        used only for lookup in this class. */
    7078    QSet<int>            m_bookmarkLineSet;
     79    /** Number of the line under the mouse cursor. */
     80    int                  m_mouseCursorLine;
     81
     82    friend class UILineNumberArea;
    7183};
    7284
Note: See TracChangeset for help on using the changeset viewer.

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