/******************************************************************************* * This is part of SketchChair, an open-source tool for designing your own furniture. * www.sketchchair.cc * * Copyright (C) 2012, Diatom Studio ltd. Contact: hello@diatom.cc * * 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 cc.sketchchair.widgets; import cc.sketchchair.core.GLOBAL; import cc.sketchchair.core.LOGGER; import cc.sketchchair.core.SETTINGS; import cc.sketchchair.core.UITools; import ModalGUI.GUIButton; import ModalGUI.GUILabel; import ModalGUI.GUINumberfield; import ModalGUI.GUIPanel; import ModalGUI.GUISlider; import ModalGUI.GUITextfield; import ModalGUI.GUIToggle; import ModalGUI.ModalGUI; import processing.core.PApplet; /** * GUI widget used for selecting material properties. * @author gregsaul * */ public class WidgetMaterials extends GUIPanel{ public GUIPanel panel; public GUINumberfield slotSizeTextfield = null; private GUISlider scaleSlider; private GUINumberfield cuttingBitSize; private GUIToggle toggleDogbones; public WidgetMaterials(float x, float y, float w, float h, ModalGUI gui) { super(x, y, w, h, gui); float toggleSize = 25; //GUILabel label = new GUILabel(15, 15, "cutting sheet size", gui); //add(label); label = new GUILabel(20, 30, "scale", gui); add(label); scaleSlider = new GUISlider(70, 30, 85, 1, 25, this.controller); scaleSlider.setParentPanel(this); scaleSlider.setVal(10); scaleSlider.setShowValLabel(true); scaleSlider.setFormatValLabel("1:%1$.0f"); scaleSlider.setLabelValMultiplier(1.0f); scaleSlider.setEndImgs(GLOBAL.applet.loadImage("gui/SLIDER_DESIGN_SCALE_MIN.png"),GLOBAL.applet.loadImage("gui/SLIDER_DESIGN_SCALE_MAX.png")); add(scaleSlider); slotSizeTextfield = new GUINumberfield(70, 70, 60, 15, gui); slotSizeTextfield.setText( Float.toString(SETTINGS.materialThickness)); slotSizeTextfield.setLabel("mm (d)"); add(slotSizeTextfield); slotSizeTextfield.setParentPanel( this); label = new GUILabel(250, 30, "width", gui); add(label); GUINumberfield numberField = new GUINumberfield(300, 30, 60, 15, gui); numberField.setLabel("mm (w)"); numberField.setText(String.valueOf(GLOBAL.shapePack.materialWidth)); numberField.addActionListener(GLOBAL.shapePack, "materialWidth"); add(numberField); label = new GUILabel(250, 50, "height", gui); add(label); numberField = new GUINumberfield(300, 50, 60, 15, gui); numberField.setLabel("mm (h)"); numberField.setText(String.valueOf(GLOBAL.shapePack.materialHeight)); numberField.addActionListener(GLOBAL.shapePack, "materialHeight"); add(numberField); /* scaleTextfield = new GUITextfield(160, 30, 30, 15, gui); scaleTextfield .setText((int) (1 / SETTINGS.scale) + ""); scaleTextfield.addActionListener(null, "mirrorPlanesToggle", UITools.LEG_TOOL); add(scaleTextfield); scaleTextfield.setParentPanel(this); scaleTextfield.setLabel("chair scale"); GUILabel scalelabel = new GUILabel(145, 30, "1:", gui); add(scalelabel); */ /* numberField = new GUINumberfield(150, 15, 60, 15, gui); numberField.setLabel("extendSlots"); numberField.setText("0"); numberField.addActionListener(GLOBAL.SketchGlobals, "extendSlots"); materialsPanel.add(numberField); */ //label = new GUILabel(300, 15, "pattern features", gui); //add(label); GUIToggle toggle; toggleDogbones = new GUIToggle(500, 15, toggleSize, toggleSize, "gui/GUI_MATERIAL_DOGBONE_SLOT.png",gui); toggleDogbones.addActionListener(GLOBAL.shapePack, "addDogbones"); toggleDogbones.setLabel("add dogbones"); //toggle.label.align = GUILabel.CENTRE; toggle.label.layout = GUILabel; add(toggleDogbones); toggle = new GUIToggle(500, 40, toggleSize, toggleSize, "gui/GUI_MATERIAL_SEPERATE_SLOT.png",gui); toggle.addActionListener(GLOBAL.SketchGlobals, "seperate_slots"); toggle.setLabel("seperate slots"); //toggle.label.align = GUILabel.CENTRE; toggle.label.layout = GUILabel.UNDER_COMPONENT; add(toggle); toggle = new GUIToggle(500, 65, toggleSize, toggleSize, "gui/GUI_MATERIAL_BEVEL_SLOT.png",gui); toggle.addActionListener(GLOBAL.shapePack, "add_guide_divets"); toggle.setLabel("is paper cut"); //toggle.label.align = GUILabel.CENTRE; toggle.label.layout = GUILabel; add(toggle); cuttingBitSize = new GUINumberfield(650, 15, 30, 15, gui); cuttingBitSize.setLabel("bit size(mm)"); cuttingBitSize.setText("5"); cuttingBitSize.addActionListener(GLOBAL.shapePack, "inner_corner_radius"); add(cuttingBitSize); //label = new GUILabel(450, 15, "packing options", gui); //add(label); toggle = new GUIToggle(650, 35, toggleSize, toggleSize, "gui/GUI_PACK_AUTO.png",gui); toggle.addActionListener(GLOBAL.shapePack, "autoPackPieces"); toggle.setLabel("auto pack"); //toggle.label.align = GUILabel.CENTRE; toggle.label.layout = GUILabel; add(toggle); toggle = new GUIToggle(650, 65, toggleSize, toggleSize, "gui/GUI_PACK_LABELS.png",gui); toggle.addActionListener(GLOBAL.shapePack, "addLabels"); toggle.toggleDown(); toggle.setLabel("add labels"); //toggle.label.align = GUILabel.CENTRE; toggle.label.layout = GUILabel; add(toggle); GUIButton button = new GUIButton(800, 30, 60, 15,"Apply", gui); button.addActionListener(GLOBAL.uiTools, "applyMaterialSettings"); add(button); } private void setPlaneWidth(float planeThickness) { // TODO Auto-generated method stub } public void setupGUI(PApplet applet, ModalGUI gui) { String LANGUAGE = "ENG"; float panelX = 10; this.panel = new GUIPanel(GLOBAL.windowWidth - 240, 7, 220f, 70f, gui); gui.add(this.panel); this.panel.setLabel("materials"); slotSizeTextfield = new GUINumberfield(panelX, 25, 60, 15, gui); slotSizeTextfield.setText( Float.toString(SETTINGS.DEFAULT_MATERIAL_WIDTH)); slotSizeTextfield.setLabel("mm: material width"); panel.add(slotSizeTextfield); slotSizeTextfield.setParentPanel(this.panel); /* this.scaleTextfield = new GUITextfield(panelX, 45, 60, 15, gui); this.scaleTextfield.setText("10"); this.scaleTextfield.setLabel("chair scale"); this.scaleTextfield.addActionListener(this, "mirrorPlanesToggle", UITools.LEG_TOOL); // this.scaleTextfield.addToolTip(GLOBAL.applet, // "proButtons/GUI_SLICE_MIRROR_TOOLTIP", LANGUAGE); panel.add(this.scaleTextfield); this.scaleTextfield.setParentPanel(this.panel); */ } public void update() { super.update(); if (slotSizeTextfield== null) return; float planeThickness = slotSizeTextfield.getVal(); SETTINGS.materialThickness = planeThickness; if (GLOBAL.sketchChairs.getCurChair() != null) GLOBAL.sketchChairs.getCurChair().setPlaneWidth( SETTINGS.materialThickness); float scale = 1; scale = (int)this.scaleSlider.getVal(); SETTINGS.scale = 1 / scale; SETTINGS.pixels_per_mm = SETTINGS.pixels_per_mm_base / SETTINGS.scale; GLOBAL.shapePack.scale = SETTINGS.scale / .1f; if(toggleDogbones.isDown) cuttingBitSize.show(); else cuttingBitSize.hide(); } }