root/src/apps/icon-o-matic/document/Document.h
/*
 * Copyright 2006-2007, Haiku.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Stephan Aßmus <superstippi@gmx.de>
 */
#ifndef DOCUMENT_H
#define DOCUMENT_H


#include "IconBuild.h"
#include "Observable.h"
#include "RWLocker.h"

#include <String.h>


struct entry_ref;

_BEGIN_ICON_NAMESPACE
        class Icon;
_END_ICON_NAMESPACE

class CommandStack;
class DocumentSaver;
class Selection;

class Document : public RWLocker,
                                 public Observable {
 public:
                                                                Document(const char* name = NULL);
        virtual                                         ~Document();

        inline  ::CommandStack*         CommandStack() const
                                                                        { return fCommandStack; }

        inline  ::Selection*            Selection() const
                                                                        { return fSelection; }

                        void                            SetName(const char* name);
                        const char*                     Name() const;

                        void                            SetNativeSaver(::DocumentSaver* saver);
        inline  ::DocumentSaver*        NativeSaver() const
                                                                        { return fNativeSaver; }

                        void                            SetExportSaver(::DocumentSaver* saver);
        inline  ::DocumentSaver*        ExportSaver() const
                                                                        { return fExportSaver; }

                        void                            SetIcon(_ICON_NAMESPACE Icon* icon);
        inline  _ICON_NAMESPACE Icon* Icon() const
                                                                        { return fIcon; }

                        void                            MakeEmpty(bool includingSavers = true);

                        bool                            IsEmpty() const;

 private:
                        _ICON_NAMESPACE Icon* fIcon;
                        ::CommandStack*         fCommandStack;
                        ::Selection*            fSelection;

                        BString                         fName;

                        ::DocumentSaver*        fNativeSaver;
                        ::DocumentSaver*        fExportSaver;
};

#endif // DOCUMENT_H