From 6faa092c1ad21dc87d1da0a193a883484b274257 Mon Sep 17 00:00:00 2001 From: Abdur-Raheem Idowu Date: Sat, 14 Dec 2019 21:05:13 +0000 Subject: [PATCH 1/5] Now shows warning before closing unsaved note --- source/NoteWindow.cpp | 46 +++++++++++++++++++++++++++++++++++-------- source/NoteWindow.h | 1 + 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/source/NoteWindow.cpp b/source/NoteWindow.cpp index 6bf9732..135ab4f 100644 --- a/source/NoteWindow.cpp +++ b/source/NoteWindow.cpp @@ -84,6 +84,7 @@ NoteWindow::NoteWindow(int32 id) entry_ref *directory = NULL; BRefFilter *refFilter = NULL; BString title("Untitled Note "); + bool unsaved = false; // Initialize the messenger: the handler is the window itself fMessenger = BMessenger(this); @@ -520,6 +521,8 @@ status_t NoteWindow :: Save(BMessage *message) { delete fSaveMessage; fSaveMessage = new BMessage(*message); } + + unsaved = false; return err; } @@ -748,12 +751,12 @@ void NoteWindow :: MessageReceived(BMessage* message) { } break; - - // Close the application + + //Close the application case QUIT_APPL: { - - Quit(); - + + QuitRequested(); + } break; @@ -819,6 +822,8 @@ void NoteWindow :: MessageReceived(BMessage* message) { fUndoItem -> SetEnabled(true); fRedoFlag = false; } + + unsaved = true; } break; @@ -829,6 +834,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fNoteText -> GetFontAndColor(&font, &sameProperties, &sameColor); font.SetSize(fontSize); fNoteText -> SetFontAndColor (&font, B_FONT_SIZE); + unsaved = true; } } @@ -847,6 +853,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { // Setting a different color for the font fNoteText -> GetFontAndColor(&font, &sameProperties); fNoteText -> SetFontAndColor(&font,0,&colore); + unsaved = true; } break; @@ -862,6 +869,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fCurrentFont = static_cast (ptr); fontFamily = fCurrentFont -> Label(); SetFontStyle (fontFamily, fontStyle); + unsaved = true; } break; @@ -884,6 +892,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fontFamily = fCurrentFont -> Label(); } SetFontStyle (fontFamily, fontStyle); + unsaved = true; } break; @@ -1035,6 +1044,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { message->FindInt8("blue", &c); colore.blue = (uint8)c; fNoteView -> SetBackgroundColor(colore); + unsaved = true; } break; @@ -1245,9 +1255,29 @@ void NoteWindow :: MessageReceived(BMessage* message) { // Closing the window bool NoteWindow :: QuitRequested(){ - - Quit(); - return(true); + + if (unsaved) { + BAlert* alert = new BAlert("Close and save dialog", "Save changes before closing?", + "Cancel", "Don't Save", "Save first", B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); + alert->SetShortcut(0, B_ESCAPE); + int32 button_index = alert->Go(); + switch (button_index) { + case 0: + break; + case 1: + Quit(); + break; + case 2: + if (!fSaveMessage){ + fSavePanel -> Show(); + } else { + Save(fSaveMessage); + } + break; + } + } else { + Quit(); + } } // Function that quits the window diff --git a/source/NoteWindow.h b/source/NoteWindow.h index fe307c2..bfe278d 100644 --- a/source/NoteWindow.h +++ b/source/NoteWindow.h @@ -112,6 +112,7 @@ class NoteWindow : public BWindow { bool fCanUndo; bool fCanRedo; bool fRedoFlag; + bool unsaved; // Data structure AlarmData fData; From 4ec36c01c52a123e6422171a84ba336322a7534f Mon Sep 17 00:00:00 2001 From: Raheem Idowu Date: Sun, 15 Dec 2019 08:06:04 +0000 Subject: [PATCH 2/5] Now follows Haiku Code guidelines (I think) --- source/NoteWindow.cpp | 30 ++++++++++++++++-------------- source/NoteWindow.h | 4 +++- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/source/NoteWindow.cpp b/source/NoteWindow.cpp index 135ab4f..b5e01a6 100644 --- a/source/NoteWindow.cpp +++ b/source/NoteWindow.cpp @@ -84,7 +84,6 @@ NoteWindow::NoteWindow(int32 id) entry_ref *directory = NULL; BRefFilter *refFilter = NULL; BString title("Untitled Note "); - bool unsaved = false; // Initialize the messenger: the handler is the window itself fMessenger = BMessenger(this); @@ -522,7 +521,7 @@ status_t NoteWindow :: Save(BMessage *message) { fSaveMessage = new BMessage(*message); } - unsaved = false; + fIsDirty = false; return err; } @@ -823,7 +822,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fRedoFlag = false; } - unsaved = true; + fIsDirty = true; } break; @@ -834,7 +833,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fNoteText -> GetFontAndColor(&font, &sameProperties, &sameColor); font.SetSize(fontSize); fNoteText -> SetFontAndColor (&font, B_FONT_SIZE); - unsaved = true; + fIsDirty = true; } } @@ -853,7 +852,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { // Setting a different color for the font fNoteText -> GetFontAndColor(&font, &sameProperties); fNoteText -> SetFontAndColor(&font,0,&colore); - unsaved = true; + fIsDirty = true; } break; @@ -869,7 +868,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fCurrentFont = static_cast (ptr); fontFamily = fCurrentFont -> Label(); SetFontStyle (fontFamily, fontStyle); - unsaved = true; + fIsDirty = true; } break; @@ -892,7 +891,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { fontFamily = fCurrentFont -> Label(); } SetFontStyle (fontFamily, fontStyle); - unsaved = true; + fIsDirty = true; } break; @@ -1044,7 +1043,7 @@ void NoteWindow :: MessageReceived(BMessage* message) { message->FindInt8("blue", &c); colore.blue = (uint8)c; fNoteView -> SetBackgroundColor(colore); - unsaved = true; + fIsDirty = true; } break; @@ -1255,12 +1254,15 @@ void NoteWindow :: MessageReceived(BMessage* message) { // Closing the window bool NoteWindow :: QuitRequested(){ - - if (unsaved) { - BAlert* alert = new BAlert("Close and save dialog", "Save changes before closing?", - "Cancel", "Don't Save", "Save first", B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); - alert->SetShortcut(0, B_ESCAPE); - int32 button_index = alert->Go(); + + //Show an alert if the note has not been saved + if (fIsDirty) { + BAlert* saveAlert = new BAlert("Close and save dialog", + "Save changes before closing?","Cancel", + "Don't Save", "Save first", + B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); + saveAlert->SetShortcut(0, B_ESCAPE); + int32 button_index = saveAlert->Go(); switch (button_index) { case 0: break; diff --git a/source/NoteWindow.h b/source/NoteWindow.h index bfe278d..8147fe8 100644 --- a/source/NoteWindow.h +++ b/source/NoteWindow.h @@ -112,7 +112,9 @@ class NoteWindow : public BWindow { bool fCanUndo; bool fCanRedo; bool fRedoFlag; - bool unsaved; + + // Saved flag + bool fIsDirty; // Data structure AlarmData fData; From 13eb9317888e1b2c76f9d072c8f02037ff336bd1 Mon Sep 17 00:00:00 2001 From: Raheem Idowu Date: Sun, 15 Dec 2019 10:15:21 +0000 Subject: [PATCH 3/5] more corrections --- source/NoteWindow.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/source/NoteWindow.cpp b/source/NoteWindow.cpp index b5e01a6..1467b2a 100644 --- a/source/NoteWindow.cpp +++ b/source/NoteWindow.cpp @@ -750,12 +750,12 @@ void NoteWindow :: MessageReceived(BMessage* message) { } break; - + //Close the application case QUIT_APPL: { - + QuitRequested(); - + } break; @@ -1259,7 +1259,7 @@ bool NoteWindow :: QuitRequested(){ if (fIsDirty) { BAlert* saveAlert = new BAlert("Close and save dialog", "Save changes before closing?","Cancel", - "Don't Save", "Save first", + "Don't save", "Save first", B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); saveAlert->SetShortcut(0, B_ESCAPE); int32 button_index = saveAlert->Go(); @@ -1270,16 +1270,14 @@ bool NoteWindow :: QuitRequested(){ Quit(); break; case 2: - if (!fSaveMessage){ + if (!fSaveMessage) fSavePanel -> Show(); - } else { + else Save(fSaveMessage); - } break; } - } else { + } else Quit(); - } } // Function that quits the window From 21ab860bfc0e35c53a65c9be968b8e6435890521 Mon Sep 17 00:00:00 2001 From: Raheem Idowu Date: Sun, 15 Dec 2019 13:26:12 +0000 Subject: [PATCH 4/5] Made it more consistent --- source/NoteWindow.cpp | 8 ++++++-- source/NoteWindow.h | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/source/NoteWindow.cpp b/source/NoteWindow.cpp index 1467b2a..ebfbdcb 100644 --- a/source/NoteWindow.cpp +++ b/source/NoteWindow.cpp @@ -265,6 +265,7 @@ void NoteWindow :: InitWindow(){ yellow = {254,254,92}, color; rgb_color colors[] = {black, red, green, blue, yellow}; + fQuitAfterSave = false; //Initialize the fSaveMessage fSaveMessage = NULL; @@ -522,6 +523,8 @@ status_t NoteWindow :: Save(BMessage *message) { } fIsDirty = false; + if (fQuitAfterSave) + QuitRequested(); return err; } @@ -1259,7 +1262,7 @@ bool NoteWindow :: QuitRequested(){ if (fIsDirty) { BAlert* saveAlert = new BAlert("Close and save dialog", "Save changes before closing?","Cancel", - "Don't save", "Save first", + "Don't save", "Save", B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); saveAlert->SetShortcut(0, B_ESCAPE); int32 button_index = saveAlert->Go(); @@ -1270,12 +1273,13 @@ bool NoteWindow :: QuitRequested(){ Quit(); break; case 2: + fQuitAfterSave = true; if (!fSaveMessage) fSavePanel -> Show(); else Save(fSaveMessage); break; - } + } } else Quit(); } diff --git a/source/NoteWindow.h b/source/NoteWindow.h index 8147fe8..3d5db45 100644 --- a/source/NoteWindow.h +++ b/source/NoteWindow.h @@ -116,6 +116,9 @@ class NoteWindow : public BWindow { // Saved flag bool fIsDirty; + // Quit after successful save flag + bool fQuitAfterSave; + // Data structure AlarmData fData; From 9196f1c2288e7bf2e6d87957f4e19602b8347b16 Mon Sep 17 00:00:00 2001 From: Raheem Idowu Date: Sun, 15 Dec 2019 18:26:03 +0000 Subject: [PATCH 5/5] hopefully the last one... --- source/NoteWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/NoteWindow.cpp b/source/NoteWindow.cpp index ebfbdcb..a9ef54e 100644 --- a/source/NoteWindow.cpp +++ b/source/NoteWindow.cpp @@ -521,7 +521,7 @@ status_t NoteWindow :: Save(BMessage *message) { delete fSaveMessage; fSaveMessage = new BMessage(*message); } - + fIsDirty = false; if (fQuitAfterSave) QuitRequested();