/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
// $Id: OLCObject.java,v 1.4 1999/06/05 23:29:12 greear Exp $
// $Revision: 1.4 $  $Author: greear $ $Date: 1999/06/05 23:29:12 $

//
//Hegemon Client Code:  Java Client for ScryMUD Server Code
//Copyright (C) 1998  Ben Greear
//
//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 2
//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, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// To contact the Author, Ben Greear:  greear@cyberhighway.net, (preferred)
//                                     greearb@agcs.com
//

import java.awt.*;
import java.awt.event.*;

class OLCObject extends Frame {
   ClientDisplay parent;
   HegemonManager hm;
   ObjPanel1 descriptions;
   ObjPanel2 obj_flags;
   ObjPanel3 extras_bag;
   ObjPanel4 spec_data;
   CardLayout cl;
   ObjCBListener cb_listener;
   
   public OLCObject(ClientDisplay par, HegemonManager h) {
      
      super("Create a new Object");
      hm = h;
      parent = par;
      
      addWindowListener (new WindowAdapter () {
         public void windowClosing (WindowEvent e) {
            dispose();
         }});


      cb_listener = new ObjCBListener(this);
      
      setLayout (cl = new CardLayout());
      
      descriptions = new ObjPanel1(this);
      add(descriptions, "Descriptions");
      
      obj_flags = new ObjPanel2(this, (ItemListener)(cb_listener));
      add(obj_flags, "Object Flags");
      
      extras_bag = new ObjPanel3(this);
      add(extras_bag, "Bag, Other Data");
      
      spec_data = new ObjPanel4(this);
      add(spec_data, "Special Procedures/Properties");

      // Lets set up the enabled/disabled fields
      obj_flags.handleNoRest(obj_flags.getState(0));
      obj_flags.handleNoWorn(obj_flags.getState(21));
      obj_flags.handleNoWorn(obj_flags.getState(40));
      obj_flags.handleContainer(false);
      extras_bag.handleContainer(false);
      spec_data.handleSpecProcs(false);
      
      pack();
   }//constructor
   
   // These objects will be NumCheckBox objects
   public void handleDescFlagsCB(int cb_num, boolean state) {
      switch (cb_num) {
       case 0: //!rest, grey out rest of restrictions
         obj_flags.handleNoRest(state);
         break;
       case 21: // !worn, grey out worn flags
         obj_flags.handleNoWorn(state);
         break;
       case 40: // !weapon
         obj_flags.handleNoWeapon(state);
         break;
      case 51: //wand
      case 52: //potion
      case 53: //scroll
         spec_data.handleSpells(state);
         break;
       case 54: //container
         obj_flags.handleContainer(state);
         extras_bag.handleContainer(state || obj_flags.getState(59));
         break;
       case 59: //canteen
         obj_flags.handleCanteen(state);
         extras_bag.handleContainer(state || obj_flags.getState(54));
         break;
       case 63: //SPEC PROCS
         spec_data.handleSpecProcs(state);
         break;
       case 73: //vend machine
         break;
      }//switch
   }//handleCB
   
   void do_cancel() {
      dispose();
   }
   
   void do_help() {
      hm.getHelpFrame().show("olc_object.bml");
   }
   
   void do_submit() {
      MessageDialog md =
         new MessageDialog("Object Creation",
                           "The object data is being sent to the mud server"
                           + " now.  Please check main console for"
                           + " confirmation.",
                           "green", "black");
      parent.submitObj(this);
   }

   void goto_desc() {
      cl.show(this, "Descriptions");
   }

   void goto_bag() {
      descriptions.getButtons().touchBag();
      obj_flags.getButtons().touchBag();
      extras_bag.getButtons().touchBag();
      spec_data.getButtons().touchBag();
      cl.show(this, "Bag, Other Data");
   }

   void goto_flags() {
      descriptions.getButtons().touchFlags();
      obj_flags.getButtons().touchFlags();
      extras_bag.getButtons().touchFlags();
      spec_data.getButtons().touchFlags();
      cl.show(this, "Object Flags");
   }
   
   void goto_spec() {
      descriptions.getButtons().touchSpec();
      obj_flags.getButtons().touchSpec();
      extras_bag.getButtons().touchSpec();
      spec_data.getButtons().touchSpec();
      cl.show(this, "Special Procedures/Properties");
   }
   
   /*---------------------------------------------------------------------*/
   /*  Here lie the functions which the OlcStore querries in order to
       satisfy requests for OLC input from the server. */
   
   /* from panel 1 */
   public final String getObjNum() {
      return (descriptions.getObjNum());
   }
   
   public final String getNames() {
      return (descriptions.getNames() + " ~");
   }
   
   public final String getShortDesc() {
      return descriptions.getShortDesc();
   }
   
   public final String getInRoomDesc() {
      return descriptions.getInRoomDesc();
   }
   
   public final String getDesc() {
      return (descriptions.getLongDesc() + "\n~");
   }
   
   /* from panel 2 */
   public final String getObjFlags() {
      return obj_flags.getObjFlags() + " -1";
   }
   
   /* from panel 3 */
   
   public final String getStatEffects() {
      return extras_bag.getStatEffects() + " -1";
   }
   
   public final String getInv() {
      return extras_bag.getInv() + " -1";
   }
   
   public final String getExtras() {
      return extras_bag.getExtras();
   }
   
   public final String getVbPrice() {
      return extras_bag.getVbPrice();
   }
   
   public final String getBagFlags() {
      return extras_bag.getBagFlags() + " -1";
   }
   
   public final String getBagData() {
      return extras_bag.getBagData();
   }
   
   /*  panel 4 */
   
//   public final String getConstructData() {
//      return spec_data.getConstructData();
//   }
   
   public final String getSpecDataFlags() {
      return spec_data.getSpecDataFlags() + " -1";
   }
   
   public final String getSkinNum() {
      return spec_data.getSkinNum();
   }
   
   public final String getCastsSpells() {
      return spec_data.getCastsSpells() + " -1";
   }
   
}//OLCObject


class ObjPanel1 extends Panel {
   OLCObject parent;
   ObjPaneButtons opb;

   LabeledTextField obj_num;
   LabeledTextField names;
   LabeledTextField short_desc;
   LabeledTextField in_room_desc;
   LabeledTextArea long_desc;

   public ObjPanel1(OLCObject par) {
      super();
      parent = par;
      
      GridBagLayout gridbag = new GridBagLayout();
      GridBagConstraints c = new GridBagConstraints();
      setLayout (gridbag);
      

      int REM = GridBagConstraints.REMAINDER;
      c.fill = GridBagConstraints.BOTH;

      c.gridwidth = 1;
      obj_num = new LabeledTextField("Object Number", "1", 20);
      gridbag.setConstraints(obj_num, c);
      add(obj_num);

      c.gridwidth = REM;
      names = new LabeledTextField("Object names:", "generic", 60);
      gridbag.setConstraints(names, c);
      add(names);

      short_desc = new LabeledTextField("Short Description:", 
                                        "a generic object", 80);
      gridbag.setConstraints(short_desc, c);
      add(short_desc);

      in_room_desc = new LabeledTextField("In Room Desc:", 
                                          "A generic object lies here.", 80);
      gridbag.setConstraints(in_room_desc, c);
      add(in_room_desc);
      
      long_desc = new LabeledTextArea("Long Description:", 
                                      "A generic object looks kinda sad.",
                                      6, 80);
      gridbag.setConstraints(long_desc, c);
      add(long_desc);
      
      opb = new ObjPaneButtons(parent);
      gridbag.setConstraints(opb, c);
      add(opb);
      
   }//constructor

   public final String getObjNum() {
      return obj_num.getText();
   }

   public final String getNames() {
      return names.getText();
   }

   public final String getShortDesc() {
      return short_desc.getText();
   }
   
   public final String getInRoomDesc() {
      return in_room_desc.getText();
   }
   
   public final String getLongDesc() {
      return long_desc.getText();
   }

   public ObjPaneButtons getButtons() {
      return opb;
   }
   
}//ObjPanel1


class ObjPanel2 extends Panel {
   OLCObject parent;
   ObjPaneButtons opb;

   LabeledCheckBoxGlob rest_flags;
   LabeledCheckBoxGlob worn_flags;
   LabeledCheckBoxGlob desc_flags;

   public final String getObjFlags() {
      return (rest_flags.getText() + " " + worn_flags.getText() +
              " " + desc_flags.getText());
   }
   
   public ObjPanel2(OLCObject par, ItemListener cb_listener) {
      super();
      parent = par;
      
      int REM = GridBagConstraints.REMAINDER;
      
      GridBagLayout gridbag = new GridBagLayout();
      GridBagConstraints c = new GridBagConstraints();
      setLayout (gridbag);

      c.gridwidth = REM;
      c.fill = GridBagConstraints.BOTH;
      rest_flags = new LabeledCheckBoxGlob("Restriction Flags", 4, 5);
      rest_flags.setListener(cb_listener);

      rest_flags.addBox(new NumCheckbox("!rest", true, 0));
      rest_flags.addBox(new NumCheckbox("!evil", false, 1));
      rest_flags.addBox(new NumCheckbox("!neutral", false, 2));
      rest_flags.addBox(new NumCheckbox("!good", false, 3));
      rest_flags.addBox(new NumCheckbox("!donate", false, 4));
      rest_flags.addBox(new NumCheckbox("!drop", false, 5));
      rest_flags.addBox(new NumCheckbox("!remove", false, 6));
      rest_flags.addBox(new NumCheckbox("!mortal", false, 7));
      rest_flags.addBox(new NumCheckbox("!immort", false, 8));
      rest_flags.addBox(new NumCheckbox("!demi", false, 9));
      rest_flags.addBox(new NumCheckbox("!warrior", false, 11));
      rest_flags.addBox(new NumCheckbox("!sage", false, 12));
      rest_flags.addBox(new NumCheckbox("!wizard", false, 13));
      rest_flags.addBox(new NumCheckbox("!ranger", false, 14));
      rest_flags.addBox(new NumCheckbox("!thief", false, 15));
      rest_flags.addBox(new NumCheckbox("!alchemist", false, 16));
      rest_flags.addBox(new NumCheckbox("!cleric", false, 17));
      rest_flags.addBox(new NumCheckbox("!bard", false, 18));
      rest_flags.addBox(new NumCheckbox("!mob", false, 19));
      rest_flags.addBox(new NumCheckbox("!pc", false, 20));
      
      gridbag.setConstraints(rest_flags, c);
      add(rest_flags);
      
      worn_flags = new LabeledCheckBoxGlob("Where Worn Flags", 4, 5);
      worn_flags.setListener(cb_listener);
      
      worn_flags.addBox(new NumCheckbox("!worn", true, 21));
      worn_flags.addBox(new NumCheckbox("head", false, 22));
      worn_flags.addBox(new NumCheckbox("neck", false, 23));
      worn_flags.addBox(new NumCheckbox("neck", false, 24));
      worn_flags.addBox(new NumCheckbox("arnd bdy", false, 25));
      worn_flags.addBox(new NumCheckbox("arms", false, 26));
      worn_flags.addBox(new NumCheckbox("wrist1", false, 27));
      worn_flags.addBox(new NumCheckbox("wrist2", false, 28));
      worn_flags.addBox(new NumCheckbox("hands", false, 29));
      worn_flags.addBox(new NumCheckbox("wielded", false, 30));
      worn_flags.addBox(new NumCheckbox("held", false, 31));
      worn_flags.addBox(new NumCheckbox("light", false, 32));
      worn_flags.addBox(new NumCheckbox("body", false, 33));
      worn_flags.addBox(new NumCheckbox("belt", false, 34));
      worn_flags.addBox(new NumCheckbox("legs", false, 35));
      worn_flags.addBox(new NumCheckbox("feet", false, 36));
      worn_flags.addBox(new NumCheckbox("finger1", false, 37));
      worn_flags.addBox(new NumCheckbox("finger2", false, 38));
      worn_flags.addBox(new NumCheckbox("shield", false, 39));

      gridbag.setConstraints(worn_flags, c);
      add(worn_flags);


      desc_flags = new LabeledCheckBoxGlob("Description Flags", 8, 5);
      desc_flags.setListener(cb_listener);
      
      desc_flags.addBox(new NumCheckbox("!weapon", true, 40));
      desc_flags.addBox(new NumCheckbox("slash", false, 41));
      desc_flags.addBox(new NumCheckbox("smash", false, 42));
      desc_flags.addBox(new NumCheckbox("pierce", false, 43));
      desc_flags.addBox(new NumCheckbox("whip", false, 44));
      desc_flags.addBox(new NumCheckbox("needs ammo", false, 45));
      desc_flags.addBox(new NumCheckbox("dart thr.", false, 46));
      desc_flags.addBox(new NumCheckbox("bow", false, 47));
      desc_flags.addBox(new NumCheckbox("dart", false, 48));
      desc_flags.addBox(new NumCheckbox("arrow", false, 49));
      desc_flags.addBox(new NumCheckbox("junk", false, 50));
      desc_flags.addBox(new NumCheckbox("wand", false, 51));
      desc_flags.addBox(new NumCheckbox("potion", false, 52));
      desc_flags.addBox(new NumCheckbox("scroll", false, 53));
      desc_flags.addBox(new NumCheckbox("container", false, 54));
      desc_flags.addBox(new NumCheckbox("coins", false, 55));
      desc_flags.addBox(new NumCheckbox("armor", false, 56));
      desc_flags.addBox(new NumCheckbox("weapon", false, 57));
      desc_flags.addBox(new NumCheckbox("light src", false, 58));
      desc_flags.addBox(new NumCheckbox("canteen", false, 59));
      desc_flags.addBox(new NumCheckbox("liquid", false, 60));
      desc_flags.addBox(new NumCheckbox("food", false, 61));
      desc_flags.addBox(new NumCheckbox("boat", false, 62));
      desc_flags.addBox(new NumCheckbox("SPEC PROCs", false, 63));
      desc_flags.addBox(new NumCheckbox("toolbox", false, 64));
      desc_flags.addBox(new NumCheckbox("cauldron", false, 65));
      desc_flags.addBox(new NumCheckbox("pen", false, 66));
      //desc_flags.addBox(new NumCheckbox("constr cmp", false, 67));
      //desc_flags.addBox(new NumCheckbox("conct cmp", false, 68));
      desc_flags.addBox(new NumCheckbox("parchment", false, 69));
      //desc_flags.addBox(new NumCheckbox("vid scrn", false, 71));
      desc_flags.addBox(new NumCheckbox("herb", false, 72));
      desc_flags.addBox(new NumCheckbox("vend mach.", false, 73));
      desc_flags.addBox(new NumCheckbox("bul. board", false, 74));
      desc_flags.addBox(new NumCheckbox("butcherable", false, 75));

      gridbag.setConstraints(desc_flags, c);
      add(desc_flags);

      opb = new ObjPaneButtons(parent);
      gridbag.setConstraints(opb, c);
      add(opb);

      // set up starting state info, disable some things...
      handleNoRest(true);
      handleNoWorn(true);
      handleNoWeapon(true);
      
   }//constructor

   public boolean getState(int box_num) {
      if ((box_num < 0) || (box_num > 75))
         return false;

      if (box_num <= 20)
        return rest_flags.getState(box_num);
      else if (box_num <= 39)
         return worn_flags.getState(box_num);
      else
        return desc_flags.getState(box_num);
   }//getState

   public void handleContainer(boolean state) {
      if (!state) {
         desc_flags.setState(59, false);
      }
   }//handleContainer

   public void handleCanteen(boolean state) {
      if (state)
         desc_flags.setState(54, true); //if canteen, then container
   }//handleCanteen

   public void handleNoRest(boolean state) {
      if (state) { //!rest chosen
         rest_flags.setStateRange(1, 20, false);
         rest_flags.setEnableRange(1, 20, false);
      }
      else {
         rest_flags.setEnableRange(1, 20, true);
      }         
   }//handleNoRest

   public void handleNoWorn(boolean state) {
      if (state) { //!worn chosen
         worn_flags.setStateRange(22, 39, false);
         worn_flags.setEnableRange(22, 39, false);
      }
      else {
         worn_flags.setEnableRange(22, 39, true);
      }         
   }//handleNoWorn

   public void handleNoWeapon(boolean state) {
      if (state) { //!weapon chosen
         desc_flags.setStateRange(41, 49, false);
         desc_flags.setEnableRange(41, 49, false);
      }
      else {
         desc_flags.setEnableRange(41, 49, true);
      }         
   }//handleNoWorn

   public ObjPaneButtons getButtons() {
      return opb;
   }
   
}//ObjPanel2


class ObjPanel3 extends Panel {
   OLCObject parent;
   ObjPaneButtons opb;
   
   LabeledTextBoxGlob extras;
   LabeledCheckBoxGlob bag_flags;
   LabeledTextBoxGlob bag_data;
   LabeledTextField inv;
   LabeledTextField stat_effects;
   LabeledTextField vis_bit;
   LabeledTextField price;
   
   ///**********************  Constructor *****************************///
   public ObjPanel3(OLCObject par) {
      super();
      parent = par;
      
      int REM = GridBagConstraints.REMAINDER;
      int REL = GridBagConstraints.RELATIVE;
      
      GridBagLayout gridbag = new GridBagLayout();
      GridBagConstraints c = new GridBagConstraints();
      setLayout (gridbag);
      
      c.gridwidth = REM;
      c.fill = GridBagConstraints.BOTH;

      extras = new LabeledTextBoxGlob("Miscellaneous Data.", 3, 3);

      extras.addBox(new NumTextBox("Charges/Light count", "0", 0));
      extras.addBox(new NumTextBox("Recharges (wands)", "0", 1));
      extras.addBox(new NumTextBox("Load Percentage", "50", 2));
      //extras.addBox(new NumTextBox("Cur in game", "0", 3));
      extras.addBox(new NumTextBox("Max in game", "50", 3));
      extras.addBox(new NumTextBox("Weight", "5", 4));
      extras.addBox(new NumTextBox("Dice sides", "0", 5));
      extras.addBox(new NumTextBox("Dice count", "0", 6));
      extras.addBox(new NumTextBox("Level", "0", 7));

      gridbag.setConstraints(extras, c);
      add(extras);
      
      bag_flags = new LabeledCheckBoxGlob("Bag Flags", 2, 4);
      
      bag_flags.addBox(new NumCheckbox("closed", true, 2));
      bag_flags.addBox(new NumCheckbox("locked", false, 3));
      bag_flags.addBox(new NumCheckbox("pickable", false, 4));
      bag_flags.addBox(new NumCheckbox("mag lockable", false, 5));
      bag_flags.addBox(new NumCheckbox("mag locked", false, 6));
      bag_flags.addBox(new NumCheckbox("destructable", false, 7));
      bag_flags.addBox(new NumCheckbox("corpse", false, 8));
      bag_flags.addBox(new NumCheckbox("!close", false, 9));
      bag_flags.addBox(new NumCheckbox("consumes key", false, 17));
      
      gridbag.setConstraints(bag_flags, c);
      add(bag_flags);
      
      bag_data = new LabeledTextBoxGlob("Bag Data.", 1, 4);
      
      bag_data.addBox(new NumTextBox("Key number", "0", 0));
      bag_data.addBox(new NumTextBox("Max weight", "30", 1));
      bag_data.addBox(new NumTextBox("Percent Weight", "100", 2));
      bag_data.addBox(new NumTextBox("Time Till Disolve", "-1", 3));
      
      gridbag.setConstraints(bag_data, c);
      add(bag_data);
      
      c.gridwidth = 1;
      inv = new LabeledTextField("Inventory", "", 40);
      gridbag.setConstraints(inv, c);
      add(inv);
      
      c.gridwidth = REM;
      stat_effects = new LabeledTextField("Stat Effects", "", 40);
      gridbag.setConstraints(stat_effects, c);
      add(stat_effects);
      
      c.gridwidth = 1;
      vis_bit = new LabeledTextField("Vis Bit", "0", 15);
      gridbag.setConstraints(vis_bit, c);
      add(vis_bit);
      
      c.gridwidth = REM;
      price = new LabeledTextField("Price", "500", 15);
      gridbag.setConstraints(price, c);
      add(price);
      
      opb = new ObjPaneButtons(parent);
      gridbag.setConstraints(opb, c);
      add(opb);
      
   }//Constructor

   public void handleContainer(boolean is_container) {
      if (is_container) {
         bag_flags.setEnabled(true);
         bag_data.setEnabled(true);
         inv.setEnabled(true);
      }
      else {
         bag_flags.setEnabled(false);
         bag_data.setEnabled(false);
         inv.setEnabled(false);
      }
   }//handleContainer
   
   public final String getInv() {
      return inv.getText();
   }
   
   public final String getStatEffects() {
      return stat_effects.getText();
   }
   
   public final String getExtras() {
      return extras.getText();
   }
   
   public final String getVbPrice() {
      return (vis_bit.getText() + " " + price.getText());
   }
   
   public final String getBagFlags() {
      return bag_flags.getText();
   }
   
   public final String getBagData() {
      return bag_data.getText();
   }
   
   public ObjPaneButtons getButtons() {
      return opb;
   }   

}//ObjPanel3


class ObjPanel4 extends Panel {
   OLCObject parent;
   ObjPaneButtons opb;

   LabeledCheckBoxGlob spec_data_flags;
   //LabeledTextBoxGlob construct_data;
   LabeledTextField skin_num;
   LabeledTextField casts_spells;
   
   public ObjPanel4(OLCObject par) {
      super();
      parent = par;
      
      int REM = GridBagConstraints.REMAINDER;
      int REL = GridBagConstraints.RELATIVE;
      
      GridBagLayout gridbag = new GridBagLayout();
      GridBagConstraints c = new GridBagConstraints();
      setLayout (gridbag);
      
      c.gridwidth = REM;
      c.fill = GridBagConstraints.BOTH;
      
      spec_data_flags = new LabeledCheckBoxGlob("Special Proc Flags", 2, 3);
      
      spec_data_flags.addBox(new NumCheckbox("Teleport on Consumption", false,
                                             0));
      //spec_data_flags.addBox(new NumCheckbox("CONSTRUCT DATA", false, 1));
      spec_data_flags.addBox(new NumCheckbox("Has a skin", false, 2));
      spec_data_flags.addBox(new NumCheckbox("Poison on Consumpt.", false, 3));
      spec_data_flags.addBox(new NumCheckbox("Casts Spells", false, 10));
      
      gridbag.setConstraints(spec_data_flags, c);
      add(spec_data_flags);
      
//       construct_data =
//         new LabeledTextBoxGlob("Construct/Concoct Data.  Enter the NUMBERS"
//                                + "of the objects involved.", 2, 3);

//       construct_data.addBox(new NumTextBox("Resulting Object", "0", 0));
//       construct_data.addBox(new NumTextBox("Component 1", "0", 1));
//       construct_data.addBox(new NumTextBox("Comp 2", "0", 2));
//       construct_data.addBox(new NumTextBox("Comp 3", "0", 3));
//       construct_data.addBox(new NumTextBox("Comp 4", "0", 4));
//       construct_data.addBox(new NumTextBox("Comp 5", "0", 5));
      
      
//       gridbag.setConstraints(construct_data, c);
//       add(construct_data);
      
      c.gridwidth = 1;
      skin_num = new LabeledTextField("Skin number", "0", 8);
      gridbag.setConstraints(skin_num, c);
      add(skin_num);
      
      c.gridwidth = REM;
      casts_spells =
        new LabeledTextField("Casts these Spells <level spell_num> pairs",
                             "", 50);
      gridbag.setConstraints(casts_spells, c);
      add(casts_spells);
      
      opb = new ObjPaneButtons(parent);
      gridbag.setConstraints(opb, c);
      add(opb);
      
   }//Constructor

   public void handleSpecProcs(boolean state) {
      spec_data_flags.setEnabled(state);
      //construct_data.setEnabled(state);
      casts_spells.setEnabled(state);
   }

   public void handleSpells(boolean state) {
      //this only goes one way..easy, not to misleading I think
      // Other things can cause this to be turned on is the reason.
      if (state)
        casts_spells.setEnabled(true);
   }

   public void handleSkin(boolean state) {
      skin_num.setEnabled(state);
   }
   

   public final String getSpecDataFlags() {
      return spec_data_flags.getText();
   }
   
//   public final String getConstructData() {
//      return construct_data.getText();
//   }
   
   public final String getSkinNum() {
      return skin_num.getText();
   }
   
   public final String getCastsSpells() {
      return casts_spells.getText();
   }
   
   
   public ObjPaneButtons getButtons() {
      return opb;
   }
   
}//ObjPanel4



class ObjPaneButtons extends Panel {
   OLCObject parent;
   Button desc;
   Button bag;
   Button flags;
   Button spec;

   public ObjPaneButtons(OLCObject par) {
      super();
      parent = par;
      
      Button cancel = new Button("Cancel");
      Button submit = new Button("Submit");
      desc = new Button("Descriptions");
      bag = new Button("Bag/Misc Data");
      flags = new Button("Object Flags");
      spec = new Button("Spec Procs");
      Button help = new Button("Help");

      desc.setBackground(new Color(0, 255, 0));
      bag.setBackground(new Color(255, 0, 0));
      flags.setBackground(new Color(255, 0, 0));
      spec.setBackground(new Color(255, 0, 0));
      
      FlowLayout fl = new FlowLayout();
      setLayout(fl);
      
      desc.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.goto_desc();
         }});
      
      help.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_help();
         }});
      
      bag.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.goto_bag();
         }});
      
      flags.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.goto_flags();
         }});
      
      spec.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.goto_spec();
         }});
      
      cancel.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_cancel();
         }});
      
      submit.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_submit();
         }});
      
      add(submit);
      add(cancel);
      add(new Button("#######"));
      add(desc);
      add(flags);
      add(bag);
      add(spec);
      add(help);
      
   }//constructor

   public void touchFlags() {
      flags.setBackground(new Color(0, 255, 0));
   }
   
   public void touchBag() {
      bag.setBackground(new Color(0, 255, 0));
   }
   
   public void touchSpec() {
      spec.setBackground(new Color(0, 255, 0));
   }
   
}//OButtonPanel


/** This class will listen to all check boxes and 
  tell the OLCObject class about them. */
class ObjCBListener implements ItemListener {
   OLCObject par;
   
   public ObjCBListener(OLCObject ob) {
      super();
      par = ob;
   }

   public void itemStateChanged(ItemEvent e) {
      NumCheckbox ncb = (NumCheckbox)(e.getSource());
      par.handleDescFlagsCB(ncb.getNum(), ncb.getState());
   }
}//ObjCBListener