summaryrefslogtreecommitdiff
path: root/src/glibext/gcodebuffer.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-01-23 17:48:50 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-01-23 17:48:50 (GMT)
commitadb98feb93f09d8de343c504a0c8c72815d62dab (patch)
treec345bf863252c2384b946b8ebfa315cda88b8ba9 /src/glibext/gcodebuffer.c
parent18be9204f2f6b054f254d1fa045039952ddfad41 (diff)
Created storable items for user comments.
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r--src/glibext/gcodebuffer.c74
1 files changed, 62 insertions, 12 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index f96212c..be7fa37 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -158,10 +158,10 @@ static void g_code_buffer_insert_lines_at(GCodeBuffer *, GBufferLine **, size_t,
/* Affiche un commentaire sur une ligne de tampon donnée. */
-static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *, GBufferLine *, const char *);
+static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *, GBufferLine *, const char *, GObject *);
/* Affiche un commentaire sur une ligne de tampon dédiée. */
-static bool _g_code_buffer_write_comment_area(GCodeBuffer *, GBufferLine *, const char *, bool);
+static bool _g_code_buffer_write_comment_area(GCodeBuffer *, GBufferLine *, const char *, bool, GObject *);
/* Retrouve la première ligne d'une zone de commentaire. */
static size_t g_code_buffer_find_first_line_comment(const GCodeBuffer *, size_t);
@@ -453,6 +453,7 @@ static void g_buffer_scan_process(GBufferScan *scan, GtkExtStatusBar *statusbar)
* Paramètres : buffer = tampon de lignes à consulter. *
* line = ligne à l'intérieur d'un commentaire. *
* comment = nouveau commentaire à inscrire à la ligne donnée. *
+* creator = créateur à l'origine de la construction. *
* *
* Description : Affiche un commentaire sur une ligne de tampon donnée. *
* *
@@ -462,7 +463,7 @@ static void g_buffer_scan_process(GBufferScan *scan, GtkExtStatusBar *statusbar)
* *
******************************************************************************/
-static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *buffer, GBufferLine *line, const char *comment)
+static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *buffer, GBufferLine *line, const char *comment, GObject *creator)
{
bool result; /* Bilan à retourner */
const mrange_t *range; /* Emplace de ligne à utiliser */
@@ -472,6 +473,7 @@ static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *buffer, GBufferLin
char *saveptr; /* Sauvegarde pour la sécurité */
char *token; /* Fragment à insérer */
size_t len; /* Taille dudit fragment */
+ GBufferSegment *segment; /* Segment à marquer au fer */
GBufferLine *new; /* Nouvelle ligne créée */
size_t i; /* Boucle de parcours */
@@ -493,12 +495,17 @@ static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *buffer, GBufferLin
len = strlen(token);
if (!result)
- g_buffer_line_insert_text(line, BLC_COMMENTS, token, len, RTT_COMMENT);
+ {
+ segment = g_buffer_line_insert_text(line, BLC_COMMENTS, token, len, RTT_COMMENT);
+ g_buffer_segment_set_creator(segment, creator);
+ }
else
{
new = g_code_buffer_prepare_new_line(buffer, range);
- g_buffer_line_insert_text(new, BLC_COMMENTS, token, len, RTT_COMMENT);
+
+ segment = g_buffer_line_insert_text(new, BLC_COMMENTS, token, len, RTT_COMMENT);
+ g_buffer_segment_set_creator(segment, creator);
extra = (GBufferLine **)realloc(extra, ++extra_count * sizeof(GBufferLine *));
@@ -534,6 +541,7 @@ static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *buffer, GBufferLin
* Paramètres : buffer = tampon de lignes à consulter. *
* line = ligne à l'intérieur d'un commentaire. *
* comment = nouveau commentaire à inscrire à la ligne donnée. *
+* creator = créateur à l'origine de la construction. *
* *
* Description : Affiche un commentaire sur une ligne de tampon donnée. *
* *
@@ -543,7 +551,7 @@ static bool _g_code_buffer_write_inlined_comment(GCodeBuffer *buffer, GBufferLin
* *
******************************************************************************/
-bool g_code_buffer_update_inlined_comment(GCodeBuffer *buffer, GBufferLine *line, const char *comment)
+bool g_code_buffer_update_inlined_comment(GCodeBuffer *buffer, GBufferLine *line, const char *comment, GObject *creator)
{
bool result; /* Bilan à retourner */
@@ -553,7 +561,7 @@ bool g_code_buffer_update_inlined_comment(GCodeBuffer *buffer, GBufferLine *line
result = true;
if (result)
- result = _g_code_buffer_write_inlined_comment(buffer, line, comment);
+ result = _g_code_buffer_write_inlined_comment(buffer, line, comment, creator);
/* TODO : emit() */
@@ -568,6 +576,7 @@ bool g_code_buffer_update_inlined_comment(GCodeBuffer *buffer, GBufferLine *line
* line = ligne à l'intérieur d'un commentaire. *
* comment = nouveau commentaire à inscrire à la ligne donnée. *
* before = précise la position du commentaire. *
+* creator = créateur à l'origine de la construction. *
* *
* Description : Affiche un commentaire sur une ligne de tampon dédiée. *
* *
@@ -577,7 +586,7 @@ bool g_code_buffer_update_inlined_comment(GCodeBuffer *buffer, GBufferLine *line
* *
******************************************************************************/
-static bool _g_code_buffer_write_comment_area(GCodeBuffer *buffer, GBufferLine *line, const char *comment, bool before)
+static bool _g_code_buffer_write_comment_area(GCodeBuffer *buffer, GBufferLine *line, const char *comment, bool before, GObject *creator)
{
bool result; /* Bilan à retourner */
const mrange_t *range; /* Emplace de ligne à utiliser */
@@ -588,6 +597,7 @@ static bool _g_code_buffer_write_comment_area(GCodeBuffer *buffer, GBufferLine *
char *token; /* Fragment à insérer */
size_t len; /* Taille dudit fragment */
GBufferLine *new; /* Nouvelle ligne créée */
+ GBufferSegment *segment; /* Segment à marquer au fer */
size_t i; /* Boucle de parcours */
assert(!g_buffer_line_has_comment(line));
@@ -609,7 +619,9 @@ static bool _g_code_buffer_write_comment_area(GCodeBuffer *buffer, GBufferLine *
new = g_code_buffer_prepare_new_line(buffer, range);
g_buffer_line_start_merge_at(new, BLC_DISPLAY);
- g_buffer_line_insert_text(new, BLC_DISPLAY, token, len, RTT_COMMENT);
+
+ segment = g_buffer_line_insert_text(new, BLC_DISPLAY, token, len, RTT_COMMENT);
+ g_buffer_segment_set_creator(segment, creator);
extra = (GBufferLine **)realloc(extra, ++extra_count * sizeof(GBufferLine *));
@@ -644,6 +656,7 @@ static bool _g_code_buffer_write_comment_area(GCodeBuffer *buffer, GBufferLine *
* line = ligne à l'intérieur d'un commentaire. *
* comment = nouveau commentaire à inscrire à la ligne donnée. *
* before = précise la position du commentaire. *
+* creator = créateur à l'origine de la construction. *
* *
* Description : Affiche un commentaire sur une ligne de tampon dédiée. *
* *
@@ -653,7 +666,7 @@ static bool _g_code_buffer_write_comment_area(GCodeBuffer *buffer, GBufferLine *
* *
******************************************************************************/
-bool g_code_buffer_update_comment_area(GCodeBuffer *buffer, GBufferLine *line, const char *comment, bool before)
+bool g_code_buffer_update_comment_area(GCodeBuffer *buffer, GBufferLine *line, const char *comment, bool before, GObject *creator)
{
bool result; /* Bilan à retourner */
@@ -663,7 +676,7 @@ bool g_code_buffer_update_comment_area(GCodeBuffer *buffer, GBufferLine *line, c
result = true;
if (result)
- result = _g_code_buffer_write_comment_area(buffer, line, comment, before);
+ result = _g_code_buffer_write_comment_area(buffer, line, comment, before, creator);
/* TODO : emit() */
@@ -873,6 +886,43 @@ static size_t g_code_buffer_find_last_line_comment(const GCodeBuffer *buffer, si
* Paramètres : buffer = tampon de lignes à consulter. *
* line = ligne à l'intérieur d'un commentaire. *
* *
+* Description : Retrouve le créateur d'un commentaire existant. *
+* *
+* Retour : Instance trouvée à déréférencer ensuite ou NULL si aucune. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GObject *g_code_buffer_get_comment_creator(const GCodeBuffer *buffer, const GBufferLine *line)
+{
+ GObject *result; /* Instance à retourner */
+ BufferLineColumn merge_col; /* Colonne de fusion */
+
+ if (g_buffer_line_has_comment(line))
+ {
+ merge_col = g_buffer_line_get_merge_start(line);
+
+ if (merge_col == BLC_DISPLAY)
+ result = g_buffer_line_find_first_segment_creator(line, BLC_DISPLAY);
+ else
+ result = g_buffer_line_find_first_segment_creator(line, BLC_COMMENTS);
+
+ }
+
+ else
+ result = NULL;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : buffer = tampon de lignes à consulter. *
+* line = ligne à l'intérieur d'un commentaire. *
+* *
* Description : Récupère le contenu d'un commentaire existant. *
* *
* Retour : Commentaire retrouver à libérer ou NULL en cas d'échec. *
@@ -1536,7 +1586,7 @@ GBufferLine *g_code_buffer_find_line_by_addr(const GCodeBuffer *buffer, const vm
result = buffer->lines[index];
if (flags != BLF_NONE)
- while ((g_buffer_line_get_flags(result) & flags) == 0)
+ while ((g_buffer_line_get_flags(result) & flags) != flags)
{
if ((index + 1) == buffer->used) break;