Spreadsheet: Issue #2402: Don't allow duplicate aliases.

This commit is contained in:
Eivind Kvedalen 2016-01-15 23:37:41 +01:00 committed by wmayer
parent d45a95bf3a
commit 301fcc2ab7
2 changed files with 18 additions and 4 deletions

View File

@ -1130,7 +1130,14 @@ void Sheet::setComputedUnit(CellAddress address, const Base::Unit &unit)
void Sheet::setAlias(CellAddress address, const std::string &alias)
{
cells.setAlias(address, alias);
const Cell * cell = cells.getValueFromAlias(alias);
if (cell != 0)
throw Base::Exception("Alias already defined.");
else
cells.setAlias(address, alias);
}
/**
* @brief Get cell given an alias string
* @param alias Alias for cell

View File

@ -441,14 +441,21 @@ PyObject* SheetPy::setAlias(PyObject *args)
{
CellAddress address;
const char * strAddress;
const char * value;
PyObject * value;
if (!PyArg_ParseTuple(args, "ss:setAlias", &strAddress, &value))
if (!PyArg_ParseTuple(args, "sO:setAlias", &strAddress, &value))
return 0;
try {
address = stringToAddress(strAddress);
getSheetPtr()->setAlias(address, value);
if (PyString_Check(value))
getSheetPtr()->setAlias(address, PyString_AsString(value));
else if (value == Py_None)
getSheetPtr()->setAlias(address, "");
else
throw Base::TypeError("String or None expected");
Py_Return;
}
catch (const Base::Exception & e) {