On Nov 24, 2009, at 9:26 AM, Leandro Damasio wrote:

> Hi,
>  
> My name is Leandro Damasio and I have started to follow Harbour Project Main 
> Developer List few days ago. I recently started 2D Informatica with my 
> associate Ted, to develop commercial aplications using [x]Harbour. We used 
> xHarbour + BCC55 + HWGUI for about 3 years, until we read xhb-diff.txt 
> document and decided to try Harbour instead.
>  
> We are about to realease 2DWGUI, an Object Oriented Harbour API to Win32 GUI, 
> and its going to be a free product but not opensource from start.
>  
> Our experience with opensource development is minimal, but I believe we could 
> be useful by giving sugestions and/or reporting problems at least.
>  
> My first try:
>  
> Does harbour have native support to singleton classes? Its an useful design 
> pattern to declare unique instance objects, so the same instance is 
> reacheable/accessible globally by just calling for the the class name.
> We implemented Singleton objects in xHarbour, but I'm sure the native 
> implementation should be done better by someone who knows the object machine 
> inside.
>  
> The Singleton Class usage is like below:
>  
> <code>
>  
> CLASS Aplication SINGLETON
>  
>     DATA Status
>  
>     METHOD Init(aParams)
>     METHOD Run()
>     METHOD End()
>  
> ENDCLASS
>  
>  
> Procedure Main (...)
>  
> Aplication():Init(hb_aParams())
>  
> Func2()
>  
> Aplication():End()
>  
> Return
>  
>  
> Static Function Func2()
>  
> Aplication():Run()
>  
> Return Aplication():Status
>  
> </code>

Hi Leandro,

In wxHarbour I've implemented this in the way that wxWidgets does, in fact you 
need to implement the same setup (closely) in wxWidgets for C++ that in 
wxHarbour:

In every wxWidget application you need to instance a subclass from the wxApp 
class (at least you must do it for GUI apps, console ones doesn't require 
wxApp), the wxApp class is used among other things for:

        - Start the main application process by calling the ::OnInit() method
        - Start the main GUI app message/event loop
        - Contain application wide properties and method's.

A typically wxHarbour app, would be:

<prg>
#include "wxharbour.ch"

FUNCTION Main()

  IMPLEMENT_APP( MyApp():New() )

RETURN NIL

CLASS MyApp FROM wxApp
PRIVATE:
PROTECTED:
PUBLIC:
  DATA frame
  METHOD OnInit()
PUBLISHED:
ENDCLASS

METHOD FUNCTION OnInit() CLASS MyApp

  CREATE FRAME ::frame ;
    TITLE "Frame1"
                
  @ BUTTON "ShowTitle" ACTION {|| wxMessageBox( wxGetApp():frame:GetTitle() ) }

  SHOW WINDOW ::frame FIT CENTRE

RETURN .T.
</prg>

The "MyApp" class is instantiated in the "Main" function, and it can be 
retrieved anywhere in the app by using the "wxGetApp()" function, so it can be 
used in a application wide way.

>  
> If it is not implemented yet, do you think its a good idea to implement 
> natively?

I don't understand what do you mean by natively, if you mean to:
        - Limit the number of instances
        - automate the instantiation
        - calling in the app

I think that it can be done easily by simply using the Harbour's Preprocessor 
capabilities.


best regards,

Teo

_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to