File:  [mozdev] / chimera / BookmarksButton.mm
Revision 1.9: download - view: text, annotated - select for diffs - revision graph
Sat Apr 20 01:18:54 2002 UTC (15 years, 7 months ago) by hyatt
Branches: MAIN
CVS tags: HEAD
Make menus understand bookmark groups.

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* 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 the Initial Developer are Copyright (C) 2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

#import "BookmarksButton.h"
#include "nsIDOMElement.h"
#include "nsIContent.h"
#include "nsString.h"
#import "BookmarksService.h"

@implementation BookmarksButton

- (id)initWithFrame:(NSRect)frame {
    if ( (self = [super initWithFrame:frame]) ) {
        mElement = nsnull;
        [self setBezelStyle: NSRegularSquareBezelStyle];
        [self setBordered: NO];
        [self setImagePosition: NSImageLeft];
        [self setRefusesFirstResponder: YES];
        [self setFont: [NSFont labelFontOfSize: 11.0]];
    }
  return self;
}

-(IBAction)openBookmark:(id)aSender
{
  // See if we're a group.
  nsAutoString group;
  mElement->GetAttribute(NS_LITERAL_STRING("group"), group);
  if (!group.IsEmpty()) {
    BookmarksService::OpenBookmarkGroup([[[self window] windowController] getTabBrowser], mElement);
    return;
  }
  
  // Get the href attribute.  This is the URL we want to load.
  nsAutoString href;
  mElement->GetAttribute(NS_LITERAL_STRING("href"), href);
  nsCAutoString cref; cref.AssignWithConversion(href);
  if (cref.IsEmpty())
    return;

  NSString* url = [NSString stringWithCString: cref.get()];

  // Now load the URL in the window.
  [[[self window] windowController] loadURL:[NSURL URLWithString: url]];

  // Focus and activate our content area.
  [[[[[self window] windowController] getMyBrowserView] getBrowserView] setActive: YES];
}

-(void)drawRect:(NSRect)aRect
{
  [super drawRect: aRect];
}

-(NSMenu*)menuForEvent:(NSEvent*)aEvent
{
  return [[self superview] menu];
}

-(void)mouseDown:(NSEvent*)aEvent
{
  if (mIsFolder) {
    nsCOMPtr<nsIContent> content(do_QueryInterface(mElement));
    NSMenu* menu = BookmarksService::LocateMenu(content);
    [NSMenu popUpContextMenu: menu withEvent: aEvent forView: self];
  }
  else
    [super mouseDown: aEvent];
}

-(void)setElement: (nsIDOMElement*)aElt
{
  mElement = aElt;
  nsAutoString tag;
  mElement->GetLocalName(tag);

  nsAutoString group;
  mElement->GetAttribute(NS_LITERAL_STRING("group"), group);

  if (!group.IsEmpty()) {
    mIsFolder = NO;
    [self setImage: [NSImage imageNamed: @"smallbookmark"]];
    [self setAction: @selector(openBookmark:)];
    [self setTarget: self];
  }
  else if (tag.Equals(NS_LITERAL_STRING("folder"))) {
    [self setImage: [NSImage imageNamed: @"folder"]];
    mIsFolder = YES;
  }
  else {
    mIsFolder = NO;
    [self setImage: [NSImage imageNamed: @"smallbookmark"]];
    [self setAction: @selector(openBookmark:)];
    [self setTarget: self];
  }
  
  nsAutoString name;
  mElement->GetAttribute(NS_LITERAL_STRING("name"), name);
  [self setTitle: [NSString stringWithCharacters: name.get() length: nsCRT::strlen(name.get())]];
}

-(nsIDOMElement*)element
{
  return mElement;
}

@end

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>