/
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: PsoEditor.java,v 1.3 1999/06/22 05:33:08 greear Exp $
// $Revision: 1.3 $  $Author: greear $ $Date: 1999/06/22 05:33:08 $

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


/**  Player Shop Owner editor.  This is used for player-run shop
 * manipulation.
 */
class PsoEditor extends Frame {
   LabeledTextField i_th;
   LabeledTextField keeper;
   TextField register;
   LabeledTextField new_obj;
   Button reload_b, new_b, update_reg_b, done_b;

   GridBagLayout gridbag;
   GridBagConstraints c;

   Vector elements; // holds all of the individual value collections

   HegemonManager hm;

   public String getIth() { return i_th.getText(); }
   public String getKeeperName() { return keeper.getText(); }
   
   public PsoEditor(HegemonManager h) {
      super("Player-run Shop Editor");
      hm = h;

      i_th = new LabeledTextField("i_th", "", 5);
      keeper = new LabeledTextField("Keeper Name", "", 10);
      register = new TextField("", 10);
      new_obj = new LabeledTextField("New Obj Name", "", 15);
      elements = new Vector();
      reload_b = new Button("Re-list");
      new_b = new Button("New Entry");
      done_b = new Button("Done");

      update_reg_b = new Button("Update Register");

      Panel reg_p = new Panel();
      reg_p.setLayout(new BorderLayout());
      reg_p.add("North", update_reg_b);
      reg_p.add("South", register);
      reg_p.setBackground(new Color(50,255,50));
      register.setBackground(new Color(255,255,255));
      update_reg_b.setBackground(new Color(130,130,255)); //blue

      Panel p = new Panel();
      p.setLayout(new BorderLayout());

      reload_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_relist();
         }});

      new_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_new();
         }});

      update_reg_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_update_reg();
         }});

      done_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            setVisible(false);
         }});

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

      c.fill = GridBagConstraints.HORIZONTAL;

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

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

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

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

      c.gridwidth = REM;
      Panel p_top = new Panel();
      p_top.add(reload_b);
      p_top.add(done_b);
      
      p.add("North", new_b);
      p.add("South", p_top);
      gridbag.setConstraints(p, c);
      add(p);


      Panel label_p = new Panel();
      label_p.setLayout(new FlowLayout());

      Label l = new Label("Index");
      label_p.add(l);

      l = new Label("Object#  ");
      label_p.add(l);

      l = new Label("Buy Value");
      label_p.add(l);

      l = new Label("Sell Value        ");
      label_p.add(l);

      l = new Label("             Name                          Control Buttons     ");
      label_p.add(l);


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

      addWindowListener (new WindowAdapter () {
         public void windowClosing (WindowEvent e) {
            setVisible(false);
         }});

      pack();
   }//constructor


   void do_new() {
      try {
         hm.getSocketManager().write("value_add " + hm.getPsoEditor().getIth()
                                     + " " + hm.getPsoEditor().getKeeperName()
                                     + " " + new_obj.getText() + "\n");
      }//try
      catch (Exception e) {
         MessageDialog md = new MessageDialog("Network Error",
                                              "Could not add entry: "
                                              + e, "red", "black");
         e.printStackTrace();
      }//catch
      do_relist();
   }//do_new


   void do_update_reg() {
      try {
         hm.getSocketManager().write("adjust_register " + hm.getPsoEditor().getIth()
                                     + " " + hm.getPsoEditor().getKeeperName()
                                     + " " + register.getText() + "\n");
      }//try
      catch (Exception e) {
         MessageDialog md = new MessageDialog("Network Error",
                                              "Could not update register: "
                                              + e, "red", "black");
         e.printStackTrace();
      }//catch
      do_relist();
   }//do_update_reg
      
   public void do_relist() {
      try {
         hm.getSocketManager().write("value_list " + hm.getPsoEditor().getIth()
                                     + " " + hm.getPsoEditor().getKeeperName()
                                     + "\n");
      }//try
      catch (Exception e) {
         MessageDialog md = new MessageDialog("Network Error",
                                              "Could not refresh: "
                                              + e, "red", "black");
         e.printStackTrace();
      }//catch
   }

//    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 setList(String _i_th, String nm, String reg) {
      Log.instance().dbg("setList: " + _i_th + " " + nm);

      clear();
      i_th.setText(_i_th);
      keeper.setText(nm);
      register.setText(reg);
   }//setNames

   public void setItem(String idx, String obj_num, String sell_val,
                       String buy_val) {
      ValueEntry ve = new ValueEntry(idx, obj_num, buy_val, sell_val, hm);
      gridbag.setConstraints(ve, c);
      add(ve);
      elements.addElement(ve);
      pack();
   }

   public void setName(String idx, String val) {
      Log.instance().dbg("In PsoEditor.setName idx -:" + idx + ":- val -:"
                         + val + ":-\n");
      ValueEntry ve;
      for (int i = 0; i<elements.size(); i++) {
         ve = (ValueEntry)(elements.elementAt(i));
         if (idx.equals(ve.getIndex())) {
            ve.setObjName(val);
            return;
         }//if
      }//for
      Log.instance().err("Could not find index in setName.");
      return;
   }//setName
   
   public void clear() {
      i_th.clear();
      keeper.clear();

      for (int i = 0; i<elements.size(); i++) {
         remove((ValueEntry)(elements.elementAt(i)));
      }//for

      elements = new Vector();
   }//
}//PsoEditor

class ValueEntry extends Panel {
   TextField idx;
   TextField obj_num;
   TextField buy_val;
   TextField sell_val;
   TextField name;
   Button update_b;
   Button delete_b;
   HegemonManager hm;

   public String getIndex() { return idx.getText(); }

   public void setObjName(String str) {
      name.setText(str);
   }

   public ValueEntry(String i, String o, String b, String s,
                     HegemonManager h) {
      hm = h;

      setLayout(new FlowLayout());
      add(idx = new TextField(i, 3));
      add(obj_num = new TextField(o, 7));
      add(buy_val = new TextField(b, 7));
      add(sell_val = new TextField(s, 7));
      add(name = new TextField("", 24));

//       idx.setEnabled(false);
//       obj_num.setEnabled(false);
//       name.setEnabled(false);

      update_b = new Button("Update");
      update_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_update();
         }});
      add(update_b);

      delete_b = new Button("Delete");
      delete_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_delete();
         }});
      add(delete_b);
   }//constructor

   public void do_update() {
      try {
         hm.getSocketManager().write("value_set " + hm.getPsoEditor().getIth()
                                     + " " + hm.getPsoEditor().getKeeperName()
                                     + " " + idx.getText() 
                                     + " " + sell_val.getText()
                                     + " " + buy_val.getText() + "\n");
      }//try
      catch (Exception e) {
         MessageDialog md = new MessageDialog("Network Error",
                                              "Could not update entry: "
                                              + e, "red", "black");
         e.printStackTrace();
      }//catch
   }//do_update

   public void do_delete() {
      try {
         hm.getSocketManager().write("value_rem " + hm.getPsoEditor().getIth()
                                     + " " + hm.getPsoEditor().getKeeperName()
                                     + " " + idx.getText() + "\n");
         // Update ourselves....
         hm.getPsoEditor().do_relist();
      }//try
      catch (Exception e) {
         MessageDialog md = new MessageDialog("Network Error",
                                              "Could not delete entry: "
                                              + e, "red", "black");
         e.printStackTrace();
      }//catch
   }//do_delete

}//ValueEntry