SOL9 2.0 Class: Args

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

Source code

/*
 * Args.h 
 * Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
#pragma once

#include <sol\Object.h>
#include <sol\StrDef.h>
#include <sol\Arg.h>

// Note: The macro XtSetArg is really from Xt of X11.
#define  XtSetArg(a,b,c) a.name=(TCHAR*)b;a.value =(ulong)c

/**
 * Args class.
 */

namespace SOL {

class Args :public Object {
    int      max;
    int     num;
    Arg*    arg;


public:
    /**
     * Constructor
     */
    Args()
    {
        max = 50;
        num = 0;
        arg = new Arg[max];
    }

public:
    ~Args()
    {
        if (arg) {
            delete [] arg;
            arg = NULL;
        }
    }

public:
    Args& reset()
    {
        num = 0;
        return *this;
    }


public:
    Arg* getArgList() { return arg; }
    int     getCount() { return num; }

public:
    Args& put(const TCHAR* name, ulong value)
    {
        for(int i = 0; i<num; i++) {
            if(arg[i].name == name) {
                XtSetArg(arg[i], name, value);
                return *this;
            }
        }
        XtSetArg(arg[num], name, value);
        if(num < max) num++;
        return *this;
    }

public:
    Args& set(const TCHAR* name, ulong value)
    {
        ulong val = value;

        for(int i = 0; i<num; i++) {
            if(arg[i].name == XmNstyle && 
             name == XmNstyle) {
                arg[i].value |= val;
                return *this;
            }
            if(arg[i].name == XmNexStyle && 
            name == XmNexStyle) {
                arg[i].value |= val;
                return *this;
            }
        }
        XtSetArg(arg[num], name, val);

        if(num < max){
            num++;
        }
        return *this;
    }
public:
    Args& set(const TCHAR* name, int value)
    {
        return Args::set(name, (ulong)value);
    }

public:
    Args& set(const TCHAR* name, void* value)
    {
        return Args::set(name, (ulong)value);
    }

public:
    Args& set(const TCHAR* name, uint value)
    {
        return Args::set(name, (ulong)value);
    }


public:
    Args& set(const TCHAR* name, const TCHAR* value)
    {
        return Args::set(name, (ulong)value);
    }


public:
    Args& set(Arg* ar, int num)
    {
        ulong val;
        for(int i = 0; i<num; i++) {
            if(get(ar[i].name, &val)) {
                if(val) set(XmNstyle, ar[i].value);
            }
        }
        return *this;
    }

public:
    ulong get(const TCHAR* name)
    {
        for(int i = 0; i<num; i++) {
            if(arg[i].name == name) 
                return arg[i].value;
        }
        return 0L;
    }


public:
    Boolean get(const TCHAR* name, ulong* val)
    {
        *val = NULL;
        for(int i = 0; i<num; i++) {
            if(arg[i].name == name) {
                *val = arg[i].value;
                return TRUE;
            }
        }
        return FALSE;
    }

public:
    Args& toPixelUnit()
    {
        long unit = GetDialogBaseUnits();
        put(XmNx,     get(XmNx)     *LOWORD(unit)/4);
        put(XmNy,     get(XmNy)     *HIWORD(unit)/8);
        put(XmNwidth, get(XmNwidth) *LOWORD(unit)/4);
        put(XmNheight,get(XmNheight)*HIWORD(unit)/8);
        return *this;
    }


};

}




Last modified: 19 Dec 2009

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