Fonts collector seemingly all fixed and done, except for lack of font caching and use of fc on unix.
Originally committed to SVN as r1272.
This commit is contained in:
parent
6319bcca7b
commit
f36ccd9e99
3 changed files with 79 additions and 19 deletions
|
@ -112,13 +112,19 @@ Please visit http://aegisub.net to download latest version
|
||||||
o Fixed glitches related to the Duration time edit box. (AMZ)
|
o Fixed glitches related to the Duration time edit box. (AMZ)
|
||||||
o Tweaked the behavior of the margin boxes, now they no longer show padding zeros. (AMZ)
|
o Tweaked the behavior of the margin boxes, now they no longer show padding zeros. (AMZ)
|
||||||
o Actor and Effect fields now show a "ghosted" caption saying their name when they are not focused on and blank. (AMZ)
|
o Actor and Effect fields now show a "ghosted" caption saying their name when they are not focused on and blank. (AMZ)
|
||||||
|
- Changes to Fonts Collector:
|
||||||
|
o Changed the font searching engine to something slower, but far more reliable. (jfs/AMZ)
|
||||||
|
o Added option to just verify if you have the fonts. (AMZ)
|
||||||
|
o You can now collect fonts directly to a zipped archive. (AMZ)
|
||||||
|
o Fixed behavior of the Escape key in it. (AMZ)
|
||||||
|
o Redesigned the interface and replaced the log window with a much better Scintilla control. (AMZ)
|
||||||
|
o You can now collect multiple times without reopening the dialog. (AMZ)
|
||||||
- Added a much-needed options dialog with all the relevant config.dat options in it. (AMZ)
|
- Added a much-needed options dialog with all the relevant config.dat options in it. (AMZ)
|
||||||
- Various fixes to better handle paths/file names with non-ANSI characters on Windows (jfs/AMZ)
|
- Various fixes to better handle paths/file names with non-ANSI characters on Windows (jfs/AMZ)
|
||||||
- Misc. fixes for building on Linux (Azzy, equinox, jfs)
|
- Misc. fixes for building on Linux (Azzy, equinox, jfs)
|
||||||
- Added an option to automatically save the files whenever you change anything. (AMZ)
|
- Added an option to automatically save the files whenever you change anything. (AMZ)
|
||||||
- Added global hotkey for Video Play (default Ctrl+P). (AMZ)
|
- Added global hotkey for Video Play (default Ctrl+P). (AMZ)
|
||||||
- Commiting changes in audio to the last line will insert a new line after it. (AMZ)
|
- Commiting changes in audio to the last line will insert a new line after it. (AMZ)
|
||||||
- Fonts collector can now collect fonts directly to a zipped archive; also, fixed behavior of the Escape key in it. (AMZ)
|
|
||||||
- Added two options that allows you to specify where to keep the audio cache. (AMZ)
|
- Added two options that allows you to specify where to keep the audio cache. (AMZ)
|
||||||
- Improved Splash Screen behavior to show up even if the program is frozen loading subtitles, and to center on the current display. (AMZ)
|
- Improved Splash Screen behavior to show up even if the program is frozen loading subtitles, and to center on the current display. (AMZ)
|
||||||
- Aegisub now remembers if it was maximized when it was last quit, and restores its state when opening again. (AMZ)
|
- Aegisub now remembers if it was maximized when it was last quit, and restores its state when opening again. (AMZ)
|
||||||
|
|
|
@ -158,16 +158,36 @@ END_EVENT_TABLE()
|
||||||
////////////////////
|
////////////////////
|
||||||
// Start processing
|
// Start processing
|
||||||
void DialogFontsCollector::OnStart(wxCommandEvent &event) {
|
void DialogFontsCollector::OnStart(wxCommandEvent &event) {
|
||||||
// Check if it's OK to do it
|
// Action being done
|
||||||
wxString foldername = DestBox->GetValue();
|
|
||||||
wxFileName folder(foldername);
|
|
||||||
int action = CollectAction->GetSelection();
|
int action = CollectAction->GetSelection();
|
||||||
|
|
||||||
|
// Check if it's OK to do it
|
||||||
|
wxString foldername = DestBox->GetValue();
|
||||||
|
if (action == 1) foldername += _T("//");
|
||||||
|
wxFileName folder(foldername);
|
||||||
|
bool isFolder = folder.IsDir();
|
||||||
|
|
||||||
|
// Check if it's a folder
|
||||||
|
if (action == 1 && !isFolder) {
|
||||||
|
wxMessageBox(_("Invalid destination."),_("Error"),wxICON_EXCLAMATION | wxOK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Make folder if it doesn't exist
|
// Make folder if it doesn't exist
|
||||||
if (action == 1 && !folder.DirExists()) {
|
if (action == 1 || action == 2) {
|
||||||
|
if (!folder.DirExists()) {
|
||||||
folder.Mkdir(0777,wxPATH_MKDIR_FULL);
|
folder.Mkdir(0777,wxPATH_MKDIR_FULL);
|
||||||
if (!folder.DirExists()) {
|
if (!folder.DirExists()) {
|
||||||
wxMessageBox(_("Invalid destination"),_("Error"),wxICON_EXCLAMATION | wxOK);
|
wxMessageBox(_("Could not create destination folder."),_("Error"),wxICON_EXCLAMATION | wxOK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we have a valid archive name
|
||||||
|
if (action == 2) {
|
||||||
|
if (isFolder || folder.GetName().IsEmpty() || folder.GetExt() != _T("zip")) {
|
||||||
|
wxMessageBox(_("Invalid path for .zip file."),_("Error"),wxICON_EXCLAMATION | wxOK);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,6 +263,7 @@ void DialogFontsCollector::Update(int value) {
|
||||||
CloseButton->Enable(true);
|
CloseButton->Enable(true);
|
||||||
StartButton->Enable(true);
|
StartButton->Enable(true);
|
||||||
CollectAction->Enable(true);
|
CollectAction->Enable(true);
|
||||||
|
wxString dst = DestBox->GetValue();
|
||||||
|
|
||||||
// Get value if -1
|
// Get value if -1
|
||||||
if (value == -1) {
|
if (value == -1) {
|
||||||
|
@ -264,17 +285,10 @@ void DialogFontsCollector::Update(int value) {
|
||||||
DestLabel->Enable(true);
|
DestLabel->Enable(true);
|
||||||
DestLabel->SetLabel(_("Choose the folder where the fonts will be collected to.\nIt will be created if it doesn't exist."));
|
DestLabel->SetLabel(_("Choose the folder where the fonts will be collected to.\nIt will be created if it doesn't exist."));
|
||||||
|
|
||||||
// Remove filename from browser box
|
// Remove filename from browse box
|
||||||
wxFileName fname1(DestBox->GetValue()+_T("/"));
|
if (dst.Right(4) == _T(".zip")) {
|
||||||
if (fname1.DirExists()) {
|
wxFileName fn(dst);
|
||||||
DestBox->SetValue(fname1.GetPath());
|
DestBox->SetValue(fn.GetPath());
|
||||||
}
|
|
||||||
else {
|
|
||||||
wxFileName fname2(DestBox->GetValue());
|
|
||||||
if (fname2.DirExists()) {
|
|
||||||
DestBox->SetValue(fname2.GetPath());
|
|
||||||
}
|
|
||||||
else DestBox->SetValue(((AegisubApp*)wxTheApp)->folderName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,6 +298,13 @@ void DialogFontsCollector::Update(int value) {
|
||||||
BrowseButton->Enable(true);
|
BrowseButton->Enable(true);
|
||||||
DestLabel->Enable(true);
|
DestLabel->Enable(true);
|
||||||
DestLabel->SetLabel(_("Enter the name of the destination zip file to collect the fonts to.\nIf a folder is entered, a default name will be used."));
|
DestLabel->SetLabel(_("Enter the name of the destination zip file to collect the fonts to.\nIf a folder is entered, a default name will be used."));
|
||||||
|
|
||||||
|
// Add filename to browse box
|
||||||
|
if (dst.Right(4) != _T(".zip")) {
|
||||||
|
wxFileName fn(dst + _T("//"));
|
||||||
|
fn.SetFullName(_T("fonts.zip"));
|
||||||
|
DestBox->SetValue(fn.GetFullPath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,6 +361,14 @@ void FontsCollectorThread::Collect() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Open zip stream if saving to compressed archive
|
||||||
|
wxFFileOutputStream *out = NULL;
|
||||||
|
zip = NULL;
|
||||||
|
if (oper == 2) {
|
||||||
|
out = new wxFFileOutputStream(destFolder);
|
||||||
|
zip = new wxZipOutputStream(*out);
|
||||||
|
}
|
||||||
|
|
||||||
// Collect font data
|
// Collect font data
|
||||||
AppendText(_("Collecting font data from system... "));
|
AppendText(_("Collecting font data from system... "));
|
||||||
CollectFontData();
|
CollectFontData();
|
||||||
|
@ -383,6 +412,15 @@ void FontsCollectorThread::Collect() {
|
||||||
if (!result) ok = false;
|
if (!result) ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close ZIP archive
|
||||||
|
if (oper == 2) {
|
||||||
|
zip->Close();
|
||||||
|
delete zip;
|
||||||
|
delete out;
|
||||||
|
|
||||||
|
AppendText(wxString::Format(_("\nFinished writing to %s.\n"),destination.c_str()),1);
|
||||||
|
}
|
||||||
|
|
||||||
// Final result
|
// Final result
|
||||||
if (ok) {
|
if (ok) {
|
||||||
if (oper == 0) AppendText(_("Done. All fonts found."),1);
|
if (oper == 0) AppendText(_("Done. All fonts found."),1);
|
||||||
|
@ -471,7 +509,21 @@ int FontsCollectorThread::CopyFont(wxString filename) {
|
||||||
////////////////
|
////////////////
|
||||||
// Archive font
|
// Archive font
|
||||||
bool FontsCollectorThread::ArchiveFont(wxString filename) {
|
bool FontsCollectorThread::ArchiveFont(wxString filename) {
|
||||||
|
// Open file
|
||||||
|
wxFFileInputStream in(filename);
|
||||||
|
if (!in.IsOk()) return false;
|
||||||
|
|
||||||
|
// Write to archive
|
||||||
|
try {
|
||||||
|
wxFileName fn(filename);
|
||||||
|
zip->PutNextEntry(fn.GetFullName());
|
||||||
|
zip->Write(in);
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ class AssFile;
|
||||||
class AssOverrideParameter;
|
class AssOverrideParameter;
|
||||||
class DialogFontsCollector;
|
class DialogFontsCollector;
|
||||||
class FrameMain;
|
class FrameMain;
|
||||||
|
class wxZipOutputStream;
|
||||||
|
|
||||||
|
|
||||||
/////////////////
|
/////////////////
|
||||||
|
@ -59,6 +60,7 @@ private:
|
||||||
AssStyle *curStyle;
|
AssStyle *curStyle;
|
||||||
wxString destination;
|
wxString destination;
|
||||||
DialogFontsCollector *collector;
|
DialogFontsCollector *collector;
|
||||||
|
wxZipOutputStream *zip;
|
||||||
int curLine;
|
int curLine;
|
||||||
wxString destFolder;
|
wxString destFolder;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue