📄 leftview.cpp
字号:
tree.SetItemData(item3,(DWORD)o);
tree.SetItemImage(item3,TREE_TYPE_DYNOBJECT*2,TREE_TYPE_DYNOBJECT*2+1);
tree.EnsureVisible(item3);
tree.SelectItem(item3);
tree.EditLabel(item3);
strcpy(o->long_name,str);
o->name[0]=0;
GetDocument()->SetModifiedFlag();
}
}
rv->Invalidate(0);
break;
}
}
void CLeftView::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
*pResult = 0;
CTreeCtrl& tree=GetTreeCtrl();
if (pNMTreeView->action==2)
tree.SetItemImage(pNMTreeView->itemNew.hItem,1,1);
else
if (pNMTreeView->action==1)
tree.SetItemImage(pNMTreeView->itemNew.hItem,0,0);
}
void CLeftView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu *menu;
menu=AfxGetApp()->GetMainWnd()->GetMenu()->GetSubMenu(1);
CTreeCtrl& tree=tv->GetTreeCtrl();
TVHITTESTINFO hti;
GetCursorPos(&hti.pt);
ScreenToClient(&hti.pt);
tree.HitTest(&hti);
if (hti.flags&TVHT_ONITEMLABEL)
tree.SelectItem(hti.hItem);
GetCursorPos(&hti.pt);
menu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,hti.pt.x,hti.pt.y,AfxGetApp()->GetMainWnd(),0);
*pResult = 0;
}
void CLeftView::OnEditDelete()
{
TV_KEYDOWN key;
key.wVKey=VK_DELETE;
OnKeydown((NMHDR*)&key,0);
}
void CLeftView::OnEditInsert()
{
TV_KEYDOWN key;
key.wVKey=VK_INSERT;
OnKeydown((NMHDR*)&key,0);
}
void CLeftView::OnEditRename()
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
tree.EditLabel( item );
}
void CLeftView::OnUpdateEditRename(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
DWORD o=tree.GetItemData(item);
pCmdUI->Enable(item!=0 && o>255);
}
void CLeftView::OnUpdateEditInsert(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
DWORD o=tree.GetItemData(item);
pCmdUI->Enable(item!=0 && (o==TREE_TYPE_OBJECTS || o==TREE_TYPE_TEXTURES || o==TREE_TYPE_PLUGINS || o==TREE_TYPE_STOCK));
}
void CLeftView::OnUpdateEditDelete(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
DWORD o=tree.GetItemData(item);
pCmdUI->Enable(item!=0 && (o==TREE_TYPE_DLLS || o>255));
}
HTREEITEM CLeftView::SelectObject(HTREEITEM item,bsp_object *o)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
DWORD type=tree.GetItemData(item);
if (type>255)
if (o==(bsp_object *)type)
{
tree.SelectItem(item);
return item;
}
HTREEITEM item2,item3;
if (tree.ItemHasChildren(item))
{
item2=SelectObject(tree.GetChildItem(item),o);
if (item2)
return item2;
}
item3=item;
while(item3=tree.GetNextSiblingItem(item3))
{
item2=SelectObject(item3,o);
if (item2)
return item2;
}
return 0;
}
void CLeftView::OnUpdateDown(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
DWORD o=tree.GetItemData(item);
pCmdUI->Enable(o==TREE_TYPE_DLLS && tree.GetNextSiblingItem(item));
}
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,
LPARAM lParamSort)
{
return (int)lParam1-(int)lParam2;
}
void CLeftView::OnDown()
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
flyengine->dll.move_dll((char *)(LPCSTR)tree.GetItemText(item),1);
HTREEITEM p=tree.GetParentItem(item);
HTREEITEM i=tree.GetChildItem(p);
int n=0;
while(i)
{
tree.SetItemData(i,n++);
i=tree.GetNextSiblingItem(i);
}
HTREEITEM a=tree.GetNextSiblingItem(item);
int d=tree.GetItemData(a);
tree.SetItemData(item,d);
tree.SetItemData(a,d-1);
TVSORTCB data;
data.lParam=0;
data.lpfnCompare=CompareFunc;
data.hParent=p;
tree.SortChildrenCB(&data);
i=tree.GetChildItem(p);
while(i)
{
tree.SetItemData(i,TREE_TYPE_DLLS);
i=tree.GetNextSiblingItem(i);
}
GetDocument()->SetModifiedFlag();
}
void CLeftView::OnUpdateUp(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
DWORD o=tree.GetItemData(item);
pCmdUI->Enable(o==TREE_TYPE_DLLS && tree.GetPrevSiblingItem(item));
}
void CLeftView::OnUp()
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item==0) return;
flyengine->dll.move_dll((char *)(LPCSTR)tree.GetItemText(item),-1);
HTREEITEM p=tree.GetParentItem(item);
HTREEITEM i=tree.GetChildItem(p);
int n=0;
while(i)
{
tree.SetItemData(i,n++);
i=tree.GetNextSiblingItem(i);
}
HTREEITEM a=tree.GetPrevSiblingItem(item);
int d=tree.GetItemData(a);
tree.SetItemData(item,d);
tree.SetItemData(a,d+1);
TVSORTCB data;
data.lParam=0;
data.lpfnCompare=CompareFunc;
data.hParent=p;
tree.SortChildrenCB(&data);
i=tree.GetChildItem(p);
while(i)
{
tree.SetItemData(i,TREE_TYPE_DLLS);
i=tree.GetNextSiblingItem(i);
}
GetDocument()->SetModifiedFlag();
}
void CLeftView::OnEditCut()
{
OnEditCopy();
CFlyEditorDoc* pDoc = GetDocument();
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
HTREEITEM item2=tree.GetParentItem(item);
DWORD type=tree.GetItemData(item);
bsp_object *o=(bsp_object *)type;
pDoc->dll.delete_class(o);
tree.DeleteItem(item);
if (tree.ItemHasChildren(item2)==0)
tree.SetItemImage(item2,0,0);
pDoc->SetModifiedFlag();
}
void CLeftView::OnUpdateEditCut(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
DWORD type=0;
if (item!=0)
type=tree.GetItemData(item);
pCmdUI->Enable(type>255);
}
void CLeftView::OnEditCopy()
{
CFlyEditorDoc* pDoc = GetDocument();
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
DWORD type=tree.GetItemData(item);
bsp_object *o=(bsp_object *)type;
if ( ::OpenClipboard(0) )
{
EmptyClipboard();
HGLOBAL hData=GlobalAlloc(GMEM_MOVEABLE,16384);
char *buf=(char *)GlobalLock(hData);
char str[256];
int i,j;
param_desc pd;
for( i=0;i<pDoc->dll.ncd;i++ )
if (pDoc->dll.cd[i]->get_type()==o->type)
break;
buf[0]=0;
sprintf(str,"fly3dclass %s %s\r\n",pDoc->dll.cd[i]->get_name(),o->long_name);
strcat(buf,str);
j=o->get_param_desc(0,0);
for( i=0;i<j;i++ )
{
o->get_param_desc(i,&pd);
sprintf(str,"%s=%s\r\n",pd.name,pd.get_string());
strcat(buf,str);
}
GlobalUnlock(hData);
SetClipboardData( CF_TEXT, hData );
CloseClipboard();
}
}
void CLeftView::OnUpdateEditCopy(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
DWORD type=0;
if (item!=0)
type=tree.GetItemData(item);
pCmdUI->Enable(type>255);
}
void CLeftView::OnEditPaste()
{
if (IsClipboardFormatAvailable(CF_TEXT))
{
if (::OpenClipboard(0))
{
HGLOBAL hData=GetClipboardData(CF_TEXT);
if (hData)
{
char *buf=(char *)GlobalLock(hData);
char *c1=strchr(buf,'\r');
*c1=0;
c1+=2;
char *c2=strchr(buf,' ');
*(c2++)=0;
char *c3=strchr(c2,' ');
*(c3++)=0;
bsp_object *o=flyengine->dll.add_class(c2);
if (o)
{
strcpy(o->long_name,c3);
strcat(o->long_name,"_copy");
o->name[0]=0;
param_desc pd;
int i,j,k;
j=o->get_param_desc(0,0);
for( i=0;i<j;i++ )
{
o->get_param_desc(i,&pd);
k=strlen(pd.name);
if (memcmp(pd.name,c1,k)==0)
{
c2=&c1[k+1];
c3=strchr(c1,'\r');
*c3=0;
c1=c3+2;
pd.set_string(c2);
}
}
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
HTREEITEM item2,item3;
item2=tree.GetChildItem(item);
if (item2==0)
item3=tree.InsertItem(o->long_name,item);
else
{
while( item3=tree.GetNextSiblingItem(item2) )
item2=item3;
item3=tree.InsertItem(o->long_name,item,item2);
}
tree.SetItemData(item3,(DWORD)o);
tree.SetItemImage(item3,TREE_TYPE_DYNOBJECT*2,TREE_TYPE_DYNOBJECT*2+1);
tree.EnsureVisible(item3);
tree.SelectItem(item3);
tree.EditLabel(item3);
}
else AfxMessageBox("Could not paste !\nClass name not present in scene.",MB_OK|MB_ICONINFORMATION);
GlobalUnlock(hData);
GetDocument()->SetModifiedFlag();
}
CloseClipboard();
}
}
}
void CLeftView::OnUpdateEditPaste(CCmdUI* pCmdUI)
{
int pasteok=0;
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
if (item && tree.GetItemData(item)==TREE_TYPE_STOCK)
if (IsClipboardFormatAvailable(CF_TEXT))
{
if (::OpenClipboard(0))
{
HGLOBAL hData=GetClipboardData(CF_TEXT);
if (hData)
{
char *buf=(char *)GlobalLock(hData);
CString s=tree.GetItemText(item);
if (memcmp(buf,"fly3dclass ",11)==0)
if (memcmp(&buf[11],s,s.GetLength())==0)
pasteok=1;
GlobalUnlock(hData);
}
CloseClipboard();
}
}
pCmdUI->Enable( pasteok );
}
void CLeftView::OnEditDuplicate()
{
OnEditCopy();
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
tree.SelectItem(tree.GetParentItem(item));
OnEditPaste();
}
void CLeftView::OnUpdateEditDuplicate(CCmdUI* pCmdUI)
{
CTreeCtrl& tree=tv->GetTreeCtrl();
HTREEITEM item=tree.GetSelectedItem();
DWORD type=0;
if (item!=0)
type=tree.GetItemData(item);
pCmdUI->Enable(type>255);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -