Skip to content

Commit

Permalink
v0.4.6 release
Browse files Browse the repository at this point in the history
  • Loading branch information
dail8859 committed Jan 21, 2022
2 parents bc80e49 + 3377186 commit 4a6e19f
Show file tree
Hide file tree
Showing 8 changed files with 160 additions and 157 deletions.
131 changes: 54 additions & 77 deletions src/NotepadNext/DockedEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

#include "ScintillaNext.h"

#include <QUuid>


class DockedEditorComponentsFactory : public ads::CDockComponentsFactory
{
Expand Down Expand Up @@ -56,10 +58,10 @@ DockedEditor::DockedEditor(QWidget *parent) : QObject(parent)
ads::CDockManager::setConfigFlag(ads::CDockManager::EqualSplitOnInsertion, true);
ads::CDockManager::setConfigFlag(ads::CDockManager::MiddleMouseButtonClosesTab, true);

m_DockManager = new ads::CDockManager(parent);
m_DockManager->setStyleSheet("");
dockManager = new ads::CDockManager(parent);
dockManager->setStyleSheet("");

connect(m_DockManager, &ads::CDockManager::focusedDockWidgetChanged, [=] (ads::CDockWidget* old, ads::CDockWidget* now) {
connect(dockManager, &ads::CDockManager::focusedDockWidgetChanged, this, [=](ads::CDockWidget* old, ads::CDockWidget* now) {
Q_UNUSED(old)

ScintillaNext *editor = qobject_cast<ScintillaNext *>(now->widget());
Expand All @@ -69,7 +71,7 @@ DockedEditor::DockedEditor(QWidget *parent) : QObject(parent)
emit editorActivated(editor);
});

connect(m_DockManager, &ads::CDockManager::dockAreaCreated, [=](ads::CDockAreaWidget* DockArea) {
connect(dockManager, &ads::CDockManager::dockAreaCreated, this, [=](ads::CDockAreaWidget* DockArea) {
DockedEditorTitleBar *titleBar = qobject_cast<DockedEditorTitleBar *>(DockArea->titleBar());
connect(titleBar, &DockedEditorTitleBar::doubleClicked, this, &DockedEditor::titleBarDoubleClicked);
});
Expand All @@ -85,16 +87,17 @@ int DockedEditor::count() const
{
int total = 0;

for (int i = 0; i < m_DockManager->dockAreaCount(); ++i)
total += m_DockManager->dockArea(i)->dockWidgetsCount();
for (int i = 0; i < dockManager->dockAreaCount(); ++i)
total += dockManager->dockArea(i)->dockWidgetsCount();

return total;
}

QVector<ScintillaNext *> DockedEditor::editors() const
{
QVector<ScintillaNext *> editors;
for (const ads::CDockWidget* dockWidget : m_DockManager->dockWidgetsMap()) {

for (const ads::CDockWidget* dockWidget : dockManager->dockWidgetsMap()) {
editors.append(qobject_cast<ScintillaNext *>(dockWidget->widget()));
}

Expand All @@ -103,45 +106,34 @@ QVector<ScintillaNext *> DockedEditor::editors() const

void DockedEditor::switchToEditor(const ScintillaNext *editor)
{
for (ads::CDockWidget* dockWidget : m_DockManager->dockWidgetsMap()) {
auto dockedEditor = qobject_cast<ScintillaNext *>(dockWidget->widget());
ads::CDockWidget *dockWidget = qobject_cast<ads::CDockWidget *>(editor->parentWidget());

if (editor == dockedEditor) {
dockWidget->raise();
return;
}
if (dockWidget == Q_NULLPTR) {
qWarning() << "Expected editor's parent to be CDockWidget";
}
else {
dockWidget->raise();
}
}

void DockedEditor::dockWidgetCloseRequested()
{
auto dockWidget = qobject_cast<ads::CDockWidget *>(sender());
auto editor = qobject_cast<ScintillaNext *>(dockWidget->widget());
ads::CDockWidget *dockWidget = qobject_cast<ads::CDockWidget *>(sender());
ScintillaNext *editor = qobject_cast<ScintillaNext *>(dockWidget->widget());

emit editorCloseRequested(editor);
}

ads::CDockAreaWidget *DockedEditor::currentDockArea()
ads::CDockAreaWidget *DockedEditor::currentDockArea() const
{
QMap<QString, ads::CDockWidget*> dockwidgets = m_DockManager->dockWidgetsMap();
const ads::CDockWidget *dockWidget = dockManager->focusedDockWidget();

if (dockwidgets.size() == 0) {
return Q_NULLPTR;
}
else if (dockwidgets.size() == 1) {
// If no dockwidget has had the focus set yet, just return the only one
return dockwidgets.first()->dockAreaWidget();
if (dockWidget) {
return dockWidget->dockAreaWidget();
}

// Search the list for the one that has had the focus set
for (ads::CDockWidget* dockWidget : dockwidgets) {
if (dockWidget->property("focused").toBool()) {
return dockWidget->dockAreaWidget();
}
else {
return Q_NULLPTR;
}

// There was no area that had the focus
return Q_NULLPTR;
}

void DockedEditor::addEditor(ScintillaNext *editor)
Expand All @@ -150,80 +142,65 @@ void DockedEditor::addEditor(ScintillaNext *editor)

Q_ASSERT(editor != Q_NULLPTR);

editor->setParent(m_DockManager);

if (currentEditor == Q_NULLPTR) {
currentEditor = editor;
}

emit editorAdded(editor);

// Create the dock widget for the editor
ads::CDockWidget* dw = new ads::CDockWidget(editor->getName());
dw->setWidget(editor);
dw->setFeature(ads::CDockWidget::DockWidgetFeature::DockWidgetDeleteOnClose, true);
dw->setFeature(ads::CDockWidget::DockWidgetFeature::CustomCloseHandling, true);
dw->setFeature(ads::CDockWidget::DockWidgetFeature::DockWidgetFloatable, false);

dw->tabWidget()->setContextMenuPolicy(Qt::CustomContextMenu);
connect(dw->tabWidget(), &QWidget::customContextMenuRequested, [=](const QPoint &pos) {
ads::CDockWidget *dockWidget = new ads::CDockWidget(editor->getName());

// We need a unique object name. Can't use the name or file path so use a uuid
dockWidget->setObjectName(QUuid::createUuid().toString());

dockWidget->setWidget(editor);
dockWidget->setFeature(ads::CDockWidget::DockWidgetFeature::DockWidgetDeleteOnClose, true);
dockWidget->setFeature(ads::CDockWidget::DockWidgetFeature::CustomCloseHandling, true);
dockWidget->setFeature(ads::CDockWidget::DockWidgetFeature::DockWidgetFloatable, false);

dockWidget->tabWidget()->setContextMenuPolicy(Qt::CustomContextMenu);
connect(dockWidget->tabWidget(), &QWidget::customContextMenuRequested, this, [=](const QPoint &pos) {
Q_UNUSED(pos)

emit contextMenuRequestedForEditor(editor);
});

// Set the tooltip based on the buffer
if (editor->isFile()) {
dw->tabWidget()->setToolTip(editor->getFilePath());
dockWidget->tabWidget()->setToolTip(editor->getFilePath());
}
else {
dw->tabWidget()->setToolTip(editor->getName());
dockWidget->tabWidget()->setToolTip(editor->getName());
}

// Set the icon
dw->tabWidget()->setIcon(QIcon(":/icons/saved.png"));
connect(editor, &ScintillaNext::savePointChanged, [=](bool dirty) {
dockWidget->tabWidget()->setIcon(QIcon(":/icons/saved.png"));
connect(editor, &ScintillaNext::savePointChanged, dockWidget, [=](bool dirty) {
const QString iconPath = dirty ? ":/icons/unsaved.png" : ":/icons/saved.png";
dw->tabWidget()->setIcon(QIcon(iconPath));
dockWidget->tabWidget()->setIcon(QIcon(iconPath));
});

connect(editor, &ScintillaNext::closed, [=]() { removeEditor(editor); });
connect(editor, &ScintillaNext::renamed, [=]() { renameEditor(editor); });
connect(editor, &ScintillaNext::closed, dockWidget, &ads::CDockWidget::closeDockWidget);
connect(editor, &ScintillaNext::renamed, this, [=]() { editorRenamed(editor); });

connect(dw, &ads::CDockWidget::closeRequested, this, &DockedEditor::dockWidgetCloseRequested);
connect(dockWidget, &ads::CDockWidget::closeRequested, this, &DockedEditor::dockWidgetCloseRequested);

m_DockManager->addDockWidget(ads::CenterDockWidgetArea, dw, currentDockArea());
dockManager->addDockWidget(ads::CenterDockWidgetArea, dockWidget, currentDockArea());
}

void DockedEditor::removeEditor(ScintillaNext *editor)
void DockedEditor::editorRenamed(ScintillaNext *editor)
{
for (ads::CDockWidget* dockWidget : m_DockManager->dockWidgetsMap()) {
ScintillaNext *editorToCheck = qobject_cast<ScintillaNext *>(dockWidget->widget());
Q_ASSERT(editor != Q_NULLPTR);

if (editor == editorToCheck) {
dockWidget->closeDockWidget();
}
}
}
ads::CDockWidget *dockWidget = qobject_cast<ads::CDockWidget *>(editor->parentWidget());

void DockedEditor::renameEditor(ScintillaNext *editor)
{
Q_ASSERT(editor != Q_NULLPTR);
dockWidget->setWindowTitle(editor->getName());

for (ads::CDockWidget* dockWidget : m_DockManager->dockWidgetsMap()) {
ScintillaNext *editorToCheck = qobject_cast<ScintillaNext *>(dockWidget->widget());

if (editor == editorToCheck) {
QString newName = editor->getName();
qDebug("Renamed to %s", qUtf8Printable(newName));
dockWidget->setWindowTitle(newName);

if (editor->isFile()) {
dockWidget->tabWidget()->setToolTip(editor->getFilePath());
}
else {
dockWidget->tabWidget()->setToolTip(editor->getName());
}
}
if (editor->isFile()) {
dockWidget->tabWidget()->setToolTip(editor->getFilePath());
}
else {
dockWidget->tabWidget()->setToolTip(editor->getName());
}
}
13 changes: 6 additions & 7 deletions src/NotepadNext/DockedEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,28 +30,27 @@ class DockedEditor : public QObject
Q_OBJECT

private:
ads::CDockManager* m_DockManager = Q_NULLPTR;
ads::CDockManager* dockManager = Q_NULLPTR;
ScintillaNext *currentEditor = Q_NULLPTR;

public:
explicit DockedEditor(QWidget *parent);

ScintillaNext *getCurrentEditor() const;
ads::CDockAreaWidget *currentDockArea();
ads::CDockAreaWidget *currentDockArea() const;

QVector<ScintillaNext *> editors() const;

void switchToEditor(const ScintillaNext *editor);

int count() const;

private slots:
void dockWidgetCloseRequested();

public slots:
void addEditor(ScintillaNext *editor);
void removeEditor(ScintillaNext *editor);
void renameEditor(ScintillaNext *editor);

private slots:
void dockWidgetCloseRequested();
void editorRenamed(ScintillaNext *editor);

signals:
void editorAdded(ScintillaNext *editor);
Expand Down
2 changes: 1 addition & 1 deletion src/NotepadNext/EditorManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ ScintillaNext *EditorManager::getEditorByFilePath(const QString &filePath)

purgeOldEditorPointers();

for (ScintillaNext *editor : editors) {
for (ScintillaNext *editor : qAsConst(editors)) {
if (editor->isFile() && editor->getFileInfo() == newInfo) {
return editor;
}
Expand Down
Loading

0 comments on commit 4a6e19f

Please sign in to comment.