Example #1
0
// Get the nsITreeBoxObject interface from any levels DOMNode under the <tree>
void nsXULTreeAccessible::GetTreeBoxObject(nsIDOMNode *aDOMNode, nsITreeBoxObject **aBoxObject)
{
  nsAutoString name;
  nsCOMPtr<nsIDOMNode> parentNode, currentNode;

  // Find DOMNode's parents recursively until reach the <tree> tag
  currentNode = aDOMNode;
  while (currentNode) {
    currentNode->GetLocalName(name);
    if (name.EqualsLiteral("tree")) {
      // We will get the nsITreeBoxObject from the tree node
      nsCOMPtr<nsIDOMXULElement> xulElement(do_QueryInterface(currentNode));
      if (xulElement) {
        nsCOMPtr<nsIBoxObject> box;
        xulElement->GetBoxObject(getter_AddRefs(box));
        nsCOMPtr<nsITreeBoxObject> treeBox(do_QueryInterface(box));
        if (treeBox) {
          *aBoxObject = treeBox;
          NS_ADDREF(*aBoxObject);
          return;
        }
      }
    }
    currentNode->GetParentNode(getter_AddRefs(parentNode));
    currentNode = parentNode;
  }

  *aBoxObject = nsnull;
}
Example #2
0
NS_IMETHODIMP nsDOMMenuBar::AddSubmenu(const nsAString& aId, const nsAString& aLabel, nsINativeMenu** _retval)
{
  nsresult rv;
  nsCOMPtr<nsIDOMDocument> chromeDocument;
  rv = GetChromeDocument(getter_AddRefs(chromeDocument));
  NS_ENSURE_SUCCESS(rv, rv);
  
  if (!mMenuElement) {
    nsCOMPtr<nsIDOMNodeList> nodeList;
    rv = chromeDocument->GetElementsByTagName(NS_LITERAL_STRING("menubar"), getter_AddRefs(nodeList));
    NS_ENSURE_SUCCESS(rv, rv);
    
    nsCOMPtr<nsIDOMNode> node;
    rv = nodeList->Item(0, getter_AddRefs(node));
    NS_ENSURE_SUCCESS(rv, rv);
    
    mMenuElement = do_QueryInterface(node, &rv);
    NS_ENSURE_SUCCESS(rv, rv);
    
    rv = mMenuElement->SetAttribute(NS_LITERAL_STRING("hidden"), NS_LITERAL_STRING("false"));
    NS_ENSURE_SUCCESS(rv, rv);
  }
  
  // Add the new menu
  nsCOMPtr<nsIDOMElement> menu;
  rv = chromeDocument->CreateElement(NS_LITERAL_STRING("menu"), getter_AddRefs(menu));
  NS_ENSURE_SUCCESS(rv, rv);
  
  rv = menu->SetAttribute(NS_LITERAL_STRING("label"), aLabel);
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsCOMPtr<nsIDOMElement> menuPopup;
  rv = chromeDocument->CreateElement(NS_LITERAL_STRING("menupopup"), getter_AddRefs(menuPopup));
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsCOMPtr<nsIDOMXULElement> xulElement(do_QueryInterface(menuPopup, &rv));
  NS_ENSURE_SUCCESS(rv, rv);
  
  rv = xulElement->SetId(aId);
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsCOMPtr<nsIDOMNode> node;
  rv = menu->AppendChild(menuPopup, getter_AddRefs(node));
  NS_ENSURE_SUCCESS(rv, rv);
  
  rv = mMenuElement->AppendChild(menu, getter_AddRefs(node));
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsRefPtr<nsDOMMenuBar> nativeMenu = new nsDOMMenuBar(mWindow);
  NS_ENSURE_TRUE(nativeMenu, NS_ERROR_OUT_OF_MEMORY);
  
  nativeMenu->mMenuElement = menu;

  return nativeMenu->QueryInterface(NS_GET_IID(nsINativeMenu), (void **) _retval);
}
Example #3
0
NS_IMETHODIMP nsDOMMenuBar::AddMenuItem(const nsAString& aId, const nsAString& aLabel, nsIDOMEventListener* aListener)
{
  NS_ENSURE_STATE(mWindow);
  NS_ENSURE_STATE(mMenuElement);
  
  nsresult rv;
  nsAutoString tagName;
  rv = mMenuElement->GetTagName(tagName);
  NS_ENSURE_SUCCESS(rv, rv);
  
  if (tagName != NS_LITERAL_STRING("menu")) {
    return NS_ERROR_FAILURE;
  }
  
  nsCOMPtr<nsIDOMDocument> document;
  rv = GetChromeDocument(getter_AddRefs(document));
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsCOMPtr<nsIDOMElement> element;
  rv = document->CreateElement(NS_LITERAL_STRING("menuitem"), getter_AddRefs(element));
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsCOMPtr<nsIDOMXULElement> xulElement(do_QueryInterface(element, &rv));
  NS_ENSURE_SUCCESS(rv, rv);
  
  rv = xulElement->SetId(aId);
  NS_ENSURE_SUCCESS(rv, rv);
  
  rv = element->SetAttribute(NS_LITERAL_STRING("label"), aLabel);
  NS_ENSURE_SUCCESS(rv, rv);
  
  nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(element, &rv));
  NS_ENSURE_SUCCESS(rv, rv);
  
  rv = target->AddEventListener(NS_LITERAL_STRING("command"), aListener, PR_TRUE);
  NS_ENSURE_SUCCESS(rv, rv);

  nsCOMPtr<nsIDOMNode> node;
  rv = mMenuElement->AppendChild(element, getter_AddRefs(node));
  NS_ENSURE_SUCCESS(rv, rv);
  
  return NS_OK;
}
already_AddRefed<nsIController>
nsXBLPrototypeHandler::GetController(nsPIDOMEventTarget* aTarget)
{
  // XXX Fix this so there's a generic interface that describes controllers, 
  // This code should have no special knowledge of what objects might have controllers.
  nsCOMPtr<nsIControllers> controllers;

  nsCOMPtr<nsIDOMXULElement> xulElement(do_QueryInterface(aTarget));
  if (xulElement)
    xulElement->GetControllers(getter_AddRefs(controllers));

  if (!controllers) {
    nsCOMPtr<nsIDOMNSHTMLTextAreaElement> htmlTextArea(do_QueryInterface(aTarget));
    if (htmlTextArea)
      htmlTextArea->GetControllers(getter_AddRefs(controllers));
  }

  if (!controllers) {
    nsCOMPtr<nsIDOMNSHTMLInputElement> htmlInputElement(do_QueryInterface(aTarget));
    if (htmlInputElement)
      htmlInputElement->GetControllers(getter_AddRefs(controllers));
  }

  if (!controllers) {
    nsCOMPtr<nsIDOMWindowInternal> domWindow(do_QueryInterface(aTarget));
    if (domWindow)
      domWindow->GetControllers(getter_AddRefs(controllers));
  }

  // Return the first controller.
  // XXX This code should be checking the command name and using supportscommand and
  // iscommandenabled.
  nsIController* controller;
  if (controllers) {
    controllers->GetControllerAt(0, &controller);  // return reference
  }
  else controller = nsnull;

  return controller;
}
Example #5
0
nsresult
nsWindowRoot::GetControllers(nsIControllers** aResult)
{
  *aResult = nsnull;

  // XXX: we should fix this so there's a generic interface that
  // describes controllers, so this code would have no special
  // knowledge of what object might have controllers.

  nsCOMPtr<nsPIDOMWindow> focusedWindow;
  nsIContent* focusedContent =
    nsFocusManager::GetFocusedDescendant(mWindow, PR_TRUE, getter_AddRefs(focusedWindow));
  if (focusedContent) {
#ifdef MOZ_XUL
    nsCOMPtr<nsIDOMXULElement> xulElement(do_QueryInterface(focusedContent));
    if (xulElement)
      return xulElement->GetControllers(aResult);
#endif

    nsCOMPtr<nsIDOMHTMLTextAreaElement> htmlTextArea =
      do_QueryInterface(focusedContent);
    if (htmlTextArea)
      return htmlTextArea->GetControllers(aResult);

    nsCOMPtr<nsIDOMHTMLInputElement> htmlInputElement =
      do_QueryInterface(focusedContent);
    if (htmlInputElement)
      return htmlInputElement->GetControllers(aResult);

    if (focusedContent->IsEditable() && focusedWindow)
      return focusedWindow->GetControllers(aResult);
  }
  else {
    nsCOMPtr<nsIDOMWindow> domWindow = do_QueryInterface(focusedWindow);
    if (domWindow)
      return domWindow->GetControllers(aResult);
  }

  return NS_OK;
}
Example #6
0
already_AddRefed<nsITreeBoxObject>
nsCoreUtils::GetTreeBoxObject(nsIContent *aContent)
{
  // Find DOMNode's parents recursively until reach the <tree> tag
  nsIContent* currentContent = aContent;
  while (currentContent) {
    if (currentContent->NodeInfo()->Equals(nsGkAtoms::tree,
                                           kNameSpaceID_XUL)) {
      // We will get the nsITreeBoxObject from the tree node
      nsCOMPtr<nsIDOMXULElement> xulElement(do_QueryInterface(currentContent));
      if (xulElement) {
        nsCOMPtr<nsIBoxObject> box;
        xulElement->GetBoxObject(getter_AddRefs(box));
        nsCOMPtr<nsITreeBoxObject> treeBox(do_QueryInterface(box));
        if (treeBox)
          return treeBox.forget();
      }
    }
    currentContent = currentContent->GetParent();
  }

  return nullptr;
}