//------------------------------------------------------------------------------
// emImageFile.h
//
// Copyright (C) 2004-2008,2016 Oliver Hamann.
//
// Homepage: http://eaglemode.sourceforge.net/
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License version 3 as published by the
// Free Software Foundation.
//
// 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 version 3 for
// more details.
//
// You should have received a copy of the GNU General Public License version 3
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//------------------------------------------------------------------------------
#ifndef emImageFile_h
#define emImageFile_h
#ifndef emFilePanel_h
#include <emCore/emFilePanel.h>
#endif
//==============================================================================
//============================== emImageFileModel ==============================
//==============================================================================
class emImageFileModel : public emFileModel {
public:
// Abstract base class for an emFileModel on an image file. Derived
// classes still have to overload and implement the file model methods
// for loading and saving. If one of the set methods below is called,
// the state of the file model is set to FS_UNSAVED. Remember, if the
// state was FS_SAVING, the file will be corrupted, because the saving
// is aborted.
const emImage & GetImage() const;
void SetImage(const emImage & image);
// The image.
const emString & GetComment() const;
void SetComment(const emString & comment);
// A comment on the image, stored in the file. May not be
// supported by every derived class.
const emString & GetFileFormatInfo() const;
void SetFileFormatInfo(const emString & fileFormatInfo);
// User-readable Information about the file format. Setting this
// may not be useful.
const emSignal & GetChangeSignal() const;
// Signaled on every change of the image, the comment or the
// file format info.
protected:
emImageFileModel(emContext & context, const emString & name);
virtual ~emImageFileModel();
virtual void ResetData();
// Overloaded from emFileModel. This clears the image, the
// comment and the file format info, and it fires the signal.
emImage Image;
emString Comment;
emString FileFormatInfo;
// To be modified directly by the implementation of
// TryStartLoading and/or TryContinueLoading (do not call the
// set methods therein, because they set the file state to
// FS_UNSAVED).
emSignal ChangeSignal;
// To be signaled by the implementation of TryStartLoading
// and/or TryContinueLoading.
};
inline const emImage & emImageFileModel::GetImage() const
{
return Image;
}
inline const emString & emImageFileModel::GetComment() const
{
return Comment;
}
inline const emString & emImageFileModel::GetFileFormatInfo() const
{
return FileFormatInfo;
}
inline const emSignal & emImageFileModel::GetChangeSignal() const
{
return ChangeSignal;
}
//==============================================================================
//============================== emImageFilePanel ==============================
//==============================================================================
class emImageFilePanel : public emFilePanel {
public:
// Panel for showing an emImageFileModel.
emImageFilePanel(ParentArg parent, const emString & name,
emImageFileModel * fileModel=NULL,
bool updateFileModel=true);
virtual void SetFileModel(emFileModel * fileModel,
bool updateFileModel=true);
virtual emString GetIconFileName() const;
virtual void GetEssenceRect(double * pX, double * pY,
double * pW, double * pH) const;
protected:
virtual bool Cycle();
virtual bool IsOpaque() const;
virtual void Paint(const emPainter & painter, emColor canvasColor) const;
virtual emPanel * CreateControlPanel(ParentArg parent,
const emString & name);
};
#endif