23 #include "stringKeyMap.h"    29 #include "dimension.h"    49 #include "stringKeyMap.h"    62   using classdesc::shared_ptr;
    66   struct CallableFunction;
    67   class VariableInstanceList;
    78     enum StateFlags {is_edited=1, reset_needed=2, fullEqnDisplay_needed=4};
    79     int flags=reset_needed;
    82     static constexpr std::chrono::milliseconds resetNowThreshold{500};
    85     static constexpr std::chrono::milliseconds resetPostponedThreshold{1500};
    86     std::chrono::time_point<std::chrono::system_clock> resetAt=std::chrono::time_point<std::chrono::system_clock>::max();
    90     int busyCursorStack=0;
   125     std::string diagnoseNonFinite() 
const;
   128     void logVariables() 
const;
   132     bool m_multipleEquities=
false;    
   135     void balanceColumns(
const GodleyIcon& srcGodley, 
int srcCol, 
GodleyIcon& destGodley, 
int destCol) 
const;
   148       if (canvas.item && i<publicationTabs.size())
   149         publicationTabs[i].items.emplace_back(canvas.item);
   154     bool multipleEquities(
const bool& m);
   157     bool edited()
 const {
return flags & is_edited;}
   162       flags |= is_edited | fullEqnDisplay_needed;
   163       if (!running) flags|=reset_needed; 
   164       variablePane.update();
   165       canvas.requestRedraw();
   166       canvas.model.updateTimestamp();
   170     void requestRedraw();
   175       if (!flagStack.empty()) {
   176         flags=flagStack.back();
   177         flagStack.pop_back();
   195     void populateMissingDimensions();
   198     void populateMissingDimensionsFromVariable(
const VariableValue&, 
bool& incompatibleMessageDisplayed);
   200     {
bool dummy; populateMissingDimensionsFromVariable(v,dummy);}
   201     void renameDimension(
const std::string& oldName, 
const std::string& newName);
   221     void importDuplicateColumn(
GodleyTable& srcTable, 
int srcCol);
   224     void balanceDuplicateColumns(
const GodleyIcon& srcTable, 
int srcCol);
   226     std::vector<std::string> allGodleyFlowVars() 
const;
   230       equationDisplay(*this) {
   231       lastRedraw=boost::posix_time::microsec_clock::local_time();
   232       model->iHeight(std::numeric_limits<float>::max());
   233       model->iWidth(std::numeric_limits<float>::max());
   235       publicationTabs.emplace_back(
"Publication");
   240     Exclude<std::map<std::string, std::shared_ptr<CallableFunction>>> 
userFunctions;
   245     void clearAllMaps(
bool clearHistory);
   253     static void saveGroupAsFile(
const Group&, 
const string& fileName);
   255     {
if (
auto g=dynamic_cast<Group*>(canvas.item.get())) saveGroupAsFile(*g,fileName);}
   270     void insertGroupFromFile(
const string& file);
   272     void makeVariablesConsistent();
   274     void imposeDimensions();
   277     void garbageCollect();
   281     bool cycleCheck() 
const;
   285     void openLogFile(
const string&);
   295     void constructEquations();
   297     void dimensionalAnalysis() 
const;
   299     void deleteAllUnits();
   304     bool checkEquationOrder() 
const;
   310     std::vector<double> step();  
   313     void save(
const std::string& filename);
   316     void load(
const std::string& filename);
   318     static void exportSchema(
const std::string& filename, 
int schemaLevel=1);
   321     void displayErrorItem(
const Item& 
op) 
const;
   326       if (ravelCAPI::Ravel::available())
   328           int d=ravelCAPI::Ravel::daysUntilExpired();
   329           return ravelCAPI::Ravel::version() + 
": "+((d>=0)?(
"Expires in "+std::to_string(d)+
" day"+(d!=1?
"s":
"")): 
"Expired");
   331       else return "unavailable";
   334     static bool ravelExpired() {
return  ravelCAPI::available() && ravelCAPI::daysUntilExpired()<0;}
   339     unsigned maxHistory{100}; 
   343     std::string 
autoSaveFile()
 const {
return autoSaver? autoSaver->fileName: std::string();}
   346     void setAutoSaveFile(
const std::string& file);
   360     bool commandHook(
const std::string& command, 
unsigned nargs);
   370     bool doPushHistory=
true;
   374     long undo(
int changes=1);
   385     bool inputWired(
const std::string& name)
 const {
return definingVar(name).get();}
   401     {canvas.renderToPNGCropped(filename,z);}
   407     void renderAllPlotsAsSVG(
const string& prefix) 
const;
   409     void exportAllPlotsAsCSV(
const string& prefix) 
const;
   412     void setAllDEmode(
bool);
   414     void srand(
int seed) {::srand(seed);}
   417     bool displayValues=
false;
   424     void importVensim(
const std::string&);
   427     void redrawAllGodleyTables();
   433     virtual void progress(
const std::string& title,
int) {}
   453     static std::size_t physicalMem();
   458       PangoFontFamily **families;
   460       pango_font_map_list_families(pango_cairo_font_map_get_default(),
   462       for (
int i=0; i<num; ++i)
   463         r.push_back(pango_font_family_get_name(families[i]));
   465       std::sort(r.begin(),r.end());
   471     static std::string defaultFont();
   472     static std::string defaultFont(
const std::string& x);
   476     static double fontScale();
   477     static double fontScale(
double);
   483     void latex(
const std::string& filename, 
bool wrapLaTeXLines);
   485     void matlab(
const std::string& filename) {
   486       if (cycleCheck()) 
throw error(
"cyclic network detected");
   487       ofstream 
f(filename);
   495     static std::vector<std::string> availableOperations();
   500     static std::vector<std::string> variableTypes();
   502     static std::vector<std::string> assetClasses();
   506     void openGroupInCanvas() {canvas.openGroupInCanvas(canvas.item);}
   513     void listAllInstances();
   521     {
return checkMemAllocation(std::numeric_limits<size_t>::max());}
   526     char getc()
 const {
return std::getc(stdin);}
   529     void setDefinition(
const std::string& 
valueId, 
const std::string& definition);
   532     void reloadAllCSVParameters();
   551 #pragma omit pack minsky::MinskyExclude   552 #pragma omit unpack minsky::MinskyExclude   553 #pragma omit TCL_obj minsky::MinskyExclude   554 #pragma omit xml_pack minsky::MinskyExclude   555 #pragma omit xml_unpack minsky::MinskyExclude   556 #pragma omit xsd_generate minsky::MinskyExclude   558 #pragma omit xml_pack minsky::Integral   559 #pragma omit xml_unpack minsky::Integral   561 #pragma omit pack minsky::MinskyMatrix   562 #pragma omit unpack minsky::MinskyMatrix   563 #pragma omit xml_pack minsky::MinskyMatrix   564 #pragma omit xml_unpack minsky::MinskyMatrix   565 #pragma omit xsd_generate minsky::MinskyMatrix virtual void message(const std::string &)
display a message in a popup box on the GUI 
static SVGRenderer svgRenderer
std::set< RenderNativeWindow * > nativeWindowsToRedraw
record nativeWindows that have requested redrawing 
PannableTab< EquationDisplay > equationDisplay
void matlab(const std::string &filename)
std::string latexToPango(const char *s)
string latex2pango(const std::string &x)
void pushFlags()
push and pop state of the flags 
void setGodleyIconResource(const string &s)
vector< string > listFonts() const
char getc() const
Used to implement a pause until return pressed for attaching debugger purposes. 
virtual void setBusyCursor()
set/clear busy cursor in GUI 
static bool ravelExpired()
std::set< string > logVarList
set of variables (valueIds) to log 
Clipboard clipboard
clipboard manager 
virtual void clearBusyCursor()
MinskyExclude & operator=(const MinskyExclude &)
void closeLogFile()
closes log file 
bool inputWired(const std::string &name) const
returns true if any variable of name name has a wired input 
VariableValues variableValues
virtual void runItemDeletedCallback(const Item &)
run callback attached to item 
std::vector< int > flagStack
std::map< Units, double > maxValue
stash the maximum absolute value obtained by a dimensioned quantity 
void checkPushHistory()
called periodically to ensure history up to date 
virtual MemCheckResult checkMemAllocation(size_t bytes) const
MemCheckResult
check whether to proceed or abort, given a request to allocate bytes of memory. Implemented in Minsky...
bool edited() const
reflects whether the model has been changed since last save 
std::map< Units, double > maxFlowValue
void renderCanvasToEMF(const std::string &filename)
render canvas to a EMF image file (Windows only) 
void setResource(const std::string &resource)
initialise object from an SVG file 
void addNewPublicationTab(const std::string &name)
static SVGRenderer svgRenderer
SVG icon to display when not in editor mode. 
static int daysUntilRavelExpires()
bool loggingEnabled() const
returns true if logging is in operation 
void setLockIconResource(const string &locked, const string &unlocked)
void nameCurrentItem(const std::string &name)
string valueId(const string &name)
construct a valueId from fully qualified name @ name should not be canonicalised 
void renderCanvasToSVG(const std::string &filename)
render canvas to an SVG file 
bool resetIfFlagged() override
checks whether a reset is required, and resets the simulation if so 
bool clipboardEmpty() const
return true if nothing available in clipboard 
void markEdited()
indicate model has been changed since last saved 
void renderCanvasToPS(const std::string &filename)
render canvas to a postscript file 
static bool ravelAvailable()
virtual CmdData getCommandData(const std::string &command) const
return meta information on a given command 
bool reset_flag() const
true if reset needs to be called prior to numerical integration 
VariablePane variablePane
static OperationType::Group classifyOp(OperationType::Type o)
classdesc::StringKeyMap< std::vector< OperationType::Type > > AvailableOperationsMapping
static SVGRenderer svgRenderer
SVG icon to display when not in editor mode. 
void populateMissingDimensionsFromVariable(const VariableValue &v)
std::string autoSaveFile() const
name of an auto save file 
bool triggerCheckMemAllocationCallback() const
trigger checkMem callback for testing purposes 
std::deque< classdesc::pack_t > history
save history of model for undo 
void renderCanvasToPNG(const std::string &filename)
render canvas to a PNG image file 
Exclude< ptime > lastRedraw
static SVGRenderer lockedIcon
An RAII wrapper around jtanx's libclipboard (https://github.com/jtanx/libclipboard) ...
static std::string ravelVersion()
void setRavelIconResource(const string &s)
std::vector< PubTab > publicationTabs
Mixin implementing common panning functionality in tabs. 
virtual void bookmarkRefresh()
refresh the bookmark menu after changes 
shared_ptr< ofstream > outputDataFile
#define CLASSDESC_ACCESS(type)
std::shared_ptr< VariableInstanceList > variableInstanceList
supports navigation to all instances of current variable 
void addCanvasItemToPublicationTab(size_t i)
const Minsky & cminsky()
const version to help in const correctness 
ostream & matlab(ostream &) const
render as MatLab code create equations suitable for Runge-Kutta solver 
bool multipleEquities() const
SVGRenderer histogramResource
void setGroupIconResource(const string &s)
static const std::string minskyVersion
void saveCanvasItemAsFile(const string &fileName) const
Exclude< std::map< std::string, std::shared_ptr< CallableFunction > > > userFunctions
virtual void resetScroll()
reset main window scroll bars after model has been panned 
static SVGRenderer unlockedIcon
virtual void progress(const std::string &title, int)
set progress bar, out of 100, labelling the progress bar with title 
std::map< std::string, std::weak_ptr< Item > > namedItems
void openModelInCanvas()
reinitialises canvas to the toplevel group 
MinskyExclude(const MinskyExclude &)
std::shared_ptr< Group > GroupPtr
void itemFromNamedItem(const std::string &name)
PhillipsDiagram phillipsDiagram
RAII set the minsky object to a different one for the current scope. 
string latex(double)
convert double to a LaTeX string representing that value 
void renderCanvasToPDF(const std::string &filename)
render canvas to a PDF file 
Minsky & minsky()
global minsky object 
void popFlags()
push and pop state of the flags 
void srand(int seed)
set std library RNG seed 
void saveSelectionAsFile(const string &fileName) const
static std::string ecolabVersion()
std::chrono::milliseconds resetDuration
void renderCanvasToPNG(const std::string &filename, const Canvas::ZoomCrop &z)
Render canvas to a PNG file filename, scaling the canvas temporarily by zoom, shifts it to left...
static Group classify(Type t)
std::string fileVersion
Minsky version file was saved under. 
unique_ptr< BackgroundSaver > autoSaver
void clearHistory()
clear history