зеркало из https://github.com/mozilla/pjs.git
257 строки
5.9 KiB
C++
257 строки
5.9 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
#include "nsViewerApp.h"
|
|
#include "nsBrowserWindow.h"
|
|
#include "nsIImageManager.h"
|
|
#include "nsIWidget.h"
|
|
#include <stdlib.h>
|
|
#include "resources.h"
|
|
|
|
#include <ToolUtils.h> // MacOS includes
|
|
#include <Menus.h>
|
|
#include <Windows.h>
|
|
#include <Devices.h>
|
|
#include <Resources.h>
|
|
#include <Dialogs.h>
|
|
|
|
#include <PP_Messages.h> // for PP standard menu commands
|
|
#include "nsMacMessagePump.h" // for the windowless menu event handler
|
|
|
|
enum
|
|
{
|
|
menu_First = 128,
|
|
menu_Apple = menu_First,
|
|
menu_File,
|
|
menu_Edit,
|
|
menu_Sample,
|
|
menu_Last = menu_Sample,
|
|
|
|
submenu_Print = 16,
|
|
|
|
cmd_Sample0 = 1000,
|
|
cmd_PrintOneColumn = 2000,
|
|
cmd_Find = 3000
|
|
};
|
|
|
|
|
|
static nsNativeViewerApp* gTheApp;
|
|
|
|
|
|
static long ConvertOSMenuResultToPPMenuResult(long menuResult);
|
|
static long ConvertOSMenuResultToPPMenuResult(long menuResult)
|
|
{
|
|
// Convert MacOS menu item to PowerPlant menu item because
|
|
// in our sample app, we use Constructor for resource editing
|
|
long menuID = HiWord(menuResult);
|
|
long menuItem = LoWord(menuResult);
|
|
Int16** theMcmdH = (Int16**) ::GetResource('Mcmd', menuID);
|
|
if (theMcmdH != nil)
|
|
{
|
|
if (::GetHandleSize((Handle)theMcmdH) > 0)
|
|
{
|
|
Int16 numCommands = (*theMcmdH)[0];
|
|
if (numCommands >= menuItem)
|
|
{
|
|
CommandT* theCommandNums = (CommandT*)(&(*theMcmdH)[1]);
|
|
menuItem = theCommandNums[menuItem-1];
|
|
}
|
|
}
|
|
::ReleaseResource((Handle) theMcmdH);
|
|
}
|
|
menuResult = (menuID << 16) + menuItem;
|
|
return (menuResult);
|
|
}
|
|
|
|
|
|
#pragma mark -
|
|
//----------------------------------------------------------------------
|
|
|
|
nsNativeViewerApp::nsNativeViewerApp()
|
|
{
|
|
nsMacMessagePump::SetWindowlessMenuEventHandler(DispatchMenuItemWithoutWindow);
|
|
}
|
|
|
|
nsNativeViewerApp::~nsNativeViewerApp()
|
|
{
|
|
}
|
|
|
|
int
|
|
nsNativeViewerApp::Run()
|
|
{
|
|
OpenWindow();
|
|
mAppShell->Run();
|
|
return 0;
|
|
}
|
|
|
|
void nsNativeViewerApp::DispatchMenuItemWithoutWindow(PRInt32 menuResult)
|
|
{
|
|
menuResult = ConvertOSMenuResultToPPMenuResult(menuResult);
|
|
|
|
long menuID = HiWord(menuResult);
|
|
long menuItem = LoWord(menuResult);
|
|
switch (menuID)
|
|
{
|
|
case menu_Apple:
|
|
switch (menuItem)
|
|
{
|
|
case cmd_About:
|
|
::Alert(128, nil);
|
|
break;
|
|
default:
|
|
Str255 daName;
|
|
GetMenuItemText(GetMenuHandle(menu_Apple), menuItem, daName);
|
|
OpenDeskAcc(daName);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case menu_File:
|
|
|
|
switch (menuItem)
|
|
{
|
|
case cmd_New:
|
|
gTheApp->OpenWindow();
|
|
break;
|
|
case cmd_Open:
|
|
nsBrowserWindow * newWindow;
|
|
gTheApp->OpenWindow(0, newWindow);
|
|
newWindow->DoFileOpen();
|
|
break;
|
|
case cmd_Quit:
|
|
gTheApp->Exit();
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#pragma mark -
|
|
//----------------------------------------------------------------------
|
|
|
|
nsNativeBrowserWindow::nsNativeBrowserWindow()
|
|
{
|
|
}
|
|
|
|
nsNativeBrowserWindow::~nsNativeBrowserWindow()
|
|
{
|
|
}
|
|
|
|
nsresult
|
|
nsNativeBrowserWindow::CreateMenuBar(PRInt32 aWidth)
|
|
{
|
|
for (int i = menu_First; i <= menu_Last; i++)
|
|
{
|
|
InsertMenu(GetMenu(i), 0);
|
|
}
|
|
InsertMenu(GetMenu(submenu_Print), -1);
|
|
AppendResMenu(GetMenuHandle(menu_Apple), 'DRVR');
|
|
DrawMenuBar();
|
|
return NS_OK;
|
|
}
|
|
|
|
nsEventStatus
|
|
nsNativeBrowserWindow::DispatchMenuItem(PRInt32 aID)
|
|
{
|
|
aID = ConvertOSMenuResultToPPMenuResult(aID);
|
|
|
|
PRInt32 xpID = 0;
|
|
long menuID = HiWord(aID);
|
|
long menuItem = LoWord(aID);
|
|
|
|
switch (menuID)
|
|
{
|
|
case menu_Apple:
|
|
switch (menuItem)
|
|
{
|
|
case cmd_About:
|
|
::Alert(128, nil);
|
|
break;
|
|
default:
|
|
Str255 daName;
|
|
GetMenuItemText(GetMenuHandle(menu_Apple), menuItem, daName);
|
|
OpenDeskAcc(daName);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case menu_File:
|
|
switch (menuItem)
|
|
{
|
|
case cmd_New: xpID = VIEWER_WINDOW_OPEN; break;
|
|
case cmd_Open: xpID = VIEWER_FILE_OPEN; break;
|
|
case cmd_Close:
|
|
WindowPtr whichwindow = FrontWindow();
|
|
nsIWidget* raptorWindow = *(nsIWidget**)::GetWRefCon(whichwindow);
|
|
raptorWindow->Destroy();
|
|
break;
|
|
case cmd_Save: /*n.a.*/ break;
|
|
case cmd_SaveAs: /*n.a.*/ break;
|
|
case cmd_Revert: /*n.a.*/ break;
|
|
case cmd_PageSetup: /*n.a.*/ break;
|
|
case cmd_Print: /*n.a.*/ break;
|
|
case cmd_Quit: xpID = VIEWER_EXIT; break;
|
|
}
|
|
break;
|
|
|
|
case menu_Edit:
|
|
switch (menuItem)
|
|
{
|
|
case cmd_Undo: /*n.a.*/ break;
|
|
case cmd_Cut: xpID = VIEWER_EDIT_CUT; break;
|
|
case cmd_Copy: xpID = VIEWER_EDIT_COPY; break;
|
|
case cmd_Paste: xpID = VIEWER_EDIT_PASTE; break;
|
|
case cmd_Clear: /*n.a.*/ break;
|
|
case cmd_SelectAll: xpID = VIEWER_EDIT_SELECTALL; break;
|
|
case cmd_Find: xpID = VIEWER_EDIT_FINDINPAGE; break;
|
|
}
|
|
break;
|
|
|
|
case menu_Sample:
|
|
xpID = VIEWER_DEMO0 + menuItem - cmd_Sample0;
|
|
break;
|
|
|
|
case submenu_Print:
|
|
xpID = VIEWER_ONE_COLUMN + menuItem - cmd_PrintOneColumn;
|
|
break;
|
|
}
|
|
|
|
// Dispatch xp menu items
|
|
if (xpID != 0)
|
|
return nsBrowserWindow::DispatchMenuItem(xpID);
|
|
else
|
|
return nsEventStatus_eIgnore;
|
|
}
|
|
|
|
#pragma mark -
|
|
//----------------------------------------------------------------------
|
|
int main(int argc, char **argv)
|
|
{
|
|
|
|
// Hack to get il_ss set so it doesn't fail in xpcompat.c
|
|
nsIImageManager *manager;
|
|
NS_NewImageManager(&manager);
|
|
|
|
gTheApp = new nsNativeViewerApp();
|
|
NS_ADDREF(gTheApp);
|
|
gTheApp->Initialize(argc, argv);
|
|
gTheApp->Run();
|
|
|
|
return 0;
|
|
}
|