SOL9 2.0 Class: ReplaceDialog

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

Source code

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


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

#include <sol\CommonDialog.h>

namespace SOL {

class ReplaceDialog :public CommonDialog {
private:
    TCHAR*    findString;
    TCHAR*    replaceString;

private:
    FINDREPLACE fr;

public:
    ReplaceDialog(): CommonDialog() { }

public:
    ReplaceDialog(View* parent, const TCHAR* name, Args& args)
    :CommonDialog(parent, &fr)
    {
        findString    = new TCHAR[MAX_LEN];
        findString[0] = Zero;
        replaceString    = new TCHAR[MAX_LEN];
        replaceString[0] = Zero;

        memset(&fr, 0, sizeof(FINDREPLACE));
        fr . lStructSize = sizeof(FINDREPLACE);

        if(parent) {
            fr . hwndOwner = parent -> getWindow();
        }

        fr . hInstance = GetModuleHandle(NULL);//Application::getInstance();

        fr . lpstrFindWhat = findString;
        fr . wFindWhatLen  = MAX_LEN;
        fr . lpstrReplaceWith = replaceString;
        fr . wReplaceWithLen  = MAX_LEN;

        setValues(args);
    }

public:
    ~ReplaceDialog() 
    {
        delete [] findString;
        delete [] replaceString;
    }


public:
    virtual Boolean create(View* parent, const TCHAR* name, Args& args)
    {
        Boolean rc = True;
        CommonDialog::create(parent, &fr);

        findString    = new TCHAR[MAX_LEN];
        findString[0] = Zero;
        replaceString    = new TCHAR[MAX_LEN];
        replaceString[0] = Zero;

        memset(&fr, 0, sizeof(FINDREPLACE));
        fr . lStructSize = sizeof(FINDREPLACE);

        if(parent) {
            fr . hwndOwner = parent -> getWindow();
        }

        fr . hInstance = GetModuleHandle(NULL);//Application::getInstance();

        fr . lpstrFindWhat = findString;
        fr . wFindWhatLen  = MAX_LEN;
        fr . lpstrReplaceWith = replaceString;
        fr . wReplaceWithLen  = MAX_LEN;

        setValues(args);

        return rc;
    }

public:
    void replace(const TCHAR* find, const TCHAR* replace)
    {
        // <added date="2000.01.07">
        const TCHAR* find1 = _T("");
        if (find) {
            find1 = find;
        }
        const TCHAR* replace1 = _T("");
        if (replace) {
            replace1 = replace;
        }

        if (strlen(find1) >= MAX_LEN || strlen(replace1)>=MAX_LEN) {
        //    MessageDialog(NULL, "Find string or Replace string is too long",
        //        "ReplaceDialog", MB_OK);
            return;
        }
        // </added>

        strcpy_s(findString,  MAX_LEN, find1);
        strcpy_s(replaceString, MAX_LEN, replace1);

        setWindow(::ReplaceText(&fr));
    }

public:
    void getValues(Args& args)
    {
        ulong* val = NULL;
        int num   = args.getCount();
        Arg* arg  = args.getArgList();

        for(int i = 0; i<num; i++) {
            const TCHAR* name = arg[i].name;
            // <modified date="2000.01.09"> 
            val = (ulong*)arg[i].value;
            // </modified>
            if(name == XmNflags) {
                *val = (ulong)fr.Flags;
                continue;
            }
            if(name == XmNfindString) {
                *val = (ulong)findString;
                continue;
            }
            if(name == XmNreplaceString) {
                *val = (ulong)replaceString;
                continue;
            }
        }
    }

public:
    void setValues(Args& args)
    {
        ulong val;
        if(args.get(XmNflags, &val)) {
            fr . Flags |= (DWORD)val;
        }
        if(args.get(XmNhook, &val)) {
            fr . Flags |= FR_ENABLEHOOK;
            fr . lpfnHook = (HOOKFUN)hookProc;
        }
        if(args.get(XmNfindString, &val)) {
            TCHAR* string = (TCHAR*)val;
            if(strlen(string) >= MAX_LEN) {
                *(string+MAX_LEN-1) = NULL;
            }
            strcpy_s(findString, MAX_LEN, string);
        }
        if(args.get(XmNreplaceString, &val)) {
            TCHAR* string = (TCHAR*)val;
            if(strlen(string) >= MAX_LEN) {
                *(string+MAX_LEN-1) = NULL;
            }
            strcpy_s(replaceString, MAX_LEN, string);
        }
    }


public:
    DWORD   getFlag() {
        return fr. Flags;
    }
};

}


Last modified: 1 Feb 2012

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