- implement: files view
This commit is contained in:
parent
d2ca199024
commit
7a5b6b8efc
1
NEWS.md
1
NEWS.md
|
@ -11,6 +11,7 @@ Version 0.7.0
|
|||
- enhancement: autosave/load bookmarks
|
||||
- enhancement: autosave/load breakpoints
|
||||
- enhancement: autosave/load watches
|
||||
- implement: files view
|
||||
|
||||
Version 0.6.8
|
||||
- enhancement: add link to cppreference in the help menu
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -495,6 +495,7 @@ void Editor::focusInEvent(QFocusEvent *event)
|
|||
this,
|
||||
&SynEdit::invalidate);
|
||||
}
|
||||
pMainWindow->updateAppTitle();
|
||||
pMainWindow->updateEditorActions();
|
||||
pMainWindow->updateStatusbarForLineCol();
|
||||
pMainWindow->updateForStatusbarModeInfo();
|
||||
|
@ -511,7 +512,6 @@ void Editor::focusOutEvent(QFocusEvent *event)
|
|||
&SynEdit::invalidate);
|
||||
}
|
||||
//pMainWindow->updateClassBrowserForEditor(nullptr);
|
||||
pMainWindow->updateEditorActions();
|
||||
pMainWindow->updateStatusbarForLineCol();
|
||||
pMainWindow->updateForStatusbarModeInfo();
|
||||
pMainWindow->functionTip()->hide();
|
||||
|
|
|
@ -153,6 +153,9 @@ bool EditorList::closeEditor(Editor* editor, bool transferFocus, bool force) {
|
|||
editor = getEditor();
|
||||
pMainWindow->updateClassBrowserForEditor(editor);
|
||||
}
|
||||
if (pageCount()==0) {
|
||||
pMainWindow->updateAppTitle();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -283,6 +286,7 @@ bool EditorList::closeAll(bool force) {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
pMainWindow->updateAppTitle();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 300 B After Width: | Height: | Size: 285 B |
|
@ -207,10 +207,14 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
ui->searchView,&QTreeView::expandAll);
|
||||
ui->replacePanel->setVisible(false);
|
||||
|
||||
|
||||
//files view
|
||||
ui->treeFiles->setModel(&mFileSystemModel);
|
||||
mFileSystemModel.setRootPath(pSettings->environment().currentFolder());
|
||||
ui->treeFiles->setRootIndex(mFileSystemModel.index(pSettings->environment().currentFolder()));
|
||||
mFileSystemModel.setReadOnly(true);
|
||||
setFilesViewRoot(pSettings->environment().currentFolder());
|
||||
for (int i=1;i<mFileSystemModel.columnCount();i++) {
|
||||
ui->treeFiles->hideColumn(i);
|
||||
}
|
||||
|
||||
//class browser
|
||||
ui->classBrowser->setModel(&mClassBrowserModel);
|
||||
|
||||
|
@ -322,6 +326,8 @@ void MainWindow::updateEditorActions()
|
|||
ui->actionAdd_bookmark->setEnabled(false);
|
||||
ui->actionRemove_Bookmark->setEnabled(false);
|
||||
ui->actionModify_Bookmark_Description->setEnabled(false);
|
||||
|
||||
ui->actionLocate_in_Files_View->setEnabled(false);
|
||||
} else {
|
||||
ui->actionAuto_Detect->setEnabled(true);
|
||||
ui->actionEncode_in_ANSI->setEnabled(true);
|
||||
|
@ -362,6 +368,8 @@ void MainWindow::updateEditorActions()
|
|||
ui->actionAdd_bookmark->setEnabled(e->lines()->count()>0 && !e->hasBookmark(line));
|
||||
ui->actionRemove_Bookmark->setEnabled(e->hasBookmark(line));
|
||||
ui->actionModify_Bookmark_Description->setEnabled(e->hasBookmark(line));
|
||||
|
||||
ui->actionLocate_in_Files_View->setEnabled(!e->isNew());
|
||||
}
|
||||
|
||||
updateCompileActions();
|
||||
|
@ -2047,33 +2055,113 @@ void MainWindow::buildContextMenus()
|
|||
|
||||
//toolbar for class browser
|
||||
mClassBrowserToolbar = new QWidget();
|
||||
QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>( ui->tabStructure->layout());
|
||||
layout->insertWidget(0,mClassBrowserToolbar);
|
||||
QHBoxLayout* hlayout = new QHBoxLayout();
|
||||
hlayout->setContentsMargins(2,2,2,2);
|
||||
mClassBrowserToolbar->setLayout(hlayout);
|
||||
QToolButton * toolButton;
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(mClassBrowser_Sort_By_Type);
|
||||
hlayout->addWidget(toolButton);
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(mClassBrowser_Sort_By_Name);
|
||||
hlayout->addWidget(toolButton);
|
||||
QFrame * vLine = new QFrame();
|
||||
vLine->setFrameShape(QFrame::VLine);
|
||||
vLine->setFrameShadow(QFrame::Sunken);
|
||||
hlayout->addWidget(vLine);
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(mClassBrowser_Show_Inherited);
|
||||
hlayout->addWidget(toolButton);
|
||||
hlayout->addStretch();
|
||||
{
|
||||
QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>( ui->tabStructure->layout());
|
||||
layout->insertWidget(0,mClassBrowserToolbar);
|
||||
QHBoxLayout* hlayout = new QHBoxLayout();
|
||||
hlayout->setContentsMargins(2,2,2,2);
|
||||
mClassBrowserToolbar->setLayout(hlayout);
|
||||
QToolButton * toolButton;
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(mClassBrowser_Sort_By_Type);
|
||||
hlayout->addWidget(toolButton);
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(mClassBrowser_Sort_By_Name);
|
||||
hlayout->addWidget(toolButton);
|
||||
QFrame * vLine = new QFrame();
|
||||
vLine->setFrameShape(QFrame::VLine);
|
||||
vLine->setFrameShadow(QFrame::Sunken);
|
||||
hlayout->addWidget(vLine);
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(mClassBrowser_Show_Inherited);
|
||||
hlayout->addWidget(toolButton);
|
||||
hlayout->addStretch();
|
||||
}
|
||||
|
||||
//menu for statusbar
|
||||
mFileEncodingStatus->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(mFileEncodingStatus,&QWidget::customContextMenuRequested,
|
||||
this, &MainWindow::onFileEncodingContextMenu);
|
||||
|
||||
//
|
||||
//menu for files view
|
||||
ui->treeFiles->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(ui->treeFiles,&QWidget::customContextMenuRequested,
|
||||
this, &MainWindow::onFilesViewContextMenu);
|
||||
mFilesView_Open = createActionFor(
|
||||
tr("Open in Editor"),
|
||||
ui->treeFiles);
|
||||
connect(mFilesView_Open, &QAction::triggered,
|
||||
[this]() {
|
||||
QString path = mFileSystemModel.filePath(ui->treeFiles->currentIndex());
|
||||
if (!path.isEmpty() && QFileInfo(path).isFile()) {
|
||||
Editor *editor=mEditorList->getEditorByFilename(path);
|
||||
if (editor)
|
||||
editor->activate();
|
||||
}
|
||||
});
|
||||
mFilesView_OpenWithExternal = createActionFor(
|
||||
tr("Open in External Program"),
|
||||
ui->treeFiles);
|
||||
connect(mFilesView_OpenWithExternal, &QAction::triggered,
|
||||
[this]() {
|
||||
QString path = mFileSystemModel.filePath(ui->treeFiles->currentIndex());
|
||||
if (!path.isEmpty() && QFileInfo(path).isFile()) {
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
|
||||
}
|
||||
});
|
||||
mFilesView_OpenInTerminal = createActionFor(
|
||||
tr("Open in Terminal"),
|
||||
ui->treeFiles);
|
||||
mFilesView_OpenInTerminal->setIcon(ui->actionOpen_Terminal->icon());
|
||||
connect(mFilesView_OpenInTerminal, &QAction::triggered,
|
||||
[this]() {
|
||||
QString path = mFileSystemModel.filePath(ui->treeFiles->currentIndex());
|
||||
if (!path.isEmpty()) {
|
||||
QFileInfo fileInfo(path);
|
||||
openShell(fileInfo.path(),"cmd.exe");
|
||||
}
|
||||
});
|
||||
mFilesView_OpenInExplorer = createActionFor(
|
||||
tr("Open in Windows Explorer"),
|
||||
ui->treeFiles);
|
||||
mFilesView_OpenInExplorer->setIcon(ui->actionOpen_Containing_Folder->icon());
|
||||
connect(mFilesView_OpenInExplorer, &QAction::triggered,
|
||||
[this]() {
|
||||
QString path = mFileSystemModel.filePath(ui->treeFiles->currentIndex());
|
||||
if (!path.isEmpty()) {
|
||||
QFileInfo info(path);
|
||||
if (info.isFile()){
|
||||
QDesktopServices::openUrl(
|
||||
QUrl("file:///"+
|
||||
includeTrailingPathDelimiter(info.path()),QUrl::TolerantMode));
|
||||
} else if (info.isDir()){
|
||||
QDesktopServices::openUrl(
|
||||
QUrl("file:///"+
|
||||
includeTrailingPathDelimiter(path),QUrl::TolerantMode));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//toolbar for files view
|
||||
mFilesViewToolbar = new QWidget();
|
||||
{
|
||||
QVBoxLayout* layout = dynamic_cast<QVBoxLayout*>( ui->tabFiles->layout());
|
||||
layout->insertWidget(0,mFilesViewToolbar);
|
||||
QHBoxLayout* hlayout = new QHBoxLayout();
|
||||
hlayout->setContentsMargins(2,2,2,2);
|
||||
mFilesViewToolbar->setLayout(hlayout);
|
||||
QToolButton * toolButton;
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(ui->actionOpen_Folder);
|
||||
toolButton->setFixedSize(32,32);
|
||||
hlayout->addWidget(toolButton);
|
||||
toolButton = new QToolButton;
|
||||
toolButton->setDefaultAction(ui->actionLocate_in_Files_View);
|
||||
toolButton->setFixedSize(32,32);
|
||||
hlayout->addWidget(toolButton);
|
||||
hlayout->addStretch();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::buildEncodingMenu()
|
||||
|
@ -2345,6 +2433,26 @@ void MainWindow::onFileEncodingContextMenu(const QPoint &pos)
|
|||
mMenuEncoding->exec(mFileEncodingStatus->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void MainWindow::onFilesViewContextMenu(const QPoint &pos)
|
||||
{
|
||||
|
||||
QMenu menu(this);
|
||||
menu.addAction(ui->actionOpen_Folder);
|
||||
menu.addSeparator();
|
||||
menu.addAction(mFilesView_Open);
|
||||
menu.addAction(mFilesView_OpenWithExternal);
|
||||
menu.addSeparator();
|
||||
menu.addAction(mFilesView_OpenInTerminal);
|
||||
menu.addAction(mFilesView_OpenInExplorer);
|
||||
QString path = mFileSystemModel.filePath(ui->treeFiles->currentIndex());
|
||||
QFileInfo info(path);
|
||||
mFilesView_Open->setEnabled(info.isFile());
|
||||
mFilesView_OpenWithExternal->setEnabled(info.isFile());
|
||||
mFilesView_OpenInTerminal->setEnabled(!path.isEmpty());
|
||||
mFilesView_OpenInExplorer->setEnabled(!path.isEmpty());
|
||||
menu.exec(ui->treeFiles->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void MainWindow::onShowInsertCodeSnippetMenu()
|
||||
{
|
||||
mMenuInsertCodeSnippet->clear();
|
||||
|
@ -2407,7 +2515,7 @@ void MainWindow::onEditorContextMenu(const QPoint &pos)
|
|||
menu.addSeparator();
|
||||
menu.addAction(ui->actionOpen_Containing_Folder);
|
||||
menu.addAction(ui->actionOpen_Terminal);
|
||||
|
||||
menu.addAction(ui->actionLocate_in_Files_View);
|
||||
menu.addSeparator();
|
||||
menu.addAction(ui->actionReformat_Code);
|
||||
menu.addSeparator();
|
||||
|
@ -2443,6 +2551,7 @@ void MainWindow::onEditorContextMenu(const QPoint &pos)
|
|||
menu.addAction(ui->actionRemove_Bookmark);
|
||||
menu.addAction(ui->actionModify_Bookmark_Description);
|
||||
}
|
||||
ui->actionLocate_in_Files_View->setEnabled(!editor->isNew());
|
||||
ui->actionBreakpoint_property->setEnabled(editor->hasBreakpoint(line));
|
||||
ui->actionAdd_bookmark->setEnabled(
|
||||
line>=0 && editor->lines()->count()>0
|
||||
|
@ -2477,6 +2586,7 @@ void MainWindow::onEditorTabContextMenu(QTabWidget* tabWidget, const QPoint &pos
|
|||
menu.addSeparator();
|
||||
menu.addAction(ui->actionOpen_Containing_Folder);
|
||||
menu.addAction(ui->actionOpen_Terminal);
|
||||
menu.addAction(ui->actionLocate_in_Files_View);
|
||||
menu.addSeparator();
|
||||
menu.addAction(ui->actionMove_To_Other_View);
|
||||
menu.addSeparator();
|
||||
|
@ -2485,7 +2595,10 @@ void MainWindow::onEditorTabContextMenu(QTabWidget* tabWidget, const QPoint &pos
|
|||
tabWidget==ui->EditorTabsRight
|
||||
|| tabWidget->count()>1
|
||||
);
|
||||
|
||||
Editor * editor = dynamic_cast<Editor *>(tabWidget->widget(index));
|
||||
if (editor ) {
|
||||
ui->actionLocate_in_Files_View->setEnabled(!editor->isNew());
|
||||
}
|
||||
menu.exec(tabBar->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
|
@ -2754,6 +2867,9 @@ void MainWindow::closeEvent(QCloseEvent *event) {
|
|||
settings.setLeftPanelIndex(ui->tabInfos->currentIndex());
|
||||
settings.setLeftPanelOpenned(mLeftPanelOpenned);
|
||||
settings.save();
|
||||
|
||||
//save current folder ( for files view )
|
||||
pSettings->environment().save();
|
||||
try {
|
||||
mBookmarkModel->save(includeTrailingPathDelimiter(pSettings->dirs().config())
|
||||
+DEV_BOOKMARK_FILE);
|
||||
|
@ -4343,6 +4459,15 @@ void MainWindow::showSearchReplacePanel(bool show)
|
|||
mSearchResultTreeModel->setSelectable(show);
|
||||
}
|
||||
|
||||
void MainWindow::setFilesViewRoot(const QString &path)
|
||||
{
|
||||
mFileSystemModel.setRootPath(path);
|
||||
ui->treeFiles->setRootIndex(mFileSystemModel.index(path));
|
||||
pSettings->environment().setCurrentFolder(path);
|
||||
ui->txtFilesPath->setText(path);
|
||||
ui->txtFilesPath->setCursorPosition(1);
|
||||
}
|
||||
|
||||
Ui::MainWindow *MainWindow::mainWidget() const
|
||||
{
|
||||
return ui;
|
||||
|
@ -4546,3 +4671,39 @@ void MainWindow::on_actionModify_Bookmark_Description_triggered()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_actionLocate_in_Files_View_triggered()
|
||||
{
|
||||
Editor * editor = mEditorList->getEditor();
|
||||
if (editor) {
|
||||
QString fileDir = extractFileDir(editor->filename());
|
||||
if (!fileDir.isEmpty()) {
|
||||
setFilesViewRoot(fileDir);
|
||||
ui->treeFiles->setCurrentIndex(mFileSystemModel.index(editor->filename()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_treeFiles_doubleClicked(const QModelIndex &index)
|
||||
{
|
||||
QString filepath = mFileSystemModel.filePath(index);
|
||||
QFileInfo file(filepath);
|
||||
if (file.isFile()) {
|
||||
Editor * editor = mEditorList->getEditorByFilename(filepath);
|
||||
if (editor) {
|
||||
editor->activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_actionOpen_Folder_triggered()
|
||||
{
|
||||
QString folder = QFileDialog::getExistingDirectory(this,tr("Open Folder"),
|
||||
pSettings->environment().currentFolder());
|
||||
if (!folder.isEmpty()) {
|
||||
setFilesViewRoot(folder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -192,6 +192,7 @@ private:
|
|||
void scanActiveProject(bool parse=false);
|
||||
void includeOrSkipDirs(const QStringList& dirs, bool skip);
|
||||
void showSearchReplacePanel(bool show);
|
||||
void setFilesViewRoot(const QString& path);
|
||||
|
||||
private slots:
|
||||
void onAutoSaveTimeout();
|
||||
|
@ -206,6 +207,7 @@ private slots:
|
|||
void onClassBrowserContextMenu(const QPoint& pos);
|
||||
void onDebugConsoleContextMenu(const QPoint& pos);
|
||||
void onFileEncodingContextMenu(const QPoint& pos);
|
||||
void onFilesViewContextMenu(const QPoint& pos);
|
||||
|
||||
void onShowInsertCodeSnippetMenu();
|
||||
|
||||
|
@ -420,6 +422,12 @@ private slots:
|
|||
|
||||
void on_actionModify_Bookmark_Description_triggered();
|
||||
|
||||
void on_actionLocate_in_Files_View_triggered();
|
||||
|
||||
void on_treeFiles_doubleClicked(const QModelIndex &index);
|
||||
|
||||
void on_actionOpen_Folder_triggered();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
EditorList *mEditorList;
|
||||
|
@ -511,9 +519,6 @@ private:
|
|||
QAction * mFilesView_OpenWithExternal;
|
||||
QAction * mFilesView_OpenInTerminal;
|
||||
QAction * mFilesView_OpenInExplorer;
|
||||
QAction * mFilesView_OnlyShowDevFiles;
|
||||
QAction * mFilesView_LocateCurrent;
|
||||
|
||||
QWidget * mFilesViewToolbar;
|
||||
|
||||
//action for debug console
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
<enum>QTabWidget::West</enum>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>2</number>
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="usesScrollButtons">
|
||||
<bool>true</bool>
|
||||
|
@ -213,6 +213,9 @@
|
|||
<string>Files</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
|
@ -226,7 +229,24 @@
|
|||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTreeView" name="treeFiles"/>
|
||||
<widget class="QLineEdit" name="txtFilesPath">
|
||||
<property name="frame">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTreeView" name="treeFiles">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::DragOnly</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
@ -931,6 +951,7 @@
|
|||
<string>File</string>
|
||||
</property>
|
||||
<addaction name="actionOpen"/>
|
||||
<addaction name="actionOpen_Folder"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSave"/>
|
||||
<addaction name="actionSaveAs"/>
|
||||
|
@ -1965,6 +1986,24 @@
|
|||
<string>Modify Bookmark Description</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionLocate_in_Files_View">
|
||||
<property name="icon">
|
||||
<iconset resource="icons.qrc">
|
||||
<normaloff>:/icons/images/newlook24/046-Locate.png</normaloff>:/icons/images/newlook24/046-Locate.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Locate in Files View</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionOpen_Folder">
|
||||
<property name="icon">
|
||||
<iconset resource="icons.qrc">
|
||||
<normaloff>:/icons/images/newlook24/053-open.png</normaloff>:/icons/images/newlook24/053-open.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open Folder</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
|
@ -2619,6 +2619,9 @@ void Settings::Environment::doLoad()
|
|||
mInterfaceFontSize = intValue("interface font size",10);
|
||||
mLanguage = stringValue("language", QLocale::system().name());
|
||||
mCurrentFolder = stringValue("current_folder",QDir::currentPath());
|
||||
if (!fileExists(mCurrentFolder)) {
|
||||
mCurrentFolder = QDir::currentPath();
|
||||
}
|
||||
}
|
||||
|
||||
int Settings::Environment::interfaceFontSize() const
|
||||
|
|
|
@ -748,7 +748,7 @@ QString parseMacros(const QString &s)
|
|||
QString result = s;
|
||||
Editor *e = pMainWindow->editorList()->getEditor();
|
||||
|
||||
result.replace("<DEFAULT>", QDir().absolutePath());
|
||||
result.replace("<DEFAULT>", QDir::currentPath());
|
||||
result.replace("<DEVCPP>", pSettings->dirs().executable());
|
||||
result.replace("<DEVCPPVERSION>", DEVCPP_VERSION);
|
||||
result.replace("<EXECPATH>", pSettings->dirs().app());
|
||||
|
|
Loading…
Reference in New Issue