summaryrefslogtreecommitdiff
path: root/src/glibext/gbufferline.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-01-21 20:51:27 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-01-21 21:23:58 (GMT)
commitdd33acbff36c0a3ae4618ac5021e74448cad5ce5 (patch)
tree834351b836760fc54533e2f39c4b8202e695c0e3 /src/glibext/gbufferline.c
parente3ee1abf12d7868f5eaf759e04a4b4911fcdfa91 (diff)
Defined some raw primitives to write or delete comments.
Diffstat (limited to 'src/glibext/gbufferline.c')
-rw-r--r--src/glibext/gbufferline.c106
1 files changed, 101 insertions, 5 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index d09758f..2f29ee4 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -170,6 +170,19 @@ static void on_line_segment_changed(GBufferSegment *, GBufferLine *);
static void reset_column(buffer_line_column *column)
{
+ size_t i; /* Boucle de parcours */
+
+ for (i = 0; i < column->count; i++)
+ g_object_unref(G_OBJECT(column->segments[i]));
+
+ if (column->segments != NULL)
+ {
+ free(column->segments);
+ column->segments = NULL;
+ }
+
+ column->count = 0;
+
column->max_width = 0;
}
@@ -1264,6 +1277,37 @@ GBufferSegment *g_buffer_line_insert_text(GBufferLine *line, BufferLineColumn co
* Paramètres : line = ligne à venir consulter. *
* first = première colonne à parcourir. *
* end = colonne de fin de parcours. *
+* *
+* Description : Indique si du texte est présent dans une ligne de tampon. *
+* *
+* Retour : true pour indiquer la présence de texte, false pour du vide. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_buffer_line_has_text(const GBufferLine *line, BufferLineColumn first, BufferLineColumn end)
+{
+ bool result; /* Bilan à retourner */
+ BufferLineColumn i; /* Boucle de parcours */
+
+ result = false;
+
+ assert(first < end);
+
+ for (i = first; i < end && !result; i++)
+ result = (line->columns[i].count > 0);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : line = ligne à venir consulter. *
+* first = première colonne à parcourir. *
+* end = colonne de fin de parcours. *
* markup = indique si le texte doit être décoré ou non. *
* *
* Description : Donne le texte représenté par une ligne de tampon. *
@@ -1311,6 +1355,31 @@ char *g_buffer_line_get_text(const GBufferLine *line, BufferLineColumn first, Bu
}
+/******************************************************************************
+* *
+* Paramètres : line = ligne à venir modifier. *
+* first = première colonne à parcourir. *
+* end = colonne de fin de parcours. *
+* *
+* Description : Supprime du texte représenté par une ligne de tampon. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_buffer_line_delete_text(GBufferLine *line, BufferLineColumn first, BufferLineColumn end)
+{
+ BufferLineColumn i; /* Boucle de parcours #1 */
+
+ assert(first < end);
+
+ for (i = first; i < end; i++)
+ reset_column(&line->columns[i]);
+
+}
+
/******************************************************************************
* *
@@ -1353,7 +1422,8 @@ void g_buffer_line_update_max_widths(GBufferLine *line, GBufferLine *manager)
g_object_ref(G_OBJECT(manager));
line->manager = manager;
- g_object_unref(G_OBJECT(old));
+ if (old != NULL)
+ g_object_unref(G_OBJECT(old));
}
@@ -1388,6 +1458,32 @@ void g_buffer_line_update_max_widths(GBufferLine *line, GBufferLine *manager)
/******************************************************************************
* *
* Paramètres : line = ligne à venir consulter. *
+* *
+* Description : Renvoie la ligne comptabilisant les largeurs pour un groupe. *
+* *
+* Retour : Ligne considérée comme la gestionnaire d'un ensemble. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GBufferLine *g_buffer_line_get_width_manager(GBufferLine *line)
+{
+ GBufferLine *result; /* Gestionnaire à retourner */
+
+ if (line->flags & BLF_WIDTH_MANAGER)
+ result = line;
+ else
+ result = line->manager;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : line = ligne à venir consulter. *
* max_widths = tableau résumant les largeurs maximales. [OUT]*
* merged_width = largeur maximale en cas de fusion. |OUT] *
* *
@@ -1404,10 +1500,7 @@ void g_buffer_line_apply_max_widths(GBufferLine *line, gint *max_widths, gint *m
GBufferLine *manager; /* Gestionnaire de groupe */
BufferLineColumn i; /* Boucle de parcours */
- if (line->flags & BLF_WIDTH_MANAGER)
- manager = line;
- else
- manager = line->manager;
+ manager = g_buffer_line_get_width_manager(line);
for (i = 0; i < BLC_COUNT; i++)
max_widths[i] = MAX(manager->max_widths[i], max_widths[i]);
@@ -1434,6 +1527,7 @@ void g_buffer_line_apply_max_widths(GBufferLine *line, gint *max_widths, gint *m
gint g_buffer_line_compute_max_width(const GBufferLine *line, BufferLineColumn index, const gint *max_widths)
{
gint result; /* Largeur à retourner */
+ //GBufferLine *manager; /* Gestionnaire de groupe */
assert(index < BLC_COUNT);
@@ -1447,6 +1541,8 @@ gint g_buffer_line_compute_max_width(const GBufferLine *line, BufferLineColumn i
else
{
+ //manager = g_buffer_line_get_width_manager(line);
+
if (line->flags & BLF_WIDTH_MANAGER)
result = line->max_widths[index];
else