0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 08:34:38 +03:00

Recent files menu item has been added

This commit is contained in:
Arin Alexander 2016-02-19 04:03:48 +03:00
parent a3de7d5a44
commit efb37aedc7
2 changed files with 81 additions and 1 deletions

View File

@ -401,7 +401,10 @@ void ReportDesignWindow::createMainMenu()
m_editMenu->addAction(m_settingsAction); m_editMenu->addAction(m_settingsAction);
m_infoMenu = menuBar()->addMenu(tr("Info")); m_infoMenu = menuBar()->addMenu(tr("Info"));
m_infoMenu->addAction(m_aboutAction); m_infoMenu->addAction(m_aboutAction);
m_recentFilesMenu = m_fileMenu->addMenu(tr("Recent Files"));
m_recentFilesSignalMap = new QSignalMapper(this);
connect(m_recentFilesSignalMap,SIGNAL(mapped(QString)),this,SLOT(slotLoadRecentFile(QString)));
m_recentFilesMenu->setDisabled(m_recentFiles.isEmpty());
} }
void ReportDesignWindow::initReportEditor(ReportEnginePrivate* report) void ReportDesignWindow::initReportEditor(ReportEnginePrivate* report)
@ -510,9 +513,34 @@ void ReportDesignWindow::writeState()
settings()->setValue("State",saveState()); settings()->setValue("State",saveState());
settings()->setValue("InspectorFirsColumnWidth",m_objectInspector->columnWidth(0)); settings()->setValue("InspectorFirsColumnWidth",m_objectInspector->columnWidth(0));
settings()->endGroup(); settings()->endGroup();
settings()->beginGroup("RecentFiles");
settings()->setValue("filesCount",m_recentFiles.count());
QMap<QString, QDateTime>::const_iterator it = m_recentFiles.constBegin();
int count = 0;
while (it != m_recentFiles.constEnd()) {
settings()->setValue("fileName"+QString::number(count),it.key());
settings()->setValue("fileDate"+QString::number(count),it.value());
++count;
++it;
}
settings()->endGroup();
m_reportDesignWidget->saveState(settings()); m_reportDesignWidget->saveState(settings());
} }
void ReportDesignWindow::createRecentFilesMenu()
{
if (m_recentFilesMenu){
m_recentFilesMenu->clear();
foreach(QString fileName, m_recentFiles.keys()){
QAction* tmpAction = new QAction(QIcon(":/report/images/newReport"),fileName,this);
connect(tmpAction,SIGNAL(triggered()), m_recentFilesSignalMap, SLOT(map()));
m_recentFilesSignalMap->setMapping(tmpAction,fileName);
m_recentFilesMenu->addAction(tmpAction);
}
}
m_recentFilesMenu->setDisabled(m_recentFiles.isEmpty());
}
void ReportDesignWindow::restoreSetting() void ReportDesignWindow::restoreSetting()
{ {
settings()->beginGroup("DesignerWindow"); settings()->beginGroup("DesignerWindow");
@ -539,9 +567,25 @@ void ReportDesignWindow::restoreSetting()
if (v.isValid()){ if (v.isValid()){
m_objectInspector->setColumnWidth(0,v.toInt()); m_objectInspector->setColumnWidth(0,v.toInt());
} }
settings()->endGroup(); settings()->endGroup();
settings()->beginGroup("RecentFiles");
int filesCount = settings()->value("filesCount").toInt();
QStringList keys = settings()->childKeys();
for(int i=0;i<filesCount;i++){
if (keys.contains("fileName"+QString::number(i))){
m_recentFiles[settings()->value("fileName"+QString::number(i)).toString()] =
settings()->value("fileData"+QString::number(i)).toDateTime();
} else break;
}
settings()->endGroup();
m_reportDesignWidget->loadState(settings()); m_reportDesignWidget->loadState(settings());
m_useGridAction->setChecked(m_reportDesignWidget->useGrid()); m_useGridAction->setChecked(m_reportDesignWidget->useGrid());
createRecentFilesMenu();
} }
bool ReportDesignWindow::checkNeedToSave() bool ReportDesignWindow::checkNeedToSave()
@ -778,6 +822,21 @@ void ReportDesignWindow::slotLoadReport()
updateRedoUndo(); updateRedoUndo();
unsetCursor(); unsetCursor();
setWindowTitle(m_reportDesignWidget->report()->reportName() + " - Lime Report Designer"); setWindowTitle(m_reportDesignWidget->report()->reportName() + " - Lime Report Designer");
if (!m_recentFiles.contains(fileName)){
if (m_recentFiles.count()==10){
QMap<QString, QDateTime>::const_iterator it = m_recentFiles.constBegin();
QDateTime minDate = QDateTime::currentDateTime();
while (it != m_recentFiles.constEnd()) {
if (minDate>it.value()) minDate = it.value();
++it;
}
m_recentFiles.remove(m_recentFiles.key(minDate));
}
m_recentFiles.insert(fileName,QDateTime::currentDateTime());
} else {
m_recentFiles[fileName] = QDateTime::currentDateTime();
}
createRecentFilesMenu();
} }
} }
@ -976,6 +1035,22 @@ void ReportDesignWindow::slotUseGrid(bool value)
m_reportDesignWidget->setUseGrid(value); m_reportDesignWidget->setUseGrid(value);
} }
void ReportDesignWindow::slotLoadRecentFile(const QString fileName)
{
if (checkNeedToSave()){
QApplication::processEvents();
setCursor(Qt::WaitCursor);
m_reportDesignWidget->clear();
m_reportDesignWidget->loadFromFile(fileName);
m_lblReportName->setText(fileName);
m_propertyModel->setObject(0);
updateRedoUndo();
unsetCursor();
setWindowTitle(m_reportDesignWidget->report()->reportName() + " - Lime Report Designer");
m_recentFiles[fileName] = QDateTime::currentDateTime();
}
}
void ReportDesignWindow::closeEvent(QCloseEvent * event) void ReportDesignWindow::closeEvent(QCloseEvent * event)
{ {
if (checkNeedToSave()){ if (checkNeedToSave()){

View File

@ -111,6 +111,7 @@ private slots:
void slotHideRightPanel(bool value); void slotHideRightPanel(bool value);
void slotEditSettings(); void slotEditSettings();
void slotUseGrid(bool value); void slotUseGrid(bool value);
void slotLoadRecentFile(const QString fileName);
protected: protected:
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
void resizeEvent(QResizeEvent *); void resizeEvent(QResizeEvent *);
@ -132,6 +133,7 @@ private:
void startNewReport(); void startNewReport();
void writePosition(); void writePosition();
void writeState(); void writeState();
void createRecentFilesMenu();
private: private:
static ReportDesignWindow* m_instance; static ReportDesignWindow* m_instance;
@ -186,8 +188,10 @@ private:
QAction* m_addHLayout; QAction* m_addHLayout;
QAction* m_hideLeftPanel; QAction* m_hideLeftPanel;
QAction* m_hideRightPanel; QAction* m_hideRightPanel;
QMenu* m_recentFilesMenu;
QSignalMapper* m_bandsAddSignalsMap; QSignalMapper* m_bandsAddSignalsMap;
QSignalMapper* m_recentFilesSignalMap;
ObjectInspectorWidget* m_objectInspector; ObjectInspectorWidget* m_objectInspector;
QObjectPropertyModel* m_propertyModel; QObjectPropertyModel* m_propertyModel;
@ -214,6 +218,7 @@ private:
ValidatorIntf* m_validator; ValidatorIntf* m_validator;
QProgressDialog* m_progressDialog; QProgressDialog* m_progressDialog;
bool m_showProgressDialog; bool m_showProgressDialog;
QMap<QString,QDateTime> m_recentFiles;
}; };
class ObjectNameValidator : public ValidatorIntf{ class ObjectNameValidator : public ValidatorIntf{