/
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: OlEditor.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.*;
import java.io.*;
import java.util.*;

// This allows for some quick editing of already-created objects,
// mobs, and rooms.  It auto-captures the info for easy editing...

class OlEditor extends Frame {
   LabeledTextField names;
   LabeledTextArea long_desc;
   LabeledTextField short_desc;
   LabeledTextField in_room_desc;
   LabeledTextField obj_name;
   LabeledTextField obj_num_field;
   LabeledTextField type_field;
   Checkbox is_frozen;
   
   int object_number;

   int obj_type;
   static public int MOB = 0;
   static public int OBJ = 1;
   static public int ROOM = 2;

   HegemonManager hm;
   
   public OlEditor(HegemonManager h) {
      super("Online Editor");
      hm = h;

      object_number = -1;
      obj_type = -1;

      names = new LabeledTextField("Names", "", 40);
      type_field = new LabeledTextField("Object Type", "", 12);
      obj_num_field = new LabeledTextField("Number", "", 6);
      long_desc = new LabeledTextArea("Long Description", "", 10, 80);
      short_desc = new LabeledTextField("Short Description", "", 50);
      in_room_desc = new LabeledTextField("In Room Description", "", 80);
      is_frozen = new Checkbox("Is Frozen", false);

      int REM = GridBagConstraints.REMAINDER;
      GridBagLayout gridbag = new GridBagLayout();
      GridBagConstraints c = new GridBagConstraints();
      setLayout (gridbag);

      c.fill = GridBagConstraints.BOTH;

      c.gridwidth = 1;
      
      gridbag.setConstraints(obj_num_field, c);
      add(obj_num_field);

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

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

      c.gridwidth = REM;

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

      gridbag.setConstraints(short_desc, c);
      add(short_desc);
      
      gridbag.setConstraints(in_room_desc, c);
      add(in_room_desc);
      
      gridbag.setConstraints(long_desc, c);
      add(long_desc);

      OEButtons oeb = new OEButtons(this);
      gridbag.setConstraints(oeb, c);
      add(oeb);
/*
      long_desc.addKeyListener(new KeyAdapter() {
         public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
               do_update(); //send stuff off to server
            }//if
            else
              super.keyPressed(e);
         }});
         */
      pack();
   }//constructor

   public boolean isFrozen() {
      return is_frozen.getState();
   }
   
   public void do_close() {
      setVisible(false);
   }

   public void do_help() {
      if (!hm.IS_APPLET)
        hm.getHelpFrame().show("client" + System.getProperty("file.separator")
                               + "oleditor");
      else {
         Log.instance().dbg("Trying to show: client/oleditor");
         hm.getHelpFrame().show("client/oleditor");
      }
   }//doHelp
   
   public void setObjNum(int obj_num) {
      if (is_frozen.getState())
         return;
      obj_num_field.setText(Integer.toString(obj_num));
      object_number = obj_num;
   }

   public void setObjType(int object_type) {
      if (is_frozen.getState())
         return;
      if (object_type == ROOM)
        type_field.setText("Room");
      else if (object_type == MOB)
        type_field.setText("Mobile");
      else if (object_type == OBJ)
        type_field.setText("Object");
      else
        type_field.setText("UNKNOWN");
      obj_type = object_type;
   }

   public void setNames(String str) {
      Log.instance().dbg("setNames: " + str);
      if (is_frozen.getState()) {
         return;
      }
      names.setText(str);
   }//setNames

   public void appendLongDesc(String str) {
      if (is_frozen.getState())
         return;
      long_desc.append(str);
   }

   public void appendShortDesc(String str) {
      if (is_frozen.getState())
         return;
      short_desc.append(str);
   }

   public void appendInRoomDesc(String str) {
      if (is_frozen.getState())
         return;
      in_room_desc.append(str);
   }
   
   public void do_clear() {
      names.clear();
      long_desc.clear();
      short_desc.clear();
      in_room_desc.clear();
      object_number = -1;
      obj_type = -1;
      is_frozen.setState(false);
   }//

   public void do_update() {
      is_frozen.setState(false);
      hm.getClientDisplay().giveFocus();
      // first, figure out which type of object we're dealing with
      if ((object_number >= 0) || (obj_type == ROOM)) {
         if (obj_type == MOB) {
            // then we're good to go
            try {
               // first, the in_room_description
               hm.getSocketManager().write("clear_mnames " + object_number
                                           + "\n");
               StringTokenizer tok = new StringTokenizer(names.getText());
               while (tok.hasMoreElements()) {
                  hm.getSocketManager().write("add_mname " + object_number
                                              + " " + tok.nextToken() + "\n");
               }//while

               hm.getSocketManager().write("ch_mndesc " + object_number
                                           + " '" + in_room_desc.getText()
                                           + "'\n");
               // now the short desc
               hm.getSocketManager().write("ch_msdesc " + object_number
                                           + " '" + short_desc.getText()
                                           + "'\n");

               // now the long description
               hm.getSocketManager().write("ch_mdesc " + object_number
                                           + "\n");
               hm.getSocketManager().write(long_desc.getText() + "\n~\n");
            }//try
            catch (Exception e) {
               MessageDialog md = new MessageDialog("Update Error",
                                                    "Could not update mob: "
                                                    + e, "red", "black");
            }//catch
         }//if
         else if (obj_type == OBJ) {
            try {

               hm.getSocketManager().write("clear_onames " + object_number
                                           + "\n");
               StringTokenizer tok = new StringTokenizer(names.getText());
               while (tok.hasMoreElements()) {
                  hm.getSocketManager().write("add_oname " + object_number + " "
                                              + tok.nextToken() + "\n");
               }//while

               // first, the in_room_description
               hm.getSocketManager().write("ch_ondesc " + object_number
                                           + " '" + in_room_desc.getText()
                                           + "'\n");
               // now the short desc
               hm.getSocketManager().write("ch_osdesc " + object_number
                                           + " '" + short_desc.getText()
                                           + "'\n");

               // now the long description
               hm.getSocketManager().write("ch_odesc " + object_number
                                           + "\n");
               hm.getSocketManager().write(long_desc.getText() + "\n~\n");
            }//try
            catch (Exception e) {
               MessageDialog md = new MessageDialog("Update Error",
                                                    "Could not update object: "
                                                    + e, "red", "black");
            }//catch
         }//if
         else if (obj_type == ROOM) {
            try {
               // now the short desc
               hm.getSocketManager().write("ch_rname "
                                           + "'" + short_desc.getText()
                                           + "'\n");

               // now the long description
               hm.getSocketManager().write("ch_rdesc\n");
               
               hm.getSocketManager().write(long_desc.getText() + "\n~\n");
            }//try
            catch (Exception e) {
               MessageDialog md = new MessageDialog("Update Error",
                                                    "Could not update object: "
                                                    + e, "red", "black");
            }//catch
         }//if
            
      }//if obj_type is in range
      else {
         MessageDialog md = new MessageDialog("Update Error",
                                              "Object number is invalid.",
                                              "red", "black");
      }//else

      do_clear();
   }//do_update
}//OlEditor


class OEButtons extends Panel {
   OlEditor parent;
   
   public OEButtons(OlEditor par) {
      super();
      parent = par;

      Button cancel_b = new Button("Cancel");
      Button update_b = new Button("Update");
      Button done_b = new Button("Done");
      Button help_b = new Button("Help");

      done_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_close();
         }});

      cancel_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_clear();
            parent.do_close();
         }});

      help_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_help();
         }});

      update_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_update();
         }});

      FlowLayout fl = new FlowLayout();
      setLayout(fl);

      add(update_b);
      add(cancel_b);
      add(done_b);
      add(help_b);
   }//OEButtons constructor
}//OEButtons