wxMaxima
Loading...
Searching...
No Matches
AnimationCell.h
Go to the documentation of this file.
1// -*- mode: c++; c-file-style: "linux"; c-basic-offset: 2; indent-tabs-mode: nil -*-
2//
3// Copyright (C) 2007-2015 Andrej Vodopivec <andrej.vodopivec@gmail.com>
4// (C) 2014-2016 Gunter Königsmann <wxMaxima@physikbuch.de>
5//
6// This program is free software; you can redistribute it and/or modify
7// it under the terms of the GNU General Public License as published by
8// the Free Software Foundation; either version 2 of the License, or
9// (at your option) any later version.
10//
11// This program is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15//
16//
17// You should have received a copy of the GNU General Public License
18// along with this program; if not, write to the Free Software
19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20//
21// SPDX-License-Identifier: GPL-2.0+
22
29#ifndef ANIMATIONCELL_H
30#define ANIMATIONCELL_H
31
32#include "Cell.h"
33#include "Image.h"
34#include "ImgCellBase.h"
35#include <memory>
36#include <wx/image.h>
37#include <wx/timer.h>
38
39#include <wx/fs_arc.h>
40#include <wx/mstream.h>
41#include <wx/wfstream.h>
42
43#include <vector>
44
45class AnimationCell final : public ImgCellBase
46{
47public:
60 const wxString &wxmxFile, double framerate = -1);
61 AnimationCell(GroupCell *group, Configuration *config, double framerate = -1);
62 AnimationCell(GroupCell *group, const AnimationCell &cell);
64 AnimationCell(GroupCell *group, Configuration *config, const wxMemoryBuffer &image, const wxString &type);
65 AnimationCell(GroupCell *group, Configuration *config, const wxString &image, bool remove);
66 std::unique_ptr<Cell> Copy(GroupCell *group) const override;
67 void operator=(const AnimationCell&) = delete;
68 AnimationCell(const AnimationCell&) = delete;
69
70 void SetConfiguration(Configuration *config) override;
71 int GetPPI() const override {if(IsOk()) return m_images.at(m_displayed)->GetPPI(); else return 0;}
72 size_t GetOriginalWidth() const override {
73 if(IsOk())return m_images.at(m_displayed)->GetOriginalWidth(); else return 0;}
74 size_t GetOriginalHeight() const override {
75 if(IsOk())return m_images.at(m_displayed)->GetOriginalHeight(); else return 0;}
76 wxString GetExtension() const override
77 { if (IsOk())return m_images.at(m_displayed)->GetExtension(); else return wxEmptyString; }
78
79 const CellTypeInfo &GetInfo() override;
80 virtual ~AnimationCell();
81 int Length() const {return m_images.size();}
82 void LoadImages(wxMemoryBuffer imageData);
83 void LoadImages(wxString imageFile);
85 void SetPPI(int ppi) override;
87 static wxDataFormat m_gifFormat;
88
90 bool CanExportSVG() const override {return (m_images.at(m_displayed) != NULL) && m_images.at(m_displayed)->CanExportSVG();}
91
93 class GifDataObject : public wxCustomDataObject
94 {
95 public:
96 explicit GifDataObject(const wxMemoryOutputStream &str);
97
99
100 private:
101 wxCharBuffer m_databuf;
102 };
103
104 bool IsOk() const;
105
106 const wxString GetToolTip(wxPoint point) const override;
107
113 void ClearCache() override;
114
115 void LoadImages(wxArrayString images, bool deleteRead);
116
117 int GetDisplayedIndex() const { return m_displayed; }
118
119 wxImage GetBitmap(int n) const
120 { return m_images.at(n)->GetUnscaledBitmap().ConvertToImage(); }
121
122 void SetDisplayedIndex(int ind);
123
125 wxSize ToImageFile(wxString file) override;
126
128 wxSize ToGif(wxString file);
129
130 bool CopyToClipboard() const override;
131
134
140 double GetFrameRate() const;
141
146 void ReloadTimer();
147
152 void StopTimer();
153
159 double SetFrameRate(double Freq);
160
161 bool AnimationRunning() const { return m_animationRunning; }
162 void AnimationRunning(bool run);
163 void ToggleAnimationRunning(){AnimationRunning(!AnimationRunning());}
164 bool CanPopOut() const override
165 { return m_images.at(m_displayed) && (m_images.at(m_displayed)->HasGnuplotSource()); }
166
167 void GnuplotSource(int image, wxString gnuplotFilename, wxString dataFilename,
168 const wxString &wxmxFile)
169 { m_images.at(image)->GnuplotSource(std::move(gnuplotFilename),
170 std::move(dataFilename), wxmxFile); }
171 void CompressedGnuplotSource(int image, wxString gnuplotFilename, wxString dataFilename,
172 const wxString &wxmxFile)
173 { m_images.at(image)->CompressedGnuplotSource(std::move(gnuplotFilename),
174 std::move(dataFilename),
175 wxmxFile); }
176
177 wxString GnuplotSource() const override
178 {
179 if (!m_images.at(m_displayed))
180 return wxEmptyString;
181 else
182 return m_images.at(m_displayed)->GnuplotSource();
183 }
184
185private:
186 ViewCellPointers *const m_viewCellPointers = GetViewCellPointers(); // must come before m_timer (!)
187 std::unique_ptr<wxTimer> m_timer;
188 std::vector<std::shared_ptr<Image>> m_images;
189
196 double m_framerate = -1;
197 int m_displayed = 0;
198 int m_imageBorderWidth = 0;
199
200//** Bitfield objects (1 bytes)
201//**
202 void InitBitFields_AnimationCell()
203 { // Keep the initialization order below same as the order
204 // of bit fields in this class!
205 m_animationRunning = true;
206 m_drawBoundingBox = false;
207 }
208
209 bool m_animationRunning : 1 /* InitBitFields_AnimationCell */;
210 bool m_drawBoundingBox : 1 /* InitBitFields_AnimationCell */;
211 wxString m_wxmxFile;
212
213 int GetImageBorderWidth() const override { return m_imageBorderWidth; }
214
215 void Recalculate(const AFontSize fontsize) const override;
216
218 void SetCurrentPoint(wxPoint point) const override;
219 void Draw(wxDC *dc, wxDC *antialiassingDC) override;
220
221 wxString ToMatlab() const override;
222 wxString ToMathML() const override;
223 wxString ToRTF() const override;
224 wxString ToString() const override;
225 wxString ToTeX() const override;
226 wxString ToXML() const override;
227
228 wxCoord GetMaxWidth() const override;
229 wxCoord GetHeightList() const override { return m_height; }
230 void SetMaxWidth(wxCoord width) override;
231 void SetMaxHeight(wxCoord height) override;
232
233 void DrawBoundingBox(wxDC &WXUNUSED(dc), bool WXUNUSED(all) = false) override
234 { m_drawBoundingBox = true; }
235};
236
237#endif // ANIMATIONCELL_H
The definition of the base class of all cells the worksheet consists of.
This file declares the class Image.
A Type-Safe Fixed-Point Font Size.
Definition: FontAttribs.h:97
A Gif object for the clipboard.
Definition: AnimationCell.h:94
Definition: AnimationCell.h:46
wxString GetExtension() const override
Returns the file name extension that matches the image type.
Definition: AnimationCell.h:76
bool CopyToClipboard() const override
Copies the cell to the system's clipboard.
Definition: AnimationCell.cpp:540
void ClearCache() override
Remove all cached scaled images from memory.
Definition: AnimationCell.cpp:528
AnimationCell(GroupCell *group, Configuration *config, const wxMemoryBuffer &image, const wxString &type)
A constructor that loads the compressed file from a wxMemoryBuffer.
bool CanPopOut() const override
Can this cell be popped out interactively in gnuplot?
Definition: AnimationCell.h:164
double SetFrameRate(double Freq)
Set the frame rate of this AnimationCell [in Hz].
Definition: AnimationCell.cpp:157
wxSize ToGif(wxString file)
Exports the whole animation as animated gif.
Definition: AnimationCell.cpp:490
void SetPPI(int ppi) override
Set the animation's resolution.
Definition: AnimationCell.cpp:406
wxSize ToImageFile(wxString file) override
Exports the image the animation currently displays.
Definition: AnimationCell.cpp:412
wxString GnuplotSource() const override
The name of the file with gnuplot commands that created this file.
Definition: AnimationCell.h:177
void StopTimer()
Stops the timer.
Definition: AnimationCell.cpp:142
std::unique_ptr< Cell > Copy(GroupCell *group) const override
Create a copy of this cell.
void ReloadTimer()
Reload the animation timer starting and instantiating and registering it if necessary.
Definition: AnimationCell.cpp:131
bool CopyAnimationToClipboard()
Put the animation on the clipboard.
Definition: AnimationCell.cpp:566
double GetFrameRate() const
Get the frame rate of this AnimationCell [in Hz].
Definition: AnimationCell.cpp:113
const CellTypeInfo & GetInfo() override
Returns the information about this cell's type.
void SetConfiguration(Configuration *config) override
Tell this cell to use the configuration object config.
Definition: AnimationCell.cpp:99
const wxString GetToolTip(wxPoint point) const override
Returns the ToolTip this cell provides at a given point.
Definition: AnimationCell.cpp:479
static wxDataFormat m_gifFormat
A class that publishes wxm data to the clipboard.
Definition: AnimationCell.h:87
bool CanExportSVG() const override
Can the current image be exported in SVG format?
Definition: AnimationCell.h:90
A class that carries information about the type of a cell.
Definition: Cell.h:93
CachedInteger< wxCoord > m_height
The height of this cell.
Definition: Cell.h:1118
virtual void SetCurrentPoint(wxPoint point) const
Pass 2: Arrangement.
Definition: Cell.cpp:515
ViewCellPointers * GetViewCellPointers() const
The transient view-state half of the cell-pointer registry this cell uses.
Definition: Cell.cpp:75
The configuration storage for the current worksheet.
Definition: Configuration.h:98
A cell grouping input (and, if there is one, also the output) cell to a foldable item.
Definition: GroupCell.h:88
Definition: ImgCellBase.h:42
The view/interaction half of the cell-pointer registry.
Definition: CellPointers.h:187