Files
Work/mdiwin/DSLVDLG.CPP
2024-08-07 09:16:27 -04:00

229 lines
6.6 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);
}