Compare commits

..

2 commits

Author SHA1 Message Date
Imbus
d130907159 Cell now properly differentiates between formula and displayValue 2024-06-13 16:41:02 +02:00
Imbus
6475fa67a0 Refactor Cell and subclasses 2024-06-13 16:28:56 +02:00
6 changed files with 26 additions and 26 deletions

View file

@ -15,8 +15,11 @@ public class BombCell implements Cell {
throw XLException.ERROR_RECURSIVE;
}
public String displayValue() {
public String displayValue(Environment e) {
throw XLException.ERROR_RECURSIVE;
}
public String formula() {
throw XLException.ERROR_RECURSIVE;
}
}

View file

@ -7,5 +7,6 @@ import xl.expr.Environment;
*/
public interface Cell {
public double cellValue(Environment e);
public String displayValue();
public String displayValue(Environment e);
public String formula();
}

View file

@ -15,7 +15,11 @@ public class CommentCell implements Cell {
return 0;
}
public String displayValue() {
public String displayValue(Environment e) {
return "# " + commentText;
}
public String formula() {
return commentText;
}
}

View file

@ -17,10 +17,13 @@ public class ExpressionCell implements Cell {
return expr.value(env);
}
public String displayValue() {
public String displayValue(Environment e) {
return Double.toString(cellValue(e));
}
public String formula() {
return expr.toString();
}
}

View file

@ -58,7 +58,7 @@ public class XLModel extends Observable implements Environment {
status = "Error creating cell";
return;
}
// Tell observers that the model has changed
setChanged();
notifyObservers();
@ -99,7 +99,7 @@ public class XLModel extends Observable implements Environment {
public void save(String path) {
try (XLPrintStream xlPrintStream = new XLPrintStream(path)) {
xlPrintStream.save(map.entrySet());
xlPrintStream.save(this, map.entrySet());
} catch (IOException e) {
status = "Error saving file";
}
@ -107,25 +107,16 @@ public class XLModel extends Observable implements Environment {
public String getAddressValue(String address) {
if (map.containsKey(address)) {
Cell cell = map.get(address);
if (cell instanceof CommentCell) {
return cell.displayValue();
}
return Double.toString(cell.cellValue(this));
return map.get(address).displayValue(this);
}
return "";
}
public String getAddressContent(String address) {
if (map.containsKey(address)) {
Cell cell = map.get(address);
if (cell instanceof CommentCell) {
return "#" + map.get(address).displayValue();
}
return map.get(address).displayValue();
} else {
return "";
return map.get(address).formula();
}
return "";
}
public boolean containsKey(String address) {

View file

@ -3,6 +3,9 @@ package xl.model;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Map.Entry;
import xl.expr.Environment;
import java.util.Set;
/**
@ -14,16 +17,11 @@ public class XLPrintStream extends PrintStream {
super(fileName);
}
public void save(Set<Entry<String, Cell>> set) {
public void save(Environment e, Set<Entry<String, Cell>> set) {
for (Entry<String, Cell> entry : set) {
print(entry.getKey());
print('=');
Cell cell = entry.getValue();
if (cell instanceof CommentCell) {
println("#" + cell.displayValue());
} else {
println(cell.displayValue());
}
println(entry.getValue().displayValue(e));
}
flush();
close();