Added "last four chapter files" to the chapter editor menu.

This commit is contained in:
Moritz Bunkus 2003-09-21 18:48:22 +00:00
parent 8c0bf65d83
commit 36fed2d646
3 changed files with 125 additions and 36 deletions

View File

@ -42,6 +42,7 @@ mmg_dialog *mdlg;
wxString last_open_dir;
wxString mkvmerge_path;
vector<wxString> last_settings;
vector<wxString> last_chapters;
vector<mmg_file_t> files;
wxString &break_line(wxString &line, int break_after) {
@ -153,7 +154,7 @@ mmg_dialog::mmg_dialog(): wxFrame(NULL, -1, "mkvmerge GUI v" VERSION,
_T("Sa&ve command line\tCtrl-V"),
_T("Save the command line to a file"));
wxMenu *chapter_menu = new wxMenu();
chapter_menu = new wxMenu();
chapter_menu->Append(ID_M_CHAPTERS_NEW, _T("&New"),
_T("Create a new chapter file"));
chapter_menu->Append(ID_M_CHAPTERS_LOAD, _T("&Load"),
@ -168,6 +169,8 @@ mmg_dialog::mmg_dialog(): wxFrame(NULL, -1, "mkvmerge GUI v" VERSION,
chapter_menu->Append(ID_M_CHAPTERS_VERIFY, _T("&Verify"),
_T("Verify the current chapter entries to see if there "
"are any errors"));
chapter_menu_sep = false;
update_chapter_menu();
wxMenu *help_menu = new wxMenu();
help_menu->Append(ID_M_HELP_ABOUT, _T("&About\tF1"),
@ -388,6 +391,36 @@ void mmg_dialog::set_last_settings_in_menu(wxString name) {
update_file_menu();
}
void mmg_dialog::set_last_chapters_in_menu(wxString name) {
uint32_t i;
vector<wxString>::iterator eit;
wxConfigBase *cfg;
wxString s;
i = 0;
while (i < last_chapters.size()) {
if (last_chapters[i] == name) {
eit = last_chapters.begin();
eit += i;
last_chapters.erase(eit);
} else
i++;
}
last_chapters.insert(last_chapters.begin(), name);
while (last_chapters.size() > 4)
last_chapters.pop_back();
cfg = wxConfigBase::Get();
cfg->SetPath("/GUI");
for (i = 0; i < last_chapters.size(); i++) {
s.Printf("last_chapters %d", i);
cfg->Write(s, last_chapters[i]);
}
cfg->Flush();
update_chapter_menu();
}
void mmg_dialog::on_run(wxCommandEvent &evt) {
mux_dialog *mdlg;
@ -758,6 +791,16 @@ void mmg_dialog::on_file_load_last(wxCommandEvent &evt) {
load(last_settings[evt.GetId() - ID_M_FILE_LOADLAST1]);
}
void mmg_dialog::on_chapters_load_last(wxCommandEvent &evt) {
if ((evt.GetId() < ID_M_CHAPTERS_LOADLAST1) ||
((evt.GetId() - ID_M_CHAPTERS_LOADLAST1) >= last_chapters.size()))
return;
notebook->SetSelection(4);
chapter_editor_page->load(last_chapters[evt.GetId() -
ID_M_CHAPTERS_LOADLAST1]);
}
void mmg_dialog::update_file_menu() {
uint32_t i;
wxMenuItem *mi;
@ -779,6 +822,27 @@ void mmg_dialog::update_file_menu() {
}
}
void mmg_dialog::update_chapter_menu() {
uint32_t i;
wxMenuItem *mi;
wxString s;
for (i = ID_M_CHAPTERS_LOADLAST1; i <= ID_M_CHAPTERS_LOADLAST4; i++) {
mi = chapter_menu->Remove(i);
if (mi != NULL)
delete mi;
}
if ((last_chapters.size() > 0) && !chapter_menu_sep) {
chapter_menu->AppendSeparator();
chapter_menu_sep = true;
}
for (i = 0; i < last_chapters.size(); i++) {
s.Printf("&%u. %s", i + 1, last_chapters[i].c_str());
chapter_menu->Append(ID_M_CHAPTERS_LOADLAST1 + i, s);
}
}
void mmg_dialog::on_new_chapters(wxCommandEvent &evt) {
notebook->SetSelection(4);
chapter_editor_page->on_new_chapters(evt);
@ -825,6 +889,10 @@ BEGIN_EVENT_TABLE(mmg_dialog, wxFrame)
EVT_MENU(ID_M_CHAPTERS_SAVE, mmg_dialog::on_save_chapters)
EVT_MENU(ID_M_CHAPTERS_SAVEAS, mmg_dialog::on_save_chapters_as)
EVT_MENU(ID_M_CHAPTERS_VERIFY, mmg_dialog::on_verify_chapters)
EVT_MENU(ID_M_CHAPTERS_LOADLAST1, mmg_dialog::on_chapters_load_last)
EVT_MENU(ID_M_CHAPTERS_LOADLAST2, mmg_dialog::on_chapters_load_last)
EVT_MENU(ID_M_CHAPTERS_LOADLAST3, mmg_dialog::on_chapters_load_last)
EVT_MENU(ID_M_CHAPTERS_LOADLAST4, mmg_dialog::on_chapters_load_last)
END_EVENT_TABLE();
bool mmg_app::OnInit() {
@ -841,6 +909,9 @@ bool mmg_app::OnInit() {
k.Printf("last_settings %u", i);
if (cfg->Read(k, &v))
last_settings.push_back(v);
k.Printf("last_chapters %u", i);
if (cfg->Read(k, &v))
last_chapters.push_back(v);
}
app = this;

View File

@ -132,6 +132,11 @@ using namespace libmatroska;
#define ID_M_CHAPTERS_SAVE 20202
#define ID_M_CHAPTERS_SAVEAS 20203
#define ID_M_CHAPTERS_VERIFY 20204
#define ID_M_CHAPTERS_LOADSEPARATOR 20290
#define ID_M_CHAPTERS_LOADLAST1 20291
#define ID_M_CHAPTERS_LOADLAST2 20292
#define ID_M_CHAPTERS_LOADLAST3 20293
#define ID_M_CHAPTERS_LOADLAST4 20294
#define ID_M_HELP_ABOUT 29900
@ -160,6 +165,7 @@ typedef struct {
extern wxString last_open_dir;
extern wxString mkvmerge_path;
extern vector<wxString> last_settings;
extern vector<wxString> last_chapters;
extern vector<mmg_file_t> files;
extern vector<mmg_attachment_t> attachments;
extern wxArrayString sorted_charsets;
@ -336,6 +342,7 @@ public:
wxString create_chapter_label(KaxChapterAtom &chapter);
void enable_inputs(bool enable);
bool select_file_name();
bool load(wxString name);
void save();
};
@ -387,8 +394,8 @@ protected:
wxStatusBar *status_bar;
wxNotebook *notebook;
wxMenu *file_menu;
bool file_menu_sep;
wxMenu *file_menu, *chapter_menu;
bool file_menu_sep, chapter_menu_sep;
tab_input *input_page;
tab_attachments *attachments_page;
@ -424,6 +431,10 @@ public:
void on_file_load_last(wxCommandEvent &evt);
void update_file_menu();
void set_last_chapters_in_menu(wxString name);
void on_chapters_load_last(wxCommandEvent &evt);
void update_chapter_menu();
void on_new_chapters(wxCommandEvent &evt);
void on_load_chapters(wxCommandEvent &evt);
void on_save_chapters(wxCommandEvent &evt);

View File

@ -270,46 +270,52 @@ void tab_chapters::add_recursively(wxTreeItemId &parent, EbmlMaster &master) {
}
void tab_chapters::on_load_chapters(wxCommandEvent &evt) {
KaxChapters *new_chapters;
wxString s;
wxFileDialog dlg(NULL, "Choose a chapter file", last_open_dir, "",
_T("Chapter files (*.xml;*.txt)|*.xml;*.txt|" ALLFILES),
wxOPEN);
if(dlg.ShowModal() == wxID_OK) {
last_open_dir = dlg.GetDirectory();
try {
new_chapters = parse_chapters(dlg.GetPath().c_str(), 0, -1, 0, NULL,
NULL, true);
} catch (error_c e) {
s = (const char *)e;
break_line(s);
while (s[s.Length() - 1] == '\n')
s.Remove(s.Length() - 1);
wxMessageBox(s, _T("Error parsing the chapter file"),
wxOK | wxCENTER | wxICON_ERROR);
return;
}
if (dlg.ShowModal() == wxID_OK)
if (load(dlg.GetPath()))
last_open_dir = dlg.GetDirectory();
}
if (chapters != NULL)
delete chapters;
tc_chapters->DeleteAllItems();
chapters = new_chapters;
m_chapters->Enable(ID_M_CHAPTERS_SAVE, true);
m_chapters->Enable(ID_M_CHAPTERS_SAVEAS, true);
m_chapters->Enable(ID_M_CHAPTERS_VERIFY, true);
b_add_chapter->Enable(true);
b_remove_chapter->Enable(true);
bool tab_chapters::load(wxString name) {
KaxChapters *new_chapters;
wxString s;
file_name = dlg.GetPath();
tid_root = tc_chapters->AddRoot(file_name);
add_recursively(tid_root, *chapters);
expand_subtree(*tc_chapters, tid_root);
enable_inputs(false);
mdlg->set_status_bar("Chapters loaded.");
try {
new_chapters = parse_chapters(name.c_str(), 0, -1, 0, NULL, NULL, true);
} catch (error_c e) {
s = (const char *)e;
break_line(s);
while (s[s.Length() - 1] == '\n')
s.Remove(s.Length() - 1);
wxMessageBox(s, _T("Error parsing the chapter file"),
wxOK | wxCENTER | wxICON_ERROR);
return false;
}
if (chapters != NULL)
delete chapters;
tc_chapters->DeleteAllItems();
chapters = new_chapters;
m_chapters->Enable(ID_M_CHAPTERS_SAVE, true);
m_chapters->Enable(ID_M_CHAPTERS_SAVEAS, true);
m_chapters->Enable(ID_M_CHAPTERS_VERIFY, true);
b_add_chapter->Enable(true);
b_remove_chapter->Enable(true);
file_name = name;
tid_root = tc_chapters->AddRoot(file_name);
add_recursively(tid_root, *chapters);
expand_subtree(*tc_chapters, tid_root);
enable_inputs(false);
mdlg->set_last_chapters_in_menu(name);
mdlg->set_status_bar("Chapters loaded.");
return true;
}
void tab_chapters::on_save_chapters(wxCommandEvent &evt) {
@ -362,6 +368,7 @@ void tab_chapters::save() {
fprintf(fout, "</Chapters>\n");
fclose(fout);
mdlg->set_last_chapters_in_menu(file_name);
mdlg->set_status_bar(_("Chapters written."));
}