+ switch (navDir)
+ {
+ case wxNAVDIR_FIRSTCHILD:
+ {
+ if (GetWindow()->GetChildren().GetCount() == 0)
+ return wxACC_FALSE;
+ wxWindow* childWindow = (wxWindow*) GetWindow()->GetChildren().GetFirst()->GetData();
+ *toObject = childWindow->GetOrCreateAccessible();
+
+ return wxACC_OK;
+ }
+ case wxNAVDIR_LASTCHILD:
+ {
+ if (GetWindow()->GetChildren().GetCount() == 0)
+ return wxACC_FALSE;
+ wxWindow* childWindow = (wxWindow*) GetWindow()->GetChildren().GetLast()->GetData();
+ *toObject = childWindow->GetOrCreateAccessible();
+
+ return wxACC_OK;
+ }
+ case wxNAVDIR_RIGHT:
+ case wxNAVDIR_DOWN:
+ case wxNAVDIR_NEXT:
+ {
+ wxWindowList::compatibility_iterator node =
+ wxWindowList::compatibility_iterator();
+ if (fromId == 0)
+ {
+ // Can't navigate to sibling of this window
+ // if we're a top-level window.
+ if (!GetWindow()->GetParent())
+ return wxACC_NOT_IMPLEMENTED;
+
+ node = GetWindow()->GetParent()->GetChildren().Find(GetWindow());
+ }
+ else
+ {
+ if (fromId <= (int) GetWindow()->GetChildren().GetCount())
+ node = GetWindow()->GetChildren().Item(fromId-1);
+ }
+
+ if (node && node->GetNext())
+ {
+ wxWindow* nextWindow = node->GetNext()->GetData();
+ *toObject = nextWindow->GetOrCreateAccessible();
+ return wxACC_OK;
+ }
+ else
+ return wxACC_FALSE;
+ }
+ case wxNAVDIR_LEFT:
+ case wxNAVDIR_UP:
+ case wxNAVDIR_PREVIOUS:
+ {
+ wxWindowList::compatibility_iterator node =
+ wxWindowList::compatibility_iterator();
+ if (fromId == 0)
+ {
+ // Can't navigate to sibling of this window
+ // if we're a top-level window.
+ if (!GetWindow()->GetParent())
+ return wxACC_NOT_IMPLEMENTED;
+
+ node = GetWindow()->GetParent()->GetChildren().Find(GetWindow());
+ }
+ else
+ {
+ if (fromId <= (int) GetWindow()->GetChildren().GetCount())
+ node = GetWindow()->GetChildren().Item(fromId-1);
+ }
+
+ if (node && node->GetPrevious())
+ {
+ wxWindow* previousWindow = node->GetPrevious()->GetData();
+ *toObject = previousWindow->GetOrCreateAccessible();
+ return wxACC_OK;
+ }
+ else
+ return wxACC_FALSE;
+ }
+ }
+