summaryrefslogtreecommitdiff
path: root/src/glibext/widthtracker.h
blob: c67e335d6653c8639deede87739a244151bf9fac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139

/* Chrysalide - Outil d'analyse de fichiers binaires
 * widthtracker.h - prototypes pour le suivi des largeurs associées à un ensemble de lignes
 *
 * Copyright (C) 2016-2018 Cyrille Bagard
 *
 *  This file is part of Chrysalide.
 *
 *  Chrysalide is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Chrysalide is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Chrysalide.  If not, see <http://www.gnu.org/licenses/>.
 */


#ifndef _GLIBEXT_WIDTHTRACKER_H
#define _GLIBEXT_WIDTHTRACKER_H


#include "buffercache.h"
#include "helpers.h"



#define G_TYPE_WIDTH_TRACKER (g_width_tracker_get_type())

DECLARE_GTYPE(GWidthTracker, g_width_tracker, G, WIDTH_TRACKER);


/* Crée un nouveau suivi de largeurs au sein de lignes. */
GWidthTracker *g_width_tracker_new(GBufferCache *);

/* Indique la largeur minimale pour une colonne donnée. */
int g_width_tracker_get_column_min_width(const GWidthTracker *, size_t);

/* Impose une largeur minimale pour une colonne donnée. */
void g_width_tracker_set_column_min_width(GWidthTracker *, size_t, int);

/* Détermine la largeur nécessaire à une pleine représentation. */
void g_width_tracker_compute_width(const GWidthTracker *, int *);




#if 0


#include <glib-object.h>
#include <stdbool.h>


#include "delayed.h"
#include "gdisplayoptions.h"




/* Mémorisation des largeurs pour un groupe de lignes */
typedef struct _line_width_summary
{
    gint max_widths[10/*BLC_COUNT*/];             /* Taille cachée des colonnes  */
    gint merged_width;                      /* Largeur cumulée avant fusion*/

} line_width_summary;



/* ---------------------------- RASSEMBLEMENT DE MESURES ---------------------------- */


/* gbuffercache.h : Tampon pour gestion de lignes optimisée (instance) */
typedef struct _GBufferCache GBufferCache;

/* ../gtkext/gtkstatusstack.h : Abstration d'une gestion de barre de statut (instance) */
typedef struct _GtkStatusStack GtkStatusStack;


#define G_TYPE_WIDTH_TRACKER            (g_width_tracker_get_type())
#define G_WIDTH_TRACKER(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_WIDTH_TRACKER, GWidthTracker))
#define G_WIDTH_TRACKER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_WIDTH_TRACKER, GWidthTrackerClass))
#define G_IS_WIDTH_TRACKER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_WIDTH_TRACKER))
#define G_IS_WIDTH_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_WIDTH_TRACKER))
#define G_WIDTH_TRACKER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_WIDTH_TRACKER, GWidthTrackerClass))


/* Gestionnaire de largeurs associées aux lignes (instance) */
typedef struct _GWidthTracker GWidthTracker;

/* Gestionnaire de largeurs associées aux lignes (classe) */
typedef struct _GWidthTrackerClass GWidthTrackerClass;


/* Détermine le type du gestionnaire de largeurs associées aux lignes. */
GType g_width_tracker_get_type(void);

/* Crée un nouveau suivi de largeurs au sein de lignes. */
//GWidthTracker *g_width_tracker_new(GBufferCache *, size_t, size_t);

/* Crée un nouveau suivi de largeurs au sein de lignes. */
GWidthTracker *g_width_tracker_new_restricted(const GWidthTracker *, size_t, size_t);

/* Indique le nombre de colonnes prises en compte. */
size_t g_width_tracker_count_columns(const GWidthTracker *);

/* Prend acte d'un changement sur une ligne pour les largeurs. */
void g_width_tracker_update(GWidthTracker *, size_t);

/* Prend acte de l'ajout de lignes pour les largeurs. */
void g_width_tracker_update_added(GWidthTracker *, size_t, size_t);

/* Prend acte de la suppression de lignes pour les largeurs. */
void g_width_tracker_update_deleted(GWidthTracker *, size_t, size_t);

/* Calcule les largeurs requises par un ensemble de lignes. */
void g_width_tracker_build_initial_cache(GWidthTracker *, wgroup_id_t, GtkStatusStack *);

/* Fournit la largeur requise par une visualisation. */
gint g_width_tracker_get_width(GWidthTracker *, const GDisplayOptions *);

/* Fournit la largeur requise pour dépasser les marges gauches. */
gint g_width_tracker_get_margin(GWidthTracker *, const GDisplayOptions *);

/* Indique la largeur locale d'une colonne donnée. */
gint g_width_tracker_get_local_column_width(GWidthTracker *, size_t, size_t, size_t);


#endif



#endif  /* _GLIBEXT_WIDTHTRACKER_H */