1
////////////////////////////////////////////////////////////////////////////////
3
// This file is part of Toolkit for Conceptual Modeling (TCM).
4
// (c) copyright 1997, Vrije Universiteit Amsterdam.
5
// Author: Frank Dehne (frank@cs.vu.nl).
7
// TCM is free software; you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License as published by
9
// the Free Software Foundation; either version 2 of the License, or
10
// (at your option) any later version.
12
// TCM is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
// GNU General Public License for more details.
17
// You should have received a copy of the GNU General Public License
18
// along with TCM; if not, write to the Free Software
19
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21
////////////////////////////////////////////////////////////////////////////////
23
#include "shapeview.h"
24
#include "diagramviewer.h"
26
#include "updatefontcmd.h"
28
UpdateFontCmd::UpdateFontCmd(ShapeView *v, int f, int s, int p):
29
Command(v->GetViewer()->GetDiagram(), v->GetViewer()) {
34
shapes = new List<GShape *>;
35
oldSizes = new List<Point *>;
36
oldFonts = new List<XFont *>;
40
UpdateFontCmd::~UpdateFontCmd() {
47
void UpdateFontCmd::GetUpdateShapes() {
48
List<GShape *> *selection = view->GetSelection();
49
for (selection->first(); !selection->done(); selection->next()) {
50
GShape *shape = selection->cur();
51
XFont *ft = shape->GetFont();
52
// negative family/style/size means no update necessary.
53
if (family >= 0 && family != ft->GetFamily())
55
else if (style >= 0 && style != ft->GetStyle())
57
else if (size >= 0 && style != ft->GetSize())
62
void UpdateFontCmd::Execute() {
63
if (!shapes->first()) {
64
GetMainWindow()->SetStatus(
65
"aborted: no fonts need to be changed");
69
for (shapes->first(); !shapes->done(); shapes->next()) {
70
GShape *shape = shapes->cur();
71
XFont *newFt = GetNewFont(shape);
72
shape->UpdateFont(newFt);
73
if (GetViewer()->IsAutoResize())
79
void UpdateFontCmd::UnExecute() {
80
for (unsigned i=0; i<shapes->count(); i++) {
81
GShape *shape = (*shapes)[i];
82
shape->UpdateFont((*oldFonts)[i]);
83
if (GetViewer()->IsAutoResize()) {
84
int oldWidth = (*oldSizes)[i]->x;
85
int oldHeight = (*oldSizes)[i]->y;
86
if (shape->GetWidth() != oldWidth ||
87
shape->GetHeight() != oldHeight) {
88
shape->UpdateSize(oldWidth, oldHeight);
89
view->GetViewer()-> ShapePositionUpdate(shape);
96
void UpdateFontCmd::SaveShape(GShape *shape) {
98
oldFonts->add(shape->GetFont());
99
Point *pt = new Point(shape->GetWidth(), shape->GetHeight());
103
XFont *UpdateFontCmd::GetNewFont(GShape *shape) {
104
XFont *ft = shape->GetFont();
105
int f = (family < 0) ? ft->GetFamily() : family;
106
int s = (style < 0) ? ft->GetStyle() : style;
107
int p = (size < 0) ? ft->GetSize() : size;
108
return GetViewer()->GetFont(f, s, p);