SOL9 Sample: ReplaceDialog

SOL9 2.0 Samples

1 Screenshot


2 Source code

/*
 * ReplaceDialog.cpp 
 * Copyright (c) 2015 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// Sample program to use ReplaceDialog class of SOL++2000.
// 2000.02.18

#define COMMONCONTROLS_V6

#include <sol\ApplicationView.h>
#include <sol\ScrolledText.h>
#include <sol\ReplaceDialog.h>
#include <sol\FileDialog.h>
#include "Resource.h"
#include <sol\Stdio.h>

namespace SOL {
/**
 * This is a simple sample for ReplaceDialog of Windows Common dialogs.
 * This shows only how to use ReplaceDialog class in SOL9, but does not 
 * implement actions to find and replace strings.
 */
class TextEditor :public ApplicationView {
private:
  UINT    findMsg;
  ScrolledText  text;
  FileDialog  fileDialog;
  ReplaceDialog  replaceDialog;


private:
  long search(Event& event) 
  {
    Args ar;
    TCHAR* find = NULL;
    TCHAR* replace = NULL;
    ulong  flags;
    ar.set(XmNflags, (void*)&flags);
    ar.set(XmNfindString, (TCHAR**)&find);
    ar.set(XmNreplaceString, (TCHAR**)&replace);
    replaceDialog.getValues(ar);

    if (flags & FR_DIALOGTERM) { // Cancel button
      showMessageDialog(_T("TextEditor"), _T("Closing"));
      return 0L;
    }

    if (flags & FR_FINDNEXT) { // find next
      showMessageDialog(_T("TextEditor"), _T("Find next"));
    }

    if (flags & FR_REPLACE) { // replace and find next
      showMessageDialog(_T("TextEditor"), _T("Replace and find next"));
    }

    if (flags & FR_REPLACEALL) { // replace all
      showMessageDialog(_T("TextEditor"), _T("Replace all"));
    }
    showMessageDialog(_T("TextEditor:findString"), (TCHAR*)find);
    showMessageDialog(_T("TextEditor:replaceString"), (TCHAR*)replace);
    return 0L;
  }

private:
  void replace(Action& action)
  {
    if(!replaceDialog.isWindow()) {
      // Popup the replaceDialog
      replaceDialog.replace(_T(""), _T(""));
    }
  }

public:
  /**
   * Constructor
   */
  TextEditor(Application& applet, const TCHAR* name, Args& args)
  :ApplicationView(applet, name, args) 
  {
    Args ar;
    ar.set(XmNnoHideSel, True);
    text.create(this, NULL, ar);
    add(text);

    findMsg = RegisterWindowMessage(FINDMSGSTRING);

    ar.reset();
    replaceDialog.create(this, NULL, ar);

    ar.reset();
    fileDialog.create(this, NULL, ar);

    addCallback(XmNmenuCallback, ID_OPEN, this,
      (Callback)&TextEditor::open, NULL);

    addCallback(XmNmenuCallback, ID_SAVE, this,
      (Callback)&TextEditor::save, NULL);

    addCallback(XmNmenuCallback, ID_REPLACE, this,
      (Callback)&TextEditor::replace, NULL);

    addCallback(XmNmenuCallback, ID_EXIT, this,
      (Callback)&TextEditor::exit, NULL);

    addEventHandler(findMsg, this,
      (Handler)&TextEditor::search, NULL);

    restorePlacement();
  }

private:
  void open(Action& action)
  {
    if(fileDialog.open()) {
      TCHAR* name = fileDialog.getFileName();
      if (text.load(name)) {
      
        TCHAR caption[MAX_PATH];
        _stprintf_s(caption, CountOf(caption), _T("Opened:%s"), name);
        setText(caption);
      }
    }
  }
private:
  void save(Action& action)
  {
    if(fileDialog.save()) {
      TCHAR* name = fileDialog.getFileName();
      if (text.save(name)) {
        TCHAR caption[MAX_PATH];
        _stprintf_s(caption, CountOf(caption), _T("Saved:%s"), name);
        setText(caption);
      }

    }
  }
};

}

// Sample Main
void  Main(int argc, TCHAR** argv)
{
  ModuleFileName module(argv[0]);
  const TCHAR* name = module.getFileName();
  try {
    Application applet(name, argc, argv);

    Args args;
    TextEditor editor(applet, name, args);
    editor.realize();

    applet.run();

  } catch (Exception& ex) {
    caught(ex);
  } catch (...) {
    caught(UnknownException());
  }
}


Last modified: 1 Feb 2017

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