SOL9 2.0 Class: IntegerField

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * IntegerField.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
// 2000.02.18
#pragma once

#include <sol\Text.h>


namespace SOL {

class IntegerField :public Text {
private:
    static  const long STYLE = (WS_BORDER|ES_LEFT|ES_AUTOHSCROLL);

private:
    CallbackEntry* entry;

protected:
    long charIn(Event& event)
    {
        TCHAR line[256];
        WORD word = event.getWParam();
        if(word >= '0' && word <='9') 
            return defaultProc(event);
        if(word == VK_BACK) 
            return defaultProc(event);
        if(word == VK_RETURN) {
            if(entry) {
                Text::getText(line, 255);
                Action action(NULL, event);
                    entry -> setData(line);
                    entry -> call(action);
            }
            return NULL;
        }
        return NULL;
    }

public:
    IntegerField():Text() { }

public:
    IntegerField::IntegerField(View* parent, const TCHAR* name, Args& args)
    :Text(parent, name, 
        args.set(XmNstyle, (ulong)STYLE))
    {
        entry = NULL;

        limitText(20);
        replaceWindowProc();
        addEventHandler(WM_CHAR, this,
            (Handler)&IntegerField::charIn, NULL);
        addEventHandler(WM_COMMAND, this,
            (Handler)&IntegerField::charIn, NULL);
        resize(name);
    }


public:
    ~IntegerField() { 
        if(entry) delete entry; 
    }

public:
    virtual Boolean create(View* parent, const TCHAR* name, Args& args)
    {
        Boolean rc = Text::create(parent, name, 
            args.set(XmNstyle, (ulong)STYLE));

        entry = NULL;

        limitText(30);    //20->30
        replaceWindowProc();
        addEventHandler(WM_CHAR, this,
            (Handler)&IntegerField::charIn, NULL);
        addEventHandler(WM_COMMAND, this,
            (Handler)&IntegerField::charIn, NULL);

        resize(name);

        return rc;
    }

public:
    void addCallback(const TCHAR* name, Object* object,
        Callback proc, void* data)
    {
        if(entry) {
            delete entry;
        }
        entry = new CallbackEntry(name, NULL, object,
                proc, data);
    }


public:
    void setInteger(int num)
    {
        TCHAR buffer[80];
        _stprintf_s(buffer, SizeOf(buffer), _T("%d"), num);
        Text::setText(buffer);
    }

public:
    void setLong(long num)
    {
        TCHAR buffer[80];
        _stprintf_s(buffer, SizeOf(buffer), _T("%ld"), num);
        Text::setText(buffer);
    }


public:
    int getInteger()
    {
        TCHAR buffer[80];
        getText(buffer, SizeOf(buffer));
        TCHAR* error = NULL;
        return strtol((const TCHAR*)buffer, &error, 10);
    }

public:
    long getLong()
    {
        TCHAR buffer[80];
        getText(buffer, SizeOf(buffer));
        TCHAR* error = NULL;
        return strtol((const TCHAR*)buffer, &error, 10);

    }


};

}


Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.