/****************************************************************************
** Dooble - The Secure Internet Web Browser
**
** Copyright (c) 2008, 2009, 2010, 2011, 2012 Alexis Megas,
** Gunther van Dooble, and the Dooble Team.
** All rights reserved.
**
** License: GPL2 only:
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; version 2 of the License only.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
** or see here: http://www.gnu.org/licenses/gpl.html
**
** For the WebKit library, please see: http://webkit.org.
**
** THE CODE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY
** EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
** GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
** IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS APPLICATION, EVEN IF ADVISED
** OF THE POSSIBILITY OF SUCH DAMAGE.
**
** Please report all praise, requests, bugs, and problems to the project
** team and administrators: http://sf.net/projects/dooble.
**
** You can find us listed at our project page. New team members are welcome.
** The name of the authors should not be used to endorse or promote products
** derived from Dooble without specific prior written permission.
** If you use this code for other projects, please let us know.
**
** Web sites:
**   http://sf.net/projects/dooble
**   http://dooble.sf.net
****************************************************************************/

#include <QUrl>
#include <QtDebug>
#include <QDropEvent>
#include <QStandardItemModel>

#include "dbookmarkstree.h"

dbookmarkstree::dbookmarkstree(QWidget *parent):QTreeView(parent)
{
}

void dbookmarkstree::dropEvent(QDropEvent *event)
{
  if(event && event->source() &&
     event->source()->objectName() == "dooble_bookmarks_table" &&
     event->mimeData())
    {
      QModelIndex index(indexAt(event->pos()));

      if(index.isValid())
	{
	  event->accept();
	  emit bookmarkReceived(index);
	}
      else
	{
	  event->ignore();
	  return;
	}
    }

  QTreeView::dropEvent(event);
}

void dbookmarkstree::dragMoveEvent(QDragMoveEvent *event)
{
  if(event && event->source() &&
     event->source()->objectName() == "dooble_bookmarks_tree" &&
     event->mimeData())
    {
      if(!indexAt(event->pos()).isValid())
	{
	  event->ignore();
	  return;
	}
    }

  QTreeView::dragMoveEvent(event);
}

void dbookmarkstree::dragEnterEvent(QDragEnterEvent *event)
{
  if(event && event->source() &&
     event->source()->objectName() == "dooble_bookmarks_table" &&
     event->mimeData())
    {
      if(!indexAt(event->pos()).isValid())
	{
	  event->ignore();
	  return;
	}
    }

  QTreeView::dragEnterEvent(event);
}

void dbookmarkstree::keyPressEvent(QKeyEvent *event)
{
  QTreeView::keyPressEvent(event);

  if(event)
    {
      int key = event->key();

      if(key == Qt::Key_Up ||
	 key == Qt::Key_Down ||
	 key == Qt::Key_PageUp ||
	 key == Qt::Key_PageDown)
	emit itemSelected(currentIndex());
    }
}

void dbookmarkstree::mouseReleaseEvent(QMouseEvent *event)
{
  /*
  ** The user may drag the mouse cursor over items without releasing
  ** the mouse button. If we don't listen on this event, we will
  ** not be able to capture the release point. If we don't capture
  ** the release point, the bookmarks for the current folder will
  ** not be displayed.
  */

  QTreeView::mouseReleaseEvent(event);

  if(event && indexAt(event->pos()).isValid())
    emit itemSelected(currentIndex());
}
