📄 v4studioframe.cpp
字号:
GF_Node *lp = m_pV4sm->NewNode(TAG_MPEG4_LineProperties); M_Material2D *mat2d= (M_Material2D *)m_selection; mat2d->lineProps = lp; gf_node_register(lp, m_selection); m_parentSelection = m_selection; m_selection = lp; Update();}void V4StudioFrame::OnNewXLineProps(wxCommandEvent &event){ GF_Node *lp = m_pV4sm->NewNode(TAG_MPEG4_XLineProperties); M_Material2D *mat2d= (M_Material2D *)m_selection; mat2d->lineProps = lp; gf_node_register(lp, m_selection); m_parentSelection = m_selection; m_selection = lp; Update();}void V4StudioFrame::OnNewSound(wxCommandEvent &event){}void V4StudioFrame::OnNewBackground2D(wxCommandEvent &event){ GF_Node *b2d = m_pV4sm->NewNode(TAG_MPEG4_Background2D); gf_node_insert_child(m_selection, b2d, -1); gf_node_register(b2d, m_selection); m_parentSelection = m_selection; m_selection = b2d; Update();}void V4StudioFrame::OnNewImageTexture(wxCommandEvent &event){ GF_Node *it = m_pV4sm->NewNode(TAG_MPEG4_ImageTexture); M_Appearance *app = (M_Appearance *) m_selection; app->texture = it; gf_node_register(it, m_selection); m_parentSelection = m_selection; m_selection = it; Update();}void V4StudioFrame::OnNewMovieTexture(wxCommandEvent &event){ GF_Node *mt = m_pV4sm->NewNode(TAG_MPEG4_MovieTexture); M_Appearance *app = (M_Appearance *)m_selection; app->texture = mt; gf_node_register(mt, m_selection); m_parentSelection = m_selection; m_selection = mt; Update();}void V4StudioFrame::UpdateSelection(GF_Node *node, GF_Node *parent) { SetSelection(node); SetParentSelection(parent); m_pMainToolbar->EnableTool(TOOL_EDIT_CUT, true); m_pMainToolbar->EnableTool(TOOL_EDIT_COPY, true); m_pMainToolbar->EnableTool(TOOL_EDIT_DELETE, true); UpdateToolBar(); fieldView->SetNode(node); fieldView->Create();}// Update displayvoid V4StudioFrame::Update() { if (m_pV4sm){ if (m_pV4sm->GetGPACPanel()) m_pV4sm->GetGPACPanel()->Update(); treeView->Refresh(m_pV4sm->GetRootNode()); } else { treeView->Refresh(NULL); } UpdateToolBar();}void V4StudioFrame::UpdateToolBar(){ bool enableGeometry = false, enableAppearance =false, enableMaterial = false, enableGroupNode = false, enableLineProps = false, enableFontStyle = false, enable2DNode = false, enableTexture = false, enableTopNode = false; // a scene must have been created to enable the controls if (m_pV4sm && m_pV4sm->GetInlineScene()) { if (m_selection == NULL) { enableTopNode = true; } else { u32 tag = (m_selection != NULL?gf_node_get_tag(m_selection):TAG_MPEG4_OrderedGroup); GF_Node * node = m_selection; switch (tag) { case TAG_MPEG4_Switch: case TAG_MPEG4_OrderedGroup: case TAG_MPEG4_Layer2D: case TAG_MPEG4_Transform2D: case TAG_MPEG4_TransformMatrix2D: case TAG_MPEG4_ColorTransform: enableGroupNode = true; enable2DNode = true; break; case TAG_MPEG4_Shape: if (!((M_Shape *)node)->geometry) enableGeometry = true; if (!((M_Shape *)node)->appearance) enableAppearance = true; break; case TAG_MPEG4_Appearance: if (!((M_Appearance *)node)->material) enableMaterial = true; if (!((M_Appearance *)node)->texture) enableTexture = true; break; case TAG_MPEG4_Material2D: if (!((M_Material2D *)node)->lineProps) enableLineProps = true; break; case TAG_MPEG4_Text: if (!((M_Text *)node)->fontStyle) enableFontStyle = true; break; case TAG_MPEG4_Rectangle: case TAG_MPEG4_Circle: case TAG_MPEG4_ImageTexture: case TAG_MPEG4_MovieTexture: case TAG_MPEG4_Background2D: break; } } } m_pNodeToolbar->EnableTool(TOOL_NEW_ORDEREDGROUP, enableGroupNode || enable2DNode || enableTopNode); m_pNodeToolbar->EnableTool(TOOL_NEW_LAYER2D, enableGroupNode || enable2DNode || enableTopNode); m_pNodeToolbar->EnableTool(TOOL_NEW_TRANSFORM2D, enableGroupNode || enable2DNode); m_pNodeToolbar->EnableTool(TOOL_NEW_COLOR_TRANSFORM, enableGroupNode || enable2DNode); m_pNodeToolbar->EnableTool(TOOL_NEW_TRANSFORMMATRIX2D, enableGroupNode || enable2DNode); m_pNodeToolbar->EnableTool(TOOL_NEW_SHAPE, enable2DNode); m_pNodeToolbar->EnableTool(TOOL_NEW_RECT, enableGeometry); m_pNodeToolbar->EnableTool(TOOL_NEW_CIRCLE, enableGeometry); m_pNodeToolbar->EnableTool(TOOL_NEW_IFS2D, enableGeometry); m_pNodeToolbar->EnableTool(TOOL_NEW_ILS2D, enableGeometry); m_pNodeToolbar->EnableTool(TOOL_NEW_TEXT, enableGeometry); m_pNodeToolbar->EnableTool(TOOL_NEW_MOVIE, enableTexture); m_pNodeToolbar->EnableTool(TOOL_NEW_IMAGE, enableTexture); m_pNodeToolbar->EnableTool(TOOL_NEW_SOUND, enable2DNode); m_pNodeToolbar->EnableTool(TOOL_NEW_APPEARANCE, enableAppearance); m_pNodeToolbar->EnableTool(TOOL_NEW_MATERIAL2D, enableMaterial); m_pNodeToolbar->EnableTool(TOOL_NEW_LINEAR_GRADIENT, enableTexture); m_pNodeToolbar->EnableTool(TOOL_NEW_RADIAL_GRADIENT, enableTexture); m_pNodeToolbar->EnableTool(TOOL_NEW_LINEPROPS, enableLineProps); m_pNodeToolbar->EnableTool(TOOL_NEW_XLINEPROPS, enableLineProps); m_pNodeToolbar->EnableTool(TOOL_NEW_FONTSTYLE, enableFontStyle);}// Cut and paste functionsvoid V4StudioFrame::OnEditCut(wxCommandEvent &WXUNUSED(event)){ if (!m_selection) return; m_clipboardNode = m_selection; m_clipboardParentNode = m_parentSelection; gf_node_remove_child(m_parentSelection, m_selection); m_pMainToolbar->EnableTool(TOOL_EDIT_CUT, true); m_pMainToolbar->EnableTool(TOOL_EDIT_COPY, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE_USE, false); m_pMainToolbar->EnableTool(TOOL_EDIT_DELETE, false); Update();}void V4StudioFrame::OnEditDelete(wxCommandEvent &WXUNUSED(event)){ if (!m_selection) return; gf_node_remove_child(m_parentSelection, m_selection); m_clipboardNode = NULL; m_clipboardParentNode = NULL; m_pMainToolbar->EnableTool(TOOL_EDIT_CUT, false); m_pMainToolbar->EnableTool(TOOL_EDIT_COPY, false); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE, false); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE_USE, false); m_pMainToolbar->EnableTool(TOOL_EDIT_DELETE, false); Update();}void V4StudioFrame::OnEditCopy(wxCommandEvent &WXUNUSED(event)){ if (!m_selection) return; m_clipboardNode = m_selection; m_clipboardParentNode = m_parentSelection; m_pMainToolbar->EnableTool(TOOL_EDIT_CUT, true); m_pMainToolbar->EnableTool(TOOL_EDIT_COPY, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE_USE, true); m_pMainToolbar->EnableTool(TOOL_EDIT_DELETE, false); Update();}void V4StudioFrame::OnEditPaste(wxCommandEvent &WXUNUSED(event)){ if (m_clipboardNode == NULL) return; GF_Node *copy = m_pV4sm->CopyNode(m_clipboardNode, m_parentSelection, true); gf_node_insert_child(m_selection, copy, -1); m_pMainToolbar->EnableTool(TOOL_EDIT_CUT, true); m_pMainToolbar->EnableTool(TOOL_EDIT_COPY, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE_USE, false); m_pMainToolbar->EnableTool(TOOL_EDIT_DELETE, false); Update();}void V4StudioFrame::OnEditPasteUse(wxCommandEvent &WXUNUSED(event)){ // TODO : hack if (m_clipboardNode == NULL) return; GF_Node *copy = m_pV4sm->CopyNode(m_clipboardNode, m_parentSelection, false); gf_node_register(copy, m_selection); gf_node_insert_child(m_selection, copy, -1); m_pMainToolbar->EnableTool(TOOL_EDIT_CUT, true); m_pMainToolbar->EnableTool(TOOL_EDIT_COPY, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE, true); m_pMainToolbar->EnableTool(TOOL_EDIT_PASTE_USE, false); m_pMainToolbar->EnableTool(TOOL_EDIT_DELETE, false); Update();}// OnAddToTimeLine -- adds a node in the timeline (meaning creating a node ID and adding it to the dictionnary and the pool)void V4StudioFrame::OnAddToTimeLine(wxCommandEvent &event) { if (!m_selection) return; // don't add nothing // if object has no node id then create one if (! gf_node_get_id(m_selection) ) m_pV4sm->CreateIDandAddToPool(m_selection); // Adds the node to the dictionnary m_pV4sm->AddToDictionnary(m_selection); // calls timeline function to add the line char c[50]; strcpy(c, gf_node_get_name(m_selection)); timeLine->AddLine( gf_node_get_id(m_selection), wxString(c) );}// NextFrame -- goto next framevoid V4StudioFrame::NextFrame(wxCommandEvent &event) { //gf_term_play_from_time(gpacPanel->GetMPEG4Terminal(), 1000); m_selection = NULL; Update();}// SwitchView -- switches between scene editing and dictionnary editingvoid V4StudioFrame::SwitchView(wxCommandEvent &event) { SetEditDict(!editDict);}/****** Access Functions ******/// changes time to the frame specified, implies playing the scene up to that pointvoid V4StudioFrame::SetFrame(unsigned long _frame) { // TODO : m_frame = _frame;}// SetEditDict -- edit the dictionnary or notvoid V4StudioFrame::SetEditDict(bool _editDict) { // does nothing if no scene if ( ! m_pV4sm->GetSceneGraph() ) return; editDict = _editDict; if (editDict) treeView->Refresh(m_pV4sm->GetDictionnary()); else treeView->Refresh(m_pV4sm->GetRootNode());}// GetEditDict -- Access to edit dictbool V4StudioFrame::GetEditDict() const { return editDict;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -