From: John L. <jr...@us...> - 2007-06-19 22:26:54
|
Update of /cvsroot/wxlua/wxLua/samples In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv10494/wxLua/samples Added Files: controls.wx.lua picker.wx.lua Log Message: Add samples for picker and other controls Fix some binding problems found from the samples --- NEW FILE: picker.wx.lua --- ----------------------------------------------------------------------------- -- Name: picker.wx.lua -- Purpose: Picker wxLua sample -- Author: John Labenski -- Modified by: -- Created: 6/19/2007 -- RCS-ID: -- Copyright: (c) 2007 John Labenski -- Licence: wxWidgets licence ----------------------------------------------------------------------------- frame = nil textCtrl = nil ID_COLOURPICKER1 = 1001 ID_COLOURPICKER2 = 1002 ID_COLOURPICKER3 = 1003 ID_DATEPICKER1 = 2001 ID_DATEPICKER2 = 2002 ID_DATEPICKER3 = 2003 ID_DATEPICKER4 = 2004 ID_DATEPICKER5 = 2005 ID_DIRPICKER1 = 3001 ID_DIRPICKER2 = 3002 ID_DIRPICKER3 = 3003 ID_DIRPICKER4 = 3004 ID_FILEPICKER1 = 4001 ID_FILEPICKER2 = 4002 ID_FILEPICKER3 = 4003 ID_FILEPICKER4 = 4004 ID_FILEPICKER5 = 4005 ID_FONTPICKER1 = 5001 ID_FONTPICKER2 = 5002 ID_FONTPICKER3 = 5003 ID_FONTPICKER4 = 5004 ID_FONTPICKER5 = 5005 -- --------------------------------------------------------------------------- -- Gather up all of the wxEVT_XXX names and hash by their value -- --------------------------------------------------------------------------- wxEVT_Names = {} for k, v in pairs(wx) do if string.find(k, "wxEVT_", 1, 1) == 1 then wxEVT_Names[v] = k end end -- --------------------------------------------------------------------------- -- Handle all wxColourPickerEvents -- --------------------------------------------------------------------------- function OnColourPicker(event) local evt_type = event:GetEventType() local c = event:GetColour() local val = c:GetAsString() c:delete() -- delete all wxColours when done local s = string.format("%s wxColourPickerEvent type: %s=%d id: %d GetColour = '%s'\n\n", wx.wxNow(), wxEVT_Names[evt_type], evt_type, event:GetId(), val) textCtrl:AppendText(s) end -- --------------------------------------------------------------------------- -- Handle all wxDateEvents -- --------------------------------------------------------------------------- function OnDatePicker(event) local evt_type = event:GetEventType() local val = event:GetDate():Format() local s = string.format("%s wxDateEvent type: %s=%d id: %d GetDate = '%s'\n\n", wx.wxNow(), wxEVT_Names[evt_type], evt_type, event:GetId(), val) textCtrl:AppendText(s) end -- --------------------------------------------------------------------------- -- Handle all wxFileDirPickerEvents -- --------------------------------------------------------------------------- function OnFileDirPicker(event) local evt_type = event:GetEventType() local val = event:GetPath() local s = string.format("%s wxFileDirPickerEvent type: %s=%d id: %d GetPath = '%s'\n\n", wx.wxNow(), wxEVT_Names[evt_type], evt_type, event:GetId(), val) textCtrl:AppendText(s) end -- --------------------------------------------------------------------------- -- Handle all wxFontPickerEvents -- --------------------------------------------------------------------------- function OnFontPicker(event) local evt_type = event:GetEventType() local f = event:GetFont() local val = f:GetNativeFontInfoDesc() f:delete() -- delete all wxFonts when done local s = string.format("%s wxFontPickerEvent type: %s=%d id: %d GetFont = '%s'\n\n", wx.wxNow(), wxEVT_Names[evt_type], evt_type, event:GetId(), val) textCtrl:AppendText(s) end -- --------------------------------------------------------------------------- -- Create the window with the picker controls -- --------------------------------------------------------------------------- function CreatePickerWindow(parent) local scrollWin = wx.wxScrolledWindow(parent, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxHSCROLL + wx.wxVSCROLL) -- Give the scrollwindow enough size so sizer works when calling Fit() scrollWin:SetScrollbars(15, 15, 400, 600, 0, 0, false) local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) local flexSizer = wx.wxFlexGridSizer(20, 2, 5, 5) flexSizer:AddGrowableCol(1) local statText = nil -- not used outside of this function -- ----------------------------------------------------------------------- local colourPicker = nil -- not used outside of this function statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxColourPickerCtrl + wxCLRP_DEFAULT_STYLE") colourPicker = wx.wxColourPickerCtrl(scrollWin, ID_COLOURPICKER1, wx.wxBLACK, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxCLRP_DEFAULT_STYLE) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(colourPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxColourPickerCtrl + wxCLRP_USE_TEXTCTRL") colourPicker = wx.wxColourPickerCtrl(scrollWin, ID_COLOURPICKER2, wx.wxBLACK, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxCLRP_USE_TEXTCTRL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(colourPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxColourPickerCtrl + wxCLRP_SHOW_LABEL") colourPicker = wx.wxColourPickerCtrl(scrollWin, ID_COLOURPICKER3, wx.wxBLACK, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxCLRP_SHOW_LABEL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(colourPicker, 1, wx.wxEXPAND) -- central event handler for all wxColourPickerEvent scrollWin:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_COLOURPICKER_CHANGED, OnColourPicker) -- ----------------------------------------------------------------------- flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) local datePicker = nil -- not used outside of this function statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDatePickerCtrl + wxDP_DEFAULT") datePicker = wx.wxDatePickerCtrl(scrollWin, ID_DATEPICKER1, wx.wxDefaultDateTime, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDP_DEFAULT) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(datePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDatePickerCtrl + wxDP_SPIN") if wx.__WXMSW__ then datePicker = wx.wxDatePickerCtrl(scrollWin, ID_DATEPICKER2, wx.wxDefaultDateTime, wx.wxDefaultPosition, wx.wxDefaultSize, wx. wxDP_SPIN) else datePicker = wx.wxStaticText(scrollWin, wx.wxID_ANY, "Supported in MSW only") end flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(datePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDatePickerCtrl + wxDP_DROPDOWN") datePicker = wx.wxDatePickerCtrl(scrollWin, ID_DATEPICKER3, wx.wxDefaultDateTime, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDP_DROPDOWN) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(datePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDatePickerCtrl + wxDP_ALLOWNONE") datePicker = wx.wxDatePickerCtrl(scrollWin, ID_DATEPICKER4, wx.wxDefaultDateTime, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDP_ALLOWNONE) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(datePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDatePickerCtrl + wxDP_SHOWCENTURY") datePicker = wx.wxDatePickerCtrl(scrollWin, ID_DATEPICKER5, wx.wxDefaultDateTime, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDP_SHOWCENTURY) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(datePicker, 1, wx.wxEXPAND) -- central event handler for all wxDatePickerCtrls scrollWin:Connect(wx.wxID_ANY, wx.wxEVT_DATE_CHANGED, OnDatePicker) -- ----------------------------------------------------------------------- flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) local dirPicker = nil -- not used outside of this function statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDirPickerCtrl + wxDIRP_DEFAULT_STYLE") dirPicker = wx.wxDirPickerCtrl(scrollWin, ID_DIRPICKER1, wx.wxGetCwd(), wx.wxDirSelectorPromptStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDIRP_DEFAULT_STYLE) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(dirPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDirPickerCtrl + wxDIRP_USE_TEXTCTRL") dirPicker = wx.wxDirPickerCtrl(scrollWin, ID_DIRPICKER2, wx.wxGetCwd(), "I'm the message parameter", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDIRP_USE_TEXTCTRL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(dirPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDirPickerCtrl + wxDIRP_CHANGE_DIR") dirPicker = wx.wxDirPickerCtrl(scrollWin, ID_DIRPICKER3, wx.wxGetCwd(), wx.wxDirSelectorPromptStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDIRP_CHANGE_DIR) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(dirPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxDirPickerCtrl + wxDIRP_DIR_MUST_EXIST") dirPicker = wx.wxDirPickerCtrl(scrollWin, ID_DIRPICKER4, wx.wxGetCwd(), wx.wxDirSelectorPromptStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxDIRP_DIR_MUST_EXIST) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(dirPicker, 1, wx.wxEXPAND) -- central event handler for all wxDirPickerCtrl scrollWin:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_DIRPICKER_CHANGED, OnFileDirPicker) -- ----------------------------------------------------------------------- flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) local filePicker = nil -- not used outside of this function statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFilePickerCtrl + wxFLP_DEFAULT_STYLE") filePicker = wx.wxFilePickerCtrl(scrollWin, ID_FILEPICKER1, wx.wxGetCwd(), "I'm the message parameter", "*", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFLP_DEFAULT_STYLE) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(filePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFilePickerCtrl + wxFLP_USE_TEXTCTRL") filePicker = wx.wxFilePickerCtrl(scrollWin, ID_FILEPICKER2, wx.wxGetCwd(), wx.wxFileSelectorPromptStr, wx.wxFileSelectorDefaultWildcardStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFLP_USE_TEXTCTRL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(filePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFilePickerCtrl + wxFLP_CHANGE_DIR") filePicker = wx.wxFilePickerCtrl(scrollWin, ID_FILEPICKER3, wx.wxGetCwd(), wx.wxFileSelectorPromptStr, wx.wxFileSelectorDefaultWildcardStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFLP_CHANGE_DIR) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(filePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFilePickerCtrl + wxFLP_OPEN+wxFLP_FILE_MUST_EXIST") filePicker = wx.wxFilePickerCtrl(scrollWin, ID_FILEPICKER4, wx.wxGetCwd(), wx.wxFileSelectorPromptStr, wx.wxFileSelectorDefaultWildcardStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFLP_OPEN + wx.wxFLP_FILE_MUST_EXIST) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(filePicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFilePickerCtrl + wxFLP_SAVE+wxFLP_OVERWRITE_PROMPT") filePicker = wx.wxFilePickerCtrl(scrollWin, ID_FILEPICKER5, wx.wxGetCwd(), wx.wxFileSelectorPromptStr, wx.wxFileSelectorDefaultWildcardStr, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFLP_SAVE + wx.wxFLP_OVERWRITE_PROMPT) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(filePicker, 1, wx.wxEXPAND) -- central event handler for all wxDirPickerCtrl scrollWin:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_FILEPICKER_CHANGED, OnFileDirPicker) -- ----------------------------------------------------------------------- flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) local fontPicker = nil -- not used outside of this function statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFontPickerCtrl + wxFNTP_DEFAULT_STYLE, wxNullFont") fontPicker = wx.wxFontPickerCtrl(scrollWin, ID_FONTPICKER1, wx.wxNullFont, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFNTP_DEFAULT_STYLE) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(fontPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFontPickerCtrl + wxFNTP_USE_TEXTCTRL, wxNORMAL_FONT") fontPicker = wx.wxFontPickerCtrl(scrollWin, ID_FONTPICKER2, wx.wxNORMAL_FONT, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFNTP_USE_TEXTCTRL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(fontPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFontPickerCtrl + wxFNTP_FONTDESC_AS_LABEL, wxSMALL_FONT") fontPicker = wx.wxFontPickerCtrl(scrollWin, ID_FONTPICKER3, wx.wxSMALL_FONT, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFNTP_FONTDESC_AS_LABEL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(fontPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFontPickerCtrl + wxFNTP_USEFONT_FOR_LABEL, wxITALIC_FONT") fontPicker = wx.wxFontPickerCtrl(scrollWin, ID_FONTPICKER4, wx.wxITALIC_FONT, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFNTP_USEFONT_FOR_LABEL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(fontPicker, 1, wx.wxEXPAND) statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxFontPickerCtrl + wxFNTP_USEFONT_FOR_LABEL, wxSWISS_FONT") fontPicker = wx.wxFontPickerCtrl(scrollWin, ID_FONTPICKER5, wx.wxSWISS_FONT, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxFNTP_USEFONT_FOR_LABEL) flexSizer:Add(statText, 1, wx.wxALIGN_CENTER_VERTICAL) flexSizer:Add(fontPicker, 1, wx.wxEXPAND) -- central event handler for all wxDirPickerCtrl scrollWin:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_FONTPICKER_CHANGED, OnFontPicker) -- ----------------------------------------------------------------------- mainSizer:Add(flexSizer, 1, wx.wxEXPAND) scrollWin:SetSizer(mainSizer) mainSizer:Fit(scrollWin) return scrollWin end -- --------------------------------------------------------------------------- -- Main function of the program -- --------------------------------------------------------------------------- function main() frame = wx.wxFrame( wx.NULL, -- no parent needed for toplevel windows wx.wxID_ANY, -- don't need a wxWindow ID "wxLua Picker Demo", -- caption on the frame wx.wxDefaultPosition, -- let system place the frame wx.wxSize(550, 450), -- set the size of the frame wx.wxDEFAULT_FRAME_STYLE ) -- use default frame styles local fileMenu = wx.wxMenu() fileMenu:Append(wx.wxID_EXIT, "E&xit", "Quit the program") local helpMenu = wx.wxMenu() helpMenu:Append(wx.wxID_ABOUT, "&About", "About the wxLua Picker Application") local menuBar = wx.wxMenuBar() menuBar:Append(fileMenu, "&File") menuBar:Append(helpMenu, "&Help") frame:SetMenuBar(menuBar) frame:CreateStatusBar(1) frame:SetStatusText("Welcome to wxLua.") -- connect the selection event of the exit menu item to an -- 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 Picker wxLua sample.\n'.. wx.wxLUA_VERSION_STRING.." built with "..wx.wxVERSION_STRING, "About wxLua", wx.wxOK + wx.wxICON_INFORMATION, frame) end ) -- ----------------------------------------------------------------------- splitter = wx.wxSplitterWindow(frame, wx.wxID_ANY) splitter:SetMinimumPaneSize(50) -- don't let it unsplit splitter:SetSashGravity(.8) pickerWin = CreatePickerWindow(splitter) textCtrl = wx.wxTextCtrl(splitter, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_READONLY+wx.wxTE_MULTILINE+wx.wxTE_DONTWRAP) splitter:SplitHorizontally(pickerWin, textCtrl, 300) -- ----------------------------------------------------------------------- frame:Show(true) -- show the frame window end main() --- NEW FILE: controls.wx.lua --- ----------------------------------------------------------------------------- -- Name: picker.wx.lua -- Purpose: Picker wxLua sample -- Author: John Labenski -- Modified by: -- Created: 6/19/2007 -- RCS-ID: -- Copyright: (c) 2007 John Labenski -- Licence: wxWidgets licence ----------------------------------------------------------------------------- frame = nil textCtrl = nil bmp = wx.wxArtProvider.GetBitmap(wx.wxART_INFORMATION) ID_BUTTON = 1000 ID_BITMAPBUTTON = 1001 ID_COMBOBOX = 100 ID_BITMAPCOMBOBOX = 100 ID_CHECKBOX = 100 ID_CALENDARCTRL = 100 -- --------------------------------------------------------------------------- -- Gather up all of the wxEVT_XXX names and hash by their value -- --------------------------------------------------------------------------- wxEVT_Names = {} for k, v in pairs(wx) do if string.find(k, "wxEVT_", 1, 1) == 1 then wxEVT_Names[v] = k end end -- --------------------------------------------------------------------------- -- Format all of the values you can get from different event types -- --------------------------------------------------------------------------- function EventToString(event) return string.format("wxEvent - GetEventType=%d='%s' GetId=%d GetSkipped=%s GetTimestamp=%d IsCommandEvent=%s ShouldPropagate=%s", event:GetEventType(), wxEVT_Names[event:GetEventType()], event:GetId(), tostring(event:GetSkipped()), event:GetTimestamp(), tostring(event:IsCommandEvent()), tostring(event:ShouldPropagate())) end function CommandEventToString(event) return string.format("wxCommandEvent - GetExtraLong=%d GetInt=%d GetSelection=%d GetString='%s' IsChecked=%s IsSelection=%s", event:GetExtraLong(), event:GetInt(), event:GetSelection(), event:GetString(), tostring(event:IsChecked()), tostring(event:IsSelection())) end function DateEventToString(event) return string.format("wxDateEvent - GetDate:Format='%s'", event:GetDate():Format()) end function CalendarEventToString(event) return string.format("wxCalendarEvent - GetWeekDay=%d", event:GetWeekDay()) end -- --------------------------------------------------------------------------- -- Handle all wxCommandEvents -- --------------------------------------------------------------------------- function OnCommandEvent(event) local obj_str = event:GetEventObject():DynamicCast("wxWindow"):GetName() local evt_str = EventToString(event) local cmd_str = CommandEventToString(event) local s = string.format("%s From: %s Sent - wxCommandEvent \n\t%s\n\t%s\n\n", wx.wxNow(), obj_str, evt_str, cmd_str) textCtrl:AppendText(s) end -- --------------------------------------------------------------------------- -- Handle all wxCalendarEvents -- --------------------------------------------------------------------------- function OnCalendarEvent(event) local obj_str = event:GetEventObject():DynamicCast("wxWindow"):GetName() local evt_str = EventToString(event) local cmd_str = CommandEventToString(event) local date_str = DateEventToString(event) local cal_str = CalendarEventToString(event) local s = string.format("%s From: %s Sent - wxCalendarEvent \n\t%s\n\t%s\n\t%s\n\t%s\n\n", wx.wxNow(), obj_str, evt_str, cmd_str, date_str, cal_str) textCtrl:AppendText(s) end -- --------------------------------------------------------------------------- -- Create the window with the controls -- --------------------------------------------------------------------------- function CreateControlsWindow(parent) local scrollWin = wx.wxScrolledWindow(parent, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxHSCROLL + wx.wxVSCROLL) -- Give the scrollwindow enough size so sizer works when calling Fit() scrollWin:SetScrollbars(15, 15, 400, 600, 0, 0, false) local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL) local flexSizer = wx.wxFlexGridSizer(20, 2, 5, 5) flexSizer:AddGrowableCol(1) local statText = nil -- not used outside of this function -- ----------------------------------------------------------------------- local control = nil statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxButton") control = wx.wxButton(scrollWin, ID_BUTTON, "wxButton!", wx.wxDefaultPosition, wx.wxDefaultSize) flexSizer:Add(statText, 0, wx.wxALIGN_CENTER_VERTICAL, 5) flexSizer:Add(control, 1, wx.wxALIGN_CENTER) -- ----------------------------------------------------------------------- statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxBitmapButton") control = wx.wxBitmapButton(scrollWin, ID_BITMAPBUTTON, bmp, wx.wxDefaultPosition, wx.wxDefaultSize) flexSizer:Add(statText, 0, wx.wxALIGN_CENTER_VERTICAL, 5) flexSizer:Add(control, 1, wx.wxALIGN_CENTER) -- ----------------------------------------------------------------------- statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxCheckBox") control = wx.wxCheckBox(scrollWin, ID_CHECKBOX, "wxCheckBox", wx.wxDefaultPosition, wx.wxDefaultSize) flexSizer:Add(statText, 0, wx.wxALIGN_CENTER_VERTICAL, 5) flexSizer:Add(control, 1, wx.wxALIGN_CENTER) -- ----------------------------------------------------------------------- statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxComboBox") control = wx.wxComboBox(scrollWin, ID_COMBOBOX, "wxComboBox!", wx.wxDefaultPosition, wx.wxDefaultSize, {"Item 1", "Item 2", "Item 3 text is long for default size"}, wx.wxTE_PROCESS_ENTER) -- generates event when enter is pressed control:Append("Appended item") control:Insert("Inserted at 0", 0) flexSizer:Add(statText, 0, wx.wxALIGN_CENTER_VERTICAL, 5) flexSizer:Add(control, 1, wx.wxALIGN_CENTER) -- ----------------------------------------------------------------------- statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxBitmapComboBox") control = wx.wxBitmapComboBox(scrollWin, ID_BITMAPCOMBOBOX, "wxBitmapComboBox!", wx.wxDefaultPosition, wx.wxDefaultSize, {"Item 1", "Item 2", "Item 3 text is long for default size"}, wx.wxTE_PROCESS_ENTER) -- generates event when enter is pressed control:Append("Appended w/ bitmap", bmp) control:Insert("Inserted at 0 w/ bitmap", bmp, 0) control:SetItemBitmap(2, bmp) flexSizer:Add(statText, 0, wx.wxALIGN_CENTER_VERTICAL, 5) flexSizer:Add(control, 1, wx.wxALIGN_CENTER) -- ----------------------------------------------------------------------- statText = wx.wxStaticText(scrollWin, wx.wxID_ANY, "wxCalendarCtrl") control = wx.wxCalendarCtrl(scrollWin, ID_CALENDARCTRL, wx.wxDefaultDateTime, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxCAL_SHOW_HOLIDAYS+wx.wxCAL_BORDER_SQUARE) flexSizer:Add(statText, 0, wx.wxALIGN_CENTER_VERTICAL, 5) flexSizer:Add(control, 1, wx.wxALIGN_CENTER) -- ----------------------------------------------------------------------- flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) flexSizer:Add(wx.wxStaticLine(scrollWin, wx.wxID_ANY), 1, wx.wxEXPAND) -- central event handler for all items that send wxCommandEvents -- Note this is the same as doing this --scrollWin:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_BUTTON_CLICKED, OnCommandEvent) for k, v in pairs(wxEVT_Names) do -- luckily all the wxCommandEvents start w/ wxEVT_COMMAND_ if string.find(v, "wxEVT_COMMAND_", 1, 1) == 1 then scrollWin:Connect(wx.wxID_ANY, k, OnCommandEvent) end end for k, v in pairs(wxEVT_Names) do if string.find(v, "wxEVT_CALENDAR_", 1, 1) == 1 then scrollWin:Connect(wx.wxID_ANY, k, OnCalendarEvent) end end -- ----------------------------------------------------------------------- mainSizer:Add(flexSizer, 1, wx.wxEXPAND) scrollWin:SetSizer(mainSizer) mainSizer:Fit(scrollWin) return scrollWin end -- --------------------------------------------------------------------------- -- Main function of the program -- --------------------------------------------------------------------------- function main() frame = wx.wxFrame( wx.NULL, -- no parent needed for toplevel windows wx.wxID_ANY, -- don't need a wxWindow ID "wxLua Controls Demo",-- caption on the frame wx.wxDefaultPosition, -- let system place the frame wx.wxSize(550, 450), -- set the size of the frame wx.wxDEFAULT_FRAME_STYLE ) -- use default frame styles local fileMenu = wx.wxMenu() fileMenu:Append(wx.wxID_EXIT, "E&xit", "Quit the program") local helpMenu = wx.wxMenu() helpMenu:Append(wx.wxID_ABOUT, "&About", "About the wxLua Controls Application") local menuBar = wx.wxMenuBar() menuBar:Append(fileMenu, "&File") menuBar:Append(helpMenu, "&Help") frame:SetMenuBar(menuBar) frame:CreateStatusBar(1) frame:SetStatusText("Welcome to wxLua.") -- connect the selection event of the exit menu item to an -- 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 Controls wxLua sample.\n'.. wx.wxLUA_VERSION_STRING.." built with "..wx.wxVERSION_STRING, "About wxLua", wx.wxOK + wx.wxICON_INFORMATION, frame) end ) -- ----------------------------------------------------------------------- splitter = wx.wxSplitterWindow(frame, wx.wxID_ANY) splitter:SetMinimumPaneSize(50) -- don't let it unsplit splitter:SetSashGravity(.8) controlsWin = CreateControlsWindow(splitter) textCtrl = wx.wxTextCtrl(splitter, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_READONLY+wx.wxTE_MULTILINE+wx.wxTE_DONTWRAP) splitter:SplitHorizontally(controlsWin, textCtrl, 300) -- ----------------------------------------------------------------------- frame:Show(true) -- show the frame window end main() |