177 lines
4.6 KiB
C++
177 lines
4.6 KiB
C++
/*
|
|
* Copyright 2002-2012, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Mattias Sundblad
|
|
* Andrew Bachmann
|
|
* Jonas Sundström
|
|
*/
|
|
#ifndef STYLED_EDIT_WINDOW_H
|
|
#define STYLED_EDIT_WINDOW_H
|
|
|
|
|
|
#include <Alert.h>
|
|
#include <Node.h>
|
|
#include <Window.h>
|
|
|
|
struct entry_ref;
|
|
|
|
class BFilePanel;
|
|
class BMenu;
|
|
class BMenuBar;
|
|
class BMenuItem;
|
|
class BMessage;
|
|
class BScrollView;
|
|
class StatusView;
|
|
class StyledEditView;
|
|
class ColorMenuItem;
|
|
|
|
|
|
class StyledEditWindow : public BWindow {
|
|
public:
|
|
StyledEditWindow(BRect frame, int32 id,
|
|
uint32 encoding = 0);
|
|
StyledEditWindow(BRect frame, entry_ref* ref,
|
|
uint32 encoding = 0);
|
|
virtual ~StyledEditWindow();
|
|
|
|
virtual void Quit();
|
|
virtual bool QuitRequested();
|
|
virtual void MessageReceived(BMessage* message);
|
|
virtual void MenusBeginning();
|
|
|
|
status_t Save(BMessage* message = NULL);
|
|
status_t SaveAs(BMessage* message = NULL);
|
|
void OpenFile(entry_ref* ref);
|
|
status_t PageSetup(const char* documentName);
|
|
void Print(const char* documentName);
|
|
void SearchAllWindows(BString find, BString replace,
|
|
bool caseSensitive);
|
|
bool IsDocumentEntryRef(const entry_ref* ref);
|
|
|
|
private:
|
|
void _InitWindow(uint32 encoding = 0);
|
|
void _BuildFontColorMenu(BMenu* menu);
|
|
void _LoadAttrs();
|
|
void _SaveAttrs();
|
|
status_t _LoadFile(entry_ref* ref,
|
|
const char* forceEncoding = NULL);
|
|
void _ReloadDocument(BMessage *message);
|
|
status_t _UnlockFile();
|
|
bool _Search(BString searchFor, bool caseSensitive,
|
|
bool wrap, bool backSearch,
|
|
bool scrollToOccurence = true);
|
|
void _FindSelection();
|
|
bool _Replace(BString findThis, BString replaceWith,
|
|
bool caseSensitive, bool wrap,
|
|
bool backSearch);
|
|
void _ReplaceAll(BString find, BString replace,
|
|
bool caseSensitive);
|
|
void _SetFontSize(float fontSize);
|
|
void _SetFontColor(const rgb_color* color);
|
|
void _SetFontStyle(const char* fontFamily,
|
|
const char* fontStyle);
|
|
int32 _ShowStatistics();
|
|
void _SetReadOnly(bool editable);
|
|
void _UpdateCleanUndoRedoSaveRevert();
|
|
int32 _ShowAlert(const BString& text,
|
|
const BString& label, const BString& label2,
|
|
const BString& label3,
|
|
alert_type type) const;
|
|
BMenu* _PopulateEncodingMenu(BMenu* menu,
|
|
const char* encoding);
|
|
|
|
// node monitoring helper
|
|
class _NodeMonitorSuspender {
|
|
StyledEditWindow *fWindow;
|
|
public:
|
|
_NodeMonitorSuspender(StyledEditWindow *w) : fWindow(w) {
|
|
fWindow->_SwitchNodeMonitor(false);
|
|
}
|
|
|
|
~_NodeMonitorSuspender() {
|
|
fWindow->_SwitchNodeMonitor(true);
|
|
}
|
|
};
|
|
|
|
friend class _NodeMonitorSuspender;
|
|
|
|
void _HandleNodeMonitorEvent(BMessage *message);
|
|
void _ShowNodeChangeAlert(const char* name,
|
|
bool removed);
|
|
void _SwitchNodeMonitor(bool on,
|
|
entry_ref* ref = NULL);
|
|
|
|
private:
|
|
BMessage* fPrintSettings;
|
|
BMessage* fSaveMessage;
|
|
|
|
BMenu* fFontMenu;
|
|
BMenu* fFontSizeMenu;
|
|
BMenu* fFontColorMenu;
|
|
BMenuItem* fCurrentFontItem;
|
|
BMenuItem* fCurrentStyleItem;
|
|
|
|
BMenuItem* fSaveItem;
|
|
BMenuItem* fReloadItem;
|
|
|
|
BMenuItem* fUndoItem;
|
|
BMenuItem* fCutItem;
|
|
BMenuItem* fCopyItem;
|
|
|
|
BMenuItem* fFindAgainItem;
|
|
BMenuItem* fReplaceItem;
|
|
BMenuItem* fReplaceSameItem;
|
|
|
|
BMenuItem* fBoldItem;
|
|
BMenuItem* fItalicItem;
|
|
BMenuItem* fUnderlineItem;
|
|
|
|
BMenuItem* fWrapItem;
|
|
BMenuItem* fAlignLeft;
|
|
BMenuItem* fAlignCenter;
|
|
BMenuItem* fAlignRight;
|
|
BMenuItem* fEncodingItem;
|
|
BMenuItem* fRecentMenuItem;
|
|
|
|
BString fStringToFind;
|
|
BString fReplaceString;
|
|
|
|
ColorMenuItem* fDefaultFontColorItem;
|
|
|
|
// 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 fCaseSensitive;
|
|
bool fWrapAround;
|
|
bool fBackSearch;
|
|
|
|
StyledEditView* fTextView;
|
|
BScrollView* fScrollView;
|
|
StatusView* fStatusView;
|
|
|
|
BFilePanel* fSavePanel;
|
|
BMenu* fSavePanelEncodingMenu;
|
|
// node monitoring
|
|
node_ref fNodeRef;
|
|
node_ref fFolderNodeRef;
|
|
bool fNagOnNodeChange;
|
|
|
|
BWindow* fFindWindow;
|
|
BWindow* fReplaceWindow;
|
|
};
|
|
|
|
|
|
#endif // STYLED_EDIT_WINDOW_H
|