174 lines
4.8 KiB
C++
174 lines
4.8 KiB
C++
#include <guitar/RangeDlg.hpp>
|
|
#include <guitar/RangeEditDlg.hpp>
|
|
#include <guitar/guitar.hpp>
|
|
#include <guitar/TabEntry.hpp>
|
|
#include <guitar/MessageBox.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
#include <common/crsctrl.hpp>
|
|
|
|
RangeDialog::RangeDialog(void)
|
|
{
|
|
mInitHandler.setCallback(this,&RangeDialog::initHandler);
|
|
mCreateHandler.setCallback(this,&RangeDialog::createHandler);
|
|
mCloseHandler.setCallback(this,&RangeDialog::closeHandler);
|
|
mDestroyHandler.setCallback(this,&RangeDialog::destroyHandler);
|
|
mCommandHandler.setCallback(this,&RangeDialog::commandHandler);
|
|
insertHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
insertHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
RangeDialog::RangeDialog(const RangeDialog &someRangeDialog)
|
|
{ // private implementation
|
|
*this=someRangeDialog;
|
|
}
|
|
|
|
RangeDialog::~RangeDialog()
|
|
{
|
|
removeHandler(VectorHandler::InitDialogHandler,&mInitHandler);
|
|
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
removeHandler(VectorHandler::CloseHandler,&mCloseHandler);
|
|
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
}
|
|
|
|
RangeDialog &RangeDialog::operator=(const RangeDialog &someRangeDialog)
|
|
{ // private implementation
|
|
return *this;
|
|
}
|
|
|
|
bool RangeDialog::perform(GUIWindow &parentWindow,const TabRanges &ranges,int maxRange,bool isSelect)
|
|
{
|
|
Rect clientRect;
|
|
parentWindow.clientRect(clientRect);
|
|
mDisplayPoint.x((clientRect.right()-clientRect.left())/2);
|
|
mDisplayPoint.y((clientRect.bottom()-clientRect.top())/2);
|
|
mTabRanges=ranges;
|
|
mMaxRange=maxRange;
|
|
mIsSelection=isSelect;
|
|
return ::DialogBoxParam(processInstance(),(LPSTR)"RANGEDIALOG",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this);
|
|
}
|
|
|
|
CallbackData::ReturnType RangeDialog::initHandler(CallbackData &someCallbackData)
|
|
{
|
|
Block<PureDWORD> stops;
|
|
mDisplayPoint.x(mDisplayPoint.x()-(width()/2));
|
|
mDisplayPoint.y(mDisplayPoint.y()-(height()/2));
|
|
move(mDisplayPoint);
|
|
mRangeList=::new OwnerDrawListAltColor(*this,getItem(RANGE_LIST),RANGE_LIST);
|
|
mRangeList.disposition(PointerDisposition::Delete);
|
|
stops.insert(&PureDWORD(35));
|
|
stops.insert(&PureDWORD(55));
|
|
mRangeList->setTabStops(stops);
|
|
setRangeList();
|
|
if(mIsSelection)
|
|
{
|
|
enable(RANGE_INSERT,false);
|
|
enable(RANGE_DELETE,false);
|
|
setCaption("Range Select");
|
|
}
|
|
return (CallbackData::ReturnType)false;
|
|
}
|
|
|
|
CallbackData::ReturnType RangeDialog::createHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType RangeDialog::closeHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType RangeDialog::destroyHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType RangeDialog::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case IDCANCEL :
|
|
endDialog(false);
|
|
break;
|
|
case IDOK :
|
|
if(mIsSelection)handleRangeSelection();
|
|
endDialog(true);
|
|
break;
|
|
case RANGE_INSERT :
|
|
handleRangeInsert();
|
|
break;
|
|
case RANGE_DELETE :
|
|
handleRangeDelete();
|
|
break;
|
|
}
|
|
if(LBN_DBLCLK==someCallbackData.wmCommandCommand())
|
|
{
|
|
if(mIsSelection)
|
|
{
|
|
handleRangeSelection();
|
|
endDialog(true);
|
|
}
|
|
else handleRangeEditSelection();
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void RangeDialog::setRangeList(void)
|
|
{
|
|
for(int index=0;index<mTabRanges.size();index++)
|
|
{
|
|
String strItem;
|
|
Range &range=mTabRanges[index];
|
|
mRangeList->addString(range.toTabbedString());
|
|
}
|
|
mRangeList->setCurrent(0);
|
|
return;
|
|
}
|
|
|
|
void RangeDialog::handleRangeSelection(void)
|
|
{
|
|
mSelection=mRangeList->getCurrent();
|
|
}
|
|
|
|
void RangeDialog::handleRangeEditSelection(void)
|
|
{
|
|
RangeEditDialog rangeEditDialog;
|
|
int currSel;
|
|
|
|
currSel=mRangeList->getCurrent();
|
|
if(!rangeEditDialog.perform(*this,mTabRanges[currSel],mMaxRange))return;
|
|
Range range=rangeEditDialog.getRange();
|
|
mTabRanges.remove(currSel);
|
|
mTabRanges.insert(&range);
|
|
mRangeList->deleteString(currSel);
|
|
mRangeList->insertString(range.toTabbedString());
|
|
}
|
|
|
|
void RangeDialog::handleRangeInsert(void)
|
|
{
|
|
RangeEditDialog rangeEditDialog;
|
|
Range range;
|
|
|
|
if(!rangeEditDialog.perform(*this,range,mMaxRange))return;
|
|
range=rangeEditDialog.getRange();
|
|
mTabRanges.insert(&range);
|
|
mRangeList->insertString(range.toTabbedString());
|
|
}
|
|
|
|
void RangeDialog::handleRangeDelete(void)
|
|
{
|
|
int currSel;
|
|
|
|
if(-1==(currSel=mRangeList->getCurrent()))return;
|
|
if(IDCANCEL==MessageBox::messageBox(*this,"Confirm Delete","Delete Range Item"))return;
|
|
mRangeList->deleteString(currSel);
|
|
mTabRanges.remove(currSel);
|
|
currSel--;
|
|
if(currSel<0)mRangeList->setCurrent(0);
|
|
else mRangeList->setCurrent(currSel);
|
|
}
|