ui: Recent projects in menu

add a recent projects menu in the project menu
This commit is contained in:
Andreas Stallinger
2015-11-13 22:53:37 +01:00
parent 7fce4cfae6
commit fc816240cb
5 changed files with 76 additions and 4 deletions
+1
View File
@@ -24,3 +24,4 @@
/ide_plugins/vs/vs2012/CoatiPlugin/CoatiPlugin/obj
*.sqlite
*.swp
+65 -3
View File
@@ -12,6 +12,7 @@
#include "component/view/CompositeView.h"
#include "qt/view/QtViewWidgetWrapper.h"
#include "settings/ApplicationSettings.h"
#include "utility/file/FileSystem.h"
#include "utility/logging/logging.h"
#include "utility/messaging/type/MessageFind.h"
#include "utility/messaging/type/MessageInterruptTasks.h"
@@ -42,7 +43,6 @@ void QtViewToggle::toggledByUI()
dynamic_cast<QtMainWindow*>(parent())->toggleView(m_view, false);
}
QtMainWindow::QtMainWindow()
: m_startScreenWasVisible(false)
{
@@ -55,6 +55,8 @@ QtMainWindow::QtMainWindow()
QApplication::setOverrideCursor(Qt::ArrowCursor);
m_recentProjectAction = new QAction*[ApplicationSettings::MaximalAmountOfRecentProjects];
setupProjectMenu();
setupEditMenu();
setupViewMenu();
@@ -188,8 +190,16 @@ bool QtMainWindow::event(QEvent* event)
void QtMainWindow::about()
{
hideScreens();
m_aboutWindow = std::make_shared<QtAbout>(this);
m_aboutWindow->setup();
if (!m_aboutWindow)
{
m_aboutWindow = std::make_shared<QtAbout>(this);
m_aboutWindow->setup();
connect(m_aboutWindow.get(), SIGNAL(finished()), this, SLOT(closeScreens()));
connect(m_aboutWindow.get(), SIGNAL(canceled()), this, SLOT(restoreScreens()));
}
m_aboutWindow->show();
}
@@ -421,10 +431,62 @@ void QtMainWindow::setupProjectMenu()
menu->addSeparator();
QMenu *recentProjectMenu = new QMenu(tr("Recent Project"));
menu->addMenu(recentProjectMenu);
for (int i = 0; i < ApplicationSettings::MaximalAmountOfRecentProjects; ++i)
{
m_recentProjectAction[i] = new QAction(this);
m_recentProjectAction[i]->setVisible(false);
connect(m_recentProjectAction[i], SIGNAL(triggered()),
this, SLOT(openRecentProject()));
recentProjectMenu->addAction(m_recentProjectAction[i]);
}
updateRecentProjectMenu();
menu->addMenu(recentProjectMenu);
menu->addSeparator();
menu->addAction(tr("&Close Window"), this, SLOT(closeWindow()), QKeySequence::Close);
menu->addAction(tr("E&xit"), QCoreApplication::instance(), SLOT(quit()), QKeySequence::Quit);
}
void QtMainWindow::openRecentProject()
{
QAction *action = qobject_cast<QAction *>(sender());
if (action)
{
openProject(action->data().toString());
}
}
void QtMainWindow::updateRecentProjectMenu()
{
std::vector<FilePath> recentProjects = ApplicationSettings::getInstance()->getRecentProjects();
for (size_t i = 0; i < ApplicationSettings::MaximalAmountOfRecentProjects; i++)
{
if(i < recentProjects.size()-1)
{
FilePath project = recentProjects[i];
m_recentProjectAction[i]->setVisible(true);
if (project.exists())
{
m_recentProjectAction[i]->setText(FileSystem::fileName(project.str()).c_str());
m_recentProjectAction[i]->setData(project.str().c_str());
}
else
{
m_recentProjectAction[i]->setDisabled(true);
}
}
else
{
m_recentProjectAction[i]->setVisible(false);
}
}
}
void QtMainWindow::showLicenses()
{
hideScreens();
+4
View File
@@ -66,6 +66,7 @@ public slots:
void newProject();
void openProject(const QString &path = QString());
void editProject();
void openRecentProject();
void find();
void closeWindow();
@@ -96,8 +97,10 @@ private:
QtViewToggle* toggle;
};
void setupEditMenu();
void setupProjectMenu();
void updateRecentProjectMenu();
void setupViewMenu();
void setupHelpMenu();
@@ -108,6 +111,7 @@ private:
std::vector<DockWidget> m_dockWidgets;
QMenu* m_viewMenu;
QAction* m_viewSeparator;
QAction** m_recentProjectAction;
std::shared_ptr<QtApplicationSettingsScreen> m_applicationSettingsScreen;
std::shared_ptr<QtStartScreen> m_startScreen;
+1 -1
View File
@@ -60,7 +60,7 @@ void QtStartScreen::setup()
int position = 290;
QIcon cpp_icon("data/gui/startscreen/icon_cpp.png");
std::vector<FilePath> recentProjects = ApplicationSettings::getInstance()->getRecentProjects();
for (size_t i = 0; i < recentProjects.size() && i < 7; i++)
for (size_t i = 0; i < recentProjects.size() && i < ApplicationSettings::MaximalAmountOfRecentProjects; i++)
{
FilePath project = recentProjects[i];
if (project.exists())
+5
View File
@@ -14,6 +14,11 @@ public:
std::string getStartupProjectFilePath() const;
enum
{
MaximalAmountOfRecentProjects = 7
};
// source
std::vector<FilePath> getHeaderSearchPaths() const;
bool setHeaderSearchPaths(const std::vector<FilePath>& headerSearchPaths);