4#include "RabbitRecentMenu.h"
9#include "RabbitCommonDir.h"
13static const qint32 RecentFilesMenuMagic = 0xff;
18 m_format(QLatin1String(
"%d %s")),
19 m_DisableSaveState(false),
22 bool check = connect(
this, SIGNAL(triggered(QAction*)),
23 this, SLOT(menuTriggered(QAction*)));
25 check = connect(
this, SIGNAL(aboutToShow()),
26 this, SLOT(updateRecentFileActions()));
28 check = connect(
this, SIGNAL(sigSaveState()),
this, SLOT(slotSaveState()));
32 if(!m_DisableSaveState)
35 RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
36 QSettings::IniFormat);
37 restoreState(settings.value(
"RecentOpen").toByteArray());
53void CRecentMenu::addRecentFile(
const QString &fileName,
const QString &title)
55 _Content content(title, fileName);
57 m_OpenContent.removeAll(content);
58 m_OpenContent.prepend(content);
60 while (m_OpenContent.size() > maxCount())
61 m_OpenContent.removeLast();
70 m_OpenContent.clear();
77 if(m_maxCount == count)
return;
83int CRecentMenu::maxCount()
const
90 if (m_format == format)
return;
96const QString& CRecentMenu::format()
const
103 m_DisableSaveState = disable;
112 QDataStream stream(&data, QIODevice::WriteOnly);
114 stream << qint32(RecentFilesMenuMagic);
115 stream << qint32(version);
117 stream << m_maxCount;
118 stream << m_OpenContent;
125 QByteArray sd = state;
126 QDataStream stream(&sd, QIODevice::ReadOnly);
132 if (magic != RecentFilesMenuMagic)
138 stream >> m_maxCount;
141 stream >> m_OpenContent;
148void CRecentMenu::menuTriggered(QAction* action)
150 if (action->data().isValid())
154void CRecentMenu::updateRecentFileActions()
156 if(!m_bUpdate)
return;
158 int numRecentFiles = qMin(m_OpenContent.size(), maxCount());
162 for (
int i = 0; i < numRecentFiles; ++i) {
163 QString szdName = m_OpenContent[i].m_szTitle;
164 QString szFile = m_OpenContent[i].m_szFile;
165 if(szdName.isEmpty())
166 szdName = QFileInfo(szFile).fileName();
168 QString text = m_format;
169 text.replace(QLatin1String(
"%d"), QString::number(i + 1));
170 text.replace(QLatin1String(
"%s"), szdName);
172 QAction* recentFileAct = addAction(text);
173 QFileInfo fi(szFile);
174 recentFileAct->setEnabled(fi.exists());
175 recentFileAct->setData(szFile);
178 szMsg = tr(
"Recent open: ") + szFile;
180 szMsg = tr(
"The file is not exists. ") + szFile;
181 recentFileAct->setToolTip(szMsg);
182 recentFileAct->setStatusTip(szMsg);
183 recentFileAct->setWhatsThis(szMsg);
186 addAction(tr(
"Clear Menu"),
this, SLOT(
clearMenu()));
188 setEnabled(numRecentFiles > 0);
191void CRecentMenu::slotSaveState()
193 if(m_DisableSaveState)
197 RabbitCommon::CDir::Instance()->GetFileUserConfigure(),
198 QSettings::IniFormat);
199 settings.setValue(
"RecentOpen",
saveState());
202QDataStream& operator<< (QDataStream& d,
const CRecentMenu::_Content& c)
204 d << c.m_szFile << c.m_szTitle;
208QDataStream& operator>> (QDataStream& d, CRecentMenu::_Content& c)
210 d >> c.m_szFile >> c.m_szTitle;