Back to index

lightning-sunbird  0.9+nobinonly
nsUrlWidget.cpp
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; 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  *   Bill Law        <law@netscape.com>
00024  *   Jesse Burris    <jburris@mmxi.com>
00025  *
00026  * Alternatively, the contents of this file may be used under the terms of
00027  * either of the GNU General Public License Version 2 or later (the "GPL"),
00028  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00029  * in which case the provisions of the GPL or the LGPL are applicable instead
00030  * of those above. If you wish to allow use of your version of this file only
00031  * under the terms of either the GPL or the LGPL, and not to allow others to
00032  * use your version of this file under the terms of the MPL, indicate your
00033  * decision by deleting the provisions above and replace them with the notice
00034  * and other provisions required by the GPL or the LGPL. If you do not delete
00035  * the provisions above, a recipient may use your version of this file under
00036  * the terms of any one of the MPL, the GPL or the LGPL.
00037  *
00038  * ***** END LICENSE BLOCK ***** */
00039 
00040 // Filename: nsIUrlWidget.cpp
00041 
00042 #include "nsIDocShell.h"
00043 #include "nsUrlWidget.h"
00044 #include "nsIScriptContext.h"
00045 #include "nsIScriptGlobalObject.h"
00046 #include "nsIDOMWindowInternal.h"
00047 #include "nsIBaseWindow.h"
00048 #include "nsIWidget.h"
00049 #include "nsCOMPtr.h"
00050 
00051 #include <windows.h>
00052 
00053 // Define this macro to turn on console debug output.                       
00054 //#define DEBUG_URLWIDGET
00055 
00056 // Implementation of the nsIUrlWidget interface.
00057 // Simple initialization function.
00058 nsresult    
00059 nsUrlWidget::Init()
00060 {
00061 
00062    nsresult rv = NS_OK;
00063 
00064   return rv;
00065 }
00066 
00067 NS_IMETHODIMP
00068 nsUrlWidget::SetURLToHiddenControl( char const *aURL, nsIDOMWindowInternal *parent )
00069 {
00070        nsresult rv = NS_OK;
00071        HWND   hEdit=NULL; // Handle to the hidden editbox control.
00072        HWND   hMainFrame=NULL;  // Handle to main frame window where our
00073                                                  //editbox is attached.
00074 
00075     static const LONG editControlID = 12345;
00076 
00077     nsCOMPtr<nsIScriptGlobalObject> ppScriptGlobalObj( do_QueryInterface(parent) );
00078     if (!ppScriptGlobalObj)
00079     {
00080         return NS_ERROR_FAILURE;
00081     }
00082 
00083     nsCOMPtr<nsIBaseWindow> ppBaseWindow =
00084       do_QueryInterface(ppScriptGlobalObj->GetDocShell());
00085 
00086     if (ppBaseWindow)
00087     {
00088         nsCOMPtr<nsIWidget> ppWidget;
00089         ppBaseWindow->GetMainWidget(getter_AddRefs(ppWidget));
00090         hMainFrame = (HWND)ppWidget->GetNativeData(NS_NATIVE_WIDGET);
00091     }
00092 
00093        if (!hMainFrame)
00094        {
00095               return NS_ERROR_FAILURE;
00096        }
00097 
00098     // See if edit control has been created already.
00099     hEdit = GetDlgItem( hMainFrame, 12345 );
00100 
00101     if ( !hEdit ) {
00102         ULONG visibility = 0;
00103         // Set this to WS_VISIBLE to debug.
00104         //visibility = WS_VISIBLE;
00105 
00106         hEdit = ::CreateWindow("Edit",
00107                 "",
00108                 WS_CHILD | WS_BORDER | visibility,
00109                 CW_USEDEFAULT,
00110                 CW_USEDEFAULT,
00111                 200,
00112                 15,
00113                 hMainFrame,
00114                 (HMENU)editControlID,
00115                 NULL,
00116                 NULL);
00117     }
00118 
00119        // OK.  If we have an editbox created, and a url, post it.
00120        if ((aURL != NULL) && (hEdit != NULL))
00121        {
00122         #ifdef DEBUG_URLWIDGET
00123         printf( "nsUrlWidget; window=0x%08X, url=[%s]\n", (int)hEdit, aURL );
00124         #endif
00125               ::SendMessage(hEdit, WM_SETTEXT, (WPARAM)0, (LPARAM)aURL);
00126        }
00127 
00128     return rv;
00129 }
00130 
00131 // Use standard implementation of nsISupports stuff.
00132 NS_IMPL_ISUPPORTS1( nsUrlWidget, nsIUrlWidget )
00133 
00134 nsUrlWidget::nsUrlWidget() {
00135 #ifdef DEBUG_URLWIDGET
00136 printf( "nsUrlWidget ctor called\n" );
00137 #endif
00138 }
00139 
00140 
00141 nsUrlWidget::~nsUrlWidget() {
00142 #ifdef DEBUG_URLWIDGET
00143 printf( "nsUrlWidget dtor called\n" );
00144 #endif
00145 }