module ChqEntry; import dwt.DWT; import dwt.widgets.Text; import dwt.widgets.Shell; import dwt.widgets.Display; import dwt.layout.GridLayout; import dwt.events.ModifyEvent; import dwt.events.VerifyEvent; import dwt.events.ModifyListener; import dwt.events.VerifyListener; import tango.io.Stdout; import dwt.dwthelper.Integer; import TextUtil = tango.text.Util; import Float = tango.text.convert.Float; import tango.io.File; import tango.io.stream.TextFileStream; import dwt.graphics.Color; import tango.text.stream.LineIterator; import tango.util.Convert; import Line; debug //note compile with -debug switch on { alias Stdout dbg; } void main () { Display display = new Display (); Shell shell = new Shell (display); shell.setBackground(new Color(display,141,255,238)); shell.setText("Cheque Entry Page"); auto gridLayout = new GridLayout(); gridLayout.numColumns = 1; shell.setLayout(gridLayout); char[][] fields ; char[][][] fcopy ; double balance = 0; //load screen from file foreach (line; new LineIterator!(char) (new FileConduit ("data.csv"))){ Line myline = new Line (shell, DWT.LEFT); //myline.setBackground(new Color(Line,31,133,31)); fields = TextUtil.delimit(line,","); myline.setText(0,fields[0]); myline.setText(1,fields[1]); myline.setText(2,fields[2]); myline.setText(3,fields[3]); myline.setText(4,fields[4]); auto debit = Float.parse(fields[5]); auto credit = Float.parse(fields[6]); balance = balance - debit + credit; if (fields[5]!="0.00")myline.setText (5,fields[5]); //column 5 if (fields[6]!="0.00")myline.setText (6,fields[6]); //column 6 myline.setText (7, to!(char[]) (balance) ); fcopy~=fields; } //add a new line //void addline(){ Line newline = new Line (shell, DWT.LEFT); int rowNo = to!(int)(fields[0]) +1; newline.setText(0 , to!(char[]) (rowNo)); newline.setText(3 , "work out how to edit this line now"); dbg(fcopy[7]).newline; //dbg(newline.getTabList()).newline; newline.setFocus(5); /* newline.addModifyListener(new class ModifyListener { public void modifyText(ModifyEvent e) { Stdout.print("Modified at " ~ to!(char) (e.time)); editline(); writeline(); } }); newline.addVerifyListener(new class VerifyListener { public void verifyText(VerifyEvent e) { if (e.text=="*") { Stdout.print("Cannot type *"); e.doit = false; } } }); if (hasFocus(7)) return; } //edit the new line void editline(){ newline.getText(0,fields[0]); fields[0] ~=","; newline.getText(1,fields[1]); fields[1] ~=","; newline.getText(2,fields[2]); fields[2] ~=","; newline.getText(3,fields[3]); fields[3] ~=","; newline.getText(4,fields[4]); fields[4] ~=","; auto debit = Float.parse(fields[5]); auto credit = Float.parse(fields[6]); balance = balance - debit + credit; if (fields[5]!="0.00")newline.getText (5,fields[5]); //column 5 fields[5] ~=","; if (fields[6]!="0.00")newline.getText (6,fields[6]); //column 6 fields[6] ~=","; newline.setText (7, to!(char[]) (balance) ); fcopy~=fields; auto bytesWritten = newline; } void writeline(){ // open file for writing auto to = new FileConduit ("data.csv", FileConduit.WriteCreate); //save the new line to csv file bytesWritten = to.output.write (fields); } //edit old lines */ shell.pack(); shell.open(); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); }