forked from qt-creator/qt-creator
Rename it into HighlightScrollBarController. Don't derive it anymore from QScrollBar. Make it based on QObject and decorate the existing instance of QAbstractScrollArea as needed. Fix the highlight of the shared scrollbar of the SideBySideDiffEditor. Both left and right diff editors have their own HighlightScrollBarController and their own separate overlays, but both overlays are created as children of the same right editor instance. Synchronize also the cursor between left and right editors. Make highlight current line working. Make the overlay transparent for mouse events - this fixes issues on macOS when scolling over invisible scrollbar. Change-Id: Iab05c360173e09d8748658c59785da86438a7189 Reviewed-by: David Schulz <david.schulz@qt.io>
118 lines
3.7 KiB
C++
118 lines
3.7 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of Qt Creator.
|
|
**
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
** information use the contact form at https://www.qt.io/contact-us.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
** General Public License version 3 as published by the Free Software
|
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
|
** included in the packaging of this file. Please review the following
|
|
** information to ensure the GNU General Public License requirements will
|
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
|
**
|
|
****************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#include "diffeditorwidgetcontroller.h"
|
|
|
|
#include <QWidget>
|
|
#include <QTextCharFormat>
|
|
|
|
namespace Core { class IContext; }
|
|
|
|
namespace TextEditor {
|
|
class FontSettings;
|
|
class TextEditorWidget;
|
|
}
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QMenu;
|
|
class QSplitter;
|
|
class QTextBlock;
|
|
QT_END_NAMESPACE
|
|
|
|
namespace DiffEditor {
|
|
|
|
class FileData;
|
|
|
|
namespace Internal {
|
|
|
|
class DiffEditorDocument;
|
|
class SideDiffEditorWidget;
|
|
|
|
class SideBySideDiffEditorWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit SideBySideDiffEditorWidget(QWidget *parent = nullptr);
|
|
~SideBySideDiffEditorWidget();
|
|
|
|
TextEditor::TextEditorWidget *leftEditorWidget() const;
|
|
TextEditor::TextEditorWidget *rightEditorWidget() const;
|
|
|
|
void setDocument(DiffEditorDocument *document);
|
|
DiffEditorDocument *diffDocument() const;
|
|
|
|
void setDiff(const QList<FileData> &diffFileList,
|
|
const QString &workingDirectory);
|
|
void setCurrentDiffFileIndex(int diffFileIndex);
|
|
|
|
void setHorizontalSync(bool sync);
|
|
|
|
void saveState();
|
|
void restoreState();
|
|
|
|
void clear(const QString &message = QString());
|
|
|
|
signals:
|
|
void currentDiffFileIndexChanged(int index);
|
|
|
|
private:
|
|
void setFontSettings(const TextEditor::FontSettings &fontSettings);
|
|
void slotLeftJumpToOriginalFileRequested(int diffFileIndex,
|
|
int lineNumber, int columnNumber);
|
|
void slotRightJumpToOriginalFileRequested(int diffFileIndex,
|
|
int lineNumber, int columnNumber);
|
|
void slotLeftContextMenuRequested(QMenu *menu, int diffFileIndex,
|
|
int chunkIndex);
|
|
void slotRightContextMenuRequested(QMenu *menu, int diffFileIndex,
|
|
int chunkIndex);
|
|
void leftVSliderChanged();
|
|
void rightVSliderChanged();
|
|
void leftHSliderChanged();
|
|
void rightHSliderChanged();
|
|
void leftCursorPositionChanged();
|
|
void rightCursorPositionChanged();
|
|
void handlePositionChange(SideDiffEditorWidget *source, SideDiffEditorWidget *dest);
|
|
void syncCursor(SideDiffEditorWidget *source, SideDiffEditorWidget *dest);
|
|
|
|
void showDiff();
|
|
|
|
SideDiffEditorWidget *m_leftEditor = nullptr;
|
|
SideDiffEditorWidget *m_rightEditor = nullptr;
|
|
QSplitter *m_splitter = nullptr;
|
|
|
|
DiffEditorWidgetController m_controller;
|
|
|
|
bool m_horizontalSync = false;
|
|
|
|
QTextCharFormat m_spanLineFormat;
|
|
Core::IContext *m_leftContext = nullptr;
|
|
Core::IContext *m_rightContext = nullptr;
|
|
};
|
|
|
|
} // namespace Internal
|
|
} // namespace DiffEditor
|