]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/access/accesstest.cpp
Forward port of r60190 (wxMSW Cairo support) to trunk.
[wxWidgets.git] / samples / access / accesstest.cpp
index c07fa9f9416a66169eed70ea063561a9aab6b087..47653bdabdca22b9368346fc3b091ecce280cf40 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        accesstest.cpp
-// Purpose:     wxWindows accessibility sample
+// Purpose:     wxWidgets accessibility sample
 // Author:      Julian Smart
 // Modified by:
 // Created:     2002-02-12
 #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 <ole2.h>
-#include <oleauto.h>
-#include <oleacc.h>
-#include "wx/msw/ole/oleutils.h"
-#include "wx/msw/winundef.h"
-
-#ifndef OBJID_CLIENT
-#define OBJID_CLIENT 0xFFFFFFFC
-#endif
+    #include "windows.h"
+    #include <ole2.h>
+    #include <oleauto.h>
+
+    #if wxUSE_ACCESSIBILITY
+        #include <oleacc.h>
+    #endif // wxUSE_ACCESSIBILITY
+
+    #include "wx/msw/ole/oleutils.h"
+    #include "wx/msw/winundef.h"
 
+    #ifndef OBJID_CLIENT
+        #define OBJID_CLIENT 0xFFFFFFFC
+    #endif
 #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,7 +322,7 @@ 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;
 
@@ -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))
@@ -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(""));
@@ -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:
             {
@@ -711,12 +727,7 @@ wxAccStatus SplitterWindowAccessible::Navigate(wxNavDir navDir, int fromId,
             
         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,11 +741,13 @@ 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:
             {
@@ -750,10 +763,12 @@ 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:
             {
@@ -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,11 +831,14 @@ 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
             }
         }
         
@@ -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