Skip to content

Commit 08a04c9

Browse files
committed
Workspace operations: Delete, New Folder, Save Here
1 parent 882066c commit 08a04c9

File tree

3 files changed

+72
-19
lines changed

3 files changed

+72
-19
lines changed

src/NotepadNext/docks/FolderAsWorkspaceDock.cpp

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,24 @@
1818

1919

2020
#include "FolderAsWorkspaceDock.h"
21+
22+
#include <QFileSystemModel>
23+
#include <QMessageBox>
24+
2125
#include "ApplicationSettings.h"
26+
#include "MainWindow.h"
2227
#include "ui_FolderAsWorkspaceDock.h"
2328

24-
#include <QFileSystemModel>
29+
QString NEW_DIR_TEMPLATE("dir_%1");
2530

2631
ApplicationSetting<QString> rootPathSetting{"FolderAsWorkspace/RootPath"};
2732

28-
FolderAsWorkspaceDock::FolderAsWorkspaceDock(QWidget *parent) :
33+
FolderAsWorkspaceDock::FolderAsWorkspaceDock(MainWindow *parent) :
2934
QDockWidget(parent),
30-
ui(new Ui::FolderAsWorkspaceDock),
31-
model(new QFileSystemModel(this))
35+
window(parent)
3236
{
37+
ui = new Ui::FolderAsWorkspaceDock;
38+
model = new QFileSystemModel(this);
3339
ui->setupUi(this);
3440

3541
model->setReadOnly(false);
@@ -72,7 +78,7 @@ void FolderAsWorkspaceDock::onCustomContextMenu(const QPoint &point)
7278
{
7379
QModelIndex index = ui->treeView->indexAt(point);
7480
if (!index.isValid()) {
75-
lastSelectedItem = model->index(0, 0);
81+
lastSelectedItem = model->index(rootPath());
7682
ui->menuEmpty->exec(ui->treeView->viewport()->mapToGlobal(point));
7783
return;
7884
}
@@ -85,14 +91,45 @@ void FolderAsWorkspaceDock::onCustomContextMenu(const QPoint &point)
8591
}
8692
}
8793

88-
void FolderAsWorkspaceDock::on_actionNewFile_triggered()
94+
void FolderAsWorkspaceDock::on_actionSaveHere_triggered()
8995
{
90-
qInfo(Q_FUNC_INFO);
96+
QDir parentDir(model->filePath(lastSelectedItem));
97+
auto doc = window->currentEditor();
98+
QString dstName(parentDir.absoluteFilePath(doc->getName()));
99+
100+
if (doc->saveAs(dstName) != QFileDevice::NoError)
101+
{
102+
qWarning("Unable to save %s", dstName.toUtf8().constData());
103+
}
104+
else
105+
{
106+
auto newItem = model->index(dstName);
107+
if (!doc->isFile()) {
108+
doc->setFileInfo(dstName);
109+
}
110+
ui->treeView->setCurrentIndex(newItem);
111+
ui->treeView->edit(newItem);
112+
}
91113
}
92114

93115
void FolderAsWorkspaceDock::on_actionNewFolder_triggered()
94116
{
95-
qInfo(Q_FUNC_INFO);
117+
QDir parentDir(model->filePath(lastSelectedItem));
118+
int i = 1;
119+
120+
for (;parentDir.exists(NEW_DIR_TEMPLATE.arg(i)); i++) {
121+
// Intentional
122+
}
123+
QString dstName = NEW_DIR_TEMPLATE.arg(i);
124+
125+
auto newItem = model->mkdir(lastSelectedItem, dstName);
126+
if (!newItem.isValid()) {
127+
qWarning("Unable to create %s", dstName.toUtf8().constData());
128+
}
129+
else {
130+
ui->treeView->setCurrentIndex(newItem);
131+
ui->treeView->edit(newItem);
132+
}
96133
}
97134

98135
void FolderAsWorkspaceDock::on_actionRename_triggered()
@@ -103,5 +140,22 @@ void FolderAsWorkspaceDock::on_actionRename_triggered()
103140

104141
void FolderAsWorkspaceDock::on_actionDelete_triggered()
105142
{
106-
qInfo(Q_FUNC_INFO);
143+
bool ret;
144+
QString path(model->filePath(lastSelectedItem));
145+
QMessageBox::StandardButton reply = QMessageBox::question(this, tr("Delete Item"),
146+
tr("Are you sure you want to delete <b>%1</b>?").arg(path));
147+
148+
if (reply == QMessageBox::Yes)
149+
{
150+
if (model->isDir(lastSelectedItem)) {
151+
ret = model->rmdir(lastSelectedItem);
152+
}
153+
else {
154+
ret = model->remove(lastSelectedItem);
155+
}
156+
if (!ret)
157+
{
158+
qWarning("Unable to delete %s", path.toUtf8().constData());
159+
}
160+
}
107161
}

src/NotepadNext/docks/FolderAsWorkspaceDock.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ class FolderAsWorkspaceDock;
2828
}
2929

3030
class QFileSystemModel;
31+
class MainWindow;
3132

3233
class FolderAsWorkspaceDock : public QDockWidget
3334
{
3435
Q_OBJECT
3536

3637
public:
37-
explicit FolderAsWorkspaceDock(QWidget *parent = nullptr);
38+
explicit FolderAsWorkspaceDock(MainWindow *parent = nullptr);
3839
~FolderAsWorkspaceDock();
3940

4041
void setRootPath(const QString dir);
@@ -44,7 +45,7 @@ class FolderAsWorkspaceDock : public QDockWidget
4445
void fileDoubleClicked(const QString &filePath);
4546

4647
private slots:
47-
void on_actionNewFile_triggered();
48+
void on_actionSaveHere_triggered();
4849
void on_actionNewFolder_triggered();
4950
void on_actionRename_triggered();
5051
void on_actionDelete_triggered();
@@ -54,7 +55,9 @@ private slots:
5455
private:
5556
Ui::FolderAsWorkspaceDock *ui;
5657

58+
MainWindow *window;
5759
QFileSystemModel *model;
60+
5861
QModelIndex lastSelectedItem;
5962
};
6063

src/NotepadNext/docks/FolderAsWorkspaceDock.ui

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<addaction name="actionDelete"/>
4646
<addaction name="separator"/>
4747
<addaction name="actionNewFolder"/>
48-
<addaction name="actionNewFile"/>
48+
<addaction name="actionSaveHere"/>
4949
</widget>
5050
</item>
5151
<item>
@@ -54,7 +54,7 @@
5454
<string>Space Menu</string>
5555
</property>
5656
<addaction name="actionNewFolder"/>
57-
<addaction name="actionNewFile"/>
57+
<addaction name="actionSaveHere"/>
5858
</widget>
5959
</item>
6060
<item>
@@ -75,13 +75,9 @@
7575
</item>
7676
</layout>
7777
</widget>
78-
<action name="actionNewFile">
79-
<property name="icon">
80-
<iconset resource="../resources.qrc">
81-
<normaloff>:/icons/newfile.png</normaloff>:/icons/newfile.png</iconset>
82-
</property>
78+
<action name="actionSaveHere">
8379
<property name="text">
84-
<string>&amp;New File</string>
80+
<string>&amp;Save Here</string>
8581
</property>
8682
</action>
8783
<action name="actionNewFolder">

0 commit comments

Comments
 (0)