Logo Search packages:      
Sourcecode: yahtzeesharp version File versions  Download package

dlgOpen.cs

/*************************************************************************
*                      dlgOpen.cs                                        *
*                                                                        *
* Copyright (C) 2009 Andrew York <yahtzeesharp@brdstudio.net>            *
*                                                                        *
*************************************************************************/
/*
* 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 3 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, see <http://www.gnu.org/licenses/>
*/

using System;
using System.Data;
using System.IO;
using Gtk;

namespace YahtzeeSharp
{
      
      /// <summary>
      /// Dialog to manged and open games
      /// </summary>
00033       public partial class dlgOpen : Gtk.Dialog
      {
            private Gtk.TreeModelFilter filter;
            private static string SavePath = System.Environment.GetEnvironmentVariable("HOME") + "/.YahtzeeSharp/";
            private DataSet ds = new DataSet();
            private string strPlayerName = null;
            private int intGameNumber = -1;
            
            /// <summary>
            ///  the main function for the open game dialog
            /// also set up the treeview and its elements
            /// </summary>
00045             public  dlgOpen()
            {
                  Build();
                  #region "Tree Layout"
                  //
                  // Open TreeView
                  //
                  

                  // Create a column for the game ID title
                  Gtk.TreeViewColumn colGameID = new Gtk.TreeViewColumn ();
                  colGameID.Alignment = 0.5f;
                  colGameID.Title = "ID";

                  // Create a column for the player name title
                  Gtk.TreeViewColumn colPlayerName = new Gtk.TreeViewColumn ();
                  colPlayerName.Title = "Player Name";

                  Gtk.TreeViewColumn colScore = new Gtk.TreeViewColumn ();
                  colScore.Alignment = 0.5f;
                  colScore.Title = "Score";
                  
                  // Create a column for the date title
                  Gtk.TreeViewColumn colDate = new Gtk.TreeViewColumn ();
                  colDate.Alignment = 0.5f;
                  colDate.Title = "Date";
                  
                  // Create a column for the date title
                  Gtk.TreeViewColumn colComplete = new Gtk.TreeViewColumn ();
                  colComplete.Alignment = 0.5f;
                  colComplete.Visible =false;
                  colComplete.Title = "Finished";

                  
                  // Add the columns to the TreeView
                  gvOpen.AppendColumn(colGameID);
                  gvOpen.AppendColumn (colPlayerName);
                  colPlayerName.Expand = true;
                  gvOpen.AppendColumn (colScore);
                  gvOpen.AppendColumn (colDate);
                  gvOpen.AppendColumn (colComplete);
             
                  // set up the columns
                  Gtk.CellRendererText cellGameID = new Gtk.CellRendererText ();
                  cellGameID.Width = 25;
                  cellGameID.Xalign = 0.5f;
                   colGameID.PackStart (cellGameID, true);
                  
                  Gtk.CellRendererText cellPlayerName = new Gtk.CellRendererText ();
                  cellPlayerName.Width = 150;
                   colPlayerName.PackStart (cellPlayerName, true);
                  
                  Gtk.CellRendererText cellScore = new Gtk.CellRendererText ();
                  cellScore.Width = 65;
                  cellScore.Xalign = 1.0f;
                   colScore.PackStart (cellScore, true);
                  
                  Gtk.CellRendererText cellDate = new Gtk.CellRendererText ();
                  cellDate.Width = 75;
                  cellDate.Xalign =1.0f;
                   colDate.PackStart (cellDate, true);
                  
                  Gtk.CellRendererToggle cellComplete= new Gtk.CellRendererToggle ();
                  cellComplete.Xalign =0.5f;
                  cellComplete.Sensitive = true;
                   colComplete.PackStart (cellComplete, true);
                   
                  // Tell the Cell Renderers which item(frmMain)s in the model to display
                  colGameID.AddAttribute (cellGameID, "text", 0);
                  colPlayerName.AddAttribute (cellPlayerName, "text", 1);
                  colScore.AddAttribute (cellScore, "text", 2);
                  colDate.AddAttribute (cellDate, "text", 3);
                  colComplete.AddAttribute (cellComplete, "active", 4);
                  
                  #endregion
                  
                  gvOpen.Model = LoadTree();
            }

            #region "Sets/Gets"
            
            public string GetPlayerName()
            {
                  return strPlayerName;
            }
            
            public int GetGameNumber()
            {
                  return intGameNumber;
            }
            #endregion "Sets/Gets"
            
            private Gtk.TreeModelFilter  LoadTree()
            {
                  
                  ListStore mModel = new ListStore(typeof(string),typeof(string),typeof(string), typeof(string));
                  try
                  {
                        ds.Clear();
                        
                        if(File.Exists(SavePath + "GameData.xml"))
                              ds.ReadXml(SavePath + "GameData.xml");
                        
                        if(ds.Tables.Count > 0)
                        {
                              
                              
                              if(ds.Tables["dtGameData"].Rows.Count <1)
                              {                                               
                                    MessageDialog md = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Info,  ButtonsType.Ok, "No Games have been saved at this time.");
                                    md.Run ();
                                    md.Destroy();
                                    this.Hide();
                              }
                              
                        foreach(DataRow dr in ds.Tables["dtGameData"].Rows)
                        {
                                    if(this.cbxCompletedGames.Active == false || Convert.ToBoolean(dr["colIsComplete"]) == false)
                                    {
                                    DateTime mDate = DateTime.Parse(dr["colDate"].ToString());
                                    mModel.AppendValues(dr["colGameID"].ToString(),dr["colPlayerName"].ToString(), dr["colScore"].ToString(), mDate.ToShortDateString(), Convert.ToBoolean(dr["colIsComplete"].ToString()));
                                    }
                        }
                        
                        // Instead of assigning the ListStore model directly to the TreeStore, we create a TreeModelFilter
                              // which sits between the Model (the ListStore) and the View (the TreeView) filtering what the model sees.
                              // Some may say that this is a "Controller", even though the name and usage suggests that it is still part of
                              // the Model.
                              filter = new Gtk.TreeModelFilter (mModel, null);
                              
                              // Specify the function that determines which rows to filter out and which ones to display
                              filter.VisibleFunc = new Gtk.TreeModelFilterVisibleFunc (FilterTree);
                              
                        }
                        else
                        {
                                    MessageDialog md = new MessageDialog (this, DialogFlags.DestroyWithParent, MessageType.Info,  ButtonsType.Ok, "No Games have been saved at this time.");
                                    md.Run ();
                                    md.Destroy();
                                    this.Hide();
                                    
                         }
                  }
                 catch(System.Exception ex)
                  {
                        frmError eForm = new frmError(ex.ToString());
                        eForm.Show();
                  }
                  return filter;
            
            }

            private bool FilterTree (Gtk.TreeModel model, Gtk.TreeIter iter)
            {
                  string PlayerName = model.GetValue (iter, 1).ToString();
                  PlayerName = PlayerName.ToLower();
            
                  if (txtFilter.Text == "")
                        return true;
       
                  if (PlayerName.IndexOf (txtFilter.Text.ToLower()) > -1)
                        return true;
                  else
                        return false;
            }
                        
                        
            protected virtual void OnBtnCloseClicked(object sender, System.EventArgs e)
            {
                        this.Hide();
            }

            protected virtual void OnBtnClearFilterClicked(object sender, System.EventArgs e)
            {
                  txtFilter.Text = "";
            }

            protected virtual void OnTxtFilterChanged(object sender, System.EventArgs e)
            {
                        filter.Refilter();
            }
            
            /// <summary>
            ///  a function to delete a game from the game data grid
            /// </summary>
00230             protected virtual void OnBtnDeleteClicked(object sender, System.EventArgs e)
            {
                        try
                        {
                              string GameID = null;
                              string UserName = null;
                              TreeModel model;
                              TreeIter mIter; 
                              int i = 0;
                              
                              if(gvOpen.Selection.GetSelected (out model, out mIter)) 
                              {
                                    i = gvOpen.Model.GetPath(mIter).Indices[0]; 
                                    UserName = gvOpen.Model.GetValue(mIter, 1).ToString();
                                    GameID = gvOpen.Model.GetValue(mIter, 0).ToString();
                              } 
                              
                              MessageDialog md = new MessageDialog (this, DialogFlags.Modal, MessageType.Question,  ButtonsType.YesNo, "Are you sure you want to delete\n\r the game for " + UserName + "?", "DELETE?");
                              ResponseType result = (ResponseType)md.Run ();
                              if (result == ResponseType.Yes)
                  {
                        // remove the game from the game data file
                        DataRow dr = ds.Tables["dtGameData"].Rows[i];
                        dr.Delete();
                        
                        ds.WriteXml(SavePath + "GameData.xml");
                        
                        // remove the scorecard data from the saves folder
                        string SaveFile =  SavePath +  @"/saves/g" + GameID.ToString() + ".xml";
                        if(File.Exists(SaveFile))
                              File.Delete(SaveFile);
                              
                        gvOpen.Model = LoadTree();
                  }                       
                              md.Destroy();
                        
                              
                  }
                   catch(System.Exception ex)
                        {
                              frmError eForm = new frmError(ex.ToString());
                              eForm.Show();
                        }
            }

            /// <summary>
            ///  Set the game we are looking to open returns the values needed to open a game
            ///  and destoys the existing form.
            /// </summary>
00279             protected virtual void OnBtnOpenClicked(object sender, System.EventArgs e)
            {
                  try
                        {
                              TreeModel model;
                              TreeIter mIter;
                              if(gvOpen.Selection.GetSelected (out model, out mIter)) 
                              {
                                    this.strPlayerName = gvOpen.Model.GetValue(mIter, 1).ToString();
                                    intGameNumber = int.Parse(gvOpen.Model.GetValue(mIter, 0).ToString());
                                    this.Respond(Gtk.ResponseType.Ok);  
                                    this.Hide();
                              }                                   
                  }
                   catch(System.Exception ex)
                        {
                              frmError eForm = new frmError(ex.ToString());
                              eForm.Show();
                        }
            }

            protected virtual void OnGvOpenRowActivated (object o, Gtk.RowActivatedArgs args)
            {
                        try
                        {
                              TreeModel model;
                              TreeIter mIter;
                              if(gvOpen.Selection.GetSelected (out model, out mIter)) 
                              {
                                    this.strPlayerName = gvOpen.Model.GetValue(mIter, 1).ToString();
                                    intGameNumber = int.Parse(gvOpen.Model.GetValue(mIter, 0).ToString());
                                    this.Respond(Gtk.ResponseType.Ok);  
                                    this.Hide();
                              }                             
                  }
                   catch(System.Exception ex)
                        {
                              frmError eForm = new frmError(ex.ToString());
                              eForm.Show();
                        }
            }

            protected virtual void OnCbxCompletedGamesClicked (object sender, System.EventArgs e)
            {
                  try
                  {
                        gvOpen.Model = LoadTree();
                  }                 
             catch(System.Exception ex)
                  {
                        frmError eForm = new frmError(ex.ToString());
                        eForm.Show();
                  }
            }

            
      }
}

Generated by  Doxygen 1.6.0   Back to index