Files
Work/nntp/GROUPDLG.CPP
2024-08-07 09:16:27 -04:00

170 lines
5.4 KiB
C++

#include <nntp/groupdlg.hpp>
#include <nntp/entrydlg.hpp>
#include <common/gdipoint.hpp>
#include <common/purebmp.hpp>
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<NewsGroup> subscriberList;
mNewsReg.queryGroups(subscriberList);
mlpOwnerDrawList->setRedraw(FALSE);
mlpOwnerDrawList->resetContent();
for(int itemIndex=0;itemIndex<subscriberList.size();itemIndex++)
{
mlpOwnerDrawList->insertString(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);
}