зеркало из https://github.com/mozilla/pjs.git
bug 90182 fixing accessible support for html selects
r=aaronl@netscape.com sr=waterson@netscape.com
This commit is contained in:
Родитель
9033daa50b
Коммит
59fb2feee1
|
@ -34,7 +34,8 @@ interface nsIWeakReference;
|
||||||
interface nsIAccessibilityService : nsISupports
|
interface nsIAccessibilityService : nsISupports
|
||||||
{
|
{
|
||||||
nsIAccessible createRootAccessible(in nsISupports aPresContext, in nsISupports aFrame);
|
nsIAccessible createRootAccessible(in nsISupports aPresContext, in nsISupports aFrame);
|
||||||
nsIAccessible createHTMLSelectAccessible(in nsIDOMNode aNode, in nsISupports aPresShell);
|
nsIAccessible createHTMLComboboxAccessible(in nsIDOMNode aNode, in nsISupports aPresShell);
|
||||||
|
nsIAccessible createHTMLListboxAccessible(in nsIDOMNode aNode, in nsISupports aPresShell);
|
||||||
nsIAccessible createHTMLSelectOptionAccessible(in nsIDOMNode aNode, in nsIAccessible aAccParent, in nsISupports aPresShell);
|
nsIAccessible createHTMLSelectOptionAccessible(in nsIDOMNode aNode, in nsIAccessible aAccParent, in nsISupports aPresShell);
|
||||||
nsIAccessible createHTMLCheckboxAccessible(in nsISupports aFrame);
|
nsIAccessible createHTMLCheckboxAccessible(in nsISupports aFrame);
|
||||||
nsIAccessible createHTMLRadioButtonAccessible(in nsISupports aFrame);
|
nsIAccessible createHTMLRadioButtonAccessible(in nsISupports aFrame);
|
||||||
|
|
|
@ -41,7 +41,9 @@ CPPSRCS = \
|
||||||
nsHTMLImageAccessible.cpp \
|
nsHTMLImageAccessible.cpp \
|
||||||
nsHTMLAreaAccessible.cpp \
|
nsHTMLAreaAccessible.cpp \
|
||||||
nsHTMLLinkAccessible.cpp \
|
nsHTMLLinkAccessible.cpp \
|
||||||
nsHTMLSelectAccessible.cpp \
|
nsHTMLSelectListAccessible.cpp \
|
||||||
|
nsHTMLComboboxAccessible.cpp \
|
||||||
|
nsHTMLListboxAccessible.cpp \
|
||||||
nsGenericAccessible.cpp \
|
nsGenericAccessible.cpp \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,9 @@
|
||||||
#include "nsHTMLImageAccessible.h"
|
#include "nsHTMLImageAccessible.h"
|
||||||
#include "nsHTMLAreaAccessible.h"
|
#include "nsHTMLAreaAccessible.h"
|
||||||
#include "nsHTMLLinkAccessible.h"
|
#include "nsHTMLLinkAccessible.h"
|
||||||
#include "nsHTMLSelectAccessible.h"
|
#include "nsHTMLSelectListAccessible.h"
|
||||||
|
#include "nsHTMLComboboxAccessible.h"
|
||||||
|
#include "nsHTMLListboxAccessible.h"
|
||||||
#include "nsIDOMHTMLAreaElement.h"
|
#include "nsIDOMHTMLAreaElement.h"
|
||||||
#include "nsHTMLFormControlAccessible.h"
|
#include "nsHTMLFormControlAccessible.h"
|
||||||
#include "nsILink.h"
|
#include "nsILink.h"
|
||||||
|
@ -73,66 +75,83 @@ NS_IMPL_THREADSAFE_ISUPPORTS1(nsAccessibilityService, nsIAccessibilityService);
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateRootAccessible(nsISupports* aPresContext, nsISupports* aFrame, nsIAccessible **_retval)
|
nsAccessibilityService::CreateRootAccessible(nsISupports* aPresContext, nsISupports* aFrame, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsIFrame* f = NS_STATIC_CAST(nsIFrame*, aFrame);
|
// XXX - jgaunt - looks like we aren't using this
|
||||||
|
//nsIFrame* f = NS_STATIC_CAST(nsIFrame*, aFrame);
|
||||||
|
|
||||||
nsCOMPtr<nsIPresContext> c(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
NS_ASSERTION(c,"Error non prescontext passed to accessible factory!!!");
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> s;
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
c->GetShell(getter_AddRefs(s));
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
NS_ASSERTION(s,"Error not presshell!!");
|
NS_ASSERTION(presShell,"Error not presshell!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(s);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
*_retval = new nsRootAccessible(wr);
|
*_retval = new nsRootAccessible(weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLSelectAccessible(nsIDOMNode* node, nsISupports* aPresContext, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLComboboxAccessible(nsIDOMNode* aDOMNode, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPresContext> c(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
NS_ASSERTION(c,"Error non prescontext passed to accessible factory!!!");
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> s;
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
c->GetShell(getter_AddRefs(s));
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(s);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
*_retval = new nsHTMLSelectAccessible(node, wr);
|
*_retval = new nsHTMLComboboxAccessible(aDOMNode, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLSelectOptionAccessible(nsIDOMNode* node, nsIAccessible *aAccParent, nsISupports* aPresContext, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLListboxAccessible(nsIDOMNode* aDOMNode, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPresContext> c(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
NS_ASSERTION(c,"Error non prescontext passed to accessible factory!!!");
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> s;
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
c->GetShell(getter_AddRefs(s));
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(s);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
*_retval = new nsHTMLSelectOptionAccessible(aAccParent, node, wr);
|
*_retval = new nsHTMLListboxAccessible(aDOMNode, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsAccessibilityService::CreateHTMLSelectOptionAccessible(nsIDOMNode* aDOMNode, nsIAccessible *aAccParent, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
|
*_retval = new nsHTMLSelectOptionAccessible(aAccParent, aDOMNode, weakShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,18 +160,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLCheckboxAccessible(nsISupports *
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLCheckboxAccessible(node, shell);
|
*_retval = new nsHTMLCheckboxAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMRadioButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMRadioButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -160,18 +178,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLRadioButtonAccessible(nsISupport
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLRadioButtonAccessible(node, shell);
|
*_retval = new nsHTMLRadioButtonAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -179,18 +196,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLButtonAccessible(nsISupports *aF
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLButtonAccessible(node, shell);
|
*_retval = new nsHTMLButtonAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTML4ButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTML4ButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -198,18 +214,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTML4ButtonAccessible(nsISupports *a
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTML4ButtonAccessible(node, shell);
|
*_retval = new nsHTML4ButtonAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLTextAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLTextAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -217,18 +232,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTextAccessible(nsISupports *aFra
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTextAccessible(node, shell);
|
*_retval = new nsHTMLTextAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -237,18 +251,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTableAccessible(nsISupports *aFr
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTableAccessible(node, shell);
|
*_retval = new nsHTMLTableAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLTableCellAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLTableCellAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -256,18 +269,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTableCellAccessible(nsISupports
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTableCellAccessible(node, shell);
|
*_retval = new nsHTMLTableCellAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLImageAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLImageAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -275,8 +287,8 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLImageAccessible(nsISupports *aFr
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
nsIImageFrame* imageFrame = nsnull;
|
nsIImageFrame* imageFrame = nsnull;
|
||||||
|
@ -287,13 +299,12 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLImageAccessible(nsISupports *aFr
|
||||||
if (!imageFrame)
|
if (!imageFrame)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
*_retval = new nsHTMLImageAccessible(node, imageFrame, shell);
|
*_retval = new nsHTMLImageAccessible(node, imageFrame, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLAreaAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLAreaAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -302,13 +313,11 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLAreaAccessible(nsIWeakReference
|
||||||
{
|
{
|
||||||
*_retval = new nsHTMLAreaAccessible(aDOMNode, aAccParent, aShell);
|
*_retval = new nsHTMLAreaAccessible(aDOMNode, aAccParent, aShell);
|
||||||
|
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
|
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLTextFieldAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLTextFieldAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -316,35 +325,33 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTextFieldAccessible(nsISupports
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTextFieldAccessible(node, shell);
|
*_retval = new nsHTMLTextFieldAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsAccessibilityService::GetInfo(nsISupports* aFrame, nsIFrame** aRealFrame, nsIWeakReference** aShell, nsIDOMNode** aNode)
|
NS_IMETHODIMP nsAccessibilityService::GetInfo(nsISupports* aFrame, nsIFrame** aRealFrame, nsIWeakReference** aShell, nsIDOMNode** aNode)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aFrame,"Error -- 1st argument (aFrame) is null!!");
|
||||||
*aRealFrame = NS_STATIC_CAST(nsIFrame*, aFrame);
|
*aRealFrame = NS_STATIC_CAST(nsIFrame*, aFrame);
|
||||||
nsCOMPtr<nsIContent> content;
|
nsCOMPtr<nsIContent> content;
|
||||||
(*aRealFrame)->GetContent(getter_AddRefs(content));
|
(*aRealFrame)->GetContent(getter_AddRefs(content));
|
||||||
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(content));
|
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(content));
|
||||||
*aNode = node;
|
*aNode = node;
|
||||||
NS_ADDREF(*aNode);
|
NS_IF_ADDREF(*aNode);
|
||||||
|
|
||||||
nsCOMPtr<nsIDocument> document;
|
nsCOMPtr<nsIDocument> document;
|
||||||
content->GetDocument(*getter_AddRefs(document));
|
content->GetDocument(*getter_AddRefs(document));
|
||||||
if (!document)
|
if (!document)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
if (!document)
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRInt32 shells = document->GetNumberOfShells();
|
PRInt32 shells = document->GetNumberOfShells();
|
||||||
|
@ -353,72 +360,68 @@ NS_IMETHODIMP nsAccessibilityService::GetInfo(nsISupports* aFrame, nsIFrame** aR
|
||||||
|
|
||||||
// do_GetWR only works into a |nsCOMPtr| :-(
|
// do_GetWR only works into a |nsCOMPtr| :-(
|
||||||
nsCOMPtr<nsIPresShell> tempShell;
|
nsCOMPtr<nsIPresShell> tempShell;
|
||||||
nsCOMPtr<nsIWeakReference> weak;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
document->GetShellAt(0, getter_AddRefs(tempShell));
|
document->GetShellAt(0, getter_AddRefs(tempShell));
|
||||||
weak = do_GetWeakReference(tempShell);
|
weakShell = do_GetWeakReference(tempShell);
|
||||||
NS_IF_ADDREF(*aShell = weak);
|
NS_IF_ADDREF(*aShell = weakShell);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateAccessible(nsIDOMNode* node, nsISupports* document, nsIAccessible **_retval)
|
nsAccessibilityService::CreateAccessible(nsIDOMNode* aDOMNode, nsISupports* aDocument, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIContent> content (do_QueryInterface(node));
|
nsCOMPtr<nsIDocument> document (do_QueryInterface(aDocument));
|
||||||
|
if (!document)
|
||||||
nsCOMPtr<nsIDocument> d (do_QueryInterface(document));
|
|
||||||
if (!d)
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRInt32 shells = d->GetNumberOfShells();
|
PRInt32 shells = document->GetNumberOfShells();
|
||||||
NS_ASSERTION(shells > 0,"Error no shells!");
|
NS_ASSERTION(shells > 0,"Error no shells!");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> tempShell;
|
nsCOMPtr<nsIPresShell> tempShell;
|
||||||
d->GetShellAt(0, getter_AddRefs(tempShell));
|
document->GetShellAt(0, getter_AddRefs(tempShell));
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(tempShell);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(tempShell);
|
||||||
|
|
||||||
*_retval = new nsAccessible(node, wr);
|
*_retval = new nsAccessible(aDOMNode, weakShell);
|
||||||
if ( *_retval ) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLBlockAccessible(nsIDOMNode* node, nsISupports* document, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLBlockAccessible(nsIDOMNode* aDOMNode, nsISupports* aDocument, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIContent> content (do_QueryInterface(node));
|
nsCOMPtr<nsIDocument> document (do_QueryInterface(aDocument));
|
||||||
|
if (!document)
|
||||||
nsCOMPtr<nsIDocument> d (do_QueryInterface(document));
|
|
||||||
if (!d)
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRInt32 shells = d->GetNumberOfShells();
|
PRInt32 shells = document->GetNumberOfShells();
|
||||||
NS_ASSERTION(shells > 0,"Error no shells!");
|
NS_ASSERTION(shells > 0,"Error no shells!");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> tempShell;
|
nsCOMPtr<nsIPresShell> tempShell;
|
||||||
d->GetShellAt(0, getter_AddRefs(tempShell));
|
document->GetShellAt(0, getter_AddRefs(tempShell));
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(tempShell);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(tempShell);
|
||||||
|
|
||||||
*_retval = new nsAccessible(node, wr);
|
*_retval = new nsAccessible(aDOMNode, weakShell);
|
||||||
if ( *_retval ) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLIFrameAccessible(nsIDOMNode* node, nsISupports* aPresContext, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLIFrameAccessible(nsIDOMNode* aDOMNode, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
*_retval = nsnull;
|
*_retval = nsnull;
|
||||||
|
|
||||||
nsCOMPtr<nsIContent> content(do_QueryInterface(node));
|
nsCOMPtr<nsIContent> content(do_QueryInterface(aDOMNode));
|
||||||
NS_ASSERTION(content,"Error non nsIContent passed to accessible factory!!!");
|
NS_ASSERTION(content,"Error non nsIContent passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
|
@ -447,9 +450,9 @@ nsAccessibilityService::CreateHTMLIFrameAccessible(nsIDOMNode* node, nsISupports
|
||||||
nsCOMPtr<nsIDocument> innerDoc;
|
nsCOMPtr<nsIDocument> innerDoc;
|
||||||
ps->GetDocument(getter_AddRefs(innerDoc));
|
ps->GetDocument(getter_AddRefs(innerDoc));
|
||||||
if (innerDoc) {
|
if (innerDoc) {
|
||||||
nsCOMPtr<nsIAccessible> root = new nsHTMLIFrameRootAccessible(node, wr);
|
nsCOMPtr<nsIAccessible> root = new nsHTMLIFrameRootAccessible(aDOMNode, wr);
|
||||||
if ( root ) {
|
if ( root ) {
|
||||||
nsHTMLIFrameAccessible* frameAcc = new nsHTMLIFrameAccessible(node, root, weakRef, innerDoc);
|
nsHTMLIFrameAccessible* frameAcc = new nsHTMLIFrameAccessible(aDOMNode, root, weakRef, innerDoc);
|
||||||
if ( frameAcc != nsnull ) {
|
if ( frameAcc != nsnull ) {
|
||||||
*_retval = NS_STATIC_CAST(nsIAccessible*, frameAcc);
|
*_retval = NS_STATIC_CAST(nsIAccessible*, frameAcc);
|
||||||
if ( *_retval ) {
|
if ( *_retval ) {
|
||||||
|
@ -615,8 +618,6 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessibleFor(nsIWeakReference *aPresSh
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -627,11 +628,11 @@ NS_NewAccessibilityService(nsIAccessibilityService** aResult)
|
||||||
if (! aResult)
|
if (! aResult)
|
||||||
return NS_ERROR_NULL_POINTER;
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
nsAccessibilityService* a = new nsAccessibilityService();
|
nsAccessibilityService* accService = new nsAccessibilityService();
|
||||||
if (a == nsnull)
|
if (!accService)
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
NS_ADDREF(a);
|
NS_ADDREF(accService);
|
||||||
*aResult = a;
|
*aResult = accService;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ CPP_OBJS=\
|
||||||
.\$(OBJDIR)\nsRootAccessible.obj \
|
.\$(OBJDIR)\nsRootAccessible.obj \
|
||||||
.\$(OBJDIR)\nsHTMLIFrameRootAccessible.obj \
|
.\$(OBJDIR)\nsHTMLIFrameRootAccessible.obj \
|
||||||
.\$(OBJDIR)\nsAccessibilityService.obj \
|
.\$(OBJDIR)\nsAccessibilityService.obj \
|
||||||
.\$(OBJDIR)\nsHTMLSelectAccessible.obj \
|
.\$(OBJDIR)\nsHTMLSelectListAccessible.obj \
|
||||||
.\$(OBJDIR)\nsGenericAccessible.obj \
|
.\$(OBJDIR)\nsGenericAccessible.obj \
|
||||||
.\$(OBJDIR)\nsHTMLFormControlAccessible.obj \
|
.\$(OBJDIR)\nsHTMLFormControlAccessible.obj \
|
||||||
.\$(OBJDIR)\nsHTMLTextAccessible.obj \
|
.\$(OBJDIR)\nsHTMLTextAccessible.obj \
|
||||||
|
@ -36,6 +36,8 @@ CPP_OBJS=\
|
||||||
.\$(OBJDIR)\nsHTMLAreaAccessible.obj \
|
.\$(OBJDIR)\nsHTMLAreaAccessible.obj \
|
||||||
.\$(OBJDIR)\nsHTMLTableAccessible.obj \
|
.\$(OBJDIR)\nsHTMLTableAccessible.obj \
|
||||||
.\$(OBJDIR)\nsHTMLLinkAccessible.obj \
|
.\$(OBJDIR)\nsHTMLLinkAccessible.obj \
|
||||||
|
.\$(OBJDIR)\nsHTMLComboboxAccessible.obj \
|
||||||
|
.\$(OBJDIR)\nsHTMLListboxAccessible.obj \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXPORTS = \
|
EXPORTS = \
|
||||||
|
|
|
@ -40,7 +40,9 @@
|
||||||
#include "nsHTMLImageAccessible.h"
|
#include "nsHTMLImageAccessible.h"
|
||||||
#include "nsHTMLAreaAccessible.h"
|
#include "nsHTMLAreaAccessible.h"
|
||||||
#include "nsHTMLLinkAccessible.h"
|
#include "nsHTMLLinkAccessible.h"
|
||||||
#include "nsHTMLSelectAccessible.h"
|
#include "nsHTMLSelectListAccessible.h"
|
||||||
|
#include "nsHTMLComboboxAccessible.h"
|
||||||
|
#include "nsHTMLListboxAccessible.h"
|
||||||
#include "nsIDOMHTMLAreaElement.h"
|
#include "nsIDOMHTMLAreaElement.h"
|
||||||
#include "nsHTMLFormControlAccessible.h"
|
#include "nsHTMLFormControlAccessible.h"
|
||||||
#include "nsILink.h"
|
#include "nsILink.h"
|
||||||
|
@ -73,66 +75,83 @@ NS_IMPL_THREADSAFE_ISUPPORTS1(nsAccessibilityService, nsIAccessibilityService);
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateRootAccessible(nsISupports* aPresContext, nsISupports* aFrame, nsIAccessible **_retval)
|
nsAccessibilityService::CreateRootAccessible(nsISupports* aPresContext, nsISupports* aFrame, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsIFrame* f = NS_STATIC_CAST(nsIFrame*, aFrame);
|
// XXX - jgaunt - looks like we aren't using this
|
||||||
|
//nsIFrame* f = NS_STATIC_CAST(nsIFrame*, aFrame);
|
||||||
|
|
||||||
nsCOMPtr<nsIPresContext> c(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
NS_ASSERTION(c,"Error non prescontext passed to accessible factory!!!");
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> s;
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
c->GetShell(getter_AddRefs(s));
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
NS_ASSERTION(s,"Error not presshell!!");
|
NS_ASSERTION(presShell,"Error not presshell!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(s);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
*_retval = new nsRootAccessible(wr);
|
*_retval = new nsRootAccessible(weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLSelectAccessible(nsIDOMNode* node, nsISupports* aPresContext, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLComboboxAccessible(nsIDOMNode* aDOMNode, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPresContext> c(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
NS_ASSERTION(c,"Error non prescontext passed to accessible factory!!!");
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> s;
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
c->GetShell(getter_AddRefs(s));
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(s);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
*_retval = new nsHTMLSelectAccessible(node, wr);
|
*_retval = new nsHTMLComboboxAccessible(aDOMNode, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLSelectOptionAccessible(nsIDOMNode* node, nsIAccessible *aAccParent, nsISupports* aPresContext, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLListboxAccessible(nsIDOMNode* aDOMNode, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPresContext> c(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
NS_ASSERTION(c,"Error non prescontext passed to accessible factory!!!");
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> s;
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
c->GetShell(getter_AddRefs(s));
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(s);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
*_retval = new nsHTMLSelectOptionAccessible(aAccParent, node, wr);
|
*_retval = new nsHTMLListboxAccessible(aDOMNode, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsAccessibilityService::CreateHTMLSelectOptionAccessible(nsIDOMNode* aDOMNode, nsIAccessible *aAccParent, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
|
NS_ASSERTION(presContext,"Error non prescontext passed to accessible factory!!!");
|
||||||
|
|
||||||
|
nsCOMPtr<nsIPresShell> presShell;
|
||||||
|
presContext->GetShell(getter_AddRefs(presShell));
|
||||||
|
|
||||||
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(presShell);
|
||||||
|
|
||||||
|
*_retval = new nsHTMLSelectOptionAccessible(aAccParent, aDOMNode, weakShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,18 +160,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLCheckboxAccessible(nsISupports *
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLCheckboxAccessible(node, shell);
|
*_retval = new nsHTMLCheckboxAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMRadioButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMRadioButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -160,18 +178,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLRadioButtonAccessible(nsISupport
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLRadioButtonAccessible(node, shell);
|
*_retval = new nsHTMLRadioButtonAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -179,18 +196,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLButtonAccessible(nsISupports *aF
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLButtonAccessible(node, shell);
|
*_retval = new nsHTMLButtonAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTML4ButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTML4ButtonAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -198,18 +214,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTML4ButtonAccessible(nsISupports *a
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTML4ButtonAccessible(node, shell);
|
*_retval = new nsHTML4ButtonAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLTextAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLTextAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -217,18 +232,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTextAccessible(nsISupports *aFra
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTextAccessible(node, shell);
|
*_retval = new nsHTMLTextAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -237,18 +251,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTableAccessible(nsISupports *aFr
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTableAccessible(node, shell);
|
*_retval = new nsHTMLTableAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLTableCellAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLTableCellAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -256,18 +269,17 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTableCellAccessible(nsISupports
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTableCellAccessible(node, shell);
|
*_retval = new nsHTMLTableCellAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLImageAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLImageAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -275,8 +287,8 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLImageAccessible(nsISupports *aFr
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
nsIImageFrame* imageFrame = nsnull;
|
nsIImageFrame* imageFrame = nsnull;
|
||||||
|
@ -287,13 +299,12 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLImageAccessible(nsISupports *aFr
|
||||||
if (!imageFrame)
|
if (!imageFrame)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
*_retval = new nsHTMLImageAccessible(node, imageFrame, shell);
|
*_retval = new nsHTMLImageAccessible(node, imageFrame, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLAreaAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLAreaAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -302,13 +313,11 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLAreaAccessible(nsIWeakReference
|
||||||
{
|
{
|
||||||
*_retval = new nsHTMLAreaAccessible(aDOMNode, aAccParent, aShell);
|
*_retval = new nsHTMLAreaAccessible(aDOMNode, aAccParent, aShell);
|
||||||
|
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
|
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nsIAccessible createHTMLTextFieldAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
/* nsIAccessible createHTMLTextFieldAccessible (in nsISupports aPresShell, in nsISupports aFrame); */
|
||||||
|
@ -316,35 +325,33 @@ NS_IMETHODIMP nsAccessibilityService::CreateHTMLTextFieldAccessible(nsISupports
|
||||||
{
|
{
|
||||||
nsIFrame* frame;
|
nsIFrame* frame;
|
||||||
nsCOMPtr<nsIDOMNode> node;
|
nsCOMPtr<nsIDOMNode> node;
|
||||||
nsCOMPtr<nsIWeakReference> shell;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(shell), getter_AddRefs(node));
|
nsresult rv = GetInfo(aFrame, &frame, getter_AddRefs(weakShell), getter_AddRefs(node));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
*_retval = new nsHTMLTextFieldAccessible(node, shell);
|
*_retval = new nsHTMLTextFieldAccessible(node, weakShell);
|
||||||
if (*_retval) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP nsAccessibilityService::GetInfo(nsISupports* aFrame, nsIFrame** aRealFrame, nsIWeakReference** aShell, nsIDOMNode** aNode)
|
NS_IMETHODIMP nsAccessibilityService::GetInfo(nsISupports* aFrame, nsIFrame** aRealFrame, nsIWeakReference** aShell, nsIDOMNode** aNode)
|
||||||
{
|
{
|
||||||
|
NS_ASSERTION(aFrame,"Error -- 1st argument (aFrame) is null!!");
|
||||||
*aRealFrame = NS_STATIC_CAST(nsIFrame*, aFrame);
|
*aRealFrame = NS_STATIC_CAST(nsIFrame*, aFrame);
|
||||||
nsCOMPtr<nsIContent> content;
|
nsCOMPtr<nsIContent> content;
|
||||||
(*aRealFrame)->GetContent(getter_AddRefs(content));
|
(*aRealFrame)->GetContent(getter_AddRefs(content));
|
||||||
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(content));
|
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(content));
|
||||||
*aNode = node;
|
*aNode = node;
|
||||||
NS_ADDREF(*aNode);
|
NS_IF_ADDREF(*aNode);
|
||||||
|
|
||||||
nsCOMPtr<nsIDocument> document;
|
nsCOMPtr<nsIDocument> document;
|
||||||
content->GetDocument(*getter_AddRefs(document));
|
content->GetDocument(*getter_AddRefs(document));
|
||||||
if (!document)
|
if (!document)
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
if (!document)
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRInt32 shells = document->GetNumberOfShells();
|
PRInt32 shells = document->GetNumberOfShells();
|
||||||
|
@ -353,72 +360,68 @@ NS_IMETHODIMP nsAccessibilityService::GetInfo(nsISupports* aFrame, nsIFrame** aR
|
||||||
|
|
||||||
// do_GetWR only works into a |nsCOMPtr| :-(
|
// do_GetWR only works into a |nsCOMPtr| :-(
|
||||||
nsCOMPtr<nsIPresShell> tempShell;
|
nsCOMPtr<nsIPresShell> tempShell;
|
||||||
nsCOMPtr<nsIWeakReference> weak;
|
nsCOMPtr<nsIWeakReference> weakShell;
|
||||||
document->GetShellAt(0, getter_AddRefs(tempShell));
|
document->GetShellAt(0, getter_AddRefs(tempShell));
|
||||||
weak = do_GetWeakReference(tempShell);
|
weakShell = do_GetWeakReference(tempShell);
|
||||||
NS_IF_ADDREF(*aShell = weak);
|
NS_IF_ADDREF(*aShell = weakShell);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateAccessible(nsIDOMNode* node, nsISupports* document, nsIAccessible **_retval)
|
nsAccessibilityService::CreateAccessible(nsIDOMNode* aDOMNode, nsISupports* aDocument, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIContent> content (do_QueryInterface(node));
|
nsCOMPtr<nsIDocument> document (do_QueryInterface(aDocument));
|
||||||
|
if (!document)
|
||||||
nsCOMPtr<nsIDocument> d (do_QueryInterface(document));
|
|
||||||
if (!d)
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRInt32 shells = d->GetNumberOfShells();
|
PRInt32 shells = document->GetNumberOfShells();
|
||||||
NS_ASSERTION(shells > 0,"Error no shells!");
|
NS_ASSERTION(shells > 0,"Error no shells!");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> tempShell;
|
nsCOMPtr<nsIPresShell> tempShell;
|
||||||
d->GetShellAt(0, getter_AddRefs(tempShell));
|
document->GetShellAt(0, getter_AddRefs(tempShell));
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(tempShell);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(tempShell);
|
||||||
|
|
||||||
*_retval = new nsAccessible(node, wr);
|
*_retval = new nsAccessible(aDOMNode, weakShell);
|
||||||
if ( *_retval ) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLBlockAccessible(nsIDOMNode* node, nsISupports* document, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLBlockAccessible(nsIDOMNode* aDOMNode, nsISupports* aDocument, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIContent> content (do_QueryInterface(node));
|
nsCOMPtr<nsIDocument> document (do_QueryInterface(aDocument));
|
||||||
|
if (!document)
|
||||||
nsCOMPtr<nsIDocument> d (do_QueryInterface(document));
|
|
||||||
if (!d)
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRInt32 shells = d->GetNumberOfShells();
|
PRInt32 shells = document->GetNumberOfShells();
|
||||||
NS_ASSERTION(shells > 0,"Error no shells!");
|
NS_ASSERTION(shells > 0,"Error no shells!");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsCOMPtr<nsIPresShell> tempShell;
|
nsCOMPtr<nsIPresShell> tempShell;
|
||||||
d->GetShellAt(0, getter_AddRefs(tempShell));
|
document->GetShellAt(0, getter_AddRefs(tempShell));
|
||||||
nsCOMPtr<nsIWeakReference> wr = do_GetWeakReference(tempShell);
|
nsCOMPtr<nsIWeakReference> weakShell = do_GetWeakReference(tempShell);
|
||||||
|
|
||||||
*_retval = new nsAccessible(node, wr);
|
*_retval = new nsAccessible(aDOMNode, weakShell);
|
||||||
if ( *_retval ) {
|
if (! *_retval)
|
||||||
NS_ADDREF(*_retval);
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
return NS_OK;
|
|
||||||
}
|
NS_ADDREF(*_retval);
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsAccessibilityService::CreateHTMLIFrameAccessible(nsIDOMNode* node, nsISupports* aPresContext, nsIAccessible **_retval)
|
nsAccessibilityService::CreateHTMLIFrameAccessible(nsIDOMNode* aDOMNode, nsISupports* aPresContext, nsIAccessible **_retval)
|
||||||
{
|
{
|
||||||
*_retval = nsnull;
|
*_retval = nsnull;
|
||||||
|
|
||||||
nsCOMPtr<nsIContent> content(do_QueryInterface(node));
|
nsCOMPtr<nsIContent> content(do_QueryInterface(aDOMNode));
|
||||||
NS_ASSERTION(content,"Error non nsIContent passed to accessible factory!!!");
|
NS_ASSERTION(content,"Error non nsIContent passed to accessible factory!!!");
|
||||||
|
|
||||||
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
nsCOMPtr<nsIPresContext> presContext(do_QueryInterface(aPresContext));
|
||||||
|
@ -447,9 +450,9 @@ nsAccessibilityService::CreateHTMLIFrameAccessible(nsIDOMNode* node, nsISupports
|
||||||
nsCOMPtr<nsIDocument> innerDoc;
|
nsCOMPtr<nsIDocument> innerDoc;
|
||||||
ps->GetDocument(getter_AddRefs(innerDoc));
|
ps->GetDocument(getter_AddRefs(innerDoc));
|
||||||
if (innerDoc) {
|
if (innerDoc) {
|
||||||
nsCOMPtr<nsIAccessible> root = new nsHTMLIFrameRootAccessible(node, wr);
|
nsCOMPtr<nsIAccessible> root = new nsHTMLIFrameRootAccessible(aDOMNode, wr);
|
||||||
if ( root ) {
|
if ( root ) {
|
||||||
nsHTMLIFrameAccessible* frameAcc = new nsHTMLIFrameAccessible(node, root, weakRef, innerDoc);
|
nsHTMLIFrameAccessible* frameAcc = new nsHTMLIFrameAccessible(aDOMNode, root, weakRef, innerDoc);
|
||||||
if ( frameAcc != nsnull ) {
|
if ( frameAcc != nsnull ) {
|
||||||
*_retval = NS_STATIC_CAST(nsIAccessible*, frameAcc);
|
*_retval = NS_STATIC_CAST(nsIAccessible*, frameAcc);
|
||||||
if ( *_retval ) {
|
if ( *_retval ) {
|
||||||
|
@ -615,8 +618,6 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessibleFor(nsIWeakReference *aPresSh
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -627,11 +628,11 @@ NS_NewAccessibilityService(nsIAccessibilityService** aResult)
|
||||||
if (! aResult)
|
if (! aResult)
|
||||||
return NS_ERROR_NULL_POINTER;
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
nsAccessibilityService* a = new nsAccessibilityService();
|
nsAccessibilityService* accService = new nsAccessibilityService();
|
||||||
if (a == nsnull)
|
if (!accService)
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
NS_ADDREF(a);
|
NS_ADDREF(accService);
|
||||||
*aResult = a;
|
*aResult = accService;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,741 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public
|
||||||
|
* License Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS
|
||||||
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||||
|
* implied. See the License for the specific language governing
|
||||||
|
* rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||||
|
* Rights Reserved.
|
||||||
|
*
|
||||||
|
* Original Author: Eric Vaughan (evaughan@netscape.com)
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nsHTMLComboboxAccessible.h"
|
||||||
|
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsIComboboxControlFrame.h"
|
||||||
|
#include "nsIDOMEventReceiver.h"
|
||||||
|
#include "nsIDOMHTMLInputElement.h"
|
||||||
|
#include "nsIDOMHTMLSelectElement.h"
|
||||||
|
#include "nsIFrame.h"
|
||||||
|
#include "nsLayoutAtoms.h"
|
||||||
|
|
||||||
|
/** ----- nsHTMLComboboxAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor -- create the nsHTMLAccessible and set initial state
|
||||||
|
* closed and not registered
|
||||||
|
*/
|
||||||
|
nsHTMLComboboxAccessible::nsHTMLComboboxAccessible(nsIDOMNode* aDOMNode,
|
||||||
|
nsIWeakReference* aShell)
|
||||||
|
:nsAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
mRegistered = PR_FALSE;
|
||||||
|
mOpen = PR_FALSE;
|
||||||
|
SetupMenuListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor -- If we are registered, remove ourselves as a listener.
|
||||||
|
*/
|
||||||
|
nsHTMLComboboxAccessible::~nsHTMLComboboxAccessible()
|
||||||
|
{
|
||||||
|
if (mRegistered) {
|
||||||
|
nsCOMPtr<nsIDOMEventReceiver> eventReceiver(do_QueryInterface(mDOMNode));
|
||||||
|
if (eventReceiver)
|
||||||
|
eventReceiver->RemoveEventListener(NS_LITERAL_STRING("create"), this, PR_TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Inherit the ISupports impl from nsAccessible -- handle nsIDOMMenuListener ourself */
|
||||||
|
NS_IMPL_ISUPPORTS_INHERITED(nsHTMLComboboxAccessible, nsAccessible, nsIDOMMenuListener)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell our caller we are a combobox
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_COMBOBOX;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our last child, a nsHTMLComboboxWindowAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetAccLastChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = new nsHTMLComboboxWindowAccessible(this, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our first child, a nsHTMLComboboxTextFieldAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetAccFirstChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = new nsHTMLComboboxTextFieldAccessible(this, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We always have 3 children: TextField, Button, Window. In that order
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetAccChildCount(PRInt32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = 3;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nsIAccessibleSelectable method. No-op because our selection is returned through
|
||||||
|
* GetValue(). This _may_ change just to provide additional info for the vendors
|
||||||
|
* and another option for them to get at stuff.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetSelectedChildren(nsISupportsArray **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Our value is the value of our ( first ) selected child. SelectElement
|
||||||
|
* returns this by default with GetValue().
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetAccValue(nsAWritableString& _retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMHTMLSelectElement> select (do_QueryInterface(mDOMNode));
|
||||||
|
if (select) {
|
||||||
|
select->GetValue(_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLComboboxAccessible we can have the following states:
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_READONLY
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
* STATE_HASPOPUP
|
||||||
|
* STATE_EXPANDED
|
||||||
|
* STATE_COLLAPSED
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
if (mOpen)
|
||||||
|
*_retval |= STATE_EXPANDED;
|
||||||
|
else
|
||||||
|
*_retval |= STATE_COLLAPSED;
|
||||||
|
|
||||||
|
*_retval |= STATE_HASPOPUP | STATE_READONLY | STATE_FOCUSABLE;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set our state to open and (TBD) fire an event to MSAA saying our state
|
||||||
|
* has changed.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::Create(nsIDOMEvent* aEvent)
|
||||||
|
{
|
||||||
|
mOpen = PR_TRUE;
|
||||||
|
|
||||||
|
/* TBD send state change event */
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set our state to not open and (TDB) fire an event to MSAA saying
|
||||||
|
* our state has changed.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::Destroy(nsIDOMEvent* aEvent)
|
||||||
|
{
|
||||||
|
mOpen = PR_FALSE;
|
||||||
|
|
||||||
|
/* TBD send state change event */
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set our state to not open and (TDB) fire an event to MSAA saying
|
||||||
|
* our state has changed.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxAccessible::Close(nsIDOMEvent* aEvent)
|
||||||
|
{
|
||||||
|
mOpen = PR_FALSE;
|
||||||
|
|
||||||
|
/* TBD send state change event */
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we aren't already registered, register ourselves as a
|
||||||
|
* listener to "create" events on our DOM node. Set our
|
||||||
|
* state to registered, but don't notify MSAA as they
|
||||||
|
* don't need to know about this state.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
nsHTMLComboboxAccessible::SetupMenuListener()
|
||||||
|
{
|
||||||
|
// if not already registered as a popup listener, register ourself
|
||||||
|
if (!mRegistered) {
|
||||||
|
nsCOMPtr<nsIDOMEventReceiver> eventReceiver(do_QueryInterface(mDOMNode));
|
||||||
|
if (eventReceiver && NS_SUCCEEDED(eventReceiver->AddEventListener(NS_LITERAL_STRING("create"), this, PR_TRUE)))
|
||||||
|
mRegistered = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** ----- nsHTMLComboboxTextFieldAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor -- create the nsLeafAccessible and set our parent
|
||||||
|
*/
|
||||||
|
nsHTMLComboboxTextFieldAccessible::nsHTMLComboboxTextFieldAccessible(nsIAccessible* aParent,
|
||||||
|
nsIDOMNode* aDOMNode,
|
||||||
|
nsIWeakReference* aShell)
|
||||||
|
:nsLeafAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
mParent = aParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Currently gets the text from the first option, needs to check for selection
|
||||||
|
* and then return that text.
|
||||||
|
* Walks the Frame tree and checks for proper frames.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxTextFieldAccessible::GetAccValue(nsAWritableString& _retval)
|
||||||
|
{
|
||||||
|
nsIFrame* frame = nsAccessible::GetBoundsFrame();
|
||||||
|
nsCOMPtr<nsIPresContext> context;
|
||||||
|
GetPresContext(context);
|
||||||
|
if (!frame || !context)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
frame->FirstChild(context, nsnull, &frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::blockFrame))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->FirstChild(context, nsnull, &frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::textFrame))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
nsCOMPtr<nsIContent> content;
|
||||||
|
frame->GetContent(getter_AddRefs(content));
|
||||||
|
|
||||||
|
if (!content)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
AppendFlatStringFromSubtree(content, &_retval);
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the bounds for the AreaFrame around the BlockFrame.
|
||||||
|
* Walks the Frame tree and checks for proper frames.
|
||||||
|
*/
|
||||||
|
void nsHTMLComboboxTextFieldAccessible::GetBounds(nsRect& aBounds, nsIFrame** aRelativeFrame)
|
||||||
|
{
|
||||||
|
// get our first child's frame
|
||||||
|
nsIFrame* frame = nsAccessible::GetBoundsFrame();
|
||||||
|
nsCOMPtr<nsIPresContext> context;
|
||||||
|
GetPresContext(context);
|
||||||
|
if (!frame || !context)
|
||||||
|
return;
|
||||||
|
|
||||||
|
frame->FirstChild(context, nsnull, &frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::blockFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetParent(aRelativeFrame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(*aRelativeFrame, nsLayoutAtoms::areaFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetRect(aBounds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for our parent
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxTextFieldAccessible::GetAccParent(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = mParent;
|
||||||
|
NS_IF_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our next sibling, a
|
||||||
|
* nsHTMLComboboxButtonAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxTextFieldAccessible::GetAccNextSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIAccessible> parent;
|
||||||
|
GetAccParent(getter_AddRefs(parent));
|
||||||
|
|
||||||
|
*_retval = new nsHTMLComboboxButtonAccessible(parent, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We are the first child of our parent, no previous sibling
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxTextFieldAccessible::GetAccPreviousSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Our role is currently only static text, but we should be able to have
|
||||||
|
* editable text here and we need to check that case.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxTextFieldAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_STATICTEXT;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLComboboxTextFieldAccessible we can have the following states:
|
||||||
|
* STATE_READONLY
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxTextFieldAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
*_retval |= STATE_READONLY | STATE_FOCUSABLE;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** -----SelectButtonAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor -- create the nsMenuListenerAccessible and set our parent
|
||||||
|
*/
|
||||||
|
nsHTMLComboboxButtonAccessible::nsHTMLComboboxButtonAccessible(nsIAccessible* aParent,
|
||||||
|
nsIDOMNode* aDOMNode,
|
||||||
|
nsIWeakReference* aShell)
|
||||||
|
:nsAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
mParent = aParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Programmaticaly click on the button, causing either the display or
|
||||||
|
* the hiding of the drop down box ( window ).
|
||||||
|
* Walks the Frame tree and checks for proper frames.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::AccDoAction(PRUint8 index)
|
||||||
|
{
|
||||||
|
nsIFrame* frame = nsAccessible::GetBoundsFrame();
|
||||||
|
nsCOMPtr<nsIPresContext> context;
|
||||||
|
GetPresContext(context);
|
||||||
|
if (!context)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
|
frame->FirstChild(context, nsnull, &frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::blockFrame))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetNextSibling(&frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::gfxButtonControlFrame))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
nsCOMPtr<nsIContent> content;
|
||||||
|
frame->GetContent(getter_AddRefs(content));
|
||||||
|
|
||||||
|
// We only have one action, click. Any other index is meaningless(wrong)
|
||||||
|
if (index == eAction_Click) {
|
||||||
|
nsCOMPtr<nsIDOMHTMLInputElement> element(do_QueryInterface(content));
|
||||||
|
if (element)
|
||||||
|
{
|
||||||
|
element->Click();
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Just one action ( click ).
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccNumActions(PRUint8 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = 1;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the bounds for the AreaFrame around the gfxButtonControlFrame.
|
||||||
|
* Walks the Frame tree and checks for proper frames.
|
||||||
|
*/
|
||||||
|
void nsHTMLComboboxButtonAccessible::GetBounds(nsRect& aBounds, nsIFrame** aRelativeFrame)
|
||||||
|
{
|
||||||
|
// get our second child's frame
|
||||||
|
nsIFrame* frame = nsAccessible::GetBoundsFrame();
|
||||||
|
nsCOMPtr<nsIPresContext> context;
|
||||||
|
GetPresContext(context);
|
||||||
|
if (!context)
|
||||||
|
return;
|
||||||
|
|
||||||
|
frame->FirstChild(context, nsnull, &frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::blockFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetNextSibling(&frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::gfxButtonControlFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetParent(aRelativeFrame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(*aRelativeFrame, nsLayoutAtoms::areaFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetRect(aBounds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell our caller we are a button.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_PUSHBUTTON;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for our parent
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccParent(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = mParent;
|
||||||
|
NS_IF_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the name from GetAccActionName()
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccName(nsAWritableString& _retval)
|
||||||
|
{
|
||||||
|
return GetAccActionName(eAction_Click, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Our action name is the reverse of our state:
|
||||||
|
* if we are closed -> open is our name.
|
||||||
|
* if we are open -> closed is our name.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccActionName(PRUint8 index, nsAWritableString& _retval)
|
||||||
|
{
|
||||||
|
// we are open or closed
|
||||||
|
PRBool isOpen = PR_FALSE;
|
||||||
|
nsIFrame *boundsFrame = GetBoundsFrame();
|
||||||
|
nsIComboboxControlFrame* comboFrame;
|
||||||
|
nsresult rv = QueryInterface(NS_GET_IID(nsIComboboxControlFrame), (void**)&comboFrame);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
comboFrame->IsDroppedDown(&isOpen);
|
||||||
|
if (isOpen)
|
||||||
|
_retval = NS_LITERAL_STRING("Close");
|
||||||
|
else
|
||||||
|
_retval = NS_LITERAL_STRING("Open");
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our next sibling, a
|
||||||
|
* nsHTMLComboboxWindowAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccNextSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIAccessible> parent;
|
||||||
|
GetAccParent(getter_AddRefs(parent));
|
||||||
|
|
||||||
|
*_retval = new nsHTMLComboboxWindowAccessible(parent, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our previous sibling, a
|
||||||
|
* nsHTMLComboboxTextFieldAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccPreviousSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIAccessible> parent;
|
||||||
|
GetAccParent(getter_AddRefs(parent));
|
||||||
|
|
||||||
|
*_retval = new nsHTMLComboboxTextFieldAccessible(parent, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No Children. Just a button ( over-riding nsAccessible )
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccLastChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No Children. Just a button ( over-riding nsAccessible )
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccFirstChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No Children. Just a button ( over-riding nsAccessible )
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccChildCount(PRInt32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = 0;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLComboboxButtonAccessible we can have the following states:
|
||||||
|
* STATE_PRESSED
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxButtonAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
// we are open or closed
|
||||||
|
PRBool isOpen = PR_FALSE;
|
||||||
|
nsIFrame *boundsFrame = GetBoundsFrame();
|
||||||
|
nsIComboboxControlFrame* comboFrame;
|
||||||
|
nsresult rv = QueryInterface(NS_GET_IID(nsIComboboxControlFrame), (void**)&comboFrame);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
comboFrame->IsDroppedDown(&isOpen);
|
||||||
|
if (isOpen)
|
||||||
|
*_retval |= STATE_PRESSED;
|
||||||
|
|
||||||
|
*_retval |= STATE_FOCUSABLE;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** ----- nsHTMLComboboxWindowAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor -- create the nsMenuListener and set our parent
|
||||||
|
*/
|
||||||
|
nsHTMLComboboxWindowAccessible::nsHTMLComboboxWindowAccessible(nsIAccessible* aParent,
|
||||||
|
nsIDOMNode* aDOMNode,
|
||||||
|
nsIWeakReference* aShell)
|
||||||
|
:nsAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
mParent = aParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLComboboxWindowAccessible we can have the following states:
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
* STATE_INVISIBLE
|
||||||
|
* STATE_FLOATING
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
// we are open or closed
|
||||||
|
PRBool isOpen = PR_FALSE;
|
||||||
|
nsIFrame *boundsFrame = GetBoundsFrame();
|
||||||
|
nsIComboboxControlFrame* comboFrame;
|
||||||
|
nsresult rv = QueryInterface(NS_GET_IID(nsIComboboxControlFrame), (void**)&comboFrame);
|
||||||
|
if (NS_FAILED(rv))
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
comboFrame->IsDroppedDown(&isOpen);
|
||||||
|
if (! isOpen)
|
||||||
|
*_retval |= STATE_INVISIBLE;
|
||||||
|
|
||||||
|
*_retval |= STATE_FOCUSABLE | STATE_FLOATING;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell our caller we are a window
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_WINDOW;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for our parent
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccParent(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = mParent;
|
||||||
|
NS_IF_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our previous sibling, a
|
||||||
|
* nsHTMLComboboxButtonAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccPreviousSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIAccessible> parent;
|
||||||
|
GetAccParent(getter_AddRefs(parent));
|
||||||
|
|
||||||
|
*_retval = new nsHTMLComboboxButtonAccessible(parent, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We are the last sibling of our parent.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccNextSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We only have one child, a list
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccLastChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = new nsHTMLSelectListAccessible(this, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We only have one child, a list
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccFirstChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = new nsHTMLSelectListAccessible(this, mDOMNode, mPresShell);
|
||||||
|
if (! *_retval)
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We only have one child, a list
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLComboboxWindowAccessible::GetAccChildCount(PRInt32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = 1;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the bounds of the window, the window may be invisible.
|
||||||
|
*/
|
||||||
|
void nsHTMLComboboxWindowAccessible::GetBounds(nsRect& aBounds, nsIFrame** aRelativeFrame)
|
||||||
|
{
|
||||||
|
// get our first option
|
||||||
|
nsCOMPtr<nsIDOMNode> child;
|
||||||
|
mDOMNode->GetFirstChild(getter_AddRefs(child));
|
||||||
|
|
||||||
|
// now get its frame
|
||||||
|
nsCOMPtr<nsIPresShell> shell(do_QueryReferent(mPresShell));
|
||||||
|
if (!shell) {
|
||||||
|
*aRelativeFrame = nsnull;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsIFrame* frame = nsnull;
|
||||||
|
nsCOMPtr<nsIContent> content(do_QueryInterface(child));
|
||||||
|
shell->GetPrimaryFrameFor(content, &frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::blockFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetParent(&frame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(frame, nsLayoutAtoms::areaFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetParent(aRelativeFrame);
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (! nsAccessible::IsCorrectFrameType(*aRelativeFrame, nsLayoutAtoms::listControlFrame))
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
frame->GetRect(aBounds);
|
||||||
|
}
|
|
@ -0,0 +1,161 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public
|
||||||
|
* License Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS
|
||||||
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||||
|
* implied. See the License for the specific language governing
|
||||||
|
* rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||||
|
* Rights Reserved.
|
||||||
|
*
|
||||||
|
* Original Author: John Gaunt (jgaunt@netscape.com)
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
#ifndef __nsHTMLComboboxAccessible_h__
|
||||||
|
#define __nsHTMLComboboxAccessible_h__
|
||||||
|
|
||||||
|
#include "nsAccessible.h"
|
||||||
|
#include "nsIAccessibleSelectable.h"
|
||||||
|
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsHTMLSelectListAccessible.h"
|
||||||
|
#include "nsIDOMMenuListener.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A class the represents the HTML Combobox widget.
|
||||||
|
*/
|
||||||
|
class nsHTMLComboboxAccessible : public nsAccessible,
|
||||||
|
public nsIAccessibleSelectable,
|
||||||
|
public nsIDOMMenuListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
NS_DECL_NSIACCESSIBLESELECTABLE
|
||||||
|
|
||||||
|
nsHTMLComboboxAccessible(nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
virtual ~nsHTMLComboboxAccessible();
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccChildCount(PRInt32 *_retval);
|
||||||
|
NS_IMETHOD GetAccValue(nsAWritableString& _retval);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
// popup listener
|
||||||
|
NS_IMETHOD Create(nsIDOMEvent* aEvent);
|
||||||
|
NS_IMETHOD Close(nsIDOMEvent* aEvent);
|
||||||
|
NS_IMETHOD Destroy(nsIDOMEvent* aEvent);
|
||||||
|
NS_IMETHOD Action(nsIDOMEvent* aEvent) { return NS_OK; }
|
||||||
|
NS_IMETHOD Broadcast(nsIDOMEvent* aEvent) { return NS_OK; }
|
||||||
|
NS_IMETHOD CommandUpdate(nsIDOMEvent* aEvent) { return NS_OK; }
|
||||||
|
NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) { return NS_OK; }
|
||||||
|
|
||||||
|
virtual void SetupMenuListener();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
PRBool mRegistered;
|
||||||
|
PRBool mOpen;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A class the represents the text field in the Select to the left
|
||||||
|
* of the drop down button
|
||||||
|
*/
|
||||||
|
class nsHTMLComboboxTextFieldAccessible : public nsLeafAccessible
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsHTMLComboboxTextFieldAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccNextSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccPreviousSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccParent(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccValue(nsAWritableString& _retval);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
virtual void GetBounds(nsRect& aBounds, nsIFrame** aRelativeFrame);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAccessible> mParent;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class that represents the button inside the Select to the
|
||||||
|
* right of the text field
|
||||||
|
*/
|
||||||
|
class nsHTMLComboboxButtonAccessible : public nsAccessible
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
enum { eAction_Click=0 };
|
||||||
|
|
||||||
|
nsHTMLComboboxButtonAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccNextSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccPreviousSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccParent(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccName(nsAWritableString& _retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccChildCount(PRInt32 *_retval);
|
||||||
|
NS_IMETHOD GetAccNumActions(PRUint8 *_retval);
|
||||||
|
NS_IMETHOD GetAccActionName(PRUint8 index, nsAWritableString& _retval);
|
||||||
|
NS_IMETHOD AccDoAction(PRUint8 index);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
virtual void GetBounds(nsRect& aBounds, nsIFrame** aRelativeFrame);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAccessible> mParent;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A class that represents the window that lives to the right
|
||||||
|
* of the drop down button inside the Select. This is the window
|
||||||
|
* that is made visible when the button is pressed.
|
||||||
|
*/
|
||||||
|
class nsHTMLComboboxWindowAccessible : public nsAccessible
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsHTMLComboboxWindowAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccParent(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccNextSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccPreviousSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccChildCount(PRInt32 *_retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
virtual void GetBounds(nsRect& aBounds, nsIFrame** aRelativeFrame);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAccessible> mParent;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,132 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public
|
||||||
|
* License Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS
|
||||||
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||||
|
* implied. See the License for the specific language governing
|
||||||
|
* rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||||
|
* Rights Reserved.
|
||||||
|
*
|
||||||
|
* Original Author: Eric Vaughan (evaughan@netscape.com)
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nsHTMLListboxAccessible.h"
|
||||||
|
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsIDOMHTMLInputElement.h"
|
||||||
|
#include "nsIDOMHTMLSelectElement.h"
|
||||||
|
#include "nsIFrame.h"
|
||||||
|
#include "nsLayoutAtoms.h"
|
||||||
|
|
||||||
|
/** ----- nsHTMLListboxAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor -- create the nsHTMLAccessible
|
||||||
|
*/
|
||||||
|
nsHTMLListboxAccessible::nsHTMLListboxAccessible(nsIDOMNode* aDOMNode,
|
||||||
|
nsIWeakReference* aShell)
|
||||||
|
:nsAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Inherit the ISupports impl from nsAccessible */
|
||||||
|
NS_IMPL_ISUPPORTS_INHERITED0(nsHTMLListboxAccessible, nsAccessible)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell our caller we are a list ( there isn't a listbox value )
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_LIST;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our last child, a nsHTMLListboxWindowAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetAccLastChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = new nsHTMLSelectListAccessible(this, mDOMNode, mPresShell);
|
||||||
|
if ( ! *_retval )
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Through the arg, pass back our first child, a nsHTMLListboxWindowAccessible object
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetAccFirstChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = new nsHTMLSelectListAccessible(this, mDOMNode, mPresShell);
|
||||||
|
if ( ! *_retval )
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We always have 1 child: SelectList.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetAccChildCount(PRInt32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = 1;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nsIAccessibleSelectable method. This needs to get from the select the list
|
||||||
|
* of select options and then iterate through that pulling out the selected
|
||||||
|
* items and creating IAccessible objects for them. Put the IAccessibles in
|
||||||
|
* the nsISupportsArray and return them.
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetSelectedChildren(nsISupportsArray **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_ERROR_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Our value is the value of our ( first ) selected child. SelectElement
|
||||||
|
* returns this by default with GetValue().
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetAccValue(nsAWritableString& _retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMHTMLSelectElement> select (do_QueryInterface(mDOMNode));
|
||||||
|
if ( select ) {
|
||||||
|
select->GetValue(_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLListboxAccessible we can have the following states:
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_READONLY
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLListboxAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
*_retval |= STATE_READONLY | STATE_FOCUSABLE;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public
|
||||||
|
* License Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS
|
||||||
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||||
|
* implied. See the License for the specific language governing
|
||||||
|
* rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||||
|
* Rights Reserved.
|
||||||
|
*
|
||||||
|
* Original Author: John Gaunt (jgaunt@netscape.com)
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
#ifndef __nsHTMLListboxAccessible_h__
|
||||||
|
#define __nsHTMLListboxAccessible_h__
|
||||||
|
|
||||||
|
#include "nsAccessible.h"
|
||||||
|
#include "nsIAccessibleSelectable.h"
|
||||||
|
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsHTMLSelectListAccessible.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A class the represents the HTML Combobox widget.
|
||||||
|
*/
|
||||||
|
class nsHTMLListboxAccessible : public nsAccessible,
|
||||||
|
public nsIAccessibleSelectable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
NS_DECL_NSIACCESSIBLESELECTABLE
|
||||||
|
|
||||||
|
nsHTMLListboxAccessible(nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
virtual ~nsHTMLListboxAccessible() {}
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccChildCount(PRInt32 *_retval);
|
||||||
|
NS_IMETHOD GetAccValue(nsAWritableString& _retval);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,266 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public
|
||||||
|
* License Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS
|
||||||
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||||
|
* implied. See the License for the specific language governing
|
||||||
|
* rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||||
|
* Rights Reserved.
|
||||||
|
*
|
||||||
|
* Original Author: Eric Vaughan (evaughan@netscape.com)
|
||||||
|
*
|
||||||
|
* Contributor(s): John Gaunt (jgaunt@netscape.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nsHTMLSelectListAccessible.h"
|
||||||
|
|
||||||
|
#include "nsRootAccessible.h"
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
#include "nsLayoutAtoms.h"
|
||||||
|
#include "nsIAtom.h"
|
||||||
|
#include "nsIFrame.h"
|
||||||
|
#include "nsISelectControlFrame.h"
|
||||||
|
#include "nsIDOMHTMLOptionElement.h"
|
||||||
|
#include "nsIDOMHTMLSelectElement.h"
|
||||||
|
|
||||||
|
/** ----- nsHTMLSelectListAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
nsHTMLSelectListAccessible::nsHTMLSelectListAccessible(nsIAccessible* aParent,
|
||||||
|
nsIDOMNode* aDOMNode,
|
||||||
|
nsIWeakReference* aShell)
|
||||||
|
:nsAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
mParent = aParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::AccGetBounds(PRInt32 *x, PRInt32 *y, PRInt32 *width, PRInt32 *height)
|
||||||
|
{
|
||||||
|
return mParent->AccGetBounds(x,y,width,height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccParent(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = mParent;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_LIST;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccPreviousSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccNextSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccLastChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMNode> last;
|
||||||
|
mDOMNode->GetLastChild(getter_AddRefs(last));
|
||||||
|
|
||||||
|
*_retval = new nsHTMLSelectOptionAccessible(this, last, mPresShell);
|
||||||
|
if ( ! *_retval )
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccFirstChild(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIDOMNode> first;
|
||||||
|
mDOMNode->GetFirstChild(getter_AddRefs(first));
|
||||||
|
|
||||||
|
*_retval = new nsHTMLSelectOptionAccessible(this, first, mPresShell);
|
||||||
|
if ( ! *_retval )
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLSelectListAccessible we can have the following states:
|
||||||
|
* STATE_MULTISELECTABLE
|
||||||
|
* STATE_EXTSELECTABLE
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectListAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDOMHTMLSelectElement> select (do_QueryInterface(mDOMNode));
|
||||||
|
if ( select ) {
|
||||||
|
PRBool multiple;
|
||||||
|
select->GetMultiple(&multiple);
|
||||||
|
if ( multiple )
|
||||||
|
*_retval |= STATE_MULTISELECTABLE | STATE_EXTSELECTABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*_retval |= STATE_FOCUSABLE;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** ----- nsHTMLSelectOptionAccessible ----- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
nsHTMLSelectOptionAccessible::nsHTMLSelectOptionAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell):
|
||||||
|
nsLeafAccessible(aDOMNode, aShell)
|
||||||
|
{
|
||||||
|
mParent = aParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetAccRole(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
*_retval = ROLE_LISTITEM;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetAccParent(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = mParent;
|
||||||
|
NS_IF_ADDREF(*_retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetAccNextSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDOMNode> next;
|
||||||
|
mDOMNode->GetNextSibling(getter_AddRefs(next));
|
||||||
|
|
||||||
|
if (next) {
|
||||||
|
*_retval = new nsHTMLSelectOptionAccessible(mParent, next, mPresShell);
|
||||||
|
if ( ! *_retval )
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetAccPreviousSibling(nsIAccessible **_retval)
|
||||||
|
{
|
||||||
|
*_retval = nsnull;
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDOMNode> prev;
|
||||||
|
mDOMNode->GetPreviousSibling(getter_AddRefs(prev));
|
||||||
|
|
||||||
|
if (prev) {
|
||||||
|
*_retval = new nsHTMLSelectOptionAccessible(mParent, prev, mPresShell);
|
||||||
|
if ( ! *_retval )
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
NS_ADDREF(*_retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetAccName(nsAWritableString& _retval)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIContent> content (do_QueryInterface(mDOMNode));
|
||||||
|
if (!content) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsAutoString option;
|
||||||
|
nsresult rv = AppendFlatStringFromSubtree(content, &option);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
// Temp var needed until CompressWhitespace built for nsAWritableString
|
||||||
|
option.CompressWhitespace();
|
||||||
|
_retval.Assign(option);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As a nsHTMLSelectOptionAccessible we can have the following states:
|
||||||
|
* STATE_SELECTABLE
|
||||||
|
* STATE_SELECTED
|
||||||
|
* STATE_FOCUSED
|
||||||
|
* STATE_FOCUSABLE
|
||||||
|
* STATE_INVISIBLE // not implemented yet
|
||||||
|
*/
|
||||||
|
NS_IMETHODIMP nsHTMLSelectOptionAccessible::GetAccState(PRUint32 *_retval)
|
||||||
|
{
|
||||||
|
// this sets either STATE_FOCUSED or 0
|
||||||
|
nsAccessible::GetAccState(_retval);
|
||||||
|
|
||||||
|
// Are we selected?
|
||||||
|
nsCOMPtr<nsIDOMHTMLOptionElement> option (do_QueryInterface(mDOMNode));
|
||||||
|
if ( option ) {
|
||||||
|
PRBool isSelected = PR_FALSE;
|
||||||
|
option->GetSelected(&isSelected);
|
||||||
|
if ( isSelected )
|
||||||
|
*_retval |= STATE_SELECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
*_retval |= STATE_SELECTABLE | STATE_FOCUSABLE;
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Netscape Public
|
||||||
|
* License Version 1.1 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.mozilla.org/NPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS
|
||||||
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||||
|
* implied. See the License for the specific language governing
|
||||||
|
* rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is mozilla.org code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Netscape
|
||||||
|
* Communications Corporation. Portions created by Netscape are
|
||||||
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||||
|
* Rights Reserved.
|
||||||
|
*
|
||||||
|
* Original Author: Eric Vaughan (evaughan@netscape.com)
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
#ifndef __nsHTMLSelectListAccessible_h__
|
||||||
|
#define __nsHTMLSelectListAccessible_h__
|
||||||
|
|
||||||
|
#include "nsAccessible.h"
|
||||||
|
|
||||||
|
#include "nsCOMPtr.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The list that contains all the options in the select.
|
||||||
|
*/
|
||||||
|
class nsHTMLSelectListAccessible : public nsAccessible
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsHTMLSelectListAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
virtual ~nsHTMLSelectListAccessible() {}
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccParent(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccNextSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccPreviousSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD AccGetBounds(PRInt32 *x, PRInt32 *y, PRInt32 *width, PRInt32 *height);
|
||||||
|
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAccessible> mParent;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Options inside the select, contained within the list
|
||||||
|
*/
|
||||||
|
class nsHTMLSelectOptionAccessible : public nsLeafAccessible
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
nsHTMLSelectOptionAccessible(nsIAccessible* aParent, nsIDOMNode* aDOMNode, nsIWeakReference* aShell);
|
||||||
|
|
||||||
|
/* ----- nsIAccessible ----- */
|
||||||
|
NS_IMETHOD GetAccParent(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||||
|
NS_IMETHOD GetAccNextSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccPreviousSibling(nsIAccessible **_retval);
|
||||||
|
NS_IMETHOD GetAccName(nsAWritableString& _retval);
|
||||||
|
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAccessible> mParent;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -354,7 +354,7 @@ NS_IMETHODIMP nsComboboxControlFrame::GetAccessible(nsIAccessible** aAccessible)
|
||||||
|
|
||||||
if (accService) {
|
if (accService) {
|
||||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
||||||
return accService->CreateHTMLSelectAccessible(node, mPresContext, aAccessible);
|
return accService->CreateHTMLComboboxAccessible(node, mPresContext, aAccessible);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
|
@ -552,7 +552,7 @@ NS_IMETHODIMP nsListControlFrame::GetAccessible(nsIAccessible** aAccessible)
|
||||||
|
|
||||||
if (accService) {
|
if (accService) {
|
||||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
||||||
return accService->CreateHTMLSelectAccessible(node, mPresContext, aAccessible);
|
return accService->CreateHTMLListboxAccessible(node, mPresContext, aAccessible);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
|
@ -354,7 +354,7 @@ NS_IMETHODIMP nsComboboxControlFrame::GetAccessible(nsIAccessible** aAccessible)
|
||||||
|
|
||||||
if (accService) {
|
if (accService) {
|
||||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
||||||
return accService->CreateHTMLSelectAccessible(node, mPresContext, aAccessible);
|
return accService->CreateHTMLComboboxAccessible(node, mPresContext, aAccessible);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
|
@ -552,7 +552,7 @@ NS_IMETHODIMP nsListControlFrame::GetAccessible(nsIAccessible** aAccessible)
|
||||||
|
|
||||||
if (accService) {
|
if (accService) {
|
||||||
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
nsCOMPtr<nsIDOMNode> node = do_QueryInterface(mContent);
|
||||||
return accService->CreateHTMLSelectAccessible(node, mPresContext, aAccessible);
|
return accService->CreateHTMLListboxAccessible(node, mPresContext, aAccessible);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче