📄 v4studioframe.cpp
字号:
#include "safe_include.h" #include "wx/wxprec.h"#ifndef WX_PRECOMP #include "wx/wx.h"#endif#include "V4StudioFrame.h"#include "wx/xrc/xmlres.h"#include <gpac/internal/scenegraph_dev.h>#include <gpac/internal/terminal_dev.h> // GF_Terminal#include <gpac/nodes_mpeg4.h>V4StudioFrame::V4StudioFrame(): wxFrame((wxFrame *) NULL, -1, "V4Studio", wxPoint(50, 50), wxSize(800, 700)){ m_pV4sm = NULL; m_selection = NULL; m_parentSelection = NULL; m_clipboardNode = NULL; m_frame = 0; // we start at frame=0 editDict = false; // Creates components and places them on the form fieldView = new V4FieldList(this, wxSize(100,250)); treeView = new V4StudioTree(this, wxSize(100,250), fieldView); timeLine = new V4TimeLine(this); timeLine->SetSize(500, 100); cmdPanel = new V4CommandPanel(this); cmdPanel->SetSize(100, 100); /*new m_pFileMenu bar*/ wxMenuBar *b = new wxMenuBar(); /*file*/ m_pFileMenu = new wxMenu(); m_pFileMenu->Append(MENU_FILE_NEW, "&New\tCtrl+N", "Create a new document"); m_pFileMenu->Append(MENU_FILE_OPEN, "&Open...\tCtrl+O", "Open an existing document"); m_pFileMenu->Append(MENU_FILE_SAVE, "&Save\tCtrl+S", "Save the active document"); m_pFileMenu->Append(MENU_FILE_CLOSE, "&Close\tCtrl+X", "Close the active document"); m_pFileMenu->AppendSeparator(); m_pFileMenu->Append(CHANGE_SIZE_DIALOG, "&Size\tCtrl+Z", "Change scene size"); m_pFileMenu->Append(CHANGE_FRAMERATE, "&FrameRate\tCtrl+F", "Change FrameRate"); m_pFileMenu->Append(CHANGE_LENGTH, "&Length\tCtrl+L", "Change Length"); m_pFileMenu->AppendSeparator(); m_pFileMenu->Append(MENU_FILE_QUIT, "E&xit", "Quit the application; prompts to save documents"); b->Append(m_pFileMenu, "&File"); SetMenuBar(b); m_pStatusbar = CreateStatusBar(); // Main Toolbar m_pMainToolbar = new wxToolBar(this, -1, wxDefaultPosition, wxDefaultSize, wxTB_HORIZONTAL|wxTB_FLAT); m_pMainToolbar->AddTool(TOOL_FILE_NEW, _("New"), wxBitmap (wxT("rc\\new.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Open a new file"), wxT("")); m_pMainToolbar->AddTool(TOOL_FILE_OPEN, _("Open"), wxBitmap (wxT("rc\\open.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Open an existing file (BT/XMT/MP4)"), wxT("")); m_pMainToolbar->AddTool(TOOL_FILE_SAVE, _("Save"), wxBitmap (wxT("rc\\save.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Save to a file"), wxT("")); m_pMainToolbar->AddTool(TOOL_FILE_CLOSE, _("Close"), wxBitmap (wxT("rc\\close.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Close the file"), wxT("")); m_pMainToolbar->AddSeparator(); m_pMainToolbar->AddTool(TOOL_FILE_PREVIEW, _("Preview"), wxBitmap (wxT("rc\\preview.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Preview in player"), wxT("")); m_pMainToolbar->AddSeparator(); m_pMainToolbar->AddTool(TOOL_EDIT_CUT, _("Cut"), wxBitmap (wxT("rc\\cut.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Cut"), wxT("")); m_pMainToolbar->AddTool(TOOL_EDIT_COPY, _("Copy"), wxBitmap (wxT("rc\\copy.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Copy"), wxT("")); m_pMainToolbar->AddTool(TOOL_EDIT_PASTE, _("Paste"), wxBitmap (wxT("rc\\paste.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Paste"), wxT("")); m_pMainToolbar->AddTool(TOOL_EDIT_PASTE_USE, _("PastePlus"), wxBitmap (wxT("rc\\paste_use.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Paste a USE"), wxT("")); m_pMainToolbar->AddTool(TOOL_EDIT_DELETE, _("Delete"), wxBitmap (wxT("rc\\delete.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Delete"), wxT("")); m_pMainToolbar->AddSeparator(); m_pMainToolbar->AddTool(TOOL_EDIT_UNDO, _("Undo"), wxBitmap (wxT("rc\\undo.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Undo"), wxT("")); m_pMainToolbar->AddTool(TOOL_EDIT_REDO, _("Redo"), wxBitmap (wxT("rc\\redo.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Redo"), wxT("")); m_pMainToolbar->AddSeparator(); m_pMainToolbar->AddSeparator(); m_pMainToolbar->AddTool(TOOL_ADD_TO_TL, _("AddToTL"), wxBitmap( wxT("rc\\paste.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Add to timeLine"), wxT("")); m_pMainToolbar->AddTool(TOOL_NEXT_FRAME, _("NextFrame"), wxBitmap( wxT("rc\\redo.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Next frame"), wxT("")); m_pMainToolbar->AddTool(TOOL_VIEW_DICT, _("ViewDict"), wxBitmap( wxT("rc\\open.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("View Dictionnary"), wxT("")); /* Not Implemented yet */ m_pMainToolbar->EnableTool(TOOL_FILE_PREVIEW, false); m_pMainToolbar->EnableTool(TOOL_EDIT_UNDO, false); m_pMainToolbar->EnableTool(TOOL_EDIT_REDO, false); m_pMainToolbar->EnableTool(TOOL_NEXT_FRAME, false); /* Not available when starting V4Studio */ /* Nothing to save */ m_pFileMenu->Enable(MENU_FILE_SAVE, false); m_pFileMenu->Enable(MENU_FILE_CLOSE, false); m_pFileMenu->Enable(CHANGE_SIZE_DIALOG, false); m_pFileMenu->Enable(CHANGE_LENGTH, false); m_pFileMenu->Enable(CHANGE_FRAMERATE, false); m_pMainToolbar->EnableTool(TOOL_FILE_SAVE, false); m_pMainToolbar->EnableTool(TOOL_FILE_CLOSE, false); /* Nothing to edit */ 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); m_pMainToolbar->EnableTool(TOOL_ADD_TO_TL, false); m_pMainToolbar->EnableTool(TOOL_VIEW_DICT, false); m_pMainToolbar->Realize(); SetToolBar(m_pMainToolbar); // Node Creation Toolbar m_pNodeToolbar = new wxToolBar(this, -1, wxDefaultPosition, wxDefaultSize, wxTB_VERTICAL|wxTB_FLAT); m_pNodeToolbar->AddTool(TOOL_NEW_ORDEREDGROUP, _("OrderedGroup"), wxBitmap (wxT("rc\\orderedgroup.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create an OrderedGroup"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_LAYER2D, _("Layer2D"), wxBitmap (wxT("rc\\layer2d.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Layer2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_TRANSFORM2D, _("Transform2D"), wxBitmap (wxT("rc\\t2d.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Tranform2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_TRANSFORMMATRIX2D, _("TransformMatrix2D"), wxBitmap (wxT("rc\\tm2d.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a TranformMatrix2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_COLOR_TRANSFORM, _("ColorTransform"), wxBitmap (wxT("rc\\colortransform.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a ColorTransform"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_SHAPE, _("Shape"), wxBitmap (wxT("rc\\shape.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Shape"), wxT("")); m_pNodeToolbar->AddSeparator(); m_pNodeToolbar->AddTool(TOOL_NEW_APPEARANCE, _("Appearance"), wxBitmap (wxT("rc\\appearance.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create an Appearance"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_MATERIAL2D, _("Material2D"), wxBitmap (wxT("rc\\material2d.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Material2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_LINEPROPS, _("LineProps"), wxBitmap (wxT("rc\\lineproperties.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a LineProperties"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_LINEAR_GRADIENT, _("LinearGradient"), wxBitmap (wxT("rc\\lg.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Linear Gradient"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_RADIAL_GRADIENT, _("RadialGradient"), wxBitmap (wxT("rc\\rg.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Radial Gradient"), wxT("")); m_pNodeToolbar->AddSeparator(); m_pNodeToolbar->AddTool(TOOL_NEW_RECT, _("Rectangle"), wxBitmap (wxT("rc\\rect.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Rectangle"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_CIRCLE, _("Circle"), wxBitmap (wxT("rc\\circle.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Rectangle"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_IFS2D, _("IndexedFaceSet2D"), wxBitmap (wxT("rc\\ifs2d.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create an IndexedFaceSet2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_ILS2D, _("IndexedLineSet2D"), wxBitmap (wxT("rc\\ils2d.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create an IndexedLineSet2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_XLINEPROPS, _("XLineProps"), wxBitmap (wxT("rc\\xlineproperties.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create an XLineProperties"), wxT("")); m_pNodeToolbar->AddSeparator(); m_pNodeToolbar->AddTool(TOOL_NEW_TEXT, _("Text"), wxBitmap (wxT("rc\\text.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a Text"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_FONTSTYLE, _("FontStyle"), wxBitmap (wxT("rc\\fs.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Create a FontStyle"), wxT("")); m_pNodeToolbar->AddSeparator(); m_pNodeToolbar->AddTool(TOOL_NEW_BACKGROUND2D, _("Background2D"), wxBitmap (wxT("rc\\image.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Add a Background2D"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_MOVIE, _("Movie"), wxBitmap (wxT("rc\\movie.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Add a Movie"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_IMAGE, _("Image"), wxBitmap (wxT("rc\\image.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Add an Image"), wxT("")); m_pNodeToolbar->AddTool(TOOL_NEW_SOUND, _("Sound"), wxBitmap (wxT("rc\\sound.bmp"), wxBITMAP_TYPE_ANY), wxNullBitmap, wxITEM_NORMAL, _("Add a Sound"), wxT("")); m_pNodeToolbar->Realize(); set_properties(); do_layout(); UpdateToolBar();}V4StudioFrame::~V4StudioFrame(){}/* Functions that changes scene parameters */void V4StudioFrame::OnChangeFrameRate(wxCommandEvent &event) { u32 l = m_pV4sm->GetFrameRate(); wxString sFR; sFR.Printf("%d", l); wxTextEntryDialog dialog(this, _T("Enter scene framerate"), _T("one positive integer number"), sFR, wxOK | wxCANCEL); if (dialog.ShowModal() != wxID_OK) { dialog.Destroy(); return; } sscanf(dialog.GetValue(), "%d", &l); m_pV4sm->SetFrameRate(l); dialog.Destroy(); SceneGraphChanged();}void V4StudioFrame::OnChangeLength(wxCommandEvent &event) { u32 l = m_pV4sm->GetLength(); wxString sLength; sLength.Printf("%d", l); wxTextEntryDialog dialog(this, _T("Enter scene length"), _T("one positive integer number"), sLength, wxOK | wxCANCEL); if (dialog.ShowModal() != wxID_OK) { dialog.Destroy(); return; } sscanf(dialog.GetValue(), "%d", &l); m_pV4sm->SetLength(l); dialog.Destroy(); SceneGraphChanged();}void V4StudioFrame::OnChangeSize(wxCommandEvent &event) { if (!m_pV4sm) return; u32 w, h; wxSize sceneSize; m_pV4sm->GetSceneSize(sceneSize); w = sceneSize.GetX(); h = sceneSize.GetY(); wxString sSize; sSize.Printf("%d %d", w, h); wxTextEntryDialog dialog(this, _T("Enter the scene width and height"), _T("Please enter two integer numbers"), sSize, wxOK | wxCANCEL); while (dialog.ShowModal() != wxID_OK && w == 0 && h == 0) {} sscanf(dialog.GetValue(), "%d %d", &w, &h); m_pV4sm->SetSceneSize(w,h); dialog.Destroy(); SceneGraphChanged();}// Dispatchs the new scene graph to all the sub components who need it.void V4StudioFrame::SceneGraphChanged() { m_parentSelection = NULL; m_selection = (m_pV4sm ? m_pV4sm->GetRootNode() : NULL); Layout(); Update();}void V4StudioFrame::set_properties(){ SetTitle(_("V4Studio")); wxIcon _icon; _icon.CopyFromBitmap(wxBitmap(_("rc\\v4.bmp"), wxBITMAP_TYPE_ANY)); SetIcon(_icon); SetSize(wxSize(500, 500));}void V4StudioFrame::do_layout(){ wxBoxSizer * sizer_6 = new wxBoxSizer(wxVERTICAL); // top = treeview + fieldview; bottom = timeline + command panel wxBoxSizer * sizer_7 = new wxBoxSizer(wxHORIZONTAL); // right = timeline, left = command panel wxBoxSizer * sizer_8 = new wxBoxSizer(wxHORIZONTAL); // right = treeview; left = fieldview sizer_6->Add(sizer_8, 2, wxEXPAND, 0); // height of treeview twice bigger thant height of timeline sizer_6->Add(sizer_7, 1, wxEXPAND, 0); sizer_7->Add(timeLine, 3, wxEXPAND, 0); sizer_7->Add(cmdPanel, 1, wxEXPAND, 0); sizer_8->Add(treeView, 1, wxEXPAND, 0); sizer_8->Add(fieldView, 1, wxEXPAND, 0); wxBoxSizer* sizer_9 = new wxBoxSizer(wxHORIZONTAL); sizer_9->Add(m_pNodeToolbar, 0, wxEXPAND, 0); sizer_9->Add(sizer_6, 1, wxEXPAND, 0); SetSizer(sizer_9); Layout(); cmdPanel->Layout();}BEGIN_EVENT_TABLE(V4StudioFrame, wxFrame) // m_pFileMenu events EVT_MENU(MENU_FILE_NEW, V4StudioFrame::OnNew) EVT_MENU(MENU_FILE_OPEN, V4StudioFrame::OnFileOpen) EVT_MENU(MENU_FILE_SAVE, V4StudioFrame::OnSave) EVT_MENU(MENU_FILE_CLOSE, V4StudioFrame::OnClose) EVT_MENU(MENU_FILE_QUIT, V4StudioFrame::OnQuit) EVT_MENU(CHANGE_SIZE_DIALOG, V4StudioFrame::OnChangeSize) EVT_MENU(CHANGE_FRAMERATE, V4StudioFrame::OnChangeFrameRate) EVT_MENU(CHANGE_LENGTH, V4StudioFrame::OnChangeLength) // edit toolbar events EVT_TOOL(TOOL_FILE_NEW, V4StudioFrame::OnNew) EVT_TOOL(TOOL_FILE_OPEN, V4StudioFrame::OnFileOpen) EVT_TOOL(TOOL_FILE_SAVE, V4StudioFrame::OnSave) EVT_TOOL(TOOL_FILE_CLOSE, V4StudioFrame::OnClose) EVT_TOOL(TOOL_EDIT_CUT, V4StudioFrame::OnEditCut) EVT_TOOL(TOOL_EDIT_COPY, V4StudioFrame::OnEditCopy) EVT_TOOL(TOOL_EDIT_PASTE, V4StudioFrame::OnEditPaste) EVT_TOOL(TOOL_EDIT_PASTE_USE, V4StudioFrame::OnEditPasteUse) EVT_TOOL(TOOL_EDIT_DELETE, V4StudioFrame::OnEditDelete) EVT_TOOL(TOOL_ADD_TO_TL, V4StudioFrame::OnAddToTimeLine) EVT_TOOL(TOOL_NEXT_FRAME, V4StudioFrame::NextFrame) EVT_TOOL(TOOL_VIEW_DICT, V4StudioFrame::SwitchView) // new toolbar events EVT_TOOL(TOOL_NEW_ORDEREDGROUP, V4StudioFrame::OnNewOrderedGroup) EVT_TOOL(TOOL_NEW_LAYER2D, V4StudioFrame::OnNewLayer2D) EVT_TOOL(TOOL_NEW_TRANSFORM2D, V4StudioFrame::OnNewTransform2D) EVT_TOOL(TOOL_NEW_TRANSFORMMATRIX2D, V4StudioFrame::OnNewTransformMatrix2D) EVT_TOOL(TOOL_NEW_COLOR_TRANSFORM, V4StudioFrame::OnNewColorTransform) EVT_TOOL(TOOL_NEW_SHAPE, V4StudioFrame::OnNewShape) EVT_TOOL(TOOL_NEW_APPEARANCE, V4StudioFrame::OnNewAppearance) EVT_TOOL(TOOL_NEW_LINEAR_GRADIENT, V4StudioFrame::OnNewLinearGradient) EVT_TOOL(TOOL_NEW_RADIAL_GRADIENT, V4StudioFrame::OnNewRadialGradient) EVT_TOOL(TOOL_NEW_MATERIAL2D, V4StudioFrame::OnNewMaterial2D) EVT_TOOL(TOOL_NEW_LINEPROPS, V4StudioFrame::OnNewLineProps)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -