void header_editor_frame_c::on_file_close(wxCommandEvent &) { if ( have_been_modified() && (wxYES != wxMessageBox(Z("Some header values have been modified. Do you really want to close without saving the file?"), Z("Headers modified"), wxYES_NO | wxICON_QUESTION, this))) return; clear_pages(); m_analyzer.reset(); m_file_name.Clear(); enable_menu_entries(); }
header_editor_frame_c::header_editor_frame_c(wxWindow *parent) : wxFrame(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(800, 600), wxDEFAULT_FRAME_STYLE | wxTAB_TRAVERSAL) , m_file_menu(NULL) , m_file_menu_sep(false) , m_page_panel(NULL) , m_bs_main(NULL) , m_bs_page(NULL) , m_ignore_tree_selection_changes(false) { wxPanel *frame_panel = new wxPanel(this); m_tc_tree = new wxTreeCtrl(frame_panel, ID_HE_TC_TREE, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN | wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT | wxTR_SINGLE); //| wxTAB_TRAVERSAL); m_root_id = m_tc_tree->AddRoot(wxEmptyString); m_tc_tree->SetMinSize(wxSize(250, -1)); m_page_panel = new wxPanel(frame_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE); m_bs_page = new wxBoxSizer(wxHORIZONTAL); m_page_panel->SetSizer(m_bs_page); m_bs_main = new wxBoxSizer(wxHORIZONTAL); m_bs_main->Add(m_tc_tree, 2, wxGROW | wxALL, 5); m_bs_main->Add(m_page_panel,3, wxGROW | wxALL, 5); frame_panel->SetSizer(m_bs_main); SetMinSize(wxSize(800, 600)); clear_pages(); const wxString dummy(wxU("dummy")); m_file_menu = new wxMenu(); m_file_menu->Append(ID_M_HE_FILE_OPEN, dummy); m_file_menu->Append(ID_M_HE_FILE_SAVE, dummy); m_file_menu->Append(ID_M_HE_FILE_RELOAD, dummy); m_file_menu->Append(ID_M_HE_FILE_CLOSE, dummy); m_file_menu->AppendSeparator(); m_file_menu->Append(ID_M_HE_FILE_QUIT, dummy); m_headers_menu = new wxMenu(); m_headers_menu->Append(ID_M_HE_HEADERS_EXPAND_ALL, dummy); m_headers_menu->Append(ID_M_HE_HEADERS_COLLAPSE_ALL, dummy); m_headers_menu->AppendSeparator(); m_headers_menu->Append(ID_M_HE_HEADERS_VALIDATE, dummy); wxMenu *help_menu = new wxMenu(); help_menu->Append(ID_M_HE_HELP_HELP, dummy); wxMenuBar *menu_bar = new wxMenuBar(); menu_bar->Append(m_file_menu, dummy); menu_bar->Append(m_headers_menu, dummy); menu_bar->Append(help_menu, dummy); SetMenuBar(menu_bar); translate_ui(); enable_menu_entries(); m_status_bar = new wxStatusBar(this, wxID_ANY); SetStatusBar(m_status_bar); m_status_bar_timer.SetOwner(this, ID_T_HE_STATUS_BAR); SetIcon(wxIcon(mkvmergeGUI_xpm)); SetDropTarget(new header_editor_drop_target_c(this)); set_status_bar(Z("Header editor ready.")); }
bool header_editor_frame_c::open_file(wxFileName file_name) { if (!kax_analyzer_c::probe(wxMB(file_name.GetFullPath()))) { wxMessageBox(Z("The file you tried to open is not a Matroska file."), Z("Wrong file selected"), wxOK | wxCENTER | wxICON_ERROR); return false; } m_e_segment_info.clear(); m_e_tracks.clear(); m_analyzer = wx_kax_analyzer_cptr(new wx_kax_analyzer_c(this, wxMB(file_name.GetFullPath()))); if (!m_analyzer->process(kax_analyzer_c::parse_mode_fast)) { wxMessageBox(Z("This file could not be opened or parsed."), Z("File parsing failed"), wxOK | wxCENTER | wxICON_ERROR); m_analyzer.clear(); return false; } m_file_name = file_name; m_file_name.GetTimes(NULL, &m_file_mtime, NULL); set_window_title(); m_ignore_tree_selection_changes = true; enable_menu_entries(); m_bs_main->Hide(m_tc_tree); size_t i; for (i = 0; m_pages.size() > i; ++i) if (m_pages[i]->IsShown()) m_pages[i]->Hide(); m_tc_tree->DeleteChildren(m_root_id); m_bs_page->Clear(); m_pages.clear(); m_top_level_pages.clear(); for (i = 0; m_analyzer->m_data.size() > i; ++i) { kax_analyzer_data_c *data = m_analyzer->m_data[i].get_object(); if (data->m_id == KaxInfo::ClassInfos.GlobalId) { handle_segment_info(data); break; } } for (i = 0; m_analyzer->m_data.size() > i; ++i) { kax_analyzer_data_c *data = m_analyzer->m_data[i].get_object(); if (data->m_id == KaxTracks::ClassInfos.GlobalId) { handle_tracks(data); break; } } m_analyzer->close_file(); m_bs_main->Show(m_tc_tree); m_bs_main->Layout(); last_open_dir = file_name.GetPath(); m_ignore_tree_selection_changes = false; return true; }