/
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: AliasFrame.java,v 1.3 1999/06/05 23:29:11 greear Exp $
// $Revision: 1.3 $  $Author: greear $ $Date: 1999/06/05 23:29:11 $

//
//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
//

/* Manages actions, including persistant storage. */
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class AliasFrame extends Frame {
   HegemonManager hm;
   List aliases;
   Alias[] alias_list = null;
   boolean alias_enabled;
   
   public AliasFrame(HegemonManager h) {
      super("Alias Manager");
      aliases = new List(20, false);
      hm = h;
      try {
         readObject();
      }
      catch (IOException e) {
         Log.instance().err("AliasFrame():  " + e);
      }

      aliases.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_edit();
         }});

      alias_enabled = true;
      alias_list = updateAliases();
      add(aliases, "North");
      add(new AlFButtons(this), "South");
      pack();
   }//constructor

   public void addAlias(Alias act) {
      aliases.addItem(act.toString());
      //Log.it("Writing out aliases.");
      try {
         writeObject();
      }
      catch (IOException e) {
         Log.instance().err("addAlias:  " + e);
      }
      alias_list = updateAliases();
   }
   
   public final void setAliasEnabled(boolean ae) {
      alias_enabled = ae;
   }

   public final boolean getAliasEnabled() {
      return alias_enabled;
   }
   
   public void addAlias(String glom) {
      aliases.addItem(glom);
      //Log.it("Writing out aliases.");
      try {
         writeObject();
      }
      catch (IOException e) {
         Log.instance().err("addAlias:  " + e);
      }
      alias_list = updateAliases();
   }

   public void createAlias() {
      AliasDialog hd = new AliasDialog(this, new Alias());
      hd.show();
   }

   public Alias[] getAliases() {
      return alias_list; //cached array of Alias's
   }

   private Alias[] updateAliases() {
      String[] items = aliases.getItems();
      int len = items.length;
      Alias retval[] = new Alias[len];
      
      for (int i = 0; i<len; i++) {
         retval[i] = new Alias(items[i]);
      }
      return retval;
   }//getActions

   
   public Alias getAlias(String trigger, String response) {
      String[] items = aliases.getItems();
      Alias a;
      int len = items.length;
      
      for (int i = 0; i<len; i++) {
         a = new Alias(items[i]);
         if (trigger != null) {
            if ((a.getAlias()).equals(trigger))
               return a;
         }
         else if (response != null) {
            if ((a.getResponse()).equals(response))
               return a;
         }
         else
            return null;
      }
      return null;
   }//getAlias
   

   public void do_delete() {
      String str;
      if ((str = aliases.getSelectedItem()) != null) {
         aliases.remove(str);
         try {
            writeObject();
            alias_list = updateAliases();
         }
         catch (Exception e) {
            Log.instance().err("do_delete:  " + e);
         }
      }
      else {
        MessageDialog md =
          new MessageDialog("Alias Manager",
                            "You need to select an alias to delete.",
                            "red", "black");
      }
   }//do_delete

   public void do_new() {
      createAlias();
   }

   public void do_close() {
      setVisible(false);
   }

   public void do_edit() {
      String str;
      if ((str = aliases.getSelectedItem()) != null) {
         aliases.remove(str); //editing will re-add it
         AliasDialog hd = new AliasDialog(this, new Alias(str));
         hd.show();
      }
      else {
        MessageDialog md =
          new MessageDialog("Alias Manager",
                            "You need to select an alias to edit.",
                            "red", "black");
      }
   }//do_edit

   /** Writes it all to disk, for later retrieval by load() */
   public void writeObject() throws IOException {
      if (hm.IS_APPLET)
         return;

      BOStream ostream =
         new BOStream(new FileOutputStream(hm.getProperties().getProperty("AliasFile")));
      String[] entries = aliases.getItems();
      int len = entries.length;
      try {
         for (int i = 0; i<len; i++) {
            ostream.write(entries[i]);
            ostream.write("\n~\n");
         }//for
      }//try
      catch (Exception e) {
         MessageDialog md =
           new MessageDialog("Write Failure",
                             "Failed to write aliases to disk: " +
                             e, "red", "black");
      }//catch
   }//writeObject

   public void readObject() throws IOException {
      if (hm.IS_APPLET)
         return;

      String af = hm.getProperties().getProperty("AliasFile");
      BIStream istream = new BIStream(new FileInputStream(af));
      String rslt;
      StringBuffer alias = new StringBuffer(200);
      
      try {
         while ((rslt = istream.readLine()) != null) {
            if ((rslt.trim()).equals("~")) {
               aliases.addItem((alias.toString()).trim());
               alias = new StringBuffer(200);
            }
            else {
               alias.append(rslt + " ");
            }
         }//while
      }//try
      catch (Exception e) {
         Log.instance().err("in AliasFrame.readObject():  " + e);
      }
   }//readObject
}//AliasFrame


class AlFButtons extends Panel {
   AliasFrame parent;
   
   public AlFButtons(AliasFrame par) {
      super();
      parent = par;
      
      Button done_b = new Button("Done");
      Button edit_b = new Button("Edit");
      Button new_b = new Button("New");
      Button delete_b = new Button("Delete");

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

      edit_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_edit();
         }});

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

      delete_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_delete();
         }});
   
      
      FlowLayout fl = new FlowLayout();
      setLayout(fl);

      add(new_b);
      add(edit_b);
      add(delete_b);
      add(done_b);
   }//AlFButtons constructor
}//AlFButtons