From 89b25e7cc97f6fe221dfd41c4d463500f8a31bc1 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Tue, 25 Jun 2019 23:58:09 -0400 Subject: [PATCH] Edit panel pin state. --- ObjEditor.java | 378 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 324 insertions(+), 54 deletions(-) diff --git a/ObjEditor.java b/ObjEditor.java index 2cb5163..d10d05b 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -4,6 +4,7 @@ import java.awt.*; import java.awt.event.*; +import java.awt.image.BufferedImage; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; @@ -35,6 +36,67 @@ GroupEditor callee; JFrame frame; + + static ObjEditor theFrame; + + cButton GetButton(String name, boolean border) + { + try + { + ImageIcon icon = GetIcon(name); + return new cButton(icon, border); + } + catch (Exception e) + { + return new cButton(name, border); + } + } + + cToggleButton GetToggleButton(String name, boolean border) + { + try + { + ImageIcon icon = GetIcon(name); + return new cToggleButton(icon, border); + } + catch (Exception e) + { + return new cToggleButton(name, border); + } + } + + cCheckBox GetCheckBox(String name, boolean border) + { + try + { + ImageIcon icon = GetIcon(name); + return new cCheckBox(icon, border); + } + catch (Exception e) + { + return new cCheckBox(name, border); + } + } + + private ImageIcon GetIcon(String name) throws IOException + { + BufferedImage image = javax.imageio.ImageIO.read(getClass().getClassLoader().getResourceAsStream(name)); + + if (image.getWidth() != 24 && image.getHeight() != 24) + { + BufferedImage resized = new BufferedImage(24, 24, image.getType()); + Graphics2D g = resized.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.drawImage(image, 0, 0, 24, 24, 0, 0, image.getWidth(), image.getHeight(), null); + g.dispose(); + + image = resized; + } + + javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image); + return icon; + } // SCRIPT @@ -145,7 +207,7 @@ objEditor.ctrlPanel.remove(namePanel); - if (!GroupEditor.allparams) + if (!allparams) return; // objEditor.ctrlPanel.remove(liveCB); @@ -168,7 +230,8 @@ // objEditor.ctrlPanel.remove(remarkButton); objEditor.ctrlPanel.remove(setupPanel); - objEditor.ctrlPanel.remove(commandsPanel); + objEditor.ctrlPanel.remove(setupPanel2); + objEditor.ctrlPanel.remove(objectCommandsPanel); objEditor.ctrlPanel.remove(pushPanel); //objEditor.ctrlPanel.remove(fillPanel); @@ -243,6 +306,7 @@ //localCopy.parent = null; frame = new JFrame(); + frame.setUndecorated(true); objEditor = this; this.callee = callee; @@ -273,12 +337,17 @@ return frame.action(event, obj); } + // Cannot work without static + static boolean allparams = true; + + static java.util.Vector<Object3D> listUI = new java.util.Vector<Object3D>(); + void SetupMenu() { frame.setMenuBar(menuBar = new MenuBar()); menuBar.add(fileMenu = new Menu("File")); fileMenu.add(newItem = new MenuItem("New")); - fileMenu.add(loadItem = new MenuItem("Load...")); + fileMenu.add(loadItem = new MenuItem("Open...")); //oe.menuBar.add(menu = new Menu("Include")); Menu menu = new Menu("Import"); @@ -319,14 +388,52 @@ closeItem.addActionListener(this); objectPanel = new JTabbedPane(); + + ChangeListener changeListener = new ChangeListener() + { + public void stateChanged(ChangeEvent changeEvent) + { +// if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Material") && !materialFlushed) +// { +// if (latestObject != null) +// { +// refreshContents(true); +// SetMaterial(latestObject); +// } +// +// materialFlushed = true; +// } +// if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Edit")) +// { +// if (listUI.size() == 0) +// EditSelection(false); +// } + + refreshContents(false); // To refresh Info tab + } + }; + objectPanel.addChangeListener(changeListener); + toolbarPanel = new JPanel(); toolbarPanel.setName("Toolbar"); treePanel = new cGridBag(); treePanel.setName("Tree"); + + editPanel = new cGridBag().setVertical(true); + editPanel.setName("Edit"); + ctrlPanel = new cGridBag().setVertical(false); // new GridBagLayout()); - ctrlPanel.setName("Edit"); + + editCommandsPanel = new cGridBag(); + editPanel.add(editCommandsPanel); + editPanel.add(ctrlPanel); + + toolboxPanel = new cGridBag().setVertical(false); + toolboxPanel.setName("Toolbox"); + materialPanel = new cGridBag().setVertical(true); materialPanel.setName("Material"); + /*JTextPane*/ infoarea = createTextPane(); doc = infoarea.getStyledDocument(); @@ -419,10 +526,10 @@ e.printStackTrace(); } - String selection = infoarea.getText(); - java.awt.datatransfer.StringSelection data = new java.awt.datatransfer.StringSelection(selection); - java.awt.datatransfer.Clipboard clipboard = - Toolkit.getDefaultToolkit().getSystemClipboard(); +// String selection = infoarea.getText(); +// java.awt.datatransfer.StringSelection data = new java.awt.datatransfer.StringSelection(selection); +// java.awt.datatransfer.Clipboard clipboard = +// Toolkit.getDefaultToolkit().getSystemClipboard(); //clipboard.setContents(data, data); } @@ -582,20 +689,92 @@ } } +static GraphicsDevice device = GraphicsEnvironment + .getLocalGraphicsEnvironment().getScreenDevices()[0]; + + Rectangle keeprect; + cRadio radio; + +cButton keepButton; + cButton twoButton; // Full 3D + cButton sixButton; + cButton threeButton; + cButton sevenButton; + cButton fourButton; // full panel + cButton oneButton; // full XYZ + //cButton currentLayout; + + boolean maximized; + + cButton fullscreenLayout; + + void Minimize() + { + frame.setState(Frame.ICONIFIED); + } + + void Maximize() + { + if (maximized) + { + frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height); + } + else + { + keeprect = frame.getBounds(); + Rectangle rect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); + Dimension rect2 = frame.getToolkit().getScreenSize(); + frame.setBounds(0, rect2.height - rect.height, rect.width, rect.height); +// frame.setState(Frame.MAXIMIZED_BOTH); + } + + maximized ^= true; + } + void ToggleFullScreen() { - if (CameraPane.FULLSCREEN) + cameraView.ToggleFullScreen(); + + if (!CameraPane.FULLSCREEN) { - frame.getContentPane().remove(/*"Center",*/bigThree); - framePanel.add(bigThree); - frame.getContentPane().add(/*"Center",*/framePanel); + device.setFullScreenWindow(null); + //frame.setVisible(false); +// frame.removeNotify(); +// frame.setUndecorated(false); +// frame.addNotify(); + //frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height); + +// X frame.getContentPane().remove(/*"Center",*/bigThree); +// X framePanel.add(bigThree); +// X frame.getContentPane().add(/*"Center",*/framePanel); + framePanel.setDividerLocation(1); + + //frame.setVisible(true); + radio.layout = keepButton; + //theFrame = null; + keepButton = null; + radio.layout.doClick(); + } else { - frame.getContentPane().remove(/*"Center",*/framePanel); - framePanel.remove(bigThree); - frame.getContentPane().add(/*"Center",*/bigThree); + keepButton = radio.layout; + //keeprect = frame.getBounds(); +// frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width, +// frame.getToolkit().getScreenSize().height); + //frame.setVisible(false); + device.setFullScreenWindow(frame); +// frame.removeNotify(); +// frame.setUndecorated(true); +// frame.addNotify(); +// X frame.getContentPane().remove(/*"Center",*/framePanel); +// X framePanel.remove(bigThree); +// X frame.getContentPane().add(/*"Center",*/bigThree); + framePanel.setDividerLocation(0); + + radio.layout = fullscreenLayout; + radio.layout.doClick(); + //frame.setVisible(true); } - cameraView.ToggleFullScreen(); } private JTextPane createTextPane() @@ -736,7 +915,12 @@ JCheckBox speedupCB; JCheckBox rewindCB; JCheckBox flipVCB; + + cCheckBox toggleTextureCB; + cCheckBox toggleSwitchCB; + JComboBox texresMenu; + JButton resetButton; JButton stepButton; JButton stepAllButton; @@ -745,9 +929,13 @@ JButton fasterButton; JButton remarkButton; + cGridBag editPanel; + cGridBag editCommandsPanel; + cGridBag namePanel; cGridBag setupPanel; - cGridBag commandsPanel; + cGridBag setupPanel2; + cGridBag objectCommandsPanel; cGridBag pushPanel; cGridBag fillPanel; @@ -924,7 +1112,7 @@ oe.ctrlPanel.Return(); - if (!GroupEditor.allparams) + if (!allparams) return; setupPanel = new cGridBag().setVertical(false); @@ -939,40 +1127,44 @@ markCB = AddCheckBox(setupPanel, "Mark", copy.marked); markCB.setToolTipText("Set the animation target transform"); - rewindCB = AddCheckBox(setupPanel, "Rewind", copy.rewind); + setupPanel2 = new cGridBag().setVertical(false); + + rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind); rewindCB.setToolTipText("Rewind animation"); - randomCB = AddCheckBox(setupPanel, "Random", copy.random); - randomCB.setToolTipText("Option for switch node"); + randomCB = AddCheckBox(setupPanel2, "Rand", copy.random); + randomCB.setToolTipText("Randomly Rewind or Go back and forth"); if (Globals.ADVANCED) { - link2masterCB = AddCheckBox(setupPanel, "Support", copy.link2master); + link2masterCB = AddCheckBox(setupPanel2, "Supp", copy.link2master); link2masterCB.setToolTipText("Attach to support"); - speedupCB = AddCheckBox(setupPanel, "Speed", copy.speedup); + speedupCB = AddCheckBox(setupPanel2, "Speed", copy.speedup); speedupCB.setToolTipText("Option motion capture"); } oe.ctrlPanel.add(setupPanel); oe.ctrlPanel.Return(); + oe.ctrlPanel.add(setupPanel2); + oe.ctrlPanel.Return(); - commandsPanel = new cGridBag().setVertical(false); + objectCommandsPanel = new cGridBag().setVertical(false); - resetButton = AddButton(commandsPanel, "Reset"); + resetButton = AddButton(objectCommandsPanel, "Reset"); resetButton.setToolTipText("Jump to frame zero"); - stepButton = AddButton(commandsPanel, "Step"); + stepButton = AddButton(objectCommandsPanel, "Step"); stepButton.setToolTipText("Step one frame"); // resetAllButton = AddButton(oe, "Reset All"); // stepAllButton = AddButton(oe, "Step All"); // Return(); - slowerButton = AddButton(commandsPanel, "Slow"); + slowerButton = AddButton(objectCommandsPanel, "Slow"); slowerButton.setToolTipText("Decrease animation speed"); - fasterButton = AddButton(commandsPanel, "Fast"); + fasterButton = AddButton(objectCommandsPanel, "Fast"); fasterButton.setToolTipText("Increase animation speed"); - remarkButton = AddButton(commandsPanel, "Remark"); + remarkButton = AddButton(objectCommandsPanel, "Remark"); remarkButton.setToolTipText("Set the current transform as the target"); - oe.ctrlPanel.add(commandsPanel); + oe.ctrlPanel.add(objectCommandsPanel); oe.ctrlPanel.Return(); pushPanel = AddSlider(oe.ctrlPanel, "Push", -1, 1, copy.NORMALPUSH, 1.1); // To have the buttons @@ -1178,8 +1370,11 @@ //worldPanel.setName("World"); centralPanel = new cGridBag(); centralPanel.preferredWidth = 20; - timelinePanel = new JPanel(new BorderLayout()); - timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel); + + if (Globals.ADVANCED) + { + timelinePanel = new JPanel(new BorderLayout()); + timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel); cameraPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cameraView, timelinePanel); cameraPanel.setContinuousLayout(true); @@ -1188,7 +1383,10 @@ // cameraPanel.setDividerSize(9); cameraPanel.setResizeWeight(1.0); + } + centralPanel.add(cameraView); + centralPanel.setFocusable(true); //frame.setJMenuBar(timelineMenubar); //centralPanel.add(timelinePanel); @@ -1255,8 +1453,9 @@ // north.setName("Edit"); // north.add(ctrlPanel, BorderLayout.NORTH); // objectPanel.add(north); - objectPanel.add(ctrlPanel); + objectPanel.add(editPanel); objectPanel.add(infoPanel); + objectPanel.add(toolboxPanel); /* aConstraints.gridx = 0; @@ -1265,7 +1464,7 @@ aConstraints.gridy += 1; aConstraints.gridwidth = 1; mainPanel.add(objectPanel, aConstraints); - */ + */ scrollpane = new JScrollPane(mainPanel, ScrollPaneConstants.// VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED, @@ -1282,9 +1481,7 @@ JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.add(scrollpane); - tabbedPane.add(FSPane = new cFileSystemPane(this)); - - optionsPanel = new cGridBag().setVertical(true); + optionsPanel = new cGridBag().setVertical(false); optionsPanel.setName("Options"); @@ -1292,6 +1489,8 @@ tabbedPane.add(optionsPanel); + tabbedPane.add(FSPane = new cFileSystemPane(this)); + scenePanel.add(tabbedPane); /* @@ -1384,8 +1583,12 @@ // aConstraints = gbc; // (GridBagConstraints) GrafreeD.clone(gbc); frame.setSize(1280, 860); + + frame.validate(); frame.setVisible(true); + cameraView.requestFocusInWindow(); + gridPanel.setDividerLocation(1.0); frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); @@ -2072,19 +2275,19 @@ void LoadObjFile(String fullname) { - /* + System.out.println("Loading " + fullname); + /**/ //lastFilename = fullname; if(loadObjThread == null) { - loadObjThread = new LoadOBJThread(); - loadObjThread.start(); + loadObjThread = new LoadOBJThread(); + loadObjThread.start(); } loadObjThread.add(fullname); - */ + /**/ - System.out.println("Loading " + fullname); - makeSomething(new FileObject(fullname, true), true); + //makeSomething(new FileObject(fullname, true), true); } void LoadGFDFile(String fullname) @@ -2701,6 +2904,8 @@ void SetMaterial(Object3D object) { + latestObject = object; + cMaterial mat = object.material; if (mat == null) @@ -2886,7 +3091,7 @@ cameraView.ToggleDL(); cameraView.repaint(); return; - } else if (event.getSource() == toggleTextureItem) + } else if (event.getSource() == toggleTextureItem || event.getSource() == toggleTextureCB) { cameraView.ToggleTexture(); // june 2013 copy.HardTouch(); @@ -2925,9 +3130,9 @@ frame.validate(); return; - } else if (event.getSource() == toggleSwitchItem) + } else if (event.getSource() == toggleSwitchItem || event.getSource() == toggleSwitchCB) { - cameraView.ToggleRandom(); + cameraView.ToggleSwitch(); cameraView.repaint(); return; } else if (event.getSource() == toggleHandleItem) @@ -3214,7 +3419,7 @@ objEditor.refreshContents(); } - static public byte[] Compress(Object o) + static public byte[] Compress(Object3D o) { try { @@ -3222,8 +3427,13 @@ java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(baos); ObjectOutputStream out = new ObjectOutputStream(zstream); + Object3D parent = o.parent; + o.parent = null; + out.writeObject(o); + o.parent = parent; + out.flush(); zstream.close(); @@ -3239,6 +3449,7 @@ static public Object Uncompress(byte[] bytes) { + System.out.println("#bytes = " + bytes.length); try { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); @@ -3303,14 +3514,21 @@ public void Save() { + System.err.println("Save"); + cRadio tab = GetCurrentTab(); + + boolean temp = CameraPane.SWITCH; + CameraPane.SWITCH = false; copy.ExtractBigData(hashtable); //EditorFrame.m_MainFrame.requestFocusInWindow(); - tab.graphs[tab.undoindex++] = (Object3D)clone(copy); + tab.graphs[tab.undoindex++] = Compress(copy); copy.RestoreBigData(hashtable); + + CameraPane.SWITCH = temp; //assert(hashtable.isEmpty()); @@ -3319,6 +3537,8 @@ tab.graphs[i] = null; } + SetUndoStates(); + // test save if (false) { @@ -3341,6 +3561,11 @@ void CopyChanged(Object3D obj) { + SetUndoStates(); + + boolean temp = CameraPane.SWITCH; + CameraPane.SWITCH = false; + copy.ExtractBigData(hashtable); copy.clear(); @@ -3351,6 +3576,8 @@ } copy.RestoreBigData(hashtable); + + CameraPane.SWITCH = temp; //assert(hashtable.isEmpty()); @@ -3375,8 +3602,21 @@ refreshContents(); } + cButton undoButton; + cButton redoButton; + + void SetUndoStates() + { + cRadio tab = GetCurrentTab(); + + undoButton.setEnabled(tab.undoindex > 0); + redoButton.setEnabled(tab.graphs[tab.undoindex + 1] != null); + } + public void Undo() { + System.err.println("Undo"); + cRadio tab = GetCurrentTab(); if (tab.undoindex == 0) @@ -3393,7 +3633,7 @@ tab.undoindex -= 1; - CopyChanged(tab.graphs[tab.undoindex]); + CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex])); } public void Redo() @@ -3408,7 +3648,7 @@ tab.undoindex += 1; - CopyChanged(tab.graphs[tab.undoindex]); + CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex])); } void ImportGFD() @@ -3560,7 +3800,7 @@ assert false; } - void EditSelection() + void EditSelection(boolean newWindow) { } @@ -4055,7 +4295,8 @@ void makeSomething(Object3D thing, boolean resetmodel) // deselect) { - Save(); + if (Globals.SAVEONMAKE) // && resetmodel) + Save(); //Tween.set(thing, 0).target(1).start(tweenManager); //Tween.to(thing, 0, 0.5f).target(0).start(tweenManager); // if (thing instanceof GenericJointDemo) @@ -4142,6 +4383,12 @@ { ResetModel(); Select(thing.GetTreePath(), true, false); // unselect... false); + + if (thing.Size() == 0) + { + //EditSelection(false); + } + refreshContents(); } @@ -4279,6 +4526,7 @@ try { + // Try compressed version first. java.io.FileInputStream istream = new java.io.FileInputStream(fullname); java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream); java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream); @@ -4348,6 +4596,12 @@ void LoadIt(Object obj) { + if (obj == null) + { + // Invalid file + return; + } + System.out.println("Loaded " + obj); //new Exception().printStackTrace(); Object3D readobj = (Object3D) obj; @@ -4357,6 +4611,7 @@ if (readobj != null) { + if (Globals.SAVEONMAKE) Save(); try { @@ -4535,6 +4790,8 @@ String filename = browser.getFile(); if (filename != null && filename.length() > 0) { + if (!filename.endsWith(".gfd")) + filename += ".gfd"; lastname = browser.getDirectory() + filename; save(); } @@ -4728,18 +4985,31 @@ CheckboxMenuItem togglePaintItem; JSplitPane mainPanel; JScrollPane scrollpane; + JPanel toolbarPanel; + cGridBag treePanel; + JPanel radioPanel; ButtonGroup buttonGroup; - cGridBag ctrlPanel; + + cGridBag toolboxPanel; cGridBag materialPanel; + cGridBag ctrlPanel; + JScrollPane infoPanel; + cGridBag optionsPanel; + JTabbedPane objectPanel; + boolean materialFlushed; + Object3D latestObject; + cGridBag XYZPanel; + JSplitPane gridPanel; JSplitPane bigPanel; + cGridBag bigThree; cGridBag scenePanel; cGridBag centralPanel; @@ -4854,7 +5124,7 @@ cNumberSlider fogField; JLabel opacityPowerLabel; cNumberSlider opacityPowerField; - JTree jTree; + cTree jTree; //ObjectUI parent; cNumberSlider normalpushField; -- Gitblit v1.6.2