using System; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Collections.Generic; using BrokerInterfaceETrade.Api; using log4net; using TradeIdeas.TIProGUI; namespace BrokerInterfaceETrade.UI { public partial class frmSettings : Form { private ETradeManager _manager; private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static readonly string UNREGISTER_EXPLANATION = "If would like switch your connection to another ETrade User Account, then please click the 'Unregister User' Button."; private static readonly string UNREGISTER_DISCLAIMER_1 = "This will automatically disconnet your current session."; private static readonly string UNREGISTER_DISCLAIMER_2 = "The next time you connect, you will be taken to ETrade's Sign in page to re-authenticate with your user credentials."; private bool _reconnectFlag; private bool _diconnectFlag; public bool DiconnectFlag { get { return _diconnectFlag; } } public bool ReconnectFlag { get { return _reconnectFlag; } } public frmSettings(ETradeManager manager) { InitializeComponent(); Font = GuiEnvironment.FontSettings; _manager = manager; dgvAccounts.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; dgvAccounts.ColumnHeadersHeight = 24; lblUnregisterExplanation.Text = UNREGISTER_EXPLANATION; lblUnregisterDisclaimer.Text = UNREGISTER_DISCLAIMER_2; if (!_manager.IsConnected()) lblUnregisterDisclaimer.Text.Insert(0, $"{UNREGISTER_DISCLAIMER_1 } "); } private List _linkedAccountsState = new List(); private bool SaveSettings() { try { var linkedAccounts = new List(); foreach( DataGridViewRow row in dgvAccounts.Rows) { if (Convert.ToBoolean(row.Cells["Link"].Value)) linkedAccounts.Add(row.Cells["Account"].Value.ToString()); } _manager.Api.SaveLinkedAccountsSettings(linkedAccounts); //Detetect Any Chnages return _linkedAccountsState.Except(linkedAccounts).Any() || linkedAccounts.Except(_linkedAccountsState).Any(); } catch (Exception ex) { log.Error(logHeader("Exception"), ex); return false; } } private void frmSettings_Load(object sender, EventArgs e) { try { Size = new Size(780, 238); tabStripSettings.ItemSize = new Size(90, 30); //if we're not connected, we can't manage account linking; if (_manager.IsConnected()) loadAccountsSnapshot(); else tabStripSettings.TabPages.Remove(tabStripSettings.TabPages[1]); tabStripSettings.SelectedIndex = 0; dgvAccounts.GridColor = Color.FromArgb(55, 55, 55); dgvAccounts.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; dgvAccounts.RowTemplate.DefaultCellStyle.Padding = new Padding(0); dgvAccounts.RowTemplate.Height = TextRenderer.MeasureText("X", dgvAccounts.Font).Height + 3; dgvAccounts.DefaultCellStyle.BackColor = Color.Black; dgvAccounts.DefaultCellStyle.ForeColor = Color.White; dgvAccounts.DefaultCellStyle.SelectionBackColor = Color.FromArgb(79, 79, 79); dgvAccounts.BackgroundColor = Color.FromArgb(1, 53, 79); dgvAccounts.EnableHeadersVisualStyles = false; foreach (DataGridViewColumn column in dgvAccounts.Columns) { column.HeaderCell.Style.WrapMode = DataGridViewTriState.True; column.HeaderCell.Style.BackColor = Color.FromArgb(70, 88, 75); column.HeaderCell.Style.ForeColor = Color.FromArgb(255, 255, 206); } } catch (Exception ex) { log.Error(logHeader("Exception"), ex); } } private LogHeader logHeader(string message = null, object data = null) { return new LogHeader() { userName = _manager.UserName, version = _manager.Version, broker = "ETrade", sessionId = "N/A", location = "Settings", message = message, data = data }; } private void loadAccountsSnapshot() { try { var accounts = _manager.Api.GetUserPortfolioSnapshot(); int rowCount = 0; foreach( var account in accounts) { dgvAccounts.Rows.Add(account.Id, account.Status, account.Description, account.Mode, account.QuoteMode, account.BalanceDetail.Computed.RealTimeValues.totalAccountValue, account.Positions?.Count, account.ManagedOrderCount(), account.Linked); if (account.Linked) { _linkedAccountsState.Add(account.Id); if( account.ManagedOrderCount() > 0) { var cell = dgvAccounts.Rows[rowCount].Cells["Link"] as DataGridViewCheckBoxCell; cell.FlatStyle = FlatStyle.Flat; cell.Style.ForeColor = Color.DarkGray; cell.ReadOnly = true; } } rowCount++; } } catch (Exception ex) { throw ex; } } private void cmdExit_Click(object sender, EventArgs e) { Close(); } private void cmdSave_Click(object sender, EventArgs e) { _diconnectFlag = SaveSettings(); _reconnectFlag = _diconnectFlag; Close(); } private void cmdRemoveToken_Click(object sender, EventArgs e) { _manager.UnregisterUser(); _diconnectFlag = _manager.IsConnected(); Close(); } private void cmdExitFromUnregister_Click(object sender, EventArgs e) { Close(); } private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { if (tabStripSettings.SelectedIndex == 0) Size = new Size(780, 238); else Size = new Size(1024, 412); } } }