⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scdiagram.h

📁 这个工具集提供以下结构化分析和UML分析中所用的图形化绘图工具:ER-diagrams, data and event flow diagrams and state-transition diagr
💻 H
字号:
//------------------------------------------------------------------------------// // This file is part of Toolkit for Conceptual Modeling (TCM).// (c) copyright 2002, Universiteit Twente.// Author: David Jansen (dnjansen@cs.utwente.nl).//         Rik Eshuis (eshuis@cs.utwente.nl)//         Jose Canete (canete@lsi.us.es)//// TCM is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// TCM 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 for more details.//// You should have received a copy of the GNU General Public License// along with TCM; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA// 02111-1307, USA.//-----------------------------------------------------------------------------#ifndef _SCDIAGRAM_H#define _SCDIAGRAM_H#include "diagram.h"class SCGraph;class SCWindow;class SCViewer;//class Transition;//class InitialState;#ifdef MODELCHECKclass ModelCheckDialog;class SCDTransitionEdge;class AbstractSequenceDiagram;class ConcreteSequenceDiagram;#endif#include <stdio.h>/// state transition diagram classclass SCDiagram: public Diagram {/*@Doc: {\large {\bf scope:} TSCD} */public:	///	SCDiagram(Config *, SCWindow *, SCViewer *, SCGraph *);	///	virtual ~SCDiagram();	///	virtual void Initialize();	///	Node *CreateNode();	///	Edge *CreateEdge(Subject *n1, Subject *n2);	///	NodeShape *CreateNodeShape(Node *node, int x, int y);	///	Line *CreateLine(Edge *edge, GShape *fromShape, 		GShape *toShape, List<Point *> *line);	///	void UpdateNodeType(int n);	///	void UpdateEdgeType(int n);	///	void CheckDocument();#ifdef MODELCHECK	///	/* virtual */ void ModelCheckProperty();#endif	///	void ProvideFeedback(SCGraph *ah);protected:	///	Thing *CreateThing(int classNr);	///	bool CheckEdgeConstraints(Subject *s1, Subject *s2);	///	bool CheckAndEdgeConstraints(Subject *s1, Subject *s2);private:#ifdef MODELCHECK	///	void DoModelCheckDocument(const string *internal,		const string *formula, const string *clock);	/// callback for model check document dialog	static void ModelCheckDocumentOKCB(Widget, XtPointer,							XtPointer);	/// saves the current diagram in the model checker formal to *path.	void SaveForModelChecker(const string *path, const string *internal,		const string *clock, const string *formula);	/// calls the model checker for a diagram saved in *path.	bool ExecuteModelChecker(const string *path, const string *formula);	/// computes the current step of firing transitions.	List<SCDTransitionEdge *> ComputeMicroStep (SCGraph *gr, int state);	/// Creates the abstract representation for a sequence diagram from	/// NuSMV counterexample. This method should be called after the counterexample	/// has been produced!	AbstractSequenceDiagram * GenerateAbstractSequenceDiagram ();        ///        bool IsBroadcast (string event, List<SCDTransitionEdge *> step);	/// Creates a possible layout from the abstract representation of the sequence diagram.	ConcreteSequenceDiagram * GenerateConcreteSeqDiag (AbstractSequenceDiagram *asd);	/// Generates the file with the sequence diagram.	void GenerateSeqDiagFile (ConcreteSequenceDiagram *csd, const string *formula);	///	void GenerateGraphNodes (ConcreteSequenceDiagram *csd, OutputFile *fp);	///	void GenerateComments (ConcreteSequenceDiagram *csd, OutputFile *fp);	///	void GenerateGraphEdges (ConcreteSequenceDiagram *csd, OutputFile *fp);	///	void GenerateObjectBoxes (ConcreteSequenceDiagram *csd, OutputFile *fp);	///	void GenerateT4Lines (ConcreteSequenceDiagram *csd, OutputFile *fp);	///	void GenerateTextBoxes (ConcreteSequenceDiagram *csd, OutputFile *fp);	///	void GenerateNote (ConcreteSequenceDiagram *csd, OutputFile *fp, const string *formula);	///	void GenerateNoteBox (ConcreteSequenceDiagram *csd, OutputFile *fp);	/// used for model checking	ModelCheckDialog *promptDialog;#endif}; // end class SCDiagram/* * * Classes for generating a Sequence Diagram. They should be moved to on a separate file. * * * */class PairObjEv{ public:  PairObjEv (int object, string event) : obj(object), ev(event) {}  int GetObj () {return obj;}  string GetEv () {return ev;}  void PrintIt () {  	std::cout << "(" << obj << "," << ev.getstr() << ")" << std::endl; } private:  int obj;  string ev;};class InteractionParticipant{ public:  int GetNumberOfEvents () {return eventsToSend.count();}  void AddPairObjEv (int object, string event);  PairObjEv * GetPairObjEv (int i) {if (i<0 || i>static_cast<int>(eventsToSend.count()-1)) return NULL; else return eventsToSend[i];}  void SetId (int i) {id= i;}  int GetId () {return id;}  void PrintIt (); private:   List<PairObjEv *> eventsToSend;   int id; //the id of the participant in the abstract sequence diagram};class InteractionRow{ public:  InteractionParticipant * participants; //array [numObj] of InteractionParticipant  InteractionRow (int n, int cs) : numObj(n), currentState(cs) {      participants= new InteractionParticipant[numObj];      for (int i=0; i< numObj; i++)       	   participants[i].SetId(i);  }  int GetNumberOfParticipants () {return numObj;}  int GetCurrentState () {return currentState;}  void PrintIt (); private:  int numObj;  int currentState;};class AbstractSequenceDiagram{ public:  List<InteractionRow *> rows;  List<string> objNames;  int numObjs;  AbstractSequenceDiagram () : numObjs(0) {}  void AddParticipant (string name) {objNames.add(name); numObjs++; }  InteractionRow * AddRow (int cs);   void PrintIt ();};class ConcreteParticipant;class StimulusInfo{ public:  ConcreteParticipant *sender;  ConcreteParticipant *receiver;  string label;  int logicalId; // logical id in the seq.diag.  int shapeId; // shape id in the seq.diag.  int y;  //the place of the stimulus in the temporal line  bool isComment; //if True, this is a false stimulus, i.e. a comment: "stable" and "microstep"};class Stimulus{ public:  bool isSender;  StimulusInfo *info;};class ConcreteParticipant{ public:  string name;  int logicalId;  int shapeId;  int x, y;  List<Stimulus *> anchors;};class ConcreteSequenceDiagram{  int counter; public:  List<ConcreteParticipant *> participants;  List<StimulusInfo *> stimuli;  int lineLength; //end position of the lifelines  ConcreteSequenceDiagram() : counter(1) {}  int NextId () { counter++; return counter;}};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -