OmegaChartのソースコードの保守
Rev. | abec95183e38adccdd3ae834f0e303862ebeff62 |
---|---|
Größe | 28,553 Bytes |
Zeit | 2022-12-15 22:48:19 |
Autor | panacoran |
Log Message | Yahooファイナンスからの株価取得が途中で止まるのを回避
|
/*
* Copyright (c) Daisuke OKAJIMA All rights reserved.
*
* $Id$
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
using Zanetti.Commands;
using Zanetti.DataSource;
using Zanetti.Data;
using Zanetti.UI;
namespace Zanetti.Forms
{
/// <summary>
/// Download の概要の説明です。
/// </summary>
internal class DownloadDialog : System.Windows.Forms.Form
{
private DownloadOrder _currentOrder;
private CombinedDataSource _dataSource;
private int[] _downloadStartDates;
private ArrayList _downloadErrorLogs;
private long _downloadStartTime;
private bool _runScreeningNow;
private bool _initializeDataRequested;
private ToolTip _toolTip;
private System.Windows.Forms.Button _okButton;
private System.Windows.Forms.Button _cancelButton;
private System.Windows.Forms.Button _donationButton;
private System.Windows.Forms.GroupBox _orderGroup;
private System.Windows.Forms.CheckBox _stockCheckBox;
private System.Windows.Forms.GroupBox _stockGroup;
private System.Windows.Forms.RadioButton _radioDailyStock;
private System.Windows.Forms.RadioButton _radioAllStock;
private System.Windows.Forms.Button _allStockButton;
#if KENMILLE
private System.Windows.Forms.RadioButton _radioKenmilleStock;
#endif
private System.Windows.Forms.ComboBox _dateBox;
private System.Windows.Forms.CheckBox _indicesCheckBox;
private System.Windows.Forms.CheckBox _sectorsCheckBox;
private System.Windows.Forms.CheckBox _currenciesCheckBox;
private System.Windows.Forms.CheckBox _commodityCheckBox;
private System.Windows.Forms.CheckBox _namingCheckBox;
private System.Windows.Forms.GroupBox _namingGroup;
private System.Windows.Forms.Label _locationLabel;
private System.Windows.Forms.ComboBox _locationBox;
private System.Windows.Forms.Label _nameLabel;
private System.Windows.Forms.TextBox _nameTextBox;
private System.Windows.Forms.Label _progressLabel;
private System.Windows.Forms.ProgressBar _progressBar;
private ComboBox comboBoxSource;
private Label labelStockDataSource;
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.Container components = null;
public DownloadDialog(DownloadOrder order) {
//
// Windows フォーム デザイナ サポートに必要です。
//
InitializeComponent();
//
// TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
//
_toolTip = new ToolTip();
_currentOrder = order;
ShowOrderGroup();
}
/// <summary>
/// 使用されているリソースに後処理を実行します。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
public bool RunScreeningNow {
get {
return _runScreeningNow;
}
set {
_runScreeningNow = value;
}
}
public bool InitializeDataRequested {
get {
return _initializeDataRequested;
}
}
#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this._okButton = new System.Windows.Forms.Button();
this._cancelButton = new System.Windows.Forms.Button();
this._donationButton = new System.Windows.Forms.Button();
this._orderGroup = new System.Windows.Forms.GroupBox();
this._currenciesCheckBox = new System.Windows.Forms.CheckBox();
this._commodityCheckBox = new System.Windows.Forms.CheckBox();
this._stockCheckBox = new System.Windows.Forms.CheckBox();
this._sectorsCheckBox = new System.Windows.Forms.CheckBox();
this._stockGroup = new System.Windows.Forms.GroupBox();
this.comboBoxSource = new System.Windows.Forms.ComboBox();
this.labelStockDataSource = new System.Windows.Forms.Label();
this._dateBox = new System.Windows.Forms.ComboBox();
this._radioDailyStock = new System.Windows.Forms.RadioButton();
this._radioAllStock = new System.Windows.Forms.RadioButton();
this._allStockButton = new System.Windows.Forms.Button();
this._indicesCheckBox = new System.Windows.Forms.CheckBox();
this._namingCheckBox = new System.Windows.Forms.CheckBox();
this._namingGroup = new System.Windows.Forms.GroupBox();
this._nameTextBox = new System.Windows.Forms.TextBox();
this._nameLabel = new System.Windows.Forms.Label();
this._locationBox = new System.Windows.Forms.ComboBox();
this._locationLabel = new System.Windows.Forms.Label();
this._progressBar = new System.Windows.Forms.ProgressBar();
this._progressLabel = new System.Windows.Forms.Label();
this._orderGroup.SuspendLayout();
this._stockGroup.SuspendLayout();
this._namingGroup.SuspendLayout();
this.SuspendLayout();
//
// _okButton
//
this._okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this._okButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._okButton.Location = new System.Drawing.Point(272, 320);
this._okButton.Name = "_okButton";
this._okButton.Size = new System.Drawing.Size(75, 23);
this._okButton.TabIndex = 0;
this._okButton.Text = "開始";
this._okButton.Click += new System.EventHandler(this.OnOK);
//
// _cancelButton
//
this._cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this._cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._cancelButton.Location = new System.Drawing.Point(360, 320);
this._cancelButton.Name = "_cancelButton";
this._cancelButton.Size = new System.Drawing.Size(75, 23);
this._cancelButton.TabIndex = 1;
this._cancelButton.Text = "キャンセル";
this._cancelButton.Click += new System.EventHandler(this.OnCancel);
//
// _donationButton
//
this._donationButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._donationButton.Location = new System.Drawing.Point(16, 320);
this._donationButton.Name = "_donationButton";
this._donationButton.Size = new System.Drawing.Size(80, 24);
this._donationButton.TabIndex = 100;
this._donationButton.Text = "寄付について...";
this._donationButton.Click += new System.EventHandler(this.OnDonationButtonClick);
//
// _orderGroup
//
this._orderGroup.Controls.Add(this._currenciesCheckBox);
this._orderGroup.Controls.Add(this._commodityCheckBox);
this._orderGroup.Controls.Add(this._stockCheckBox);
this._orderGroup.Controls.Add(this._sectorsCheckBox);
this._orderGroup.Controls.Add(this._stockGroup);
this._orderGroup.Controls.Add(this._indicesCheckBox);
this._orderGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._orderGroup.Location = new System.Drawing.Point(8, 6);
this._orderGroup.Name = "_orderGroup";
this._orderGroup.Size = new System.Drawing.Size(440, 176);
this._orderGroup.TabIndex = 2;
this._orderGroup.TabStop = false;
this._orderGroup.Text = "ダウンロードするデータの選択";
//
// _currenciesCheckBox
//
this._currenciesCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._currenciesCheckBox.Location = new System.Drawing.Point(224, 120);
this._currenciesCheckBox.Name = "_currenciesCheckBox";
this._currenciesCheckBox.Size = new System.Drawing.Size(168, 24);
this._currenciesCheckBox.TabIndex = 6;
this._currenciesCheckBox.Text = "為替(&C)";
//
// _commodityCheckBox
//
this._commodityCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._commodityCheckBox.Location = new System.Drawing.Point(224, 144);
this._commodityCheckBox.Name = "_commodityCheckBox";
this._commodityCheckBox.Size = new System.Drawing.Size(168, 24);
this._commodityCheckBox.TabIndex = 8;
this._commodityCheckBox.Text = "商品先物(&O)";
this._commodityCheckBox.Visible = false;
//
// _stockCheckBox
//
this._stockCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._stockCheckBox.Location = new System.Drawing.Point(16, 15);
this._stockCheckBox.Name = "_stockCheckBox";
this._stockCheckBox.Size = new System.Drawing.Size(176, 24);
this._stockCheckBox.TabIndex = 3;
this._stockCheckBox.Text = "国内株式(&S)";
this._stockCheckBox.CheckedChanged += new System.EventHandler(this.OnAdjustStockDownload);
//
// _sectorsCheckBox
//
this._sectorsCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._sectorsCheckBox.Location = new System.Drawing.Point(16, 144);
this._sectorsCheckBox.Name = "_sectorsCheckBox";
this._sectorsCheckBox.Size = new System.Drawing.Size(168, 24);
this._sectorsCheckBox.TabIndex = 7;
this._sectorsCheckBox.Text = "業種別指数(&E)";
//
// _stockGroup
//
this._stockGroup.Controls.Add(this.comboBoxSource);
this._stockGroup.Controls.Add(this.labelStockDataSource);
this._stockGroup.Controls.Add(this._dateBox);
this._stockGroup.Controls.Add(this._radioDailyStock);
this._stockGroup.Controls.Add(this._radioAllStock);
this._stockGroup.Controls.Add(this._allStockButton);
this._stockGroup.Enabled = false;
this._stockGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._stockGroup.Location = new System.Drawing.Point(8, 22);
this._stockGroup.Name = "_stockGroup";
this._stockGroup.Size = new System.Drawing.Size(424, 96);
this._stockGroup.TabIndex = 4;
this._stockGroup.TabStop = false;
//
// comboBoxSource
//
this.comboBoxSource.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxSource.FormattingEnabled = true;
this.comboBoxSource.Location = new System.Drawing.Point(208, 67);
this.comboBoxSource.Name = "comboBoxSource";
this.comboBoxSource.Size = new System.Drawing.Size(100, 20);
this.comboBoxSource.TabIndex = 5;
//
// labelStockDataSource
//
this.labelStockDataSource.Location = new System.Drawing.Point(30, 67);
this.labelStockDataSource.Name = "labelStockDataSource";
this.labelStockDataSource.Size = new System.Drawing.Size(90, 24);
this.labelStockDataSource.TabIndex = 4;
this.labelStockDataSource.Text = "株価データソース";
this.labelStockDataSource.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// _dateBox
//
this._dateBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this._dateBox.Enabled = false;
this._dateBox.Location = new System.Drawing.Point(208, 16);
this._dateBox.Name = "_dateBox";
this._dateBox.Size = new System.Drawing.Size(137, 20);
this._dateBox.TabIndex = 1;
//
// _radioDailyStock
//
this._radioDailyStock.Checked = true;
this._radioDailyStock.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._radioDailyStock.Location = new System.Drawing.Point(16, 16);
this._radioDailyStock.Name = "_radioDailyStock";
this._radioDailyStock.Size = new System.Drawing.Size(152, 24);
this._radioDailyStock.TabIndex = 0;
this._radioDailyStock.TabStop = true;
this._radioDailyStock.Text = "次の日付以降・全銘柄(&D)";
this._radioDailyStock.CheckedChanged += new System.EventHandler(this.OnAdjustDailyStockCheckBox);
//
// _radioAllStock
//
this._radioAllStock.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._radioAllStock.Location = new System.Drawing.Point(16, 40);
this._radioAllStock.Name = "_radioAllStock";
this._radioAllStock.Size = new System.Drawing.Size(192, 24);
this._radioAllStock.TabIndex = 2;
this._radioAllStock.Text = "データの初期化(&A)";
this._radioAllStock.CheckedChanged += new System.EventHandler(this.OnAllStockRadioButtonCheckedChanged);
//
// _allStockButton
//
this._allStockButton.Enabled = false;
this._allStockButton.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._allStockButton.Location = new System.Drawing.Point(254, 40);
this._allStockButton.Name = "_allStockButton";
this._allStockButton.Size = new System.Drawing.Size(96, 24);
this._allStockButton.TabIndex = 3;
this._allStockButton.Text = "初期化(&S)...";
this._allStockButton.Click += new System.EventHandler(this.OnInitializeButtonClicked);
//
// _indicesCheckBox
//
this._indicesCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._indicesCheckBox.Location = new System.Drawing.Point(16, 120);
this._indicesCheckBox.Name = "_indicesCheckBox";
this._indicesCheckBox.Size = new System.Drawing.Size(168, 24);
this._indicesCheckBox.TabIndex = 5;
this._indicesCheckBox.Text = "株価指数(&I)";
//
// _namingCheckBox
//
this._namingCheckBox.Checked = true;
this._namingCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
this._namingCheckBox.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._namingCheckBox.Location = new System.Drawing.Point(24, 194);
this._namingCheckBox.Name = "_namingCheckBox";
this._namingCheckBox.Size = new System.Drawing.Size(384, 24);
this._namingCheckBox.TabIndex = 9;
this._namingCheckBox.Text = "このダウンロード設定を保存して次回以降再利用する(&P)";
this._namingCheckBox.CheckedChanged += new System.EventHandler(this.OnAdjustNamingCheckBox);
//
// _namingGroup
//
this._namingGroup.Controls.Add(this._nameTextBox);
this._namingGroup.Controls.Add(this._nameLabel);
this._namingGroup.Controls.Add(this._locationBox);
this._namingGroup.Controls.Add(this._locationLabel);
this._namingGroup.FlatStyle = System.Windows.Forms.FlatStyle.System;
this._namingGroup.Location = new System.Drawing.Point(8, 200);
this._namingGroup.Name = "_namingGroup";
this._namingGroup.Size = new System.Drawing.Size(440, 56);
this._namingGroup.TabIndex = 9;
this._namingGroup.TabStop = false;
//
// _nameTextBox
//
this._nameTextBox.Location = new System.Drawing.Point(328, 24);
this._nameTextBox.Name = "_nameTextBox";
this._nameTextBox.Size = new System.Drawing.Size(104, 19);
this._nameTextBox.TabIndex = 3;
//
// _nameLabel
//
this._nameLabel.Location = new System.Drawing.Point(240, 24);
this._nameLabel.Name = "_nameLabel";
this._nameLabel.Size = new System.Drawing.Size(48, 23);
this._nameLabel.TabIndex = 2;
this._nameLabel.Text = "名前(&N)";
this._nameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// _locationBox
//
this._locationBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this._locationBox.Location = new System.Drawing.Point(128, 24);
this._locationBox.Name = "_locationBox";
this._locationBox.Size = new System.Drawing.Size(104, 20);
this._locationBox.TabIndex = 1;
//
// _locationLabel
//
this._locationLabel.Location = new System.Drawing.Point(16, 24);
this._locationLabel.Name = "_locationLabel";
this._locationLabel.Size = new System.Drawing.Size(104, 23);
this._locationLabel.TabIndex = 0;
this._locationLabel.Text = "保存場所(&L)";
this._locationLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// _progressBar
//
this._progressBar.Location = new System.Drawing.Point(8, 288);
this._progressBar.Name = "_progressBar";
this._progressBar.Size = new System.Drawing.Size(440, 23);
this._progressBar.TabIndex = 10;
//
// _progressLabel
//
this._progressLabel.Location = new System.Drawing.Point(8, 264);
this._progressLabel.Name = "_progressLabel";
this._progressLabel.Size = new System.Drawing.Size(344, 16);
this._progressLabel.TabIndex = 11;
this._progressLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// DownloadDialog
//
this.AcceptButton = this._okButton;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
this.CancelButton = this._cancelButton;
this.ClientSize = new System.Drawing.Size(458, 352);
this.Controls.Add(this._orderGroup);
this.Controls.Add(this._progressLabel);
this.Controls.Add(this._progressBar);
this.Controls.Add(this._namingCheckBox);
this.Controls.Add(this._namingGroup);
this.Controls.Add(this._cancelButton);
this.Controls.Add(this._okButton);
this.Controls.Add(this._donationButton);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "DownloadDialog";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "データのダウンロード";
this._orderGroup.ResumeLayout(false);
this._stockGroup.ResumeLayout(false);
this._namingGroup.ResumeLayout(false);
this._namingGroup.PerformLayout();
this.ResumeLayout(false);
}
#endregion
public DownloadOrder DownloadOrder {
get {
return _currentOrder;
}
set {
_currentOrder = value;
}
}
private const int PANEL_LEFT = 8;
//各ページの初期化
private void ShowOrderGroup() {
comboBoxSource.Items.AddRange(DownloadOrder.StockDataSourceNames);
if(_currentOrder==null) _currentOrder = DownloadOrder.CreateDefault();
_stockCheckBox.Checked = _currentOrder.Stock!=DownloadOrder.StockDownload.None;
comboBoxSource.SelectedIndex = (int)_currentOrder.Source;
//日付指定DLのみしか所期状態では選択できないようにする
_indicesCheckBox.Checked = _currentOrder.ForeignIndices;
_sectorsCheckBox.Checked = _currentOrder.Sectors;
_currenciesCheckBox.Checked = _currentOrder.Currencies;
_commodityCheckBox.Checked = _currentOrder.Commodities;
#if DOJIMA
//商品先物を有効化
_commodityCheckBox.Visible = true;
#endif
//日付リスト
_dateBox.Items.Clear();
_downloadStartDates = ListDates();
FormatDateBox();
//保存オプション
int initial_index = 0;
_locationBox.Items.Clear();
for(int i=0; i<Env.Options.DownloadOrders.Count; i++) {
DownloadOrder co = Env.Options.DownloadOrders[i];
if(_currentOrder==co) initial_index= i;
_locationBox.Items.Add(String.Format("設定{0} ({1})", i+1, Env.Options.DownloadOrders.GetDescription(i)));
}
_locationBox.SelectedIndex = initial_index;
_namingCheckBox.Checked = _currentOrder.Name!=null;
_nameTextBox.Text = _currentOrder.Name;
}
private bool CommitOrderGroup() {
if(!_stockCheckBox.Checked)
_currentOrder.Stock = DownloadOrder.StockDownload.None;
else if(_radioDailyStock.Checked) {
_currentOrder.Stock = DownloadOrder.StockDownload.Recent;
_currentOrder.DateArray = CreateDateArray(_downloadStartDates, _dateBox.SelectedIndex);
}
#if KENMILLE
else if(_radioKenmilleStock.Checked) {
_currentOrder.Stock = DownloadOrder.StockDownload.All;
}
#endif
else
return false;
_currentOrder.Source = (DownloadOrder.StockDataSource)comboBoxSource.SelectedIndex;
_currentOrder.ForeignIndices = _indicesCheckBox.Checked;
_currentOrder.DomesticIndices = _indicesCheckBox.Checked;
_currentOrder.Sectors = _sectorsCheckBox.Checked;
_currentOrder.Currencies = _currenciesCheckBox.Checked;
_currentOrder.Commodities = _commodityCheckBox.Checked;
return true;
}
private bool CommitNamingGroup() {
if(_namingCheckBox.Checked) {
if(_nameTextBox.Text.Length==0) {
Util.Warning(this, "保存先の名前が入力されていません。");
return false;
}
_currentOrder.Name = _nameTextBox.Text;
Env.Options.DownloadOrders[_locationBox.SelectedIndex] = _currentOrder;
Env.Frame.InitMRUDownloadMenu();
}
return true;
}
private void OnAdjustStockDownload(object sender, EventArgs args) {
bool e = _stockCheckBox.Checked;
_stockGroup.Enabled = e;
_dateBox.Enabled = e && _radioDailyStock.Checked;
}
private void OnAdjustDailyStockCheckBox(object sender, EventArgs args) {
bool e = _radioDailyStock.Checked;
_dateBox.Enabled = e;
}
private void OnAdjustNamingCheckBox(object sender, EventArgs args) {
bool e = _namingCheckBox.Checked;
_locationBox.Enabled = e;
_nameTextBox.Enabled = e;
}
private void OnAllStockRadioButtonCheckedChanged(object sender, EventArgs args) {
_allStockButton.Enabled = _radioAllStock.Checked;
}
private void OnInitializeButtonClicked(object sender, EventArgs args) {
this.DialogResult = DialogResult.Cancel;
_initializeDataRequested = true;
Close();
Env.Command.Exec(CID.ShowInitializeDialog);
}
private void OnOK(object sender, EventArgs args) {
this.DialogResult = DialogResult.None;
//両方の内容をチェックできたらダウンロード開始
if(CommitOrderGroup() && CommitNamingGroup()) StartDownload();
}
private void OnCancel(object sender, EventArgs args) {
if(_dataSource!=null) _dataSource.Abort();
this.Close();
}
private void StartDownload() {
_dataSource = _currentOrder.ConvertToDataSource();
if(_dataSource.Count==0) {
Util.Warning(this, "ダウンロード対象が選択されていません。");
return;
}
_okButton.Enabled = false;
_downloadErrorLogs = new ArrayList();
_downloadStartTime = DateTime.Now.Ticks;
_orderGroup.Enabled = false;
_namingGroup.Enabled = false;
_namingCheckBox.Enabled = false;
_progressBar.Enabled = true;
_progressBar.Value = 0;
_progressBar.Maximum = _dataSource.TotalStep;
_dataSource.AsyncProcess(this.Handle);
}
private void ProgressStatus(int code, int wparam) {
try {
if(code==AsyncConst.LPARAM_PROGRESS_SUCCESSFUL || code==AsyncConst.LPARAM_PROGRESS_FAILURE) {
if((wparam & DataSourceBase.DATE_MASK)!=0) {
_progressLabel.Text = String.Format("{0}のデータを取得中", Util.FormatShortDate(wparam & ~DataSourceBase.DATE_MASK));
if(code==AsyncConst.LPARAM_PROGRESS_FAILURE) {
string msg = String.Format("{0}のデータが取得できませんでした。{1}", wparam, _dataSource.ErrorMessage);
_downloadErrorLogs.Add(msg);
}
}
else {
if(_progressBar.Value < _progressBar.Maximum) _progressBar.Value++; //つまらないミスでバーの上限値を越えた値をセットしないためガード
long left = (DateTime.Now.Ticks-_downloadStartTime) / _progressBar.Value * (_progressBar.Maximum-_progressBar.Value) / 10000000;
string message = String.Format("{0}/{1} 残り 約 {2}分{3:D2}秒",_progressBar.Value, _progressBar.Maximum, left/60, left % 60);
_progressLabel.Text = message;
if(code==AsyncConst.LPARAM_PROGRESS_FAILURE) {
string msg = String.Format("{0}({1})のデータが取得できませんでした。{2}", Env.BrandCollection.FindBrand(wparam).Name, wparam, _dataSource.ErrorMessage);
_downloadErrorLogs.Add(msg);
}
}
}
else if(code==AsyncConst.LPARAM_FINISHED) {
this.DialogResult = DialogResult.OK;
//最新日付へ
AbstractBrand b = Env.Frame.ChartCanvas.GetBrand();
b.ReserveFarm().LoadFor(b);
Env.Frame.ChartCanvas.LoadBrand(b, false);
Env.Frame.ChartCanvas.MoveToLatest();
Close();
}
else if(code==AsyncConst.LPARAM_ERROR) {
Util.Warning(this, _dataSource.ErrorMessage);
this.DialogResult = DialogResult.Cancel;
}
}
catch(Exception ex) {
Util.SilentReportCriticalError(ex);
Util.Warning(this, ex.Message);
}
}
private void AddHelpButton(int left, int top, Control parent, string text) {
Button btn = new NotClickableButton();
btn.Left = left;
btn.Top = top;
btn.Width = 19;
btn.Height = 19;
btn.FlatStyle = FlatStyle.Flat;
btn.Image = Env.ImageList16.Images[IconConst.HELP];
btn.Text = "";
_toolTip.SetToolTip(btn, text);
parent.Controls.Add(btn);
btn.BringToFront();
}
private void FormatDateBox() {
DataFarm f = Env.Frame.ChartCanvas.GetBrand().ReserveFarm();
int latest = f.IsEmpty? Int32.MaxValue : f.LastDate;
int sel = 0;
for(int i=0; i<_downloadStartDates.Length; i++) {
_dateBox.Items.Add(Util.FormatFullDate(_downloadStartDates[i]));
if(_downloadStartDates[i] > latest) sel = i; //今見ているチャートの最新日付の次の日がセットされているようにする EmptyのときはSelectedIndexは0.
}
_dateBox.SelectedIndex = sel;
}
protected override void WndProc(ref Message m) {
base.WndProc (ref m);
if(m.Msg==AsyncConst.WM_ASYNCPROCESS) {
ProgressStatus(m.LParam.ToInt32(), m.WParam.ToInt32());
}
}
private static int[] ListDates() {
DateTime ld = Util.GuessLatestTradeDate();
//市場が開いている日については、日本時間19時〜24時(UTCでは10時〜15時)まで取得可能。
//無尽蔵でデータの準備ができるのが18〜19時だった
if(DateTime.Today==ld && (DateTime.UtcNow.Hour<10 || DateTime.UtcNow.Hour>=15)) ld = ld.AddDays(-1);
DateTime start = ld.AddMonths(-2);
ArrayList result = new ArrayList();
while(start.CompareTo(ld)<0) {
if(Util.IsMarketOpenDate(ld)) {
result.Add(Util.DateToInt(ld));
}
ld = ld.AddDays(-1);
}
return (int[])result.ToArray(typeof(int));
}
private static int[] CreateDateArray(int[] dates, int start)
{
int[] t = new int[start+1];
for(int i=start; i>=0; i--)
t[start-i] = dates[i];
return t;
}
private void OnDonationButtonClick(object sender, EventArgs args) {
new PromptDonation().ShowDialog(this);
}
}
}