summaryrefslogtreecommitdiff
path: root/src/linux/PreambleEditor.m
diff options
context:
space:
mode:
authorrandomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64>2012-01-06 18:50:09 +0000
committerrandomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64>2012-01-06 18:50:09 +0000
commit6458381a1115a4088d6a3a794f3e2ec40ea07987 (patch)
tree734b8715308bfd871d1717ac338c436c5de33ac9 /src/linux/PreambleEditor.m
parent042a081c40bdd8ab0e5a1cd3d2a7a81182660253 (diff)
GTK: allow preambles to be added, removed and renamed
git-svn-id: https://tikzit.svn.sourceforge.net/svnroot/tikzit/trunk@355 7c02a99a-9b00-45e3-bf44-6f3dd7fddb64
Diffstat (limited to 'src/linux/PreambleEditor.m')
-rw-r--r--src/linux/PreambleEditor.m124
1 files changed, 109 insertions, 15 deletions
diff --git a/src/linux/PreambleEditor.m b/src/linux/PreambleEditor.m
index 31adcb0..eb05781 100644
--- a/src/linux/PreambleEditor.m
+++ b/src/linux/PreambleEditor.m
@@ -48,6 +48,11 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
- (void) revert;
- (void) update;
- (void) fillListStore;
+- (BOOL) isDefaultPreambleSelected;
+- (NSString*) selectedPreambleName;
+- (void) addPreamble;
+- (void) deletePreamble;
+- (void) renamePreambleAtPath:(gchar*)path to:(gchar*)newValue;
@end
// }}}
@@ -70,7 +75,8 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
window = NULL;
preambleView = NULL;
preambleSelector = NULL;
- loading = NO;
+ blockSignals = NO;
+ adding = NO;
}
return self;
@@ -128,9 +134,10 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
}
@end
-// }}}
+// }}}
// {{{ Private
+
@implementation PreambleEditor (Private)
- (GtkWidget*) createPreambleList {
preambleListStore = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN);
@@ -203,7 +210,7 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
GtkWidget *listWidget = [self createPreambleList];
GtkBox *listBox = GTK_BOX (gtk_vbox_new (FALSE, 0));
gtk_box_pack_start (listBox, listWidget, TRUE, TRUE, 0);
- /*
+
GtkContainer *listButtonBox = GTK_CONTAINER (gtk_hbox_new (FALSE, 0));
gtk_box_pack_start (listBox, GTK_WIDGET (listButtonBox), FALSE, TRUE, 0);
GtkWidget *addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
@@ -218,7 +225,7 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
G_CALLBACK (remove_button_clicked_cb),
self);
gtk_container_add (listButtonBox, removeButton);
- */
+
gtk_paned_pack1 (paned, GTK_WIDGET (listBox), FALSE, TRUE);
preambleView = GTK_TEXT_VIEW (gtk_text_view_new ());
@@ -266,7 +273,7 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
}
- (void) save {
- if ([preambles selectedPreambleIsDefault])
+ if ([self isDefaultPreambleSelected])
return;
GtkTextIter start,end;
GtkTextBuffer *preambleBuffer = gtk_text_view_get_buffer (preambleView);
@@ -280,11 +287,11 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
- (void) revert {
GtkTextBuffer *preambleBuffer = gtk_text_view_get_buffer (preambleView);
gtk_text_buffer_set_text (preambleBuffer, [[preambles currentPreamble] UTF8String], -1);
- gtk_text_view_set_editable (preambleView, ![preambles selectedPreambleIsDefault]);
+ gtk_text_view_set_editable (preambleView, ![self isDefaultPreambleSelected]);
}
- (void) update {
- if (!loading) {
+ if (!blockSignals) {
[self save];
}
GtkTreeSelection *sel = gtk_tree_view_get_selection (preambleSelector);
@@ -301,7 +308,7 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
}
- (void) fillListStore {
- loading = YES;
+ blockSignals = YES;
GtkTreeIter row;
gtk_list_store_clear (preambleListStore);
@@ -312,7 +319,7 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
IS_CUSTOM_COLUMN, FALSE,
-1);
GtkTreeSelection *sel = gtk_tree_view_get_selection (preambleSelector);
- if ([preambles selectedPreambleIsDefault]) {
+ if ([self isDefaultPreambleSelected]) {
gtk_tree_selection_select_iter (sel, &row);
}
@@ -324,16 +331,102 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
NAME_COLUMN, [preambleName UTF8String],
IS_CUSTOM_COLUMN, TRUE,
-1);
- if ([preambleName isEqualToString:[preambles selectedPreambleName]]) {
+ if ([preambleName isEqualToString:[self selectedPreambleName]]) {
gtk_tree_selection_select_iter (sel, &row);
}
}
- loading = NO;
+ blockSignals = NO;
+}
+
+- (BOOL) isDefaultPreambleSelected {
+ return [preambles selectedPreambleIsDefault];
+}
+
+- (NSString*) selectedPreambleName {
+ return [preambles selectedPreambleName];
+}
+
+- (void) addPreamble {
+ NSString *newName = [preambles addPreamble];
+
+ GtkTreeIter row;
+ gtk_list_store_append (preambleListStore, &row);
+ gtk_list_store_set (preambleListStore, &row,
+ NAME_COLUMN, [newName UTF8String],
+ IS_CUSTOM_COLUMN, TRUE,
+ -1);
+
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (preambleSelector);
+ gtk_tree_selection_select_iter (sel, &row);
+}
+
+- (void) deletePreamble {
+ if ([self isDefaultPreambleSelected])
+ return;
+
+ NSString *name = [self selectedPreambleName];
+
+ GtkTreeIter row;
+ GtkTreeModel *model = GTK_TREE_MODEL (preambleListStore);
+
+ gtk_tree_model_get_iter_first (model, &row);
+ // ignore first; it is the default one
+ gboolean found = FALSE;
+ while (!found && gtk_tree_model_iter_next (model, &row)) {
+ gchar *candidate;
+ gtk_tree_model_get (model, &row, NAME_COLUMN, &candidate, -1);
+ if (g_strcmp0 (candidate, [name UTF8String]) == 0) {
+ found = TRUE;
+ }
+ g_free (candidate);
+ }
+
+ if (!found)
+ return;
+
+ if (![preambles removePreamble:name])
+ return;
+
+ blockSignals = YES;
+
+ gboolean had_next = gtk_list_store_remove (preambleListStore, &row);
+ if (!had_next) {
+ // select the last item
+ gint length = gtk_tree_model_iter_n_children (model, NULL);
+ gtk_tree_model_iter_nth_child (model, &row, NULL, length - 1);
+ }
+
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (preambleSelector);
+ gtk_tree_selection_select_iter (sel, &row);
+
+ [self revert];
+
+ blockSignals = NO;
+}
+
+- (void) renamePreambleAtPath:(gchar*)path to:(gchar*)newValue {
+ NSString *newName = [NSString stringWithUTF8String:newValue];
+
+ GtkTreeIter row;
+ GtkTreeModel *model = GTK_TREE_MODEL (preambleListStore);
+
+ if (!gtk_tree_model_get_iter_from_string (model, &row, path))
+ return;
+
+ gchar *oldValue;
+ gtk_tree_model_get (model, &row, NAME_COLUMN, &oldValue, -1);
+
+ NSString* oldName = [NSString stringWithUTF8String:oldValue];
+ if ([preambles renamePreambleFrom:oldName to:newName]) {
+ gtk_list_store_set (preambleListStore, &row,
+ NAME_COLUMN, newValue,
+ -1);
+ }
}
@end
-// }}}
+// }}}
// {{{ GTK+ callbacks
static gboolean window_delete_event_cb (GtkWidget *widget,
@@ -353,13 +446,13 @@ static void close_button_clicked_cb (GtkButton *widget, PreambleEditor *editor)
static void add_button_clicked_cb (GtkButton *widget, PreambleEditor *editor) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSLog(@"Add");
+ [editor addPreamble];
[pool drain];
}
static void remove_button_clicked_cb (GtkButton *widget, PreambleEditor *editor) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSLog(@"Remove");
+ [editor deletePreamble];
[pool drain];
}
@@ -380,6 +473,7 @@ static void preamble_name_edited_cb (GtkCellRendererText *renderer,
gchar *new_text,
PreambleEditor *editor) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ [editor renamePreambleAtPath:path to:new_text];
[pool drain];
}
@@ -392,4 +486,4 @@ static void preamble_selection_changed_cb (GtkTreeSelection *treeselection,
// }}}
-// vim:ft=objc:ts=4:noet:sts=4:sw=4
+// vim:ft=objc:ts=4:noet:sts=4:sw=4:foldmethod=marker