2021-09-01 13:58:59 -05:00
|
|
|
#include "SeerEditorWidget.h"
|
|
|
|
|
#include <QtGui/QColor>
|
|
|
|
|
#include <QtGui/QPainter>
|
|
|
|
|
#include <QtGui/QTextBlock>
|
|
|
|
|
#include <QtGui/QFont>
|
|
|
|
|
#include <QtGui/QIcon>
|
|
|
|
|
#include <QtGui/QRadialGradient>
|
|
|
|
|
#include <QtWidgets/QScrollBar>
|
2022-01-20 10:40:56 -06:00
|
|
|
#include <QtWidgets/QFileDialog>
|
2021-09-01 13:58:59 -05:00
|
|
|
#include <QtWidgets/QMenu>
|
|
|
|
|
#include <QtWidgets/QAction>
|
|
|
|
|
#include <QtGui/QTextCursor>
|
|
|
|
|
#include <QtGui/QPalette>
|
|
|
|
|
#include <QtCore/QList>
|
|
|
|
|
#include <QtCore/QString>
|
|
|
|
|
#include <QtCore/QTextStream>
|
|
|
|
|
#include <QtCore/QFile>
|
|
|
|
|
#include <QtCore/QDebug>
|
|
|
|
|
|
|
|
|
|
SeerEditorWidget::SeerEditorWidget(QWidget *parent) : QWidget(parent) {
|
|
|
|
|
|
|
|
|
|
// Construct the UI.
|
|
|
|
|
setupUi(this);
|
|
|
|
|
|
|
|
|
|
// Set the widgets.
|
2021-09-10 15:32:23 -05:00
|
|
|
int space = fontMetrics().horizontalAdvance("Go to line ##") + 5;
|
2021-09-01 13:58:59 -05:00
|
|
|
|
2022-01-20 10:40:56 -06:00
|
|
|
searchLineNumberLineEdit->setMaximumWidth(space);
|
2021-09-01 13:58:59 -05:00
|
|
|
|
2021-12-13 19:57:37 -06:00
|
|
|
showSearchBar(false); // Hide the search bar. ctrl+F to show it again.
|
|
|
|
|
showAlternateBar(false); // Hide the alternate bar. ctrl+O to show it again.
|
2021-09-01 13:58:59 -05:00
|
|
|
|
|
|
|
|
// Connect things.
|
2022-01-24 13:37:37 -06:00
|
|
|
QObject::connect(searchTextLineEdit, &QLineEdit::returnPressed, this, &SeerEditorWidget::handleSearchTextLineEdit);
|
|
|
|
|
QObject::connect(searchDownToolButton, &QToolButton::clicked, this, &SeerEditorWidget::handleSearchDownToolButton);
|
|
|
|
|
QObject::connect(searchUpToolButton, &QToolButton::clicked, this, &SeerEditorWidget::handleSearchUpToolButton);
|
|
|
|
|
QObject::connect(searchLineNumberLineEdit, &QLineEdit::returnPressed, this, &SeerEditorWidget::handleSearchLineNumberLineEdit);
|
|
|
|
|
QObject::connect(searchCloseToolButton, &QToolButton::clicked, this, &SeerEditorWidget::handleSearchCloseToolButton);
|
|
|
|
|
QObject::connect(alternateCloseToolButton, &QToolButton::clicked, this, &SeerEditorWidget::handleAlternateCloseToolButton);
|
|
|
|
|
QObject::connect(alternateFileOpenToolButton, &QToolButton::clicked, this, &SeerEditorWidget::handleAlternateFileOpenToolButton);
|
|
|
|
|
QObject::connect(alternateAddToGlobalToolButton, &QToolButton::clicked, this, &SeerEditorWidget::handleAlternateAddToGlobalToolButton);
|
|
|
|
|
QObject::connect(alternateLineEdit, &QLineEdit::returnPressed, this, &SeerEditorWidget::handleAlternateLineEdit);
|
|
|
|
|
QObject::connect(sourceWidget, &SeerEditorWidgetSourceArea::showSearchBar, this, &SeerEditorWidget::showSearchBar);
|
|
|
|
|
QObject::connect(sourceWidget, &SeerEditorWidgetSourceArea::showAlternateBar, this, &SeerEditorWidget::showAlternateBar);
|
2021-09-01 13:58:59 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SeerEditorWidget::~SeerEditorWidget () {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SeerEditorWidgetSourceArea* SeerEditorWidget::sourceArea () {
|
|
|
|
|
return sourceWidget;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:40:56 -06:00
|
|
|
void SeerEditorWidget::handleSearchLineNumberLineEdit () {
|
2021-09-01 13:58:59 -05:00
|
|
|
|
2022-01-20 10:40:56 -06:00
|
|
|
QString str = searchLineNumberLineEdit->text();
|
2021-09-01 13:58:59 -05:00
|
|
|
|
|
|
|
|
if (str == "") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int lineno = str.toInt();
|
|
|
|
|
|
|
|
|
|
if (lineno < 1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:40:56 -06:00
|
|
|
searchLineNumberLineEdit->clear();
|
2021-09-01 13:58:59 -05:00
|
|
|
|
|
|
|
|
sourceArea()->scrollToLine(lineno);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerEditorWidget::handleSearchTextLineEdit () {
|
|
|
|
|
|
|
|
|
|
QString str = searchTextLineEdit->text();
|
|
|
|
|
|
|
|
|
|
if (str == "") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sourceArea()->find(str, QTextDocument::FindCaseSensitively);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerEditorWidget::handleSearchDownToolButton () {
|
|
|
|
|
|
|
|
|
|
QString str = searchTextLineEdit->text();
|
|
|
|
|
|
|
|
|
|
if (str == "") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sourceArea()->find(str, QTextDocument::FindCaseSensitively);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerEditorWidget::handleSearchUpToolButton () {
|
|
|
|
|
|
|
|
|
|
QString str = searchTextLineEdit->text();
|
|
|
|
|
|
|
|
|
|
if (str == "") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sourceArea()->find(str, QTextDocument::FindCaseSensitively|QTextDocument::FindBackward);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerEditorWidget::showSearchBar (bool flag) {
|
|
|
|
|
|
|
|
|
|
// Go through the widgets in the search bar and hide/show them.
|
|
|
|
|
for (int i = 0; i != searchBarLayout->count(); ++i) {
|
|
|
|
|
QWidget* w = searchBarLayout->itemAt(i)->widget();
|
|
|
|
|
if (w != 0) {
|
|
|
|
|
w->setVisible(flag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If 'show', give the searchTextLineEdit the focus.
|
|
|
|
|
if (flag) {
|
|
|
|
|
searchTextLineEdit->setFocus(Qt::MouseFocusReason);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update the layout.
|
|
|
|
|
searchBarLayout->update();
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-13 19:57:37 -06:00
|
|
|
bool SeerEditorWidget::isSearchBarShown () const {
|
|
|
|
|
|
|
|
|
|
bool shown = false;
|
|
|
|
|
|
|
|
|
|
// Go through the widgets in the search bar to see if any are visable.
|
|
|
|
|
for (int i = 0; i != searchBarLayout->count(); ++i) {
|
|
|
|
|
QWidget* w = searchBarLayout->itemAt(i)->widget();
|
|
|
|
|
if (w != 0) {
|
|
|
|
|
if (w->isVisible()) {
|
|
|
|
|
shown = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return shown;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerEditorWidget::showAlternateBar (bool flag) {
|
|
|
|
|
|
2022-01-22 11:34:42 -06:00
|
|
|
// Set the label's text.
|
|
|
|
|
alternateLabel->setText("Enter directory path for '" + sourceArea()->file() + "'");
|
|
|
|
|
|
2021-12-13 19:57:37 -06:00
|
|
|
// Go through the widgets in the search bar and hide/show them.
|
|
|
|
|
for (int i = 0; i != alternateBarLayout->count(); ++i) {
|
|
|
|
|
QWidget* w = alternateBarLayout->itemAt(i)->widget();
|
|
|
|
|
if (w != 0) {
|
|
|
|
|
w->setVisible(flag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If 'show', give the searchTextLineEdit the focus.
|
|
|
|
|
if (flag) {
|
|
|
|
|
alternateLineEdit->setFocus(Qt::MouseFocusReason);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update the layout.
|
|
|
|
|
alternateBarLayout->update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SeerEditorWidget::isAlternateBarShown () const {
|
|
|
|
|
|
|
|
|
|
bool shown = false;
|
|
|
|
|
|
|
|
|
|
// Go through the widgets in the search bar to see if any are visable.
|
|
|
|
|
for (int i = 0; i != alternateBarLayout->count(); ++i) {
|
|
|
|
|
QWidget* w = alternateBarLayout->itemAt(i)->widget();
|
|
|
|
|
if (w != 0) {
|
|
|
|
|
if (w->isVisible()) {
|
|
|
|
|
shown = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return shown;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:40:56 -06:00
|
|
|
void SeerEditorWidget::handleSearchCloseToolButton () {
|
2021-09-01 13:58:59 -05:00
|
|
|
showSearchBar(false);
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:40:56 -06:00
|
|
|
void SeerEditorWidget::handleAlternateCloseToolButton () {
|
|
|
|
|
showAlternateBar(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SeerEditorWidget::handleAlternateFileOpenToolButton () {
|
|
|
|
|
|
2022-01-20 19:11:15 -06:00
|
|
|
//qDebug() << "fullname =" << sourceArea()->fullname();
|
|
|
|
|
//qDebug() << "file =" << sourceArea()->file();
|
2022-01-20 10:40:56 -06:00
|
|
|
|
2022-01-20 19:11:15 -06:00
|
|
|
QString filename = QFileDialog::getOpenFileName(this, "Locate File", sourceArea()->fullname(), QString("File (%1)").arg(sourceArea()->file()), nullptr, QFileDialog::DontUseNativeDialog);
|
2022-01-20 10:40:56 -06:00
|
|
|
|
2022-01-20 19:11:15 -06:00
|
|
|
//qDebug() << "location =" << filename;
|
|
|
|
|
//qDebug() << "directory=" << QFileInfo(filename).absolutePath();
|
|
|
|
|
|
|
|
|
|
if (filename != "") {
|
|
|
|
|
alternateLineEdit->setText(QFileInfo(filename).absolutePath());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-24 13:37:37 -06:00
|
|
|
void SeerEditorWidget::handleAlternateLineEdit () {
|
2022-01-20 19:11:15 -06:00
|
|
|
|
|
|
|
|
showAlternateBar(false);
|
|
|
|
|
|
|
|
|
|
QString dirname = alternateLineEdit->text();
|
|
|
|
|
|
|
|
|
|
//qDebug() << "alternate dirname=" << dirname;
|
|
|
|
|
|
2022-01-22 11:34:42 -06:00
|
|
|
sourceArea()->open(sourceArea()->fullname(), sourceArea()->file(), dirname);
|
2022-01-20 10:40:56 -06:00
|
|
|
}
|
|
|
|
|
|
2022-01-24 13:37:37 -06:00
|
|
|
void SeerEditorWidget::handleAlternateAddToGlobalToolButton () {
|
|
|
|
|
|
|
|
|
|
if (alternateLineEdit->text() == "") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//qDebug() << "alternate dirname=" << alternateLineEdit->text();
|
|
|
|
|
|
|
|
|
|
emit addAlternateDirectory(alternateLineEdit->text());
|
|
|
|
|
}
|
|
|
|
|
|