empty string fixes and working ruby support

Originally committed to SVN as r910.
This commit is contained in:
pomyk 2007-01-30 14:53:42 +00:00
parent 44712f0d7b
commit 5ef911d93c
7 changed files with 27 additions and 28 deletions

View File

@ -366,7 +366,9 @@ namespace Automation4 {
if (script_finished) { if (script_finished) {
if (!debug_visible) { if (!debug_visible) {
EndModal(0); if(IsModal())
EndModal(0);
else Show(false);
} else { } else {
cancel_button->Enable(true); cancel_button->Enable(true);
cancel_button->SetLabel(_("Close")); cancel_button->SetLabel(_("Close"));
@ -450,7 +452,10 @@ namespace Automation4 {
cancelled = true; cancelled = true;
cancel_button->Enable(false); cancel_button->Enable(false);
} else { } else {
EndModal(0); if(this->IsModal())
EndModal(0);
else
Show(false);
} }
} }

View File

@ -232,7 +232,6 @@ namespace Automation4 {
void OnIdle(wxIdleEvent &evt); void OnIdle(wxIdleEvent &evt);
void OnConfigDialog(ShowConfigDialogEvent &evt); void OnConfigDialog(ShowConfigDialogEvent &evt);
void DoUpdateDisplay();
protected: protected:
volatile bool cancelled; volatile bool cancelled;
@ -242,6 +241,7 @@ namespace Automation4 {
virtual ~ProgressSink(); virtual ~ProgressSink();
public: public:
void DoUpdateDisplay();
void SetProgress(float _progress); void SetProgress(float _progress);
void SetTask(const wxString &_task); void SetTask(const wxString &_task);
void SetTitle(const wxString &_title); void SetTitle(const wxString &_title);

View File

@ -41,7 +41,7 @@
#include "ass_override.h" #include "ass_override.h"
#include "text_file_reader.h" #include "text_file_reader.h"
#include "options.h" #include "options.h"
#include "../ruby/include/ruby.h" #include <ruby.h>
#include <wx/msgdlg.h> #include <wx/msgdlg.h>
#include <wx/filename.h> #include <wx/filename.h>
#include <wx/filefn.h> #include <wx/filefn.h>
@ -262,6 +262,7 @@ namespace Automation4 {
, macro_fun(macro_function) , macro_fun(macro_function)
, validation_fun(validate_function) , validation_fun(validate_function)
{ {
no_validate = validate_function == Qnil;
RegisterFeature(); RegisterFeature();
} }
@ -273,25 +274,23 @@ namespace Automation4 {
try { try {
RubyAssFile *subsobj = new RubyAssFile(subs, true, true); RubyAssFile *subsobj = new RubyAssFile(subs, true, true);
VALUE sel = CreateIntegerArray(selected); // selected items VALUE sel = CreateIntegerArray(selected); // selected items
// RubyObjects::Get()->Register(sel); RubyObjects::Get()->Register(sel);
VALUE result = rbFunCall(rb_mKernel, rb_to_id(validation_fun), 3, subsobj->rbAssFile, sel, rb_int2inum(active)); VALUE result = rbFunCall(rb_mKernel, rb_to_id(validation_fun), 3, subsobj->rbAssFile, sel, rb_int2inum(active));
RubyObjects::Get()->Unregister(sel);
if(result != Qnil && result != Qfalse) if(result != Qnil && result != Qfalse)
return true; return true;
// RubyObjects::Get()->Unregister(sel);
}catch (const char* e) { }catch (const char* e) {
wxString *err = new wxString(e, wxConvUTF8); wxString *err = new wxString(e, wxConvUTF8);
throw err->c_str(); wxMessageBox(*err, _T("Error running validation function"),wxICON_ERROR | wxOK);
} }
// wxMessageBox(error, _T("Error running validation function"), wxICON_ERROR | wxOK);
// }
return false; return false;
} }
void RubyFeatureMacro::Process(AssFile *subs, const std::vector<int> &selected, int active, wxWindow * const progress_parent) void RubyFeatureMacro::Process(AssFile *subs, const std::vector<int> &selected, int active, wxWindow * const progress_parent)
{ {
// prepare function call
try { try {
delete RubyProgressSink::inst;
RubyProgressSink::inst = new RubyProgressSink(progress_parent, false); RubyProgressSink::inst = new RubyProgressSink(progress_parent, false);
RubyProgressSink::inst->SetTitle(GetName()); RubyProgressSink::inst->SetTitle(GetName());
RubyProgressSink::inst->Show(true); RubyProgressSink::inst->Show(true);
@ -301,19 +300,16 @@ namespace Automation4 {
VALUE sel = CreateIntegerArray(selected); // selected items VALUE sel = CreateIntegerArray(selected); // selected items
RubyObjects::Get()->Register(sel); RubyObjects::Get()->Register(sel);
VALUE result = rbFunCall(rb_mKernel, rb_to_id(macro_fun), 3, subsobj->rbAssFile, sel, rb_int2inum(active)); VALUE result = rbFunCall(rb_mKernel, rb_to_id(macro_fun), 3, subsobj->rbAssFile, sel, rb_int2inum(active));
RubyObjects::Get()->Unregister(sel);
if(result != Qnil && result != Qfalse) if(result != Qnil && result != Qfalse)
{ {
subsobj->RubyUpdateAssFile(result); subsobj->RubyUpdateAssFile(result);
RubyProgressSink::inst->script_finished = true; RubyProgressSink::inst->script_finished = true;
} }
else RubyProgressSink::inst->Show(false);
// RubyObjects::Get()->Unregister(sel);
} catch (const char* e) { } catch (const char* e) {
wxString *err = new wxString(e, wxConvUTF8); wxString *err = new wxString(e, wxConvUTF8);
wxMessageBox(*err, _T("Error running macro"),wxICON_ERROR | wxOK); wxMessageBox(*err, _T("Error running macro"),wxICON_ERROR | wxOK);
} }
delete RubyProgressSink::inst;
RubyProgressSink::inst = NULL;
} }
@ -355,7 +351,7 @@ namespace Automation4 {
assert(config_dialog->RubyReadBack() == 1); assert(config_dialog->RubyReadBack() == 1);
// TODO, write back stored options here // TODO, write back stored options here
} }
delete RubyProgressSink::inst;
RubyProgressSink::inst = new RubyProgressSink(export_dialog, false); RubyProgressSink::inst = new RubyProgressSink(export_dialog, false);
RubyProgressSink::inst->SetTitle(GetName()); RubyProgressSink::inst->SetTitle(GetName());
RubyProgressSink::inst->Show(true); RubyProgressSink::inst->Show(true);
@ -365,15 +361,12 @@ namespace Automation4 {
if(result != Qnil && result != Qfalse) if(result != Qnil && result != Qfalse)
{ {
subsobj->RubyUpdateAssFile(result); subsobj->RubyUpdateAssFile(result);
RubyProgressSink::inst->script_finished = true;
} }
// else RubyProgressSink::inst->Show(false);
} catch (const char* e) { } catch (const char* e) {
wxString *err = new wxString(e, wxConvUTF8); wxString *err = new wxString(e, wxConvUTF8);
wxMessageBox(*err, _T("Error running filter"),wxICON_ERROR | wxOK); wxMessageBox(*err, _T("Error running filter"),wxICON_ERROR | wxOK);
} }
delete RubyProgressSink::inst;
RubyProgressSink::inst = NULL;
} }
ScriptConfigDialog* RubyFeatureFilter::GenerateConfigDialog(wxWindow *parent) ScriptConfigDialog* RubyFeatureFilter::GenerateConfigDialog(wxWindow *parent)
@ -412,10 +405,6 @@ namespace Automation4 {
RubyProgressSink::~RubyProgressSink() RubyProgressSink::~RubyProgressSink()
{ {
rb_undef_method(RubyScript::RubyAegisub, "progress_set");
rb_undef_method(RubyScript::RubyAegisub, "progress_task");
rb_undef_method(RubyScript::RubyAegisub, "progress_title");
rb_undef_method(RubyScript::RubyAegisub, "debug_out");
// remove progress reporting stuff // remove progress reporting stuff
// TODO // TODO
} }
@ -458,6 +447,7 @@ namespace Automation4 {
wxString _m(StringValueCStr(msg), wxConvUTF8); wxString _m(StringValueCStr(msg), wxConvUTF8);
RubyProgressSink::inst->AddDebugOutput(_m); RubyProgressSink::inst->AddDebugOutput(_m);
RubyProgressSink::inst->DoUpdateDisplay(); RubyProgressSink::inst->DoUpdateDisplay();
wxSafeYield(RubyProgressSink::inst);
return Qtrue; return Qtrue;
} }

View File

@ -41,7 +41,7 @@
#include "auto4_base.h" #include "auto4_base.h"
#include <wx/thread.h> #include <wx/thread.h>
#include <wx/event.h> #include <wx/event.h>
#include "../ruby/include/ruby.h" #include <ruby.h>
class wxWindow; class wxWindow;

View File

@ -40,7 +40,7 @@
#include "ass_override.h" #include "ass_override.h"
#include <assert.h> #include <assert.h>
#include <algorithm> #include <algorithm>
#include "../ruby/include/ruby.h" #include <ruby.h>
namespace Automation4 { namespace Automation4 {
@ -376,7 +376,8 @@ namespace Automation4 {
new_entry = reinterpret_cast<AssEntry*>(rb_protect(rb2AssWrapper, rbEntry, &status)); new_entry = reinterpret_cast<AssEntry*>(rb_protect(rb2AssWrapper, rbEntry, &status));
if(status == 0) ass->Line.push_back(new_entry); if(status == 0) ass->Line.push_back(new_entry);
else { else {
// TODO: log/display the error if(RubyProgressSink::inst)
RubyProgressSink::inst->RubyDebugOut(Qnil, ruby_errinfo);
ruby_errinfo = Qnil; // clear the error ruby_errinfo = Qnil; // clear the error
} }
} }
@ -566,6 +567,8 @@ namespace Automation4 {
VALUE res = rb_protect(rbAss2RbWrapper, reinterpret_cast<VALUE>(*entry), &status); VALUE res = rb_protect(rbAss2RbWrapper, reinterpret_cast<VALUE>(*entry), &status);
if(status == 0) rb_ary_push(rbAssFile, res); if(status == 0) rb_ary_push(rbAssFile, res);
else { else {
if(RubyProgressSink::inst)
RubyProgressSink::inst->RubyDebugOut(Qnil, ruby_errinfo);
ruby_errinfo = Qnil; ruby_errinfo = Qnil;
} }
} }

View File

@ -111,7 +111,7 @@ void ASSSubtitleFormat::ReadFile(wxString filename,wxString encoding) {
version = 2; version = 2;
} }
// Not-so-special case for other groups, just set it // Not-so-special case for other groups, just set it
else if (wxbuffer[0] == _T('[')) { else if (!wxbuffer.IsEmpty() && wxbuffer[0] == _T('[')) {
curgroup = wxbuffer; curgroup = wxbuffer;
// default from extension in all other sections // default from extension in all other sections
//version = 1; //version = 1;

View File

@ -103,6 +103,7 @@ void TXTSubtitleFormat::ReadFile(wxString filename,wxString encoding) { using na
while (file.HasMoreLines()) { while (file.HasMoreLines()) {
// Reads line // Reads line
wxString value = file.ReadLineFromFile(); wxString value = file.ReadLineFromFile();
if(value.IsEmpty()) continue;
// Check if this isn't a timecodes file // Check if this isn't a timecodes file
if (value.Left(10) == _T("# timecode")) { if (value.Left(10) == _T("# timecode")) {