X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a37e4a071ce9bbd6825fb6c6a03154d4318d2cff..34326da778583ca8eab95f2e41738da2852a5a16:/samples/access/accesstest.cpp diff --git a/samples/access/accesstest.cpp b/samples/access/accesstest.cpp index c07fa9f941..29e92dad79 100644 --- a/samples/access/accesstest.cpp +++ b/samples/access/accesstest.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: accesstest.cpp -// Purpose: wxWindows accessibility sample +// Purpose: wxWidgets accessibility sample // Author: Julian Smart // Modified by: // Created: 2002-02-12 @@ -25,27 +25,33 @@ #endif // for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWindows headers) +// need because it includes almost all "standard" wxWidgets headers) #ifndef WX_PRECOMP #include "wx/wx.h" #endif -#include "wx/access.h" +#if wxUSE_ACCESSIBILITY + #include "wx/access.h" +#endif // wxUSE_ACCESSIBILITY + #include "wx/splitter.h" #include "wx/cshelp.h" #ifdef __WXMSW__ -#include "windows.h" -#include -#include -#include -#include "wx/msw/ole/oleutils.h" -#include "wx/msw/winundef.h" - -#ifndef OBJID_CLIENT -#define OBJID_CLIENT 0xFFFFFFFC -#endif + #include "windows.h" + #include + #include + + #if wxUSE_ACCESSIBILITY + #include + #endif // wxUSE_ACCESSIBILITY + #include "wx/msw/ole/oleutils.h" + #include "wx/msw/winundef.h" + + #ifndef OBJID_CLIENT + #define OBJID_CLIENT 0xFFFFFFFC + #endif #endif // ---------------------------------------------------------------------------- @@ -53,8 +59,8 @@ // ---------------------------------------------------------------------------- // the application icon (under Windows and OS/2 it is in resources) -#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) - #include "mondrian.xpm" +#ifndef wxHAS_IMAGES_IN_RESOURCES + #include "../sample.xpm" #endif // ---------------------------------------------------------------------------- @@ -75,6 +81,8 @@ public: }; +#if wxUSE_ACCESSIBILITY + // Define a new frame type: this is going to be our main frame class MyFrame : public wxFrame { @@ -99,7 +107,7 @@ public: private: wxTextCtrl* m_textCtrl; - // any class wishing to process wxWindows events must use this macro + // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() }; @@ -123,10 +131,10 @@ enum }; // ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows +// event tables and other macros for wxWidgets // ---------------------------------------------------------------------------- -// the event tables connect the wxWindows events with the functions (event +// the event tables connect the wxWidgets events with the functions (event // handlers) which process them. It can be also done at run-time, but for the // simple menu events like this the static method is much simpler. BEGIN_EVENT_TABLE(MyFrame, wxFrame) @@ -135,7 +143,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(AccessTest_About, MyFrame::OnAbout) END_EVENT_TABLE() -// Create a new application object: this macro will allow wxWindows to create +#endif // wxUSE_ACCESSIBILITY + +// Create a new application object: this macro will allow wxWidgets to create // the application object during program execution (it's better than using a // static object for many reasons) and also declares the accessor function // wxGetApp() which will return the reference of the right type (i.e. MyApp and @@ -153,6 +163,10 @@ IMPLEMENT_APP(MyApp) // 'Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + +#if wxUSE_ACCESSIBILITY // Note: JAWS for Windows will only speak the context-sensitive // help if you use this help provider: // wxHelpProvider::Set(new wxHelpControllerHelpProvider(m_helpController)). @@ -161,19 +175,25 @@ bool MyApp::OnInit() wxHelpProvider::Set(new wxSimpleHelpProvider()); // create the main application window - MyFrame *frame = new MyFrame(_T("AccessTest wxWindows App"), + MyFrame *frame = new MyFrame(wxT("AccessTest wxWidgets App"), wxPoint(50, 50), wxSize(450, 340)); // and show it (the frames, unlike simple controls, are not shown when // created initially) - frame->Show(TRUE); + frame->Show(true); // success: wxApp::OnRun() will be called which will enter the main message - // loop and the application will run. If we returned FALSE here, the + // loop and the application will run. If we returned false here, the // application would exit immediately. - return TRUE; + return true; +#else + wxMessageBox( wxT("This sample has to be compiled with wxUSE_ACCESSIBILITY"), wxT("Building error"), wxOK); + return false; +#endif // wxUSE_ACCESSIBILITY } +#if wxUSE_ACCESSIBILITY + class FrameAccessible: public wxWindowAccessible { public: @@ -287,7 +307,7 @@ public: // Gets a variant representing the selected children // of this object. // Acceptable values: - // - a null variant (IsNull() returns TRUE) + // - a null variant (IsNull() returns true) // - a list variant (GetType() == wxT("list")) // - an integer representing the selected child element, // or 0 if this object is selected (GetType() == wxT("long")) @@ -302,14 +322,14 @@ public: // frame constructor MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style) - : wxFrame(NULL, -1, title, pos, size, style) + : wxFrame(NULL, wxID_ANY, title, pos, size, style) { m_textCtrl = NULL; SetAccessible(new FrameAccessible(this)); // set the frame icon - SetIcon(wxICON(mondrian)); + SetIcon(wxICON(sample)); #if wxUSE_MENUS // create a menu bar @@ -317,16 +337,16 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, // the "About" item should be in the help menu wxMenu *helpMenu = new wxMenu; - helpMenu->Append(AccessTest_About, _T("&About..."), _T("Show about dialog")); + helpMenu->Append(AccessTest_About, wxT("&About"), wxT("Show about dialog")); - menuFile->Append(AccessTest_Query, _T("Query"), _T("Query the window hierarchy")); + menuFile->Append(AccessTest_Query, wxT("Query"), wxT("Query the window hierarchy")); menuFile->AppendSeparator(); - menuFile->Append(AccessTest_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); + menuFile->Append(AccessTest_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program")); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); - menuBar->Append(menuFile, _T("&File")); - menuBar->Append(helpMenu, _T("&Help")); + menuBar->Append(menuFile, wxT("&File")); + menuBar->Append(helpMenu, wxT("&Help")); // ... and attach this menu bar to the frame SetMenuBar(menuBar); @@ -335,30 +355,30 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, #if 0 // wxUSE_STATUSBAR // create a status bar just for fun (by default with 1 pane only) CreateStatusBar(2); - SetStatusText(_T("Welcome to wxWindows!")); + SetStatusText(wxT("Welcome to wxWidgets!")); #endif // wxUSE_STATUSBAR - wxSplitterWindow* splitter = new wxSplitterWindow(this, -1); + wxSplitterWindow* splitter = new wxSplitterWindow(this, wxID_ANY); splitter->SetAccessible(new SplitterWindowAccessible(splitter)); - wxListBox* listBox = new wxListBox(splitter, -1); + wxListBox* listBox = new wxListBox(splitter, wxID_ANY); listBox->Append(wxT("Cabbages")); listBox->Append(wxT("Kings")); listBox->Append(wxT("Sealing wax")); listBox->Append(wxT("Strings")); listBox->CreateAccessible(); - listBox->SetHelpText(wxT("This is a sample wxWindows listbox, with a number of items in it.")); + listBox->SetHelpText(wxT("This is a sample wxWidgets listbox, with a number of items in it.")); - m_textCtrl = new wxTextCtrl(splitter, -1, wxT(""), wxDefaultPosition, + m_textCtrl = new wxTextCtrl(splitter, wxID_ANY, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); m_textCtrl->CreateAccessible(); - m_textCtrl->SetHelpText(wxT("This is a sample wxWindows multiline text control.")); + m_textCtrl->SetHelpText(wxT("This is a sample wxWidgets multiline text control.")); splitter->SplitHorizontally(listBox, m_textCtrl, 150); #if 0 - wxScrolledWindow* scrolledWindow = new wxScrolledWindow(this, -1); + wxScrolledWindow* scrolledWindow = new wxScrolledWindow(this, wxID_ANY); scrolledWindow->SetAccessible(new ScrolledWindowAccessible(scrolledWindow)); #endif } @@ -368,17 +388,17 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { - // TRUE is to force the frame to close - Close(TRUE); + // true is to force the frame to close + Close(true); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxString msg; - msg.Printf( _T("This is the About dialog of the AccessTest sample.\n") - _T("Welcome to %s"), wxVERSION_STRING); + msg.Printf( wxT("This is the About dialog of the AccessTest sample.\n") + wxT("Welcome to %s"), wxVERSION_STRING); - wxMessageBox(msg, _T("About AccessTest"), wxOK | wxICON_INFORMATION, this); + wxMessageBox(msg, wxT("About AccessTest"), wxOK | wxICON_INFORMATION, this); } void MyFrame::OnQuery(wxCommandEvent& WXUNUSED(event)) @@ -411,7 +431,7 @@ void MyFrame::OnQuery(wxCommandEvent& WXUNUSED(event)) accessibleFrame->Release(); return; } - + long obtained = 0; VARIANT *var = new VARIANT[childCount]; @@ -421,7 +441,7 @@ void MyFrame::OnQuery(wxCommandEvent& WXUNUSED(event)) VariantInit(& (var[i])); var[i].vt = VT_DISPATCH; } - + if (S_OK == AccessibleChildren(accessibleFrame, 0, childCount, var, &obtained)) { for (i = 0; i < childCount; i++) @@ -432,7 +452,7 @@ void MyFrame::OnQuery(wxCommandEvent& WXUNUSED(event)) if (var[i].pdispVal->QueryInterface(IID_IAccessible, (LPVOID*) & childAccessible) == S_OK) { var[i].pdispVal->Release(); - + wxString name, role; GetInfo(childAccessible, 0, name, role); wxString str; @@ -481,7 +501,7 @@ void MyFrame::LogObject(int indent, IAccessible* obj) wxString str; str.Printf(wxT("Name = %s; Role = %s"), name.c_str(), role.c_str()); - str.Pad(indent, wxT(' '), FALSE); + str.Pad(indent, wxT(' '), false); Log(str); } @@ -490,7 +510,7 @@ void MyFrame::LogObject(int indent, IAccessible* obj) { wxString str; str.Printf(wxT("There are %d children."), (int) childCount); - str.Pad(indent, wxT(' '), FALSE); + str.Pad(indent, wxT(' '), false); Log(str); Log(wxT("")); } @@ -502,7 +522,7 @@ void MyFrame::LogObject(int indent, IAccessible* obj) wxString str; str.Printf(wxT("%d) Name = %s; Role = %s"), i, name.c_str(), role.c_str()); - str.Pad(indent, wxT(' '), FALSE); + str.Pad(indent, wxT(' '), false); Log(str); VARIANT var; @@ -516,7 +536,7 @@ void MyFrame::LogObject(int indent, IAccessible* obj) { wxString str; str.Printf(wxT("This is a real object.")); - str.Pad(indent+4, wxT(' '), FALSE); + str.Pad(indent+4, wxT(' '), false); Log(str); if (pDisp->QueryInterface(IID_IAccessible, (LPVOID*) & childObject) == S_OK) @@ -530,7 +550,7 @@ void MyFrame::LogObject(int indent, IAccessible* obj) { wxString str; str.Printf(wxT("This is an element.")); - str.Pad(indent+4, wxT(' '), FALSE); + str.Pad(indent+4, wxT(' '), false); Log(str); } // Log(wxT("")); @@ -545,10 +565,10 @@ void MyFrame::GetInfo(IAccessible* accessible, int id, wxString& name, wxString& VariantInit(& var); var.vt = VT_I4; var.lVal = id; - + BSTR bStrName = 0; HRESULT hResult = accessible->get_accName(var, & bStrName); - + if (hResult == S_OK) { name = wxConvertStringFromOle(bStrName); @@ -558,23 +578,23 @@ void MyFrame::GetInfo(IAccessible* accessible, int id, wxString& name, wxString& { name = wxT("NO NAME"); } - + VARIANT varRole; VariantInit(& varRole); - + hResult = accessible->get_accRole(var, & varRole); - + if (hResult == S_OK && varRole.vt == VT_I4) { wxChar buf[256]; GetRoleText(varRole.lVal, buf, 256); - + role = buf; } else { role = wxT("NO ROLE"); - } + } } /* @@ -610,7 +630,7 @@ wxAccStatus SplitterWindowAccessible::GetName(int childId, wxString* name) // Can return either a child object, or an integer // representing the child element, starting from 1. -wxAccStatus SplitterWindowAccessible::HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject) +wxAccStatus SplitterWindowAccessible::HitTest(const wxPoint& pt, int* childId, wxAccessible** WXUNUSED(childObject)) { wxSplitterWindow* splitter = wxDynamicCast(GetWindow(), wxSplitterWindow); if (splitter) @@ -670,12 +690,7 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, { case wxNAVDIR_DOWN: { - if (splitter->GetSplitMode() == wxSPLIT_VERTICAL) - { - // Can't go down spatially if split vertically. - return wxACC_FALSE; - } - else + if (splitter->GetSplitMode() != wxSPLIT_VERTICAL) { if (fromId == 1) { @@ -689,11 +704,12 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, *toObject = splitter->GetWindow2()->GetAccessible(); return wxACC_OK; } - else - return wxACC_FALSE; } - + return wxACC_FALSE; + #if 0 + // below line is not executed due to earlier return break; + #endif } case wxNAVDIR_FIRSTCHILD: { @@ -701,22 +717,17 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, return wxACC_FALSE; } break; - + case wxNAVDIR_LASTCHILD: { if (fromId == 2) return wxACC_FALSE; } break; - + case wxNAVDIR_LEFT: { - if (splitter->GetSplitMode() == wxSPLIT_HORIZONTAL) - { - // Can't go left spatially if split horizontally. - return wxACC_FALSE; - } - else + if (splitter->GetSplitMode() != wxSPLIT_HORIZONTAL) { if (fromId == 3) { @@ -730,12 +741,14 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, *toObject = splitter->GetWindow1()->GetAccessible(); return wxACC_OK; } - else - return wxACC_FALSE; } + return wxACC_FALSE; } + #if 0 + // below line is not executed due to earlier return break; - + #endif + case wxNAVDIR_NEXT: { if (fromId == 1) @@ -750,11 +763,13 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, *toObject = splitter->GetWindow2()->GetAccessible(); return wxACC_OK; } - else return wxACC_FALSE; } + #if 0 + // below line is not executed due to earlier return break; - + #endif + case wxNAVDIR_PREVIOUS: { if (fromId == 3) @@ -769,19 +784,16 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, *toObject = splitter->GetWindow1()->GetAccessible(); return wxACC_OK; } - else return wxACC_FALSE; } + #if 0 + // below line is not executed due to earlier return break; - + #endif + case wxNAVDIR_RIGHT: { - if (splitter->GetSplitMode() == wxSPLIT_HORIZONTAL) - { - // Can't go right spatially if split horizontally. - return wxACC_FALSE; - } - else + if (splitter->GetSplitMode() != wxSPLIT_HORIZONTAL) { if (fromId == 1) { @@ -795,20 +807,18 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, *toObject = splitter->GetWindow2()->GetAccessible(); return wxACC_OK; } - else - return wxACC_FALSE; } + // Can't go right spatially if split horizontally. + return wxACC_FALSE; } + #if 0 + // below line is not executed due to earlier return break; - + #endif + case wxNAVDIR_UP: { - if (splitter->GetSplitMode() == wxSPLIT_VERTICAL) - { - // Can't go up spatially if split vertically. - return wxACC_FALSE; - } - else + if (splitter->GetSplitMode() != wxSPLIT_VERTICAL) { if (fromId == 3) { @@ -821,14 +831,17 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId, *toObject = splitter->GetWindow1()->GetAccessible(); return wxACC_OK; } - else - return wxACC_FALSE; } + // Can't go up spatially if split vertically. + return wxACC_FALSE; + #if 0 + // below line is not executed due to earlier return break; + #endif } } - + } // Let the framework handle the other cases. return wxACC_NOT_IMPLEMENTED; @@ -930,7 +943,7 @@ wxAccStatus SplitterWindowAccessible::GetChild(int childId, wxAccessible** child } // Gets the parent, or NULL. -wxAccStatus SplitterWindowAccessible::GetParent(wxAccessible** parent) +wxAccStatus SplitterWindowAccessible::GetParent(wxAccessible** WXUNUSED(parent)) { return wxACC_NOT_IMPLEMENTED; } @@ -939,7 +952,7 @@ wxAccStatus SplitterWindowAccessible::GetParent(wxAccessible** parent) // or > 0 (the action for a child). // Return wxACC_NOT_SUPPORTED if there is no default action for this // window (e.g. an edit control). -wxAccStatus SplitterWindowAccessible::DoDefaultAction(int childId) +wxAccStatus SplitterWindowAccessible::DoDefaultAction(int WXUNUSED(childId)) { return wxACC_NOT_IMPLEMENTED; } @@ -950,7 +963,7 @@ wxAccStatus SplitterWindowAccessible::DoDefaultAction(int childId) // The retrieved string describes the action that is performed on an object, // not what the object does as a result. For example, a toolbar button that prints // a document has a default action of "Press" rather than "Prints the current document." -wxAccStatus SplitterWindowAccessible::GetDefaultAction(int childId, wxString* actionName) +wxAccStatus SplitterWindowAccessible::GetDefaultAction(int childId, wxString* WXUNUSED(actionName)) { wxSplitterWindow* splitter = wxDynamicCast(GetWindow(), wxSplitterWindow); if (splitter && splitter->IsSplit() && childId == 2) @@ -1002,7 +1015,7 @@ wxAccStatus SplitterWindowAccessible::GetHelpText(int childId, wxString* helpTex // Returns the keyboard shortcut for this object or child. // Return e.g. ALT+K -wxAccStatus SplitterWindowAccessible::GetKeyboardShortcut(int childId, wxString* shortcut) +wxAccStatus SplitterWindowAccessible::GetKeyboardShortcut(int childId, wxString* WXUNUSED(shortcut)) { wxSplitterWindow* splitter = wxDynamicCast(GetWindow(), wxSplitterWindow); if (splitter && splitter->IsSplit() && childId == 2) @@ -1066,7 +1079,7 @@ wxAccStatus SplitterWindowAccessible::GetValue(int childId, wxString* strValue) } // Selects the object or child. -wxAccStatus SplitterWindowAccessible::Select(int childId, wxAccSelectionFlags selectFlags) +wxAccStatus SplitterWindowAccessible::Select(int childId, wxAccSelectionFlags WXUNUSED(selectFlags)) { wxSplitterWindow* splitter = wxDynamicCast(GetWindow(), wxSplitterWindow); if (splitter && splitter->IsSplit() && childId == 2) @@ -1082,7 +1095,7 @@ wxAccStatus SplitterWindowAccessible::Select(int childId, wxAccSelectionFlags se // If childId is 0 and child is NULL, no object in // this subhierarchy has the focus. // If this object has the focus, child should be 'this'. -wxAccStatus SplitterWindowAccessible::GetFocus(int* childId, wxAccessible** child) +wxAccStatus SplitterWindowAccessible::GetFocus(int* WXUNUSED(childId), wxAccessible** WXUNUSED(child)) { return wxACC_NOT_IMPLEMENTED; } @@ -1090,13 +1103,14 @@ wxAccStatus SplitterWindowAccessible::GetFocus(int* childId, wxAccessible** chil // Gets a variant representing the selected children // of this object. // Acceptable values: -// - a null variant (IsNull() returns TRUE) +// - a null variant (IsNull() returns true) // - a list variant (GetType() == wxT("list")) // - an integer representing the selected child element, // or 0 if this object is selected (GetType() == wxT("long")) // - a "void*" pointer to a wxAccessible child object -wxAccStatus SplitterWindowAccessible::GetSelections(wxVariant* selections) +wxAccStatus SplitterWindowAccessible::GetSelections(wxVariant* WXUNUSED(selections)) { return wxACC_NOT_IMPLEMENTED; } +#endif // wxUSE_ACCESSIBILITY