#include #include #include #include GroupDialog::GroupDialog(const GUIWindow &parentWindow) : mhParent(parentWindow), mlpOwnerDrawList(0), mRGBGray(192,192,192), mBrush(mRGBGray) { mInitDialogHandler.setCallback(this,&GroupDialog::initDialogHandler); mCommandHandler.setCallback(this,&GroupDialog::commandHandler); mTimerHandler.setCallback(this,&GroupDialog::timerHandler); mMeasureItemHandler.setCallback(this,&GroupDialog::measureItemHandler); mControlColorHandler.setCallback(this,&GroupDialog::controlColorHandler); insertHandler(VectorHandler::CommandHandler,&mCommandHandler); insertHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); insertHandler(VectorHandler::TimerHandler,&mTimerHandler); insertHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); } GroupDialog::GroupDialog(const GroupDialog &someGroupDialog) : mhParent(someGroupDialog.mhParent), mlpOwnerDrawList(0), mRGBGray(192,192,192), mBrush(mRGBGray) { // no implementation mInitDialogHandler.setCallback(this,&GroupDialog::initDialogHandler); mCommandHandler.setCallback(this,&GroupDialog::commandHandler); mTimerHandler.setCallback(this,&GroupDialog::timerHandler); mMeasureItemHandler.setCallback(this,&GroupDialog::measureItemHandler); mControlColorHandler.setCallback(this,&GroupDialog::controlColorHandler); } GroupDialog::~GroupDialog() { if(mlpOwnerDrawList)delete mlpOwnerDrawList; removeHandler(VectorHandler::CommandHandler,&mCommandHandler); removeHandler(VectorHandler::InitDialogHandler,&mInitDialogHandler); removeHandler(VectorHandler::TimerHandler,&mTimerHandler); removeHandler(VectorHandler::ControlColorHandler,&mControlColorHandler); } WORD GroupDialog::performDialog(void) { ::DialogBoxParam(processInstance(),(LPSTR)"GroupDialog",mhParent,(DLGPROC)DWindow::DlgProc,(LONG)((DWindow*)this)); return FALSE; } CallbackData::ReturnType GroupDialog::initDialogHandler(CallbackData &/*someCallbackData*/) { setTimer(TimerID,100); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType GroupDialog::timerHandler(CallbackData &/*someCallbackData*/) { killTimer(TimerID); mlpOwnerDrawList=new OwnerDrawListCheck(*this,getItem(NewsGroupList),NewsGroupList,PureBitmap("CHECKBOXC",processInstance()),PureBitmap("CHECKBOX",processInstance())); getNewsGroups(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType GroupDialog::measureItemHandler(CallbackData &someCallbackData) { LPMEASUREITEMSTRUCT lpmis((LPMEASUREITEMSTRUCT)someCallbackData.lParam()); lpmis->itemHeight=20; return (CallbackData::ReturnType)TRUE; } CallbackData::ReturnType GroupDialog::controlColorHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)(GDIObj)mBrush; } CallbackData::ReturnType GroupDialog::drawItemHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)TRUE; } CallbackData::ReturnType GroupDialog::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wmCommandID()) { case IDOK : endDialog(TRUE); break; case IDCANCEL : endDialog(FALSE); break; case AddButton : handleAdd(); break; case DeleteButton : handleDelete(); break; case NewsGroupList : if(LBN_DBLCLK==someCallbackData.wmCommandCommand())handleModify(); else if(LBN_SELCHANGE==someCallbackData.wmCommandCommand())handleChange(); break; } return (CallbackData::ReturnType)FALSE; } void GroupDialog::handleAdd(void) { EntryDialog entryDialog(*this); String entryText; if(entryDialog.performDialog(entryText)&&mNewsReg.addGroup(entryText,FALSE)) mlpOwnerDrawList->insertString(entryText); } void GroupDialog::handleModify(void) { LRESULT currSelection(mlpOwnerDrawList->getCurrent()); String selString; String modString; if(LB_ERR==currSelection){::MessageBeep(0);return;} mlpOwnerDrawList->getText(selString,currSelection); modString=selString; EntryDialog entryDialog(*this); if(entryDialog.performDialog(modString)) { mNewsReg.removeGroup(selString); mNewsReg.addGroup(modString); mlpOwnerDrawList->deleteString(currSelection); mlpOwnerDrawList->insertString(modString); } } void GroupDialog::handleDelete(void) { LRESULT currSelection(sendMessage(NewsGroupList,LB_GETCURSEL,0,0L)); String selString; if(LB_ERR==currSelection){::MessageBeep(0);return;} mlpOwnerDrawList->getText(selString,currSelection); if(mNewsReg.removeGroup(selString))mlpOwnerDrawList->deleteString(currSelection); } void GroupDialog::getNewsGroups(void) { Block subscriberList; mNewsReg.queryGroups(subscriberList); mlpOwnerDrawList->setRedraw(FALSE); mlpOwnerDrawList->resetContent(); for(int itemIndex=0;itemIndexinsertString(subscriberList[itemIndex].newsGroup()); if(subscriberList[itemIndex].active())mlpOwnerDrawList->setSelection(itemIndex,TRUE); } mlpOwnerDrawList->setRedraw(TRUE); } void GroupDialog::handleChange(void) { GDIPoint cursorPoint; String groupName; LONG itemIndex; LONG selState; ::GetCursorPos(&((POINT&)cursorPoint)); ::ScreenToClient(getItem(NewsGroupList),&((POINT&)cursorPoint)); itemIndex=mlpOwnerDrawList->itemFromPoint(cursorPoint); if(LB_ERR==itemIndex)return; mlpOwnerDrawList->getText(groupName,itemIndex); selState=mlpOwnerDrawList->getSel(itemIndex); mNewsReg.setGroup(groupName,selState); }