/*	SCCS Id: @(#)tileedit.h	3.4	1999/11/19	*/
/* Copyright (c) Warwick Allison, 1999. */
/* NetHack may be freely redistributed.  See license for details. */
#ifndef QNHTILEEDIT_H
#define QNHTILEEDIT_H

#include <qtabwidget.h>
#include <qpixmap.h>
#include <qimage.h>
#include <qvbox.h>

class TilePickerTab : public QWidget {
    Q_OBJECT
public:
    TilePickerTab(const char* basename, int id, QWidget* parent);

    bool save();
    int numTiles();

signals:
    void pick(const QImage&);
    void pickName(const QString&);

public slots:
    void setCurrent(const QImage&);

protected:
    void paintEvent( QPaintEvent* );
    QSize sizeHint() const;
    void mousePressEvent(QMouseEvent*);

private:
    QString filename;
    int id;
    int last_pick;
    int num;
    QPixmap pixmap;
    QImage image;
};

class TilePicker : public QTabWidget {
    Q_OBJECT
public:
    TilePicker(QWidget* parent);

    void setTile(int tilenum, const QImage&);

signals:
    void pick(const QImage&);
    void pickName(const QString&);

public slots:
    void setCurrent(const QImage&);
    void save();
};

class TrivialTileEditor : public QWidget {
    Q_OBJECT
public:
    TrivialTileEditor( QWidget* parent );
    const QImage& image() const;

signals:
    void edited(const QImage&);
    void pick(QRgb);

public slots:
    void setColor(QRgb);
    void setImage( const QImage& );

protected:
    void paintEvent( QPaintEvent* );
    void mousePressEvent(QMouseEvent*);
    void mouseReleaseEvent(QMouseEvent*);
    void mouseMoveEvent(QMouseEvent*);
    QSize sizeHint() const;
    QSize sizeForWidth(int) const;
    QSizePolicy sizePolicy() const;

private:
    void fill(QPainter& painter, QPoint p, uchar from);
    QImage img;
    QColor pen;
    int penpixel;
    void paintPoint(QPainter& painter, QPoint p);
    QPoint screenPoint(QPoint) const;
    QPoint imagePoint(QPoint) const;
};

class TilePalette : public QWidget {
    Q_OBJECT
public:
    TilePalette( QWidget* parent );
    ~TilePalette();
    void setFromImage( const QImage& );
protected:
    void paintEvent( QPaintEvent* );
    void mousePressEvent(QMouseEvent*);
    QSize sizeHint() const;
    QSizePolicy sizePolicy() const;
signals:
    void pick(QRgb);
public slots:
    void setColor(QRgb);
private:
    int num;
    QRgb *rgb;
};

class TileEditor : public QVBox {
    Q_OBJECT
public:
    TileEditor(QWidget* parent);

    const QImage& image() const;

signals:
    void edited(const QImage&);

public slots:
    void edit(const QImage&);

private:
    TrivialTileEditor editor;
    TilePalette palette;
};

#endif
