#ifndef _MAIL_WINDOW_H
#define _MAIL_WINDOW_H
#include <Entry.h>
#include <Font.h>
#include <Locker.h>
#include <Messenger.h>
#include <ObjectList.h>
#include <Window.h>
#include <ToolBar.h>
#include <E-mail.h>
#include <mail_encoding.h>
class TContentView;
class TEnclosuresView;
class THeaderView;
class TMailApp;
class TMenu;
class TPrefsWindow;
class TSignatureWindow;
class BEmailMessage;
class BFile;
class BFilePanel;
class BMailMessage;
class BMenu;
class BMenuBar;
class BMenuItem;
class Words;
static const uint32 kMsgQuitAndKeepAllStatus = 'Qasm';
static const uint32 kMsgCloseAndKeepAllStatus = 'Casm';
class TMailWindow : public BWindow {
public:
TMailWindow(BRect frame, const char* title,
TMailApp* app, const entry_ref* ref,
const char* to, const BFont *font,
bool resending,
BMessenger* trackerMessenger);
virtual ~TMailWindow();
virtual void FrameResized(float width, float height);
virtual void MenusBeginning();
virtual void MenusEnded();
virtual void MessageReceived(BMessage*);
virtual bool QuitRequested();
virtual void Show();
virtual void Zoom(BPoint, float, float);
virtual void WindowActivated(bool state);
void SetTo(const char* mailTo, const char* subject,
const char* ccTo = NULL,
const char* bccTo = NULL,
const BString* body = NULL,
BMessage* enclosures = NULL);
void AddSignature(BMailMessage*);
void Forward(entry_ref*, TMailWindow*,
bool includeAttachments);
void Print();
void PrintSetup();
void Reply(entry_ref*, TMailWindow*, uint32);
void CopyMessage(entry_ref* ref, TMailWindow* src);
status_t Send(bool now);
status_t SaveAsDraft();
status_t OpenMessage(const entry_ref* ref,
uint32 characterSetForDecoding
= B_MAIL_NULL_CONVERSION);
status_t GetMailNodeRef(node_ref &nodeRef) const;
BEmailMessage* Mail() const { return fMail; }
bool GetTrackerWindowFile(entry_ref*,
bool dir) const;
void SaveTrackerPosition(entry_ref*);
void SetOriginatingWindow(BWindow* window);
void PreserveReadingPos(bool save);
void MarkMessageRead(entry_ref* message,
read_flags flag);
void SetTrackerSelectionToCurrent();
TMailWindow* FrontmostWindow();
void UpdateViews();
void UpdatePreferences();
protected:
void SetTitleForMessage();
void AddEnclosure(BMessage* msg);
void BuildToolBar();
status_t TrainMessageAs(const char* commandWord);
private:
status_t _GetQueryPath(BPath* path) const;
void _RebuildQueryMenu(bool firstTime = false);
char* _BuildQueryString(BEntry* entry) const;
void _LaunchQuery(const char* title,
const char* attribute, BString text);
void _CreateNewPerson(BString address, BString name);
void _AddReadButton();
void _UpdateReadButton();
void _UpdateLabel(uint32 command, const char* label,
bool show);
void _SetDownloading(bool downloading);
uint32 _CurrentCharacterSet() const;
static BBitmap* _RetrieveVectorIcon(int32 id);
private:
TMailApp* fApp;
BEmailMessage* fMail;
entry_ref* fRef;
int32 fFieldState;
BFilePanel* fPanel;
BMenuBar* fMenuBar;
BMenuItem* fAdd;
BMenuItem* fCut;
BMenuItem* fCopy;
BMenuItem* fHeader;
BMenuItem* fPaste;
BMenuItem* fPrint;
BMenuItem* fPrintSetup;
BMenuItem* fQuote;
BMenuItem* fRaw;
BMenuItem* fRemove;
BMenuItem* fRemoveQuote;
BMenuItem* fSendNow;
BMenuItem* fSendLater;
BMenuItem* fUndo;
BMenuItem* fRedo;
BMenuItem* fNextMsg;
BMenuItem* fPrevMsg;
BMenuItem* fDeleteNext;
BMenuItem* fSpelling;
BMenu* fSaveAddrMenu;
BMenu* fLabelMenu;
BMenu* fQueryMenu;
BMenu* fLeaveStatusMenu;
BMenu* fEncodingMenu;
BString fLabel;
struct BitmapItem {
BBitmap* bm;
int32 id;
};
static BObjectList<BitmapItem> sBitmapCache;
static BLocker sBitmapCacheLock;
BToolBar* fToolBar;
BRect fZoom;
TContentView* fContentView;
THeaderView* fHeaderView;
TEnclosuresView* fEnclosuresView;
TMenu* fSignature;
BMessenger fTrackerMessenger;
BMessenger fMessengerToSpamServer;
entry_ref fPrevRef;
entry_ref fNextRef;
bool fPrevTrackerPositionSaved : 1;
bool fNextTrackerPositionSaved : 1;
entry_ref fOpenFolder;
bool fSigAdded : 1;
bool fIncoming : 1;
bool fReplying : 1;
bool fResending : 1;
bool fSent : 1;
bool fDraft : 1;
bool fChanged : 1;
static BList sWindowList;
static BLocker sWindowListLock;
entry_ref fRepliedMail;
BMessenger* fOriginatingWindow;
bool fAutoMarkRead : 1;
bool fKeepStatusOnClose;
bool fDownloading;
};
#endif