Back to index

lightning-sunbird  0.9+nobinonly
nsWindow.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is mozilla.org code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *
00024  * Alternatively, the contents of this file may be used under the terms of
00025  * either the GNU General Public License Version 2 or later (the "GPL"), or
00026  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00027  * in which case the provisions of the GPL or the LGPL are applicable instead
00028  * of those above. If you wish to allow use of your version of this file only
00029  * under the terms of either the GPL or the LGPL, and not to allow others to
00030  * use your version of this file under the terms of the MPL, indicate your
00031  * decision by deleting the provisions above and replace them with the notice
00032  * and other provisions required by the GPL or the LGPL. If you do not delete
00033  * the provisions above, a recipient may use your version of this file under
00034  * the terms of any one of the MPL, the GPL or the LGPL.
00035  *
00036  * ***** END LICENSE BLOCK ***** */
00037 
00038 #ifndef nsWindow_h__
00039 #define nsWindow_h__
00040 
00041 
00042 
00043 #include "nsISupports.h"
00044 
00045 #include "nsWidget.h"
00046 
00047 #include "nsString.h"
00048 
00049 #include <Pt.h>
00050 
00051 class nsFont;
00052 class nsIAppShell;
00053 
00054 #define NSRGB_2_COLOREF(color)                          RGB(NS_GET_R(color),NS_GET_G(color),NS_GET_B(color))
00055 
00060 class nsWindow : public nsWidget
00061 {
00062 
00063 public:
00064   // nsIWidget interface
00065 
00066   nsWindow();
00067   virtual ~nsWindow();
00068 
00069   NS_IMETHOD           WidgetToScreen(const nsRect &aOldRect, nsRect &aNewRect);
00070 
00071   NS_IMETHOD           PreCreateWidget(nsWidgetInitData *aWidgetInitData);
00072 
00073   virtual void*        GetNativeData(PRUint32 aDataType);
00074 
00075   NS_IMETHOD           Scroll(PRInt32 aDx, PRInt32 aDy, nsRect *aClipRect);
00076   NS_IMETHOD           ScrollWidgets(PRInt32 aDx, PRInt32 aDy);
00077   inline NS_IMETHOD    ScrollRect(nsRect &aSrcRect, PRInt32 aDx, PRInt32 aDy)
00078               {
00079               NS_WARNING("nsWindow::ScrollRect Not Implemented\n");
00080               return NS_OK;
00081               }
00082 
00083   NS_IMETHOD           SetTitle(const nsAString& aTitle);
00084  
00085   NS_IMETHOD           Move(PRInt32 aX, PRInt32 aY);
00086 
00087   NS_IMETHOD           Resize(PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint);
00088   NS_IMETHOD           Resize(PRInt32 aX, PRInt32 aY, PRInt32 aWidth, PRInt32 aHeight, PRBool aRepaint)
00089               {
00090               Move(aX,aY);
00091               Resize(aWidth,aHeight,aRepaint);
00092               return NS_OK;
00093               }
00094 
00095   NS_IMETHOD           CaptureRollupEvents(nsIRollupListener * aListener,
00096                                            PRBool aDoCapture,
00097                                            PRBool aConsumeRollupEvent);
00098 
00099        NS_IMETHOD SetFocus(PRBool aRaise);
00100 
00101   inline NS_IMETHOD    GetAttention(PRInt32 aCycleCount)
00102               {
00103               if( mWidget ) PtWindowToFront( mWidget );
00104               return NS_OK;
00105               }
00106 
00107   virtual PRBool       IsChild() const;
00108 
00109 
00110   // Utility methods
00111   inline PRBool         OnKey(nsKeyEvent &aEvent)
00112               {
00113               if( mEventCallback ) return DispatchWindowEvent(&aEvent);
00114               return PR_FALSE;
00115               }
00116 
00117   inline NS_IMETHOD                GetClientBounds( nsRect &aRect )
00118               {
00119               aRect.x = 0;
00120               aRect.y = 0;
00121               aRect.width = mBounds.width;
00122               aRect.height = mBounds.height;
00123               return NS_OK;
00124               }
00125 
00126   NS_IMETHOD            SetModal(PRBool aModal);
00127        NS_IMETHOD            MakeFullScreen(PRBool aFullScreen);
00128 
00129  // Native draw function... like doPaint()
00130  static void            RawDrawFunc( PtWidget_t *pWidget, PhTile_t *damage );
00131 
00132  inline nsIRegion              *GetRegion();
00133 
00134 private:
00135   // this is the "native" destroy code that will destroy any
00136   // native windows / widgets for this logical widget
00137   virtual void          DestroyNative(void);
00138   void                  DestroyNativeChildren(void);
00139 
00140   static int            MenuRegionCallback(PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo);  
00141 
00142   NS_IMETHOD            CreateNative(PtWidget_t *parentWidget);
00143 
00144   static int            ResizeHandler( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo );
00145        static int            EvInfo( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo );
00146   static int            WindowWMHandler( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo );
00147   static int            MenuRegionDestroyed( PtWidget_t *widget, void *data, PtCallbackInfo_t *cbinfo );
00148 
00149   inline NS_IMETHOD     ModalEventFilter(PRBool aRealEvent, void *aEvent, PRBool *aForWindow)
00150               {
00151               *aForWindow = PR_TRUE;
00152               return NS_OK;
00153               }
00154 
00155 private:
00156   PtWidget_t *mClientWidget, *mLastMenu;
00157   PRBool mIsTooSmall;
00158        static nsIRollupListener *gRollupListener;
00159        static nsIWidget *gRollupWidget;
00160 };
00161 
00162 //
00163 // A child window is a window with different style
00164 //
00165 class ChildWindow : public nsWindow {
00166   public:
00167     ChildWindow()
00168                      {
00169                      mBorderStyle     = eBorderStyle_none;
00170                      mWindowType      = eWindowType_child;
00171                      }
00172     ~ChildWindow() { }
00173        inline PRBool IsChild() const { return PR_TRUE; }
00174 };
00175 
00176 #endif // Window_h__