170 lines
5.4 KiB
C++
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);
|
|
}
|