www.pudn.com > 1.rar > I2BaseWBSet.cpp
// I2BaseWBSet.cpp: implementation of the CI2WBBaseWBSet class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "iaspwb.h"
HINSTANCE g_hinstance;
UINT g_wb32clipformat;
void initLib()
{
g_hinstance=GetModuleHandle("iaspwb.dll");
InitCommonControls();
CI2WBBaseWB wb(NULL);
wb.registerClassEx();
}
CI2WBBaseWBSet::CI2WBBaseWBSet()
{
m_whiteboardindex=-1;
m_controlsetpos=0;
m_wbcallback=NULL;
m_prop_linewidth=1;
m_prop_linestyle=PS_SOLID;
m_prop_color=RGB(0,0,0);
m_prop_bkcolor=RGB(255,255,255);
m_prop_font.size=9;
m_prop_font.color=RGB(0,0,0);
m_prop_font.style=0;
HFONT font=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
LOGFONT logfont;
GetObject(font,sizeof(LOGFONT),(void*)&logfont);
lstrcpy(m_prop_font.name,logfont.lfFaceName);
m_stream=NULL;
m_findi=TRUE;
m_indipos.x=WB_INDICATE_XOFFSET;
m_indipos.y=WB_INDICATE_YOFFSET;
m_permit=1;
m_erase=0;
}
CI2WBBaseWBSet::~CI2WBBaseWBSet()
{
int i,j;
j=m_whiteboardlist.get_Count()-1;
for(i=j;i>=0;i--)
{
delete (CI2WBBaseWB*)(m_whiteboardlist.get_Items()[i]);
m_whiteboardlist.Delete(i);
}
j=m_controlsetlist.get_Count()-1;
for(i=j;i>=0;i--)
{
delete m_controlsetlist.get_Items()[i];
m_controlsetlist.Delete(i);
}
}
void CI2WBBaseWBSet::addWb(LPSTR pwbname,INT index,BOOL fsend,BOOL fsync)
{
if(m_whiteboardindex!=-1)
{
CI2WBBaseWB* pwb1=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
if(pwb1->m_wbs==wbsInplaceEditorActive)
pwb1->closeInplaceEditor();//close inplace editor
}
CI2WBBaseWB* pwb=new CI2WBBaseWB(this);
if(!pwb)
throw new I2BaseException(I2E_OUTOFMEMORY);
pwb->createEx(0,WB32CLASSNAME,NULL,
WS_CHILD|WS_VISIBLE,
0,0,WB_DEFAULT_WIDTH,WB_DEFAULT_HEIGHT,
m_hwnd,NULL);
HWND h;
if(m_whiteboardindex > -1)
{
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_HIDE);
}
if(index>0 && indexset_Name(buf);
}
else
pwb->set_Name(pwbname);
if(m_wbcallback)
m_wbcallback(WB32_SETCURWB,(void*)&(m_whiteboardindex));
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_SHOW);
if(fsend)
{
CHAR tmpbuf[MAX_CTRLIDNAME];
pwb->get_Name(tmpbuf);
sendSlideShow(WB_NEW,tmpbuf);
}
if(!fsync)
pwb->set_Sync(FALSE);
}
BOOL CI2WBBaseWBSet::setWb(INT index,BOOL fsend)
{
if(m_whiteboardindex==-1 )
return TRUE;
ShowWindow((HWND)(*m_whiteboardlist[m_whiteboardindex]),SW_HIDE);
if(index<0 || index>m_whiteboardlist.get_Count()-1)
m_whiteboardindex=0;
else
m_whiteboardindex=index;
ShowWindow((HWND)(*m_whiteboardlist[m_whiteboardindex]),SW_SHOW);
if(fsend)
sendSlideShow(WB_SET,NULL);
if(m_wbcallback)
m_wbcallback(WB32_SETCURWB,(void*)&(m_whiteboardindex));
//sync
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
if(!(pwb->get_Sync()))
return FALSE;//need sync
return TRUE;
}
void CI2WBBaseWBSet::delWb(LPSTR wbname,BOOL fsend)
{
INT index;
index=getWbIndex(wbname);
delWb(index,fsend);
}
void CI2WBBaseWBSet::delWb(INT index,BOOL fsend)
{
if(m_whiteboardindex!=-1)
{
CI2WBBaseWB* pwb1=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
if(pwb1->m_wbs==wbsInplaceEditorActive)
pwb1->closeInplaceEditor();//close inplace editor
}
HWND h;
if(m_whiteboardindex==-1)
return;
if(index-1<0 && index!=-1)
return;
if( index-1>=m_whiteboardlist.get_Count())
return;
CHAR buf[256];
memset(buf,0,256);
if(index-1 == m_whiteboardindex || index == -1)
{
get_Name(buf,m_whiteboardindex);
delete m_whiteboardlist[m_whiteboardindex];
m_whiteboardlist.Delete(m_whiteboardindex);
if(m_whiteboardindex-1>=0)
{
m_whiteboardindex--;
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_SHOW);
}
else
{
m_whiteboardindex = m_whiteboardlist.get_Count()-1;
if(m_whiteboardindex!=-1)
{
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_SHOW);
}
}
}
else
{
get_Name(buf,index-1);
delete m_whiteboardlist[index-1];
m_whiteboardlist.Delete(index-1);
if(index-1 < m_whiteboardindex)
m_whiteboardindex=m_whiteboardindex-1;
}
if(fsend)
{
sendSlideShow(WB_DEL,buf);
}
if(m_wbcallback)
m_wbcallback(WB32_SETCURWB,(void*)&(m_whiteboardindex));
}
BOOL CI2WBBaseWBSet::prevWb(BOOL fsend)
{
HWND h;
if(m_whiteboardindex==-1 )
return TRUE;
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_HIDE);
m_whiteboardindex=m_whiteboardindex-1;
if(m_whiteboardindex<0)
m_whiteboardindex=m_whiteboardlist.get_Count()-1;
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_SHOW);
if(fsend)
sendSlideShow(WB_SET,NULL);
if(m_wbcallback)
m_wbcallback(WB32_SETCURWB,(void*)&(m_whiteboardindex));
//sync
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
if(pwb->m_wbs==wbsInplaceEditorActive)
pwb->closeInplaceEditor();//close inplace editor
if(!(pwb->get_Sync()))
return FALSE;//need sync
return TRUE;
}
BOOL CI2WBBaseWBSet::nextWb(BOOL fsend)
{
if(m_whiteboardindex==-1)
return TRUE;
HWND h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_HIDE);
m_whiteboardindex=m_whiteboardindex+1;
if(m_whiteboardindex > m_whiteboardlist.get_Count()-1)
m_whiteboardindex=0;
h=(HWND)(*m_whiteboardlist[m_whiteboardindex]);
ShowWindow(h,SW_SHOW);
if(fsend)
sendSlideShow(WB_SET,NULL);
if(m_wbcallback)
m_wbcallback(WB32_SETCURWB,(void*)&(m_whiteboardindex));
//sync
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
if(pwb->m_wbs==wbsInplaceEditorActive)
pwb->closeInplaceEditor();//close inplace editor
if(!(pwb->get_Sync()))
return FALSE;//need sync
return TRUE;
}
void CI2WBBaseWBSet::setCallBack(IASPWB32PROC wbcallback)
{
m_wbcallback=wbcallback;
}
void CI2WBBaseWBSet::writeToStream()
{
}
void CI2WBBaseWBSet::readFromStream()
{
}
BOOL CI2WBBaseWBSet::recv(VOID *p,INT len)
{
I2MemoryFileStream stm(1024);
WB32HEADER wh;
WB32SLIDE wd;
WB32INDICATE wi;
try
{
CHAR *pdata=(CHAR*)GlobalAlloc(GPTR,*((long*)p));
INT count=I2Zlib::decompress((CHAR*)p+sizeof(long),len-sizeof(long),pdata);
stm.writeFile(pdata,*((long*)p));//*(long*)p) length of data before compress
//len = length of compressed data + long
GlobalFree(pdata);
}
catch(I2Exception *e)
{
d::s("recv decompress");
e->report();
e->Delete();
}
if(stm.get_Length()==0)
return TRUE;
stm.seekFile(0,I2SEEK_SET);
stm.readFile((CHAR *)&wh,sizeof(WB32HEADER));
switch(wh.datatype)
{
case WB_TYPE_SLIDE://slide show operation
stm.readFile((CHAR*)&wd,sizeof(WB32SLIDE));
switch(LOWORD(wd.code))
{
case WB_NEW:
addWb(wd.wbname,-1,FALSE,TRUE);
break;
case WB_FIRST:
break;
case WB_LAST:
break;
case WB_NEXT:
// return nextWb(FALSE);
break;
case WB_PREV:
// return prevWb(FALSE);
break;
case WB_DEL:
delWb(wd.wbname,FALSE);
break;
case WB_SET:
return setWb(HIWORD(wd.code),FALSE);
}
break;
case WB_TYPE_INDICATE:
{
stm.readFile((CHAR*)&wi,sizeof(WB32INDICATE));
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
if(m_findi==wi.findi)
pwb->drawIndicate(wi.point.x,wi.point.y,FALSE,FALSE);
else
{
pwb->drawIndicate(wi.point.x,wi.point.y,TRUE,FALSE);
m_findi=wi.findi;
}
}
break;
default:
{
if(m_whiteboardindex==-1)
return TRUE;
if(getWbIndex(wh.wbname)>0)
{
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[getWbIndex(wh.wbname)-1];
if(pwb->get_Sync())//m_sync=FALSE,not receive remote data
pwb->recv(stm.get_Pointer(),stm.get_Length());
}
}
break;
}
return TRUE;
}
BOOL CI2WBBaseWBSet::processMessage(UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
{
if(!g_hinstance)
g_hinstance=GetModuleHandle("iaspwb.dll");
CI2WBBaseWBSet *pwb=(CI2WBBaseWBSet *)(((LPCREATESTRUCT)lParam)->lpCreateParams);
pwb->m_himl = ImageList_LoadBitmap(g_hinstance,MAKEINTRESOURCE(IDB_INDICATE_REMOTE),WB_INDICATE_WIDTH,2,RGB(255,0,255));
break;
}
case WM_SIZE:
break;
case WM_HSCROLL:
{
INT pos;
if(LOWORD(wParam)==SB_THUMBPOSITION||LOWORD(wParam)==SB_THUMBTRACK)
pos=HIWORD(wParam);
else
pos=GetScrollPos(m_hwnd,SB_HORZ);
INT min,max;
GetScrollRange(m_hwnd,SB_HORZ,&min,&max);
switch(LOWORD(wParam))
{
case SB_LINELEFT:
pos--;
break;
case SB_LINERIGHT:
pos++;
break;
case SB_PAGELEFT:
pos-=10;
break;
case SB_PAGERIGHT:
pos+=10;
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
break;
default:
return 0;
}
if(posmax)
pos=max;
SetScrollPos(m_hwnd,SB_HORZ,pos,TRUE);
OnHScroll(pos);
}
break;
case WM_VSCROLL:
{
INT pos;
if(LOWORD(wParam)==SB_THUMBPOSITION||LOWORD(wParam)==SB_THUMBTRACK)
pos=HIWORD(wParam);
else
pos=GetScrollPos(m_hwnd,SB_VERT);
INT min,max;
GetScrollRange(m_hwnd,SB_VERT,&min,&max);
switch(LOWORD(wParam))
{
case SB_LINEUP:
pos--;
break;
case SB_LINEDOWN:
pos++;
break;
case SB_PAGEUP:
pos-=10;
break;
case SB_PAGEDOWN:
pos+=10;
break;
case SB_THUMBPOSITION:
break;
case SB_THUMBTRACK:
break;
default:
return 0;
}
if(posmax)
pos=max;
SetScrollPos(m_hwnd,SB_VERT,pos,TRUE);
OnVScroll(pos);
}
break;
default:
return I2Wnd::processMessage(uMsg,wParam,lParam);
}
return TRUE;
}
void CI2WBBaseWBSet::fillClassInfo(LPWNDCLASSEX pwcx)
{
pwcx->hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
pwcx->lpszClassName=WB32HOLDERCLASSNAME;
pwcx->style=CS_DBLCLKS;
}
void CI2WBBaseWBSet::Initialize(HWND hParentWnd,const I2Rect& rect,I2Stream* stream)
{
if(!hParentWnd)
throw new I2BaseException(I2E_INVALIDPARAMETER);
/*CI2WBBaseWB wb(this);
wb.registerClassEx();*/
InitControlSetList();
RegisterEditorControl(CSID_Draw,Draw_Text);
RegisterDragDropControl("txt",CSID_Draw,Draw_Text);
RegisterDragDropControl("bat",CSID_Draw,Draw_Text);
RegisterDragDropControl("h",CSID_Draw,Draw_Text);
RegisterDragDropControl("c",CSID_Draw,Draw_Text);
RegisterDragDropControl("cpp",CSID_Draw,Draw_Text);
//RegisterDragDropControl("bmp",CSID_Draw,Draw_Image);
//RegisterDragDropControl("gif",CSID_Draw,Draw_ImageGif);
//RegisterDragDropControl("jpg",CSID_Draw,Draw_ImageJpeg);
//RegisterDragDropControl("wmf",CSID_Draw,Draw_ImageMeta);
//RegisterDragDropControl("wmf",CSID_Draw,Draw_ImageMeta);
g_wb32clipformat = RegisterClipboardFormat(IASPWB32CLIPBOARDFORMAT);
set_Stream(stream);
}
VOID screentoclient(HWND hwnd,I2Rect& lprect)
{
POINT p;
p.x=lprect.left;
p.y=lprect.top;
ScreenToClient(hwnd,&p);
lprect.left=p.x;
lprect.top=p.y;
p.x=lprect.right;
p.y=lprect.bottom;
ScreenToClient(hwnd,&p);
lprect.right=p.x;
lprect.bottom=p.y;
}
VOID CI2WBBaseWBSet::InitControlSetList()
{
CI2WBControlSet* pwb=new CI2WBControlSet;
m_controlsetlist.append((CI2WBBaseCSet*)pwb);
CI2WBElecSet* pwb2=new CI2WBElecSet;
m_controlsetlist.append((CI2WBBaseCSet*)pwb2);
CI2WBCurveSet* pwb1=new CI2WBCurveSet;
m_controlsetlist.append((CI2WBBaseCSet*)pwb1);
}
VOID CI2WBBaseWBSet::OnPageScrollChange()
{
if(m_whiteboardindex==-1)
ShowScrollBar(m_hwnd,SB_BOTH,FALSE);
else
{
I2Rect rect,wbrect;
CI2WBBaseWB* pwb=new CI2WBBaseWB(this);
INT newleft,newtop;
BOOL hbar=FALSE,vbar=FALSE;
GetWindowRect(m_hwnd,&rect);
pwb=(CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]);
GetWindowRect((HWND)(*pwb),&wbrect);
screentoclient(m_hwnd,wbrect);
//show/hide scroll bar
if(pwb->m_width>rect.width()&&pwb->m_height>rect.height())
{
hbar=TRUE;
rect.bottom-=GetSystemMetrics(SM_CYHSCROLL);
vbar=TRUE;
rect.right-=GetSystemMetrics(SM_CYVSCROLL);
}
else if(pwb->m_width>rect.width())
{
hbar=TRUE;
rect.bottom-=GetSystemMetrics(SM_CYHSCROLL);
if(pwb->m_height>rect.height())
{
vbar=TRUE;
rect.right-=GetSystemMetrics(SM_CYVSCROLL);
}
}
else if(pwb->m_height>rect.height())
{
vbar=TRUE;
rect.right-=GetSystemMetrics(SM_CYVSCROLL);
if(pwb->m_width>rect.width())
{
hbar=TRUE;
rect.bottom-=GetSystemMetrics(SM_CYHSCROLL);
}
}
ShowScrollBar(m_hwnd,SB_HORZ,hbar);
ShowScrollBar(m_hwnd,SB_VERT,vbar);
//calculate horizontal space
if(pwb->m_width>rect.width())
{
if(wbrect.left>=0)
newleft=0;
else
newleft=0-min(abs(wbrect.left),pwb->m_width-rect.width());
}
else
newleft=(rect.width()-pwb->m_width)/2;
//calculate vertical space
if(pwb->m_height>rect.height())
{
if(wbrect.top>=0)
newtop=0;
else
newtop=0-min(abs(wbrect.top),pwb->m_height-rect.height());
}
else
newtop=(rect.height()-pwb->m_height)/2;
if(hbar)
{
SetScrollRange(m_hwnd,SB_HORZ,0,pwb->m_width-rect.width(),FALSE);
SetScrollPos(m_hwnd,SB_HORZ,abs(newleft),TRUE);
}
if(vbar)
{
SetScrollRange(m_hwnd,SB_VERT,0,pwb->m_height-rect.height(),FALSE);
SetScrollPos(m_hwnd,SB_VERT,abs(newtop),TRUE);
}
MoveWindow((HWND)(*pwb),newleft,newtop,pwb->m_width,pwb->m_height,TRUE);
delete pwb;//322
}
}
VOID CI2WBBaseWBSet::resize(const I2Rect& rect)
{
if(!m_hwnd)
throw new I2BaseException(I2E_INVALIDPARAMETER);
MoveWindow(m_hwnd,rect.left,rect.top,
rect.right-rect.left,rect.bottom-rect.top,TRUE);
}
VOID CI2WBBaseWBSet::getCurWbIndex(INT* Value)
{
*Value=m_whiteboardindex+1;
}
INT CI2WBBaseWBSet::getWbIndex(LPSTR wbname)
{
INT i;
CI2WBBaseWB* pwb;
CHAR buf[MAX_CTRLIDNAME];
for(i=0;iget_Name(buf);
if(!lstrcmp(buf,wbname))
return i+1;
}
return -2;
}
INT CI2WBBaseWBSet::get_Count()
{
return m_whiteboardlist.get_Count();
}
VOID CI2WBBaseWBSet::sendSlideShow(DWORD slide,LPSTR wbname)
{
I2MemoryFileStream stm(1024);
WB32HEADER wh;
WB32SLIDE wd;
wh.datatype=WB_TYPE_SLIDE;
stm.writeFile((CHAR*)&wh,sizeof(WB32HEADER));
if(slide==WB_SET)
wd.code=MAKELONG(slide,m_whiteboardindex);
else
wd.code=slide;
lstrcpy(wd.wbname,wbname);
stm.writeFile((CHAR*)&wd,sizeof(WB32SLIDE));
//if(m_stream)
// m_stream->write((CHAR*)stm.get_Pointer(),stm.get_Length());
sendData(stm);
}
VOID CI2WBBaseWBSet::set_Stream(I2Stream* Value)
{
m_stream=Value;
}
VOID CI2WBBaseWBSet::get_Stream(I2Stream* Value)
{
Value=m_stream;
}
INT CI2WBBaseWBSet::get_Permit()
{
return m_permit;
}
VOID CI2WBBaseWBSet::set_Permit(BOOL fpermit)
{
m_permit=fpermit;
}
void CI2WBBaseWBSet::enumControlSet(I2List& infolist)
{
int i;
for(i=0;iOnCSIDChange(m_CurControlSetId,Value);
m_CurControlSetId=Value;
}
VOID CI2WBBaseWBSet::getControlID(INT* Value)
{
*Value=m_CurControlId;
}
VOID CI2WBBaseWBSet::setControlID(INT Value)
{
m_CurControlId=Value;
}
CI2WBBaseCSet * CI2WBBaseWBSet::getCurControlSet()
{
INT i;
for(i=0;igetControlSetID(&csid);
if(IsEqualGUID(csid,m_CurControlSetId))
return pwcs;
}
return NULL;
}
VOID CI2WBBaseWBSet::lock(VOID)
{
if(m_whiteboardindex==-1)
return;
if(!m_permit)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->lock();
}
VOID CI2WBBaseWBSet::unlock(VOID)
{
if(m_whiteboardindex==-1)
return;
if(!m_permit)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->unlock();
}
VOID CI2WBBaseWBSet::get_LineWidth(INT* Value)
{
*Value=m_prop_linewidth;
}
VOID CI2WBBaseWBSet::set_LineWidth(INT Value)
{
if(Value>=MIN_LINEWIDTH&&Value<=MAX_LINEWIDTH)
{
m_prop_linewidth=Value;
if(m_whiteboardindex!=-1)
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->OnAttribChange(WBAT_LINEWIDTH);
}
}
VOID CI2WBBaseWBSet::get_LineStyle(INT* Value)
{
*Value=m_prop_linestyle;
}
VOID CI2WBBaseWBSet::set_LineStyle(INT Value)
{
m_prop_linestyle=Value;
if(m_whiteboardindex!=-1)
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->OnAttribChange(WBAT_LINESTYLE);
}
VOID CI2WBBaseWBSet::get_Color(COLORREF* Value)
{
*Value=m_prop_color;
}
VOID CI2WBBaseWBSet::set_Color(COLORREF Value)
{
m_prop_color=Value;
if(m_whiteboardindex!=-1)
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->OnAttribChange(WBAT_COLOR);
}
VOID CI2WBBaseWBSet::get_BKColor(COLORREF* Value)
{
*Value=m_prop_bkcolor;
}
VOID CI2WBBaseWBSet::set_BKColor(COLORREF Value)
{
m_prop_bkcolor=Value;
if(m_whiteboardindex!=-1)
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->OnAttribChange(WBAT_BKCOLOR);
}
VOID CI2WBBaseWBSet::get_Font(LPWB32FONT Value)
{
CopyMemory(Value,&m_prop_font,sizeof(WB32FONT));
}
VOID CI2WBBaseWBSet::set_Font(LPWB32FONT Value,INT mask)
{
CopyMemory(&m_prop_font,Value,sizeof(WB32FONT));
if(m_whiteboardindex!=-1)
{
DWORD type=MAKELONG(WBAT_FONT,mask);
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->OnAttribChange(type);
}
}
VOID CI2WBBaseWBSet::bringToFront(BOOL fsend)
{
if(!m_permit)
return;
if(m_whiteboardindex!=-1)
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->bringToFront();
if(fsend)
sendLayer(TRUE);
}
VOID CI2WBBaseWBSet::sendToBack(BOOL fsend)
{
if(!m_permit)
return;
if(m_whiteboardindex!=-1)
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->sendToBack();
if(fsend)
sendLayer(FALSE);
}
VOID CI2WBBaseWBSet::sendLayer(BOOL flayer)
{
CI2WBBaseCtrl* pawc;
I2MemoryFileStream stm(1024);
WB32HEADER wh;
WB32LAYER wi;
I2List l;
wh.datatype=WB_TYPE_LAYER;
stm.writeFile((CHAR*)&wh,sizeof(WB32HEADER));
wi.flayer=flayer;
((CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex])->getStateControlList(l,CTRLSTATE_SELECT);
if(l.get_Count()!=1)
return;
pawc=(CI2WBBaseCtrl*)l.get_Items()[0];
pawc->get_Name(wi.idname);
stm.writeFile((CHAR*)&wi,sizeof(WB32LAYER));
// if(m_stream)
// m_stream->write((CHAR*)stm.get_Pointer(),stm.get_Length());
sendData(stm);
}
VOID CI2WBBaseWBSet::changeIndicate()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
((CI2WBBaseWB*)(m_whiteboardlist.get_Items()[m_whiteboardindex]))->drawIndicate(m_indipos.x,m_indipos.y,TRUE,TRUE);
m_findi=!m_findi;
sendIndicate(m_findi,m_indipos.x,m_indipos.y);
}
VOID CI2WBBaseWBSet::sendIndicate(BOOL findi,INT x,INT y)
{
I2MemoryFileStream stm(1024);
WB32HEADER wh;
WB32INDICATE wi;
wh.datatype=WB_TYPE_INDICATE;
stm.writeFile((CHAR*)&wh,sizeof(WB32HEADER));
wi.findi=findi;
wi.point.x=x;
wi.point.y=y;
stm.writeFile((CHAR*)&wi,sizeof(WB32INDICATE));
sendData(stm);
}
VOID CI2WBBaseWBSet::sendData(I2MemoryFileStream& stm)
{
if(m_stream)
{
CHAR *p=(CHAR*)GlobalAlloc(GPTR,stm.get_Length()*1.001+12+sizeof(long));
long lendata=I2Zlib::compress((CHAR*)stm.get_Pointer(),stm.get_Length(),p+sizeof(long),9);
*((long*)p)=stm.get_Length();
m_stream->write(p,lendata+sizeof(long));
GlobalFree(p);
}
}
VOID CI2WBBaseWBSet::OnHScroll(INT offset)
{
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
I2Rect rect;
GetWindowRect((HWND)(*pwb),&rect);
screentoclient(m_hwnd,rect);
MoveWindow((HWND)(*pwb),0-offset,rect.top,pwb->m_width,pwb->m_height,TRUE);
}
VOID CI2WBBaseWBSet::OnVScroll(INT offset)
{
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
I2Rect rect;
GetWindowRect((HWND)(*pwb)/*->m_hwnd*/,&rect);
screentoclient(m_hwnd,rect);
MoveWindow((HWND)(*pwb)/*->m_hwnd*/,rect.left,0-offset,pwb->m_width,pwb->m_height,TRUE);
}
CI2WBBaseCSet* CI2WBBaseWBSet::getControlSet(GUID m_csid)
{
INT i;
for(i=0;igetControlSetID(&csid);
if(IsEqualGUID(csid,m_csid))
return pwcs;
}
return NULL;
}
VOID CI2WBBaseWBSet::del()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->deleteControl();
}
VOID CI2WBBaseWBSet::cut()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->cut();
}
VOID CI2WBBaseWBSet::copy()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->copy();
}
VOID CI2WBBaseWBSet::paste()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->paste();
}
VOID CI2WBBaseWBSet::cutWb()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->copyWb();
delWb(-1,TRUE);
}
VOID CI2WBBaseWBSet::copyWb()
{
if(!m_permit)
return;
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->copyWb();
}
VOID CI2WBBaseWBSet::pasteWb()
{
if(!m_permit)
return;
addWb(NULL,-1,TRUE,TRUE);
CI2WBBaseWB* pwb=(CI2WBBaseWB*)m_whiteboardlist.get_Items()[m_whiteboardindex];
pwb->pasteWb();
}
VOID CI2WBBaseWBSet::select()
{
setControlSetID(GUID_NULL);
m_erase=0;
}
VOID CI2WBBaseWBSet::erase()
{
setControlSetID(GUID_NULL);
m_erase=1;
}
VOID CI2WBBaseWBSet::RegisterEditorControl(GUID csid,INT cid)
{
REGEDITORENTRY ree;
ree.csid=csid;
ree.cid=cid;
m_regeditorcontrol.append(ree);
}
VOID CI2WBBaseWBSet::RegisterDragDropControl(LPSTR fileext,GUID csid,INT cid)
{
if(lstrlen(fileext)>16)
throw new I2BaseException(I2E_INVALIDPARAMETER);
REGDRAGDROPENTRY rdde;
lstrcpy((char*)rdde.ext,fileext);
rdde.csid=csid;
rdde.cid=cid;
m_regdragdropcontrol.append((const REGDRAGDROPENTRY)rdde);
}
VOID CI2WBBaseWBSet::saveStreamWb(I2MemoryFileStream& stm,int index)
{
if(m_whiteboardindex==-1)
return;
//I2MemoryFileStream mstm(1024);
if(index>-1 && indexsave(stm);
}
}
VOID CI2WBBaseWBSet::loadTeachPlan(VOID* p,INT len,INT index,CHAR *wbname)
{
addWb(wbname,index,TRUE,TRUE);
CI2WBBaseWB* pwb=m_whiteboardlist[m_whiteboardindex];
pwb->load(-1,-1,p,len,0);
}
VOID CI2WBBaseWBSet::syncWb(INT index,VOID* p,INT len)
{
if(m_whiteboardindex==-1)
return;
if(index-1>-1 && index-1load(-1,-1,p,len,0);
pwb->set_Sync(TRUE);
}
}
VOID CI2WBBaseWBSet::loadCourseWare(SHORT x,SHORT y,VOID* p,INT len)
{
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb=m_whiteboardlist[m_whiteboardindex];
pwb->load(x,y,p,len,1);
}
VOID CI2WBBaseWBSet::get_Name(CHAR* value,INT index)
{
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb;
if(index==-1)
{
pwb=m_whiteboardlist[m_whiteboardindex];
pwb->get_Name(value);
}
else if(index>=0 && index < m_whiteboardlist.get_Count())
{
pwb=m_whiteboardlist[index];
pwb->get_Name(value);
}
else
throw new I2BaseException(I2E_INVALIDPARAMETER);
}
VOID CI2WBBaseWBSet::set_Name(CHAR* value,INT index)
{
if(m_whiteboardindex==-1)
return;
CI2WBBaseWB* pwb;
if(index==-1)
pwb=m_whiteboardlist[m_whiteboardindex];
else
pwb=m_whiteboardlist[index];
pwb->set_Name(value);
}