summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@cs.ox.ac.uk>2012-12-07 17:27:07 +0000
committerAlex Merry <alex.merry@cs.ox.ac.uk>2012-12-07 17:27:07 +0000
commit3eb2ed59378f51ea91100dc36d6ae176b696f926 (patch)
tree869b6ed5ac3dffba40da58ecd13976e96f6e0eec
parent815535a6159b8832dcc26554e5543cba1a020cbd (diff)
Add a propery editor window
-rw-r--r--tikzit/src/Makefile.am3
-rw-r--r--tikzit/src/gtk/Application.h2
-rw-r--r--tikzit/src/gtk/Application.m30
-rw-r--r--tikzit/src/gtk/PropertiesWindow.h (renamed from tikzit/src/gtk/PropertyPane.h)21
-rw-r--r--tikzit/src/gtk/PropertiesWindow.m (renamed from tikzit/src/gtk/PropertyPane.m)286
-rw-r--r--tikzit/src/gtk/PropertyListEditor.m4
-rw-r--r--tikzit/src/gtk/ToolBox.m7
-rw-r--r--tikzit/src/gtk/Window.m19
-rw-r--r--tikzit/src/gtk/gtkhelpers.m2
9 files changed, 164 insertions, 210 deletions
diff --git a/tikzit/src/Makefile.am b/tikzit/src/Makefile.am
index e997409..1d6f67a 100644
--- a/tikzit/src/Makefile.am
+++ b/tikzit/src/Makefile.am
@@ -52,13 +52,12 @@ tikzit_SOURCES = gtk/Application.m \
gtk/NSError+Glib.m \
gtk/NSFileManager+Glib.m \
gtk/NSString+Glib.m \
- gtk/PropertyPane.m \
+ gtk/PropertiesWindow.m \
gtk/PropertyListEditor.m \
gtk/RecentManager.m \
gtk/SelectTool.m \
gtk/Shape+Render.m \
gtk/StyleManager+Storage.m \
- gtk/StylesPane.m \
gtk/TikzDocument.m \
gtk/ToolBox.m \
gtk/WidgetSurface.m \
diff --git a/tikzit/src/gtk/Application.h b/tikzit/src/gtk/Application.h
index 260f7ef..f412a67 100644
--- a/tikzit/src/gtk/Application.h
+++ b/tikzit/src/gtk/Application.h
@@ -22,6 +22,7 @@
@class Preambles;
@class PreambleEditor;
@class PreviewWindow;
+@class PropertiesWindow;
@class SettingsDialog;
@class StyleManager;
@class TikzDocument;
@@ -48,6 +49,7 @@ extern Application* app;
ToolBox *toolBox;
PreambleEditor *preambleWindow;
PreviewWindow *previewWindow;
+ PropertiesWindow *propertiesWindow;
SettingsDialog *settingsDialog;
// the open windows (array of Window*)
diff --git a/tikzit/src/gtk/Application.m b/tikzit/src/gtk/Application.m
index ecaec6d..9f5fba5 100644
--- a/tikzit/src/gtk/Application.m
+++ b/tikzit/src/gtk/Application.m
@@ -19,14 +19,7 @@
#import "Configuration.h"
#import "PreambleEditor.h"
-#ifdef HAVE_POPPLER
-#import "Preambles.h"
-#import "Preambles+Storage.h"
-#import "PreviewWindow.h"
-#endif
-#ifdef HAVE_POPPLER
-#import "SettingsDialog.h"
-#endif
+#import "PropertiesWindow.h"
#import "Shape.h"
#import "StyleManager.h"
#import "StyleManager+Storage.h"
@@ -35,6 +28,13 @@
#import "ToolBox.h"
#import "Window.h"
+#ifdef HAVE_POPPLER
+#import "Preambles.h"
+#import "Preambles+Storage.h"
+#import "PreviewWindow.h"
+#import "SettingsDialog.h"
+#endif
+
#import "BoundingBoxTool.h"
#import "CreateNodeTool.h"
#import "CreateEdgeTool.h"
@@ -48,6 +48,7 @@ Application* app = nil;
@interface Application (Notifications)
- (void) windowClosed:(NSNotification*)notification;
+- (void) windowGainedFocus:(NSNotification*)notification;
- (void) selectedToolChanged:(NSNotification*)notification;
@end
@@ -123,6 +124,9 @@ Application* app = nil;
name:@"ToolSelectionChanged"
object:toolBox];
+ propertiesWindow = [[PropertiesWindow alloc] init];
+ [propertiesWindow setVisible:YES];
+
app = [self retain];
}
@@ -177,6 +181,7 @@ Application* app = nil;
[tools release];
[activeTool release];
[toolBox release];
+ [propertiesWindow release];
[super dealloc];
}
@@ -200,6 +205,10 @@ Application* app = nil;
selector:@selector(windowClosed:)
name:@"WindowClosed"
object:window];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(windowGainedFocus:)
+ name:@"WindowGainedFocus"
+ object:window];
// FIXME: focus?
}
@@ -306,6 +315,11 @@ Application* app = nil;
gtk_main_quit();
}
}
+- (void) windowGainedFocus:(NSNotification*)notification {
+ Window *window = [notification object];
+ TikzDocument *doc = [window document];
+ [propertiesWindow setDocument:doc];
+}
- (void) selectedToolChanged:(NSNotification*)n {
id<Tool> tool = [[n userInfo] objectForKey:@"tool"];
if (tool != nil)
diff --git a/tikzit/src/gtk/PropertyPane.h b/tikzit/src/gtk/PropertiesWindow.h
index b4a44f7..e5485cf 100644
--- a/tikzit/src/gtk/PropertyPane.h
+++ b/tikzit/src/gtk/PropertiesWindow.h
@@ -26,7 +26,7 @@
@class EdgePropertyDelegate;
@class EdgeNodePropertyDelegate;
-@interface PropertyPane: NSObject {
+@interface PropertiesWindow: NSObject {
TikzDocument *document;
BOOL blockUpdates;
@@ -35,16 +35,17 @@
PropertyListEditor *edgeProps;
PropertyListEditor *edgeNodeProps;
- GraphPropertyDelegate *graphPropDelegate;
- NodePropertyDelegate *nodePropDelegate;
- EdgePropertyDelegate *edgePropDelegate;
+ GraphPropertyDelegate *graphPropDelegate;
+ NodePropertyDelegate *nodePropDelegate;
+ EdgePropertyDelegate *edgePropDelegate;
EdgeNodePropertyDelegate *edgeNodePropDelegate;
+ GtkWidget *window;
GtkWidget *propertiesPane;
- GtkExpander *graphPropsExpander;
- GtkExpander *nodePropsExpander;
- GtkExpander *edgePropsExpander;
+ GtkWidget *graphPropsBin;
+ GtkWidget *nodePropsBin;
+ GtkWidget *edgePropsBin;
GtkEntry *nodeLabelEntry;
GtkToggleButton *edgeNodeToggle;
@@ -52,18 +53,14 @@
GtkEntry *edgeNodeLabelEntry;
}
-@property (readonly) GtkWidget *widget;
@property (retain) TikzDocument *document;
+@property (assign) BOOL visible;
- (id) init;
- (void) restoreUiStateFromConfig:(Configuration*)file group:(NSString*)group;
- (void) saveUiStateToConfig:(Configuration*)file group:(NSString*)group;
-- (void) favourGraphProperties;
-- (void) favourNodeProperties;
-- (void) favourEdgeProperties;
-
@end
// vim:ft=objc:ts=8:et:sts=4:sw=4:foldmethod=marker
diff --git a/tikzit/src/gtk/PropertyPane.m b/tikzit/src/gtk/PropertiesWindow.m
index c4bd73e..7ae592b 100644
--- a/tikzit/src/gtk/PropertyPane.m
+++ b/tikzit/src/gtk/PropertiesWindow.m
@@ -15,7 +15,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#import "PropertyPane.h"
+#import "PropertiesWindow.h"
#import "PropertyListEditor.h"
#import "GraphElementProperty.h"
#import "gtkhelpers.h"
@@ -26,12 +26,13 @@ static GtkWidget *createLabelledEntry (const gchar *labelText, GtkEntry **entry)
static GtkWidget *createPropsPaneWithLabelEntry (PropertyListEditor *props, GtkEntry **labelEntry);
// }}}
// {{{ GTK+ callbacks
-static void node_label_changed_cb (GtkEditable *widget, PropertyPane *pane);
-static void edge_node_label_changed_cb (GtkEditable *widget, PropertyPane *pane);
-static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
+static gboolean props_window_delete_event_cb (GtkWidget *widget, GdkEvent *event, PropertiesWindow *window);
+static void node_label_changed_cb (GtkEditable *widget, PropertiesWindow *pane);
+static void edge_node_label_changed_cb (GtkEditable *widget, PropertiesWindow *pane);
+static void edge_node_toggled_cb (GtkToggleButton *widget, PropertiesWindow *pane);
// }}}
-@interface PropertyPane (Notifications)
+@interface PropertiesWindow (Notifications)
- (void) nodeSelectionChanged:(NSNotification*)n;
- (void) edgeSelectionChanged:(NSNotification*)n;
- (void) graphChanged:(NSNotification*)n;
@@ -40,12 +41,9 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
- (void) edgeNodeToggled:(BOOL)newValue;
@end
-@interface PropertyPane (Private)
-- (void) updateGraphPane;
-- (void) updateNodePane;
-- (void) updateEdgePane;
-- (void) _addSplitter;
-- (GtkExpander*) _addExpanderWithName:(const gchar*)name contents:(GtkWidget*)contents;
+@interface PropertiesWindow (Private)
+- (void) _updatePane;
+- (void) _setDisplayedWidget:(GtkWidget*)widget;
@end
// {{{ Delegates
@@ -77,9 +75,7 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
// }}}
// {{{ API
-@implementation PropertyPane
-
-@synthesize widget=propertiesPane;
+@implementation PropertiesWindow
- (id) init {
self = [super init];
@@ -103,43 +99,55 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
edgeNodeProps = [[PropertyListEditor alloc] init];
[edgeNodeProps setDelegate:edgePropDelegate];
- propertiesPane = gtk_vbox_new (FALSE, 0);
- g_object_ref_sink (propertiesPane);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_object_ref_sink (window);
+ gtk_window_set_title (GTK_WINDOW (window), "Properties");
+ gtk_window_set_role (GTK_WINDOW (window), "properties");
+ gtk_window_set_type_hint (GTK_WINDOW (window),
+ GDK_WINDOW_TYPE_HINT_UTILITY);
+ gtk_window_set_default_size (GTK_WINDOW (window), 200, 500);
+ g_signal_connect (G_OBJECT (window),
+ "delete-event",
+ G_CALLBACK (props_window_delete_event_cb),
+ self);
/*
* Graph properties
*/
- graphPropsExpander = [self _addExpanderWithName:"Graph properties"
- contents:[graphProps widget]];
- g_object_ref_sink (graphPropsExpander);
-
+ graphPropsBin = gtk_frame_new ("Graph properties");
+ gtk_container_add (GTK_CONTAINER (graphPropsBin), [graphProps widget]);
+ gtk_widget_show ([graphProps widget]);
+ g_object_ref_sink (graphPropsBin);
+ gtk_container_add (GTK_CONTAINER (window), graphPropsBin);
+ gtk_widget_show (graphPropsBin);
- [self _addSplitter];
/*
* Node properties
*/
GtkWidget *nodePropsWidget = createPropsPaneWithLabelEntry(nodeProps, &nodeLabelEntry);
- g_object_ref (nodeLabelEntry);
- nodePropsExpander = [self _addExpanderWithName:"Node properties"
- contents:nodePropsWidget];
- g_object_ref (nodePropsExpander);
+ g_object_ref_sink (nodeLabelEntry);
+ nodePropsBin = gtk_frame_new ("Node properties");
+ g_object_ref_sink (nodePropsBin);
+ gtk_container_add (GTK_CONTAINER (nodePropsBin), nodePropsWidget);
+ gtk_widget_show (nodePropsBin);
+ gtk_widget_show (nodePropsWidget);
g_signal_connect (G_OBJECT (nodeLabelEntry),
"changed",
G_CALLBACK (node_label_changed_cb),
self);
- [self _addSplitter];
-
/*
* Edge properties
*/
GtkBox *edgePropsBox = GTK_BOX (gtk_vbox_new (FALSE, 0));
gtk_box_set_spacing (edgePropsBox, 6);
- edgePropsExpander = [self _addExpanderWithName:"Edge properties"
- contents:GTK_WIDGET (edgePropsBox)];
- g_object_ref (edgePropsExpander);
+ edgePropsBin = gtk_frame_new ("Edge properties");
+ g_object_ref_sink (edgePropsBin);
+ gtk_container_add (GTK_CONTAINER (edgePropsBin), GTK_WIDGET (edgePropsBox));
+ gtk_widget_show (edgePropsBin);
+ gtk_widget_show (GTK_WIDGET (edgePropsBox));
gtk_widget_show ([edgeProps widget]);
gtk_box_pack_start (edgePropsBox, [edgeProps widget], FALSE, TRUE, 0);
@@ -149,7 +157,7 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
gtk_widget_show (split);
edgeNodeToggle = GTK_TOGGLE_BUTTON (gtk_check_button_new_with_label ("Child node"));
- g_object_ref (edgeNodeToggle);
+ g_object_ref_sink (edgeNodeToggle);
gtk_widget_show (GTK_WIDGET (edgeNodeToggle));
gtk_box_pack_start (edgePropsBox, GTK_WIDGET (edgeNodeToggle), FALSE, TRUE, 0);
g_signal_connect (G_OBJECT (GTK_WIDGET (edgeNodeToggle)),
@@ -158,16 +166,14 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
self);
edgeNodePropsWidget = createPropsPaneWithLabelEntry(edgeNodeProps, &edgeNodeLabelEntry);
- g_object_ref (edgeNodePropsWidget);
- g_object_ref (edgeNodeLabelEntry);
+ g_object_ref_sink (edgeNodePropsWidget);
+ g_object_ref_sink (edgeNodeLabelEntry);
gtk_box_pack_start (edgePropsBox, edgeNodePropsWidget, FALSE, TRUE, 0);
g_signal_connect (G_OBJECT (edgeNodeLabelEntry),
"changed",
G_CALLBACK (edge_node_label_changed_cb),
self);
-
- [self _addSplitter];
}
return self;
@@ -177,10 +183,9 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
[[NSNotificationCenter defaultCenter] removeObserver:self];
[document release];
- g_object_unref (propertiesPane);
- g_object_unref (graphPropsExpander);
- g_object_unref (nodePropsExpander);
- g_object_unref (edgePropsExpander);
+ g_object_unref (graphPropsBin);
+ g_object_unref (nodePropsBin);
+ g_object_unref (edgePropsBin);
g_object_unref (nodeLabelEntry);
g_object_unref (edgeNodeToggle);
g_object_unref (edgeNodePropsWidget);
@@ -223,101 +228,43 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
name:@"TikzChanged" object:doc];
}
- [self updateGraphPane];
- [self updateNodePane];
- [self updateEdgePane];
+ [self _updatePane];
[doc retain];
[document release];
document = doc;
}
-- (void) restoreUiStateFromConfig:(Configuration*)file group:(NSString*)group {
- gtk_expander_set_expanded (graphPropsExpander,
- [file booleanEntry:@"graph-props-expanded"
- inGroup:group
- withDefault:NO]);
- gtk_expander_set_expanded (nodePropsExpander,
- [file booleanEntry:@"node-props-expanded"
- inGroup:group
- withDefault:YES]);
- gtk_expander_set_expanded (edgePropsExpander,
- [file booleanEntry:@"edge-props-expanded"
- inGroup:group
- withDefault:NO]);
+- (BOOL) visible {
+ return gtk_widget_get_visible (window);
}
-- (void) saveUiStateToConfig:(Configuration*)file group:(NSString*)group {
- [file setBooleanEntry:@"graph-props-expanded"
- inGroup:group
- value:gtk_expander_get_expanded (graphPropsExpander)];
- [file setBooleanEntry:@"node-props-expanded"
- inGroup:group
- value:gtk_expander_get_expanded (nodePropsExpander)];
- [file setBooleanEntry:@"edge-props-expanded"
- inGroup:group
- value:gtk_expander_get_expanded (edgePropsExpander)];
-}
-
-- (int) expandedPaneCount {
- int eps = 0;
- if (gtk_expander_get_expanded (graphPropsExpander))
- eps++;
- if (gtk_expander_get_expanded (nodePropsExpander))
- eps++;
- if (gtk_expander_get_expanded (edgePropsExpander))
- eps++;
- return eps;
-}
-
-- (void) favourGraphProperties {
- if (!gtk_expander_get_expanded (graphPropsExpander)) {
- if ([self expandedPaneCount] == 1) {
- gtk_expander_set_expanded (nodePropsExpander, FALSE);
- gtk_expander_set_expanded (edgePropsExpander, FALSE);
- gtk_expander_set_expanded (graphPropsExpander, TRUE);
- }
- }
+- (void) setVisible:(BOOL)visible {
+ gtk_widget_set_visible (window, visible);
}
-- (void) favourNodeProperties {
- if (!gtk_expander_get_expanded (nodePropsExpander)) {
- if ([self expandedPaneCount] == 1) {
- gtk_expander_set_expanded (graphPropsExpander, FALSE);
- gtk_expander_set_expanded (edgePropsExpander, FALSE);
- gtk_expander_set_expanded (nodePropsExpander, TRUE);
- }
- }
+- (void) restoreUiStateFromConfig:(Configuration*)file group:(NSString*)group {
}
-- (void) favourEdgeProperties {
- if (!gtk_expander_get_expanded (edgePropsExpander)) {
- if ([self expandedPaneCount] == 1) {
- gtk_expander_set_expanded (graphPropsExpander, FALSE);
- gtk_expander_set_expanded (nodePropsExpander, FALSE);
- gtk_expander_set_expanded (edgePropsExpander, TRUE);
- }
- }
+- (void) saveUiStateToConfig:(Configuration*)file group:(NSString*)group {
}
@end
// }}}
// {{{ Notifications
-@implementation PropertyPane (Notifications)
+@implementation PropertiesWindow (Notifications)
- (void) nodeSelectionChanged:(NSNotification*)n {
- [self updateNodePane];
+ [self _updatePane];
}
- (void) edgeSelectionChanged:(NSNotification*)n {
- [self updateEdgePane];
+ [self _updatePane];
}
- (void) graphChanged:(NSNotification*)n {
- [self updateGraphPane];
- [self updateNodePane];
- [self updateEdgePane];
+ [self _updatePane];
}
- (void) nodeLabelEdited:(NSString*)newValue {
@@ -378,93 +325,69 @@ static void edge_node_toggled_cb (GtkToggleButton *widget, PropertyPane *pane);
// }}}
// {{{ Private
-@implementation PropertyPane (Private)
+@implementation PropertiesWindow (Private)
+
+- (void) _setDisplayedWidget:(GtkWidget*)widget {
+ GtkWidget *current = gtk_bin_get_child (GTK_BIN (window));
+ if (current != widget) {
+ gtk_container_remove (GTK_CONTAINER (window), current);
+ gtk_container_add (GTK_CONTAINER (window), widget);
+ }
+}
-- (void) updateGraphPane {
+- (void) _updatePane {
blockUpdates = YES;
+ BOOL editGraphProps = YES;
GraphElementData *data = [[document graph] data];
[graphProps setData:data];
- gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (graphPropsExpander)), data != nil);
-
- blockUpdates = NO;
-}
-- (void) updateNodePane {
- blockUpdates = YES;
-
- NSSet *sel = [[document pickSupport] selectedNodes];
- if ([sel count] == 1) {
- Node *n = [sel anyObject];
+ NSSet *nodeSel = [[document pickSupport] selectedNodes];
+ if ([nodeSel count] == 1) {
+ Node *n = [nodeSel anyObject];
[nodePropDelegate setNode:n];
[nodeProps setData:[n data]];
gtk_entry_set_text (nodeLabelEntry, [[n label] UTF8String]);
- gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (nodePropsExpander)), TRUE);
+ [self _setDisplayedWidget:nodePropsBin];
+ editGraphProps = NO;
} else {
[nodePropDelegate setNode:nil];
[nodeProps setData:nil];
gtk_entry_set_text (nodeLabelEntry, "");
- gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (nodePropsExpander)), FALSE);
- }
- blockUpdates = NO;
-}
-
-- (void) updateEdgePane {
- blockUpdates = YES;
-
- NSSet *sel = [[document pickSupport] selectedEdges];
- if ([sel count] == 1) {
- Edge *e = [sel anyObject];
- [edgePropDelegate setEdge:e];
- [edgeProps setData:[e data]];
- gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (edgePropsExpander)), TRUE);
- 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]);
- [edgeNodeProps setData:[[e edgeNode] data]];
- gtk_widget_set_sensitive (edgeNodePropsWidget, TRUE);
+ NSSet *edgeSel = [[document pickSupport] selectedEdges];
+ if ([edgeSel count] == 1) {
+ Edge *e = [edgeSel anyObject];
+ [edgePropDelegate setEdge:e];
+ [edgeProps setData:[e data]];
+ 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]);
+ [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), "");
+ [edgeNodeProps setData:nil];
+ gtk_widget_set_sensitive (edgeNodePropsWidget, FALSE);
+ }
+ [self _setDisplayedWidget:edgePropsBin];
+ editGraphProps = NO;
} else {
- gtk_toggle_button_set_active (edgeNodeToggle, FALSE);
- gtk_widget_hide (edgeNodePropsWidget);
- gtk_entry_set_text (GTK_ENTRY (edgeNodeLabelEntry), "");
+ [edgePropDelegate setEdge:nil];
+ [edgeProps setData:nil];
[edgeNodeProps setData:nil];
- gtk_widget_set_sensitive (edgeNodePropsWidget, FALSE);
+ gtk_entry_set_text (edgeNodeLabelEntry, "");
}
- } else {
- [edgePropDelegate setEdge:nil];
- [edgeProps setData:nil];
- [edgeNodeProps setData:nil];
- gtk_entry_set_text (edgeNodeLabelEntry, "");
- gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (edgePropsExpander)), FALSE);
}
- blockUpdates = NO;
-}
-
-- (void) _addSplitter {
- GtkWidget *split = gtk_hseparator_new ();
- gtk_box_pack_start (GTK_BOX (propertiesPane),
- split,
- FALSE, // expand
- FALSE, // fill
- 0); // padding
- gtk_widget_show (split);
-}
+ if (editGraphProps) {
+ [self _setDisplayedWidget:graphPropsBin];
+ }
-- (GtkExpander*) _addExpanderWithName:(const gchar*)name contents:(GtkWidget*)contents {
- GtkWidget *exp = gtk_expander_new (name);
- gtk_box_pack_start (GTK_BOX (propertiesPane),
- exp,
- FALSE, // expand
- TRUE, // fill
- 0); // padding
- gtk_widget_show (exp);
- gtk_container_set_border_width (GTK_CONTAINER (contents), 6);
- gtk_container_add (GTK_CONTAINER (exp), contents);
- gtk_widget_show (contents);
- return GTK_EXPANDER (exp);
+ blockUpdates = NO;
}
@end
@@ -593,7 +516,14 @@ static GtkWidget *createPropsPaneWithLabelEntry (PropertyListEditor *props, GtkE
// }}}
// {{{ GTK+ callbacks
-static void node_label_changed_cb (GtkEditable *editable, PropertyPane *pane) {
+static gboolean props_window_delete_event_cb (GtkWidget *widget, GdkEvent *event, PropertiesWindow *window) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ //[window setVisible:NO];
+ [pool drain];
+ return TRUE;
+}
+
+static void node_label_changed_cb (GtkEditable *editable, PropertiesWindow *pane) {
if (!gtk_widget_is_sensitive (GTK_WIDGET (editable))) {
// clearly wasn't the user editing
return;
@@ -607,7 +537,7 @@ static void node_label_changed_cb (GtkEditable *editable, PropertyPane *pane) {
[pool drain];
}
-static void edge_node_label_changed_cb (GtkEditable *editable, PropertyPane *pane) {
+static void edge_node_label_changed_cb (GtkEditable *editable, PropertiesWindow *pane) {
if (!gtk_widget_is_sensitive (GTK_WIDGET (editable))) {
// clearly wasn't the user editing
return;
@@ -621,7 +551,7 @@ static void edge_node_label_changed_cb (GtkEditable *editable, PropertyPane *pan
[pool drain];
}
-static void edge_node_toggled_cb (GtkToggleButton *toggle, PropertyPane *pane) {
+static void edge_node_toggled_cb (GtkToggleButton *toggle, PropertiesWindow *pane) {
if (!gtk_widget_is_sensitive (GTK_WIDGET (toggle))) {
// clearly wasn't the user editing
return;
diff --git a/tikzit/src/gtk/PropertyListEditor.m b/tikzit/src/gtk/PropertyListEditor.m
index 51f3cbf..f53ed0f 100644
--- a/tikzit/src/gtk/PropertyListEditor.m
+++ b/tikzit/src/gtk/PropertyListEditor.m
@@ -114,6 +114,7 @@ static void remove_clicked_cb (GtkButton *button,
widget = gtk_vbox_new (FALSE, 0);
gtk_box_set_spacing (GTK_BOX (widget), 6);
+ gtk_container_set_border_width (GTK_CONTAINER (widget), 6);
g_object_ref_sink (G_OBJECT (widget));
GtkWidget *listFrame = gtk_frame_new (NULL);
@@ -165,6 +166,8 @@ static void remove_clicked_cb (GtkButton *button,
gtk_widget_show_all (GTK_WIDGET (buttonBox));
gtk_widget_show_all (scrolledview);
+
+ gtk_widget_set_sensitive (widget, FALSE);
}
return self;
@@ -207,6 +210,7 @@ static void remove_clicked_cb (GtkButton *button,
[data release];
data = d;
[self reloadProperties];
+ gtk_widget_set_sensitive (widget, data != nil);
}
- (NSObject<PropertyChangeDelegate>*) delegate {
diff --git a/tikzit/src/gtk/ToolBox.m b/tikzit/src/gtk/ToolBox.m
index 0b424c4..837c5f9 100644
--- a/tikzit/src/gtk/ToolBox.m
+++ b/tikzit/src/gtk/ToolBox.m
@@ -43,10 +43,9 @@ static void unretain (gpointer data);
g_object_ref_sink (window);
gtk_window_set_title (GTK_WINDOW (window), "Toolbox");
gtk_window_set_role (GTK_WINDOW (window), "toolbox");
- gtk_window_set_type_hint (
- GTK_WINDOW (window),
- GDK_WINDOW_TYPE_HINT_UTILITY);
- gtk_window_set_default_size (GTK_WINDOW (window), 200, 500);
+ gtk_window_set_type_hint (GTK_WINDOW (window),
+ GDK_WINDOW_TYPE_HINT_UTILITY);
+ gtk_window_set_default_size (GTK_WINDOW (window), 150, 500);
gtk_window_set_deletable (GTK_WINDOW (window), FALSE);
GtkWidget *mainLayout = gtk_vbox_new (FALSE, 5);
diff --git a/tikzit/src/gtk/Window.m b/tikzit/src/gtk/Window.m
index 930b296..1856b9d 100644
--- a/tikzit/src/gtk/Window.m
+++ b/tikzit/src/gtk/Window.m
@@ -51,7 +51,7 @@ static void clipboard_paste_contents (GtkClipboard *clipboard,
// }}}
// {{{ Signals
-static void window_toplevel_focus_changed_cb (GObject *gobject, GParamSpec *pspec, GraphEditorPanel *panel);
+static void window_toplevel_focus_changed_cb (GObject *gobject, GParamSpec *pspec, Window *window);
static void graph_divider_position_changed_cb (GObject *gobject, GParamSpec *pspec, Window *window);
static void tikz_buffer_changed_cb (GtkTextBuffer *buffer, Window *window);
static gboolean main_window_delete_event_cb (GtkWidget *widget, GdkEvent *event, Window *window);
@@ -572,7 +572,7 @@ static void update_paste_action (GtkClipboard *clipboard, GdkEvent *event, GtkAc
g_signal_connect (G_OBJECT (window),
"notify::has-toplevel-focus",
G_CALLBACK (window_toplevel_focus_changed_cb),
- graphPanel);
+ self);
g_signal_connect (G_OBJECT (tikzPaneSplitter),
"notify::position",
G_CALLBACK (graph_divider_position_changed_cb),
@@ -739,17 +739,28 @@ static void update_paste_action (GtkClipboard *clipboard, GdkEvent *event, GtkAc
}
}
+- (GraphEditorPanel*) _graphPanel {
+ return graphPanel;
+}
+
@end
// }}}
// {{{ GTK+ callbacks
-static void window_toplevel_focus_changed_cb (GObject *gobject, GParamSpec *pspec, GraphEditorPanel *panel) {
+static void window_toplevel_focus_changed_cb (GObject *gobject, GParamSpec *pspec, Window *window) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
gboolean hasfocus;
g_object_get (gobject, "has-toplevel-focus", &hasfocus, NULL);
if (hasfocus) {
- [panel grabTool];
+ [[NSNotificationCenter defaultCenter]
+ postNotificationName:@"WindowGainedFocus"
+ object:window];
+ [[window _graphPanel] grabTool];
+ } else {
+ [[NSNotificationCenter defaultCenter]
+ postNotificationName:@"WindowLostFocus"
+ object:window];
}
[pool drain];
}
diff --git a/tikzit/src/gtk/gtkhelpers.m b/tikzit/src/gtk/gtkhelpers.m
index 164228c..3e4ab8a 100644
--- a/tikzit/src/gtk/gtkhelpers.m
+++ b/tikzit/src/gtk/gtkhelpers.m
@@ -213,8 +213,6 @@ void gtk_action_set_detailed_label (GtkAction *action, const gchar *baseLabel, c
* it simply allows the window contents to treat key events /before/
* accelerator keys come into play (this way widgets dont get deleted
* when cutting text in an entry etc.).
- * Creates a liststore suitable for comboboxes and such to
- * chose from a variety of types.
*
* Returns: whether the event was handled
*/