Empirical
Image.h
Go to the documentation of this file.
1 
11 #ifndef EMP_WEB_IMAGE_H
12 #define EMP_WEB_IMAGE_H
13 
14 #include "Widget.h"
15 
16 namespace emp {
17 namespace web {
18 
25 
26  class Image : public internal::WidgetFacet<Image> {
27  friend class ImageInfo;
28  protected:
29 
31  friend Image;
32 
33  protected:
34  std::string url;
35  std::string alt_text;
36 
37  ImageInfo(const std::string & in_id="") : internal::WidgetInfo(in_id) { ; }
38  ImageInfo(const ImageInfo &) = delete; // No copies of INFO allowed
39  ImageInfo & operator=(const ImageInfo &) = delete; // No copies of INFO allowed
40  virtual ~ImageInfo() { ; }
41 
42  std::string TypeName() const override { return "ImageInfo"; }
43  virtual bool IsImageInfo() const override { return true; }
44 
45  virtual void GetHTML(std::stringstream & HTML) override {
46  HTML.str(""); // Clear the current text.
47  HTML << "<img src=\"" << url << "\""
48  << " alt=\"" << alt_text << "\""
49  << " id=\"" << id << "\">";
50  }
51 
52  void UpdateURL(const std::string & in_url) {
53  url = in_url;
55  }
56  void UpdateAlt(const std::string & in_alt) {
57  alt_text = in_alt;
59  }
60 
61  public:
62  virtual std::string GetType() override { return "web::ButtonInfo"; }
63  };
64 
65 
66  // Get a properly cast version of indo.
67  ImageInfo * Info() { return (ImageInfo *) info; }
68  const ImageInfo * Info() const { return (ImageInfo *) info; }
69 
70  Image(ImageInfo * in_info) : WidgetFacet(in_info) { ; }
71 
72  public:
74  Image(const std::string & in_url, const std::string & in_id="")
75  : WidgetFacet(in_id)
76  {
77  info = new ImageInfo(in_id);
78  Info()->url = in_url;
79  }
80 
82  Image(const Image & in) : WidgetFacet(in) { ; }
83  Image(const Widget & in) : WidgetFacet(in) { emp_assert(info->IsImageInfo()); }
84  virtual ~Image() { ; }
85 
87 
89  Image & URL(const std::string & in_url) { Info()->UpdateURL(in_url); return *this; }
90 
92  Image & Alt(const std::string & in_alt) { Info()->UpdateAlt(in_alt); return *this; }
93  };
94 
95 }
96 }
97 
98 #endif
const ImageInfo * Info() const
Definition: Image.h:68
Definition: Widget.h:206
virtual void ReplaceHTML()
Definition: Widget.h:319
std::string url
Definition: Image.h:34
Definition: Image.h:26
Image(const Widget &in)
Definition: Image.h:83
WidgetInfo * info
Information associated with this widget.
Definition: Widget.h:82
WidgetFacet is a template that provides accessors into Widget with a derived return type...
Definition: Widget.h:543
std::string TypeName() const override
Debugging helpers...
Definition: Image.h:42
void UpdateAlt(const std::string &in_alt)
Definition: Image.h:56
virtual void GetHTML(std::stringstream &HTML) override
Definition: Image.h:45
virtual std::string GetType() override
Definition: Image.h:62
Definition: Widget.h:102
Widget::ActivityState state
Is this element active in DOM?
Definition: Widget.h:218
ImageInfo(const std::string &in_id="")
Definition: Image.h:37
std::string alt_text
Definition: Image.h:35
Image & URL(const std::string &in_url)
Update the URL for this image.
Definition: Image.h:89
Widgets maintain individual components on a web page and link to Elements.
void UpdateURL(const std::string &in_url)
Definition: Image.h:52
If we are in emscripten, make sure to include the header.
Definition: array.h:37
ImageInfo * Info()
Definition: Image.h:67
Widget is effectively a smart pointer to a WidgetInfo object, plus some basic accessors.
Definition: Widget.h:78
Image(const Image &in)
Link to an existing Image widget.
Definition: Image.h:82
#define emp_assert(...)
Definition: assert.h:199
virtual bool IsImageInfo() const
Definition: Widget.h:242
Image(const std::string &in_url, const std::string &in_id="")
Create a new image, indicating the URL to load from.
Definition: Image.h:74
Image(ImageInfo *in_info)
Definition: Image.h:70
virtual bool IsImageInfo() const override
Definition: Image.h:43
ImageInfo & operator=(const ImageInfo &)=delete
virtual ~Image()
Definition: Image.h:84
virtual ~ImageInfo()
Definition: Image.h:40
Image & Alt(const std::string &in_alt)
Add Alt-text for this image.
Definition: Image.h:92
Definition: Image.h:30
WidgetFacet(const std::string &in_id="")
WidgetFacet cannot be built unless within derived class, so constructors are protected.
Definition: Widget.h:546