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 doesn't 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;