aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/text/e-text-model-repos.c
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/text/e-text-model-repos.c')
-rw-r--r--widgets/text/e-text-model-repos.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/widgets/text/e-text-model-repos.c b/widgets/text/e-text-model-repos.c
new file mode 100644
index 0000000000..407a661b05
--- /dev/null
+++ b/widgets/text/e-text-model-repos.c
@@ -0,0 +1,73 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/* Standard ETextModelReposFn definitions
+ *
+ * Copyright (C) 2001 Ximian Inc.
+ *
+ * Author: Jon Trowbridge <trow@ximian.com>
+ */
+
+#include "e-text-model-repos.h"
+
+#define MODEL_CLAMP(model, pos) (CLAMP((pos), 0, strlen((model)->text)))
+
+gint
+e_repos_shift (gint pos, gpointer data)
+{
+ EReposShift *info = (EReposShift *) data;
+ g_return_val_if_fail (data, -1);
+
+ return e_text_model_validate_position (info->model, pos + info->change);
+}
+
+gint
+e_repos_absolute (gint pos, gpointer data)
+{
+ EReposAbsolute *info = (EReposAbsolute *) data;
+ g_return_val_if_fail (data, -1);
+
+ pos = info->pos;
+ if (pos < 0) {
+ gint len = e_text_model_get_text_length (info->model);
+ pos += len + 1;
+ }
+
+ return e_text_model_validate_position (info->model, pos);
+}
+
+gint
+e_repos_insert_shift (gint pos, gpointer data)
+{
+ EReposInsertShift *info = (EReposInsertShift *) data;
+ g_return_val_if_fail (data, -1);
+
+ if (pos >= info->pos)
+ pos += info->len;
+
+ return e_text_model_validate_position (info->model, pos);
+}
+
+gint
+e_repos_delete_shift (gint pos, gpointer data)
+{
+ EReposDeleteShift *info = (EReposDeleteShift *) data;
+ g_return_val_if_fail (data, -1);
+
+ if (pos > info->pos + info->len)
+ pos -= info->len;
+ else if (pos > info->pos)
+ pos = info->pos;
+
+ return e_text_model_validate_position (info->model, pos);
+}
+
+gint
+e_repos_clamp (gint pos, gpointer data)
+{
+ ETextModel *model;
+
+ g_return_val_if_fail (data != NULL && E_IS_TEXT_MODEL (data), -1);
+ model = E_TEXT_MODEL (data);
+
+ return e_text_model_validate_position (model, pos);
+}