Added copy+paste to style manager, ctrl+c/v only (so far, anyway)

Originally committed to SVN as r925.
This commit is contained in:
Dan Donovan 2007-02-06 03:25:14 +00:00
parent 56c7891baf
commit caea5872b4
3 changed files with 100 additions and 2 deletions

View File

@ -101,7 +101,7 @@ Please visit http://aegisub.net to download latest version
- Made the video display detachable. (AMZ)
- Undo and redo now have descriptions. (Dansolo)
- The three different "Recombine Lines" were merged into one that autodetects needed changes, and also supports two new cases. (AMZ)
- Added shortcut keys (escape to close and delete to delete a style, plus ctrl+c/v for copy/paste) to style manager. (Dansolo)
= 1.10 beta - 2006.08.07 ===========================
@ -201,7 +201,7 @@ Please visit http://aegisub.net to download latest version
- Implemented sorting of subtitles by start time. (AMZ)
- Recovered subtitle files are now saved in their own subfolder (customizeable in config.dat). (AMZ)
- Fixed crash with changing font properties via the subtitle edit box when there was a \fs override tag earlier in the line. (AMZ)
- Added shortcut keys (escape to close and delete to delete a style) to style manager. (Dansolo)
= 1.09 beta - 2006.01.16 ===========================

View File

@ -619,6 +619,74 @@ void DialogStyleManager::OnCurrentCopy (wxCommandEvent &event) {
}
//////////////////////
// Copy to clipboard
void DialogStyleManager::CopyToClipboard (wxListBox *list, std::vector<AssStyle*> v) {
wxString data = _T("");
AssStyle *s;
wxArrayInt selections;
list->GetSelections(selections);
for(int unsigned i=0;i<selections.size();i++) {
if (i!=0) data += _T("\r\n");
s = v.at(selections[i]);
s->UpdateData();
data += s->GetEntryData();
}
if (wxTheClipboard->Open()) {
wxTheClipboard->SetData(new wxTextDataObject(data));
wxTheClipboard->Close();
}
}
////////////////////////
// Paste from clipboard
void DialogStyleManager::PasteToCurrent() {
wxString data = _T("");
if (wxTheClipboard->Open()) {
if (wxTheClipboard->IsSupported(wxDF_TEXT)) {
wxTextDataObject rawdata;
wxTheClipboard->GetData(rawdata);
data = rawdata.GetText();
}
wxTheClipboard->Close();
}
wxStringTokenizer st(data,_T('\n'));
while (st.HasMoreTokens()) {
AssStyle *s = new AssStyle(st.GetNextToken().Trim(true));
if (s->Valid) {
AssFile::top->InsertStyle(s);
LoadCurrentStyles(AssFile::top);
}
grid->ass->FlagAsModified(_("style paste"));
grid->CommitChanges();
}
}
void DialogStyleManager::PasteToStorage() {
wxString data = _T("");
if (wxTheClipboard->Open()) {
if (wxTheClipboard->IsSupported(wxDF_TEXT)) {
wxTextDataObject rawdata;
wxTheClipboard->GetData(rawdata);
data = rawdata.GetText();
}
wxTheClipboard->Close();
}
wxStringTokenizer st(data,_T('\n'));
while (st.HasMoreTokens()) {
AssStyle *s = new AssStyle(st.GetNextToken().Trim(true));
if (s->Valid) {
Store.style.push_back(s);
Store.Save(CatalogList->GetString(CatalogList->GetSelection()));
}
LoadStorageStyles();
StorageList->SetStringSelection(s->name);
}
}
///////////////
// Storage new
void DialogStyleManager::OnStorageNew (wxCommandEvent &event) {
@ -1017,6 +1085,32 @@ void DialogStyleManager::OnKeyDown(wxKeyEvent &event) {
OnCurrentDelete(evt);
}
break;
case 'C' :
case 'c' :
if (event.ControlDown()) {
if (wxWindow::FindFocus()==CurrentList) {
CopyToClipboard(CurrentList,styleMap);
}
else if (wxWindow::FindFocus()==StorageList) {
CopyToClipboard(StorageList,styleStorageMap);
}
}
break;
case 'V' :
case 'v' :
if (event.ControlDown()) {
if (wxWindow::FindFocus()==CurrentList) {
PasteToCurrent();
}
else if (wxWindow::FindFocus()==StorageList) {
PasteToStorage();
}
}
break;
}
}
//////////////////

View File

@ -130,6 +130,10 @@ public:
void OnCurrentDelete (wxCommandEvent &event);
void OnCurrentImport (wxCommandEvent &event);
void OnKeyDown (wxKeyEvent &event);
void CopyToClipboard (wxListBox *list, std::vector<AssStyle*> v);
void PasteToCurrent();
void PasteToStorage();
DECLARE_EVENT_TABLE()
};