package org.basex.gui.view;
import static org.basex.gui.layout.BaseXKeys.*;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import org.basex.gui.GUICommands;
import org.basex.gui.GUIConstants;
import org.basex.gui.GUIConstants.Fill;
import org.basex.gui.GUIProp;
import org.basex.gui.layout.BaseXPanel;
/**
* View observer pattern. All inheriting classes are attached to the
* views array
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public abstract class View extends BaseXPanel {
/**
* Registers the specified view.
* @param name name of view
* @param man view manager
*/
protected View(final String name, final ViewNotifier man) {
super(man.gui);
mode(man.gui.gprop.is(GUIProp.GRADIENT) ? Fill.GRADIENT : Fill.PLAIN);
setFocusable(true);
setBackground(Color.white);
setName(name);
addMouseListener(this);
addMouseMotionListener(this);
addMouseWheelListener(this);
addKeyListener(this);
addComponentListener(this);
man.add(this);
}
/**
* Called when the data reference has changed.
*/
public abstract void refreshInit();
/**
* Called when a new focus has been chosen.
*/
public abstract void refreshFocus();
/**
* Called when a context set has been
* marked.
*/
public abstract void refreshMark();
/**
* Called when a new context set has been chosen.
* @param more show more details
* @param quick perform a quick context switch
*/
public abstract void refreshContext(boolean more, boolean quick);
/**
* Called when GUI design has changed.
*/
public abstract void refreshLayout();
/**
* Called when updates have been done in the data structure.
*/
public abstract void refreshUpdate();
/**
* Tests if this view is currently visible.
* @return result of check
*/
public abstract boolean visible();
/**
* Sets the visibility of the view.
* @param v visibility flag
*/
public abstract void visible(final boolean v);
/**
* Tests if this view needs a database instance.
* @return result of check
*/
protected abstract boolean db();
@Override
public void mouseEntered(final MouseEvent e) {
if(!gui.updating && gui.gprop.is(GUIProp.MOUSEFOCUS))
requestFocusInWindow();
}
@Override
public void mouseExited(final MouseEvent e) {
if(!gui.updating) gui.cursor(GUIConstants.CURSORARROW);
}
@Override
public void mousePressed(final MouseEvent e) {
if(!gui.updating) requestFocusInWindow();
}
@Override
public void keyPressed(final KeyEvent e) {
if(gui.updating) return;
if(ESCAPE.is(e)) {
gui.fullscreen(false);
} else if(SPACE.is(e)) {
gui.notify.mark(sc(e) ? 2 : e.isShiftDown() ? 1 : 0, null);
} else if(ENTER.is(e)) {
GUICommands.C_FILTER.execute(gui);
} else if(GOBACK2.is(e)) {
GUICommands.C_GOBACK.execute(gui);
}
}
@Override
public final String toString() {
return getName();
}
}