#include #include #include #include #include #include #include #include #include #include #include POPDlg::POPDlg(void) { mInitHandler.setCallback(this,&POPDlg::initHandler); mDestroyHandler.setCallback(this,&POPDlg::destroyHandler); mCommandHandler.setCallback(this,&POPDlg::commandHandler); mCloseHandler.setCallback(this,&POPDlg::closeHandler); mDlgCodeHandler.setCallback(this,&POPDlg::dlgCodeHandler); mMailSelChangedHandler.setCallback(this,&POPDlg::mailSelChangedHandler); DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); } POPDlg::~POPDlg() { DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); } POPDlg &POPDlg::operator=(const POPDlg &/*somePOPDlg*/) { // private implementation return *this; } BOOL POPDlg::perform(void) { return ::DialogBoxParam(processInstance(),(LPSTR)"POPCLIENT",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this); } CallbackData::ReturnType POPDlg::initHandler(CallbackData &/*someCallbackData*/) { mStatusBar=new StatusBar(*this); mFolderTree=new FolderTree(*this,Rect(xFolder,yFolder,cxFolder,cyFolder)); mMailTree=new FolderTree(*this,Rect(xMail,yMail,cxMail,cyMail)); mMailTree->insertHandler(FolderTree::SelChangedHandler,&mMailSelChangedHandler); mStatusBar.disposition(PointerDisposition::Delete); // getMail(); // retrieveMail(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType POPDlg::destroyHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType POPDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; } CallbackData::ReturnType POPDlg::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wmCommandID()) { case IDOK : break; case IDCANCEL : endDialog(FALSE); break; case Server : handleServer(someCallbackData); break; case GetMail : getMail(); break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType POPDlg::closeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType POPDlg::mailSelChangedHandler(CallbackData &someCallbackData) { setDisplay(someCallbackData.loWord()); return (CallbackData::ReturnType)FALSE; } void POPDlg::handleServer(CallbackData &someCallbackData) { ServerDialog serverDialog(*this); serverDialog.performDialog(); } void POPDlg::getMail(void) { retrieveMail(); populateMail(); populateFolders(); } void POPDlg::retrieveMail(void) { mMailBlock.remove(); for(int itemIndex=0;itemIndex<20;itemIndex++) { Block mailBlock; mailBlock.insert(&String("From: Sean Kessler")); mailBlock.insert(&String(" ")); mailBlock.insert(&String("Sean Kessler wrote:")); mailBlock.insert(&String("hello")); mMailBlock.insert(&Mail(mailBlock)); } } #if 0 void POPDlg::retrieveMail(void) { POPClient popClient; ServerReg serverReg; WORD messages; WORD octets; mMailBlock.remove(); if(!handleLoginParams(serverReg)){userMessage("Incorrect Login.");return;} if(!popClient.open(serverReg.serverName())){userMessage("Connect Failed..");return;} if(!popClient.authenticate(serverReg.userName(),serverReg.password())) { popClient.quit(); popClient.close(); userMessage("Authentication Failed."); return; } popClient.stat(messages,octets); if(!messages){userMessage("No Messages.");return;} for(int msgIndex=1;msgIndex<=messages;msgIndex++) { mMailBlock.insert(&Mail()); Block &msgLines=mMailBlock[mMailBlock.size()-1]; Header &mailHeader=mMailBlock[mMailBlock.size()-1]; popClient.retrieve(msgIndex,msgLines); mailHeader=msgLines; if(!msgLines.size())continue; } popClient.quit(); popClient.close(); } #endif BOOL POPDlg::handleLoginParams(ServerReg &serverReg) { if(serverReg.serverName().isNull()){::MessageBox(*this,(LPSTR)"No Server Defined",(LPSTR)"SERVER ERROR",MB_ICONSTOP);return FALSE;} if(serverReg.userName().isNull()||serverReg.password().isNull()) { String userName; String password; LoginDialog loginDialog; if(!loginDialog.performLogin())return FALSE; userName=loginDialog.userName(); password=loginDialog.password(); serverReg.userName(userName); serverReg.password(password); } if(serverReg.userName().isNull()||serverReg.password().isNull())return FALSE; return TRUE; } void POPDlg::populateMail(void) { String strMailBox(STRING_MAILBOXNAME); mMailTree->setRedraw(FALSE); mMailTree->remove(); mMailTree->addRootNode(FolderTree::FolderClosed,strMailBox,makeItemID(NullNode,RootID)); for(int itemIndex=0;itemIndexaddNode(TreeView::NodeChild,insertItem,strMailBox); } mMailTree->setRedraw(TRUE); } void POPDlg::populateFolders(void) { String strUserFolder(STRING_USERFOLDERNAME); mFolderTree->setRedraw(FALSE); mFolderTree->remove(); mFolderTree->addRootNode(FolderTree::FolderClosed,strUserFolder,makeItemID(NullNode,RootID)); mFolderTree->setRedraw(TRUE); } void POPDlg::setDisplay(int itemID) { String lineItem; Block &mailList=mMailBlock[itemID]; for(int itemIndex=0;itemIndexsetText(messageString); } void POPDlg::message(Block &messageStrings) { if(!mStatusBar.isOkay())return; for(int lineIndex=0;lineIndexsetText(messageStrings[lineIndex]); }