/* ============================================================
 *
 * This file is a part of digiKam project
 * http://www.digikam.org
 *
 * Date        : 2005-05-28
 * Description : implementation of folder view.
 *
 * Copyright (C) 2005-2006 by Joern Ahrens <joern.ahrens@kdemail.net>
 * Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
 *
 * 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;
 * either version 2, or (at your option)
 * any later version.
 *
 * 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.
 *
 * ============================================================ */

/** @file foldeview.h */

#ifndef _FOLDERVIEW_H_
#define _FOLDERVIEW_H_

// TQt includes.

#include <tqlistview.h>

// Local includes.

#include "digikam_export.h"
#include "album.h"

namespace Digikam
{

class FolderViewPriv;
class FolderItem;

/**
 * \class FolderView
 * \brief Base class for a tree view
 */


class DIGIKAM_EXPORT FolderView : public TQListView
{
    TQ_OBJECT

public:

    enum CollapseMode
    {
        /*
         * Collapse the folder view and re-open the current viewed album (default mode)
         * In this mode, all root items are collapsed, then the one containing
         * the currently selected album is expand again.
         * This mode will make sure that the selected album is visible in the folder tree.
         */
        RestoreCurrentAlbum,
        /*
         * Collapse the folder view but omit the root item.
         * In this mode all items in the folder view are collapsed,
         * and the first root item is expanded again (My Tags / My Albums etc)
         */
        OmitRoot
    };

    FolderView(TQWidget *parent, const char *name = "FolderView");
    virtual ~FolderView();

    void setActive(bool val);
    bool active() const;

    int      itemHeight() const;
    TQRect    itemRect(TQListViewItem *item) const;
    TQPixmap  itemBasePixmapRegular() const;
    TQPixmap  itemBasePixmapSelected() const;

    virtual void collapseView(CollapseMode mode = RestoreCurrentAlbum);

protected:

    void contentsMousePressEvent(TQMouseEvent *e);
    void contentsMouseReleaseEvent(TQMouseEvent *e);
    void contentsMouseMoveEvent(TQMouseEvent *e);
    void contentsDragEnterEvent(TQDragEnterEvent *e);
    void contentsDragMoveEvent(TQDragMoveEvent *e);
    void contentsDragLeaveEvent(TQDragLeaveEvent * e);
    void contentsDropEvent(TQDropEvent *e);

    virtual bool acceptDrop(const TQDropEvent *e) const;

    void startDrag();
    TQListViewItem* dragItem() const;

    void resizeEvent(TQResizeEvent* e);
    void fontChange(const TQFont& oldFont);

    virtual void selectItem(int id);

    /**
     * load the last state from the view from disk
     */
    virtual void loadViewState();

    /**
     * writes the views state to disk
     */
    virtual void saveViewState();

protected slots:

    virtual void slotSelectionChanged();
    virtual void slotAllAlbumsLoaded();

private slots:

    void slotThemeChanged();
    void slotIconSizeChanged();

private:

    bool mouseInItemRect(TQListViewItem* item, int x) const;

    FolderViewPriv *d;
};

}  // namespace Digikam

#endif // _FOLDERVIEW_H
