1 /* 2 ** Copyright 2003-2005, Double Precision Inc. 3 ** 4 ** See COPYING for distribution information. 5 */ 6 7 #ifndef cursesattachmentdisplay_H 8 #define cursesattachmentdisplay_H 9 10 #include "config.h" 11 #include "curses/mycurses.H" 12 #include "curses/cursescontainer.H" 13 #include "curses/cursesbutton.H" 14 #include "curses/curseskeyhandler.H" 15 #include "mymessage.H" 16 #include "libmail/objectmonitor.H" 17 18 #include <list> 19 #include <string> 20 #include <vector> 21 22 class CursesMessage; 23 24 namespace mail { 25 class mimestruct; 26 } 27 28 //////////////////////////////////////////////////////////////// 29 // 30 // A list of message's attachments. We take a mimestruct, and 31 // unwrap it. 32 33 class CursesAttachmentDisplay : public CursesContainer, 34 public CursesKeyHandler { 35 36 mail::ptr<CursesMessage> messageInfoPtr; 37 38 class Attachment; 39 40 std::list<Curses *> children; // Labels created in this container. 41 42 std::list<Attachment *> attachment_list; 43 44 // A non-multipart attachments. 45 46 class Attachment : public CursesButton { 47 48 CursesAttachmentDisplay *parent; 49 std::string name; 50 public: 51 52 mail::mimestruct *mime; 53 mail::envelope *env; 54 bool deleted; 55 56 Attachment(CursesAttachmentDisplay *parentArg, 57 mail::mimestruct *mimeArg, 58 mail::envelope *envArg, 59 std::string nameArg); 60 ~Attachment(); 61 62 void clicked(); 63 bool processKeyInFocus(const Curses::Key &key); 64 65 void markDeleted(bool flag); 66 }; 67 68 class KeyImportHelper; 69 70 public: 71 CursesAttachmentDisplay(CursesContainer *parent, 72 CursesMessage *messageArg); 73 ~CursesAttachmentDisplay(); 74 75 private: 76 void createAttList(mail::mimestruct *mimePtr, int &rowNum, 77 int nestingLevel); 78 79 void createMsgAtt(mail::mimestruct *mimePtr, 80 mail::envelope *env, int &rowNum, int nestingLevel); 81 82 public: 83 // Inherited from Curses 84 int getWidth() const; 85 int getHeight() const; 86 87 bool isFocusable(); 88 void requestFocus(); 89 90 // Inherited from CursesKeyHandler 91 92 bool processKey(const Curses::Key &key); 93 bool listKeys( std::vector< std::pair<std::string, std::string> > &list); 94 95 void open(mail::mimestruct *mimePtr); 96 // Open a message/rfc822 attachment 97 98 void download(Attachment *a); 99 // Download an attachment. 100 101 static void downloadTo(CursesMessage *, mail::mimestruct *, 102 std::string); 103 }; 104 105 #endif 106