53 FXMAPFUNC(SEL_PAINT, 0, FXLCDLabel::onPaint),
54 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETVALUE, FXLCDLabel::onCmdSetValue),
55 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETINTVALUE, FXLCDLabel::onCmdSetIntValue),
56 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETREALVALUE, FXLCDLabel::onCmdSetRealValue),
57 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_SETSTRINGVALUE, FXLCDLabel::onCmdSetStringValue),
58 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_GETINTVALUE, FXLCDLabel::onCmdGetIntValue),
59 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_GETREALVALUE, FXLCDLabel::onCmdGetRealValue),
60 FXMAPFUNC(SEL_COMMAND, FXWindow::ID_GETSTRINGVALUE, FXLCDLabel::onCmdGetStringValue),
63 FXMAPKEY(FXLCDLabel::ID_SEVENSEGMENT, FXLCDLabel::onRedirectEvent),
65 FXIMPLEMENT(
FXLCDLabel, FXHorizontalFrame, FXLCDLabelMap, ARRAYNUMBER(FXLCDLabelMap))
67 FXLCDLabel::
FXLCDLabel(FXComposite* p, FXuint nfig, FXObject* tgt, FXSelector sel, FXuint opts, FXint pl, FXint pr, FXint pt, FXint pb, FXint hs) : FXHorizontalFrame(p, opts, 0, 0, 0, 0, pl, pr, pt, pb, hs, 0) {
69 fxerror(
"%s: must have at least one figure.\n", getClassName());
75 for (FXint i = 0; i < nfigures; i++) {
80 FXLCDLabel::~FXLCDLabel() {
89 void FXLCDLabel::create() {
90 FXHorizontalFrame::create();
91 for (FXWindow* child = getFirst(); child; child = child->getNext()) {
97 void FXLCDLabel::detach() {
98 for (FXWindow* child = getFirst(); child; child = child->getNext()) {
101 FXHorizontalFrame::detach();
105 void FXLCDLabel::destroy() {
106 for (FXWindow* child = getFirst(); child; child = child->getNext()) {
109 FXHorizontalFrame::destroy();
113 FXColor FXLCDLabel::getFgColor()
const {
119 void FXLCDLabel::setFgColor(FXColor clr) {
129 FXColor FXLCDLabel::getBgColor()
const {
135 void FXLCDLabel::setBgColor(FXColor clr) {
145 void FXLCDLabel::setText(FXString lbl) {
154 FXint FXLCDLabel::getHorizontal()
const {
160 void FXLCDLabel::setHorizontal(
const FXint len) {
172 FXint FXLCDLabel::getVertical()
const {
178 void FXLCDLabel::setVertical(
const FXint len) {
190 FXint FXLCDLabel::getThickness()
const {
196 void FXLCDLabel::setThickness(
const FXint width) {
208 FXint FXLCDLabel::getGroove()
const {
214 void FXLCDLabel::setGroove(
const FXint width) {
226 long FXLCDLabel::onCmdSetValue(FXObject*, FXSelector,
void* ptr) {
227 setText((
const FXchar*)ptr);
232 long FXLCDLabel::onCmdSetIntValue(FXObject*, FXSelector,
void* ptr) {
233 setText(FXStringVal(*((FXint*)ptr)));
238 long FXLCDLabel::onCmdSetRealValue(FXObject*, FXSelector,
void* ptr) {
239 setText(FXStringVal(*((FXdouble*)ptr)));
244 long FXLCDLabel::onCmdSetStringValue(FXObject*, FXSelector,
void* ptr) {
245 setText(*((FXString*)ptr));
250 long FXLCDLabel::onCmdGetIntValue(FXObject*, FXSelector,
void* ptr) {
251 *((FXint*)ptr) = FXIntVal(getText());
256 long FXLCDLabel::onCmdGetRealValue(FXObject*, FXSelector,
void* ptr) {
257 *((FXdouble*)ptr) = FXDoubleVal(getText());
262 long FXLCDLabel::onCmdGetStringValue(FXObject*, FXSelector,
void* ptr) {
263 *((FXString*)ptr) = getText();
268 long FXLCDLabel::onPaint(FXObject*, FXSelector,
void* ptr) {
269 FXEvent*
event = (FXEvent*) ptr;
270 FXDCWindow dc(
this, event);
271 drawFrame(dc, 0, 0, width, height);
275 dc.fillRectangle(border, border, width - (border << 1), height - (border << 1));
283 void FXLCDLabel::drawString(
const FXString& lbl) {
285 FXString displayString(
' ', nfigures);
289 displayString.replace(0,
'-');
293 for (; (i + txt.length()) < nfigures; i++) {
294 displayString.replace(i,
'0');
296 displayString.insert(i, txt);
297 }
else if (options & JUSTIFY_RIGHT) {
298 for (; (i + lbl.length()) < nfigures; i++) {}
299 displayString.insert(i, lbl);
301 displayString.insert(0, lbl);
303 displayString.trunc(nfigures);
311 if (options & LAYOUT_FILL) {
312 FXint width = this->width - padleft - padright - (border << 1);
313 FXint height = this->height - padtop - padbottom - (border << 1);
314 hspacing = FXMAX(width, height) / 50;
318 FXint hsl = (width - (nfigures - 1) * hspacing) / nfigures;
322 FXint vsl = height >> 1;
326 FXint st = FXMIN(hsl, vsl) / 4;
330 FXint groove = st / 4;
334 if (options & LAYOUT_FILL_X) {
341 if (options & LAYOUT_FILL_Y) {
349 child->
setText(displayString[i++]);
355 child->
setText(displayString[i++]);
361 long FXLCDLabel::onRedirectEvent(FXObject*, FXSelector sel,
void* ptr) {
362 FXuint seltype = FXSELTYPE(sel);
365 target->handle(
this, FXSEL(seltype, message), ptr);
372 FXint FXLCDLabel::getDefaultWidth() {
373 return padleft + getFirst()->getDefaultWidth() * nfigures + hspacing * (nfigures - 1) + padright + (border << 1);
377 FXint FXLCDLabel::getDefaultHeight() {
378 return padtop + getFirst()->getDefaultHeight() + padbottom + (border << 1);
382 void FXLCDLabel::save(FXStream& store)
const {
383 FXHorizontalFrame::save(store);
389 void FXLCDLabel::load(FXStream& store) {
390 FXHorizontalFrame::load(store);
396 long FXLCDLabel::onQueryTip(FXObject* sender, FXSelector sel,
void* ptr) {
398 return getParent()->handle(sender, sel, ptr);
404 long FXLCDLabel::onQueryHelp(FXObject* sender, FXSelector sel,
void* ptr) {
406 return getParent()->handle(sender, sel, ptr);