mirror of
https://github.com/gnustep/apps-gorm.git
synced 2025-02-24 12:01:16 +00:00
575 lines
16 KiB
Objective-C
575 lines
16 KiB
Objective-C
/* main.m
|
|
|
|
Copyright (C) 1999,2000 Free Software Foundation, Inc.
|
|
|
|
Author: Richard frith-Macdonald <richard@brainstorm.co.uk>
|
|
Date: 1999
|
|
|
|
Author: Gregory John Casamento <greg_casamento@yahoo.com>
|
|
Date: 2003, 2004, 2005
|
|
|
|
This file is part of GNUstep.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA.
|
|
*/
|
|
#include <Foundation/Foundation.h>
|
|
#include <AppKit/AppKit.h>
|
|
|
|
#include <InterfaceBuilder/InterfaceBuilder.h>
|
|
|
|
#include "GormNSMenu.h"
|
|
|
|
@interface GormMenuMaker : NSObject <NSCoding>
|
|
{
|
|
}
|
|
@end
|
|
|
|
@implementation GormMenuMaker
|
|
- (void) encodeWithCoder: (NSCoder *)coder
|
|
{
|
|
}
|
|
|
|
- (id) initWithCoder: (NSCoder *)coder
|
|
{
|
|
NSMenu *m = [[GormNSMenu alloc] init];
|
|
|
|
// build the menu..
|
|
[m setTitle: _(@"Main Menu")];
|
|
[m addItemWithTitle: _(@"Hide")
|
|
action: @selector(hide:)
|
|
keyEquivalent: @"h"];
|
|
[m addItemWithTitle: _(@"Quit")
|
|
action: @selector(terminate:)
|
|
keyEquivalent: @"q"];
|
|
RELEASE(self);
|
|
|
|
return ((id)m);
|
|
}
|
|
@end
|
|
|
|
@interface MenusPalette: IBPalette
|
|
{
|
|
}
|
|
@end
|
|
|
|
@implementation MenusPalette
|
|
|
|
- (void) finishInstantiate
|
|
{
|
|
NSView *contents;
|
|
NSMenuItem *i;
|
|
NSMenu *m;
|
|
NSMenu *s;
|
|
NSButton *b;
|
|
id menu;
|
|
id v;
|
|
NSBundle *bundle = [NSBundle bundleForClass: [self class]];
|
|
NSString *path = [bundle pathForImageResource: @"GormMenuDrag"];
|
|
NSImage *dragImage = [[NSImage alloc] initWithContentsOfFile: path];
|
|
NSFontManager *fm = nil;
|
|
|
|
originalWindow = [[NSWindow alloc] initWithContentRect:
|
|
NSMakeRect(0, 0, 272, 192)
|
|
styleMask: NSBorderlessWindowMask
|
|
backing: NSBackingStoreRetained
|
|
defer: NO];
|
|
[originalWindow setTitle: @"Menus"];
|
|
contents = [originalWindow contentView];
|
|
|
|
|
|
/*
|
|
* The Info menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m addItemWithTitle: @"Info Panel..."
|
|
action: @selector(orderFrontStandardInfoPanel:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Preferences..."
|
|
action: NULL
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Help..."
|
|
action: @selector(orderFrontHelpPanel:)
|
|
keyEquivalent: @"?"];
|
|
[m setTitle: @"Info"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Info"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 160, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Info"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Font menu
|
|
*/
|
|
fm = [NSFontManager sharedFontManager];
|
|
m = [GormNSMenu menuWithMenu: [fm fontMenu: YES]];
|
|
|
|
// Other font menu items
|
|
[m addItemWithTitle: @"Underline"
|
|
action: @selector(underline:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Superscript"
|
|
action: @selector(superscript:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Subscript"
|
|
action: @selector(subscript:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Unscript"
|
|
action: @selector(unscript:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Copy Font"
|
|
action: @selector(copyFont:)
|
|
keyEquivalent: @"3"];
|
|
[m addItemWithTitle: @"Paste Font"
|
|
action: @selector(pasteFont:)
|
|
keyEquivalent: @"4"];
|
|
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Font"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 160, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Font"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Document menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m addItemWithTitle: @"Open..."
|
|
action: @selector(openDocument:)
|
|
keyEquivalent: @"o"];
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Open Recent"
|
|
action: NULL
|
|
keyEquivalent: @""];
|
|
s = [[GormNSMenu alloc] init];
|
|
[s addItemWithTitle: @"Clear List"
|
|
action: @selector(clearRecentDocuments:)
|
|
keyEquivalent: @""];
|
|
[s setTitle: @"Open Recent"];
|
|
[i setSubmenu: s];
|
|
[m addItemWithTitle: @"New"
|
|
action: @selector(newDocument:)
|
|
keyEquivalent: @"n"];
|
|
[m addItemWithTitle: @"Save..."
|
|
action: @selector(saveDocument:)
|
|
keyEquivalent: @"s"];
|
|
[m addItemWithTitle: @"Save As..."
|
|
action: @selector(saveDocumentAs:)
|
|
keyEquivalent: @"S"];
|
|
[m addItemWithTitle: @"Save To..."
|
|
action: @selector(saveDocumentTo:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Save All"
|
|
action: @selector(saveAllDocuments:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Revert To Saved"
|
|
action: @selector(revertDocumentToSaved:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Close"
|
|
action: @selector(close:)
|
|
keyEquivalent: @""];
|
|
[m setTitle: @"Document"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Document"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 140, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Document"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Text menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m addItemWithTitle: @"Align Left"
|
|
action: @selector(alignLeft:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Center"
|
|
action: @selector(alignCenter:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Align Right"
|
|
action: @selector(alignRight:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Show Ruler"
|
|
action: @selector(toggleRuler:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Copy Ruler"
|
|
action: @selector(copyRuler:)
|
|
keyEquivalent: @"1"];
|
|
[m addItemWithTitle: @"Paste Ruler"
|
|
action: @selector(pasteRuler:)
|
|
keyEquivalent: @"2"];
|
|
[m setTitle: @"Text"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Text"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 140, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Text"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Edit menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m addItemWithTitle: @"Undo"
|
|
action: @selector(undo:)
|
|
keyEquivalent: @"z"];
|
|
[m addItemWithTitle: @"Redo"
|
|
action: @selector(redo:)
|
|
keyEquivalent: @"Z"];
|
|
[m addItemWithTitle: @"Cut"
|
|
action: @selector(cut:)
|
|
keyEquivalent: @"x"];
|
|
[m addItemWithTitle: @"Copy"
|
|
action: @selector(copy:)
|
|
keyEquivalent: @"c"];
|
|
[m addItemWithTitle: @"Paste"
|
|
action: @selector(paste:)
|
|
keyEquivalent: @"v"];
|
|
[m addItemWithTitle: @"Select All"
|
|
action: @selector(selectAll:)
|
|
keyEquivalent: @"a"];
|
|
[m setTitle: @"Edit"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Edit"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 120, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Edit"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Find menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Find Panel..."
|
|
action: @selector(performFindPanelAction:)
|
|
keyEquivalent: @"f"];
|
|
[i setTag: NSFindPanelActionShowFindPanel];
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Find Next"
|
|
action: @selector(performFindPanelAction:)
|
|
keyEquivalent: @"g"];
|
|
[i setTag: NSFindPanelActionNext];
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Find Previous"
|
|
action: @selector(performFindPanelAction:)
|
|
keyEquivalent: @"d"];
|
|
[i setTag: NSFindPanelActionPrevious];
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Enter Selection"
|
|
action: @selector(performFindPanelAction:)
|
|
keyEquivalent: @"e"];
|
|
[i setTag: NSFindPanelActionSetFindString];
|
|
[m addItemWithTitle: @"Jump To Selection"
|
|
action: @selector(centerSelectionInVisibleArea:)
|
|
keyEquivalent: @"j"];
|
|
[m setTitle: @"Find"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Find"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 120, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Find"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Format menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
/*
|
|
* Font submenu
|
|
*/
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Font"
|
|
action: NULL
|
|
keyEquivalent: @""];
|
|
|
|
s = [GormNSMenu menuWithMenu: [fm fontMenu: YES]];
|
|
|
|
// Other font menu items
|
|
[s addItemWithTitle: @"Underline"
|
|
action: @selector(underline:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Superscript"
|
|
action: @selector(superscript:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Subscript"
|
|
action: @selector(subscript:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Unscript"
|
|
action: @selector(unscript:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Copy Font"
|
|
action: @selector(copyFont:)
|
|
keyEquivalent: @"3"];
|
|
[s addItemWithTitle: @"Paste Font"
|
|
action: @selector(pasteFont:)
|
|
keyEquivalent: @"4"];
|
|
[m setSubmenu: s forItem: i];
|
|
|
|
/*
|
|
* Text submenu
|
|
*/
|
|
i = (NSMenuItem *)[m addItemWithTitle: @"Text"
|
|
action: NULL
|
|
keyEquivalent: @""];
|
|
s = [[GormNSMenu alloc] init];
|
|
[s addItemWithTitle: @"Align Left"
|
|
action: @selector(alignLeft:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Center"
|
|
action: @selector(alignCenter:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Align Right"
|
|
action: @selector(alignRight:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Show Ruler"
|
|
action: @selector(toggleRuler:)
|
|
keyEquivalent: @""];
|
|
[s addItemWithTitle: @"Copy Ruler"
|
|
action: @selector(copyRuler:)
|
|
keyEquivalent: @"1"];
|
|
[s addItemWithTitle: @"Paste Ruler"
|
|
action: @selector(pasteRuler:)
|
|
keyEquivalent: @"2"];
|
|
[s setTitle: @"Text"];
|
|
[m setSubmenu: s forItem: i];
|
|
|
|
[m addItemWithTitle: @"Page Layout..."
|
|
action: @selector(runPageLayout:)
|
|
keyEquivalent: @"P"];
|
|
[m setTitle: @"Format"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Format"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 100, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Format"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The Colors item
|
|
*/
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Colors..."
|
|
action: @selector(orderFrontColorPanel:)
|
|
keyEquivalent: @""];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 100, 100, 20)];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setTitle: @" Colors..."];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
|
|
|
|
/*
|
|
* The Windows menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m addItemWithTitle: @"Arrange In Front"
|
|
action: @selector(arrangeInFront:)
|
|
keyEquivalent: @""];
|
|
[m addItemWithTitle: @"Miniaturize Window"
|
|
action: @selector(performMiniaturize:)
|
|
keyEquivalent: @"m"];
|
|
[m addItemWithTitle: @"Close Window"
|
|
action: @selector(performClose:)
|
|
keyEquivalent: @"w"];
|
|
[m setTitle: @"Windows"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Windows"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 80, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Windows"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The general item
|
|
*/
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Item"
|
|
action: NULL
|
|
keyEquivalent: @""];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 80, 100, 20)];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setTitle: @" Item"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
|
|
|
|
/*
|
|
* The Services menu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m setTitle: @"Services"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Services"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 60, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Services"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
|
|
/*
|
|
* The general submenu
|
|
*/
|
|
m = [[GormNSMenu alloc] init];
|
|
[m addItemWithTitle: @"Item"
|
|
action: NULL
|
|
keyEquivalent: @""];
|
|
[m setTitle: @"Submenu"];
|
|
i = [[NSMenuItem alloc] initWithTitle: @"Submenu"
|
|
action: @selector(submenuAction:)
|
|
keyEquivalent: @""];
|
|
[i setSubmenu: m];
|
|
|
|
b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 60, 100, 20)];
|
|
[b setImage: [NSImage imageNamed: @"common_3DArrowRight"]];
|
|
[b setAlignment: NSLeftTextAlignment];
|
|
[b setImagePosition: NSImageRight];
|
|
[b setTitle: @" Submenu"];
|
|
[contents addSubview: b];
|
|
[self associateObject: i
|
|
type: IBMenuPboardType
|
|
with: b];
|
|
RELEASE(b);
|
|
RELEASE(i);
|
|
RELEASE(m);
|
|
|
|
/*
|
|
* A whole new menu...
|
|
*/
|
|
menu = [[GormMenuMaker alloc] init];
|
|
v = [[NSButton alloc] initWithFrame: NSMakeRect(115,0,48,48)];
|
|
[v setBordered: NO];
|
|
[v setImage: dragImage];
|
|
[v setImagePosition: NSImageOverlaps];
|
|
[v setTitle: nil];
|
|
[contents addSubview: v];
|
|
[self associateObject: menu
|
|
type: IBMenuPboardType
|
|
with: v];
|
|
RELEASE(v);
|
|
RELEASE(menu);
|
|
}
|
|
@end
|
|
|