summaryrefslogtreecommitdiff
path: root/tikzit/src/gtk/PropertiesPane.m
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@cs.ox.ac.uk>2013-02-04 18:08:38 +0000
committerAlex Merry <alex.merry@cs.ox.ac.uk>2013-02-04 18:08:38 +0000
commitdc720cc5d5e3f5b2f3d8119947a9dd8c69f4b2df (patch)
tree7b3eeeaca920b37f45d3c762ea6dc6c625760780 /tikzit/src/gtk/PropertiesPane.m
parent0f2452356ae718b73e9467e388092c8af6752a8f (diff)
GTK: prevent the user from creating invalid tikz
The free-form entry fields (graph element properties and node labels) are a potential source of invalid tikz code. Since we quote any dodgy-looking text with { and }, we just need to make sure there are no unmatched curly braces entered in those fields. This will turn the entry widgets red when there are unmatched braces, and refuse to make use of any such values.
Diffstat (limited to 'tikzit/src/gtk/PropertiesPane.m')
-rw-r--r--tikzit/src/gtk/PropertiesPane.m28
1 files changed, 19 insertions, 9 deletions
diff --git a/tikzit/src/gtk/PropertiesPane.m b/tikzit/src/gtk/PropertiesPane.m
index 990304e..36dd079 100644
--- a/tikzit/src/gtk/PropertiesPane.m
+++ b/tikzit/src/gtk/PropertiesPane.m
@@ -337,10 +337,14 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane)
return;
}
- Node *node = [sel anyObject];
- [document startModifyNode:node];
- [node setLabel:newValue];
- [document endModifyNode];
+ if ([newValue isValidTikz]) {
+ Node *node = [sel anyObject];
+ [document startModifyNode:node];
+ [node setLabel:newValue];
+ [document endModifyNode];
+ } else {
+ widget_set_error (GTK_WIDGET (nodeLabelEntry));
+ }
}
- (void) edgeNodeLabelEdited:(NSString*)newValue {
@@ -359,9 +363,13 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane)
return;
}
- [document startModifyEdge:edge];
- [[edge edgeNode] setLabel:newValue];
- [document endModifyEdge];
+ if ([newValue isValidTikz]) {
+ [document startModifyEdge:edge];
+ [[edge edgeNode] setLabel:newValue];
+ [document endModifyEdge];
+ } else {
+ widget_set_error (GTK_WIDGET (edgeNodeLabelEntry));
+ }
}
- (void) edgeNodeToggled:(BOOL)newValue {
@@ -410,6 +418,7 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane)
[nodePropDelegate setNode:n];
[nodeProps setData:[n data]];
gtk_entry_set_text (nodeLabelEntry, [[n label] UTF8String]);
+ widget_clear_error (GTK_WIDGET (nodeLabelEntry));
[self _setDisplayedWidget:nodePropsWidget];
editGraphProps = NO;
} else {
@@ -422,16 +431,17 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesPane *pane)
Edge *e = [edgeSel anyObject];
[edgePropDelegate setEdge:e];
[edgeProps setData:[e data]];
+ widget_clear_error (GTK_WIDGET (edgeNodeLabelEntry));
if ([e hasEdgeNode]) {
gtk_toggle_button_set_active (edgeNodeToggle, TRUE);
gtk_widget_show (edgeNodePropsWidget);
- gtk_entry_set_text (GTK_ENTRY (edgeNodeLabelEntry), [[[e edgeNode] label] UTF8String]);
+ gtk_entry_set_text (edgeNodeLabelEntry, [[[e edgeNode] label] UTF8String]);
[edgeNodeProps setData:[[e edgeNode] data]];
gtk_widget_set_sensitive (edgeNodePropsWidget, TRUE);
} else {
gtk_toggle_button_set_active (edgeNodeToggle, FALSE);
gtk_widget_hide (edgeNodePropsWidget);
- gtk_entry_set_text (GTK_ENTRY (edgeNodeLabelEntry), "");
+ gtk_entry_set_text (edgeNodeLabelEntry, "");
[edgeNodeProps setData:nil];
gtk_widget_set_sensitive (edgeNodePropsWidget, FALSE);
}