229 lines
6.6 KiB
C++
229 lines
6.6 KiB
C++
#include <stdio.h>
|
||
#include <mdiwin/windowsx.hpp>
|
||
#include <mdiwin/dslvdlg.hpp>
|
||
#include <mdiwin/string.hpp>
|
||
#include <mdiwin/mdiwin.h>
|
||
#include <mdiwin/main.hpp>
|
||
|
||
AdjustDissolve::AdjustDissolve(HWND hParent)
|
||
: mhParent(hParent), mhInstance(Main::processInstance(hParent))
|
||
{
|
||
}
|
||
|
||
AdjustDissolve::~AdjustDissolve()
|
||
{
|
||
}
|
||
|
||
WORD AdjustDissolve::adjustDissolve(Block<Schedule> &dissolveSchedule,WORD nFrames)
|
||
{
|
||
WORD returnCode(FALSE);
|
||
|
||
if(!nFrames)return returnCode;
|
||
if(dissolveSchedule.size())
|
||
{
|
||
mDissolveSchedule=dissolveSchedule;
|
||
mFrames=(int)mDissolveSchedule.size();
|
||
}
|
||
else mFrames=nFrames;
|
||
returnCode=::DialogBoxParam(mhInstance,(LPSTR)"Dissolve",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this));
|
||
if(returnCode)dissolveSchedule=mDissolveSchedule;
|
||
else dissolveSchedule.remove();
|
||
return returnCode;
|
||
}
|
||
|
||
int AdjustDissolve::DlgProc(UINT message,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
switch(message)
|
||
{
|
||
case WM_INITDIALOG :
|
||
Main::smhBitmap.associate(IDOK,
|
||
String(STRING_BITMAPOKFOCUSUP,mhInstance),
|
||
String(STRING_BITMAPOKNOFUP,mhInstance),
|
||
String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS);
|
||
Main::smhBitmap.associate(IDCANCEL,
|
||
String(STRING_BITMAPCAFOCUSUP,mhInstance),
|
||
String(STRING_BITMAPCANOFUP,mhInstance),
|
||
String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS);
|
||
initializeList();
|
||
return TRUE;
|
||
case WM_DRAWITEM :
|
||
switch(((LPDRAWITEMSTRUCT)lParam)->CtlID)
|
||
{
|
||
case IDOK :
|
||
Main::smhBitmap.handleOwnerButton(IDOK,lParam);
|
||
return TRUE;
|
||
case IDCANCEL :
|
||
Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam);
|
||
return TRUE;
|
||
}
|
||
break;
|
||
case WM_COMMAND :
|
||
switch(GET_WM_COMMAND_ID(wParam,lParam))
|
||
{
|
||
case DSLV_LIST :
|
||
if(LBN_DBLCLK==HIWORD(lParam))handleEditEvent();
|
||
break;
|
||
case IDCANCEL :
|
||
Main::smhBitmap.freeButton(IDOK);
|
||
Main::smhBitmap.freeButton(IDCANCEL);
|
||
::EndDialog(GetHandle(),FALSE);
|
||
return TRUE;
|
||
case IDOK :
|
||
Main::smhBitmap.freeButton(IDOK);
|
||
Main::smhBitmap.freeButton(IDCANCEL);
|
||
::EndDialog(GetHandle(),TRUE);
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
void AdjustDissolve::initializeList(void)
|
||
{
|
||
String formattingString;
|
||
size_t size;
|
||
|
||
formattingString.reserve(String::MaxString);
|
||
if(!mDissolveSchedule.size())Schedule::createSchedule(mDissolveSchedule,mFrames);
|
||
size=(int)mDissolveSchedule.size();
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_RESETCONTENT,0,0L);
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,WM_SETREDRAW,FALSE,0L);
|
||
for(int i=0;i<size;i++)
|
||
{
|
||
::sprintf(formattingString,"%d)\t%7.4lf\t%7.4lf\t %d",
|
||
i+1,mDissolveSchedule[i].srcWeight(),mDissolveSchedule[i].dstWeight(),
|
||
mDissolveSchedule[i].count());
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_ADDSTRING,0,(LPARAM)(LPCSTR)formattingString);
|
||
}
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,WM_SETREDRAW,TRUE,0L);
|
||
}
|
||
|
||
void AdjustDissolve::handleEditEvent()
|
||
{
|
||
Schedule selectSchedule;
|
||
String tempString;
|
||
DWORD curSel;
|
||
char *ptr;
|
||
|
||
curSel=::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_GETCURSEL,0,0L);
|
||
if(LB_ERR==(LONG)curSel)return;
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_GETTEXT,(int)curSel,(LPARAM)(LPSTR)tempString);
|
||
ptr=::strtok(tempString,"\t");
|
||
if(!ptr)return;
|
||
ptr=::strtok(0,"\t");
|
||
if(!ptr)return;
|
||
selectSchedule.srcWeight(::atof(ptr));
|
||
ptr=::strtok(0,"\t");
|
||
if(!ptr)return;
|
||
selectSchedule.dstWeight(::atof(ptr));
|
||
ptr=::strtok(0,"\0");
|
||
if(!ptr)return;
|
||
selectSchedule.count(::atoi(ptr));
|
||
EditItem editItem(GetHandle());
|
||
if(editItem.editItem(selectSchedule))
|
||
{
|
||
::sprintf(tempString,"%d)\t%7.4lf\t%7.4lf\t %d",
|
||
(int)curSel+1,selectSchedule.srcWeight(),selectSchedule.dstWeight(),
|
||
selectSchedule.count());
|
||
mDissolveSchedule[curSel]=selectSchedule;
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_DELETESTRING,(int)curSel,0L);
|
||
::SendDlgItemMessage(GetHandle(),DSLV_LIST,LB_INSERTSTRING,(int)curSel,(LPARAM)(LPSTR)tempString);
|
||
}
|
||
}
|
||
|
||
// **********************************************************************
|
||
// **********************************************************************
|
||
|
||
EditItem::EditItem(HWND hParent)
|
||
: mhParent(hParent), mhInstance(Main::processInstance(hParent))
|
||
{
|
||
}
|
||
|
||
EditItem::~EditItem()
|
||
{
|
||
}
|
||
|
||
WORD EditItem::editItem(Schedule &dissolveItem)
|
||
{
|
||
mDissolveItem=dissolveItem;
|
||
int returnCode;
|
||
|
||
returnCode=::DialogBoxParam(mhInstance,(LPSTR)"EditDissolve",mhParent,(DLGPROC)DWindow::DialogProcedure,(LONG)((DWindow*)this));
|
||
if(returnCode)dissolveItem=mDissolveItem;
|
||
return returnCode;
|
||
}
|
||
|
||
int EditItem::DlgProc(UINT message,WPARAM wParam,LPARAM lParam)
|
||
{
|
||
switch(message)
|
||
{
|
||
case WM_INITDIALOG :
|
||
Main::smhBitmap.associate(IDOK,
|
||
String(STRING_BITMAPOKFOCUSUP,mhInstance),
|
||
String(STRING_BITMAPOKNOFUP,mhInstance),
|
||
String(STRING_BITMAPOKFOCUSDN,mhInstance),OwnerDraw::NOFOCUS);
|
||
Main::smhBitmap.associate(IDCANCEL,
|
||
String(STRING_BITMAPCAFOCUSUP,mhInstance),
|
||
String(STRING_BITMAPCANOFUP,mhInstance),
|
||
String(STRING_BITMAPCAFOCUSDN,mhInstance),OwnerDraw::NOFOCUS);
|
||
displayDissolveSchedule();
|
||
return TRUE;
|
||
case WM_DRAWITEM :
|
||
switch(((LPDRAWITEMSTRUCT)lParam)->CtlID)
|
||
{
|
||
case IDOK :
|
||
Main::smhBitmap.handleOwnerButton(IDOK,lParam);
|
||
return TRUE;
|
||
case IDCANCEL :
|
||
Main::smhBitmap.handleOwnerButton(IDCANCEL,lParam);
|
||
return TRUE;
|
||
}
|
||
break;
|
||
case WM_COMMAND :
|
||
switch(GET_WM_COMMAND_ID(wParam,lParam))
|
||
{
|
||
case IDCANCEL :
|
||
Main::smhBitmap.freeButton(IDOK);
|
||
Main::smhBitmap.freeButton(IDCANCEL);
|
||
::EndDialog(GetHandle(),FALSE);
|
||
return TRUE;
|
||
case IDOK :
|
||
if(!captureDissolveSchedule())
|
||
{
|
||
::MessageBeep(0);
|
||
break;
|
||
}
|
||
Main::smhBitmap.freeButton(IDOK);
|
||
Main::smhBitmap.freeButton(IDCANCEL);
|
||
::EndDialog(GetHandle(),TRUE);
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
WORD EditItem::captureDissolveSchedule(void)
|
||
{
|
||
String tempString;
|
||
|
||
::GetDlgItemText(GetHandle(),EDITITEM_SOURCE,tempString,String::MaxString);
|
||
mDissolveItem.srcWeight(::atof(tempString));
|
||
::GetDlgItemText(GetHandle(),EDITITEM_DESTINATION,tempString,String::MaxString);
|
||
mDissolveItem.dstWeight(::atof(tempString));
|
||
::GetDlgItemText(GetHandle(),EDITITEM_REPEAT,tempString,String::MaxString);
|
||
mDissolveItem.count(::atoi(tempString));
|
||
return mDissolveItem.isValid();
|
||
}
|
||
|
||
void EditItem::displayDissolveSchedule(void)const
|
||
{
|
||
String tempString;
|
||
|
||
::sprintf(tempString,"%7.4lf",mDissolveItem.srcWeight());
|
||
::SetDlgItemText(GetHandle(),EDITITEM_SOURCE,tempString);
|
||
::sprintf(tempString,"%7.4lf",mDissolveItem.dstWeight());
|
||
::SetDlgItemText(GetHandle(),EDITITEM_DESTINATION,tempString);
|
||
::sprintf(tempString,"%d",mDissolveItem.count());
|
||
::SetDlgItemText(GetHandle(),EDITITEM_REPEAT,tempString);
|
||
}
|
||
|