188 lines
6.2 KiB
Java
188 lines
6.2 KiB
Java
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
package netscape.plugin.composer.frameEdit;
|
|
|
|
import netscape.plugin.composer.*;
|
|
import netscape.plugin.composer.io.*;
|
|
import java.io.*;
|
|
import java.util.Observer;
|
|
import java.util.Observable;
|
|
|
|
import netscape.application.*;
|
|
import netscape.util.*;
|
|
|
|
/** A view of a Frameset.
|
|
*/
|
|
|
|
class FramesetView extends FrameBaseView {
|
|
public FramesetView(FrameSelection hook){
|
|
super(hook);
|
|
if ( ! (hook.element() instanceof Frameset)) {
|
|
System.err.println("Bad frame selection.");
|
|
}
|
|
setLayoutManager(new FramesetLayout());
|
|
sync2();
|
|
}
|
|
public boolean isTransparent() { return false; }
|
|
|
|
public void drawView(Graphics g){
|
|
if ( element() == null || (element().parent() != null
|
|
&& element().parent().indexOf(element()) < 0 )){
|
|
return;
|
|
}
|
|
super.drawView(g);
|
|
border.drawInRect(g, localBounds());
|
|
}
|
|
private void sync2(){
|
|
// Remove existing subviews
|
|
while(subviews().size() > 0){
|
|
View subview = (View) subviews().elementAt(0);
|
|
subview.removeFromSuperview();
|
|
}
|
|
// Insert new subviews
|
|
Frameset frameset = (Frameset) element();
|
|
int length = frameset.length();
|
|
for(int i = 0; i < length; i++ ){
|
|
View v = null;
|
|
FrameElement e = frameset.elementAt(i);
|
|
if ( e.parent() != frameset){
|
|
System.err.println("Fpoo!");
|
|
}
|
|
FrameSelection hook2 = new FrameSelection(hook.model(), e);
|
|
if ( e instanceof Frame ) {
|
|
v = new FrameView(hook2);
|
|
}
|
|
else if ( e instanceof Frameset ) {
|
|
v = new FramesetView(hook2);
|
|
}
|
|
if ( v != null ) {
|
|
addSubview(v);
|
|
}
|
|
}
|
|
}
|
|
public FrameBaseView getSelectedView() {
|
|
if ( hook.model().selection().element() == hook.element() ){
|
|
return this;
|
|
}
|
|
else {
|
|
Vector children = subviews();
|
|
int length = children.size();
|
|
for(int i = 0; i < length; i++ ){
|
|
FrameBaseView c = (FrameBaseView) children.elementAt(i);
|
|
FrameBaseView c2 = c.getSelectedView();
|
|
if ( c2 != null ) {
|
|
return c2;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
protected int cursorForRegion(int region){
|
|
if ( region == REGION_BAR ) {
|
|
return frameset().horizontal() ? W_RESIZE_CURSOR : N_RESIZE_CURSOR;
|
|
}
|
|
else {
|
|
return ARROW_CURSOR;
|
|
}
|
|
}
|
|
|
|
protected int whatClicked(int x, int y){
|
|
if ( inBar(x, y) >= 0 ){
|
|
return REGION_BAR;
|
|
}
|
|
return REGION_CENTER;
|
|
}
|
|
|
|
public void mouseDragged(MouseEvent event){
|
|
if ( dragBar >= 0 ) {
|
|
Frameset frameset = frameset();
|
|
boolean horizontal = frameset.horizontal();
|
|
int pos = horizontal ? event.x : event.y;
|
|
int total = horizontal ? width() : height();
|
|
Vector subviews = subviews();
|
|
FrameBaseView view0 = (FrameBaseView) subviews.elementAt(dragBar);
|
|
FrameBaseView view1 = (FrameBaseView) subviews.elementAt(dragBar+1);
|
|
int width0 = horizontal ? view0.width() : view0.height();
|
|
int width1 = horizontal ? view1.width() : view1.height();
|
|
int subTotalWidth = width0 + width1 + 5;
|
|
int dragBase = horizontal ? view0.x() : view0.y();
|
|
double ratio = Math.min(1.0, Math.max(0.0, ((double)(pos - dragBase)) / subTotalWidth));
|
|
int totalSize = horizontal ? width() : height();
|
|
SizeString size = frameset.sizeString();
|
|
size.moveSizeAt(totalSize, ratio, dragBar);
|
|
frameset.setSizeString(size);
|
|
hook.model().sizeChanged(frameset);
|
|
}
|
|
}
|
|
|
|
public void mouseUp(MouseEvent event){
|
|
hook.end();
|
|
dragBar = -1;
|
|
}
|
|
protected void moveBar(MouseEvent event){
|
|
dragBar = inBar(event.x, event.y);
|
|
}
|
|
protected void mouseDownInRegion(MouseEvent event, int region){
|
|
if ( region == REGION_BAR ) {
|
|
hook.begin();
|
|
moveBar(event);
|
|
} else {
|
|
super.mouseDownInRegion(event, region);
|
|
}
|
|
}
|
|
|
|
/** Returns the bar that has been clicked on... or -1.
|
|
* bar is 0..length - 1;
|
|
*/
|
|
protected int inBar(int x, int y){
|
|
Frameset frameset = frameset();
|
|
boolean horizontal = frameset.horizontal();
|
|
int u = horizontal ? x : y;
|
|
int v = horizontal ? y : x;
|
|
int vMax = horizontal ? height() : width();
|
|
if ( v < 5 || v >= vMax - 5 ) {
|
|
return -1;
|
|
}
|
|
Vector subviews = subviews();
|
|
int length = subviews.size();
|
|
for(int i = 0; i < length-1; i++ ) {
|
|
View v0 = (View) subviews.elementAt(i);
|
|
View v1 = (View) subviews.elementAt(i+1);
|
|
Rect bounds0 = v0.bounds();
|
|
Rect bounds1 = v1.bounds();
|
|
int end0 = horizontal ? bounds0.maxX() : bounds0.maxY();
|
|
int start1 = horizontal ? bounds1.x : bounds1.y;
|
|
if ( end0 <= u && u < start1 ) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
public Frameset frameset(){
|
|
return (Frameset) element();
|
|
}
|
|
private static Border border = BezelBorder.raisedBezel();
|
|
private int dragBar;
|
|
}
|