Minsky
minsky::anonymous_namespace{addon.cc}::AddOnMinsky Struct Reference
Inheritance diagram for minsky::anonymous_namespace{addon.cc}::AddOnMinsky:
Inheritance graph
Collaboration diagram for minsky::anonymous_namespace{addon.cc}::AddOnMinsky:
Collaboration graph

Public Member Functions

 AddOnMinsky ()
 
 ~AddOnMinsky ()
 
Value queueCommand (Env env, string command, const json_pack_t &arguments)
 
string doCommand (const string &command, const json_pack_t &arguments)
 
void drawNativeWindows ()
 
void macOSXDrawNativeWindows ()
 
void macOSXLaunchDrawNativeWindows ()
 
void run ()
 
Value setMessageCallback (const Napi::CallbackInfo &info)
 
void message (const std::string &msg) override
 display a message in a popup box on the GUI More...
 
MemCheckResult checkMemAllocation (std::size_t bytes) const override
 
Value setBusyCursorCallback (const Napi::CallbackInfo &info)
 
void doBusyCursor (bool bc)
 
void setBusyCursor () override
 set/clear busy cursor in GUI More...
 
void clearBusyCursor () override
 
void progress (const string &title, int x) override
 set progress bar, out of 100, labelling the progress bar with title More...
 
Value setProgressCallback (const Napi::CallbackInfo &info)
 
void bookmarkRefresh () override
 refresh the bookmark menu after changes More...
 
Value setBookmarkRefreshCallback (const Napi::CallbackInfo &info)
 
void resetScroll () override
 reset main window scroll bars after model has been panned More...
 
Value setResetScrollCallback (const Napi::CallbackInfo &info)
 
void outOfMemoryHandler ()
 
- Public Member Functions inherited from minsky::RESTMinsky
CmdData getCommandData (const std::string &) const override
 return meta information on a given command More...
 
template<class RP >
void commandHook (const std::string &command, const RP &args)
 
 RESTMinsky ()
 
- Public Member Functions inherited from minsky::Minsky
void addNewPublicationTab (const std::string &name)
 
void addCanvasItemToPublicationTab (size_t i)
 
bool multipleEquities () const
 
bool multipleEquities (const bool &m)
 
bool edited () const
 reflects whether the model has been changed since last save More...
 
bool reset_flag () const
 true if reset needs to be called prior to numerical integration More...
 
void markEdited ()
 indicate model has been changed since last saved More...
 
void requestReset ()
 
void requestRedraw ()
 requests a redraw of the curren active tab More...
 
bool resetIfFlagged () override
 checks whether a reset is required, and resets the simulation if so More...
 
void populateMissingDimensions ()
 fills in dimensions table with all loaded ravel axes More...
 
void populateMissingDimensionsFromVariable (const VariableValue &, bool &incompatibleMessageDisplayed)
 populate missing dimensions from a variableValue More...
 
void populateMissingDimensionsFromVariable (const VariableValue &v)
 
void renameDimension (const std::string &oldName, const std::string &newName)
 
void setGodleyIconResource (const string &s)
 
void setGroupIconResource (const string &s)
 
void setLockIconResource (const string &locked, const string &unlocked)
 
void setRavelIconResource (const string &s)
 
std::set< string > matchingTableColumns (const GodleyIcon &currTable, GodleyAssetClass::AssetClass ac)
 
void importDuplicateColumn (GodleyTable &srcTable, int srcCol)
 find any duplicate column, and use it as a source column for balanceDuplicateColumns More...
 
void balanceDuplicateColumns (const GodleyIcon &srcTable, int srcCol)
 makes all duplicated columns consistent with srcTable, srcCol More...
 
std::vector< std::string > allGodleyFlowVars () const
 
 Minsky ()
 
 ~Minsky ()
 
void clearAllMaps (bool clearHistory)
 
void clearAllMaps ()
 
void clearAllMapsTCL ()
 
VariablePtr definingVar (const std::string &valueId) const
 returns reference to variable defining (ie input wired) for valueId More...
 
void saveCanvasItemAsFile (const string &fileName) const
 
void initGodleys ()
 
void cut ()
 erase items in current selection, put copy into clipboard More...
 
void copy () const
 copy items in current selection into clipboard More...
 
void paste ()
 paste clipboard as a new group or ungrouped items on the canvas. canvas.itemFocus is set to refer to the new group or items. More...
 
bool clipboardEmpty () const
 return true if nothing available in clipboard More...
 
void saveSelectionAsFile (const string &fileName) const
 
void insertGroupFromFile (const string &file)
 
void makeVariablesConsistent ()
 
void imposeDimensions ()
 
void garbageCollect ()
 
bool cycleCheck () const
 checks for presence of illegal cycles in network. Returns true if there are some More...
 
void openLogFile (const string &)
 opens the log file, and writes out a header line describing names of all variables More...
 
void closeLogFile ()
 closes log file More...
 
bool loggingEnabled () const
 returns true if logging is in operation More...
 
void constructEquations ()
 construct the equations based on input data More...
 
void dimensionalAnalysis () const
 performs dimension analysis, throws if there is a problem More...
 
void deleteAllUnits ()
 removes units markup from all variables in model More...
 
bool checkEquationOrder () const
 consistency check of the equation order. Should return true. Outputs the operation number of the invalidly ordered operation. More...
 
double deltaT () const
 
void reset ()
 resets the variables back to their initial values More...
 
std::vector< double > step ()
 step the equations (by n steps, default 1) More...
 
void save (const std::string &filename)
 
void load (const std::string &filename)
 load from a file More...
 
void exportSchema (const std::string &filename, int schemaLevel=1)
 
void displayErrorItem (const Item &op) const
 indicate operation item has error, if visible, otherwise contining group More...
 
std::string ecolabVersion () const
 
std::string ravelVersion () const
 
std::string autoSaveFile () const
 name of an auto save file More...
 
void setAutoSaveFile (const std::string &file)
 initialises auto saving empty file to turn off autosave More...
 
void clearHistory ()
 clear history More...
 
void checkPushHistory ()
 called periodically to ensure history up to date More...
 
bool pushHistory ()
 push current model state onto history if it differs from previous More...
 
bool commandHook (const std::string &command, unsigned nargs)
 Executed after each interpreter command to maintain undo/redo stack, edited flag, autosaving etc. More...
 
long undo (int changes=1)
 restore model to state changes ago More...
 
void convertVarType (const std::string &name, VariableType::Type type)
 Converts variable(s) named by name into a variable of type type. More...
 
void addIntegral ()
 add integral to current canvas item (which must be variable convertible to an integral variable More...
 
bool inputWired (const std::string &name) const
 returns true if any variable of name name has a wired input More...
 
void renderCanvasToPS (const std::string &filename)
 render canvas to a postscript file More...
 
void renderCanvasToPDF (const std::string &filename)
 render canvas to a PDF file More...
 
void renderCanvasToSVG (const std::string &filename)
 render canvas to an SVG file More...
 
void renderCanvasToPNG (const std::string &filename)
 render canvas to a PNG image file More...
 
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, top, and crops to width, height (in ZoomCrop struct). More...
 
void renderCanvasToEMF (const std::string &filename)
 render canvas to a EMF image file (Windows only) More...
 
void renderAllPlotsAsSVG (const string &prefix) const
 render all plots More...
 
void exportAllPlotsAsCSV (const string &prefix) const
 export all plots More...
 
void setAllDEmode (bool)
 set DE mode on all godley tables More...
 
void srand (int seed)
 set std library RNG seed More...
 
void setGodleyDisplayValue (bool displayValues, GodleyTable::DisplayStyle displayStyle)
 set display value mode on all godley table editor modes More...
 
void importVensim (const std::string &)
 import a Vensim file More...
 
void redrawAllGodleyTables ()
 request all Godley table windows to redraw More...
 
virtual void runItemDeletedCallback (const Item &)
 run callback attached to item More...
 
virtual MemCheckResult checkMemAllocation (size_t bytes) const
 
std::size_t physicalMem () const
 returns amount of memory installed on system More...
 
vector< string > listFonts () const
 
int numOpArgs (OperationType::Type o)
 
OperationType::Group classifyOp (OperationType::Type o) const
 
void latex (const std::string &filename, bool wrapLaTeXLines)
 
void matlab (const std::string &filename)
 
string latex2pango (const std::string &x)
 
std::vector< std::string > availableOperations ()
 list of available operations More...
 
Minsky::AvailableOperationsMapping availableOperationsMapping () const
 
std::vector< std::string > variableTypes ()
 list of available variable types More...
 
std::vector< std::string > assetClasses ()
 return list of available asset classes More...
 
void autoLayout ()
 auto layout current open group and recentre More...
 
void randomLayout ()
 randomly layout current open group and recentre reinitialises canvas to the group located in item More...
 
void openGroupInCanvas ()
 
void openModelInCanvas ()
 reinitialises canvas to the toplevel group More...
 
void listAllInstances ()
 
void nameCurrentItem (const std::string &name)
 
void itemFromNamedItem (const std::string &name)
 
bool triggerCheckMemAllocationCallback () const
 trigger checkMem callback for testing purposes More...
 
char getc () const
 Used to implement a pause until return pressed for attaching debugger purposes. More...
 
void setDefinition (const std::string &valueId, const std::string &definition)
 add/replace a definition for a flow variable given by valueId More...
 
void pushFlags ()
 push and pop state of the flags More...
 
void popFlags ()
 push and pop state of the flags More...
 
std::string defaultFont ()
 the default used by Pango More...
 
std::string defaultFont (const std::string &x)
 the default used by Pango More...
 
double fontScale ()
 an extra scaling factor of Pango fonts More...
 
double fontScale (double)
 an extra scaling factor of Pango fonts More...
 
- Public Member Functions inherited from minsky::RungeKutta
virtual ~RungeKutta ()=default
 
void rkreset ()
 reset the simulation More...
 
void rkstep ()
 step the equations (by n steps, default 1) evaluate the flow equations without stepping. More...
 
void evalEquations ()
 
- Public Member Functions inherited from minsky::Minsky_multipleEquities
 Minsky_multipleEquities (const std::string &name, ecolab::TCLAccessor< Minsky, bool >::Getter g, ecolab::TCLAccessor< Minsky, bool >::Setter s)
 

Static Public Member Functions

static void tsDrawNativeWindows (Napi::Env env, Napi::Function, AddOnMinsky *minsky, void *)
 
static void messageCallback (Napi::Env env, Napi::Function fn, void *, AddOnMinsky *addonMinsky)
 
static void busyCursorCallback (Napi::Env env, Napi::Function fn, void *, bool *busy)
 
static void progressCallback (Napi::Env env, Napi::Function fn, void *, AddOnMinsky *addon)
 
static void bookmarkRefreshCallback (Napi::Env env, Napi::Function fn, void *, AddOnMinsky *addon)
 
static void resetScrollCallback (Napi::Env env, Napi::Function fn, void *, AddOnMinsky *addon)
 
- Static Public Member Functions inherited from minsky::Minsky
static void saveGroupAsFile (const Group &, const string &fileName)
 
static bool ravelAvailable ()
 
static bool ravelExpired ()
 
static int daysUntilRavelExpires ()
 

Public Attributes

Timers timers
 
deque< unique_ptr< Command > > minskyCommands
 
mutex cmdMutex
 
atomic< bool > running {true}
 
std::thread thread
 
bool inputBufferExceeded =false
 
atomic< bool > drawLaunched {false}
 
TypedThreadSafeFunction< AddOnMinsky, void, tsDrawNativeWindowstsDrawNativeWindows_
 
string theMessage
 
vector< string > messageButtons
 
promise< unsigned > userResponse
 
bool messageCallbackSet =false
 
TypedThreadSafeFunction< void, AddOnMinsky, messageCallbacktsMessageCallback
 
bool busyCursorCallbackSet =false
 
TypedThreadSafeFunction< void, bool, busyCursorCallbacktsBusyCursorCallback
 
bool busyCursor =false
 
int progressValue =0
 
string progressTitle
 
bool progressCallbackSet =false
 
TypedThreadSafeFunction< void, AddOnMinsky, progressCallbacktsProgressCallback
 
bool bookmarkRefreshSet =false
 
TypedThreadSafeFunction< void, AddOnMinsky, bookmarkRefreshCallbacktsBookmarkRefreshCallback
 
bool resetScrollSet =false
 
TypedThreadSafeFunction< void, AddOnMinsky, resetScrollCallbacktsResetScrollCallback
 
- Public Attributes inherited from minsky::RESTMinsky
RESTProcess_t registry
 
- Public Attributes inherited from minsky::Minsky
PannableTab< EquationDisplayequationDisplay
 
FontDisplay fontSampler
 
PhillipsDiagram phillipsDiagram
 
std::vector< PubTabpublicationTabs
 
VariableValues variableValues
 
Dimensions dimensions
 
Conversions conversions
 
std::map< Units, double > maxValue
 stash the maximum absolute value obtained by a dimensioned quantity More...
 
std::map< Units, double > maxFlowValue
 
SVGRenderer histogramResource
 
Exclude< std::map< std::string, std::shared_ptr< CallableFunction > > > userFunctions
 
GroupPtr model {new Group}
 
Canvas canvas {model}
 
std::set< string > logVarList
 set of variables (valueIds) to log More...
 
double lastT {0}
 previous timestep More...
 
int numBackups =1
 number of previous versions of saved files to keep save to a file More...
 
std::string fileVersion
 Minsky version file was saved under. More...
 
unsigned maxHistory {100}
 maximum no. of history states to save More...
 
int maxWaitMS =100
 maximum wait in millisecond between redrawing canvas during simulation More...
 
bool doPushHistory =true
 flag to indicate whether a TCL should be pushed onto the history stack, or logged in a recording. This is used to avoid movements being added to recordings and undo history More...
 
bool displayValues =false
 
GodleyTable::DisplayStyle displayStyle =GodleyTable::sign
 
std::shared_ptr< VariableInstanceListvariableInstanceList
 supports navigation to all instances of current variable More...
 
std::map< std::string, std::weak_ptr< Item > > namedItems
 
VariablePane variablePane
 
- Public Attributes inherited from minsky::RungeKutta
double t {0}
 time More...
 
bool running =false
 controls whether simulation is running More...
 
bool reverse =false
 reverse direction of simulation More...
 
EvalGodley evalGodley
 
- Public Attributes inherited from minsky::Simulation
double stepMin {0}
 
double stepMax {0.01}
 
int nSteps {1}
 
double epsRel {1e-2}
 
double epsAbs {1e-3}
 
int order {4}
 
bool implicit {false}
 
int simulationDelay {0}
 
std::string timeUnit
 
double tmax {INFINITY}
 
double t0 {0}
 

Additional Inherited Members

- Public Types inherited from minsky::Minsky
enum  CmdData { no_command, is_const, is_setterGetter, generic }
 
enum  MemCheckResult { OK, proceed, abort }
 check whether to proceed or abort, given a request to allocate bytes of memory. Implemented in MinskyTCL More...
 
using AvailableOperationsMapping = classdesc::StringKeyMap< std::vector< OperationType::Type > >
 
- Static Public Attributes inherited from minsky::Minsky
static const std::string minskyVersion =MINSKY_VERSION
 return the AEGIS assigned version number More...
 
- Static Public Attributes inherited from minsky::ValueVector
static std::vector< double, CIVITA_ALLOCATOR< double > > stockVars
 vector of variables that are integrated via Runge-Kutta. These variables label the columns of the Godley table More...
 
static std::vector< double, CIVITA_ALLOCATOR< double > > flowVars
 variables defined as a simple function of the stock variables, also known as lhs variables. These variables appear in the body of the Godley table More...
 
- Protected Member Functions inherited from minsky::RungeKutta
void evalEquations (double result[], double, const double vars[])
 
void evalJacobian (Matrix &, double, const double vars[])
 
- Static Protected Member Functions inherited from minsky::RungeKutta
static int RKfunction (double, const double y[], double f[], void *)
 function to be integrated (internal use) More...
 
static int jacobian (double, const double y[], double *, double dfdt[], void *)
 compute jacobian (internal use) More...
 

Detailed Description

Definition at line 191 of file addon.cc.

Constructor & Destructor Documentation

◆ AddOnMinsky()

minsky::anonymous_namespace{addon.cc}::AddOnMinsky::AddOnMinsky ( )
inline

Definition at line 200 of file addon.cc.

200  : thread([this](){run();}) {
201  flags=0;
202  }

◆ ~AddOnMinsky()

minsky::anonymous_namespace{addon.cc}::AddOnMinsky::~AddOnMinsky ( )
inline

Definition at line 204 of file addon.cc.

204  {
205  running=false;
206  if (thread.joinable()) thread.join();
207  }

Member Function Documentation

◆ bookmarkRefresh()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::bookmarkRefresh ( )
inlineoverridevirtual

refresh the bookmark menu after changes

Reimplemented from minsky::Minsky.

Definition at line 479 of file addon.cc.

480  {
481  if (!bookmarkRefreshSet) return;
482  tsBookmarkRefreshCallback.BlockingCall(this);
483  }
TypedThreadSafeFunction< void, AddOnMinsky, bookmarkRefreshCallback > tsBookmarkRefreshCallback
Definition: addon.cc:485

◆ bookmarkRefreshCallback()

static void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::bookmarkRefreshCallback ( Napi::Env  env,
Napi::Function  fn,
void *  ,
AddOnMinsky addon 
)
inlinestatic

Definition at line 474 of file addon.cc.

475  {
476  fn({});
477  }

◆ busyCursorCallback()

static void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::busyCursorCallback ( Napi::Env  env,
Napi::Function  fn,
void *  ,
bool *  busy 
)
inlinestatic

Definition at line 413 of file addon.cc.

414  {
415  fn({Boolean::New(env,*busy)});
416  }

◆ checkMemAllocation()

MemCheckResult minsky::anonymous_namespace{addon.cc}::AddOnMinsky::checkMemAllocation ( std::size_t  bytes) const
inlineoverride

Definition at line 399 of file addon.cc.

399  {
400  // Electron restricts heap size to 4GiB, regardless of how much physical memory is present
401  if (messageCallbackSet && bytes>/*physicalMem()*/4ULL*1024*1024*1024)
402  {
403  theMessage="Allocation will use more than 50% of available memory. Do you want to proceed?";
404  messageButtons={"No","Yes"};
405  userResponse={}; //reset the promise
406  tsMessageCallback.BlockingCall(const_cast<AddOnMinsky*>(this));
407  return userResponse.get_future().get()? proceed: abort;
408  }
409  return OK;
410  }
TypedThreadSafeFunction< void, AddOnMinsky, messageCallback > tsMessageCallback
Definition: addon.cc:374

◆ clearBusyCursor()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::clearBusyCursor ( )
inlineoverridevirtual

Reimplemented from minsky::Minsky.

Definition at line 442 of file addon.cc.

◆ doBusyCursor()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::doBusyCursor ( bool  bc)
inline

Definition at line 434 of file addon.cc.

435  {
436  if (!busyCursorCallbackSet) return;
437  busyCursor=bc;
438  tsBusyCursorCallback.BlockingCall(&busyCursor);
439  }
TypedThreadSafeFunction< void, bool, busyCursorCallback > tsBusyCursorCallback
Definition: addon.cc:419

◆ doCommand()

string minsky::anonymous_namespace{addon.cc}::AddOnMinsky::doCommand ( const string &  command,
const json_pack_t &  arguments 
)
inline

Definition at line 236 of file addon.cc.

References minsky::anonymous_namespace{addon.cc}::minskyCmdMutex.

237  {
238  const lock_guard<mutex> lock(minskyCmdMutex);
239  const Timer timer(timers[command]);
240 
241  // if reset requested, postpone it
242  if (reset_flag()) requestReset();
243 
244  civita::ITensor::cancel(false);
245  // disable quoting wide characters in UTF-8 strings
246  auto result=write(registry.process(command, arguments)->asBuffer(),json5_parser::raw_utf8);
247  commandHook(command,arguments);
248  return result;
249  }
void commandHook(const std::string &command, const RP &args)
Definition: RESTMinsky.h:32
void requestReset()
Definition: minsky.cc:467
RESTProcess_t registry
Definition: RESTMinsky.h:29
bool reset_flag() const
true if reset needs to be called prior to numerical integration
Definition: minsky.h:171

◆ drawNativeWindows()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::drawNativeWindows ( )
inline

Definition at line 251 of file addon.cc.

References minsky::anonymous_namespace{addon.cc}::minskyCmdMutex.

252  {
253  const lock_guard<mutex> lock(minskyCmdMutex);
254  const Timer timer(timers["draw"]);
255  for (auto i: nativeWindowsToRedraw)
256  try
257  {
258  i->draw();
259  }
260  catch (const std::exception& ex)
261  {
262  /* absorb and log any exceptions, cannot do anything anyway */
263  cerr << ex.what() << endl;
264  break;
265  }
266  catch (...) {break;}
267  nativeWindowsToRedraw.clear();
268  }

◆ macOSXDrawNativeWindows()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::macOSXDrawNativeWindows ( )
inline

Definition at line 277 of file addon.cc.

References minsky::anonymous_namespace{addon.cc}::minskyCmdMutex.

278  {
279  const lock_guard<mutex> lock(minskyCmdMutex);
280  const Timer timer(timers["draw"]);
281  for (auto i: nativeWindowsToRedraw)
282  i->macOSXRedraw();
283  nativeWindowsToRedraw.clear();
284  drawLaunched=false;
285  }

◆ macOSXLaunchDrawNativeWindows()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::macOSXLaunchDrawNativeWindows ( )
inline

Definition at line 287 of file addon.cc.

288  {
289  drawLaunched=true;
290  tsDrawNativeWindows_.BlockingCall(this);
291  }
TypedThreadSafeFunction< AddOnMinsky, void, tsDrawNativeWindows > tsDrawNativeWindows_
Definition: addon.cc:275

◆ message()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::message ( const std::string &  )
inlineoverridevirtual

display a message in a popup box on the GUI

Reimplemented from minsky::Minsky.

Definition at line 390 of file addon.cc.

391  {
392  if (!messageCallbackSet) return;
393  theMessage=msg;
394  messageButtons.clear(); // empty buttons imply a single OK button
395  userResponse={}; //reset the promise
396  tsMessageCallback.BlockingCall(const_cast<AddOnMinsky*>(this));
397  }
TypedThreadSafeFunction< void, AddOnMinsky, messageCallback > tsMessageCallback
Definition: addon.cc:374

◆ messageCallback()

static void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::messageCallback ( Napi::Env  env,
Napi::Function  fn,
void *  ,
AddOnMinsky addonMinsky 
)
inlinestatic

Definition at line 363 of file addon.cc.

References messageButtons, theMessage, and userResponse.

364  {
365  auto buttons=Array::New(env);
366  for (unsigned i=0; i< addonMinsky->messageButtons.size(); ++i)
367  buttons[i]=String::New(env,addonMinsky->messageButtons[i]);
368  try {
369  addonMinsky->userResponse.set_value(fn({String::New(env,addonMinsky->theMessage), buttons}).As<Number>().Int32Value());
370  } catch (...) {/* may fail if multiple messages posted in rapid succession */}
371  }

◆ outOfMemoryHandler()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::outOfMemoryHandler ( )
inline

Definition at line 523 of file addon.cc.

References save().

524  {
525  string file=(std::filesystem::current_path()/"savedRavelSession.rvl").string();
526  if (autoSaver) {
527  autoSaver->killThread();
528  file=autoSaver->fileName;
529  }
530  save(file);
531 
532  theMessage="Out of memory, saving to autosave file: "+file;
533  messageButtons={"OK"};
534  userResponse={}; //reset the promise
535  tsMessageCallback.BlockingCall(const_cast<AddOnMinsky*>(this));
536  userResponse.get_future().get();
537  }
void save(const std::string &filename)
Definition: minsky.cc:1014
TypedThreadSafeFunction< void, AddOnMinsky, messageCallback > tsMessageCallback
Definition: addon.cc:374
Here is the call graph for this function:

◆ progress()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::progress ( const string &  title,
int   
)
inlineoverridevirtual

set progress bar, out of 100, labelling the progress bar with title

Reimplemented from minsky::Minsky.

Definition at line 452 of file addon.cc.

453  {
454  if (!progressCallbackSet) return;
455  progressValue=x;
456  progressTitle=title;
457  tsProgressCallback.BlockingCall(this);
458  }
TypedThreadSafeFunction< void, AddOnMinsky, progressCallback > tsProgressCallback
Definition: addon.cc:460

◆ progressCallback()

static void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::progressCallback ( Napi::Env  env,
Napi::Function  fn,
void *  ,
AddOnMinsky addon 
)
inlinestatic

Definition at line 445 of file addon.cc.

References progressTitle, and progressValue.

446  {
447  fn({String::New(env,addon->progressTitle), Number::New(env,addon->progressValue)});
448  }

◆ queueCommand()

Value minsky::anonymous_namespace{addon.cc}::AddOnMinsky::queueCommand ( Env  env,
string  command,
const json_pack_t &  arguments 
)
inline

Definition at line 209 of file addon.cc.

210  {
211  static const std::string sync=".$sync";
212  if (command.ends_with(sync))
213  {
214  command.erase(command.size()-sync.length());
215  // Javascript needs the result returned as UTF-16.
216  return String::New(env, utf_to_utf<char16_t>(doCommand(command, arguments)));
217  }
218 #if defined(_WIN32) || defined(MAC_OSX_TK)
219  // renderFrame needs to be called synchronously, otherwise inexplicable hangs occur on Windows.
220  if (command.ends_with(".renderFrame"))
221  return String::New(env, utf_to_utf<char16_t>(doCommand(command, arguments)));
222 #endif
223  if (minskyCommands.size()>20)
224  {
226  inputBufferExceeded=true;
227  return env.Null();
228  }
229  if (inputBufferExceeded) clearBusyCursor(); // single shot clear of busy curser
230  inputBufferExceeded=false;
231  const lock_guard<mutex> lock(cmdMutex);
232  minskyCommands.emplace_back(new Command{env,command,arguments});
233  return minskyCommands.back()->promiseResolver->promise.Promise();
234  }
string doCommand(const string &command, const json_pack_t &arguments)
Definition: addon.cc:236
deque< unique_ptr< Command > > minskyCommands
Definition: addon.cc:194
void setBusyCursor() override
set/clear busy cursor in GUI
Definition: addon.cc:440

◆ resetScroll()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::resetScroll ( )
inlineoverridevirtual

reset main window scroll bars after model has been panned

Reimplemented from minsky::Minsky.

Definition at line 504 of file addon.cc.

505  {
506  if (!resetScrollSet) return;
507  tsResetScrollCallback.BlockingCall(this);
508  }
TypedThreadSafeFunction< void, AddOnMinsky, resetScrollCallback > tsResetScrollCallback
Definition: addon.cc:510

◆ resetScrollCallback()

static void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::resetScrollCallback ( Napi::Env  env,
Napi::Function  fn,
void *  ,
AddOnMinsky addon 
)
inlinestatic

Definition at line 499 of file addon.cc.

500  {
501  fn({});
502  }

◆ run()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::run ( )
inline

Definition at line 293 of file addon.cc.

References minsky::anonymous_namespace{addon.cc}::minskyCmdMutex, and reset().

294  {
295 #if defined(_PTHREAD_H) && defined(__USE_GNU) && !defined(NDEBUG)
296  pthread_setname_np(pthread_self(),"minsky thread");
297 #endif
298  while (running)
299  {
300  unique_ptr<Command> command;
301  {
302  const lock_guard<mutex> lock(cmdMutex);
303  if (!minskyCommands.empty())
304  {
305  command=std::move(minskyCommands.front());
306  minskyCommands.pop_front();
307  }
308  }
309 
310  if (!command) // perform housekeeping
311  {
312  if (reset_flag() && resetDuration<resetPostponedThreshold && resetAt<std::chrono::system_clock::now())
313  try
314  {
315  const lock_guard<mutex> lock(minskyCmdMutex);
316  if (reset_flag()) // check again, in case another thread got there first
317  {
318  const Timer timer(timers["minsky.reset"]);
319  reset();
320  }
321  }
322  catch (...)
323  {flags&=~reset_needed;}
324 #ifdef MAC_OSX_TK
325  if (!drawLaunched && nativeWindowsToRedraw.size())
327 #else
329 #endif
330  if (inputBufferExceeded && minskyCommands.empty())
331  {
332  // clears busy cursor when no commands are being received or processed
333  clearBusyCursor();
334  inputBufferExceeded=false;
335  }
336  this_thread::sleep_for(chrono::milliseconds(10));
337  continue;
338  }
339 
340  if (!running) return;
341  try
342  {
343  auto result=doCommand(command->command, command->arguments);
344  if (!running) return; // prevent crashes on shutdown
345  command->promiseResolver->resolve(result);
346  }
347  catch (const std::exception& ex)
348  {
349  if (!running) return; // prevent crashes on shutdown
350  command->promiseResolver->reject(ex.what());
351  }
352  catch (...)
353  {
354  if (!running) return; // prevent crashes on shutdown
355  command->promiseResolver->reject("Unknown exception");
356  }
357  }
358  }
void reset()
resets the variables back to their initial values
Definition: minsky.cc:866
bool reset_flag() const
true if reset needs to be called prior to numerical integration
Definition: minsky.h:171
string doCommand(const string &command, const json_pack_t &arguments)
Definition: addon.cc:236
deque< unique_ptr< Command > > minskyCommands
Definition: addon.cc:194
Here is the call graph for this function:

◆ setBookmarkRefreshCallback()

Value minsky::anonymous_namespace{addon.cc}::AddOnMinsky::setBookmarkRefreshCallback ( const Napi::CallbackInfo &  info)
inline

Definition at line 486 of file addon.cc.

487  {
488  const Env env = info.Env();
489  if (info.Length()<1 || !info[0].IsFunction())
490  {
491  Napi::Error::New(env, "Callback not provided").ThrowAsJavaScriptException();
492  }
493  bookmarkRefreshSet=true;
494  tsBookmarkRefreshCallback=TypedThreadSafeFunction<void,AddOnMinsky,bookmarkRefreshCallback>::New
495  (env,info[0].As<Function>(), "refreshBookmark",0,2,nullptr);
496  return env.Null();
497  }
TypedThreadSafeFunction< void, AddOnMinsky, bookmarkRefreshCallback > tsBookmarkRefreshCallback
Definition: addon.cc:485

◆ setBusyCursor()

void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::setBusyCursor ( )
inlineoverridevirtual

set/clear busy cursor in GUI

Reimplemented from minsky::Minsky.

Definition at line 440 of file addon.cc.

◆ setBusyCursorCallback()

Value minsky::anonymous_namespace{addon.cc}::AddOnMinsky::setBusyCursorCallback ( const Napi::CallbackInfo &  info)
inline

Definition at line 420 of file addon.cc.

421  {
422  const Env env = info.Env();
423  if (info.Length()<1 || !info[0].IsFunction())
424  {
425  Napi::Error::New(env, "Callback not provided").ThrowAsJavaScriptException();
426  }
428  tsBusyCursorCallback=TypedThreadSafeFunction<void,bool,busyCursorCallback>::New
429  (env,info[0].As<Function>(), "setBusyCursor",0,2,nullptr);
430  return env.Null();
431  }
TypedThreadSafeFunction< void, bool, busyCursorCallback > tsBusyCursorCallback
Definition: addon.cc:419

◆ setMessageCallback()

Value minsky::anonymous_namespace{addon.cc}::AddOnMinsky::setMessageCallback ( const Napi::CallbackInfo &  info)
inline

Definition at line 375 of file addon.cc.

376  {
377  const Env env = info.Env();
378  if (info.Length()<1 || !info[0].IsFunction())
379  {
380  Napi::Error::New(env, "Callback not provided").ThrowAsJavaScriptException();
381  }
382  messageCallbackSet=true;
383  tsMessageCallback=TypedThreadSafeFunction<void,AddOnMinsky,messageCallback>::New
384  (env,info[0].As<Function>(), "message",0,2,nullptr);
385 
386  return env.Null();
387  }
TypedThreadSafeFunction< void, AddOnMinsky, messageCallback > tsMessageCallback
Definition: addon.cc:374

◆ setProgressCallback()

Value minsky::anonymous_namespace{addon.cc}::AddOnMinsky::setProgressCallback ( const Napi::CallbackInfo &  info)
inline

Definition at line 461 of file addon.cc.

462  {
463  const Env env = info.Env();
464  if (info.Length()<1 || !info[0].IsFunction())
465  {
466  Napi::Error::New(env, "Callback not provided").ThrowAsJavaScriptException();
467  }
468  progressCallbackSet=true;
469  tsProgressCallback=TypedThreadSafeFunction<void,AddOnMinsky,progressCallback>::New
470  (env,info[0].As<Function>(), "progress",0,2,nullptr);
471  return env.Null();
472  }
TypedThreadSafeFunction< void, AddOnMinsky, progressCallback > tsProgressCallback
Definition: addon.cc:460

◆ setResetScrollCallback()

Value minsky::anonymous_namespace{addon.cc}::AddOnMinsky::setResetScrollCallback ( const Napi::CallbackInfo &  info)
inline

Definition at line 511 of file addon.cc.

512  {
513  const Env env = info.Env();
514  if (info.Length()<1 || !info[0].IsFunction())
515  {
516  Napi::Error::New(env, "Callback not provided").ThrowAsJavaScriptException();
517  }
518  resetScrollSet=true;
519  tsResetScrollCallback=TypedThreadSafeFunction<void,AddOnMinsky,resetScrollCallback>::New
520  (env,info[0].As<Function>(), "resetScroll",0,2,nullptr);
521  return env.Null();
522  }
TypedThreadSafeFunction< void, AddOnMinsky, resetScrollCallback > tsResetScrollCallback
Definition: addon.cc:510

◆ tsDrawNativeWindows()

static void minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsDrawNativeWindows ( Napi::Env  env,
Napi::Function  ,
AddOnMinsky minsky,
void *   
)
inlinestatic

Definition at line 272 of file addon.cc.

273  {minsky->macOSXDrawNativeWindows();}
Creation and access to the minskyTCL_obj object, which has code to record whenever Minsky&#39;s state cha...
Definition: constMap.h:22

Member Data Documentation

◆ bookmarkRefreshSet

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::bookmarkRefreshSet =false

Definition at line 484 of file addon.cc.

◆ busyCursor

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::busyCursor =false

Definition at line 433 of file addon.cc.

◆ busyCursorCallbackSet

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::busyCursorCallbackSet =false

Definition at line 418 of file addon.cc.

◆ cmdMutex

mutex minsky::anonymous_namespace{addon.cc}::AddOnMinsky::cmdMutex

Definition at line 195 of file addon.cc.

◆ drawLaunched

atomic<bool> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::drawLaunched {false}

Definition at line 271 of file addon.cc.

◆ inputBufferExceeded

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::inputBufferExceeded =false

Definition at line 198 of file addon.cc.

◆ messageButtons

vector<string> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::messageButtons
mutable

Definition at line 361 of file addon.cc.

Referenced by messageCallback().

◆ messageCallbackSet

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::messageCallbackSet =false

Definition at line 373 of file addon.cc.

◆ minskyCommands

deque<unique_ptr<Command> > minsky::anonymous_namespace{addon.cc}::AddOnMinsky::minskyCommands

Definition at line 194 of file addon.cc.

◆ progressCallbackSet

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::progressCallbackSet =false

Definition at line 459 of file addon.cc.

◆ progressTitle

string minsky::anonymous_namespace{addon.cc}::AddOnMinsky::progressTitle

Definition at line 451 of file addon.cc.

Referenced by progressCallback().

◆ progressValue

int minsky::anonymous_namespace{addon.cc}::AddOnMinsky::progressValue =0

Definition at line 450 of file addon.cc.

Referenced by progressCallback().

◆ resetScrollSet

bool minsky::anonymous_namespace{addon.cc}::AddOnMinsky::resetScrollSet =false

Definition at line 509 of file addon.cc.

◆ running

atomic<bool> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::running {true}

Definition at line 196 of file addon.cc.

◆ theMessage

string minsky::anonymous_namespace{addon.cc}::AddOnMinsky::theMessage
mutable

Definition at line 360 of file addon.cc.

Referenced by messageCallback().

◆ thread

std::thread minsky::anonymous_namespace{addon.cc}::AddOnMinsky::thread

Definition at line 197 of file addon.cc.

◆ timers

Timers minsky::anonymous_namespace{addon.cc}::AddOnMinsky::timers

Definition at line 193 of file addon.cc.

◆ tsBookmarkRefreshCallback

TypedThreadSafeFunction<void,AddOnMinsky,bookmarkRefreshCallback> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsBookmarkRefreshCallback

Definition at line 485 of file addon.cc.

◆ tsBusyCursorCallback

TypedThreadSafeFunction<void,bool,busyCursorCallback> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsBusyCursorCallback

Definition at line 419 of file addon.cc.

◆ tsDrawNativeWindows_

TypedThreadSafeFunction<AddOnMinsky,void,tsDrawNativeWindows> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsDrawNativeWindows_

Definition at line 275 of file addon.cc.

◆ tsMessageCallback

TypedThreadSafeFunction<void,AddOnMinsky,messageCallback> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsMessageCallback

Definition at line 374 of file addon.cc.

◆ tsProgressCallback

TypedThreadSafeFunction<void,AddOnMinsky,progressCallback> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsProgressCallback

Definition at line 460 of file addon.cc.

◆ tsResetScrollCallback

TypedThreadSafeFunction<void,AddOnMinsky,resetScrollCallback> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::tsResetScrollCallback

Definition at line 510 of file addon.cc.

◆ userResponse

promise<unsigned> minsky::anonymous_namespace{addon.cc}::AddOnMinsky::userResponse
mutable

Definition at line 362 of file addon.cc.

Referenced by messageCallback().


The documentation for this struct was generated from the following file: