libsmartcols: add scols_cell_get_alignment()

Just to hide that we use cell flags (bitwise operations) to define
cell content alignment. The patch also more explicitly specifies the
flags in the header file.

The alignment is evaluated in the order: right, center, left. The
default is left.

Note that SCOLS_CELL_FL_* are used for for table title only.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2017-01-09 13:28:24 +01:00
parent efc0795811
commit 6ffbd28359
5 changed files with 39 additions and 9 deletions

View File

@ -2,6 +2,7 @@
<FILE>cell</FILE>
libscols_cell
scols_cell_copy_content
scols_cell_get_alignment
scols_cell_get_color
scols_cell_get_data
scols_cell_get_flags

View File

@ -214,6 +214,22 @@ int scols_cell_get_flags(const struct libscols_cell *ce)
return ce->flags;
}
/**
* scols_cell_get_alignment:
* @ce: a pointer to a struct libscols_cell instance
*
* Returns: SCOLS_CELL_FL_{RIGHT,CELNTER,LEFT}
*/
int scols_cell_get_alignment(const struct libscols_cell *ce)
{
if (ce->flags & SCOLS_CELL_FL_RIGHT)
return SCOLS_CELL_FL_RIGHT;
else if (ce->flags & SCOLS_CELL_FL_CENTER)
return SCOLS_CELL_FL_CENTER;
return SCOLS_CELL_FL_LEFT; /* default */
}
/**
* scols_cell_copy_content:
* @dest: a pointer to a struct libscols_cell instance

View File

@ -91,9 +91,10 @@ enum {
* Cell flags, see scols_cell_set_flags() before use
*/
enum {
SCOLS_CELL_FL_LEFT = 0,
SCOLS_CELL_FL_CENTER,
SCOLS_CELL_FL_RIGHT
/* alignment evaluated in order: right,center,left */
SCOLS_CELL_FL_LEFT = 0,
SCOLS_CELL_FL_CENTER = (1 << 0),
SCOLS_CELL_FL_RIGHT = (1 << 1)
};
extern struct libscols_iter *scols_new_iter(int direction);
@ -131,6 +132,7 @@ extern const char *scols_cell_get_color(const struct libscols_cell *ce);
extern int scols_cell_set_flags(struct libscols_cell *ce, int flags);
extern int scols_cell_get_flags(const struct libscols_cell *ce);
extern int scols_cell_get_alignment(const struct libscols_cell *ce);
extern void *scols_cell_get_userdata(struct libscols_cell *ce);
extern int scols_cell_set_userdata(struct libscols_cell *ce, void *data);

View File

@ -157,3 +157,9 @@ global:
scols_wrapnl_chunksize;
scols_wrapnl_nextchunk;
} SMARTCOLS_2.28;
SMARTCOLS_2.30 {
global:
scols_cell_get_alignment;
} SMARTCOLS_2.29;

View File

@ -782,14 +782,19 @@ static int print_title(struct libscols_table *tb)
goto done;
}
if (tb->title.flags & SCOLS_CELL_FL_LEFT)
align = MBS_ALIGN_LEFT;
else if (tb->title.flags & SCOLS_CELL_FL_RIGHT)
switch (scols_cell_get_alignment(&tb->title)) {
case SCOLS_CELL_FL_RIGHT:
align = MBS_ALIGN_RIGHT;
else if (tb->title.flags & SCOLS_CELL_FL_CENTER)
break;
case SCOLS_CELL_FL_CENTER:
align = MBS_ALIGN_CENTER;
else
align = MBS_ALIGN_LEFT; /* default */
break;
case SCOLS_CELL_FL_LEFT:
default:
align = MBS_ALIGN_LEFT;
break;
}
/* copy from buf to title and align to width with title_padding */
rc = mbsalign_with_padding(buf, title, titlesz,