lltoolbrush.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_LLTOOLBRUSH_H
00033 #define LL_LLTOOLBRUSH_H
00034 
00035 #include "lltool.h"
00036 #include "v3math.h"
00037 #include "lleditmenuhandler.h"
00038 
00039 class LLSurface;
00040 class LLVector3d;
00041 class LLViewerRegion;
00042 
00043 template<class DATA_TYPE> class LLLinkedList;
00044 
00045 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00046 // Class LLToolBrushLand
00047 //
00048 // A toolbrush that modifies the land.
00049 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00050 
00051 class LLToolBrushLand : public LLTool, public LLEditMenuHandler
00052 {
00053 public:
00054         LLToolBrushLand();
00055         
00056         // x,y in window coords, 0,0 = left,bot
00057         virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
00058         virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );          
00059         virtual BOOL handleHover( S32 x, S32 y, MASK mask );
00060         virtual void handleSelect();
00061         virtual void handleDeselect();
00062 
00063         // isAlwaysRendered() - return true if this is a tool that should
00064         // always be rendered regardless of selection.
00065         virtual BOOL isAlwaysRendered() { return TRUE; }
00066 
00067         // Draw the area that will be affected.
00068         virtual void render();
00069 
00070         // on Idle is where the land modification actually occurs
00071         static void onIdle(void* brush_tool);  
00072 
00073         void                    onMouseCaptureLost();
00074 
00075         void modifyLandInSelectionGlobal();
00076         virtual void    undo();
00077         virtual BOOL    canUndo()       { return TRUE; }
00078 
00079         //virtual void  redo();
00080         virtual BOOL    canRedo()       { return FALSE; }
00081 
00082 
00083 protected:
00084         void brush( void );
00085         void modifyLandAtPointGlobal( const LLVector3d &spot, MASK mask );
00086 
00087         void determineAffectedRegions(LLLinkedList<LLViewerRegion>& regions,
00088                                                                   const LLVector3d& spot) const;
00089         void renderOverlay(LLSurface& land, const LLVector3& pos_region,
00090                                            const LLVector3& pos_world);
00091 
00092         // Does region allow terraform, or are we a god?
00093         bool canTerraform(LLViewerRegion* regionp) const;
00094 
00095         // Modal dialog that you can't terraform the region
00096         void alertNoTerraform(LLViewerRegion* regionp);
00097 
00098 protected:
00099         F32 mStartingZ;
00100         S32 mMouseX;
00101         S32 mMouseY;
00102         S32 mBrushIndex;
00103         BOOL mGotHover;
00104         BOOL mLastShowParcelOwners;
00105         BOOL mBrushSelected;
00106         LLLinkedList<LLViewerRegion> mLastAffectedRegions;
00107 };
00108 
00109 extern LLToolBrushLand *gToolLand;
00110 
00111 #endif // LL_LLTOOLBRUSH_H

Generated on Thu Jul 1 06:09:20 2010 for Second Life Viewer by  doxygen 1.4.7