diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-01-23 17:48:50 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-01-23 17:48:50 (GMT) |
commit | adb98feb93f09d8de343c504a0c8c72815d62dab (patch) | |
tree | c345bf863252c2384b946b8ebfa315cda88b8ba9 /src/glibext/gcodebuffer.c | |
parent | 18be9204f2f6b054f254d1fa045039952ddfad41 (diff) |
Created storable items for user comments.
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r-- | src/glibext/gcodebuffer.c | 74 |
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; |