luaforwindows/files/examples/wxlua/validator.wx.wlua

197 lines
8.3 KiB
Lua

-----------------------------------------------------------------------------
-- Name: validator.wx.lua
-- Purpose: wxLua validator test program
-- Author: John Labenski
-- Modified by:
-- Created: 6/10/2007
-- RCS-ID:
-- Copyright: (c) 2001 John Labenski
-- Licence: wxWidgets licence
-----------------------------------------------------------------------------
-- Load the wxLua module, does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit
package.cpath = package.cpath..";./?.dll;./?.so;../lib/?.so;../lib/vc_dll/?.dll;../lib/bcc_dll/?.dll;../lib/mingw_dll/?.dll;"
require("wx")
-- NOTES about validators!
-- The controls apparently must be in a wxDialog and they must also
-- be direct children of the dialog. You CANNOT put any controls that
-- you want to use wxGenericValidators with on a panel that's a child of
-- the dialog.
-- You cannot seem to set a wxGenericValidator to a control and then
-- check the value of the wxLuaObject that the validator uses at any
-- time either since the validator only updates it's value when the
-- function TransferDataFromWindow() is called. You cannot set a
-- wxGenericValidator to a wxCheckBox and then call TransferDataFromWindow()
-- on the validator to force it to update as this apparently does nothing.
-- Finally, it appears that you need to have an wxID_OK button for the
-- TransferDataTo/FromWindow() functions to be automatically called by the
-- dialog.
frame = nil
ID_TEST_VALIDATORS = 1000
ID_CHECKBOX = 1001
ID_COMBOBOX = 1002
ID_TEXTCTRL = 1003
ID_SCROLLBAR = 1004
ID_CHECKLBOX = 1005
ID_TEXTCTRL_TVAL_NUM = 1006
-- Set up the initial values for the validators, we use the wxLuaObjects
-- as proxies for the wxGenericValidators to pass the *int *bool, *string, etc,
-- pointers from the validators to and from to lua.
check_val = true
combo_val = "Select Item"
text_val = "Enter text"
scroll_val = 10
checkl_val = { 0, 2 }
text_alpha_val = "DeleteSpace OnlyAlphabetCharsAllowed"
checkObj = wxlua.wxLuaObject(check_val)
comboObj = wxlua.wxLuaObject(combo_val)
textObj = wxlua.wxLuaObject(text_val)
scrollObj = wxlua.wxLuaObject(scroll_val)
checklObj = wxlua.wxLuaObject(checkl_val)
checklObj = wxlua.wxLuaObject(checkl_val)
textAlphaObj = wxlua.wxLuaObject(text_alpha_val)
function CreateDialog()
dialog = wx.wxDialog(frame, wx.wxID_ANY, "Test Validators")
checkBox = wx.wxCheckBox(dialog, ID_CHECKBOX, "Check me!",
wx.wxDefaultPosition, wx.wxDefaultSize, 0,
wx.wxGenericValidatorBool(checkObj))
comboBox = wx.wxComboBox(dialog, ID_COMBOBOX, "THIS WILL BE OVERWRITTEN",
wx.wxDefaultPosition, wx.wxDefaultSize,
{"Item0", "Item1", "Item2"}, 0,
wx.wxGenericValidatorString(comboObj))
textCtrl = wx.wxTextCtrl(dialog, ID_TEXTCTRL, "THIS WILL BE OVERWRITTEN",
wx.wxDefaultPosition, wx.wxDefaultSize, 0,
wx.wxGenericValidatorString(textObj))
scrollBar = wx.wxScrollBar(dialog, ID_SCROLLBAR,
wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxSB_HORIZONTAL,
wx.wxGenericValidatorInt(scrollObj))
scrollBar:SetScrollbar(0, 10, 100, 5)
checklBox = wx.wxCheckListBox(dialog, ID_CHECKLBOX,
wx.wxDefaultPosition, wx.wxDefaultSize,
{"Check 0", "Check 1", "Check 2", "Check 3"}, 0,
wx.wxGenericValidatorArrayInt(checklObj))
textAlphaCtrl = wx.wxTextCtrl(dialog, ID_TEXTCTRL, "THIS WILL BE OVERWRITTEN",
wx.wxDefaultPosition, wx.wxSize(400, -1), 0,
wx.wxTextValidator(wx.wxFILTER_ALPHA, textAlphaObj))
okButton = wx.wxButton(dialog, wx.wxID_OK, "Ok") -- NEED this for validators to work
okButton:SetDefault()
flexSizer = wx.wxFlexGridSizer(12, 1, 0, 0)
flexSizer:AddGrowableCol(0)
flexSizer:Add(checkBox, 1, wx.wxEXPAND+wx.wxALL, 5)
flexSizer:Add(comboBox, 1, wx.wxEXPAND+wx.wxALL, 5)
flexSizer:Add(textCtrl, 1, wx.wxEXPAND+wx.wxALL, 5)
flexSizer:Add(scrollBar, 1, wx.wxEXPAND+wx.wxALL, 5)
flexSizer:Add(checklBox, 1, wx.wxEXPAND+wx.wxALL, 5)
flexSizer:Add(textAlphaCtrl, 1, wx.wxEXPAND+wx.wxALL, 5)
flexSizer:Add(okButton, 1, wx.wxEXPAND+wx.wxALL, 5)
dialog:SetSizer(flexSizer)
flexSizer:SetSizeHints(dialog)
dialog:ShowModal()
end
function main()
frame = wx.wxFrame( wx.NULL, -- no parent for toplevel windows
wx.wxID_ANY, -- don't need a wxWindow ID
"wxLua Validator Demo", -- caption on the frame
wx.wxDefaultPosition, -- let system place the frame
wx.wxSize(450, 420), -- set the size of the frame
wx.wxDEFAULT_FRAME_STYLE ) -- use default frame styles
-- create a simple status bar
frame:CreateStatusBar(1)
frame:SetStatusText("Welcome to wxLua.")
-- -----------------------------------------------------------------------
local fileMenu = wx.wxMenu()
fileMenu:Append(ID_TEST_VALIDATORS, "&Test Validators...", "Show dialog to test validators")
fileMenu:AppendSeparator()
fileMenu:Append(wx.wxID_EXIT, "E&xit", "Quit the program")
local helpMenu = wx.wxMenu()
helpMenu:Append(wx.wxID_ABOUT, "&About", "About the wxLua Minimal Application")
local menuBar = wx.wxMenuBar()
menuBar:Append(fileMenu, "&File")
menuBar:Append(helpMenu, "&Help")
frame:SetMenuBar(menuBar)
-- connect the selection event of the exit menu item to an
frame:Connect(ID_TEST_VALIDATORS, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
-- update original values we'll use for the validators
check_val = checkObj:GetObject()
combo_val = comboObj:GetObject()
text_val = textObj:GetObject()
scroll_val = scrollObj:GetObject()
checkl_val = checklObj:GetObject()
text_alpha_val = textAlphaObj:GetObject()
CreateDialog()
local s = ""
s = s.."wxCheckBox : '"..tostring(checkObj:GetObject()).."'\nInitial value : '"..tostring(check_val).."'\n\n"
s = s.."wxComboBox : '"..tostring(comboObj:GetObject()).."'\nInitial value : '"..tostring(combo_val).."'\n\n"
s = s.."wxTextCtrl : '"..tostring(textObj:GetObject()).."'\nInitial value : '"..tostring(text_val).."'\n\n"
s = s.."wxScrollBar : '"..tostring(scrollObj:GetObject()).."'\nInitial value : '"..tostring(scroll_val).."'\n\n"
s = s.."wxCheckListBox : '"..table.concat(checklObj:GetObject(), ", ").."'\nInitial value : '"..table.concat(checkl_val, ", ").."'\n\n"
s = s.."wxTextCtrl alpha chars only: '"..tostring(textAlphaObj:GetObject()).."'\nInitial value : '"..tostring(text_alpha_val).."'\n\n"
frameText:SetValue(s)
end )
-- event handler that closes the window
frame:Connect(wx.wxID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event) frame:Close(true) end )
-- connect the selection event of the about menu item
frame:Connect(wx.wxID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
wx.wxMessageBox('This is the "About" dialog of the Validator wxLua sample.\n'..
wxlua.wxLUA_VERSION_STRING.." built with "..wx.wxVERSION_STRING,
"About wxLua",
wx.wxOK + wx.wxICON_INFORMATION,
frame)
end )
-- -----------------------------------------------------------------------
frameText = wx.wxTextCtrl(frame, wx.wxID_ANY, "Output of the validator test dialog will be shown here.",
wx.wxDefaultPosition, wx.wxDefaultSize,
wx.wxTE_MULTILINE)
-- show the frame window
frame:Show(true)
end
main()
-- Call wx.wxGetApp():MainLoop() last to start the wxWidgets event loop,
-- otherwise the wxLua program will exit immediately.
-- Does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit since the
-- MainLoop is already running or will be started by the C++ program.
wx.wxGetApp():MainLoop()