Blame label.c

Packit Service 8876fe
#include <slang.h>
Packit Service 8876fe
#include <stdlib.h>
Packit Service 8876fe
#include <string.h>
Packit Service 8876fe
Packit Service 8876fe
#include "newt.h"
Packit Service 8876fe
#include "newt_pr.h"
Packit Service 8876fe
Packit Service 8876fe
struct label {
Packit Service 8876fe
    char * text;
Packit Service 8876fe
    int length;
Packit Service 8876fe
    int cs;
Packit Service 8876fe
};
Packit Service 8876fe
Packit Service 8876fe
static void labelDraw(newtComponent co);
Packit Service 8876fe
static void labelDestroy(newtComponent co);
Packit Service 8876fe
Packit Service 8876fe
static struct componentOps labelOps = {
Packit Service 8876fe
    labelDraw,
Packit Service 8876fe
    newtDefaultEventHandler,
Packit Service 8876fe
    labelDestroy,
Packit Service 8876fe
    newtDefaultPlaceHandler,
Packit Service 8876fe
    newtDefaultMappedHandler,
Packit Service 8876fe
} ;
Packit Service 8876fe
Packit Service 8876fe
newtComponent newtLabel(int left, int top, const char * text) {
Packit Service 8876fe
    newtComponent co;
Packit Service 8876fe
    struct label * la;
Packit Service 8876fe
Packit Service 8876fe
    co = malloc(sizeof(*co));
Packit Service 8876fe
    la = malloc(sizeof(struct label));
Packit Service 8876fe
    co->data = la;
Packit Service 8876fe
    co->destroyCallback = NULL;
Packit Service 8876fe
Packit Service 8876fe
    co->ops = &labelOps;
Packit Service 8876fe
Packit Service 8876fe
    co->height = 1;
Packit Service 8876fe
    co->width = wstrlen(text, -1);
Packit Service 8876fe
    co->top = top;
Packit Service 8876fe
    co->left = left;
Packit Service 8876fe
    co->takesFocus = 0;
Packit Service 8876fe
    co->isMapped = 0;
Packit Service 8876fe
Packit Service 8876fe
    la->length = strlen(text);
Packit Service 8876fe
    la->text = strdup(text);
Packit Service 8876fe
    la->cs = COLORSET_LABEL;
Packit Service 8876fe
Packit Service 8876fe
    return co;
Packit Service 8876fe
}
Packit Service 8876fe
Packit Service 8876fe
void newtLabelSetText(newtComponent co, const char * text) {
Packit Service 8876fe
    int newLength;
Packit Service 8876fe
    struct label * la = co->data;
Packit Service 8876fe
Packit Service 8876fe
    co->width = wstrlen(text,-1);
Packit Service 8876fe
    newLength = strlen(text);
Packit Service 8876fe
    if (newLength <= la->length) {
Packit Service 8876fe
	memset(la->text, ' ', la->length);
Packit Service 8876fe
	memcpy(la->text, text, newLength);
Packit Service 8876fe
    } else {
Packit Service 8876fe
	free(la->text);
Packit Service 8876fe
	la->text = strdup(text);
Packit Service 8876fe
	la->length = newLength;
Packit Service 8876fe
    }
Packit Service 8876fe
Packit Service 8876fe
    labelDraw(co);
Packit Service 8876fe
}
Packit Service 8876fe
Packit Service 8876fe
void newtLabelSetColors(newtComponent co, int colorset) {
Packit Service 8876fe
    struct label * la = co->data;
Packit Service 8876fe
Packit Service 8876fe
    la->cs = colorset;
Packit Service 8876fe
    labelDraw(co);
Packit Service 8876fe
}
Packit Service 8876fe
Packit Service 8876fe
static void labelDraw(newtComponent co) {
Packit Service 8876fe
    struct label * la = co->data;
Packit Service 8876fe
Packit Service 8876fe
    if (!co->isMapped) return;
Packit Service 8876fe
Packit Service 8876fe
    SLsmg_set_color(la->cs);
Packit Service 8876fe
Packit Service 8876fe
    newtGotorc(co->top, co->left);
Packit Service 8876fe
    SLsmg_write_string(la->text);
Packit Service 8876fe
}
Packit Service 8876fe
Packit Service 8876fe
static void labelDestroy(newtComponent co) {
Packit Service 8876fe
    struct label * la = co->data;
Packit Service 8876fe
Packit Service 8876fe
    free(la->text);
Packit Service 8876fe
    free(la);
Packit Service 8876fe
    free(co);
Packit Service 8876fe
}