#ifndef WXSRESOURCE_H
#define WXSRESOURCE_H

#include "wxseditor.h"
#include "wxsglobals.h"
#include <wx/treectrl.h>

class wxsProject;
class wxSmith;

class wxsResource: public wxObject
{
	public:

        /** Ctor */
		wxsResource(wxsProject* Project,int EditMode);

		/** Dctor */
		virtual ~wxsResource();

		/** Getting current project */
		inline wxsProject* GetProject() { return Project; }

        /** Function opening this resource in eeditor window,
         *  if editor window already exists, it must be activated
         */
        void EditOpen();
        
        /** Function closing editor window, if window is closed, no action
         *  should be performed
         */
        void EditClose();
        
        /** Function returning currently openeditor, NULL if there's no one */
        inline wxsEditor* GetEditor() { return Editor; }
        
        /** Ckecking if this resource ecan be Previewed */
        virtual bool CanPreview() { return false; }
        
        /** This function should show preview in modal */
        virtual void ShowPreview() { }

        /** Getting resource name */
        virtual const wxString& GetResourceName() = 0;
        
        /** Notifying resource about content change */
        virtual void NotifyChange() { }
        
        /** Getting current edit mode */
        inline int GetEditMode() { return (int)EditMode & ~(int)wxsResBroken; }
        
        /** Setting Edit mode */
        inline void SetEditMode(int Mode) { EditMode = Mode; }

        /** Checking if this resource is broken */
        inline bool IsResBroken() { return (EditMode & wxsResBroken) != 0; }
        
        /** Changing broken flag */
        inline void SetResBroken(bool Broken) { EditMode = GetEditMode() | Broken ? wxsResBroken : 0; }
        
        /** Grtting current tree item in resource browser */
        inline wxTreeItemId GetTreeItemId() { return ItemId; }

    protected:
    
        /** Function which should create editor window.
         *
         *  Editor window shouldn't be created when call to this function is made
         */
        virtual wxsEditor* CreateEditor() = 0;
        
        /** Function notifying that editor has just been closed */
        virtual void EditorClosed() {}
        
        /** Function setting tree item in resource browser */
        inline void SetTreeItemId(wxTreeItemId Id) { ItemId = Id; }
        
    private:
    
        void EditorSaysHeIsClosing();
        friend class wxsEditor;
    
        wxsEditor* Editor;
        wxsProject* Project;
        int EditMode;
        wxTreeItemId ItemId;
        
};

#endif // WXSRESOURCE_H


syntax highlighted by Code2HTML, v. 0.9.1