wxWidgets

wxHtmlWindow 상속받아서
OnLinkClicked 를 overriding 해 본다.

==================== 클래스 =========================
class MyHtmlWin : public wxHtmlWindow {
public:
    MyHtmlWin(){}
    MyHtmlWin( wxWindow *parent ) : wxHtmlWindow( parent ){}
    ~MyHtmlWin(){}
    virtual void OnLinkClicked(const wxHtmlLinkInfo& link)
    {
        wxString msg;
        msg.Append(wxString("link to [")).Append(link.GetHref()).Append(wxString("]"));
          
        wxString msgTitle;
        msgTitle.Printf(_T("Message (%s)"), wxVERSION_STRING );
        wxMessageBox(msg, msgTitle, wxOK | wxICON_INFORMATION, this);

        wxHtmlWindow::OnLinkClicked(link);
      
    }
};

==================== 사용 =========================
MyHtmlWin *html;

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size)
     html = new MyHtmlWin(this);
    html -> SetRelatedFrame(this, _("HTML : %s"));   
    html -> SetRelatedStatusBar(0);  // 상태바
    html -> LoadPage(wxT("start.htm"));
Posted by stekilove
,
BigDecimal Test

    public void testBigDecimalRound() throws Exception {
        printBigDecimalRound("7.42",2);
        printBigDecimalRound("127.42",2);
        printBigDecimalRound("127",2);
        printBigDecimalRound("-127",2);
        printBigDecimalRound("-127.123",2);
    }

    private void printBigDecimalRound(String s, int p) {
        int prec=s.indexOf(".");
        prec=prec<0?s.length():prec;
        System.out.println("s>" + s );
        System.out.println("d>" + Double.parseDouble(s) );
        System.out.println("d>" + new BigDecimal(Double.parseDouble(s)) );
        System.out.println("r>"+ new BigDecimal(Double.parseDouble(s)).round(
                                   new MathContext(prec+p, RoundingMode.CEILING)) );
        System.out.println("x>" + new BigDecimal(s));
    }

results:
s>7.42
d>7.42
d>7.4199999999999999289457264239899814128875732421875
r>7.42
x>7.42
s>127.42
d>127.42
d>127.4200000000000017053025658242404460906982421875
r>127.43
x>127.42
s>127
d>127.0
d>127
r>127
x>127
s>-127
d>-127.0
d>-127
r>-127
x>-127
s>-127.123
d>-127.123
d>-127.1230000000000046611603465862572193145751953125
r>-127.123
x>-127.123
Posted by stekilove
,
GCC C++ Compiler
Directories
  C:\bin\msys\1.0\local\include\wx-2.8
  C:\bin\msys\1.0\local\include
  C:\bin\msys\1.0\local\include

-D
  _WXMSW__
  WXUSINGDLL
  WX_PRECOMP

Optimization
  Optimize more (-O2)

Debuging
  Maximum (-g3)

Miscellaneous
  -c -fmessage-length=0 -mthreads -Wundef -Wno-ctor-dtor-privacy -fno-strict-aliasing

MinGW C++ Linker
Libraries
  rpcrt4
  oleaut32
  ole32
  uuid
  winspool
  winmm
  shell32
  comctl32
  comdlg32
  ctl3d32
  advapi32
  wsock32
  gdi32
  wx_base_xml-2.8
  wx_msw_adv-2.8
  wx_msw_html-2.8
  wx_msw_core-2.8
  wx_base-2.8
  wxtiff-2.8
  wxpng-2.8
  wxzlib-2.8
  wxregex-2.8
  wxexpat-2.8
  sqlite3

Libraries
  "C:\bin\msys\1.0\local\lib"

Miscellaneous
  -mthreads -mwindows


기타
Run Configurations / Environment / PATH 에
dll경로를 지정해서 올려 준다.
Posted by stekilove
,
/**
     * 지정일부터 작업전날까지.
     * <pre>작업 전날 구하기.
     * 1.그달 마지막일이 일요일이면 3일전까지
     * 2.그달 마지막일이 토요일이면 2일전까지
     * 3.그달 마지막일이 평일이면  1일전까지.
     * </pre>
     * @param currnetDate
     * @return
     */
    private boolean isWorkingDate(String currnetDate, int beginDay ) {
        String currentDate = currnetDate.replaceAll("-","");
        int year = Integer.parseInt(currentDate.substring(0,4));
        int month = Integer.parseInt(currentDate.substring(4,6));
        int day = Integer.parseInt(currentDate.substring(6,8));

        int endDay;

        Calendar cal = Calendar.getInstance();
        cal.set(year, month-1, day );
        int lastDayOfMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, lastDayOfMonth );
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        if( dayOfWeek == Calendar.SATURDAY ){
            endDay=lastDayOfMonth-2;
        }
        else if( dayOfWeek == Calendar.SUNDAY ){
            endDay=lastDayOfMonth-3;
        }
        else {
            endDay=lastDayOfMonth-1;
        }

        return day >= beginDay && day <= endDay;
    }
Posted by stekilove
,
It's very simple program, but very difficult for me at that time.
cause, I'm newbie.

i made this to use wxWidget sample project layout.

//============================================================================
// Name        : prjEx02.cpp
// Author      : stekilove@gmail.com
// Version     :
// Copyright   : Copy right stekilove@gmail.com.
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
   #include <wx/wx.h>
#endif

#include "wx/statline.h"

class MainApp: public wxApp
{
  public:
      virtual bool OnInit();
};

class MainFrame: public wxFrame
{
  public:
      MainFrame(const wxString &title, const wxPoint &pos, const wxSize &size);
      wxButton *btnOk;
      wxTextCtrl * wtcOutput;
      wxTextCtrl * wtcAnswer;
      void onQuit(wxCommandEvent &event);
      void onButtonOk(wxCommandEvent &event);
      void onTextAnswerEnter(wxCommandEvent &event);
  private:
      DECLARE_EVENT_TABLE()
};

enum
{
   ID_MAINWIN_QUIT = wxID_HIGHEST+1
   , ID_BUTTON_OK
   , ID_BUTTON_NEXT
   , ID_TEXT_ANSWER_ENTER
};


BEGIN_EVENT_TABLE(MainFrame, wxFrame)
    EVT_MENU(ID_MAINWIN_QUIT, MainFrame::onQuit)
    EVT_BUTTON(ID_BUTTON_OK, MainFrame::onButtonOk)
    EVT_TEXT_ENTER(ID_TEXT_ANSWER_ENTER, MainFrame::onTextAnswerEnter)
END_EVENT_TABLE()

IMPLEMENT_APP(MainApp)

bool MainApp::OnInit()
{
   MainFrame *win = new MainFrame(_("Frame"), wxPoint (100, 100), wxSize(450, 340));
   win->Show(TRUE);
   SetTopWindow(win);

   return TRUE;
}

MainFrame::MainFrame(const wxString &title, const wxPoint &pos, const wxSize &size)
    : wxFrame((wxFrame *) NULL, -1, title, pos, size)
{
    wxMenu *FileMenu = new wxMenu;
    wxMenuBar *MenuBar = new wxMenuBar;

    FileMenu->Append(ID_MAINWIN_QUIT, _("&Quit 종료."));

    MenuBar->Append(FileMenu, _("&File"));
    SetMenuBar(MenuBar);

    CreateStatusBar(2);
    SetStatusText(_("Welcome my steki world!"));

    //=====================================================
    //TODO: steki's coding...

    // make main panel..
    wxPanel *p = new wxPanel(this,-1);

    // make component..
    wxStaticBox *sb = new wxStaticBox(p, wxID_ANY, _T("Image or picture"));
    wxStaticText *st = new wxStaticText( p, wxID_ANY, _T("Steki and Tong loves each other!!"));
    wtcOutput = new wxTextCtrl( p, wxID_ANY, _T("some output text.."), wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE );
    wxStaticLine *sl = new wxStaticLine( p, wxID_ANY, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL);
    wxStaticText *stAnswer = new wxStaticText(p, wxID_ANY, _T("Label"));
    wtcAnswer = new wxTextCtrl(p, ID_TEXT_ANSWER_ENTER, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
    wxButton *btnNext = new wxButton( p, ID_BUTTON_NEXT, _T("Next"));
    btnOk = new wxButton( p, ID_BUTTON_OK, _T("Ok"));

    // add component into layout..
    wxBoxSizer *statsizer = new wxStaticBoxSizer( sb , wxVERTICAL );
    statsizer->Add (  st        ,    wxSizerFlags().Align(wxALIGN_LEFT).Border(wxALL, 30));

    wxGridSizer *gridsizer = new wxGridSizer(2, 5, 5);
    gridsizer->Add(  stAnswer    , wxSizerFlags().Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL));
    gridsizer->Add(  wtcAnswer    , wxSizerFlags(1).Align(wxGROW | wxALIGN_CENTER_VERTICAL));

    wxBoxSizer *button_box = new wxBoxSizer( wxHORIZONTAL );
    button_box->Add(  btnOk        , wxSizerFlags().Border(wxALL, 7));
    button_box->Add(  btnNext    , wxSizerFlags().Border(wxALL, 7));

    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
    topsizer->Add(  statsizer    , wxSizerFlags(1).Expand().Border(wxALL & ~wxBOTTOM, 10));
    topsizer->Add(  wtcOutput     , wxSizerFlags(1).Expand().Border(wxALL, 5) );
    topsizer->Add(    sl            ,wxSizerFlags().Expand());
    topsizer->Add(  gridsizer     , wxSizerFlags().Expand().Expand().Border(wxALL, 1) );
    topsizer->Add(  button_box     , wxSizerFlags().Center() );

    p->SetSizer( topsizer );

    topsizer->SetSizeHints( this );
}

void MainFrame::onQuit(wxCommandEvent & WXUNUSED(event))
{
    int answer = wxMessageBox("Quit program?", "Confirm", wxYES_NO, this);
    if (answer == wxYES)
        Close(TRUE);
}

void MainFrame::onButtonOk(wxCommandEvent & WXUNUSED(event))
{
    int answer = wxMessageBox("Quit program?", "Confirm", wxYES_NO | wxCANCEL, this);
    if (answer == wxYES)
        Close(TRUE);
}

void MainFrame::onTextAnswerEnter(wxCommandEvent & WXUNUSED(event))
{
    wtcOutput->AppendText( wtcAnswer->GetValue().Append("\n") );
    wtcAnswer->Clear();
}

Posted by stekilove
,
출처: http://scroogie.de/index.php?/archives/61-Qt4-in-Eclipse.html
번역: stekilove@gmail.com
사죄의 글: 번역시 존칭은 생략합니다.
               그리고, 영어를 못하는 관계로 의역을 포함하거나 혹은
               잘못 된 표현으로 의미전달을 잘 못 한 부분에 대해서는
               필히 한 마디 적어 주셨으면 합니다.

Qt4 in Eclipse

Qt Development in Eclipse, including code completion on Qt Objects.
대학과제로 QT 프로그램을 컴파일 하고 실행시키기 위한 개발 환경이 필요 했었다. 하지만, 처음엔 뭐가 뭔지 알지 못했다. 그래서 다른사람에게도 도움이 될 수 있도록 나의 경험을 적기로 했다.

아래의 짧은 투터리얼에서,
  1. 어떻게 MinGW 로 Qt4 를 인스톨 하고
  2. Eclipse에서 바로 Qt programs을 실행 하고 빌드시키기 위해서
     CDT 플러그인을 어떻게 설정하는지
설명 할 것이다.

먼저, 작업 하다가 커피가 땡길때를 위해 맛있는 커피를 만들 수 있는 커피메이커를 미리 준비해 둬야 할 것이다.

다음으로, 트롤테크가 만든 Qt4 32 커뮤너티 판을 내려받을 필요가 있다:
 http://www.trolltech.com/download/qt/windows.html

만약에 MinGW  설치 된 것이 없다면, mingw을 포함하는 패키지를 내려 받아야한다. 트롤테크에 제공하는 QT 인스톨러는 당신을 위해서 mingw를 설치해 줄 것이다. 이 시점에서 MS Visual Studio 로 Qt4를 사용할 수 없다는 것을 알고 있어야 한다!

이제, QT와 MinGW 가 어디에 설치되었는지 알아 둬야 한다.

Qt가 성공적으로 설치 된 후에,
   1. 시작메뉴에 QT 메뉴가 생긴다,
   2. 그것을 오픈해서 "Qt 4.1.2 (Build Debug Libraris)" 명령을 실행시킨다.
   3. 신규 명령 창이 뜨면 라이센스 승인을 묻는다.
           'y'  를 입력하면
      자동으로 Qt 라이브러리를 만들기 시작 할 것이다.
      그것은 Qt 프로그래밍을 할 때 필요하다. ;-)

시간이 좀 걸릴 것이다, 커피 메이커를 준비하란 말이 기억 나는가? 지금이 그 커피 한잔을 할 시간이다.

기다리기 싫을 때는, Eclipse를 미리 다운 받아도 된다.
 http://www.eclipse.org/downloads/
이 글을 쓰는 동안에 이클립스의 갱신된 버젼은 3.1.2 었다. 이 버젼은 내가 사용하고 있는 것이다.  당신은 필히 Platform Runtime Binary가 필요할 것이다. 하지만, Java 어플리케이션을 개발하기 위해서 JDT를 사용하고 있는지 어떤지 확실치 않다거나 혹은 원하지 않는다면 complete SDK를 다운 받아서 설치 하면 된다. (어찌 되었든, Python, Perl, PHP, Ruby 그리고 당신이 상상할 수 있는 많은 다른 언어들에 대한 플러그인도 있다. 그들 중 몇개는 최근에 나온거이긴 하지만, 통합된 개발 환경에 잘 맞을거라고 본다)

이클립스 설치는 매우 쉬워서, 나의 추축으로는 여러분들이 벌써 실행시키고 있다고 생각한다. 그렇지 않다면 google 로 빨리 찾아 보자. 잘 안된다 싶으면,
이클립스에서,
  Help -> Software Updates -> Find and Install...
해 보기 바란다.

소프트웨어 갱신을 외 부르는지 묻지 마라, 도움말 메뉴가 어디에 있는지도 마찬가지다.
이런 편리한 도구와 함께 추가된 이클립스 모듈의 대부분을 설치 된다는 사실을 순순히 받아 들이는 편이 좋다.
  1.  첫 페이지에 나오는 도움말에서, "Search for new features to install"을 선택하고 next를 클릭하자. 다음 화면에서 너에게 "Update sites"로 불려지는 항목들을 보여 준다. 그것은 이클립스에서 자동으로 설치해 줄 수 있는 플러그인 등록의 한 종류이다.
  2. 지금 "New Remote Site"를 클릭한다. CDT로 명명한다. CDT Update
    Site:  http://download.eclipse.org/tools/cdt/releases/eclipse3.1
  3. CDT를 갱신체크 하자. 이클립스는 mirror 에 대해서 물어 볼 것이다.
    그러면, 당신이 살고 있는 지역을 선택하고 OK를 눌러서 계속 해라.
  4. 다음 결과에서 CDT 앞에 있는 box를 선택하고 다음을 클릭하자.
  5. 라이센스를 받고 최종 다음을 클릭하면 CDT를 내려받기 시작한다.
    당신의 네트워크 상태에 따라서 시간이 걸립니다.
  6. 다운이 완료 되었을 때, "install all"을 선택할 수 있는 창이 나오면,
    최종 이클립스를 다시 기동시켜야 합니다.
    아마도, C/C++ 을 제공 받게 될 겁니다.


만약 CDT가 보여주는 코드 방식이 싫다면,  GNU Indent와 적절한 이클립스 플러그인 Simple Indent를 설치하고 싶을 것이다.
    URL for GNU Indent:
          http://mysite.wanadoo-members.co.uk/indent/beautify.html

윈도우 상에서, cygwin으로 GNU Indent를 설치 할 수 있다. 그것은 devel category에 있다. 나중에 환경변수 %PATH%에 cybin \bin을 추가해야 한다. Cygwin을 설치하기 싫으면, GnuWin32 (http://gnuwin32.sourceforge.net/) 로 부터 그 version을 사용할 수 있다.  Simple Indent 를 설치 하려면 이클립스 업데이트 사이트를 이용한다.
   http://softwitch.net/eclipseUpdate (
     Homepage:
       http://softwitch.net/blog/index.php/simple-indent-code-formatter-for-cdt/
   ).


Qt ? Qt가 적절하게 잘 실행되는지 지켜보자, 문제가 있다면 컴파일을 다시 해야 한다.
첫 뻔 째 시도에서, 나는  ld.exe와 qjpeg1.dll 에 대해서 오류가 발생했었다.  만약 당신도 똑같은 문제와 만났다면, 이전에 취소된 build처리 때문일 것이다.  `make clean´  을 시도 해보거나 도움이 안된다면, Qt4를 다시 설치한다. ( 이것이 어리석은 제안이란 걸 나도 알지만, 잘되면 만사 땡이다 ).

자~, Qt 설치가 드디어 끝이 났나요? 축하 축하, 이제 거의다 끝나 갑니다.

Eclipse를 다시 시작해보자, 지금 우리는 Qt 사용을 위해서 이클립스를 설정 할 것이다.
 1. workspace에 C++ Projects 를 신규생성 한다.
 2. 메뉴 Run -> External Tools -> External Tools 을 클릭한다.
    external tool 관리창이 뜰 것이다.
 3. 왼 쪽 편에 있는 프로그램을 선택하고
    QMake 이름으로 신규를 추가 한다.
        3.1. qmake.exe (대략 C:\Qt4\bin\ )를 그 위치로 가르킨다.
        3.2. assistant.exe로 QtAssistantone 이름으로 추가 한다.
    External Tools 창을 닫는다.
 4. 메뉴 Window -> Preferences 를 클릭한다.
        4.1. General -> Editors -> File Associations 를 연다.
        4.2. 확장자 .ui 와 .ts 파일을 추가 한다.
        4.3. 그것으로 QtDesigner 와 QtLinguist 를 연결한다.
     Preferences 창을 닫는다.

자~, 모두 끝이 났다. 이제 첫 번 째,  Qt 어플리케이션을 시작해 보자. 슬프게도, 이클립스에서 makefile 생성을 다루는 방법은 나도 잘 모르지만, Qmake로 하는 것은 전혀 문제가 안된다.

표준 C++ Project를 하나 생성  해보자.
세 개의 신규 파일을 추가 한다:
    helloworld.pro
    helloworld.cpp.

helloworld.pro 에 아래의 코드를 복사 하자:

LIBS += -Lbin
INCLUDEPATH += .
QMAKE_LIBDIR = bin
QMAKE_CXXFLAGS_DEBUG += -DQTTEST_DEBUG
DEFINES = MYFLAGS
TARGET = qttest
DESTDIR = bin
CONFIG += debug \
warn_on \
qt \
opengl \
thread \
rtti
TEMPLATE = app
SOURCES += helloworld.cpp
DEPENDPATH +=


인수는 거의 자체 설명이 있다, 이것은 기본적으로 qmake가 어떻게 makefile을 만드는지 이야기 한다. 그거슨 이클립스가 당신 프로젝트를 생성하기 위해 사용할 것이다.

지금 컴파일을 위해서 파일을 추가 하자.
helloworld.cpp:

#include
#include

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QPushButton hello("Hello world!");
hello.resize(100, 30);

hello.show();
return app.exec();
}


지금 우리는 make targets 를 생성한다.
이클립스에서 메뉴Window -> Show View -> Make Targets 을 연다.
그리고 새로운  Targets을 두 개 추가 한다:

Target Name: qmake
Make Target: helloworld.pro
Build Command: qmake

그리고,

Target Name: all
Make Target: all
Build Command: default (make)

이제, qmake target 을 더블클릭하고
Problems 와 Console View를 지켜보자.
이것이 성공적이라면,  이클립스가 예제 프로그래을 생성할 수 있는 makefile이 있을 것이다.

"all" target을 더블 클릭 해 보자.
당신 어플리케이션은 bin\ 폴더로 이전 할  준비를 하고 있을 것이다!



Hope this is helpful for someone.
Posted by stekilove
,
작성자: 전병관
제목: eclipse c++에서 MinGW과 wxWidgets을 이용해서 프로그램 개발

환경:
OS - VISTA home edition


설치:
install MinGW-5.1.4.exe into c:\bin\MinGW
uncompress gdb-6.8-mingw-3.tar.bz2 to c:\bin\MinGW
install MSYS-1.0.10.exe
uncompress wxMSW-2.8.8-Setup.zip to D:\hobby_cpp\wxMSW-2.8.8
uncompress eclipse-cpp-ganymede-win32.zip to d:\hobby_cpp\eclipse

작업단계:

run MSYS in window                                                        
$ vi .profile
alias ls="ls --color -F"
alias rm="rm -i"
export PS1='`pwd`> '

$ source .profile
/home/로그인아이디> mkdir wxMSW-2.8.8
/home/로그인아이디> vi /etc/fstab
c:/bin/MinGW /ming
d:/hobby_cpp/wxMSW-2.8.8 /home/로그인아이디/wxMSW-2.8.8

/home/로그인아이디> cd wxMSW-2.8.8
/home/로그인아이디/wxMSW-2.8.8> ls
BuildCVS.txt     config.guess*  locale/            wx-config-inplace.in*
INSTALL-MSW.txt  config.sub*    misc/              wx-config.in*
Makefile.in      configure*     mkinstalldirs*     wxBase.spec
README-MSW.txt   configure.in   regen*             wxGTK.spec
acinclude.m4     contrib/       samples/           wxMGL.spec
aclocal.m4       demos/         setup.h.in         wxMotif.spec
art/             docs/          src/               wxX11.spec
autoconf_inc.m4  include/       tests/             wxwin.m4
autogen.sh*      install-sh*    utils/
build/           lib/           version-script.in

/home/로그인아이디/wxMSW-2.8.8> configure
/home/로그인아이디/wxMSW-2.8.8> make all



run eclise c++                                                                

make a new project in c++

c/c++ compile configuration in project properties
    -D__WXMSW__
    -I.
    -DWXUSINGDLL
    -I./../../samples
    -I/home/steki/wxMSW-2.8.8/lib/wx/include/msw-ansi-release-2.8
    -I../../include
    -DWX_PRECOMP
    -mthreads
    -Wall
    -Wundef
    -Wno-ctor-dtor-privacy
    -O2
    -fno-strict-aliasing
    ./widgets.cpp

c/c++ link configuration in project properties
    -mthreads
    -L/home/steki/wxMSW-2.8.8/lib
    -mwindows
    
    -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32
    -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32

    -lwx_base_xml-2.8
    -lwx_msw_adv-2.8
    -lwx_msw_html-2.8
    -lwx_msw_core-2.8
    -lwx_base-2.8
    -lwxtiff-2.8
    -lwxjpeg-2.8
    -lwxpng-2.8
    -lwxzlib-2.8
    -lwxregex-2.8
    -lwxexpat-2.8

make and build a program
   make class to use wxWidgets.

run the program compiled.                                                                 
    set PATH to access libs.

Posted by stekilove
,

wxList examples.

wxWidgets 2.6.1


colltest2.cpp                                                       

///////////////////////////////////////////////////////////////////////////////
// Name:        CollectionTest
// Purpose:     excercise wxList and wxString
// Author:      PyoungGwan Chun
// Modified by:
// Created:     27/06/2008
// RCS-ID:      $Id: colltest.h,v 1.000 2008/06/27 14:57:09 MBN Exp $
// Copyright:   (c) 2008 PyoungGwan Chun <stekilove@gmail.com>
// Licence:     GNU licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _COLLECTIONTEST2H__
#define _COLLECTIONTEST2H__

#include <wx/string.h>
#include <wx/list.h>


class MyExListElement : public wxObject {
private:
    int b;
public:
    MyExListElement(int a) { b=a; }
    virtual ~MyExListElement(){}
    int get() { return b; }
};


class CollectionTest2 {
private:
         wxList list;

public:      
      CollectionTest2(){}
      virtual ~CollectionTest2(){
              list.DeleteContents(true);
      }
        
      wxString *doIt();
};      

#endif



colltest2.h                                                                         

#include "colltest2.h"

wxString *CollectionTest2::doIt(){
    MyExListElement *element = new MyExListElement(10);
    list.Append(element);
   
    wxString s;
    wxString *str = new wxString("");
    str->Append("BEGIN").Append("\n");
   
    for ( wxList::Node *node = list.GetFirst(); node; node = node->GetNext() ){
        MyExListElement *current = (MyExListElement *)node->GetData();
       
        s.sprintf("%d",current->get());
        str->Append( s ).Append("\n");
    }
   
    str->Append("END");
    return str;
}

Posted by stekilove
,
///////////////////////////////////////////////////////////////////////////////
// Name:        CollectionTest
// Purpose:     excercise wxList and wxString
// Author:      PyoungGwan Chun
// Modified by:
// Created:     27/06/2008
// RCS-ID:      $Id: colltest.h,v 1.000 2008/06/27 14:57:09 MBN Exp $
// Copyright:   (c) 2008 PyoungGwan Chun <stekilove@gmail.com>
// Licence:     GNU licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _COLLECTIONTESTH__
#define _COLLECTIONTESTH__

#include <wx/string.h>
#include <wx/list.h>

class MyListElement {
private:
    int b;
public:
    MyListElement(int a) { b=a; }
    int get() { return b; }
};

WX_DECLARE_LIST(MyListElement, MyList);


#include <wx/listimpl.cpp>
WX_DEFINE_LIST(MyList);

class CollectionTest {
private:
         MyList list;

public:      
      CollectionTest(){}
      virtual ~CollectionTest(){
              list.DeleteContents(true);
      }
        
      wxString *doIt(){
            MyListElement *element = new MyListElement(10);
            list.Append(element);
            
            wxString s;
            wxString *str = new wxString("");
            str->Append("BEGIN").Append("\n");
            
            for ( MyList::Node *node = list.GetFirst(); node; node = node->GetNext() ){
                MyListElement *current = node->GetData();
                
                s.sprintf("%d",current->get());
                str->Append( s ).Append("\n");
            }
            
            str->Append("END");
            return str;
        }
};      


#endif

Posted by stekilove
,
#include <sqlite3.h>

class prjWxEx01Frm : public wxFrame
private:
    sqlite3 *db;

...
...
...


//----------------------------------------------------------------------------
// prjWxEx01Frm
//----------------------------------------------------------------------------
//Add Custom Events only in the appropriate block.
//Code added in other places will be removed by wxDev-C++
////Event Table Start
BEGIN_EVENT_TABLE(prjWxEx01Frm,wxFrame)
    ////Manual Code Start
    ////Manual Code End
    
    EVT_CLOSE(prjWxEx01Frm::OnClose)
    EVT_ACTIVATE(prjWxEx01Frm::prjWxEx01FrmActivate)
    EVT_BUTTON(ID_WXBTNNEXT,prjWxEx01Frm::WxBtnNextClick)


END_EVENT_TABLE()
////Event Table End


void prjWxEx01Frm::OnClose(wxCloseEvent& event)
{
    sqlite3_close(db);
    Destroy();
}

/*
 * prjWxEx01FrmActivate
 */
void prjWxEx01Frm::prjWxEx01FrmActivate(wxActivateEvent& event)
{
    dbFileName=wxString( "D:/hobby_cpp/x4_sqlite/test.db" );
    int rc = sqlite3_open(dbFileName, &db);
    if( rc )
    {
        wxString str( sqlite3_errmsg(db) );
        wxMessageBox(wxT("Can't open database: ") + str);

        sqlite3_close(db);
    }
}

static int callback(void *pArg, int argc, char **argv, char **azColName){
    StekiResultSet *rset=(StekiResultSet *)pArg;
    
    wxString info;
    for(int i=0;i <argc;i++)
    {
       info.Append(wxString(azColName[i])+wxT("=")+wxT(argv[i])+wxT("\t"));
    }
    rset->add( info );
    
    // return 0 or else the sqlexec will be aborted.
    return 0;
}

/*
 * WxBtnNextClick
 */
void prjWxEx01Frm::WxBtnNextClick(wxCommandEvent& event)
{
    WxMemoMean->SetValue(_T(""));
    
    StekiResultSet *resultSet = new StekiResultSet();
    
    char *zErrMsg = 0;
    wxString strSql("select * from x;");
    int rc = sqlite3_exec( db, strSql, callback, (void *)resultSet, &zErrMsg);
    if( rc!=SQLITE_OK ){
        wxString strErrMsg( zErrMsg );
        wxMessageBox(wxT("SQL error: ") + strErrMsg);
        return;
    }

    appendText( *resultSet->toString() );
    free( resultSet );
    
}

Posted by stekilove
,