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

📄 trwindow.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 1996, Vrije Universiteit Amsterdam.// Author: Frank Dehne (frank@cs.vu.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 "trwindow.h"#include "trdiagram.h"#include "trviewer.h"#include "trgraph.h"#include "menu.h"#include "mstring.h"#include "liteclue.h"#include <Xm/XmAll.h>#include "TextNode.xbm"#include "TextRoot.xbm"#include "Comment.xbm"#include "Line.xbm" const char *TRWindow::TR_NODE_NAMES[] =  { "Text root", "Text node", "Comment"};const Bitmap TRWindow::TR_NODE_ICONS [] = { 	{TextRoot_width, TextRoot_height, TextRoot_bits},	{TextNode_width, TextNode_height, TextNode_bits},	{Comment_width, Comment_height, Comment_bits}}; const char *TRWindow::TR_EDGE_NAMES[] = {"Line"};const Bitmap TRWindow::TR_EDGE_ICONS [] = {	{Line_width, Line_height, Line_bits}};TRWindow::TRWindow(const char *n): DiagramWindow(n) {}DiagramViewer *TRWindow::CreateViewer(Config *cfg) {	return new TRViewer(cfg, this);}Graph *TRWindow::CreateGraph() {	return new TRGraph();}Diagram *TRWindow::CreateDiagram(Config *c, DiagramViewer *v, Graph *g) {	 return new TRDiagram(c, this, (TRViewer *)v, (TRGraph *)g);}void TRWindow::DetermineIcons() {	 nodeNames = TR_NODE_NAMES;	 nodeIcons = TR_NODE_ICONS;	 edgeNames = TR_EDGE_NAMES;	 edgeIcons = TR_EDGE_ICONS;	 nrNodes = XtNumber(TR_NODE_NAMES);	 nrEdges = XtNumber(TR_EDGE_NAMES);}Widget TRWindow::CreateMenuBar(Widget parent) {	Widget bar = DiagramWindow::CreateMenuBar(parent);	// make the duplicate item insensitive.	Widget w1 = editMenu->GetMenuItem("Duplicate");	if (w1)		XtVaSetValues(w1, XmNsensitive, False, 0);	return bar;}Widget TRWindow::CreateTiles(Widget parent) {	Widget t = DiagramWindow::CreateTiles(parent);	(void)CreateLayoutTiles(t);	XtManageChild(t);	return t;}Widget TRWindow::CreateLayoutTiles(Widget parent) {	Arg args[9];	int i = 0;	// create a frame	Widget frame = XtVaCreateManagedWidget("layout_tiles_frame1",		xmFrameWidgetClass, parent,		XmNshadowType, XmSHADOW_ETCHED_IN, 0);	// create the label	XtVaCreateManagedWidget("Layout",                        xmLabelWidgetClass, frame,                        XmNchildType, XmFRAME_TITLE_CHILD, 0);	// create a rowcolumn	Widget rc = XtVaCreateWidget("rc1", xmRowColumnWidgetClass, frame,		XmNentryAlignment, XmALIGNMENT_CENTER, 0);	// create a radiobox for the tiles	XtSetArg(args[i], XmNradioAlwaysOne, True); i++;	char wname[8] = "Layout";	Widget rb = XmCreateRadioBox(rc, wname, args, i);	// create all layout tiles	XmString lb1, lb2;	lb1 = CreateXmString("Editable\nGraph");	lb2 = CreateXmString("Forked\nTree");	editButton = XtVaCreateManagedWidget("EditableGraph",			xmToggleButtonWidgetClass, rb,			XmNset, True,			XmNhighlightThickness, 0,			XmNlabelType, XmSTRING,			XmNlabelString, lb1,			XmNuserData, (XtPointer)0,			XmNalignment, XmALIGNMENT_CENTER, 0);	XtAddCallback(editButton, XmNvalueChangedCallback,			TRWindow::LayoutCB, (XtPointer)this);	AddLiteClue(editButton, "Edit mode in which document is drawn as a graph");	treeButton = XtVaCreateManagedWidget("ForkedTree",			xmToggleButtonWidgetClass, rb,			XmNset, False,			XmNlabelString, lb2,			XmNlabelType, XmSTRING,			XmNhighlightThickness, 0,			XmNuserData, (XtPointer)1,			XmNalignment, XmALIGNMENT_CENTER, 0);	XtAddCallback(treeButton, XmNvalueChangedCallback,			TRWindow::LayoutCB, (XtPointer)this);	AddLiteClue(treeButton, "View mode in which document has a forked tree layout");	XtManageChild(rb);	XtManageChild(rc);	XmStringFree(lb1);	XmStringFree(lb2);	return frame;}void TRWindow::SetLayout(bool b) {	TRViewer *v = (TRViewer *)GetDiagramViewer();	if (!v->IsPasting() && !v->IsZigZag()) {		SetStatus("action: set layout");		v->UpdateTreeMode(b);	}	else if (b != v->IsTreeMode()) {		SetStatus("I'm busy with something else");		XmToggleButtonSetState(editButton, b, False);		XmToggleButtonSetState(treeButton, !b, False);	}	SetSensitive(editMenu, "Cut", !b);	SetSensitive(editMenu, "Copy", !b);	SetSensitive(editMenu, "Paste", !b);	SetSensitive(editMenu, "Delete", !b);	SetSensitive(editMenu, "Delete All", !b);	SetSensitive(editMenu, "Select All", !b);	SetSensitive(editMenu, "Same Size", !b);	SetSensitive(editMenu, "Align Nodes", !b);	GetDrawingArea()->Enable("Cut", !b);	GetDrawingArea()->Enable("Copy", !b);	GetDrawingArea()->Enable("Paste", !b);	GetDrawingArea()->Enable("Delete", !b);	GetDrawingArea()->Enable("Delete All", !b);	GetDrawingArea()->Enable("Select All", !b);	GetDrawingArea()->Enable("Same Size", !b);	GetDrawingArea()->Enable("Align Nodes", !b);	SetSensitive(fileMenu, "Append", !b);	SetSensitive(fileMenu, "Save Selection As", !b);	SetSensitive(searchMenu, "Replace", !b);	SetSensitive(propertiesMenu, "Node/Edge Annotation", !b);	SetSensitive(propertiesMenu, "Update Text Font", !b);	SetSensitive(propertiesMenu, "Update Line Width", !b);	SetSensitive(propertiesMenu, "Update Line Style", !b);	SetSensitive(propertiesMenu, "Update Line Ends", !b);	SetSensitive(propertiesMenu, "Set/Unset Text Underlining", !b);	SetSensitive(propertiesMenu, "Update Text Alignment", !b);	SetSensitive(propertiesMenu, "Update Line Color", !b);	SetSensitive(propertiesMenu, "Update Text Color", !b);	SetSensitive(propertiesMenu, "Update Fill Color", !b);}void TRWindow::SetSensitive(Menu *menu, const char *label, bool b) {	Widget w = menu->GetMenuItem(label);	if (w)		XtVaSetValues(w, XmNsensitive, b, 0);}void TRWindow::LayoutCB(Widget w, XtPointer cd, XtPointer) {	if (XmToggleButtonGetState(w)) {		int num;		XtVaGetValues(w, XmNuserData, &num, 0);		((TRWindow *)cd)->SetLayout(num);	}}

⌨️ 快捷键说明

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