home *** CD-ROM | disk | FTP | other *** search
- package netscape.application;
-
- import netscape.util.ClassInfo;
- import netscape.util.CodingException;
- import netscape.util.Decoder;
- import netscape.util.Encoder;
-
- public class MenuView extends View {
- Menu menu;
- MenuItem selectedItem;
- public MenuView owner;
- public MenuView child;
- InternalWindow menuWindow;
- int type;
- int itemHeight;
- boolean transparent;
- static final String MENU_KEY = "menu";
- static final String OWNER_KEY = "owner";
- static final String CHILD_KEY = "child";
- static final String MENUWINDOW_KEY = "menuWindow";
- static final String MENUITEMHEIGHT_KEY = "itemHeight";
- static final String TYPE_KEY = "type";
- static final String TRANSPARENT_KEY = "transparent";
- public static final int HORIZONTAL = 0;
- public static final int VERTICAL = 1;
-
- public MenuView() {
- this(0, 0, 0, 0, (Menu)null, (MenuView)null);
- }
-
- public MenuView(Menu var1) {
- this(0, 0, 0, 0, var1, (MenuView)null);
- }
-
- public MenuView(int var1, int var2, int var3, int var4) {
- this(var1, var2, var3, var4, (Menu)null, (MenuView)null);
- }
-
- public MenuView(int var1, int var2, int var3, int var4, Menu var5) {
- this(var1, var2, var3, var4, var5, (MenuView)null);
- }
-
- public MenuView(int var1, int var2, int var3, int var4, Menu var5, MenuView var6) {
- super(var1, var2, var3, var4);
- this.itemHeight = 17;
- this.transparent = false;
- if (var5 != null) {
- this.menu = var5;
- } else {
- this.menu = new Menu(true);
- }
-
- this.owner = var6;
- this.menuWindow = this.createMenuWindow();
- this.menuWindow.addSubview(this);
- if (this.menu.isTopLevel()) {
- this.type = 0;
- ((View)this).setHorizResizeInstruction(2);
- } else {
- this.type = 1;
- }
-
- this.menu.menuView = this;
- }
-
- protected InternalWindow createMenuWindow() {
- InternalWindow var1 = new InternalWindow(0, 0, 0, 0);
- var1.setType(0);
- var1.setLayer(511);
- var1.setCanBecomeMain(false);
- var1._contentView.setTransparent(true);
- var1.setScrollsToVisible(true);
- return var1;
- }
-
- public void setType(int var1) {
- this.type = var1;
- }
-
- public int type() {
- return this.type;
- }
-
- public void setMenu(Menu var1) {
- this.menu = var1;
- }
-
- public Menu menu() {
- return this.menu;
- }
-
- public void setOwner(MenuView var1) {
- this.owner = var1;
- }
-
- public MenuView owner() {
- return this.owner;
- }
-
- public Color backgroundColor() {
- return this.menu.backgroundColor();
- }
-
- public Border border() {
- return this.menu.border();
- }
-
- public void setTransparent(boolean var1) {
- this.transparent = var1;
- this.menuWindow.setTransparent(var1);
- }
-
- public boolean isTransparent() {
- return this.transparent;
- }
-
- public void setItemHeight(int var1) {
- if (var1 > 0) {
- this.itemHeight = var1;
- } else {
- this.itemHeight = this.minItemHeight();
- }
- }
-
- public int itemHeight() {
- if (this.itemHeight > 0) {
- return this.itemHeight;
- } else {
- this.setItemHeight(this.minItemHeight());
- return this.itemHeight;
- }
- }
-
- public int minItemHeight() {
- int var2 = 0;
- int var4 = this.menu.itemCount();
-
- for(int var1 = 0; var1 < var4; ++var1) {
- int var3 = this.menu.itemAt(var1).minHeight();
- if (var3 > var2) {
- var2 = var3;
- }
- }
-
- return var2;
- }
-
- public int minItemWidth() {
- int var3 = 0;
-
- for(int var1 = 0; var1 < this.menu.itemCount(); ++var1) {
- int var2 = this.menu.itemAt(var1).minWidth();
- if (var2 > var3) {
- var3 = var2;
- }
- }
-
- return var3;
- }
-
- public Size minSize() {
- int var3 = this.menu.itemCount();
- int var1;
- int var2;
- if (this.type == 0) {
- var1 = 0;
-
- for(int var4 = 0; var4 < var3; ++var4) {
- MenuItem var5 = this.menu.itemAt(var4);
- var1 += var5.minWidth();
- }
-
- var2 = this.itemHeight();
- } else {
- var1 = this.minItemWidth();
- var2 = var3 * this.itemHeight();
- }
-
- var1 += this.border().widthMargin();
- var2 += this.border().heightMargin();
- return new Size(var1, var2);
- }
-
- public MenuItem itemForPoint(int var1, int var2) {
- int var4 = -1;
-
- for(int var3 = 0; var3 < this.menu.itemCount(); ++var3) {
- Rect var6 = this.rectForItemAt(var3);
- if (var6.contains(var1, var2)) {
- var4 = var3;
- break;
- }
- }
-
- MenuItem var5;
- if (var4 >= 0) {
- var5 = this.menu.itemAt(var4);
- } else {
- var5 = null;
- }
-
- return var5;
- }
-
- public int selectedIndex() {
- MenuItem var1 = this.selectedItem();
- return var1 == null ? -1 : this.menu.indexOfItem(var1);
- }
-
- public MenuItem selectedItem() {
- return this.selectedItem;
- }
-
- public void selectItem(MenuItem var1) {
- if (var1.isEnabled()) {
- if (this.selectedItem != var1) {
- if (this.selectedItem != null) {
- this.selectedItem.setSelected(false);
- ((View)this).addDirtyRect(this.rectForItemAt(this.menu.indexOfItem(this.selectedItem)));
- }
-
- var1.setSelected(true);
- this.selectedItem = var1;
- ((View)this).addDirtyRect(this.rectForItemAt(this.menu.indexOfItem(var1)));
- }
-
- }
- }
-
- public void deselectItem() {
- if (this.selectedItem != null) {
- this.selectedItem.setSelected(false);
- ((View)this).addDirtyRect(this.rectForItemAt(this.menu.indexOfItem(this.selectedItem)));
- this.selectedItem = null;
- }
-
- }
-
- public Rect rectForItemAt(int var1) {
- if (var1 >= 0 && var1 < this.menu.itemCount()) {
- int var5 = 0;
- int var6;
- int var7;
- if (this.type == 0) {
- var6 = 0;
-
- for(int var4 = 0; var4 < var1; ++var4) {
- MenuItem var3 = this.menu.itemAt(var4);
- var5 += var3.minWidth();
- }
-
- var7 = this.menu.itemAt(var1).minWidth();
- } else {
- var6 = this.itemHeight() * var1;
- var7 = super.bounds.width - this.border().widthMargin();
- }
-
- var5 += this.border().leftMargin();
- var6 += this.border().topMargin();
- Rect var2 = Rect.newRect(var5, var6, var7, this.itemHeight());
- return var2;
- } else {
- return null;
- }
- }
-
- public Rect interiorRect() {
- Rect var1 = new Rect(this.border().leftMargin(), this.border().topMargin(), super.bounds.width - this.border().widthMargin(), super.bounds.height - this.border().heightMargin());
- return var1;
- }
-
- public void drawItemAt(int var1) {
- Rect var2 = this.rectForItemAt(var1);
- ((View)this).draw(var2);
- }
-
- protected MenuView createMenuView(Menu var1) {
- return new MenuView(0, 0, 0, 0, var1, this);
- }
-
- MenuView mainOwner() {
- MenuView var1;
- for(var1 = this.owner; var1.owner() != null; var1 = var1.owner()) {
- }
-
- return var1;
- }
-
- boolean performCommandForKeyStroke(KeyStroke var1, int var2) {
- if (Application.application().activeMenuViews.count() > 0) {
- return false;
- } else if (((View)this).window() != null && !((View)this).descendsFrom(((View)this).rootView()._mainWindow)) {
- return false;
- } else if (var2 != 2 && var2 != 1) {
- return false;
- } else {
- KeyEvent var3 = new KeyEvent(0L, var1.key, var1.modifiers, true);
- return this.menu.handleCommandKeyEvent(var3);
- }
- }
-
- void mouseWillDown(MouseEvent var1) {
- RootView var5 = Application.application().firstRootView();
- if (var5 != ((View)this).rootView()) {
- this.hideAll();
- } else {
- MouseEvent var4 = ((View)this).rootView().convertEventToView(this, var1);
- if (!((View)this).containsPoint(var4.x, var4.y)) {
- if (this.selectedItem() != null) {
- for(MenuView var3 = this.child; var3 != null; var3 = var3.child) {
- Rect var2 = new Rect(var3.bounds);
- ((View)var3).superview().convertRectToView((View)null, var2, var2);
- if (Rect.contains(var2.x, var2.y, var2.width, var2.height, var1.x, var1.y)) {
- return;
- }
- }
- }
-
- this.hideAll();
- }
- }
- }
-
- void hideAll() {
- Application.application().removeActiveMenuView(this);
- if (this.child != null) {
- this.child.hide();
- }
-
- if (this.isVisible()) {
- this.hide();
- }
-
- this.deselectItem();
- }
-
- public boolean mouseDown(MouseEvent var1) {
- if (this.owner != null) {
- return true;
- } else {
- MenuItem var2 = this.itemForPoint(var1.x, var1.y);
- if (var2 != null && var2.isEnabled()) {
- if (this.selectedItem != null && var2 == this.selectedItem) {
- if (this.isVisible()) {
- return true;
- } else {
- Application.application().removeActiveMenuView(this);
- if (this.child != null) {
- this.child.hide();
- this.child = null;
- }
-
- this.deselectItem();
- return true;
- }
- } else {
- this.selectItem(var2);
- if (var2.isEnabled() && var2.hasSubmenu()) {
- MenuView var3 = this.createMenuView(var2.submenu());
- var3.show(((View)this).rootView(), var1);
- this.child = var3;
- }
-
- return true;
- }
- } else {
- if (this.child != null) {
- this.child.hide();
- }
-
- this.deselectItem();
- return true;
- }
- }
- }
-
- public void mouseDragged(MouseEvent var1) {
- MenuItem var2 = this.itemForPoint(var1.x, var1.y);
- if (!Rect.contains(0, 0, ((View)this).width(), ((View)this).height(), var1.x, var1.y)) {
- var2 = null;
- if (this.owner != null && this.child == null || this.owner == null && this.child == null && this.isVisible()) {
- this.deselectItem();
- }
- }
-
- if (var2 == null || var2.isEnabled()) {
- for(MenuView var4 = this.child; var4 != null && var4.isVisible(); var4 = var4.child) {
- Rect var5 = new Rect(var4.bounds);
- MouseEvent var3 = ((View)this).convertEventToView(var4, var1);
- if (Rect.contains(var5.x, var5.y, var5.width, var5.height, var3.x, var3.y)) {
- var2 = var4.itemForPoint(var3.x, var3.y);
- if (var2 != null) {
- var4.mouseDragged(var3);
- var4.autoscroll(var3);
- return;
- }
- } else if (var4.child == null) {
- if (var4.selectedItem() == null) {
- var4.autoscroll(var3);
- }
-
- var4.deselectItem();
- }
- }
-
- if (var2 != null && var2 != this.selectedItem()) {
- if (this.selectedItem != null && this.selectedItem.hasSubmenu() && this.child != null && this.child.isVisible()) {
- this.child.hide();
- this.child = null;
- }
-
- this.selectItem(var2);
- if (var2.hasSubmenu()) {
- MenuView var6 = this.createMenuView(var2.submenu());
- var6.show(((View)this).rootView(), var1);
- this.child = var6;
- }
- }
-
- }
- }
-
- public void mouseUp(MouseEvent var1) {
- Object var2 = null;
- MenuItem var4 = this.itemForPoint(var1.x, var1.y);
- if (this.owner == null && this.selectedItem == var4) {
- if (!this.isVisible() || this.selectedItem == null) {
- return;
- }
-
- Application.application().removeActiveMenuView(this);
- this.hide();
- this.menu.performCommand("", var4);
- }
-
- if (this.owner == null && var4 == null) {
- MenuView var3;
- for(var3 = this.child; var3.child != null; var3 = var3.child) {
- }
-
- var3.mouseUp(((View)this).convertEventToView(var3, var1));
- }
-
- if (this.owner != null && this.selectedItem != null) {
- var4 = this.selectedItem;
- Application.application().removeActiveMenuView(this.mainOwner());
- this.hide();
-
- MenuView var6;
- for(var6 = this.owner; var6.owner() != null; var6 = var6.owner()) {
- var6.hide();
- }
-
- var6.hide();
- this.menu.performCommand("", var4);
- }
-
- }
-
- public void mouseEntered(MouseEvent var1) {
- if (this.owner == null && this.selectedItem != null || this.isVisible()) {
- this.mouseDragged(var1);
- }
-
- }
-
- public void mouseMoved(MouseEvent var1) {
- if (this.owner == null && this.selectedItem != null || this.isVisible()) {
- this.mouseDragged(var1);
- }
-
- }
-
- public void mouseExited(MouseEvent var1) {
- if (this.owner == null && this.selectedItem != null || this.isVisible()) {
- this.mouseDragged(var1);
- }
-
- }
-
- public void drawView(Graphics var1) {
- this.border().drawInRect(var1, 0, 0, ((View)this).width(), ((View)this).height());
- int var5 = this.menu.itemCount();
- int var6 = 0;
-
- for(int var4 = 0; var4 < var5; ++var4) {
- MenuItem var3 = this.menu.itemAt(var4);
- Rect var2 = this.rectForItemAt(var4);
- var6 += var2.width;
- if (var1.clipRect().intersects(var2)) {
- var1.pushState();
- var1.setClipRect(var2);
- if (!this.isTransparent()) {
- var1.setColor(this.backgroundColor());
- var1.fillRect(var2.x, var2.y, var2.width, var2.height);
- }
-
- boolean var7;
- if (this.type == 0) {
- var7 = false;
- } else {
- var7 = true;
- }
-
- var3.drawInRect(var1, var2, var7);
- var1.popState();
- Rect.returnRect(var2);
- }
- }
-
- if (var6 < this.interiorRect().width && this.type == 0 && !this.isTransparent()) {
- var1.setColor(this.backgroundColor());
- var1.fillRect(this.interiorRect().x + var6, this.interiorRect().y, this.interiorRect().width - var6, this.interiorRect().height);
- }
-
- }
-
- public void show(RootView var1, MouseEvent var2) {
- if (this.menu.itemCount() != 0) {
- int var5 = this.minItemWidth() + this.border().widthMargin() + 20;
- int var6 = this.itemHeight() * this.menu.itemCount() + this.border().heightMargin();
- ((View)this).sizeTo(var5, var6);
- Menu var9;
- if (this.menu.superitem() != null) {
- var9 = this.menu.superitem().supermenu();
- } else {
- var9 = this.menu;
- }
-
- MenuView var10;
- if (this.owner != null) {
- var10 = this.owner;
- } else {
- var10 = this;
- }
-
- Rect var3 = Rect.newRect(0, 0, ((View)this).width(), ((View)this).height());
- ((View)var10).convertRectToView((View)null, var3, var3);
- if (var1.windowClipView() != null && this.menuWindow.layer() != 511) {
- ((View)var1).convertRectToView(var1.windowClipView(), var3, var3);
- }
-
- Rect var4 = var10.rectForItemAt(var10.selectedIndex());
- if (var4 == null) {
- var4 = new Rect(0, 0, 0, 0);
- }
-
- int var7;
- int var8;
- if (var9.isTopLevel() && var10.type == 0) {
- var7 = var3.x + var4.x - var10.border().leftMargin();
- var8 = var3.y + ((View)var10).height();
- } else if (this.menu.isTopLevel() && this.type == 1) {
- var7 = var2.x;
- var8 = var2.y;
- } else {
- var7 = var3.x + var4.width + var10.border().widthMargin() - 3;
- var8 = var3.y + var4.maxY() - var4.height - var10.border().topMargin();
- }
-
- int var11 = ((View)this).width();
- this.menuWindow.setBounds(var7, var8, ((View)this).width(), ((View)this).height());
- ((View)this).sizeTo(var11, ((View)this).height());
- Rect.returnRect(var3);
- Rect.returnRect(var4);
- if (this.owner != null) {
- var10 = this.mainOwner();
- } else {
- var10 = this;
- }
-
- Application.application().addActiveMenuView(var10);
- this.menuWindow.setRootView(var1);
- this.menuWindow.show();
- }
- }
-
- public void hide() {
- if (this.menuWindow.isVisible()) {
- this.menuWindow.hide();
- }
-
- if (this.selectedItem != null && this.selectedItem.hasSubmenu()) {
- this.child.hide();
- this.child = null;
- }
-
- this.deselectItem();
- }
-
- public boolean isVisible() {
- return this.menuWindow.isVisible();
- }
-
- public boolean wantsAutoscrollEvents() {
- return true;
- }
-
- void autoscroll(MouseEvent var1) {
- Rect var2 = Rect.newRect();
- ((View)this).computeVisibleRect(var2);
- if (!var2.contains(var1.x, var1.y)) {
- if (var1.y < var2.y) {
- Rect var3 = Rect.newRect(var2.x, var1.y, var2.width, this.itemHeight());
- ((View)this).scrollRectToVisible(var3);
- Rect.returnRect(var3);
- } else if (var1.y > var2.maxY()) {
- Rect var4 = Rect.newRect(var2.x, var1.y - this.itemHeight(), var2.width, this.itemHeight());
- ((View)this).scrollRectToVisible(var4);
- Rect.returnRect(var4);
- }
- }
-
- Rect.returnRect(var2);
- }
-
- public void describeClassInfo(ClassInfo var1) {
- super.describeClassInfo(var1);
- var1.addClass("netscape.application.MenuView", 1);
- var1.addField("menu", (byte)18);
- var1.addField("owner", (byte)18);
- var1.addField("child", (byte)18);
- var1.addField("menuWindow", (byte)18);
- var1.addField("itemHeight", (byte)8);
- var1.addField("type", (byte)8);
- var1.addField("transparent", (byte)0);
- }
-
- public void encode(Encoder var1) throws CodingException {
- super.encode(var1);
- var1.encodeObject("menu", this.menu);
- var1.encodeObject("owner", this.owner);
- var1.encodeObject("child", this.child);
- var1.encodeObject("menuWindow", this.menuWindow);
- var1.encodeInt("itemHeight", this.itemHeight);
- var1.encodeInt("type", this.type);
- var1.encodeBoolean("transparent", this.transparent);
- }
-
- public void decode(Decoder var1) throws CodingException {
- super.decode(var1);
- this.menu = (Menu)var1.decodeObject("menu");
- this.owner = (MenuView)var1.decodeObject("owner");
- this.child = (MenuView)var1.decodeObject("child");
- this.menuWindow = (InternalWindow)var1.decodeObject("menuWindow");
- this.itemHeight = var1.decodeInt("itemHeight");
- this.type = var1.decodeInt("type");
- this.transparent = var1.decodeBoolean("transparent");
- }
-
- public void finishDecoding() throws CodingException {
- super.finishDecoding();
- }
- }
-