Skip to content

Commit

Permalink
Cleanup and fix several issues.
Browse files Browse the repository at this point in the history
1) Abstracted ResNode from a DefaultNode that can be used with other tree
models.
2) Added contitional checking for if resources were changed, whenver you
close a frame it will check for changes and store that in the resource.
The global check for changes method will iterate all open frames and all
resources in the resource map asking if they have changes.
3) Number two led me back to the issue for wrong refernces to Game
Info/Settings after load, I have identified the cause and applied a
temporary patch.
4) Added the foundation for searching in resources and also placed the
event panel in a tab in this area, what's interesting is that I have
noticed that if the toolbar for it is set floatable and you float it out
it will take the tab with it and it can still be redocked. This possibly
menas a raw docking framework could be built from JToolBar.
  • Loading branch information
RobertBColton committed Sep 30, 2014
1 parent 2741645 commit 8eb131f
Show file tree
Hide file tree
Showing 18 changed files with 707 additions and 194 deletions.
55 changes: 26 additions & 29 deletions org/lateralgm/components/GmTreeGraphics.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,18 @@
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;

import org.lateralgm.components.impl.ResNode;
import org.lateralgm.components.impl.DefaultNode;
import org.lateralgm.main.LGM;
import org.lateralgm.main.Prefs;
import org.lateralgm.resources.Background;
import org.lateralgm.resources.GmObject;
import org.lateralgm.resources.Resource;
import org.lateralgm.resources.ResourceReference;
import org.lateralgm.resources.Sprite;

public class GmTreeGraphics extends DefaultTreeCellRenderer
{
private static final long serialVersionUID = 1L;

private static ImageIcon blankIcon;
private ResNode last;
private DefaultNode last;

public GmTreeGraphics()
{
Expand All @@ -46,24 +43,18 @@ public GmTreeGraphics()
setClosedIcon(LGM.getIconForKey("GmTreeGraphics.GROUP")); //$NON-NLS-1$
setLeafIcon(getClosedIcon());
setBorder(BorderFactory.createEmptyBorder(1,0,0,0));

}

public Component getTreeCellRendererComponent(JTree tree, Object val, boolean sel, boolean exp,
boolean leaf, int row, boolean focus)
{
last = (ResNode) val;
last = (DefaultNode) val;
Component com = super.getTreeCellRendererComponent(tree,val,sel,exp,leaf,row,focus);
//TODO: Sometimes when renaming secondary nodes the text box will be bold and sometimes it wont
//should be fixed but no idea what is wrong.
if (Prefs.boldPrimaryNodes && last.status == ResNode.STATUS_PRIMARY)
{
com.setFont(com.getFont().deriveFont(Font.BOLD));
}
else
{
com.setFont(com.getFont().deriveFont(Font.PLAIN));
}
//Most likely a look and feel bug.
Font fnt = last.getFont(com.getFont().deriveFont(Font.PLAIN));
com.setFont(fnt);
return com;
}

Expand Down Expand Up @@ -105,37 +96,43 @@ public static Icon getResourceIcon(ResourceReference<?> r)
}

public Icon getLeafIcon()
{
if (last.status == ResNode.STATUS_SECONDARY) return last.getIcon();
return getClosedIcon();
{
if (last != null) {
Icon icon = last.getLeafIcon();
if (icon != null) return icon;
}
return getClosedIcon();
}

public Icon getClosedIcon()
{
{
Icon ico = getIconisedGroup();
if (ico != null) return ico;
return super.getClosedIcon();
}
}

public Icon getOpenIcon()
{
{
Icon ico = getIconisedGroup();
if (ico != null) return ico;
return super.getOpenIcon();
}
}

private Icon getIconisedGroup()
{
if (Prefs.iconizeGroup && last != null && last.status != ResNode.STATUS_PRIMARY)
if (last.kind == Sprite.class || last.kind == Background.class || last.kind == GmObject.class)
return last.getIcon();
{
if (Prefs.iconizeGroup && last != null)
return last.getIconisedGroup();

return null;
}
}

public Icon getNodeIcon(Object val, boolean exp, boolean leaf)
{
last = (ResNode) val;
if (leaf || last.status == ResNode.STATUS_SECONDARY) return getLeafIcon();
last = (DefaultNode) val;
if (leaf) {
Icon icon = getLeafIcon();
if (icon != null) return icon;
}
if (exp) return getOpenIcon();
return getClosedIcon();
}
Expand Down
153 changes: 153 additions & 0 deletions org/lateralgm/components/impl/DefaultNode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
/**
* @file VisibleNode.java
* @brief Class that implements show/hide capabilities for generic tree nodes.
*
* @section License
*
* Copyright (C) 2014 Robert B. Colton
* This file is a part of the LateralGM IDE.
*
* 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, see <http://www.gnu.org/licenses/>.
**/

package org.lateralgm.components.impl;

import java.awt.Font;
import java.util.Enumeration;

import javax.swing.Icon;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

public class DefaultNode extends DefaultMutableTreeNode
{

/**
* TODO: Fix if needed.
*/
private static final long serialVersionUID = 1L;
protected boolean isVisible = true;
protected Icon icon;

public Icon getIcon() {
return icon;
}

public Icon getIconisedGroup() {
return null;
}

public Icon getLeafIcon() {
return getIcon();
}

public Font getFont(Font com) {
return com;
}

public void setVisible(boolean visible) {
this.isVisible = visible;
}

public boolean isVisible() {
return this.isVisible;
}

public TreeNode getChildAt(int index, boolean filterIsActive) {
if (!filterIsActive) {
return super.getChildAt(index);
}
if (children == null) {
throw new ArrayIndexOutOfBoundsException("node has no children");
}

int realIndex = -1;
int visibleIndex = -1;
//NOTE: If you really wanted to be safe you could check the cast of e.nextElement()
//and count every node that is not DefaultNode based as visible.
//For now we know we are safe though.
Enumeration<?> e = children.elements();
while (e.hasMoreElements()) {
DefaultNode node = (DefaultNode) e.nextElement();
if (node.isVisible()) {
visibleIndex++;
}
realIndex++;
if (visibleIndex == index) {
return (TreeNode) children.elementAt(realIndex);
}
}

throw new ArrayIndexOutOfBoundsException("index unmatched");
//return (TreeNode)children.elementAt(index);
}

public int getChildCount(boolean filterIsActive) {
if (!filterIsActive) {
return super.getChildCount();
}
if (children == null) {
return 0;
}

int count = 0;
Enumeration<?> e = children.elements();
while (e.hasMoreElements()) {
DefaultNode node = (DefaultNode) e.nextElement();
if (node.isVisible()) {
count++;
}
}

return count;
}

public DefaultNode(String name)
{
super(name);
}

public DefaultNode addChild(String name)
{
DefaultNode b = new DefaultNode(name);
add(b);
return b;
}

public boolean getAllowsChildren()
{
if (isRoot()) return false;
return true;
}

public void openFrame()
{
// TODO Auto-generated method stub

}

public class EventNode extends DefaultNode {
int emainid, eid;

public EventNode(String name, int mid, int id)
{
super(name);
emainid = mid;
eid = id;
// TODO Auto-generated constructor stub
}

}

}
Loading

0 comments on commit 8eb131f

Please sign in to comment.