Package org.tcm1998.accat

Source Code of org.tcm1998.accat.AccatDlg

/**
* Filename  : AccatDlg.java
* Created   : Sep 1, 2006 by tcm1998
*/
package org.tcm1998.accat;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;


/**
* @author tcm1998
*
*/
public class AccatDlg {
  private final static int CATAGORYBUTTONS = 16;
  public final static int ALPHALIST = 0;
  public final static int NOOKLIST = 1;
  public final static int ACCLIST = 2;
 
  public final static int GAME_GC = 0;
  public final static int GAME_DS = 1;
  public final static int GAME_WII = 2;
 
  private int listedItems;
  private int totalItemsInCatagories;
  private int availableItems;
  private String m_basePath;
  private ArrayList CurrentCatagories;
  private int iCurrentList = ALPHALIST;
  private int iCurrentGame = GAME_DS;
  private String currentFilename = null;
  private String currentFilepath = null;
  private boolean isWindows = false;
  private boolean bModified = false;
  private boolean expanded;
//  private ExportDlg exportwnd;
  private FilterDlg filterwnd;
  private HashMap itemIDs; 
 
  private BaseItemCollection itemColl;
  private PlayerData player;
  private OrderedItemCollection orderedItems[];
  private ItemFilter itemfilter;
  private Settings accatSettings;
     
  private Shell m_shell;
  private Display m_display;
  private Tree itemTree;
  private Composite displayEditPanel;
  private Composite infoPanel;
  private Composite amountPanel;
  private Composite findPanel;
  private Group buttonPanel;
  private Group displayPanel;
  private Group editPanel;
  private Group itemInfoPanel;
  private Group priceInfoPanel;
  private Group picturePanel;
  private Label treeHead;
  private Label amountLabel;
  private StyledText infoLine1a;
  private StyledText infoLine1b;
  private StyledText infoLine2;
  private StyledText infoLine3;
  private StyledText infoLine4; 
  private StyledText infoLine5;
  private StyledText infoLine6;
  private StyledText priceLineNook;
  private StyledText priceLineRedd;
  private StyledText priceLineSell;
  private StyledText priceLineUnorderable;
  private Label picture;
  private Label orderLabel;
  private Label filterLabel;
  private Label findLabel;
  private Button toggleButton;
  private Button markAvailButton;
  private Button markMissingButton;
  private Button wishListButton;
  private Button showMissingCheck;
  private Button showAvailCheck;
  private Button showCatCheck;
  private Button filterCheck;
  private Button expandButton;
  private Button catButtons[];
  private Button filterButton;
  private Button nextButton;
  private Button extendCatagories;
  private Image itemPicture;
  private Point minimumDlgSize;
  private Text findText;
  private Text amountText;
  private Combo orderCombo;
  private MenuItem itemRecent;  // to be able to update the recent files
 
  private GridData infoPanelLayoutData;
 
  public AccatDlg()
  {
    String osname = System.getProperty("os.name");
    if (osname.startsWith("Win"))
    {
      isWindows = true;     
    }   
    itemPicture = null;
    itemIDs = new HashMap();
    CurrentCatagories = new ArrayList();
    itemColl = new BaseItemCollection();
    orderedItems = new OrderedItemCollection[3];
    accatSettings = new Settings();
    orderedItems[NOOKLIST] = new OrderedItemCollection("nook_itemlist_wii_temp.txt",itemColl);
    orderedItems[ACCLIST] = new OrderedItemCollection("acc_itemlist_wii_temp.txt", itemColl);
    orderedItems[ALPHALIST] = new OrderedItemCollection("alpha_itemlist_wii_temp.txt",itemColl);
    itemfilter = new ItemFilter("");
    player = new PlayerData(itemColl,itemColl.GetAccatIds());
  }
 
  private void Create(Display display){
    m_shell = new Shell(display);
    m_shell.setImage(new Image(display,org.tcm1998.utils.ResourceUtils.openBinaryResource("nook.png")));
    m_shell.addShellListener(new ShellAdapter(){
      public void shellClosed(ShellEvent e) {
        onClose(e);       
     
    });
    m_shell.addListener(FilterDlg.EVENT_UPDATE, new Listener(){
      public void handleEvent(Event e) {
        onFilterUpdated();
      }
    });
    m_display = display;
    CreateUserControls();
    SetupLayout();
    initialiseUserControls();
    CreateMenu (m_shell);
    CreateListeners()
    updateTitle();
   
    infoPanel.setSize(0,0);
    expanded = false;
    Point loc = accatSettings.getLocation();
    if ((loc.x | loc.y) != 0)
    {
      m_shell.setLocation(loc);
    }
  }
 
  void CreateUserControls()
  {
    new Label(m_shell,SWT.NONE);
    treeHead = new Label(m_shell,SWT.NONE);
    new Label(m_shell,SWT.NONE);
    buttonPanel = new Group(m_shell,SWT.NONE);
    itemTree = new Tree(m_shell,SWT.BORDER | SWT.SINGLE | SWT.CHECK | SWT.V_SCROLL);
    displayEditPanel = new Composite(m_shell, SWT.NONE);   
    displayPanel = new Group (displayEditPanel,SWT.NONE);
    orderLabel = new Label(displayPanel,SWT.NONE);
    orderCombo = new Combo(displayPanel,SWT.READ_ONLY);
    filterLabel = new Label(displayPanel, SWT.NONE);
    showCatCheck = new Button (displayPanel, SWT.CHECK);
    showAvailCheck = new Button (displayPanel, SWT.CHECK);
    showMissingCheck = new Button (displayPanel, SWT.CHECK);
    filterCheck = new Button (displayPanel, SWT.CHECK);
    filterButton = new Button (displayPanel,SWT.PUSH);
    editPanel = new Group (displayEditPanel, SWT.NONE);
    toggleButton = new Button (editPanel,SWT.RADIO);
    markAvailButton = new Button (editPanel,SWT.RADIO);
    markMissingButton = new Button (editPanel,SWT.RADIO);
    wishListButton = new Button (editPanel,SWT.RADIO);
    amountPanel = new Composite(displayEditPanel,SWT.NONE);
    amountLabel = new Label(amountPanel,SWT.NONE);
    amountText = new Text(amountPanel,SWT.NONE);
    findPanel = new Composite(m_shell,SWT.NONE);
    findLabel = new Label(findPanel,SWT.NONE);
    findText = new Text(findPanel,SWT.NONE);
    nextButton = new Button(findPanel,SWT.PUSH);
    expandButton = new Button(m_shell,SWT.PUSH);
    extendCatagories = new Button(m_shell,SWT.CHECK);
    new Label(m_shell,SWT.NONE);
    new Label(m_shell,SWT.NONE);
    catButtons = new Button[CATAGORYBUTTONS];
    for (int btn = 0; btn<CATAGORYBUTTONS;btn++)
    {
      catButtons[btn] = new Button(buttonPanel,SWT.PUSH);     
    }
    infoPanel = new Composite (m_shell,SWT.NONE);
    Color backColor = infoPanel.getBackground();
    itemInfoPanel = new Group (infoPanel,SWT.NONE);
    infoLine1a = new StyledText(itemInfoPanel,SWT.NONE);
    infoLine1a.setBackground(infoPanel.getBackground());
    infoLine1b = new StyledText(itemInfoPanel,SWT.NONE);
    infoLine2 = new StyledText(itemInfoPanel,SWT.NONE);
    infoLine3 = new StyledText(itemInfoPanel,SWT.NONE);
    infoLine4 = new StyledText(itemInfoPanel,SWT.NONE);   
    infoLine5 = new StyledText(itemInfoPanel, SWT.NONE);
    infoLine6 = new StyledText(itemInfoPanel, SWT.NONE);
    priceInfoPanel = new Group (infoPanel,SWT.NONE);
    priceLineNook = new StyledText(priceInfoPanel,SWT.NONE);
    priceLineRedd = new StyledText(priceInfoPanel,SWT.NONE);
    new Label(priceInfoPanel,SWT.NONE);
    priceLineSell = new StyledText(priceInfoPanel,SWT.NONE);
    new Label(priceInfoPanel,SWT.NONE);
    priceLineUnorderable = new StyledText (priceInfoPanel, SWT.NONE);
    picturePanel = new Group (infoPanel,SWT.NONE);
    picture = new Label(picturePanel,SWT.NONE);
   
    infoLine1a.setBackground(backColor);
    infoLine1b.setBackground(backColor);
    infoLine2.setBackground(backColor);
    infoLine3.setBackground(backColor);
    infoLine4.setBackground(backColor);
    infoLine5.setBackground(backColor);
    infoLine6.setBackground(backColor);
    priceLineNook.setBackground(backColor);
    priceLineRedd.setBackground(backColor);
    priceLineSell.setBackground(backColor);
    priceLineUnorderable.setBackground(backColor);
       
  }
 
  void SetupLayout()
  {
    GridLayout mainWndLayout = new GridLayout();
    GridLayout displayEditPanelLayout = new GridLayout();
    GridLayout displayPanelLayout = new GridLayout();
    GridLayout amountPanelLayout = new GridLayout();
    GridLayout findPanelLayout = new GridLayout();
    GridLayout infoPanelLayout = new GridLayout();
    GridLayout itemInfoPanelLayout = new GridLayout();
    GridLayout editPanelLayout = new GridLayout ();   
    GridLayout priceInfoPanelLayout = new GridLayout();
    FillLayout butonPanelLayout = new FillLayout();
    FillLayout pictureLayout = new FillLayout();
   
    GridData buttonPanelLayoutData = new GridData(SWT.BEGINNING,SWT.BEGINNING,false,false);
    GridData itemTreeLayoutData = new GridData(SWT.FILL,SWT.FILL,true, true);
    GridData displayEditPanelLayoutData = new GridData (SWT.BEGINNING,SWT.BEGINNING,false,false);
    GridData displayPanelLayoutData = new GridData(SWT.BEGINNING,SWT.BEGINNING,false,false);
    GridData orderComboLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData filterLabelLayoutData = new GridData(SWT.BEGINNING,SWT.BEGINNING,false,false);
    GridData showCatCheckLayoutData = new GridData();
    GridData showAvailCheckLayoutData = new GridData();
    GridData showMissingCheckLayoutData = new GridData();
    GridData editPanelLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData amountPanelLayoutData = new GridData(SWT.FILL,SWT.CENTER,true,false);
    GridData amountTextLayoutData = new GridData(SWT.BEGINNING,SWT.CENTER,true,false);
    GridData findPanelLayoutData = new GridData(SWT.FILL,SWT.CENTER,true,false);
    GridData findTextLayoutData = new GridData(SWT.FILL,SWT.CENTER,true,false);
    GridData expandButtonLayoutData = new GridData(SWT.END,SWT.CENTER,false,false);
           infoPanelLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData itemInfoPanelLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData infoLine1aLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData infoLine2LayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData infoLine3LayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData infoLine4LayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData infoLine5LayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData infoLine6LayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData priceInfoPanelLayoutData = new GridData(SWT.BEGINNING,SWT.BEGINNING,false,false);
    GridData PriceLineNookLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData priceLineReddLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData priceLineSellLayoutData = new GridData(SWT.FILL,SWT.BEGINNING,true,false);
    GridData picturePanelLayoutData = new GridData(SWT.BEGINNING,SWT.FILL,false,true);
   
    int catButtonSpacing = 0;
    int itemListLength = 21;
    if (!isWindows)
    {
      catButtonSpacing = -19;
      itemListLength = 15;
    }
    mainWndLayout.numColumns = 3;
    butonPanelLayout.type = SWT.VERTICAL;
    butonPanelLayout.spacing = catButtonSpacing;
    displayEditPanelLayout.numColumns = 1;
    displayPanelLayout.numColumns = 3;
    editPanelLayout.numColumns = 1;
    amountPanelLayout.numColumns = 3;
    findPanelLayout.numColumns = 3;
    infoPanelLayout.numColumns = 3;
    itemInfoPanelLayout.numColumns = 2;
    priceInfoPanelLayout.numColumns = 1;
       
    buttonPanelLayoutData.verticalSpan = 15;
    itemTreeLayoutData.heightHint = itemTree.getItemHeight()*itemListLength;
    itemTreeLayoutData.grabExcessHorizontalSpace = true;
    itemTreeLayoutData.verticalSpan = 14;
    displayEditPanelLayoutData.verticalSpan = 14;
    orderComboLayoutData.horizontalSpan =2;
    filterLabelLayoutData.verticalSpan = 4;
    showCatCheckLayoutData.horizontalSpan =2;
    showAvailCheckLayoutData.horizontalSpan =2;
    showMissingCheckLayoutData.horizontalSpan =2;
    infoPanelLayoutData.horizontalSpan = 3;
    infoLine2LayoutData.horizontalSpan = 2;
    infoLine3LayoutData.horizontalSpan = 2;
    infoLine4LayoutData.horizontalSpan = 2;
    infoLine5LayoutData.horizontalSpan = 2;
    infoLine6LayoutData.horizontalSpan = 2;
    infoPanelLayoutData.exclude = true;      // don't show info panel yet
   
    m_shell.setLayout(mainWndLayout)
    buttonPanel.setLayout(butonPanelLayout);
    displayEditPanel.setLayout(displayEditPanelLayout);
    displayPanel.setLayout(displayPanelLayout);
    editPanel.setLayout(editPanelLayout);
    amountPanel.setLayout(amountPanelLayout);
    findPanel.setLayout(findPanelLayout);
    infoPanel.setLayout(infoPanelLayout);
    itemInfoPanel.setLayout(itemInfoPanelLayout);
    priceInfoPanel.setLayout(priceInfoPanelLayout);   
    picturePanel.setLayout(pictureLayout);
   
    buttonPanel.setLayoutData(buttonPanelLayoutData);   
    itemTree.setLayoutData(itemTreeLayoutData);
    displayEditPanel.setLayoutData(displayEditPanelLayoutData);
    displayPanel.setLayoutData(displayPanelLayoutData);
    orderCombo.setLayoutData(orderComboLayoutData);
    filterLabel.setLayoutData(filterLabelLayoutData);
    showCatCheck.setLayoutData(showCatCheckLayoutData);
    showAvailCheck.setLayoutData(showAvailCheckLayoutData);
    showMissingCheck.setLayoutData(showMissingCheckLayoutData);
    editPanel.setLayoutData(editPanelLayoutData);
    amountPanel.setLayoutData(amountPanelLayoutData);
    amountText.setLayoutData(amountTextLayoutData);
    findPanel.setLayoutData(findPanelLayoutData);
    findText.setLayoutData(findTextLayoutData);
    expandButton.setLayoutData(expandButtonLayoutData);
    infoPanel.setLayoutData(infoPanelLayoutData);
    itemInfoPanel.setLayoutData(itemInfoPanelLayoutData);
    infoLine1a.setLayoutData(infoLine1aLayoutData);
    infoLine2.setLayoutData(infoLine2LayoutData);
    infoLine3.setLayoutData(infoLine3LayoutData);
    infoLine4.setLayoutData(infoLine4LayoutData);
    infoLine5.setLayoutData(infoLine5LayoutData);
    infoLine6.setLayoutData(infoLine6LayoutData);
    priceInfoPanel.setLayoutData(priceInfoPanelLayoutData);
    priceLineNook.setLayoutData(PriceLineNookLayoutData);
    priceLineRedd.setLayoutData(priceLineReddLayoutData);
    priceLineSell.setLayoutData(priceLineSellLayoutData);
    picturePanel.setLayoutData(picturePanelLayoutData);   
  }
 
  void initialiseUserControls()
  {
    UpdateButtons();
    extendCatagories.setText("Extend categories");
    priceLineNook.setText("Nook: Not selling!");
    treeHead.setText("Furniture (0/562)");
    findLabel.setText("Find");
    nextButton.setText("Next");
    buttonPanel.setText("Categories");
    displayPanel.setText(" Display mode");
    orderLabel.setText("Order:");
    filterLabel.setText("Filter:");
    showCatCheck.setText("Show Catagories");
    showCatCheck.setSelection(accatSettings.getShowCatagories());
    showAvailCheck.setText("Show Available Only");
    showAvailCheck.setSelection(accatSettings.getShowAvailable());
    showMissingCheck.setText("Show Missing Only");
    showMissingCheck.setSelection(accatSettings.getShowMissing());
    filterCheck.setText("Filter");
    editPanel.setText("Edit mode");
    filterButton.setText("Define ...");   
    toggleButton.setText("Toggle item");
    markAvailButton.setText("Mark item as available");
    markMissingButton.setText("Mark item as missing");
    wishListButton.setText("Place item in wishlist");
    amountLabel.setText("Amount (0-31)");
    expandButton.setText("Show Item Info >>>");
   
    picture.setImage(new Image(m_display,org.tcm1998.utils.ResourceUtils.openBinaryResource("no_pic.png")));
       
    orderCombo.add("Alphabetical");
    orderCombo.add("Nooks order");
    orderCombo.add("ACC Order");
    orderCombo.select(accatSettings.getSortOrder());
   
    toggleButton.setSelection(true);
    // temp code
    // expandButton.setVisible(false);
    filterButton.setVisible(false);
    filterCheck.setVisible(false);
    showCatCheck.setVisible(false);
   
  }
 
  private void UpdateButtons()
  {
    String[] names = orderedItems[iCurrentList].GetCatagories();
    for (int btn = 0; btn<CATAGORYBUTTONS;btn++)
    {       
      if (btn<names.length)
      {
        catButtons[btn].setText(names[btn].replaceAll("&","&&"));
        catButtons[btn].setVisible(true);       
      }
      else
      {
        catButtons[btn].setVisible(false);       
      }           
    }   
  }
 
  void CreateListeners()
  {
    itemTree.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onSelectItem(evt);
      }     
    });
    orderCombo.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onChangeListOrder(evt.widget);
      }
    });
    showCatCheck.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onUpdateList();
      }     
    });
    showAvailCheck.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onShowAvailable();
      }     
    });
    showMissingCheck.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onShowMissing();
      }     
    });
    filterCheck.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onUpdateList();
      }
    });
    filterButton.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onFilter();
      }
    })
    amountText.addModifyListener(new ModifyListener(){
      public void modifyText(ModifyEvent evt){
        setAmount(evt);
      }
    });
    findText.addModifyListener(new ModifyListener(){
      public void modifyText(ModifyEvent evt){
        findItemByText(((Text)evt.widget).getText(),false);
      }
    });
    nextButton.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onFindNext();
      }
    });
    expandButton.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onHandleExpandButton();
      }
    });
    for (int btn = 0; btn<CATAGORYBUTTONS;btn++)
    {     
      catButtons[btn].addSelectionListener (new SelectionAdapter(){
        public void widgetSelected(SelectionEvent evt){         
          onHandleCatagoryButton(evt.widget);
        }       
      }
      );
    }   
  }
   
  void CreateMenu (Shell shell){
    Menu menu = new Menu(shell, SWT.BAR);
    shell.setMenuBar(menu);
    MenuItem fileItem = new MenuItem(menu,SWT.CASCADE);
    fileItem.setText("&File");   
    Menu fileMenu = new Menu(shell,SWT.DROP_DOWN);
    fileItem.setMenu(fileMenu);
    MenuItem itemNew = new MenuItem(fileMenu,SWT.PUSH);
    MenuItem itemLoad = new MenuItem(fileMenu,SWT.PUSH);
    itemRecent = new MenuItem(fileMenu,SWT.CASCADE);
    MenuItem itemSave = new MenuItem(fileMenu,SWT.PUSH);
    MenuItem itemSaveAs = new MenuItem(fileMenu,SWT.PUSH);
    //MenuItem itemExport = new MenuItem(fileMenu,SWT.PUSH);
    new MenuItem(fileMenu,SWT.SEPARATOR);
    MenuItem itemExit = new MenuItem(fileMenu, SWT.PUSH);
   
    itemNew.setText("&New");
    itemLoad.setText("&Open ...");
    itemRecent.setText("&Recent files");
    itemSave.setText("&Save");
    itemSaveAs.setText("Save &As ...");
    //itemExport.setText("Ex&port Data...");
    itemExit.setText("E&xit");
   
    BuildRecentMenu();
   
   
    itemNew.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){       
        onNewFile();     
      }
    });
    itemLoad.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){       
        onLoadFile();     
      }
    });
   
    itemSave.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onSaveFile();
      }
    });
   
   
    itemSaveAs.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){       
        onSaveFileAs();     
      }
    });
   
//    itemExport.addSelectionListener(new SelectionAdapter(){
//      public void widgetSelected(SelectionEvent evt){
//        onExport();
//      }
//    });   
//   
    itemExit.addSelectionListener (new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        onExit();
      }
    });   
  }
 
  public Shell InitShell(Display display){
    m_basePath = org.tcm1998.utils.ResourceUtils.getProgramPath("no_pic.png");
    Create (display);
    extendCatagories.setSelection(false);
    onHandleCatagoryButton(catButtons[0]);   
    onUpdateList();
    minimumDlgSize = m_shell.getMinimumSize();
//    exportwnd  = new ExportDlg(m_shell,0);
    filterwnd = new FilterDlg(m_shell,0);
    m_shell.open();     
    while (!m_shell.isDisposed())
      if(!m_display.readAndDispatch())
        m_display.sleep();
    return m_shell;
  }
 
  private void onShowAvailable(){
    showMissingCheck.setSelection(false);
    accatSettings.setShowAvailable(showAvailCheck.getSelection());
    accatSettings.setShowMissing(false);
    onUpdateList();
  }
 
  private void onShowMissing(){
    showAvailCheck.setSelection(false);
    accatSettings.setShowMissing(showMissingCheck.getSelection());
    accatSettings.setShowAvailable(false);       
    onUpdateList();
  }
 
  private void onUpdateList(){
    accatSettings.setShowCatagories(showCatCheck.getSelection());
    //accatSettings.setUsefilter(filterCheck.getSelection());
    fillItemList(/*iCurrentCatagory*/);
    updateHeader();
    itemTree.setFocus();
  }
 
  private void fillItemList(/*int p_iCatagory*/){
    itemTree.setRedraw(false);
    listedItems = 0;
    int itemFilteredOutByCatagory = 0;
    availableItems= 0;
    boolean showGroups = showCatCheck.getSelection();
    String lastGroup="";
    String currentGroup = "";
    TreeItem lastGroupItem = null;
    TreeItem item;
    byte avail;
    itemTree.removeAll();
    int iNumItems = orderedItems[iCurrentList].GetNumberOfItems(/*p_iCatagory*/);
    for (int x=0;x < iNumItems; x++){
      int id = orderedItems[iCurrentList].GetBaseItemID(x);
      avail = player.GetAvailabilty(id);
      int filterType = isItemFiltered(x);
      switch (filterType){
      case 0// not filtered
        listedItems++;
        if (showGroups){
          currentGroup = orderedItems[iCurrentList].GetGroupName(x);
          if (currentGroup != lastGroup){
            lastGroup = currentGroup;
            if (lastGroupItem != null){
              updateItemParent(lastGroupItem.getItem(0));
              lastGroupItem.setExpanded(true);
            }
            lastGroupItem = new TreeItem(itemTree,SWT.NULL);
            lastGroupItem.setText(lastGroup);
         
          item = new TreeItem(lastGroupItem,SWT.NULL);         
        }
        else {
          item = new TreeItem(itemTree,SWT.NULL);
          itemIDs.put(item, new Integer(id));
        }
       
        //int itemindex = itemColl.GetIndex(orderedItems[iCurrentList].GetBaseItemID(x));
        //item.setText(itemColl.GetItemName(itemindex));
        item.setText(itemColl.GetItemName(id));
        if (itemColl.IsUnOrderable(id)){
        //if (itemColl.IsUnOrderable(itemindex)){
          Font font = item.getFont();
          FontData fontdata[] = font.getFontData();
          fontdata[0].setStyle(SWT.BOLD);
          Font newFont = new Font(m_display,fontdata[0]);
          item.setFont(newFont);       
        }
        switch (avail & 3){
        case PlayerData.NOT_AVAILABLE:
          item.setChecked(false);
          item.setGrayed(false);
          break;
        case PlayerData.AVAILABLE:
          item.setChecked(true);
          item.setGrayed(false);         
          break;
        case PlayerData.WISHLIST:
          item.setChecked(true);
          item.setGrayed(true);     
        }
      break;
      case 1:
        break;
      case 2// catagory filter
        itemFilteredOutByCatagory++;
        break;
      }
      if ((avail == PlayerData.AVAILABLE) && (filterType !=2)){
        availableItems++;
      }
    } // end for
    totalItemsInCatagories = iNumItems -  itemFilteredOutByCatagory;
    if (showGroups){
      updateItemParent(lastGroupItem.getItem(0))
      lastGroupItem.setExpanded(true);
    }
    itemTree.setRedraw(true);
    m_shell.pack();
    m_shell.setMinimumSize(m_shell.getSize());
  }
 
  private void updateItemParent (TreeItem item){
    boolean allChecked = true;
    boolean someChecked = false;
    boolean checked = false;
    TreeItem parentItem = item.getParentItem();
    if (parentItem != null){
      TreeItem items[] = parentItem.getItems();     
      for (int idx = 0;idx < items.length;idx++){
        checked = items[idx].getChecked();
        allChecked &= checked;
        someChecked |= checked;       
      }
      parentItem.setChecked(someChecked);
      parentItem.setGrayed(someChecked & !allChecked);     
    }   
  }
 
  private void updateChilds (TreeItem item, byte avail){
    int count = item.getItemCount();
    if (count >0){
      boolean grayed = item.getGrayed();
      boolean checked = item.getChecked();         
      for (int idx = 0;idx < count; idx++){
        int id = itemColl.FindItemId(item.getItem(idx).getText());
        item.getItem(idx).setGrayed(grayed);
        item.getItem(idx).setChecked(checked);
        if (id != -1){
          int oldAvail = player.GetAvailabilty(id);
          player.SetAvailability(id, avail);
          if (avail != oldAvail){
            bModified = true;
            updateTitle();
         
          if ((avail == PlayerData.AVAILABLE) & (oldAvail != PlayerData.AVAILABLE)){
            availableItems++;
          }
          if ((avail != PlayerData.AVAILABLE) & (oldAvail == PlayerData.AVAILABLE)){
            availableItems--;
          }
        }       
      }     
    }
  }
 
  private void updateHeader(){
    String header;
    int numTotal = totalItemsInCatagories;   
    header = /*itemColl.GetCatagoryName(iCurrentCatagory) + */
           " (" + availableItems + "/" + numTotal + ")";
    if (listedItems != numTotal){
      header += "  Listed:" + listedItems;     
    }
    treeHead.setText(header);
    treeHead.pack();
  }
 
  private int isItemFiltered(int item){
    int retVal = 0;
    byte avail = player.GetAvailabilty(orderedItems[iCurrentList].GetBaseItemID(item));
    if ((showAvailCheck.getSelection()) && (avail != PlayerData.AVAILABLE)){
      retVal = 1;
    }
    if ((showMissingCheck.getSelection()) && (avail == PlayerData.AVAILABLE)){
      retVal = 1;
    }
    if ((filterCheck.getSelection()) && (itemColl.IsFiltered(item,BaseItemCollection.FILTER_PRIOS-1)))
    {
      retVal = 1;
    }
    if (orderedItems[iCurrentList].IsFiltered(item))
    {
      retVal = 2;
    }
    return retVal; 
  }
   
  private void onHandleCatagoryButton(Widget item){
    int btn = -1;
    for (int i =0;i < CATAGORYBUTTONS;i++){
      if (item.equals(catButtons[i])){
        btn = i;
      }
    }
    if (btn != -1)
    {
      boolean add = !(CurrentCatagories.contains(new Integer(btn)));
      //iCurrentCatagory = btn;
      Font font = catButtons[btn].getFont();
      FontData fontdata[] = font.getFontData();
      fontdata[0].setStyle(SWT.NORMAL);
      Font fontNormal = new Font(m_display,fontdata[0]);
      fontdata[0].setStyle(SWT.BOLD | SWT.ITALIC);
      Font fontBI = new Font(m_display, fontdata[0]);
      if (!extendCatagories.getSelection())
      {
        for (int i=0; i<CurrentCatagories.size();i++)
        {
          catButtons[((Integer)CurrentCatagories.get(i)).intValue()].setFont(fontNormal);         
        }
        CurrentCatagories.clear();
      }     
      if (add)
      {
        CurrentCatagories.add(new Integer(btn));
        catButtons[btn].setFont(fontBI);
      }
      else
      {
        CurrentCatagories.remove(new Integer(btn));
        catButtons[btn].setFont(fontNormal);
      }
     
      ItemFilter filter = new ItemFilter("test");     
      for (int cat = 0; cat < CurrentCatagories.size();cat++)
      {
        filter.addCriteria("CT",new int[]{((Integer)(CurrentCatagories.get(cat))).intValue()+1},false);
      }
      orderedItems[iCurrentList].doFilter(filter);
      onUpdateList();         
    }
    m_shell.pack();
  }
 
  private void onHandleExpandButton(){   
    int vspace = ((GridLayout)m_shell.getLayout()).verticalSpacing;
    expanded = !expanded;
    if (expanded){
      m_shell.setRedraw(false);
      infoPanelLayoutData.exclude = false;
      Point totalSize = m_shell.getSize();
      m_shell.layout();
      Point infoPanelSize = infoPanel.getSize();
      m_shell.setMinimumSize(totalSize.x, totalSize.y+infoPanelSize.y + vspace);
      m_shell.pack();     
      m_shell.setMinimumSize(minimumDlgSize.x, minimumDlgSize.y + infoPanelSize.y + vspace);
      expandButton.setText("<<< Hide Item Info");
      m_shell.setRedraw(true);
    }
    else{     
      expandButton.setText("Show Item Info >>>");
      infoPanelLayoutData.exclude = true;
      Point infoPanelSize = infoPanel.getSize();
      infoPanel.setSize(0, 0);
      Point totalSize = m_shell.getSize();
      m_shell.setMinimumSize(totalSize.x,totalSize.y-infoPanelSize.y - vspace);
      m_shell.pack()
      m_shell.setMinimumSize(minimumDlgSize);
    }   
  }
   
  private void onChangeListOrder(Widget widget){
    iCurrentList = ((Combo)widget).getSelectionIndex();
    UpdateButtons();   
    accatSettings.setSortOrder(iCurrentList);
   
    ItemFilter filter = new ItemFilter("test");
    for (int cat = 0; cat < CurrentCatagories.size();cat++)
    {
      filter.addCriteria("CT",new int[]{((Integer)(CurrentCatagories.get(cat))).intValue()+1},false);
    }
    orderedItems[iCurrentList].doFilter(filter);
    onUpdateList();   
  }

  private void onSelectItem(SelectionEvent evt){
    TreeItem treeitem = (TreeItem)evt.item;
    int id = ((Integer)itemIDs.get(treeitem)).intValue();   
    byte oldAvail = PlayerData.NOT_AVAILABLE;
    byte avail = PlayerData.NOT_AVAILABLE;
    if ((evt.detail & SWT.CHECK) != 0){
      if (markAvailButton.getSelection()){
        treeitem.setGrayed(false);
        treeitem.setChecked(true);
        avail = PlayerData.AVAILABLE;
      }
      else if (markMissingButton.getSelection()){
        treeitem.setGrayed(false);
        treeitem.setChecked(false)
        avail = PlayerData.NOT_AVAILABLE;
      }
      else if (wishListButton.getSelection()){
        treeitem.setChecked(true);
        treeitem.setGrayed(true);
        avail = PlayerData.WISHLIST;
      }
      else{ // toggle item
        treeitem.setGrayed(false);
        avail = (treeitem.getChecked()?PlayerData.AVAILABLE:PlayerData.NOT_AVAILABLE);
      }
      updateItemParent(treeitem);
      updateChilds(treeitem, avail);
      if (id != -1){
        oldAvail = player.GetAvailabilty(id);       
        player.SetAvailability(id, avail);
        if (avail != oldAvail){
          bModified = true;
          updateTitle();
        }
        if ((avail == PlayerData.AVAILABLE) & (oldAvail != PlayerData.AVAILABLE)){
          availableItems++;
        }
        if ((avail != PlayerData.AVAILABLE) & (oldAvail == PlayerData.AVAILABLE)){
          availableItems--;
        }
      }
      updateHeader();
    }
    else{
      if (id != -1){
        amountText.setVisible(true);
        amountLabel.setVisible(true);
        //int amount = player.GetAmount(itemColl.GetIndex(orderedItems[iCurrentList].GetBaseItemID(index)));
        int amount = player.GetAmount(id);
        amountText.setText(Integer.toString(amount));
        displayItemInfo(id);
      }
      else{
        amountText.setVisible(false);
        amountLabel.setVisible(false);       
      }
    }
  }
 
  void displayStyledText(StyledText label, String text)
  {
           
    int count = 0;
    int pos = text.indexOf('*');
   
    while (pos != -1)
    {
      count++;
      pos = text.indexOf('*', pos+1);         
    }
    StyleRange[] ranges = new StyleRange[count];
    pos = text.indexOf('*');
    int index = 0;
    while (pos != -1)
    {
      int r = 0;
      int g = 0;
      int b = 0;
      switch(text.charAt(pos+1))         
      {
      case 'G':
        r = 0; g = 128; b = 0;
        break;
      case 'Y':
        r = 200; g = 200; b = 0;
        break;
      case 'R':
        r = 255; g = 0; b = 0;
        break;                     
      }         
      int pos2 = text.indexOf('#',pos+1);
      text = text.substring(0, pos) + text.substring(pos+1, pos2) + text.substring(pos2+1);         
      Color color = new Color(m_display,r,g,b);
      ranges[index] = new StyleRange(pos,pos2-pos-1,color,infoPanel.getBackground(),SWT.BOLD);
      //color.dispose();
      index++;
      pos = text.indexOf('*');         
    }       
    label.setText(text);
    label.setStyleRanges(ranges);
  }
   
  void displayItemInfo(int id)
  {
    infoLine1a.setText("");
    infoLine1b.setText("");
    infoLine2.setText("");
    infoLine3.setText("");
    infoLine4.setText("");
    infoLine5.setText("");
    infoLine6.setText("");
    priceLineNook.setText("");
    priceLineRedd.setText("");
    priceLineSell.setText("");
    String temp;
    infoLine1a.setText(itemColl.GetItemName(id));
    String catagories[] = {"furniture","wallpaper","carpets","clothing","umbrellas","accessories","stationery","gyroids",
                 "fossils","music","fish","insects","patterns","paintings","tools","flowers"};
    int catIdx = -1;
    String catName = orderedItems[iCurrentList].GetCatagoryName(id);
    for (int iCat = 0; iCat < catagories.length;iCat++)
    {
      if (catagories[iCat].equals(catName))
      {
        catIdx = iCat;       
      }     
    }
    switch (catIdx)
    {
    case -1:
      break; // error
    case 0: // furniture
    case 13: // paintings
      //infoLine1b.setText("Group: " + itemColl.GetItemGroup(id));
      temp = itemColl.GetItemSet(id);
      if ((!temp.equals("")) && (!temp.equals("0"))){
        infoLine2.setText("Part of: " + temp);
      }
      infoLine3.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      displayStyledText(infoLine4, "Colors: " + itemColl.GetColours(id));
      infoLine1b.setText("Size: " + Integer.toString(itemColl.GetItemSize(id)));
      infoLine5.setText(itemColl.GetLucky(id).equals("1") ? "Lucky" : "");
      infoLine6.setText("Genre: " + itemColl.GetGenre(id));
      break;
    case 1// wallpaper
    case 2// carpets
      infoLine1b.setText("Group: " + itemColl.GetItemGroup(id));
      temp = itemColl.GetItemSet(id);
      if ((!temp.equals("")) && (!temp.equals("0"))){
        infoLine2.setText("Part of: " + temp);
      }
      infoLine3.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      break;
    case 3: // clothing
      infoLine1b.setText("Group: " + itemColl.GetItemGroup(id));
      infoLine2.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      //infoLine3.setText("Season: " + itemColl.GetMonths(id));
      infoLine3.setText("Season:" + itemColl.GetItemPropertyText(id, "Season"));
     
      break;
    case 4: // umbrella's
    case 5: // accessories
    case 6: // stationery
    case 12: // patterns
    case 14: // tools
      {
      String delimiters = ", ";
      String avail = blockIfEmpty(itemColl.GetItemAvailability(id),"Available: ")
      String backAvail = avail;
      Rectangle r = infoLine2.getBounds();
      GC gc = new GC(infoLine2);
      Point p2 = gc.textExtent(avail);
      while (p2.x > r.width)
      {       
        int lastIdx = 0;
        for (int iDelimited = 0; iDelimited < delimiters.length();iDelimited++)
        {       
          int idx = avail.substring(0,avail.length()-1).lastIndexOf(delimiters.charAt(iDelimited));
          if (idx > lastIdx)
          {
            lastIdx = idx;
          }
        }
        avail = avail.substring(0, lastIdx+1)
        p2 = gc.textExtent(avail);
     
      gc.dispose();
      infoLine2.setText(backAvail.substring(0,avail.length()));
      infoLine3.setText(backAvail.substring(avail.length()));
     
      break;
    case 7: // gyroids
      temp = itemColl.GetItemSet(id);
      if ((!temp.equals("")) && (!temp.equals("0"))){
        infoLine2.setText("Part of: " + temp);
      }
      infoLine3.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      break;
    case 8: // fossils
      infoLine2.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      break;
    case 10: // fish
    case 11: // insects
      infoLine2.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      //infoLine3.setText("Season: " + itemColl.GetMonths(id));
      infoLine3.setText("Season:" + itemColl.GetItemPropertyText(id, "Season"));
      infoLine4.setText("Time: " + itemColl.GetTOD(id));
      //infoLine5.setText(blockIfEmpty(itemColl.GetPeakMonths(id),"Peak Season: "));
      infoLine5.setText(blockIfEmpty(itemColl.GetItemPropertyText(id, "PeakSeason"),"Peak Season: "));
      infoLine6.setText(blockIfEmpty(itemColl.GetPeakTOD(id), "Peak time: "));
      break;
    case 9: // Music
      infoLine2.setText("Available: The Roost (Saturdays 8PM-Midnight)");
      break;
    case 15: // F&F
      infoLine2.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      break;
    case 16: // Pictures (disabled)
      infoLine2.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      infoLine3.setText(blockIfEmpty(itemColl.GetItemSet(id), "Species: "));
      temp = itemColl.GetItemGroup(id);
      if (temp != "-"){
        infoLine4.setText(blockIfEmpty(temp, "Personality: "));
      }     
      //infoLine5.setText(blockIfEmpty(itemColl.getBirthday(id),"Birthday: "));
      break;
    case 17: // Special (disabled)
      infoLine2.setText(blockIfEmpty(itemColl.GetItemAvailability(id),"Available: "));
      infoLine1b.setText("Size: " + Integer.toString(itemColl.GetItemSize(id)));
      break;     
    }
    int nookPrice = itemColl.GetItemNormalPrice(id);
    if (nookPrice != 0){
      priceLineNook.setText("Nook: " + Integer.toString(nookPrice));
      if (itemColl.IsUnOrderable(id)){
        priceLineUnorderable.setText("Not orderable!");       
      }
      else{
        priceLineUnorderable.setText("");
      }
    }
    else{
      priceLineNook.setText("Nook: Not selling!");
      priceLineUnorderable.setText("");
    }
   
    int reddPrice = itemColl.GetItemReddPrice(id);
    if (reddPrice != 0){
      priceLineRedd.setText("Redd: " + Integer.toString(reddPrice));     
    }
    else{
      priceLineRedd.setText("Redd: -");
    }
    int sellPrice = itemColl.GetItemSellPrice(id);   
    if (sellPrice != -1){
      priceLineSell.setText("Sell value: " + Integer.toString(sellPrice));
    }
    else{
      priceLineSell.setText("Sell value: ???");
    }
   
    displayItemPicture (id);
    infoPanel.layout();
  }
 
  private void displayItemPicture (int id){
    String catName = itemColl.GetCatagoryName(orderedItems[iCurrentList].GetCatagory(id));
    String itemName = itemColl.GetItemName(id);
    itemName = itemName.replaceAll("/","-");
    String picturePath = m_basePath + "images/" + catName + "/" + itemName + ".png";
    File pictureFile = new File(picturePath);
    if (itemPicture != null)
    {
      itemPicture.dispose();     
    }
    if (pictureFile.exists()){
      itemPicture = new Image(m_display,picturePath);     
    }
    else{
      itemPicture = new Image(m_display,org.tcm1998.utils.ResourceUtils.openBinaryResource("no_pic.png"));     
    }
    picture.setImage(itemPicture);
  }
 
  private String blockIfEmpty (String text, String prefix)
  {
    String result = "";
    if (!text.equals(""))
    {
      result = prefix + text;
    }
    return result;   
  }
 
 
  private void setAmount(ModifyEvent evt){
    byte amount = 0;
    TreeItem[] selection = itemTree.getSelection();
    if (selection.length >0){
      int id = itemColl.FindItemId(selection[0].getText());
      if (id != -1){
        String amountTxt = ((Text)evt.widget).getText();
        try{
          amount = Byte.parseByte(amountTxt);
          //player.SetAmount(itemColl.GetIndex(orderedItems[iCurrentList].GetBaseItemID(index)),amount);
          player.SetAmount(id,amount);
        }
        catch(NumberFormatException e){         
        }
      }
    }
  }
 
 
  private TreeItem getNextTreeItem(TreeItem item){
    TreeItem retVal = null;
    TreeItem tempItem = null;
    int index =0;
    if (item.getItemCount() > 0){
      retVal = item.getItem(0);
    }
    else{
      tempItem = item.getParentItem();
      if (tempItem == null){
        index = itemTree.indexOf(item);
        if (index < (itemTree.getItemCount()-1)){
          retVal = itemTree.getItem(index+1);
        }
        else{
          retVal = null;
        }       
      }
      else{
        index = tempItem.indexOf(item);
        if (index < (tempItem.getItemCount()-1)){
          retVal = itemTree.getItem(index+1);
        }
        else{
          index = itemTree.indexOf(tempItem);
          if (index < (itemTree.getItemCount()-1)){
            retVal = itemTree.getItem(index+1);
          }
          else{           
            retVal = null;
          }
        }
      }
    }
    return retVal;
  }
 
 
  private void findItemByText(String itemText, boolean findNext){
    TreeItem itemPart = null;
    TreeItem itemPerfect = null;
    TreeItem item = null;
    if (itemTree.getItemCount()>0){
      TreeItem items[] = itemTree.getSelection();   
      if ((!findNext) || (items.length == 0)){
        item = itemTree.getItem(0);       
      }
      else{
        item = items[0];
        item = getNextTreeItem(item);
        if (item == null){
          item = itemTree.getItem(0);
        }       
      }
      TreeItem startItem = item;
      do{
        if ((itemPart == null) && (item.getText().toLowerCase().indexOf(itemText.toLowerCase()) != -1)){
          itemPart = item;
        }
        if ((item.getText().equalsIgnoreCase(itemText)) && (!findNext)){
          itemPerfect = item;
        }
        item = getNextTreeItem(item);
        if ((item == null) && (findNext)){
          item = itemTree.getItem(0);
        }
      }while ((item != null) && (item != startItem) && (itemPerfect == null));
      if (itemPerfect != null){
        itemTree.setSelection(itemPerfect);       
      }
      else if (itemPart != null){
        itemTree.setSelection(itemPart);       
      }     
    }
  }
 
  private void onFindNext(){
    findItemByText(findText.getText(),true);   
  }
 
  private void onNewFile(){
    boolean bOKtoClear = true;   
    if (bModified){
      MessageBox mb = new MessageBox(m_shell,SWT.ICON_QUESTION|SWT.YES|SWT.NO);
      mb.setText("Save First?");
      mb.setMessage("The current catalog is not saved\nDo you want to save it first?");
      if (mb.open() == SWT.YES){
        bOKtoClear = onSaveFile();       
      }
    }
    if (bOKtoClear){   
      player.clearAllItems(itemColl.GetAccatIds());
      onUpdateList();
    }
  }
 
  private void onLoadFile(){
    boolean bOKtoOpen = true;
    String filename;
    if (bModified){
      MessageBox mb = new MessageBox(m_shell,SWT.ICON_QUESTION|SWT.YES|SWT.NO);
      mb.setText("Save First?");
      mb.setMessage("The current catalog is not saved\nDo you want to save it first?");
      if (mb.open() == SWT.YES){
        bOKtoOpen = onSaveFileAs();       
      }
    }
    if (bOKtoOpen){
      FileDialog fd = new FileDialog (m_shell,SWT.OPEN);
      filename = fd.open();
      if (filename != null){
        DoLoadFile(filename);   
      }
    }
  } 
 
  private boolean onSaveFile(){
    boolean retVal = false;
    if (currentFilename == null){
      retVal = onSaveFileAs();
    }
    else{
      if (!player.saveInventory(currentFilepath,iCurrentGame)){
        MessageBox mb = new MessageBox (m_shell, SWT.ICON_ERROR|SWT.OK);
        mb.setText("Error saving file");
        mb.setMessage("Something went wrong while trying to save this file");
        mb.open();
        retVal = false;
      }
      else{
        retVal = true;
      }
    }
    if (retVal){ // succesfull save ?
      bModified = false;
      updateTitle();
      accatSettings.StoreInHistory(currentFilepath);
      BuildRecentMenu();
   
    return retVal;
  }

  private boolean onSaveFileAs(){
    boolean retVal = true;
    String filename;
    FileDialog fd = new FileDialog (m_shell, SWT.SAVE);
    filename = fd.open();
    if (filename != null){
      if (!player.saveInventory(filename,iCurrentGame)){
        MessageBox mb = new MessageBox (m_shell, SWT.ICON_ERROR|SWT.OK);
        mb.setText("Error saving file");
        mb.setMessage("Something went wrong while trying to save this file");
        mb.open();
        retVal = false;
      }
      else{
        setCurrentFilename(filename);
      }
    }
    else{
      retVal = false;
    }
    if (retVal){ // succesful save ?
      bModified = false;
      updateTitle();
      accatSettings.StoreInHistory(filename);
      BuildRecentMenu();
    }   
    return retVal;
  }
 
  private void BuildRecentMenu()
  {
    // Until I know how to do this more effeciently
    // the recent file menu is thrown away each time
    // and completely rebuilt
    Menu fileMenu = itemRecent.getParent();
    Menu recentMenu = new Menu(fileMenu);
    itemRecent.setMenu(recentMenu);
    String[] recentFiles = accatSettings.GetHistory();
    for (int iRecent=recentFiles.length-1;iRecent >=0;iRecent--)
    {
      MenuItem item = new MenuItem(recentMenu,SWT.PUSH);
      item.setText(recentFiles[iRecent]);
      item.addSelectionListener(new SelectionAdapter(){
        public void widgetSelected(SelectionEvent evt){       
          openRecentFile(evt.widget);     
        }
      });     
   
    itemRecent.setEnabled(recentFiles.length != 0);   
  }
 
  private void openRecentFile (Widget widget)
  {
    MenuItem item = (MenuItem)widget;
    DoLoadFile(item.getText());   
  }
 
  private void DoLoadFile(String filename)
  {   
    int gameID[] = new int[1];
    boolean succes = player.loadInventory(filename,itemColl.GetAccatIds(),true,gameID);
    if (succes)
    {
      if (gameID[0] != iCurrentGame)
      {
        iCurrentGame = gameID[0];
       
      }         
      succes = player.loadInventory(filename,itemColl.GetAccatIds(),false,gameID);
    }
    if (!succes){
      MessageBox mb = new MessageBox (m_shell,SWT.ICON_ERROR|SWT.OK);
      mb.setText("Error loading file");
      mb.setMessage("Invalid file format!");
      mb.open();
    }
    else{
      onUpdateList();
      setCurrentFilename(filename);
      updateTitle();
    }
  }
 
//  private void onExport(){
//    exportwnd.open();
//    if (exportwnd.exportSettings.d_return > 0){
//      ExportDlg.DlgData s = exportwnd.exportSettings;
//      CatalogExport exp = null;
//      switch (s.d_format){
//      case 0:
//        exp = new CatalogTextExport(m_display, itemColl);
//        break;
//      case 1:
//        exp = new CatalogHTMLExport(m_display, itemColl);
//        break;
//      case 2:
//        exp = new CatalogPHPBBExport(m_display, itemColl);
//        break;
//      case 3:
//        exp = new CatalogCSVExport(m_display, itemColl);
//      }     
//      exp.SetOrder(orderedItems[s.d_sortorder]);
//      exp.SetItemFilter(s.d_AvailSelected,s.d_MisSelected,s.d_WishSelected,
//                s.d_catagories);
//      exp.SetTitle(s.d_title);
//      exp.SetHeader(s.d_header);
//      exp.SetFooter(s.d_footer);
//      exp.SetTarget(s.d_exportFile);
//      exp.SetPlayer(player);
//      exp.ExportCatalog();     
//    } 
//  }
 
  private void onFilter()
  { 
    filterwnd.open(m_shell, itemfilter)
  }
 
  private void onFilterUpdated()
  {
    itemColl.doFilter(itemfilter);
    onUpdateList();
  }
 
 
  private void onExit(){
    m_shell.close();
  }
 
  private void onClose(ShellEvent e){
    Point loc = m_shell.getLocation();
    accatSettings.setLocation(loc.x,loc.y);   
    if (bModified){
      MessageBox mb = new MessageBox (m_shell, SWT.ICON_WARNING|SWT.YES|SWT.NO|SWT.CANCEL);
      mb.setText("Discard changes?");
      mb.setMessage("The current catalog is not saved\nAre you sure you want to quit without saving?");
      int res = mb.open();
      switch (res){
      case SWT.CANCEL:
        e.doit = false;
        break;
      case SWT.YES:
        e.doit = true;
        break;
      case SWT.NO:
        if (onSaveFile()){       
          e.doit = true;
        }
        else{
          e.doit = false;
        }
      }
    }
  }
 
  private void setCurrentFilename(String filename){
    File file = new File(filename);
    currentFilename = file.getName();
    currentFilepath = filename;  // full path to the same file
  }
 
  private void updateTitle(){
    String title = "ACCAT v0.12a";
    if (currentFilename != null){
      title += " - " + currentFilename;
    }
    if (bModified){
      title += " *";
    }
    m_shell.setText(title);
  }
 
 
}
 
TOP

Related Classes of org.tcm1998.accat.AccatDlg

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.