Files
seer/src/SeerEditorWidget.cpp
T

262 lines
8.2 KiB
C++
Raw Normal View History

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>
#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
searchLineNumberLineEdit->setMaximumWidth(space);
2021-09-01 13:58:59 -05:00
2022-02-24 16:38:12 -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.
setSearchMatchCase(true); // Search with case sensitivity.
2021-09-01 13:58:59 -05:00
2022-02-24 16:53:27 -06:00
_textSearchShortcut = new QShortcut(QKeySequence(tr("F11")), this);
_alternateDirectoryShortcut = new QShortcut(QKeySequence(tr("F12")), this);
2021-09-01 13:58:59 -05:00
// Connect things.
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);
2022-02-24 16:53:27 -06:00
QObject::connect(_textSearchShortcut, &QShortcut::activated, this, &SeerEditorWidget::handleTextSearchShortcut);
QObject::connect(_alternateDirectoryShortcut, &QShortcut::activated, this, &SeerEditorWidget::handleAlternateDirectoryShortcut);
2021-09-01 13:58:59 -05:00
}
SeerEditorWidget::~SeerEditorWidget () {
}
SeerEditorWidgetSourceArea* SeerEditorWidget::sourceArea () {
return sourceWidget;
}
2022-02-24 16:38:12 -06:00
bool SeerEditorWidget::isSearchBarShown () const {
2021-09-01 13:58:59 -05:00
2022-02-24 16:38:12 -06:00
bool shown = false;
2021-09-01 13:58:59 -05:00
2022-02-24 16:38:12 -06:00
// 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;
}
}
2021-09-01 13:58:59 -05:00
}
2022-02-24 16:38:12 -06:00
return shown;
2021-09-01 13:58:59 -05:00
}
2022-02-24 16:38:12 -06:00
bool SeerEditorWidget::searchMatchCase () const {
2021-09-01 13:58:59 -05:00
2022-02-24 16:38:12 -06:00
return matchCaseCheckBox->isChecked();
2021-09-01 13:58:59 -05:00
}
2022-02-24 16:38:12 -06:00
bool SeerEditorWidget::isAlternateBarShown () const {
2021-09-01 13:58:59 -05:00
2022-02-24 16:38:12 -06:00
bool shown = false;
2021-09-01 13:58:59 -05:00
2022-02-24 16:38:12 -06:00
// 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;
}
}
2021-09-01 13:58:59 -05:00
}
2022-02-24 16:38:12 -06:00
return shown;
2021-09-01 13:58:59 -05:00
}
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();
}
2022-02-24 16:38:12 -06:00
void SeerEditorWidget::setSearchMatchCase (bool flag) {
2021-12-13 19:57:37 -06:00
2022-02-24 16:38:12 -06:00
matchCaseCheckBox->setChecked(flag);
2021-12-13 19:57:37 -06:00
}
void SeerEditorWidget::showAlternateBar (bool flag) {
// 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();
}
2022-02-24 16:38:12 -06:00
void SeerEditorWidget::handleSearchLineNumberLineEdit () {
2021-12-13 19:57:37 -06:00
2022-02-24 16:38:12 -06:00
QString str = searchLineNumberLineEdit->text();
2021-12-13 19:57:37 -06:00
2022-02-24 16:38:12 -06:00
if (str == "") {
return;
2021-12-13 19:57:37 -06:00
}
2022-02-24 16:38:12 -06:00
int lineno = str.toInt();
if (lineno < 1) {
return;
}
searchLineNumberLineEdit->clear();
sourceArea()->scrollToLine(lineno);
}
void SeerEditorWidget::handleSearchTextLineEdit () {
QString str = searchTextLineEdit->text();
if (str == "") {
return;
}
sourceArea()->find(str, (searchMatchCase() ? QTextDocument::FindCaseSensitively : QTextDocument::FindFlags(0)));
}
void SeerEditorWidget::handleSearchDownToolButton () {
QString str = searchTextLineEdit->text();
if (str == "") {
return;
}
sourceArea()->find(str, (searchMatchCase() ? QTextDocument::FindCaseSensitively : QTextDocument::FindFlags(0)));
}
void SeerEditorWidget::handleSearchUpToolButton () {
QString str = searchTextLineEdit->text();
if (str == "") {
return;
}
sourceArea()->find(str, (searchMatchCase() ? QTextDocument::FindCaseSensitively : QTextDocument::FindFlags(0)) | QTextDocument::FindBackward);
2021-12-13 19:57:37 -06:00
}
void SeerEditorWidget::handleSearchCloseToolButton () {
2021-09-01 13:58:59 -05:00
showSearchBar(false);
}
void SeerEditorWidget::handleAlternateCloseToolButton () {
showAlternateBar(false);
}
void SeerEditorWidget::handleAlternateFileOpenToolButton () {
//qDebug() << "fullname =" << sourceArea()->fullname();
//qDebug() << "file =" << sourceArea()->file();
QString filename = QFileDialog::getOpenFileName(this, "Locate File", sourceArea()->fullname(), QString("File (%1)").arg(sourceArea()->file()), nullptr, QFileDialog::DontUseNativeDialog);
//qDebug() << "location =" << filename;
//qDebug() << "directory=" << QFileInfo(filename).absolutePath();
if (filename != "") {
alternateLineEdit->setText(QFileInfo(filename).absolutePath());
}
}
void SeerEditorWidget::handleAlternateLineEdit () {
showAlternateBar(false);
QString dirname = alternateLineEdit->text();
//qDebug() << "alternate dirname=" << dirname;
sourceArea()->open(sourceArea()->fullname(), sourceArea()->file(), dirname);
}
void SeerEditorWidget::handleAlternateAddToGlobalToolButton () {
if (alternateLineEdit->text() == "") {
return;
}
//qDebug() << "alternate dirname=" << alternateLineEdit->text();
emit addAlternateDirectory(alternateLineEdit->text());
}
2022-02-24 16:53:27 -06:00
void SeerEditorWidget::handleTextSearchShortcut () {
if (isSearchBarShown() == true) {
showSearchBar(false);
}else{
showSearchBar(true);
}
}
void SeerEditorWidget::handleAlternateDirectoryShortcut () {
if (isAlternateBarShown() == true) {
showAlternateBar(false);
}else{
showAlternateBar(true);
}
}