|
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 |
}
|