1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
/*
* Copyright 2011-2012 Alex Merry <alex.merry@kdemail.net>
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
#import "CreateNodeTool.h"
#import "Configuration.h"
#import "GraphRenderer.h"
#import "NodeStyleSelector.h"
#import "TikzDocument.h"
#import "tzstockitems.h"
@implementation CreateNodeTool
- (NSString*) name { return @"Create Node"; }
- (const gchar*) stockId { return TIKZIT_STOCK_CREATE_NODE; }
- (NSString*) helpText { return @"Create new nodes"; }
- (NSString*) shortcut { return @"n"; }
@synthesize activeRenderer=renderer;
@synthesize styleManager;
@synthesize configurationWidget=configWidget;
+ (id) toolWithStyleManager:(StyleManager*)sm {
return [[[self alloc] initWithStyleManager:sm] autorelease];
}
- (id) init {
[self release];
return nil;
}
- (id) initWithStyleManager:(StyleManager*)sm {
self = [super init];
if (self) {
styleManager = [sm retain];
stylePicker = [[NodeStyleSelector alloc] initWithStyleManager:sm];
configWidget = gtk_vbox_new (FALSE, 0);
g_object_ref_sink (configWidget);
GtkWidget *label = gtk_label_new ("Node style:");
gtk_widget_show (label);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (configWidget),
label,
FALSE,
FALSE,
0);
GtkWidget *selectorFrame = gtk_frame_new (NULL);
gtk_widget_show (selectorFrame);
gtk_box_pack_start (GTK_BOX (configWidget),
selectorFrame,
TRUE,
TRUE,
0);
gtk_container_add (GTK_CONTAINER (selectorFrame),
[stylePicker widget]);
gtk_widget_show ([stylePicker widget]);
}
return self;
}
- (void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[renderer release];
[styleManager release];
[stylePicker release];
g_object_unref (G_OBJECT (configWidget));
[super dealloc];
}
- (NodeStyle*) activeStyle {
return [stylePicker selectedStyle];
}
- (void) setActiveStyle:(NodeStyle*)style {
return [stylePicker setSelectedStyle:style];
}
// FIXME: create node on press, and drag it around?
- (void) mousePressAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask {}
- (void) mouseReleaseAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask {
if (button != LeftButton)
return;
Transformer *transformer = [renderer transformer];
NSPoint nodePoint = [transformer fromScreen:[[renderer grid] snapScreenPoint:pos]];
Node *node = [Node nodeWithPoint:nodePoint];
[node setStyle:[self activeStyle]];
[[renderer document] addNode:node];
}
- (void) renderWithContext:(id<RenderContext>)context onSurface:(id<Surface>)surface {}
- (void) loadConfiguration:(Configuration*)config {
NSString *styleName = [config stringEntry:@"ActiveStyle"
inGroup:@"CreateNodeTool"
withDefault:nil];
[self setActiveStyle:[styleManager nodeStyleForName:styleName]];
}
- (void) saveConfiguration:(Configuration*)config {
[config setStringEntry:@"ActiveStyle"
inGroup:@"CreateNodeTool"
value:[[self activeStyle] name]];
}
@end
// vim:ft=objc:ts=8:et:sts=4:sw=4
|