added recent files to mupp.
This commit is contained in:
parent
294eaa8fb1
commit
568792dc00
@ -108,7 +108,9 @@ bool PmuppAdminXMLParser::startElement( const QString&, const QString&,
|
|||||||
const QString& qName,
|
const QString& qName,
|
||||||
const QXmlAttributes& )
|
const QXmlAttributes& )
|
||||||
{
|
{
|
||||||
if (qName == "marker") {
|
if (qName == "path_file_name") {
|
||||||
|
fKeyWord = eRecentFile;
|
||||||
|
} else if (qName == "marker") {
|
||||||
fKeyWord = eMarker;
|
fKeyWord = eMarker;
|
||||||
} else if (qName == "color") {
|
} else if (qName == "color") {
|
||||||
fKeyWord = eColor;
|
fKeyWord = eColor;
|
||||||
@ -148,6 +150,9 @@ bool PmuppAdminXMLParser::characters(const QString& str)
|
|||||||
QStringList tok;
|
QStringList tok;
|
||||||
|
|
||||||
switch (fKeyWord) {
|
switch (fKeyWord) {
|
||||||
|
case eRecentFile:
|
||||||
|
fAdmin->addRecentFile(QString(str.toLatin1()).trimmed());
|
||||||
|
break;
|
||||||
case eMarker:
|
case eMarker:
|
||||||
tok = str.split(",", QString::SkipEmptyParts);
|
tok = str.split(",", QString::SkipEmptyParts);
|
||||||
|
|
||||||
@ -330,7 +335,42 @@ PmuppAdmin::PmuppAdmin() : QObject()
|
|||||||
*/
|
*/
|
||||||
PmuppAdmin::~PmuppAdmin()
|
PmuppAdmin::~PmuppAdmin()
|
||||||
{
|
{
|
||||||
// nothing to be done for now
|
saveRecentFiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* <p>Add recent path-file name to the internal ring-buffer.
|
||||||
|
*
|
||||||
|
* \param str recent path-file name to be added
|
||||||
|
*/
|
||||||
|
void PmuppAdmin::addRecentFile(const QString str)
|
||||||
|
{
|
||||||
|
// check if file name is not already present
|
||||||
|
for (int i=0; i<fRecentFile.size(); i++) {
|
||||||
|
if (str == fRecentFile[i])
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fRecentFile.push_front(str);
|
||||||
|
if (fRecentFile.size() > MAX_RECENT_FILES)
|
||||||
|
fRecentFile.resize(MAX_RECENT_FILES);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PmuppAdmin::getRecentFile
|
||||||
|
* @param idx
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
QString PmuppAdmin::getRecentFile(int idx)
|
||||||
|
{
|
||||||
|
QString str("");
|
||||||
|
|
||||||
|
if ((idx >= 0) && (idx < fRecentFile.size()))
|
||||||
|
str = fRecentFile[idx];
|
||||||
|
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
@ -439,6 +479,76 @@ void PmuppAdmin::setColor(int r, int g, int b, QString name)
|
|||||||
fColor.push_back(color);
|
fColor.push_back(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* <p>Merges the recent file ring buffer into mupp_startup.xml and saves it.
|
||||||
|
* If a local copy is present it will be saved there, otherwise the master file
|
||||||
|
* will be used.
|
||||||
|
*/
|
||||||
|
void PmuppAdmin::saveRecentFiles()
|
||||||
|
{
|
||||||
|
// check if mupp_startup.xml is present in the current directory, and if yes, use this file to
|
||||||
|
// save the recent file names otherwise use the "master" mupp_startup.xml
|
||||||
|
|
||||||
|
QString str("");
|
||||||
|
QString fln = QString("./mupp_startup.xml");
|
||||||
|
if (!QFile::exists(fln)) {
|
||||||
|
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||||
|
fln = QString("%1/.musrfit/mupp/mupp_startup.xml").arg(env.value("HOME"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (QFile::exists(fln)) { // administration file present
|
||||||
|
QVector<QString> data;
|
||||||
|
QFile file(fln);
|
||||||
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
cerr << endl << ">> PmuppAdmin::saveRecentFile: **ERROR** Cannot open " << fln.toLatin1().data() << " for reading." << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QTextStream fin(&file);
|
||||||
|
while (!fin.atEnd()) {
|
||||||
|
data.push_back(fin.readLine());
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
// remove <path_file_name> from data
|
||||||
|
for (QVector<QString>::iterator it = data.begin(); it != data.end(); ++it) {
|
||||||
|
if (it->contains("<path_file_name>")) {
|
||||||
|
it = data.erase(it);
|
||||||
|
--it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add recent files
|
||||||
|
int i;
|
||||||
|
for (i=0; i<data.size(); i++) {
|
||||||
|
if (data[i].contains("<recent_files>"))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == data.size()) {
|
||||||
|
cerr << endl << ">> PmuppAdmin::saveRecentFile: **ERROR** " << fln.toLatin1().data() << " seems to be corrupt." << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
for (int j=0; j<fRecentFile.size(); j++) {
|
||||||
|
str = " <path_file_name>" + fRecentFile[j] + "</path_file_name>";
|
||||||
|
data.insert(i++, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
|
cerr << endl << ">> PmuppAdmin::saveRecentFile: **ERROR** Cannot open " << fln.toLatin1().data() << " for reading." << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fin.setDevice(&file);
|
||||||
|
for (int i=0; i<data.size(); i++)
|
||||||
|
fin << data[i] << endl;
|
||||||
|
file.close();
|
||||||
|
} else {
|
||||||
|
QString msg("Failed to write mupp_startup.xml. Neither a local nor a global copy found.");
|
||||||
|
QMessageBox::warning(0, "WARNING", msg, QMessageBox::Ok, QMessageBox::NoButton);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* @brief PmuppAdmin::createMuppStartupFile
|
* @brief PmuppAdmin::createMuppStartupFile
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
#include <QtXml>
|
#include <QtXml>
|
||||||
|
|
||||||
|
#include "mupp.h"
|
||||||
|
|
||||||
class PmuppAdmin;
|
class PmuppAdmin;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@ -96,7 +98,7 @@ class PmuppAdminXMLParser : public QXmlDefaultHandler
|
|||||||
virtual ~PmuppAdminXMLParser() {}
|
virtual ~PmuppAdminXMLParser() {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum EAdminKeyWords {eEmpty, eMarker, eColor};
|
enum EAdminKeyWords {eEmpty, eRecentFile, eMarker, eColor};
|
||||||
|
|
||||||
bool startDocument();
|
bool startDocument();
|
||||||
bool startElement( const QString&, const QString&, const QString& ,
|
bool startElement( const QString&, const QString&, const QString& ,
|
||||||
@ -127,6 +129,10 @@ class PmuppAdmin : public QObject
|
|||||||
PmuppAdmin();
|
PmuppAdmin();
|
||||||
virtual ~PmuppAdmin();
|
virtual ~PmuppAdmin();
|
||||||
|
|
||||||
|
void addRecentFile(const QString str);
|
||||||
|
int getNumRecentFiles() { return fRecentFile.size(); }
|
||||||
|
QString getRecentFile(int idx);
|
||||||
|
|
||||||
int getNoOfMarkers() { return fMarker.size(); }
|
int getNoOfMarkers() { return fMarker.size(); }
|
||||||
QVector<PmuppMarker> getMarkers() { return fMarker; }
|
QVector<PmuppMarker> getMarkers() { return fMarker; }
|
||||||
PmuppMarker getMarker(int idx);
|
PmuppMarker getMarker(int idx);
|
||||||
@ -142,9 +148,12 @@ class PmuppAdmin : public QObject
|
|||||||
private:
|
private:
|
||||||
friend class PmuppAdminXMLParser;
|
friend class PmuppAdminXMLParser;
|
||||||
|
|
||||||
|
QVector<QString> fRecentFile; ///< keep vector of recent path-file names
|
||||||
|
|
||||||
QVector<PmuppMarker> fMarker;
|
QVector<PmuppMarker> fMarker;
|
||||||
QVector<PmuppColor> fColor;
|
QVector<PmuppColor> fColor;
|
||||||
|
|
||||||
|
void saveRecentFiles(); ///< save recent file list
|
||||||
void createMuppStartupFile(); ///< create default mupp_startup.xml
|
void createMuppStartupFile(); ///< create default mupp_startup.xml
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -470,6 +470,15 @@ void PmuppGui::setupFileActions()
|
|||||||
}
|
}
|
||||||
tb->addAction(a);
|
tb->addAction(a);
|
||||||
|
|
||||||
|
fRecentFilesMenu = menu->addMenu( tr("Recent Files") );
|
||||||
|
for (int i=0; i<MAX_RECENT_FILES; i++) {
|
||||||
|
fRecentFilesAction[i] = new QAction(fRecentFilesMenu);
|
||||||
|
fRecentFilesAction[i]->setVisible(false);
|
||||||
|
connect( fRecentFilesAction[i], SIGNAL(triggered()), this, SLOT(fileOpenRecent()));
|
||||||
|
fRecentFilesMenu->addAction(fRecentFilesAction[i]);
|
||||||
|
}
|
||||||
|
fillRecentFiles();
|
||||||
|
|
||||||
a = new QAction( tr( "E&xit" ), this );
|
a = new QAction( tr( "E&xit" ), this );
|
||||||
a->setShortcut( tr("Ctrl+Q") );
|
a->setShortcut( tr("Ctrl+Q") );
|
||||||
a->setStatusTip( tr("Exit Program") );
|
a->setStatusTip( tr("Exit Program") );
|
||||||
@ -580,6 +589,34 @@ void PmuppGui::fileOpen()
|
|||||||
QString errorMsg("");
|
QString errorMsg("");
|
||||||
if (!fParamDataHandler->ReadParamFile(list, errorMsg)) {
|
if (!fParamDataHandler->ReadParamFile(list, errorMsg)) {
|
||||||
QMessageBox::critical(this, "ERROR", errorMsg);
|
QMessageBox::critical(this, "ERROR", errorMsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// populate the recent files
|
||||||
|
if (msrPresent || dbPresent) {
|
||||||
|
for (int i=0; i<list.size(); i++) {
|
||||||
|
fAdmin->addRecentFile(list[i]); // keep it in admin
|
||||||
|
fillRecentFiles(); // update menu
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PmuppGui::fileOpenRecent
|
||||||
|
*/
|
||||||
|
void PmuppGui::fileOpenRecent()
|
||||||
|
{
|
||||||
|
QAction *action = qobject_cast<QAction *>(sender());
|
||||||
|
|
||||||
|
if (action) {
|
||||||
|
QStringList fln;
|
||||||
|
fln << action->text();
|
||||||
|
QString errorMsg("");
|
||||||
|
if (!fParamDataHandler->ReadParamFile(fln, errorMsg)) {
|
||||||
|
QMessageBox::critical(this, "ERROR", errorMsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -727,6 +764,18 @@ void PmuppGui::getTheme()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* <p>fill the recent file list in the menu.
|
||||||
|
*/
|
||||||
|
void PmuppGui::fillRecentFiles()
|
||||||
|
{
|
||||||
|
for (int i=0; i<fAdmin->getNumRecentFiles(); i++) {
|
||||||
|
fRecentFilesAction[i]->setText(fAdmin->getRecentFile(i));
|
||||||
|
fRecentFilesAction[i]->setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* @brief PmuppGui::readCmdHistory
|
* @brief PmuppGui::readCmdHistory
|
||||||
|
@ -109,6 +109,7 @@ public:
|
|||||||
public slots:
|
public slots:
|
||||||
void aboutToQuit();
|
void aboutToQuit();
|
||||||
void fileOpen();
|
void fileOpen();
|
||||||
|
void fileOpenRecent();
|
||||||
void fileExit();
|
void fileExit();
|
||||||
|
|
||||||
void toolDumpCollections();
|
void toolDumpCollections();
|
||||||
@ -139,6 +140,9 @@ private:
|
|||||||
|
|
||||||
QWidget *fCentralWidget;
|
QWidget *fCentralWidget;
|
||||||
|
|
||||||
|
QMenu *fRecentFilesMenu; ///< recent file menu
|
||||||
|
QAction *fRecentFilesAction[MAX_RECENT_FILES]; ///< array of the recent file actions
|
||||||
|
|
||||||
QBoxLayout *fBoxLayout_Main; // top->bottom (0)
|
QBoxLayout *fBoxLayout_Main; // top->bottom (0)
|
||||||
QBoxLayout *fBoxLayout_Top; // left->right (1)
|
QBoxLayout *fBoxLayout_Top; // left->right (1)
|
||||||
QGridLayout *fGridLayout_Left; // 2 columns, 3 rows
|
QGridLayout *fGridLayout_Left; // 2 columns, 3 rows
|
||||||
@ -174,6 +178,8 @@ private:
|
|||||||
|
|
||||||
void getTheme();
|
void getTheme();
|
||||||
|
|
||||||
|
void fillRecentFiles();
|
||||||
|
|
||||||
void readCmdHistory();
|
void readCmdHistory();
|
||||||
void writeCmdHistory();
|
void writeCmdHistory();
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
#include <sys/msg.h>
|
#include <sys/msg.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#define MAX_RECENT_FILES 5
|
||||||
|
|
||||||
#define PMUPP_MAX_MTEXT 512
|
#define PMUPP_MAX_MTEXT 512
|
||||||
|
|
||||||
struct mbuf {
|
struct mbuf {
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<mupp xmlns="http://lmu.web.psi.ch/musrfit/user/MUSR/WebHome.html">
|
<mupp xmlns="http://lmu.web.psi.ch/musrfit/user/MUSR/WebHome.html">
|
||||||
<comment>
|
<comment>
|
||||||
Defines default settings for the mupp helper program for musrfit
|
Defines default settings for the mupp helper program for musrfit
|
||||||
</comment>
|
</comment>
|
||||||
|
<recent_files>
|
||||||
|
</recent_files>
|
||||||
<root_settings>
|
<root_settings>
|
||||||
<marker_list>
|
<marker_list>
|
||||||
<!-- Root marker numbers -->
|
<!-- Root marker numbers -->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user