Patches should be sent to the mailing list 
mrproject@lists.codefactory.se. Patches should be made with 
'cvs diff -u >patch' and should conform to Mr Project coding 
style as described in docs/CodingStyle. Please read other 
relevant documents in the docs directory too.

All dialogs should be created using glade/libglade. This is to separate 
the GUI-creation routines from the rest of the code. Glade can be found
at http://glade.pn.org. Libglade can be found in gnome-cvs.

Debugging
---------

A few tips on how to make debugging MrProject easier:

1. Set the environment variable MRPROJECT_DEBUG to 1,
   This makes it stop in the debugger on critical warnings for log domains
   that are specified in the program. To make gdb stop for any warning, do
   r --g-fatal-warnings or add the following to your ~/.gdbinit:

   define rg
     run --g-fatal-warnings
   end

2. Compile Bonobo with CFLAGS='-DBONOBO_REF_HOOKS -DBONOBO_OBJECT_DEBUG'
   if you need to trace down a ref problem.

3. When looking for a bug in a certain component, remove the other components'
   oaf-files, so they don't get loaded. This way you can be sure the bug does
   not belong somewhere else.

4. To find leaks, try memprof (on gnomecvs).

5. To track down memory corruption, try to set the environment variable
   MALLOC_CHECK_ to 1 to get runtime warnings, or 2 to make it crash immediately
   when something goes wrong. If you don't find anything, try to run it with 
   Electric fence:

   gdb mrproject
   > set env LD_PRELOAD=/usr/lib/libefence.so
   > r

   Then is should crash directly when something goes wrong, instead of 
   continuing and crashing at a later time.

   To make this easier, just add the following to your ~/.gdbinit:

   define efence
     set env LD_PRELOAD=/usr/lib/libefence.so
   end

6. If you need to profile the program to see where to optimize, use
   prof (it's in the eazel-tools module on gnomecvs).



The source directory layout for MrProject:

mrproject/docs:
    CodingStyle			Style guide document.
    TODO			TODO list.
    ...

mrproject/idl:			CORBA Interface definitions.

mrproject/util:			Utility functions, shared across the project.
		

    GanttWidget			Widget that visualize a project as a gantt chart.
    GanttModel			Data model for the widget.
    ...

mrproject/project-engine:
    Project			
    TaskManager                 Base class for handling tasks.
    ResourceManager             Base class for handling resources.
    AllocationManager           Base class for handling resource allocations.
    TaskModel			GtkObject that models a the task.

mrproject/project-engine/backends:
    File*                       File backend, that stores project information in a file.
    ...

mrproject/client:		The main application.

mrproejct/client/manager-clients: GtkObject client to simplify communication with the project engine.
                   
mrproject/client/components:
    ShellComponent		Abstract class for components to embedded in the shell.
    ...                         

