using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using TradeIdeas.TIProData; using TradeIdeas.XML; using System.Xml; using TradeIdeas.TIProData.Configuration; using System.Windows.Forms; using Microsoft.Win32; using System.Runtime.InteropServices; namespace TradeIdeas.TIProGUI { public partial class GroupSortByForm : Form, ICultureListener { GroupSortBy _currentSettings; // What the dialog box is using. GroupSortBy _restoreSettings; // In case the user hits cancel. List _totalColumns; private List _phrases; private string _keepNewestText = "Keep Newset"; private string _keepOldestText = "Keep Oldest"; private string _keepAllText = "Keep All"; private string _ascendingText = "Ascending"; private string _descendingText = "Descending"; private GroupType _savedKeepingSymbolEnum; private SortType _savedSortDirectionEnum; private ColumnInfo _savedSortColumnInfo; public GroupSortByForm(GroupSortBy savedSettings, List columnList) { _totalColumns = columnList; _currentSettings = savedSettings; _restoreSettings = new GroupSortBy(null); _restoreSettings.CopyFrom(_currentSettings); //Initialize variables _savedKeepingSymbolEnum = _currentSettings._savedKeepingSymbolEnum; _savedSortDirectionEnum = _currentSettings._savedSortDirectionEnum; _savedSortColumnInfo = _currentSettings._savedSortColumnInfo; _phrases = GuiEnvironment.XmlConfig.Node("GROUP_SORT_BY").Node("PHRASES"); this.StartPosition = FormStartPosition.CenterParent; InitializeComponent(); CultureChanged(); LoadStaticLists(); LoadDynamicLists(); PopulateSelectedItems(); Icon = GuiEnvironment.Icon; Font = GuiEnvironment.FontSettings; } public void CultureChanged() { this.Text = _phrases.Node("WINDOW_TITLE").PropertyForCulture("TEXT", "***"); _keepNewestText = _phrases.Node("KEEP_NEWEST").PropertyForCulture("TEXT", "***"); _keepOldestText = _phrases.Node("KEEP_OLDEST").PropertyForCulture("TEXT", "***"); _keepAllText = _phrases.Node("KEEP_ALL").PropertyForCulture("TEXT", "***"); _ascendingText = _phrases.Node("ASCENDING").PropertyForCulture("TEXT", "***"); _descendingText = _phrases.Node("DESCENDING").PropertyForCulture("TEXT", "***"); keepingSymbolLabel.Text = _phrases.Node("KEEPING_SYMBOL").PropertyForCulture("TEXT", "***"); sortItemsLabel.Text = _phrases.Node("SORT_ITEM").PropertyForCulture("TEXT", "***"); sortingDirectionLabel.Text = _phrases.Node("SORT_DIRECTION").PropertyForCulture("TEXT", "***"); btnOK.Text = _phrases.Node("OK").PropertyForCulture("TEXT", "***"); btnCancel.Text = _phrases.Node("CANCEL").PropertyForCulture("TEXT", "***"); } private void LoadStaticLists() { keepingSymbolComboBox.Items.Clear(); keepingSymbolComboBox.Items.Add(_keepNewestText); keepingSymbolComboBox.Items.Add(_keepOldestText); keepingSymbolComboBox.Items.Add(_keepAllText); sortDirectionComboBox.Items.Clear(); sortDirectionComboBox.Items.Add(_ascendingText); sortDirectionComboBox.Items.Add(_descendingText); } private void PopulateSelectedItems() { if (_savedKeepingSymbolEnum == GroupType.KeepNewest) keepingSymbolComboBox.SelectedIndex = 0; else if (_savedKeepingSymbolEnum == GroupType.KeepOldest) keepingSymbolComboBox.SelectedIndex = 1; else keepingSymbolComboBox.SelectedIndex = 2; if (_savedSortDirectionEnum == SortType.Ascending) sortDirectionComboBox.SelectedIndex = 0; else sortDirectionComboBox.SelectedIndex = 1; // Check if sortItemsComboBox is empty if (sortItemsComboBox.Items.Count > 0) { if (_savedSortColumnInfo != null) { for (int i = 0; i < sortItemsComboBox.Items.Count; i++) { if (sortItemsComboBox.Items[i] as ColumnInfo == _savedSortColumnInfo) { sortItemsComboBox.SelectedIndex = i; } } } else { sortItemsComboBox.SelectedIndex = 0; _savedSortColumnInfo = sortItemsComboBox.Items[0] as ColumnInfo; } } // If sortitem is not in current list then select the first sortitem in the list. if (sortItemsComboBox.SelectedIndex < 0) { sortItemsComboBox.SelectedIndex = 0; _savedSortColumnInfo = sortItemsComboBox.Items[0] as ColumnInfo; } } private void LoadDynamicLists() { sortItemsComboBox.Items.Clear(); //TODO: Not all columns should be added to dropdown sort. Description column is one that comes to mind. if (_totalColumns != null) { foreach (ColumnInfo cI in _totalColumns) { sortItemsComboBox.Items.Add(cI); } } } private void btnOK_Click(object sender, EventArgs e) { //Save to currentSettings SaveSelectedItems(); _currentSettings._savedSortDirectionEnum = _savedSortDirectionEnum; _currentSettings._savedKeepingSymbolEnum = _savedKeepingSymbolEnum; _currentSettings._savedSortColumnInfo = _savedSortColumnInfo; DialogResult = System.Windows.Forms.DialogResult.OK; } private void SaveSelectedItems() { if (keepingSymbolComboBox.SelectedIndex == 0) _savedKeepingSymbolEnum = GroupType.KeepNewest; else if (keepingSymbolComboBox.SelectedIndex == 1) _savedKeepingSymbolEnum = GroupType.KeepOldest; else _savedKeepingSymbolEnum = GroupType.KeepAll; if (sortDirectionComboBox.SelectedIndex == 0) _savedSortDirectionEnum = SortType.Ascending; else _savedSortDirectionEnum = SortType.Descending; for (int i = 0; i < sortItemsComboBox.Items.Count; i++) { if (sortItemsComboBox.Items[i] == sortItemsComboBox.SelectedItem) { _savedSortColumnInfo = sortItemsComboBox.Items[i] as ColumnInfo; } } } private void btnCancel_Click(object sender, EventArgs e) { _currentSettings.CopyFrom(_restoreSettings); DialogResult = System.Windows.Forms.DialogResult.Cancel; } /*private string GetInternalCode(string description) { if (_totalColumns != null) { foreach (ColumnInfo cI in _totalColumns) { if (description == cI.Description) { return cI.InternalCode; } } } return ""; }*/ } public interface IGroupSortByForOwner { // For alerts and multistrategy. If you want to add actions to your window, // this is all you need to know! void CopyFrom(GroupSortBy source); void Load(XmlNode source); void Save(XmlNode destination); void LoadColumnData(List columnList); DialogResult ShowDialog(); GroupType SavedKeepingSymbolEnum { get; set; } SortType SavedSortDirectionEnum { get; set; } ColumnInfo SavedSortColumnInfo { get; set; } } public class GroupSortBy : IGroupSortByForOwner { readonly public Form _owner; public GroupType _savedKeepingSymbolEnum; public SortType _savedSortDirectionEnum; public ColumnInfo _savedSortColumnInfo; public List _totalColumns; public GroupSortBy(Form owner) { _owner = owner; _savedKeepingSymbolEnum = GroupType.KeepNewest; _savedSortDirectionEnum = SortType.Ascending; _savedSortColumnInfo = null; } public GroupType SavedKeepingSymbolEnum { get { return _savedKeepingSymbolEnum; } set { _savedKeepingSymbolEnum = value; } } public SortType SavedSortDirectionEnum { get { return _savedSortDirectionEnum; } set { _savedSortDirectionEnum = value; } } public ColumnInfo SavedSortColumnInfo { get { return _savedSortColumnInfo; } set { _savedSortColumnInfo = value; } } private void ShowWindowNow() { if (null != _owner) { BringToFront(_owner); if (_owner.WindowState == FormWindowState.Minimized) { _owner.WindowState = FormWindowState.Normal; _owner.Visible = true; } } } private void BringToFront(Form f) { IntPtr hwnd = f.Handle; if (GuiEnvironment.ApplicationIsActivated()) GuiEnvironment.SetForegroundWindow(hwnd); } public void CopyFrom(GroupSortBy source) { // Leave _owner alone. _savedKeepingSymbolEnum = source.SavedKeepingSymbolEnum; _savedSortDirectionEnum = source.SavedSortDirectionEnum; _savedSortColumnInfo = source.SavedSortColumnInfo; } public void Load(XmlNode source) { XmlNode groupSortBy = source.Node("GROUP_SORT_BY"); //_savedKeepingSymbolEnum = groupSortBy.Property("SORTBY"); _savedKeepingSymbolEnum = (GroupType)Enum.Parse(typeof(GroupType), groupSortBy.Property("GROUPTYPE")); _savedSortDirectionEnum = (SortType)Enum.Parse(typeof(SortType), groupSortBy.Property("SORTTYPE")); _savedSortColumnInfo = null; } public void LoadColumnData(List columnList) { _totalColumns = columnList; } public void Save(XmlNode destination) { XmlNode grpLink = destination.NewNode("GROUP_SORT_BY"); grpLink.SetProperty("GROUPTYPE", _savedKeepingSymbolEnum.ToString()); grpLink.SetProperty("SORTTYPE", _savedSortDirectionEnum.ToString()); if (_savedSortColumnInfo != null) grpLink.SetProperty("SORTBY", _savedSortColumnInfo.InternalCode); } public DialogResult ShowDialog() { using (GroupSortByForm groupSortByForm = new GroupSortByForm(this, _totalColumns)) return groupSortByForm.ShowDialog(); } } }