001: /*
002: * ChainBuilder ESB
003: * Visual Enterprise Integration
004: *
005: * Copyright (C) 2006 Bostech Corporation
006: *
007: * This program is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License as published by the
009: * Free Software Foundation; either version 2 of the License, or (at your option)
010: * any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
014: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
015: * for more details.
016: *
017: * You should have received a copy of the GNU General Public License along with
018: * this program; if not, write to the Free Software Foundation, Inc.,
019: * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: *ObedientStackPanel.java
022: *LPS
023: *Dec 8, 2007
024: */
025: package com.bostechcorp.cbesb.console.client.useredit;
026:
027: import com.bostechcorp.cbesb.console.client.useredit.UserEditBase.UserTypeSelectionListener;
028: import com.google.gwt.user.client.DOM;
029: import com.google.gwt.user.client.Element;
030: import com.google.gwt.user.client.Event;
031: import com.google.gwt.user.client.ui.StackPanel;
032:
033: /**
034: * Named Obedient because it did not implemented any listener system so far.
035: * Now we have simply improvised single listener system, to allow
036: * custom operation when the stack panel is seleced.
037: * @author LPS
038: */
039: public class ObedientStackPanel extends StackPanel {
040: private SelectionListener listener = null;
041:
042: public ObedientStackPanel() {
043: super ();
044: }
045:
046: public void onBrowserEvent(Event event) {
047:
048: if (DOM.eventGetType(event) == Event.ONCLICK) {
049: Element target = DOM.eventGetTarget(event);
050: int index = findDividerIndex(target);
051: if (index != -1) {
052: showStack(index);
053: if (listener != null)
054: listener.onSelect(index);
055: }
056: }
057: }
058:
059: private int findDividerIndex(Element elem) {
060: while ((elem != null) && !DOM.compare(elem, getElement())) {
061: String expando = DOM.getElementProperty(elem, "__index");
062: if (expando != null) {
063: // Make sure it belongs to me!
064: int ownerHash = DOM.getElementPropertyInt(elem,
065: "__owner");
066: if (ownerHash == hashCode()) {
067: // Yes, it's mine.
068: return Integer.parseInt(expando);
069: } else {
070: // It must belong to some nested StackPanel.
071: return -1;
072: }
073: }
074: elem = DOM.getParent(elem);
075: }
076: return -1;
077: }
078:
079: /**
080: * This intefcae is ment to be implemented for stacktrace
081: * item selection events.
082: * @author LPS
083: */
084: public interface SelectionListener {
085: /**
086: * fired every time a stack trace item is selected
087: * @param index
088: */
089: public void onSelect(int index);
090: }
091:
092: /**
093: * add listener for tab selection action
094: * @param listener
095: */
096: public void setSelectionListener(UserTypeSelectionListener listener) {
097: this .listener = listener;
098: }
099:
100: /**
101: * remove the selection listener
102: */
103: public void removeSelectionListener() {
104: this.listener = null;
105: }
106: }
|