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

📄 ssddoubleobjectbox.c

📁 这个工具集提供以下结构化分析和UML分析中所用的图形化绘图工具:ER-diagrams, data and event flow diagrams and state-transition diagr
💻 C
字号:
//------------------------------------------------------------------------------//// This file is part of Toolkit for Conceptual Modeling (TCM).// (c) copyright 1999, Vrije Universiteit Amsterdam and University of Twente.// Author: Frank Dehne (frank@cs.vu.nl).// Author: Henk van de Zandschulp (henkz@cs.utwente.nl).//// 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.//-----------------------------------------------------------------------------#include "grafport.h"#include "ssdobjectnode.h"#include "ssddoubleobjectbox.h"SSDDoubleObjectBox::SSDDoubleObjectBox(ShapeView *v, Grafport *g,		int x, int y, int w, int h): DoubleClassBox(v, g, x, y, w, h) {        GetName()->SetUnderlined(True);}SSDDoubleObjectBox::SSDDoubleObjectBox(const Box &s): DoubleClassBox(s) {        GetName()->SetUnderlined(True);	SetTextShape();}bool SSDDoubleObjectBox::SetAssocSubject(AssocList *al) {	if (!DoubleBox::SetAssocSubject(al))		return False;	if (check(GetSubject() && 	    (GetSubject()->GetClassType()==Code::SSD_OBJECT_NODE))) 		return True;	SetSubject(0);	return False;}void SSDDoubleObjectBox::SetTextShape() {	DoubleBox::SetTextShape();	GetLabels()->clear();	// create the attribute labels.	if (!check(GetSubject() && 	    (GetSubject()->GetClassType() == Code::SSD_OBJECT_NODE)))		return;	SSDObjectNode *obj = (SSDObjectNode *)GetSubject();	unsigned numItems = obj->NrStrings();	for (unsigned i=0; i<numItems; i++) {		TextShape *at = new TextShape(				GetView(), GetGrafport(), this);		at->SetSequence(i);		at->SetAlignment(TextAlign::LEFT);		at->SetDescription(&labelDescription);		at->SetString(obj->GetString(i));		at->SetParent(this);		at->SetFont(GetName()->GetFont());		at->SetColor(GetName()->GetColor());		GetLabels()->add(at);	}//	CalcPositionLabels();}void SSDDoubleObjectBox::DrawTextShapes() {	string oldBackground; 	Grafport *g = GetGrafport();	if (GetFillStyle() != FillStyle::UNFILLED) {		oldBackground = *g->GetBackgroundColor();		g->SetBackgroundColor(GetFillColor());	}	NodeShape::DrawTextShapes();	int textHeight = GetName()->GetFontHeight();	int nameHeight = max(GetName()->GetString()->lines(), 2) * textHeight;	if (nameHeight < GetHeight()) {                g->SetLineStyle(GetSeparatorLineStyle());		g->DrawLine(GetLeftMost()+1, GetTopMost()+nameHeight+1, 			GetRightMost()-1, 			GetTopMost()+nameHeight+1);		g->SetLineStyle(GetLineStyle());	}	int i = nameHeight;	for (GetLabels()->first(); !GetLabels()->done(); GetLabels()->next()) {		i += textHeight;		if (i < GetHeight())			GetLabels()->cur()->Draw();	}	if (GetFillStyle() != FillStyle::UNFILLED)		g->SetBackgroundColor(&oldBackground);}

⌨️ 快捷键说明

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