Esempio n. 1
0
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();
}
Esempio n. 2
0
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."));
}
Esempio n. 3
0
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;
}