TextEditor now saves properly

This commit is contained in:
Lukasz Baldyga committed 2020-10-23 09:05:49 +01:00
1 parent 69a6562482
commit b9324f8619
3 files changed
+148 -25

No files matched your search

@@ -33,17 +33,22 @@ namespace Advanced_Software_Engineering
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container();
this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox1 = new System.Windows.Forms.TextBox();
this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.newFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.runToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.runToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.checkSyntaxToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.label1 = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.menuStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@@ -58,15 +63,18 @@ namespace Advanced_Software_Engineering
this.textBox1.Multiline = true; this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1"; this.textBox1.Name = "textBox1";
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.textBox1.Size = new System.Drawing.Size(602, 524); this.textBox1.Size = new System.Drawing.Size(602, 509);
this.textBox1.TabIndex = 0; this.textBox1.TabIndex = 0;
this.textBox1.WordWrap = false; this.textBox1.WordWrap = false;
this.textBox1.Click += new System.EventHandler(this.textBox1_Click);
this.textBox1.TextChanged += new System.EventHandler(this.handleKeypress);
// //
// menuStrip1 // menuStrip1
// //
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem, this.fileToolStripMenuItem,
this.runToolStripMenuItem, this.runToolStripMenuItem,
this.checkSyntaxToolStripMenuItem,
this.helpToolStripMenuItem}); this.helpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Name = "menuStrip1";
@@ -80,6 +88,7 @@ namespace Advanced_Software_Engineering
this.newFileToolStripMenuItem, this.newFileToolStripMenuItem,
this.openToolStripMenuItem, this.openToolStripMenuItem,
this.saveToolStripMenuItem, this.saveToolStripMenuItem,
this.saveAsToolStripMenuItem,
this.exitToolStripMenuItem}); this.exitToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
@@ -104,6 +113,14 @@ namespace Advanced_Software_Engineering
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
// saveAsToolStripMenuItem
//
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.saveAsToolStripMenuItem.Text = "Save As";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
// //
// exitToolStripMenuItem // exitToolStripMenuItem
// //
@@ -119,6 +136,12 @@ namespace Advanced_Software_Engineering
this.runToolStripMenuItem.Text = "Run"; this.runToolStripMenuItem.Text = "Run";
this.runToolStripMenuItem.Click += new System.EventHandler(this.runToolStripMenuItem_Click); this.runToolStripMenuItem.Click += new System.EventHandler(this.runToolStripMenuItem_Click);
// //
// checkSyntaxToolStripMenuItem
//
this.checkSyntaxToolStripMenuItem.Name = "checkSyntaxToolStripMenuItem";
this.checkSyntaxToolStripMenuItem.Size = new System.Drawing.Size(90, 20);
this.checkSyntaxToolStripMenuItem.Text = "Check Syntax";
//
// helpToolStripMenuItem // helpToolStripMenuItem
// //
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -141,16 +164,31 @@ namespace Advanced_Software_Engineering
this.helpToolStripMenuItem1.Size = new System.Drawing.Size(107, 22); this.helpToolStripMenuItem1.Size = new System.Drawing.Size(107, 22);
this.helpToolStripMenuItem1.Text = "Help"; this.helpToolStripMenuItem1.Text = "Help";
// //
// label1
//
this.label1.AutoSize = true;
this.label1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.label1.Location = new System.Drawing.Point(0, 535);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(0, 13);
this.label1.TabIndex = 2;
//
// timer1
//
this.timer1.Interval = 1000;
//
// Text_Editor // Text_Editor
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(602, 548); this.ClientSize = new System.Drawing.Size(602, 548);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox1); this.Controls.Add(this.textBox1);
this.Controls.Add(this.menuStrip1); this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1; this.MainMenuStrip = this.menuStrip1;
this.Name = "Text_Editor"; this.Name = "Text_Editor";
this.Text = "Advanced Software Engineering - Text Editor"; this.Text = "Advanced Software Engineering - Text Editor";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Text_Editor_FormClosing);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Console_FormClosed); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Console_FormClosed);
this.menuStrip1.ResumeLayout(false); this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout(); this.menuStrip1.PerformLayout();
@@ -172,5 +210,9 @@ namespace Advanced_Software_Engineering
private ToolStripMenuItem helpToolStripMenuItem; private ToolStripMenuItem helpToolStripMenuItem;
private ToolStripMenuItem aboutToolStripMenuItem; private ToolStripMenuItem aboutToolStripMenuItem;
private ToolStripMenuItem helpToolStripMenuItem1; private ToolStripMenuItem helpToolStripMenuItem1;
private ToolStripMenuItem saveAsToolStripMenuItem;
private ToolStripMenuItem checkSyntaxToolStripMenuItem;
private Label label1;
private Timer timer1;
} }
} }
@@ -26,6 +26,7 @@ namespace Advanced_Software_Engineering {
public Text_Editor() { public Text_Editor() {
SettingsAndHelperFunctions.NumberOfWindows++; SettingsAndHelperFunctions.NumberOfWindows++;
InitializeComponent(); InitializeComponent();
UpdateTitle();
} }
public Text_Editor(OpenFileDialog openFile) { public Text_Editor(OpenFileDialog openFile) {
@@ -42,30 +43,106 @@ namespace Advanced_Software_Engineering {
} }
void UpdateTitle() { void UpdateTitle() {
this.Text = DefaultTitleString + " - " + fileName; if (fileName != "") this.Text = DefaultTitleString + " - " + fileName;
else this.Text = DefaultTitleString;
if (unsavedChanges) this.Text = "* " + this.Text + " *"; if (unsavedChanges) this.Text = "* " + this.Text + " *";
} }
private void saveFile() {
if (!okToOverwrite) saveFileAs();
else {
StreamWriter fileStream = new StreamWriter(fileName);
try {
fileStream.Write(textBox1.Text);
unsavedChanges = false;
} catch (Exception e) {
new ErrorWindow("Write Failed!", "The program failed to write the file.", e.Message + "\n" + e.StackTrace, ErrorWindow.ERROR_MESSAGE).Show();
} finally {
fileStream.Close();
UpdateTitle();
}
}
}
private void saveFileAs() {
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.OverwritePrompt = true;
saveFileDialog.DefaultExt = ".txt";
if (fileName != "") saveFileDialog.FileName = fileName;
saveFileDialog.ValidateNames = true;
DialogResult dialogResult = saveFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK) {
StreamWriter fileStream = new StreamWriter(saveFileDialog.OpenFile());
try {
fileStream.Write(textBox1.Text);
unsavedChanges = false;
okToOverwrite = true;
fileName = saveFileDialog.FileName;
} catch (Exception e) {
new ErrorWindow("Write Failed!", "The program failed to write the file.", e.Message + "\n" + e.StackTrace, ErrorWindow.ERROR_MESSAGE).Show();
} finally {
fileStream.Close();
UpdateTitle();
}
}
}
private void updateRowCol() {
int line = textBox1.GetLineFromCharIndex(textBox1.SelectionStart);
int column = textBox1.SelectionStart - textBox1.GetFirstCharIndexFromLine(line);
label1.Text = "row: " + line.ToString() + " col: " + column.ToString();
}
private void handleKeypress() {
updateSaveStatus();
updateRowCol();
}
private void updateSaveStatus() {
if (!unsavedChanges) {
unsavedChanges = true;
UpdateTitle();
}
}
private void handleExit(FormClosingEventArgs e) {
if (unsavedChanges) {
DialogResult dialogResult = MessageBox.Show("You have unsaved work. Would you like to discard your work?", "Unsaved work!", MessageBoxButtons.YesNo, MessageBoxIcon.None);
if (e != null) e.Cancel = dialogResult != DialogResult.Yes;
else Close();
} else Close();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e) {
DialogResult result = DialogResult.Yes;
if (unsavedChanges) {
result = MessageBox.Show("You have unsaved work. Would you like to discard your work and open a new file?", "Unsaved work!", MessageBoxButtons.YesNo, MessageBoxIcon.None);
}
if (result == DialogResult.Yes) {
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK) {
if (newWindow) {
StreamReader fileStream = new StreamReader(openFileDialog.OpenFile());
textBox1.Text = fileStream.ReadToEnd();
UpdateTitle(openFileDialog.FileName);
} else new Text_Editor(openFileDialog).Show();
}
}
}
private void Console_FormClosed(object sender, FormClosedEventArgs e) { private void Console_FormClosed(object sender, FormClosedEventArgs e) {
if (DisplayForm != null && !DisplayForm.IsDisposed) DisplayForm.ReleaseCommandLock(); if (DisplayForm != null && !DisplayForm.IsDisposed) DisplayForm.ReleaseCommandLock();
SettingsAndHelperFunctions.WindowClosed(); SettingsAndHelperFunctions.WindowClosed();
Dispose(); Dispose();
} }
private void newFileToolStripMenuItem_Click(object sender, EventArgs e) {
new Text_Editor().Show();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
new About_Window().Show();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
Close();
}
private void runToolStripMenuItem_Click(object sender, EventArgs e) { private void runToolStripMenuItem_Click(object sender, EventArgs e) {
if(DisplayForm == null || DisplayForm.IsDisposed) { if (DisplayForm == null || DisplayForm.IsDisposed) {
DisplayForm = new Draw_Preview(textBox1.Text); DisplayForm = new Draw_Preview(textBox1.Text);
} else { } else {
Console.WriteLine("Removed all commands"); Console.WriteLine("Removed all commands");
@@ -76,18 +153,19 @@ namespace Advanced_Software_Engineering {
DisplayForm.Focus(); DisplayForm.Focus();
} }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { private void handleKeypress(object sender, EventArgs e) => handleKeypress();
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK) { private void textBox1_Click(object sender, EventArgs e) => updateRowCol();
if (newWindow) { private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) => saveFileAs();
StreamReader fileStream = new StreamReader(openFileDialog.OpenFile()); private void saveToolStripMenuItem_Click(object sender, EventArgs e) => saveFile();
textBox1.Text = fileStream.ReadToEnd();
UpdateTitle(openFileDialog.FileName); private void Text_Editor_FormClosing(object sender, FormClosingEventArgs e) => handleExit(e);
} else new Text_Editor(openFileDialog).Show();
} private void newFileToolStripMenuItem_Click(object sender, EventArgs e) => new Text_Editor().Show();
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) => new About_Window().Show();
private void exitToolStripMenuItem_Click(object sender, EventArgs e) => handleExit(null);
}
} }
} }
@@ -120,6 +120,9 @@
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
</metadata> </metadata>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>132, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>59</value> <value>59</value>
</metadata> </metadata>