Skip to content

Commit

Permalink
Added majority of new save button functionality
Browse files Browse the repository at this point in the history
Refs #10672
  • Loading branch information
DanNixon committed Dec 4, 2014
1 parent 65ff2f3 commit 914e33a
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 18 deletions.
103 changes: 87 additions & 16 deletions Code/Mantid/MantidPlot/src/Mantid/MantidDock.cpp
Expand Up @@ -85,10 +85,10 @@ MantidDockWidget::MantidDockWidget(MantidUI *mui, ApplicationWindow *parent) :
layout->addWidget(m_workspaceFilter);
layout->addWidget(m_tree);


m_loadMenu = new QMenu(this);
m_saveMenu = new QMenu(this);

QAction* loadFileAction = new QAction("File",this);
QAction *loadFileAction = new QAction("File",this);
QAction *liveDataAction = new QAction("Live Data",this);
m_loadMapper = new QSignalMapper(this);
m_loadMapper->setMapping(liveDataAction,"StartLiveData");
Expand All @@ -109,7 +109,6 @@ MantidDockWidget::MantidDockWidget(MantidUI *mui, ApplicationWindow *parent) :
createSortMenuActions();
createWorkspaceMenuActions();

connect(m_saveButton,SIGNAL(clicked()),this,SLOT(saveWorkspaces()));
connect(m_deleteButton,SIGNAL(clicked()),this,SLOT(deleteWorkspaces()));
connect(m_tree,SIGNAL(itemClicked(QTreeWidgetItem*, int)),this,SLOT(clickedWorkspace(QTreeWidgetItem*, int)));
connect(m_tree,SIGNAL(itemSelectionChanged()),this,SLOT(workspaceSelected()));
Expand Down Expand Up @@ -819,6 +818,39 @@ void MantidDockWidget::workspaceSelected()
{
QList<QTreeWidgetItem*> selectedItems=m_tree->selectedItems();
if(selectedItems.isEmpty()) return;

// If there are multiple workspaces selected group and save as Nexus
if(selectedItems.length() > 1)
{
connect(m_saveButton, SIGNAL(clicked()), this, SLOT(saveWorkspaceGroup()));

// Don't display as a group
m_saveButton->setMenu(NULL);
}
else
{
// Don't run the save group function when clicked
disconnect(m_saveButton, SIGNAL(clicked()), this, SLOT(saveWorkspaceGroup()));

// Remove all existing save algorithms from list
m_saveMenu->clear();

//TODO: this should be populated based on the workspace type
QAction *saveNexusAction = new QAction("Nexus", this);
saveNexusAction->setData(QVariant("SaveNexus"));
connect(saveNexusAction, SIGNAL(triggered()), this, SLOT(handleShowSaveAlgorithm()));

QAction *saveAsciiV1Action = new QAction("ASCII v1", this);
saveAsciiV1Action->setData(QVariant("SaveAscii.1"));
connect(saveAsciiV1Action, SIGNAL(triggered()), this, SLOT(handleShowSaveAlgorithm()));

m_saveMenu->addAction(saveNexusAction);
m_saveMenu->addAction(saveAsciiV1Action);

// Set the button to show the menu
m_saveButton->setMenu(m_saveMenu);
}

QString wsName=selectedItems[0]->text(0);
if(m_ads.doesExist(wsName.toStdString()))
{
Expand All @@ -829,23 +861,15 @@ void MantidDockWidget::workspaceSelected()
/**
* Save all selected workspaces
*/
void MantidDockWidget::saveWorkspaces()
void MantidDockWidget::saveWorkspaceGroup()
{
QList<QTreeWidgetItem*> items = m_tree->selectedItems();
if(items.empty())
if(items.size() < 2)
return;

// Call same save asction as popup menu for a single workspace
if(items.size() == 1)
{
m_mantidUI->saveNexusWorkspace();
}
else
{
m_saveFolderDialog->setWindowTitle("Select save folder");
m_saveFolderDialog->setLabelText(QFileDialog::Accept, "Select");
m_saveFolderDialog->open(this, SLOT(saveWorkspacesToFolder(const QString &)));
}
m_saveFolderDialog->setWindowTitle("Select save folder");
m_saveFolderDialog->setLabelText(QFileDialog::Accept, "Select");
m_saveFolderDialog->open(this, SLOT(saveWorkspacesToFolder(const QString &)));
}

/**
Expand Down Expand Up @@ -880,6 +904,53 @@ void MantidDockWidget::saveWorkspacesToFolder(const QString &folder)
}
}

/**
* Handles a save algorithm being triggered by the Save menu.
*
* To select a specific algorithm add a QString to the data of the QAction
* in the form ALGORITHM_NAME.VERSION or just ALGORITHM_NAME to use the
* most recent version.
*/
void MantidDockWidget::handleShowSaveAlgorithm()
{
QAction *sendingAction = dynamic_cast<QAction *>(sender());

if(sendingAction)
{
QString wsName = getSelectedWorkspaceName();
QVariant data = sendingAction->data();
QString algorithmName;
int version = -1;

if(data.canConvert<QString>())
{
QStringList splitData = data.toString().split(".");
switch(splitData.length())
{
case 2:
version = splitData[1].toInt();
case 1:
algorithmName = splitData[0];
break;
default:
m_mantidUI->saveNexusWorkspace();
return;
}

QHash<QString,QString> presets;
if(!wsName.isEmpty())
presets["InputWorkspace"] = wsName;

//TODO: need to set version
m_mantidUI->showAlgorithmDialog(algorithmName, presets);
return;
}
}

// If we can't get the type of algorithm this should be we can always fall back on Nexus
m_mantidUI->saveNexusWorkspace();
}

/**
deleteWorkspaces
*/
Expand Down
5 changes: 3 additions & 2 deletions Code/Mantid/MantidPlot/src/Mantid/MantidDock.h
Expand Up @@ -57,7 +57,8 @@ class MantidDockWidget: public QDockWidget

public slots:
void clickedWorkspace(QTreeWidgetItem*, int);
void saveWorkspaces();
void saveWorkspaceGroup();
void handleShowSaveAlgorithm();
void deleteWorkspaces();
void renameWorkspace();
void populateChildData(QTreeWidgetItem* item);
Expand Down Expand Up @@ -120,7 +121,7 @@ private slots:

QPushButton *m_loadButton;
QPushButton *m_saveButton;
QMenu *m_loadMenu, *m_saveToProgram, *m_sortMenu;
QMenu *m_loadMenu, *m_saveToProgram, *m_sortMenu, *m_saveMenu;
QPushButton *m_deleteButton;
QPushButton *m_groupButton;
QPushButton *m_sortButton;
Expand Down

0 comments on commit 914e33a

Please sign in to comment.