Initial
This commit is contained in:
421
pop/POPDLG.CPP
Normal file
421
pop/POPDLG.CPP
Normal file
@@ -0,0 +1,421 @@
|
||||
#include <pop/popdlg.hpp>
|
||||
#include <pop/srvrdlg.hpp>
|
||||
#include <pop/popclnt.hpp>
|
||||
#include <pop/srvrreg.hpp>
|
||||
#include <pop/logindlg.hpp>
|
||||
#include <pop/header.hpp>
|
||||
#include <pop/mail.hpp>
|
||||
#include <pop/drgsprt.hpp>
|
||||
#include <common/systime.hpp>
|
||||
#include <common/opendlg.hpp>
|
||||
#include <common/purehdc.hpp>
|
||||
#include <common/crsctrl.hpp>
|
||||
#include <common/brush.hpp>
|
||||
#include <statbar/statbar.hpp>
|
||||
#include <imagelst/ftree.hpp>
|
||||
#include <imagelst/tvmsghdr.hpp>
|
||||
#include <imagelst/imgeinfo.hpp>
|
||||
#include <imagelst/hittest.hpp>
|
||||
|
||||
POPDlg::POPDlg(void)
|
||||
: mIsInDrag(FALSE), mhItemDrop(0), mhItemDrag(0)
|
||||
{
|
||||
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);
|
||||
mMailBeginDragHandler.setCallback(this,&POPDlg::mailBeginDragHandler);
|
||||
mFolderBeginDragHandler.setCallback(this,&POPDlg::folderBeginDragHandler);
|
||||
mMouseMoveHandler.setCallback(this,&POPDlg::mouseMoveHandler);
|
||||
mLeftButtonUpHandler.setCallback(this,&POPDlg::leftButtonUpHandler);
|
||||
|
||||
Callback<POPDlg> mRightButtonDownHandler;
|
||||
Callback<POPDlg> mRightButtonUpHandler;
|
||||
|
||||
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);
|
||||
DWindow::insertHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler);
|
||||
DWindow::insertHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler);
|
||||
}
|
||||
|
||||
POPDlg::~POPDlg()
|
||||
{
|
||||
DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
||||
DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
||||
DWindow::removeHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler);
|
||||
DWindow::removeHandler(VectorHandler::MouseMoveHandler,&mMouseMoveHandler);
|
||||
DWindow::removeHandler(VectorHandler::LeftButtonUpHandler,&mLeftButtonUpHandler);
|
||||
}
|
||||
|
||||
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),110);
|
||||
mFolderTree->insertHandler(FolderTree::BeginDragHandler,&mFolderBeginDragHandler);
|
||||
mMailTree=new FolderTree(*this,Rect(xMail,yMail,cxMail,cyMail),111);
|
||||
mMailTree->insertHandler(FolderTree::SelChangedHandler,&mMailSelChangedHandler);
|
||||
mMailTree->insertHandler(FolderTree::BeginDragHandler,&mMailBeginDragHandler);
|
||||
mFolderTree.disposition(PointerDisposition::Delete);
|
||||
mMailTree.disposition(PointerDisposition::Delete);
|
||||
mStatusBar.disposition(PointerDisposition::Delete);
|
||||
getMail();
|
||||
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::mouseMoveHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
if(!mIsInDrag)return (CallbackData::ReturnType)FALSE;
|
||||
GDIPoint mousePoint(someCallbackData.loWord(),someCallbackData.hiWord());
|
||||
mImageList.dragMove(GDIPoint(mousePoint.x(),mousePoint.y()+::GetSystemMetrics(SM_CYCAPTION)));
|
||||
handleFolderDrag();
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType POPDlg::leftButtonUpHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
if(!mIsInDrag)return (CallbackData::ReturnType)FALSE;
|
||||
mIsInDrag=FALSE;
|
||||
mImageList.dragLeave(*this);
|
||||
mImageList.endDrag();
|
||||
mImageList=(HIMAGELIST)0;
|
||||
copyItem(mhItemDrag,mhItemDrop);
|
||||
mMailTree->remove(mhItemDrag);
|
||||
mFolderTree->selectDropTarget((HTREEITEM)0);
|
||||
releaseCapture();
|
||||
mhItemDrag=0;
|
||||
mhItemDrop=0;
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType POPDlg::mailBeginDragHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
#if 0
|
||||
GDIPoint ptAction;
|
||||
HitTestInfo hitInfo;
|
||||
|
||||
mIsInDrag=TRUE;
|
||||
::GetCursorPos(&((POINT&)ptAction));
|
||||
::ScreenToClient(mMailTree->getControlWnd(),&((POINT&)ptAction));
|
||||
hitInfo.point(ptAction);
|
||||
mhItemDrag=mMailTree->hitTest(hitInfo);
|
||||
mMailTree->selectItem(mhItemDrag);
|
||||
mhItemDrag=hitInfo.item();
|
||||
mImageList=mMailTree->createDragImage(mhItemDrag);
|
||||
mImageList.dragShowNoLock(TRUE);
|
||||
mImageList.setDragCursorImage(0,GDIPoint());
|
||||
mImageList.beginDrag(0,GDIPoint());
|
||||
::GetCursorPos(&((POINT&)ptAction));
|
||||
::ScreenToClient(*this,&((POINT&)ptAction));
|
||||
ptAction.y(ptAction.y()+::GetSystemMetrics(SM_CYCAPTION));
|
||||
mImageList.dragMove(ptAction);
|
||||
mImageList.dragEnter(*this,ptAction);
|
||||
setCapture();
|
||||
#endif
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType POPDlg::mailSelChangedHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
String itemID;
|
||||
|
||||
::sprintf(itemID,"index:%d type:%d\n",someCallbackData.loWord()-1,someCallbackData.hiWord());
|
||||
::OutputDebugString(itemID);
|
||||
// TreeViewMessageHeader &treeViewMessageHeader=*((TreeViewMessageHeader*)someCallbackData.lParam());
|
||||
// setDisplay(someCallbackData.loWord()-1);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType POPDlg::rightButtonUpHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType POPDlg::rightButtonDownHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType POPDlg::folderBeginDragHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
void POPDlg::handleFolderDrag(void)
|
||||
{
|
||||
HTREEITEM hItemDrop;
|
||||
HitTestInfo hitInfo;
|
||||
GDIPoint ptAction;
|
||||
|
||||
::GetCursorPos(&((POINT&)ptAction));
|
||||
::ScreenToClient((HWND)(*mFolderTree),&((POINT&)ptAction));
|
||||
hitInfo.point(ptAction);
|
||||
if(0!=(hItemDrop=mFolderTree->hitTest(hitInfo)))
|
||||
{
|
||||
mImageList.dragLeave(*this);
|
||||
mFolderTree->selectDropTarget(hItemDrop);
|
||||
mhItemDrop=hItemDrop;
|
||||
::GetCursorPos(&((POINT&)ptAction));
|
||||
::ScreenToClient(*this,&((POINT&)ptAction));
|
||||
ptAction.y(ptAction.y()+::GetSystemMetrics(SM_CYCAPTION));
|
||||
mImageList.dragEnter(*this,ptAction);
|
||||
}
|
||||
}
|
||||
|
||||
void POPDlg::copyItem(HTREEITEM hDragItem,HTREEITEM hDropItem)
|
||||
{
|
||||
TreeViewInsert tvInsert;
|
||||
TreeViewItem tvItem;
|
||||
String strItem;
|
||||
|
||||
strItem.length(String::MaxString);
|
||||
tvItem.item(hDragItem);
|
||||
tvItem.maxText(String::MaxString);
|
||||
tvItem.text(strItem);
|
||||
tvItem.mask(TreeViewItem::MaskChildren|TreeViewItem::MaskHandle|TreeViewItem::MaskImage|TreeViewItem::MaskSelectedImage|TreeViewItem::MaskText);
|
||||
mMailTree->getItem(tvItem);
|
||||
tvInsert.parent(hDropItem);
|
||||
tvInsert.insertAfter(TreeViewInsert::InsertSort);
|
||||
tvInsert.viewItem(tvItem);
|
||||
mFolderTree->insertItem(tvInsert);
|
||||
mMailTree->invalidate();
|
||||
mMailTree->update();
|
||||
mFolderTree->invalidate();
|
||||
mFolderTree->update();
|
||||
return;
|
||||
}
|
||||
|
||||
void POPDlg::handleServer(CallbackData &someCallbackData)
|
||||
{
|
||||
ServerDialog serverDialog(*this);
|
||||
serverDialog.performDialog();
|
||||
}
|
||||
|
||||
void POPDlg::getMail(void)
|
||||
{
|
||||
retrieveMail();
|
||||
populateMail();
|
||||
populateFolders();
|
||||
}
|
||||
|
||||
#if 0
|
||||
void POPDlg::retrieveMail(void)
|
||||
{
|
||||
mMailBlock.remove();
|
||||
|
||||
for(int itemIndex=0;itemIndex<20;itemIndex++)
|
||||
{
|
||||
String strIndex;
|
||||
Block<String> mailBlock;
|
||||
::sprintf(strIndex,"(%d)",itemIndex);
|
||||
mailBlock.insert(&String(String("From: Sean Kessler")+strIndex+String("<europa@li.net>")));
|
||||
mailBlock.insert(&String(" "));
|
||||
mailBlock.insert(&String("Sean Kessler wrote:"));
|
||||
mailBlock.insert(&strIndex);
|
||||
mMailBlock.insert(&Mail(mailBlock));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#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<String> &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
|
||||
|
||||
|
||||
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)::MessageBox(*this,"No Messages","POPCLIENT",MB_OK);
|
||||
else
|
||||
{
|
||||
String strCount;
|
||||
::sprintf(strCount,"%d message(s)",messages);
|
||||
::MessageBox(*this,strCount,"POPCLIENT",MB_OK);
|
||||
}
|
||||
// for(int msgIndex=1;msgIndex<=messages;msgIndex++)
|
||||
// {
|
||||
// mMailBlock.insert(&Mail());
|
||||
// Block<String> &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();
|
||||
}
|
||||
|
||||
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;itemIndex<mMailBlock.size();itemIndex++)
|
||||
{
|
||||
TreeViewItem insertItem(0,0,0,0,(LPSTR)mMailBlock[itemIndex].from(),mMailBlock[itemIndex].from().length(),3,3,0,makeItemID(MailNode,itemIndex+1));
|
||||
mMailTree->addNode(TreeView::NodeChild,insertItem,strMailBox);
|
||||
}
|
||||
mMailTree->setRedraw(TRUE);
|
||||
}
|
||||
|
||||
void POPDlg::populateFolders(void)
|
||||
{
|
||||
String strUserFolder(STRING_USERFOLDERNAME);
|
||||
String strMainFolder("Main Folder");
|
||||
|
||||
mFolderTree->setRedraw(FALSE);
|
||||
mFolderTree->remove();
|
||||
mFolderTree->addRootNode(FolderTree::FolderClosed,strUserFolder,makeItemID(NullNode,RootID));
|
||||
TreeViewItem insertItem(0,0,0,0,(LPSTR)strMainFolder,strMainFolder.length(),3,3,0,makeItemID(MailNode,1));
|
||||
mFolderTree->addNode(TreeView::NodeChild,insertItem,strUserFolder);
|
||||
mFolderTree->setRedraw(TRUE);
|
||||
}
|
||||
|
||||
void POPDlg::setDisplay(int itemID)
|
||||
{
|
||||
String lineItem;
|
||||
Block<String> &mailList=mMailBlock[itemID];
|
||||
|
||||
if(itemID<0)return;
|
||||
for(int itemIndex=0;itemIndex<mailList.size();itemIndex++)
|
||||
{
|
||||
lineItem+=mailList[itemIndex];
|
||||
lineItem+="\r\n";
|
||||
}
|
||||
setText(EditControl,(LPSTR)lineItem);
|
||||
}
|
||||
|
||||
void POPDlg::userMessage(const String &message)
|
||||
{
|
||||
::MessageBox(*this,(LPSTR)(String&)message,(LPSTR)"POPClient",MB_OK);
|
||||
}
|
||||
|
||||
// **************** virtuals
|
||||
|
||||
void POPDlg::message(const String &messageString)
|
||||
{
|
||||
if(!mStatusBar.isOkay())return;
|
||||
mStatusBar->setText(messageString);
|
||||
}
|
||||
|
||||
void POPDlg::message(Block<String> &messageStrings)
|
||||
{
|
||||
if(!mStatusBar.isOkay())return;
|
||||
for(int lineIndex=0;lineIndex<messageStrings.size();lineIndex++)
|
||||
mStatusBar->setText(messageStrings[lineIndex]);
|
||||
}
|
||||
Reference in New Issue
Block a user