Fix a bunch of bugs with config dialogues in Auto 4 Lua:
- When default buttons were present, pushing OK caused no button code to be returned at all. - A load of controls not handling default/initial values properly, closes #775 and #776 Originally committed to SVN as r2912.
This commit is contained in:
parent
28d4ed7c8a
commit
277adad41f
1 changed files with 20 additions and 18 deletions
|
@ -58,6 +58,7 @@
|
||||||
#include <wx/tokenzr.h>
|
#include <wx/tokenzr.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "colour_button.h"
|
#include "colour_button.h"
|
||||||
|
#include "ass_style.h"
|
||||||
|
|
||||||
namespace Automation4 {
|
namespace Automation4 {
|
||||||
|
|
||||||
|
@ -170,7 +171,15 @@ namespace Automation4 {
|
||||||
Edit(lua_State *L)
|
Edit(lua_State *L)
|
||||||
: LuaConfigDialogControl(L)
|
: LuaConfigDialogControl(L)
|
||||||
{
|
{
|
||||||
lua_getfield(L, -1, "text");
|
// Undocumented behaviour, 'value' is also accepted as key for text,
|
||||||
|
// mostly so a text control can stand in for other things.
|
||||||
|
// This shouldn't be exploited and might change later.
|
||||||
|
lua_getfield(L, -1, "value");
|
||||||
|
if (lua_isnil(L, -1))
|
||||||
|
{
|
||||||
|
lua_pop(L, 1);
|
||||||
|
lua_getfield(L, -1, "text");
|
||||||
|
}
|
||||||
text = wxString(lua_tostring(L, -1), wxConvUTF8);
|
text = wxString(lua_tostring(L, -1), wxConvUTF8);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
@ -243,7 +252,9 @@ namespace Automation4 {
|
||||||
|
|
||||||
wxControl *Create(wxWindow *parent)
|
wxControl *Create(wxWindow *parent)
|
||||||
{
|
{
|
||||||
cw = new ColourButton(parent, -1, wxSize(50*width,10*height), wxColour(text));
|
AssColor colour;
|
||||||
|
colour.Parse(text);
|
||||||
|
cw = new ColourButton(parent, -1, wxSize(50*width,10*height), colour.GetWXColor());
|
||||||
cw->SetToolTip(hint);
|
cw->SetToolTip(hint);
|
||||||
return cw;
|
return cw;
|
||||||
}
|
}
|
||||||
|
@ -392,7 +403,7 @@ nospin:
|
||||||
: Edit(L)
|
: Edit(L)
|
||||||
{
|
{
|
||||||
lua_getfield(L, -1, "value");
|
lua_getfield(L, -1, "value");
|
||||||
value = lua_tointeger(L, -1);
|
value = (float)lua_tonumber(L, -1);
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
// TODO: spin button support
|
// TODO: spin button support
|
||||||
|
@ -714,22 +725,13 @@ badcontrol:
|
||||||
wxLogDebug(_T("was zero, cancelled"));
|
wxLogDebug(_T("was zero, cancelled"));
|
||||||
// Always cancel/closed
|
// Always cancel/closed
|
||||||
lua_pushboolean(L, 0);
|
lua_pushboolean(L, 0);
|
||||||
|
} else if (buttons.size() == 0 && btn == 1) {
|
||||||
|
wxLogDebug(_T("default buttons, button 1 pushed, Ok button"));
|
||||||
|
lua_pushboolean(L, 1);
|
||||||
} else {
|
} else {
|
||||||
wxLogDebug(_T("nonzero, something else: %d"), btn);
|
wxLogDebug(_T("user button: %s"), buttons.at(btn-1).c_str());
|
||||||
|
// button_pushed is index+1 to reserve 0 for Cancel
|
||||||
// If it got out of bounds, then it must be a colour button - don't do anything.
|
lua_pushstring(L, buttons.at(btn-1).mb_str(wxConvUTF8));
|
||||||
if (btn < 0 || btn >= (int)buttons.size()) {
|
|
||||||
wxLogDebug(_T("colour button"));
|
|
||||||
}
|
|
||||||
else if (buttons.size() > 0) {
|
|
||||||
wxLogDebug(_T("user button: %s"), buttons.at(btn-1).c_str());
|
|
||||||
// button_pushed is index+1 to reserve 0 for Cancel
|
|
||||||
lua_pushstring(L, buttons.at(btn-1).mb_str(wxConvUTF8));
|
|
||||||
} else {
|
|
||||||
wxLogDebug(_T("default button, must be Ok"));
|
|
||||||
// Cancel case already covered, must be Ok then
|
|
||||||
lua_pushboolean(L, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue