From ed48868f638d5129cdd21b59f36e8e227a05aaaa Mon Sep 17 00:00:00 2001 From: shatty Date: Tue, 5 Nov 2002 09:24:25 +0000 Subject: [PATCH] style cleanup ; undo, revert, redo, save, quit functions fixed up ; no more extra windows ; quit when all windows are closed ; fix grey lines when scrolling git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1848 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/stylededit/Constants.h | 12 +- src/apps/stylededit/StyledEditApp.cpp | 110 ++- src/apps/stylededit/StyledEditApp.h | 44 +- src/apps/stylededit/StyledEditView.cpp | 100 +- src/apps/stylededit/StyledEditView.h | 44 +- src/apps/stylededit/StyledEditWindow.cpp | 1145 +++++++++++----------- src/apps/stylededit/StyledEditWindow.h | 139 ++- 7 files changed, 778 insertions(+), 816 deletions(-) diff --git a/src/apps/stylededit/Constants.h b/src/apps/stylededit/Constants.h index c52f337bf2..2879620851 100644 --- a/src/apps/stylededit/Constants.h +++ b/src/apps/stylededit/Constants.h @@ -2,13 +2,8 @@ #ifndef CONSTANTS_H #define CONSTANTS_H -#ifndef _GRAPHICS_DEFS_H #include -#endif - -#ifndef _SUPPORT_DEFS_H #include -#endif //See if this takes care of some problems with closing the application //by clicking the windowtab @@ -17,7 +12,6 @@ //seems to work, 021021 #define APP_SIGNATURE "application/x-vnd.obos.styled-edit" -const float MENU_BAR_HEIGHT= 19.0; const float TEXT_INSET= 3.0; /*Messages for window registry with application*/ @@ -73,8 +67,4 @@ const uint32 DISABLE_ITEMS ='DIit'; const uint32 CHANGE_WINDOW ='CHwi'; const uint32 TEXT_CHANGED ='TEch'; - -#endif - - - +#endif // CONSTANTS_H diff --git a/src/apps/stylededit/StyledEditApp.cpp b/src/apps/stylededit/StyledEditApp.cpp index ba6edc7358..be0d4e2f0c 100644 --- a/src/apps/stylededit/StyledEditApp.cpp +++ b/src/apps/stylededit/StyledEditApp.cpp @@ -1,88 +1,102 @@ -#ifndef CONSTANTS_H +#include #include "Constants.h" -#endif - -#ifndef STYLED_EDIT_APP #include "StyledEditApp.h" -#endif +#include "StyledEditWindow.h" +BRect windowRect(7,25,599,399); -BRect windowRect(50,50,599,399); +StyledEditApp * styled_edit_app; StyledEditApp::StyledEditApp() : BApplication(APP_SIGNATURE) - { - - new StyledEditWindow(windowRect); +{ fOpenPanel= new BFilePanel; - fWindowCount= 0; fNext_Untitled_Window= 1; - } /***StyledEditApp::StyledEditApp()***/ + styled_edit_app = this; +} /***StyledEditApp::StyledEditApp()***/ -void StyledEditApp::MessageReceived(BMessage *message){ - switch(message->what){ +void +StyledEditApp::MessageReceived(BMessage *message) +{ + switch(message->what) { + case MENU_NEW: + OpenDocument(); + break; case MENU_OPEN: fOpenPanel->Show(); // break; - case WINDOW_REGISTRY_ADD: - { - bool need_id= false; - BMessage reply(WINDOW_REGISTRY_ADDED); - - if(message->FindBool("need_id", &need_id)== B_OK) - { - if(need_id) - { - reply.AddInt32("new_window_number", fNext_Untitled_Window); - fNext_Untitled_Window++; - } - fWindowCount++; - } - reply.AddRect("rect",windowRect); - windowRect.OffsetBy(20,20); - message->SendReply(&reply); - break; - } - case WINDOW_REGISTRY_SUB: - fWindowCount--; - if (!fWindowCount) - { - Quit(); - } - break; default: BApplication::MessageReceived(message); break; } } -void StyledEditApp::RefsReceived(BMessage *message){ - +void +StyledEditApp::OpenDocument() +{ + new StyledEditWindow(windowRect,fNext_Untitled_Window++); + windowRect.OffsetBy(20,20); // todo: wrap around screen + fWindowCount++; +} + +void +StyledEditApp::OpenDocument(entry_ref * ref) +{ + new StyledEditWindow(windowRect,ref); + windowRect.OffsetBy(20,20); // todo: wrap around screen + fWindowCount++; +} + +void +StyledEditApp::CloseDocument() +{ + fWindowCount--; + if (fWindowCount == 0) { + BAutolock lock(this); + Quit(); + } +} + +void +StyledEditApp::RefsReceived(BMessage *message) +{ int32 refNum; entry_ref ref; status_t err; refNum=0; - do{ + do { if((err= message->FindRef("refs", refNum, &ref)) != B_OK) return; - new StyledEditWindow(windowRect, &ref); + OpenDocument(&ref); refNum++; } while(1); } /***StyledEditApp::RefsReceived();***/ -int32 StyledEditApp::NumberOfWindows(){ +void +StyledEditApp::ReadyToRun() +{ + if (fWindowCount == 0) { + OpenDocument(); + } +} + +int32 +StyledEditApp::NumberOfWindows() +{ return fWindowCount; }/***StyledEditApp::NumberOfWindows()***/ -int main(){ - StyledEditApp StyledEdit; - StyledEdit.Run(); +int +main() +{ + StyledEditApp styledEdit; + styledEdit.Run(); return 0; - } +} diff --git a/src/apps/stylededit/StyledEditApp.h b/src/apps/stylededit/StyledEditApp.h index d7d2fda0cf..9fc44d8fc0 100644 --- a/src/apps/stylededit/StyledEditApp.h +++ b/src/apps/stylededit/StyledEditApp.h @@ -2,31 +2,33 @@ #ifndef STYLED_EDIT_APP #define STYLED_EDIT_APP -#ifndef _APPLICATION_H #include -#endif +#include +#include -#ifndef STYLED_EDIT_WINDOW_H -#include "StyledEditWindow.h" -#endif +class StyledEditWindow; -class StyledEditApp: public BApplication{ - public: - StyledEditApp(); - virtual void MessageReceived(BMessage *message); - virtual void RefsReceived(BMessage *message); - int32 NumberOfWindows(); - - - private: - BFilePanel *fOpenPanel; - int32 fWindowCount; - int32 fNext_Untitled_Window; +class StyledEditApp + : public BApplication +{ +public: + StyledEditApp(); + virtual void MessageReceived(BMessage *message); + virtual void RefsReceived(BMessage *message); + virtual void ReadyToRun(); + + int32 NumberOfWindows(); + void OpenDocument(); + void OpenDocument(entry_ref * ref); + void CloseDocument(); + +private: + BFilePanel *fOpenPanel; + int32 fWindowCount; + int32 fNext_Untitled_Window; }; -#endif - - - +extern StyledEditApp * styled_edit_app; +#endif // STYLED_EDIT_APP diff --git a/src/apps/stylededit/StyledEditView.cpp b/src/apps/stylededit/StyledEditView.cpp index 1fe2db9282..7d64c0f5c8 100644 --- a/src/apps/stylededit/StyledEditView.cpp +++ b/src/apps/stylededit/StyledEditView.cpp @@ -1,36 +1,27 @@ -#ifndef STYLED_EDIT_VIEW_H -#include "StyledEditView.h" -#endif - -#ifndef _MESSAGE_H #include -#endif - -#ifndef CONSTANTS_H -#include "Constants.h" -#endif - -#ifndef _MESSENGER_H #include -#endif - -#ifndef _RECT_H #include -#endif +#include +#include "StyledEditView.h" +#include "Constants.h" +StyledEditView::StyledEditView(BRect viewFrame, BRect textBounds, BHandler *handler) + : BTextView(viewFrame, "textview", textBounds, + B_FOLLOW_ALL, B_FRAME_EVENTS|B_WILL_DRAW) +{ + fHandler= handler; + fMessenger= new BMessenger(handler); + fSuppressChanges = false; +}/***StyledEditView()***/ -StyledEditView::StyledEditView(BRect viewFrame, BRect textBounds, BHandler *handler) : BTextView(viewFrame, "textview", - textBounds, B_FOLLOW_ALL, B_FRAME_EVENTS|B_WILL_DRAW){ - fHandler= handler; - fMessenger= new BMessenger(handler); - }/***StyledEditView()***/ +StyledEditView::~StyledEditView(){ - StyledEditView::~StyledEditView(){ - - }/***~StyledEditView***/ +}/***~StyledEditView***/ -void StyledEditView::FrameResized(float width, float height){ +void +StyledEditView::FrameResized(float width, float height) +{ BTextView::FrameResized(width, height); if(DoesWordWrap()){ @@ -42,8 +33,27 @@ void StyledEditView::FrameResized(float width, float height){ } } -void StyledEditView::Select(int32 start, int32 finish){ - +status_t +StyledEditView::GetStyledText(BPositionIO * stream) +{ + status_t result = B_OK; + fSuppressChanges = true; + result = BTranslationUtils::GetStyledText(stream, this, NULL); + fSuppressChanges = false; + return result; +} + +void +StyledEditView::Reset() +{ + fSuppressChanges = true; + SetText(""); + fSuppressChanges = false; +} + +void +StyledEditView::Select(int32 start, int32 finish) +{ if(start==finish) fChangeMessage= new BMessage(DISABLE_ITEMS); else @@ -54,40 +64,20 @@ void StyledEditView::Select(int32 start, int32 finish){ BTextView::Select(start, finish); } -void StyledEditView::InsertText(const char *text, int32 length, int32 offset, const text_run_array *runs){ - - fMessenger-> SendMessage(new BMessage(TEXT_CHANGED)); +void StyledEditView::InsertText(const char *text, int32 length, int32 offset, const text_run_array *runs) +{ + if (!fSuppressChanges) + fMessenger-> SendMessage(new BMessage(TEXT_CHANGED)); BTextView::InsertText(text, length, offset, runs); }/****StyledEditView::InsertText()***/ -void StyledEditView::DeleteText(int32 start, int32 finish){ - - fMessenger-> SendMessage(new BMessage(TEXT_CHANGED)); +void StyledEditView::DeleteText(int32 start, int32 finish) +{ + if (!fSuppressChanges) + fMessenger-> SendMessage(new BMessage(TEXT_CHANGED)); BTextView::DeleteText(start, finish); }/***StyledEditView::DeleteText***/ - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/apps/stylededit/StyledEditView.h b/src/apps/stylededit/StyledEditView.h index 8093af0f84..5706baaf69 100644 --- a/src/apps/stylededit/StyledEditView.h +++ b/src/apps/stylededit/StyledEditView.h @@ -1,34 +1,28 @@ #ifndef STYLED_EDIT_VIEW_H #define STYLED_EDIT_VIEW_H -#ifndef _TEXTVIEW_H #include -#endif +#include class StyledEditView : public BTextView { - public: - StyledEditView(BRect viewframe, BRect textframe, BHandler *handler); - ~StyledEditView(); +public: + StyledEditView(BRect viewframe, BRect textframe, BHandler *handler); + ~StyledEditView(); + + virtual void Select(int32 start, int32 finish); + virtual void FrameResized(float width, float height); - virtual void Select(int32 start, int32 finish); - virtual void FrameResized(float width, float height); - protected: - virtual void InsertText(const char *text, int32 length, int32 offset, const text_run_array *runs); - virtual void DeleteText(int32 start, int32 finish); - - private: - BHandler *fHandler; - BMessage *fChangeMessage; - BMessenger *fMessenger; + virtual void Reset(); + virtual status_t GetStyledText(BPositionIO * stream); +protected: + virtual void InsertText(const char *text, int32 length, int32 offset, const text_run_array *runs); + virtual void DeleteText(int32 start, int32 finish); + +private: + BHandler *fHandler; + BMessage *fChangeMessage; + BMessenger *fMessenger; + bool fSuppressChanges; }; -#endif - - - - - - - - - +#endif // STYLED_EDIT_VIEW_H diff --git a/src/apps/stylededit/StyledEditWindow.cpp b/src/apps/stylededit/StyledEditWindow.cpp index 2c89f54992..048de11ae6 100644 --- a/src/apps/stylededit/StyledEditWindow.cpp +++ b/src/apps/stylededit/StyledEditWindow.cpp @@ -1,111 +1,74 @@ // Be-defined headers -#ifndef _ALERT_H #include -#endif - -#ifndef _CLIPBOARD_H +#include +#include #include -#endif - -#ifndef _FILE_H #include -#endif - -#ifndef _MENU_H #include -#endif - -#ifndef _MENU_ITEM_H #include -#endif - -#ifndef _PRINTSESSION_H #include -#endif - -#ifndef _SCROLL_VIEW_H #include -#endif - -#ifndef _STDLIB_H #include -#endif - -#ifndef _STRING_H #include -#endif - -#ifndef _TRANSLATION_UTILS_H #include -#endif - -#ifndef _WINDOW_H #include -#endif //****** Application defined header files************/. -#ifndef CONSTANTS_H #include "Constants.h" -#endif - -#ifndef COLOR_MENU_ITEM_H #include "ColorMenuItem.h" -#endif - -#ifndef FIND_WINDOW_H #include "FindWindow.h" -#endif - -#ifndef REPLACE_WINDOW_H #include "ReplaceWindow.h" -#endif - -#ifndef STYLED_EDIT_APP #include "StyledEditApp.h" -#endif - -#ifndef STYLED_EDIT_VIEW_H #include "StyledEditView.h" -#endif - -#ifndef STYLED_EDIT_WINDOW_H #include "StyledEditWindow.h" -#endif -StyledEditWindow::StyledEditWindow(BRect frame) - : BWindow(frame,"untitled",B_DOCUMENT_WINDOW,0){ - InitWindow(); - Show(); - }/***StyledEditWindow()***/ +StyledEditWindow::StyledEditWindow(BRect frame, int32 id) + : BWindow(frame,"untitled",B_DOCUMENT_WINDOW,0) +{ + InitWindow(); + BString unTitled; + unTitled.SetTo("Untitled "); + unTitled << id; + SetTitle(unTitled.String()); + fSaveItem->SetEnabled(true); // allow saving empty files + Show(); +} /***StyledEditWindow()***/ StyledEditWindow::StyledEditWindow(BRect frame, entry_ref *ref) : BWindow(frame,"untitled",B_DOCUMENT_WINDOW,0) - { - InitWindow(); - OpenFile(ref); - Show(); - } /***StyledEditWindow()***/ +{ + InitWindow(); + OpenFile(ref); + Show(); +} /***StyledEditWindow()***/ -StyledEditWindow::~StyledEditWindow(){ - Unregister(); - - if(fSaveMessage) +StyledEditWindow::~StyledEditWindow() +{ + if (fSaveMessage) delete fSaveMessage; - if(fPrintSettings) + if (fPrintSettings) delete fPrintSettings; delete fSavePanel; -}/***~StyledEditWindow()***/ - -void StyledEditWindow::InitWindow(){ +} /***~StyledEditWindow()***/ +void +StyledEditWindow::InitWindow() +{ fPrintSettings= NULL; fSaveMessage= NULL; - fEnableItems= false; - fFirstEdit= true; - fUnDoneFlag= false; - fTextSaved= true; //initial state, no text changed. + + // undo modes + fUndoFlag = false; + fCanUndo = false; + fRedoFlag = false; + fCanRedo = false; + + // clean modes + fUndoCleans = false; + fRedoCleans = false; + fClean = true; //search- state fReplaceString= ""; @@ -115,10 +78,7 @@ void StyledEditWindow::InitWindow(){ fBackSearch= false; //add menubar - BRect menuBarRect; - - menuBarRect= Bounds(); - fMenuBar= new BMenuBar(menuBarRect,"menubar"); + fMenuBar = new BMenuBar(BRect(0,0,0,0),"menubar"); AddChild(fMenuBar); @@ -128,7 +88,7 @@ void StyledEditWindow::InitWindow(){ viewFrame= Bounds(); - viewFrame.top = MENU_BAR_HEIGHT; //021021 + viewFrame.top = fMenuBar->Bounds().Height()+1; //021021 viewFrame.right -= B_V_SCROLL_BAR_WIDTH; viewFrame.left = B_V_SCROLL_BAR_WIDTH-15; //021021 viewFrame.bottom -= B_H_SCROLL_BAR_HEIGHT; @@ -140,13 +100,13 @@ void StyledEditWindow::InitWindow(){ fTextView= new StyledEditView(viewFrame, textBounds, this); - fTextView-> SetDoesUndo(true); - fTextView-> SetStylable(true); + fTextView->SetDoesUndo(true); + fTextView->SetStylable(true); - fScrollView= new BScrollView("scrollview", fTextView, B_FOLLOW_ALL, 0, true, true, B_NO_BORDER); + fScrollView= new BScrollView("scrollview", fTextView, B_FOLLOW_ALL, 0, true, true, B_PLAIN_BORDER); AddChild(fScrollView); - fTextView-> MakeFocus(true); + fTextView->MakeFocus(true); //Add "File"-menu: @@ -155,120 +115,121 @@ void StyledEditWindow::InitWindow(){ BMenuItem *menuItem; menu= new BMenu("File"); - fMenuBar-> AddItem(menu); + fMenuBar->AddItem(menu); - menu-> AddItem(menuItem= new BMenuItem("New", new BMessage(MENU_NEW), 'N')); - menu-> AddItem(menuItem= new BMenuItem(new BMenu("Open..."), new BMessage(MENU_OPEN))); + menu->AddItem(menuItem= new BMenuItem("New", new BMessage(MENU_NEW), 'N')); + menuItem->SetTarget(be_app); + + menu->AddItem(menuItem= new BMenuItem(new BMenu("Open..."), new BMessage(MENU_OPEN))); menuItem->SetShortcut('O',0); menuItem->SetTarget(be_app); - menu-> AddSeparatorItem(); + menu->AddSeparatorItem(); - menu-> AddItem(fSaveItem= new BMenuItem("Save", new BMessage(MENU_SAVE), 'S')); - fSaveItem-> SetEnabled(false); - menu-> AddItem(menuItem= new BMenuItem("Save As...", new BMessage(MENU_SAVEAS))); - menuItem-> SetEnabled(true); + menu->AddItem(fSaveItem= new BMenuItem("Save", new BMessage(MENU_SAVE), 'S')); + fSaveItem->SetEnabled(false); + menu->AddItem(menuItem= new BMenuItem("Save As...", new BMessage(MENU_SAVEAS))); + menuItem->SetEnabled(true); - menu-> AddItem(fRevertItem= new BMenuItem("Revert to Saved", new BMessage(MENU_REVERT))); - fRevertItem-> SetEnabled(false); - menu-> AddItem(menuItem= new BMenuItem("Close", new BMessage(MENU_CLOSE), 'W')); + menu->AddItem(fRevertItem= new BMenuItem("Revert to Saved", new BMessage(MENU_REVERT))); + fRevertItem->SetEnabled(false); + menu->AddItem(menuItem= new BMenuItem("Close", new BMessage(MENU_CLOSE), 'W')); - menu-> AddSeparatorItem(); - menu-> AddItem(menuItem= new BMenuItem("Page Setup" B_UTF8_ELLIPSIS, new BMessage(MENU_PAGESETUP))); - menu-> AddItem(menuItem= new BMenuItem("Print" B_UTF8_ELLIPSIS, new BMessage(MENU_PRINT), 'P')); + menu->AddSeparatorItem(); + menu->AddItem(menuItem= new BMenuItem("Page Setup" B_UTF8_ELLIPSIS, new BMessage(MENU_PAGESETUP))); + menu->AddItem(menuItem= new BMenuItem("Print" B_UTF8_ELLIPSIS, new BMessage(MENU_PRINT), 'P')); - menu-> AddSeparatorItem(); - menu-> AddItem(menuItem= new BMenuItem("Quit", new BMessage(MENU_QUIT), 'Q')); + menu->AddSeparatorItem(); + menu->AddItem(menuItem= new BMenuItem("Quit", new BMessage(MENU_QUIT), 'Q')); //Add the "Edit"-menu: menu= new BMenu("Edit"); - fMenuBar-> AddItem(menu); + fMenuBar->AddItem(menu); - menu-> AddItem(fUndoItem= new BMenuItem("Can't Undo", new BMessage(B_UNDO), 'Z')); - fUndoItem-> SetEnabled(false); - fUndoItem-> SetTarget(fTextView); + menu->AddItem(fUndoItem= new BMenuItem("Can't Undo", new BMessage(B_UNDO), 'Z')); + fUndoItem->SetEnabled(false); - menu-> AddSeparatorItem(); - menu-> AddItem(fCutItem= new BMenuItem("Cut", new BMessage(B_CUT), 'X')); + menu->AddSeparatorItem(); + menu->AddItem(fCutItem= new BMenuItem("Cut", new BMessage(B_CUT), 'X')); fCutItem->SetEnabled(false); - fCutItem-> SetTarget(fTextView); + fCutItem->SetTarget(fTextView); - menu-> AddItem(fCopyItem= new BMenuItem("Copy", new BMessage(B_COPY), 'C')); - fCopyItem-> SetEnabled(false); - fCopyItem-> SetTarget(fTextView); + menu->AddItem(fCopyItem= new BMenuItem("Copy", new BMessage(B_COPY), 'C')); + fCopyItem->SetEnabled(false); + fCopyItem->SetTarget(fTextView); - menu-> AddItem(menuItem= new BMenuItem("Paste", new BMessage(B_PASTE), 'V')); - menuItem-> SetTarget(fTextView); - menu-> AddItem(fClearItem= new BMenuItem("Clear", new BMessage(MENU_CLEAR))); - fClearItem-> SetEnabled(false); - fClearItem-> SetTarget(fTextView); + menu->AddItem(menuItem= new BMenuItem("Paste", new BMessage(B_PASTE), 'V')); + menuItem->SetTarget(fTextView); + menu->AddItem(fClearItem= new BMenuItem("Clear", new BMessage(MENU_CLEAR))); + fClearItem->SetEnabled(false); + fClearItem->SetTarget(fTextView); - menu-> AddSeparatorItem(); - menu-> AddItem(menuItem=new BMenuItem("Select All", new BMessage(B_SELECT_ALL), 'A')); - menuItem-> SetTarget(fTextView); + menu->AddSeparatorItem(); + menu->AddItem(menuItem=new BMenuItem("Select All", new BMessage(B_SELECT_ALL), 'A')); + menuItem->SetTarget(fTextView); - menu-> AddSeparatorItem(); - menu-> AddItem(menuItem= new BMenuItem("Find...", new BMessage(MENU_FIND),'F')); - menu-> AddItem(menuItem= new BMenuItem("Find Again",new BMessage(MENU_FIND_AGAIN),'G')); - menu-> AddItem(menuItem= new BMenuItem("Find Selection", new BMessage(MENU_FIND_SELECTION),'H')); - menu-> AddItem(menuItem= new BMenuItem("Replace...", new BMessage(MENU_REPLACE),'R')); - menu-> AddItem(menuItem= new BMenuItem("Replace Same", new BMessage(MENU_REPLACE_SAME),'T')); + menu->AddSeparatorItem(); + menu->AddItem(menuItem= new BMenuItem("Find...", new BMessage(MENU_FIND),'F')); + menu->AddItem(menuItem= new BMenuItem("Find Again",new BMessage(MENU_FIND_AGAIN),'G')); + menu->AddItem(menuItem= new BMenuItem("Find Selection", new BMessage(MENU_FIND_SELECTION),'H')); + menu->AddItem(menuItem= new BMenuItem("Replace...", new BMessage(MENU_REPLACE),'R')); + menu->AddItem(menuItem= new BMenuItem("Replace Same", new BMessage(MENU_REPLACE_SAME),'T')); //Add the "Font"-menu: BMessage *fontMessage; menu= new BMenu("Font"); - fMenuBar-> AddItem(menu); + fMenuBar->AddItem(menu); //"Size"-subMenu subMenu=new BMenu("Size"); - subMenu-> SetRadioMode(true); - menu-> AddItem(subMenu); + subMenu->SetRadioMode(true); + menu->AddItem(subMenu); - subMenu-> AddItem(menuItem= new BMenuItem("9", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size", 9.0); + subMenu->AddItem(menuItem= new BMenuItem("9", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size", 9.0); - subMenu-> AddItem(menuItem= new BMenuItem("10", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",10.0); - menuItem-> SetMarked(true); + subMenu->AddItem(menuItem= new BMenuItem("10", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",10.0); + menuItem->SetMarked(true); - subMenu-> AddItem(menuItem= new BMenuItem("12", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",12.0); - subMenu-> AddItem(menuItem= new BMenuItem("14", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",14.0); - subMenu-> AddItem(menuItem= new BMenuItem("18", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",18.0); + subMenu->AddItem(menuItem= new BMenuItem("12", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",12.0); + subMenu->AddItem(menuItem= new BMenuItem("14", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",14.0); + subMenu->AddItem(menuItem= new BMenuItem("18", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",18.0); - subMenu-> AddItem(menuItem= new BMenuItem("24", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",24.0); - subMenu-> AddItem(menuItem= new BMenuItem("36", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",36.0); - subMenu-> AddItem(menuItem= new BMenuItem("48", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",48.0); - subMenu-> AddItem(menuItem= new BMenuItem("72", fontMessage= new BMessage(FONT_SIZE))); - fontMessage-> AddFloat("size",72.0); + subMenu->AddItem(menuItem= new BMenuItem("24", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",24.0); + subMenu->AddItem(menuItem= new BMenuItem("36", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",36.0); + subMenu->AddItem(menuItem= new BMenuItem("48", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",48.0); + subMenu->AddItem(menuItem= new BMenuItem("72", fontMessage= new BMessage(FONT_SIZE))); + fontMessage->AddFloat("size",72.0); //"Color"-subMenu subMenu= new BMenu("Color"); subMenu->SetRadioMode(true); - menu-> AddItem(subMenu); + menu->AddItem(subMenu); ColorMenuItem *ColorItem; - subMenu-> AddItem(menuItem= new BMenuItem("Black", fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour",&BLACK); - menuItem-> SetMarked(true); - subMenu-> AddItem(ColorItem= new ColorMenuItem("Red", RED, fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour", &RED); - subMenu-> AddItem(ColorItem= new ColorMenuItem("Green", GREEN, fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour", &GREEN); - subMenu-> AddItem(ColorItem= new ColorMenuItem("Blue", BLUE, fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour", &BLUE); - subMenu-> AddItem(ColorItem= new ColorMenuItem("Cyan", CYAN, fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour",&CYAN); - subMenu-> AddItem(ColorItem= new ColorMenuItem("Magenta", MAGENTA, fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour", &MAGENTA); - subMenu-> AddItem(ColorItem= new ColorMenuItem("Yellow", YELLOW, fontMessage= new BMessage(FONT_COLOR))); - fontMessage-> AddPointer("colour", &YELLOW); + subMenu->AddItem(menuItem= new BMenuItem("Black", fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour",&BLACK); + menuItem->SetMarked(true); + subMenu->AddItem(ColorItem= new ColorMenuItem("Red", RED, fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour", &RED); + subMenu->AddItem(ColorItem= new ColorMenuItem("Green", GREEN, fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour", &GREEN); + subMenu->AddItem(ColorItem= new ColorMenuItem("Blue", BLUE, fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour", &BLUE); + subMenu->AddItem(ColorItem= new ColorMenuItem("Cyan", CYAN, fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour",&CYAN); + subMenu->AddItem(ColorItem= new ColorMenuItem("Magenta", MAGENTA, fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour", &MAGENTA); + subMenu->AddItem(ColorItem= new ColorMenuItem("Yellow", YELLOW, fontMessage= new BMessage(FONT_COLOR))); + fontMessage->AddPointer("colour", &YELLOW); menu->AddSeparatorItem(); //Available fonts @@ -278,7 +239,7 @@ void StyledEditWindow::InitWindow(){ font_family localfamily; if ( get_font_family ( i, &localfamily ) == B_OK ) { subMenu=new BMenu(localfamily); - subMenu-> SetRadioMode(true); + subMenu->SetRadioMode(true); menu->AddItem(subMenu); menu->SetRadioMode(true); int32 numStyles=count_font_styles(localfamily); @@ -286,9 +247,9 @@ void StyledEditWindow::InitWindow(){ font_style style; uint32 flags; if( get_font_style(localfamily,j,&style,&flags)==B_OK){ - subMenu-> AddItem(menuItem= new BMenuItem(style, fontMessage= new BMessage(FONT_STYLE))); - fontMessage-> AddString("FontFamily", localfamily); - fontMessage-> AddString("FontStyle", style); + subMenu->AddItem(menuItem= new BMenuItem(style, fontMessage= new BMessage(FONT_STYLE))); + fontMessage->AddString("FontFamily", localfamily); + fontMessage->AddString("FontStyle", style); } } } @@ -296,372 +257,376 @@ void StyledEditWindow::InitWindow(){ //Add the "Document"-menu: menu= new BMenu("Document"); - fMenuBar-> AddItem(menu); + fMenuBar->AddItem(menu); //"Align"-subMenu: subMenu= new BMenu("Align"); - subMenu-> SetRadioMode(true); - subMenu-> AddItem(menuItem= new BMenuItem("Left", new BMessage(ALIGN_LEFT))); - menuItem-> SetMarked(true); + subMenu->SetRadioMode(true); + subMenu->AddItem(menuItem= new BMenuItem("Left", new BMessage(ALIGN_LEFT))); + menuItem->SetMarked(true); - subMenu-> AddItem(menuItem= new BMenuItem("Center", new BMessage(ALIGN_CENTER))); - subMenu-> AddItem(menuItem= new BMenuItem("Right", new BMessage(ALIGN_RIGHT))); - menu-> AddItem(subMenu); - menu-> AddItem(fWrapItem= new BMenuItem("Wrap Lines", new BMessage(WRAP_LINES))); - fWrapItem-> SetMarked(true); + subMenu->AddItem(menuItem= new BMenuItem("Center", new BMessage(ALIGN_CENTER))); + subMenu->AddItem(menuItem= new BMenuItem("Right", new BMessage(ALIGN_RIGHT))); + menu->AddItem(subMenu); + menu->AddItem(fWrapItem= new BMenuItem("Wrap Lines", new BMessage(WRAP_LINES))); + fWrapItem->SetMarked(true); /***************************MENUS ADDED***********************/ - fSavePanel= new BFilePanel(B_SAVE_PANEL, new BMessenger(this), NULL, B_FILE_NODE, false); - Register(true); - - } /***StyledEditWindow::Initwindow()***/ + +} /***StyledEditWindow::Initwindow()***/ - void StyledEditWindow::MessageReceived(BMessage *message){ - switch(message->what){ - case WINDOW_REGISTRY_ADDED: - { - - BRect rect; - if (message->FindInt32("new_window_number", &fWindow_Id) == B_OK) - { - if (!fSaveMessage) - { - BString unTitled; - unTitled.SetTo("Untitled "); - unTitled << fWindow_Id; - const char *title= unTitled.String(); - SetTitle(title); - } - } - if (message->FindRect("rect", &rect) == B_OK) - { - MoveTo(rect.LeftTop()); - ResizeTo(rect.Width(), rect.Height()); - } - Minimize(false); - } - break; +void +StyledEditWindow::MessageReceived(BMessage *message) +{ + switch(message->what){ /************file menu:***************/ - case MENU_NEW: - { - BRect newViewFrame; - newViewFrame= Frame(); - new StyledEditWindow(newViewFrame); - } - break; - case MENU_SAVE: - { - if(!fSaveMessage) - fSavePanel->Show(); - else - Save(fSaveMessage); - } - break; - case MENU_SAVEAS: + case MENU_SAVE: + { + if(!fSaveMessage) fSavePanel->Show(); - break; - case B_SAVE_REQUESTED: - Save(message); - break; - case MENU_REVERT: - RevertToSaved(); - break; - case MENU_CLOSE:{ - if(this->QuitRequested()) - Quit(); - } - break; - case MENU_PAGESETUP: - PageSetup(fTextView->Window()->Title()); - break; - case MENU_PRINT: - Print(fTextView->Window()->Title()); - break; - case MENU_QUIT: - be_app->PostMessage(B_QUIT_REQUESTED); - break; -/*********commands from the "Edit"-menu:**************/ - case B_UNDO: - fTextView->Undo(be_clipboard); - break; - case B_CUT: - fTextView->Cut(be_clipboard); - break; - case B_COPY: - fTextView->Copy(be_clipboard); - break; - case B_PASTE: - fTextView->Paste(be_clipboard); - break; - case MENU_CLEAR: - fTextView->Clear(); - break; - case MENU_FIND: - { - BRect findWindowFrame(100,100,400,235); - FindWindow *find; - find= new FindWindow(findWindowFrame, this, &fStringToFind, &fCaseSens, - &fWrapAround, &fBackSearch); - } - break; - case MSG_SEARCH: - { - message->FindString("findtext", &fStringToFind); - message->FindBool("casesens", &fCaseSens); - message->FindBool("wrap", &fWrapAround); - message->FindBool("backsearch", &fBackSearch); - - Search(fStringToFind, fCaseSens, fWrapAround, fBackSearch); - } - break; - case MENU_FIND_AGAIN: - Search(fStringToFind, fCaseSens, fWrapAround, fBackSearch); - break; - case MENU_FIND_SELECTION: - FindSelection(); - break; - case MENU_REPLACE: - { - BRect replaceWindowFrame(100,100,400,284); - ReplaceWindow *replace; - replace= new ReplaceWindow(replaceWindowFrame, this, &fStringToFind, &fReplaceString, &fCaseSens, - &fWrapAround, &fBackSearch); - } - break; - case MSG_REPLACE: - { - BString findIt; - BString replaceWith; - bool caseSens, wrap, backSearch; - - message->FindBool("casesens", &caseSens); - message->FindBool("wrap", &wrap); - message->FindBool("backsearch", &backSearch); - - - message->FindString("FindText",&findIt); - message->FindString("ReplaceText",&replaceWith); - fStringToFind= findIt; - fReplaceString= replaceWith; - fCaseSens= caseSens; - fWrapAround= wrap; - fBackSearch= backSearch; - - Replace(findIt, replaceWith, caseSens, wrap, backSearch); - } - break; - case MSG_REPLACE_ALL: - { - BString findIt; - BString replaceWith; - bool caseSens, allWindows; - - message->FindBool("casesens", &caseSens); - message->FindString("FindText",&findIt); - message->FindString("ReplaceText",&replaceWith); - message->FindBool("allwindows", &allWindows); - - fStringToFind= findIt; - fReplaceString= replaceWith; - fCaseSens= caseSens; - - - if(allWindows) - SearchAllWindows(findIt, replaceWith, caseSens); - else - ReplaceAll(findIt, replaceWith,caseSens); - - } - break; - /*********"Font"-menu*****************/ - case FONT_SIZE: - { - float fontSize; - message->FindFloat("size",&fontSize); - SetFontSize(fontSize); - } - break; - case FONT_STYLE: - { - const char *fontFamily,*fontStyle; - message-> FindString("FontFamily",&fontFamily); - message-> FindString("FontStyle",&fontStyle); - SetFontStyle(fontFamily, fontStyle); - } - break; - case FONT_COLOR: - { - void *v; - rgb_color *color; - - message-> FindPointer("colour",&v); - color= (rgb_color *) v; - SetFontColor(color); - } - break; - /*********"Document"-menu*************/ - case ALIGN_LEFT: - fTextView->SetAlignment(B_ALIGN_LEFT); - break; - case ALIGN_CENTER: - fTextView->SetAlignment(B_ALIGN_CENTER); - break; - case ALIGN_RIGHT: - fTextView->SetAlignment(B_ALIGN_RIGHT); - break; - case WRAP_LINES: - if(fTextView->DoesWordWrap()){ - fTextView->SetWordWrap(false); - fWrapItem->SetMarked(false); - } - else{ - fTextView->SetWordWrap(true); - fWrapItem->SetMarked(true); - } - break; - case ENABLE_ITEMS: - { - fCutItem->SetEnabled(true); - fCopyItem->SetEnabled(true); - fClearItem->SetEnabled(true); - } - break; - case DISABLE_ITEMS: - { - fCutItem->SetEnabled(false); - fCopyItem->SetEnabled(false); - fClearItem->SetEnabled(false); - } - break; - case TEXT_CHANGED: - { - fSaveItem-> SetEnabled(true); - fTextSaved= false; - - if(fFirstEdit){ - fUndoItem-> SetLabel("Undo Typing"); - fUndoItem-> SetEnabled(true); - } - - if (fUnDoneFlag){ - fUndoItem->SetLabel("Redo Typing"); - fUnDoneFlag= false; - } - else{ - fUndoItem->SetLabel("Undo Typing"); - fUnDoneFlag= true; - } - - } - break; - default: - BWindow::MessageReceived(message); - break; - } - }/***StyledEditWindow::MessageReceived() ***/ - - -void StyledEditWindow::Register(bool need_id) { - BMessenger messenger(APP_SIGNATURE); - BMessage message(WINDOW_REGISTRY_ADD); - - message.AddBool("need_id", need_id); - messenger.SendMessage(&message, this); -}/***Register()***/ - - -void StyledEditWindow::Unregister(void){ - BMessenger messenger(APP_SIGNATURE); - messenger.SendMessage(new BMessage(WINDOW_REGISTRY_SUB)); -}/***Unregister()***/ - - -bool StyledEditWindow::QuitRequested(){ - - int32 buttonIndex= 0; - - if(!fTextSaved){ - BAlert *saveAlert; - BString alertText; - alertText.SetTo("Save changes to the document "); - alertText<< Title(); - alertText<<"? "; - saveAlert= new BAlert("savealert",alertText.String(), "Cancel", "Don't save","Save", - B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); - saveAlert-> SetShortcut(0, B_ESCAPE); - buttonIndex= saveAlert-> Go(); - - - if(buttonIndex==0) //"cancel": dont save, dont close the window - return false; - else if(buttonIndex==1) // "don't save": just close the window - return true; - else if(!fSaveMessage){ //save as - DispatchMessage(new BMessage(MENU_SAVEAS), this); - return false; - } - else{ - DispatchMessage(new BMessage(B_SAVE_REQUESTED), this); - return true; - } - } else - return true; - + Save(fSaveMessage); + } + break; + case MENU_SAVEAS: + fSavePanel->Show(); + break; + case B_SAVE_REQUESTED: + Save(message); + break; + case MENU_REVERT: + RevertToSaved(); + break; + case MENU_CLOSE:{ + if(this->QuitRequested()) { + BAutolock lock(this); + Quit(); + } + } + break; + case MENU_PAGESETUP: + PageSetup(fTextView->Window()->Title()); + break; + case MENU_PRINT: + Print(fTextView->Window()->Title()); + break; + case MENU_QUIT: + be_app->PostMessage(B_QUIT_REQUESTED); + break; +/*********commands from the "Edit"-menu:**************/ + case B_UNDO: + ASSERT(fCanUndo || fCanRedo); + ASSERT(!(fCanUndo && fCanRedo)); + if (fCanUndo) { + fUndoFlag = true; + } + if (fCanRedo) { + fRedoFlag = true; + } + fTextView->Undo(be_clipboard); + break; + case B_CUT: + fTextView->Cut(be_clipboard); + break; + case B_COPY: + fTextView->Copy(be_clipboard); + break; + case B_PASTE: + fTextView->Paste(be_clipboard); + break; + case MENU_CLEAR: + fTextView->Clear(); + break; + case MENU_FIND: + { + BRect findWindowFrame(100,100,400,235); + FindWindow *find; + find= new FindWindow(findWindowFrame, this, &fStringToFind, &fCaseSens, + &fWrapAround, &fBackSearch); + } + break; + case MSG_SEARCH: + { + message->FindString("findtext", &fStringToFind); + message->FindBool("casesens", &fCaseSens); + message->FindBool("wrap", &fWrapAround); + message->FindBool("backsearch", &fBackSearch); + + Search(fStringToFind, fCaseSens, fWrapAround, fBackSearch); + } + break; + case MENU_FIND_AGAIN: + Search(fStringToFind, fCaseSens, fWrapAround, fBackSearch); + break; + case MENU_FIND_SELECTION: + FindSelection(); + break; + case MENU_REPLACE: + { + BRect replaceWindowFrame(100,100,400,284); + ReplaceWindow *replace; + replace= new ReplaceWindow(replaceWindowFrame, this, &fStringToFind, &fReplaceString, &fCaseSens, + &fWrapAround, &fBackSearch); + } + break; + case MSG_REPLACE: + { + BString findIt; + BString replaceWith; + bool caseSens, wrap, backSearch; + + message->FindBool("casesens", &caseSens); + message->FindBool("wrap", &wrap); + message->FindBool("backsearch", &backSearch); + + + message->FindString("FindText",&findIt); + message->FindString("ReplaceText",&replaceWith); + fStringToFind= findIt; + fReplaceString= replaceWith; + fCaseSens= caseSens; + fWrapAround= wrap; + fBackSearch= backSearch; + + Replace(findIt, replaceWith, caseSens, wrap, backSearch); + } + break; + case MSG_REPLACE_ALL: + { + BString findIt; + BString replaceWith; + bool caseSens, allWindows; + + message->FindBool("casesens", &caseSens); + message->FindString("FindText",&findIt); + message->FindString("ReplaceText",&replaceWith); + message->FindBool("allwindows", &allWindows); + + fStringToFind= findIt; + fReplaceString= replaceWith; + fCaseSens= caseSens; + + + if(allWindows) + SearchAllWindows(findIt, replaceWith, caseSens); + else + ReplaceAll(findIt, replaceWith,caseSens); + + } + break; +/*********"Font"-menu*****************/ + case FONT_SIZE: + { + float fontSize; + message->FindFloat("size",&fontSize); + SetFontSize(fontSize); + } + break; + case FONT_STYLE: + { + const char *fontFamily,*fontStyle; + message->FindString("FontFamily",&fontFamily); + message->FindString("FontStyle",&fontStyle); + SetFontStyle(fontFamily, fontStyle); + } + break; + case FONT_COLOR: + { + void *v; + rgb_color *color; + + message->FindPointer("colour",&v); + color= (rgb_color *) v; + SetFontColor(color); + } + break; +/*********"Document"-menu*************/ + case ALIGN_LEFT: + fTextView->SetAlignment(B_ALIGN_LEFT); + break; + case ALIGN_CENTER: + fTextView->SetAlignment(B_ALIGN_CENTER); + break; + case ALIGN_RIGHT: + fTextView->SetAlignment(B_ALIGN_RIGHT); + break; + case WRAP_LINES: + if(fTextView->DoesWordWrap()){ + fTextView->SetWordWrap(false); + fWrapItem->SetMarked(false); + } + else{ + fTextView->SetWordWrap(true); + fWrapItem->SetMarked(true); + } + break; + case ENABLE_ITEMS: + { + fCutItem->SetEnabled(true); + fCopyItem->SetEnabled(true); + fClearItem->SetEnabled(true); + } + break; + case DISABLE_ITEMS: + { + fCutItem->SetEnabled(false); + fCopyItem->SetEnabled(false); + fClearItem->SetEnabled(false); + } + break; + case TEXT_CHANGED: + { + if (fUndoFlag) { + if (fUndoCleans) { + // we cleaned! + fClean = true; + fUndoCleans = false; + } else if (fClean) { + // if we were clean + // then a redo will make us clean again + fRedoCleans = true; + fClean = false; + } + // set mode + fCanUndo = false; + fCanRedo = true; + fUndoItem->SetLabel("Redo Typing"); + fUndoItem->SetEnabled(true); + fUndoFlag = false; + } else { + if (fRedoFlag && fRedoCleans) { + // we cleaned! + fClean = true; + fRedoCleans = false; + } else if (fClean) { + // if we were clean + // then an undo will make us clean again + fUndoCleans = true; + fClean = false; + } else { + // no more cleaning from undo now... + fUndoCleans = false; + } + // set mode + fCanUndo = true; + fCanRedo = false; + fUndoItem->SetLabel("Undo Typing"); + fUndoItem->SetEnabled(true); + fRedoFlag = false; + } + if (fClean) { + fRevertItem->SetEnabled(false); + fSaveItem->SetEnabled(fSaveMessage == NULL); + } else { + fRevertItem->SetEnabled(fSaveMessage != NULL); + fSaveItem->SetEnabled(true); + } + // clear flags + } + break; + default: + BWindow::MessageReceived(message); + break; + } +}/***StyledEditWindow::MessageReceived() ***/ + + +void +StyledEditWindow::Quit() +{ + styled_edit_app->CloseDocument(); + BWindow::Quit(); +} + +bool +StyledEditWindow::QuitRequested() +{ + int32 buttonIndex= 0; + + if (fClean) return true; + + BAlert *saveAlert; + BString alertText; + alertText.SetTo("Save changes to the document "); + alertText<< Title(); + alertText<<"? "; + saveAlert= new BAlert("savealert",alertText.String(), "Cancel", "Don't save","Save", + B_WIDTH_AS_USUAL, B_OFFSET_SPACING, B_WARNING_ALERT); + saveAlert->SetShortcut(0, B_ESCAPE); + buttonIndex= saveAlert->Go(); + + if (buttonIndex==0) { //"cancel": dont save, dont close the window + return false; + } else if(buttonIndex==1) { // "don't save": just close the window + return true; + } else if(!fSaveMessage) { //save as + DispatchMessage(new BMessage(MENU_SAVEAS), this); + return false; + } else { + DispatchMessage(new BMessage(B_SAVE_REQUESTED), this); + return true; + } + }/***QuitRequested()***/ -status_t StyledEditWindow::Save(BMessage *message){ - entry_ref ref; - const char *name; - status_t err; +status_t +StyledEditWindow::Save(BMessage *message) +{ + entry_ref ref; + const char *name; + status_t err; + + if(!message){ + message=fSaveMessage; + if(!message) + return B_ERROR; + } + + err= message->FindRef("directory", &ref); + if(err!= B_OK) + return err; + + err=message->FindString("name", &name); + if (err!= B_OK) + return err; - if(!message){ - message=fSaveMessage; - if(!message) - return B_ERROR; - } - - err= message->FindRef("directory", &ref); - if(err!= B_OK) - return err; - - err=message->FindString("name", &name); - if (err!= B_OK) - return err; - - BDirectory dir(&ref); - err= dir.InitCheck(); - if(err!= B_OK) - return err; - - BFile file(&dir, name, B_READ_WRITE | B_CREATE_FILE); - - err= file.InitCheck(); - if(err!= B_OK) - return err; - - err= BTranslationUtils::WriteStyledEditFile(fTextView, &file); - - if(err>= 0) + BDirectory dir(&ref); + err= dir.InitCheck(); + if(err!= B_OK) + return err; + + BFile file(&dir, name, B_READ_WRITE | B_CREATE_FILE); + + err= file.InitCheck(); + if(err!= B_OK) + return err; + + err= BTranslationUtils::WriteStyledEditFile(fTextView, &file); + + if(err>= 0) + { + SetTitle(name); + fSaveItem->SetEnabled(true); + if(fSaveMessage!= message) { - SetTitle(name); - fSaveItem->SetEnabled(true); - if(fSaveMessage!= message) - { - delete fSaveMessage; - fSaveMessage= new BMessage(*message); - } + delete fSaveMessage; + fSaveMessage= new BMessage(*message); } - - fSaveItem-> SetEnabled(false); - fTextSaved= true; - fRevertItem-> SetEnabled(true); - return err; + } + + // clear clean modes + fSaveItem->SetEnabled(false); + fRevertItem->SetEnabled(false); + fUndoCleans = false; + fRedoCleans = false; + fClean = true; + return err; } /***Save()***/ -void StyledEditWindow::OpenFile(entry_ref *ref){ - +void +StyledEditWindow::OpenFile(entry_ref *ref) +{ BFile file; status_t fileinit; @@ -669,7 +634,7 @@ void StyledEditWindow::OpenFile(entry_ref *ref){ if(fileinit== B_OK){ status_t result; - result= BTranslationUtils::GetStyledText(&file, fTextView, NULL); //he he he :) + result = fTextView->GetStyledText(&file); //he he he :) if(result==B_OK){ fSaveMessage= new BMessage(B_SAVE_REQUESTED); @@ -685,14 +650,14 @@ void StyledEditWindow::OpenFile(entry_ref *ref){ fSaveMessage->AddRef("directory",&parentRef); fSaveMessage->AddString("name", name); SetTitle(name); - fRevertItem-> SetEnabled(true); } } } }/*** StyledEditWindow::OpenFile() ***/ -void StyledEditWindow::RevertToSaved(){ - //translationutils here as well +void +StyledEditWindow::RevertToSaved() +{ //translationutils here as well entry_ref ref; const char *name; @@ -702,12 +667,27 @@ void StyledEditWindow::RevertToSaved(){ BDirectory dir(&ref); BFile file(&dir, name, B_READ_ONLY | B_CREATE_FILE); - fTextView->SetText(""); //clear the textview... - BTranslationUtils::GetStyledText(&file, fTextView, NULL); //and fill it from the file + fTextView->Reset(); //clear the textview... + fTextView->GetStyledText(&file); //and fill it from the file + + // clear undo modes + fUndoItem->SetLabel("Can't Undo"); + fUndoItem->SetEnabled(false); + fUndoFlag = false; + fCanUndo = false; + fRedoFlag = false; + fCanRedo = false; + // clear clean modes + fSaveItem->SetEnabled(false); + fRevertItem->SetEnabled(false); + fUndoCleans = false; + fRedoCleans = false; + fClean = true; }/***StyledEditWindow::RevertToSaved()***/ -status_t StyledEditWindow::PageSetup(const char *documentname){ - +status_t +StyledEditWindow::PageSetup(const char *documentname) +{ status_t result= B_ERROR; BPrintJob printJob(documentname); @@ -727,8 +707,9 @@ status_t StyledEditWindow::PageSetup(const char *documentname){ return result; }/***StyledEditWindow::PageSetup()***/ -void StyledEditWindow::Print(const char *documentname){ - +void +StyledEditWindow::Print(const char *documentname) +{ BPrintJob printJob(documentname); if (fPrintSettings== NULL){ @@ -775,8 +756,9 @@ void StyledEditWindow::Print(const char *documentname){ } }/***StyledEditWindow::Print()***/ -bool StyledEditWindow::Search(BString string, bool casesens, bool wrap, bool backsearch){ - +bool +StyledEditWindow::Search(BString string, bool casesens, bool wrap, bool backsearch) +{ int32 start; int32 finish; int32 strlen; @@ -792,28 +774,28 @@ bool StyledEditWindow::Search(BString string, bool casesens, bool wrap, bool bac int32 textStart, textFinish; fTextView->GetSelection(&textStart, &textFinish); //case insensitive, non wrap seems to be default in SE... - if(casesens== true) - start= viewText.FindFirst(string, textFinish); - else if(wrap== true) - start= viewText.IFindFirst(string); - else if(backsearch== true) - start= viewText.IFindLast(string, textStart); - else - start= viewText.IFindFirst(string, textFinish); //i.e this one... - + if(casesens== true) + start= viewText.FindFirst(string, textFinish); + else if(wrap== true) + start= viewText.IFindFirst(string); + else if(backsearch== true) + start= viewText.IFindLast(string, textStart); + else + start= viewText.IFindFirst(string, textFinish); //i.e this one... - if(start!= B_ERROR){ + if(start!= B_ERROR) { finish= start+ strlen; fTextView->Select(start, finish); fTextView->ScrollToSelection(); return true; - } else + } else { return false; - + } }/***StyledEditWindow::Search***/ -void StyledEditWindow::FindSelection(){ - +void +StyledEditWindow::FindSelection() +{ int32 selectionStart, selectionFinish; fTextView->GetSelection(&selectionStart,&selectionFinish); @@ -828,8 +810,9 @@ void StyledEditWindow::FindSelection(){ }/***StyledEditWindow::FindSelection()***/ -void StyledEditWindow::Replace(BString findthis, BString replaceWith, bool casesens, bool wrap, bool backsearch){ - +void +StyledEditWindow::Replace(BString findthis, BString replaceWith, bool casesens, bool wrap, bool backsearch) +{ int32 start; int32 replaceLength; int32 findLength; @@ -845,14 +828,14 @@ void StyledEditWindow::Replace(BString findthis, BString replaceWith, bool case int32 textStart, textFinish; fTextView->GetSelection(&textStart, &textFinish); - if(casesens== true) - start= viewText.FindFirst(findthis, textFinish); - else if(wrap== true) - start= viewText.IFindFirst(findthis); - else if(backsearch== true) - start= viewText.IFindLast(findthis, textStart); - else - start= viewText.IFindFirst(findthis, textFinish); + if(casesens== true) + start= viewText.FindFirst(findthis, textFinish); + else if(wrap== true) + start= viewText.IFindFirst(findthis); + else if(backsearch== true) + start= viewText.IFindLast(findthis, textStart); + else + start= viewText.IFindFirst(findthis, textFinish); if (start!= B_ERROR) { fTextView->Delete(start, start+ findLength); @@ -862,39 +845,42 @@ void StyledEditWindow::Replace(BString findthis, BString replaceWith, bool case }/***StyledEditWindow::Replace()***/ -void StyledEditWindow::ReplaceAll(BString findIt, BString replaceWith, bool caseSens){ - +void +StyledEditWindow::ReplaceAll(BString findIt, BString replaceWith, bool caseSens) +{ while(Search(findIt, caseSens, true, false)) Replace(findIt, replaceWith, caseSens, true, false); }/***StyledEditWindow::ReplaceAll()***/ -void StyledEditWindow::SearchAllWindows(BString find, BString replace, bool casesens){ +void +StyledEditWindow::SearchAllWindows(BString find, BString replace, bool casesens) +{ + int32 numWindows; + numWindows= be_app->CountWindows(); + + BMessage *message; + message= new BMessage(MSG_REPLACE_ALL); + message->AddString("FindText",find); + message->AddString("ReplaceText",replace); + message->AddBool("casesens", casesens); + + BMessenger *messenger; + + while(numWindows>=0){ + StyledEditWindow *win= dynamic_cast(be_app->WindowAt(numWindows)); + messenger= new BMessenger(win); + messenger->SendMessage(message); - int32 numWindows; - numWindows= be_app->CountWindows(); - - BMessage *message; - message= new BMessage(MSG_REPLACE_ALL); - message->AddString("FindText",find); - message->AddString("ReplaceText",replace); - message->AddBool("casesens", casesens); - - BMessenger *messenger; - - while(numWindows>=0){ - StyledEditWindow *win= dynamic_cast(be_app->WindowAt(numWindows)); - messenger= new BMessenger(win); - messenger->SendMessage(message); - - numWindows--; - } + numWindows--; + } }/***StyledEditWindow::SearchAllWindows***/ -void StyledEditWindow::SetFontSize(float fontSize){ - +void +StyledEditWindow::SetFontSize(float fontSize) +{ uint32 sameProperties; BFont font; @@ -903,16 +889,20 @@ void StyledEditWindow::SetFontSize(float fontSize){ fTextView->SetFontAndColor(&font,B_FONT_SIZE); }/***StyledEditWindow::SetFontSize()***/ -void StyledEditWindow::SetFontColor(rgb_color *color){ +void +StyledEditWindow::SetFontColor(rgb_color *color) +{ uint32 sameProperties; BFont font; - fTextView-> GetFontAndColor(&font,&sameProperties,NULL,NULL); - fTextView-> SetFontAndColor(&font, B_FONT_ALL,color); + fTextView->GetFontAndColor(&font,&sameProperties,NULL,NULL); + fTextView->SetFontAndColor(&font, B_FONT_ALL,color); }/***StyledEditWindow::SetFontColor()***/ -void StyledEditWindow::SetFontStyle(const char *fontFamily, const char *fontStyle){ +void +StyledEditWindow::SetFontStyle(const char *fontFamily, const char *fontStyle) +{ BFont font; uint32 sameProperties; @@ -922,7 +912,6 @@ void StyledEditWindow::SetFontStyle(const char *fontFamily, const char *fontStyl BMenuItem *superItem; superItem= fMenuBar->FindItem(fontFamily); - superItem-> SetMarked(true); + superItem->SetMarked(true); }/***StyledEditWindow::SetFontStyle()***/ - diff --git a/src/apps/stylededit/StyledEditWindow.h b/src/apps/stylededit/StyledEditWindow.h index 4726b87c18..57c4e292bf 100644 --- a/src/apps/stylededit/StyledEditWindow.h +++ b/src/apps/stylededit/StyledEditWindow.h @@ -1,94 +1,77 @@ - #ifndef STYLED_EDIT_WINDOW_H #define STYLED_EDIT_WINDOW_H -#ifndef _FILE_PANEL_H #include -#endif - -#ifndef _MENUBAR_H #include -#endif - -#ifndef _MESSAGE_H #include -#endif - -#ifndef _RECT_H #include -#endif - -#ifndef _STRING_H #include -#endif - -#ifndef _TEXTVIEW_H #include -#endif - -#ifndef _WINDOW_H #include -#endif -#ifndef STYLED_EDIT_VIEW_H -#include "StyledEditView.h" -#endif +class StyledEditView; - -class StyledEditWindow: public BWindow{ - public: - StyledEditWindow(BRect frame); - StyledEditWindow(BRect frame, entry_ref *ref); - ~StyledEditWindow(); - - - virtual bool QuitRequested(); - virtual void MessageReceived(BMessage *message); - - status_t Save(BMessage *message); - void OpenFile(entry_ref *ref); - status_t PageSetup(const char *documentname); - void Print(const char *documentname); - void SearchAllWindows(BString find, BString replace, bool casesens); +class StyledEditWindow + : public BWindow +{ +public: + StyledEditWindow(BRect frame, int32 id); + StyledEditWindow(BRect frame, entry_ref *ref); + ~StyledEditWindow(); - private: - void InitWindow(); - void Register(bool need_id); - void Unregister(void); - bool Search(BString searchfor, bool casesens, bool wrap, bool backsearch); - void FindSelection(); - void Replace(BString findthis, BString replacewith, bool casesens, bool wrap, bool backsearch); - void ReplaceAll(BString find, BString replace, bool casesens); - void SetFontSize(float fontSize); - void SetFontColor(rgb_color *color); - void SetFontStyle(const char *fontFamily, const char *fontStyle); - void RevertToSaved(); - - - BMenuBar *fMenuBar; - BMessage *fPrintSettings; - BMessage *fSaveMessage; - BMenuItem *fSaveItem; - BMenuItem *fRevertItem; - BMenuItem *fUndoItem; - BMenuItem *fCutItem; - BMenuItem *fCopyItem; - BMenuItem *fClearItem; - BMenuItem *fWrapItem; - BString fStringToFind; - BString fReplaceString; - bool fEnableItems; - bool fFirstEdit; - bool fTextSaved; - bool fUnDoneFlag; - bool fCaseSens; - bool fWrapAround; - bool fBackSearch; - StyledEditView *fTextView; - BScrollView *fScrollView; - BFilePanel *fSavePanel; - int32 fWindow_Id; + virtual void Quit(); + virtual bool QuitRequested(); + virtual void MessageReceived(BMessage *message); + + status_t Save(BMessage *message); + void OpenFile(entry_ref *ref); + status_t PageSetup(const char *documentname); + void Print(const char *documentname); + void SearchAllWindows(BString find, BString replace, bool casesens); + +private: + void InitWindow(); + bool Search(BString searchfor, bool casesens, bool wrap, bool backsearch); + void FindSelection(); + void Replace(BString findthis, BString replacewith, bool casesens, bool wrap, bool backsearch); + void ReplaceAll(BString find, BString replace, bool casesens); + void SetFontSize(float fontSize); + void SetFontColor(rgb_color *color); + void SetFontStyle(const char *fontFamily, const char *fontStyle); + void RevertToSaved(); + + BMenuBar *fMenuBar; + BMessage *fPrintSettings; + BMessage *fSaveMessage; + BMenuItem *fSaveItem; + BMenuItem *fRevertItem; + BMenuItem *fUndoItem; + BMenuItem *fCutItem; + BMenuItem *fCopyItem; + BMenuItem *fClearItem; + BMenuItem *fWrapItem; + BString fStringToFind; + BString fReplaceString; + + // undo modes + bool fUndoFlag; // we just did an undo action + bool fCanUndo; // we can do an undo action next + bool fRedoFlag; // we just did a redo action + bool fCanRedo; // we can do a redo action next + + // clean modes + bool fUndoCleans; // an undo action will put us in a clean state + bool fRedoCleans; // a redo action will put us in a clean state + bool fClean; // we are in a clean state + + bool fCaseSens; + bool fWrapAround; + bool fBackSearch; + + StyledEditView *fTextView; + BScrollView *fScrollView; + BFilePanel *fSavePanel; }; -#endif +#endif // STYLED_EDIT_WINDOW_H