From 3ef188e6075649f4c72e3e7588d8966e1071f2ff Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 05 七月 2024 15:50:40 +0800 Subject: [PATCH] update .gitignore --- CBTrade/ViewManager.cpp | 295 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 193 insertions(+), 102 deletions(-) diff --git a/CBTrade/ViewManager.cpp b/CBTrade/ViewManager.cpp index d818484..de415c7 100644 --- a/CBTrade/ViewManager.cpp +++ b/CBTrade/ViewManager.cpp @@ -1,7 +1,14 @@ #include "ViewManager.h" #include <wx/charts/wxcharts.h> -#include <gmapi.h> #include <set> +#include "MyNetworkApi.h" +#include "JueJInSettingFrame.h" +#include "../common_nopch/Win32Util.h" +#include <thread> +#include "MyConfigUtil.h" + +IMPLEMENT_VARIANT_OBJECT(MyColorText) +IMPLEMENT_VARIANT_OBJECT(MyButton) ViewManager::ViewManager() { this->topWidgets = new TopWidgets(); @@ -9,7 +16,6 @@ this->moneyWidgets = new MoneyWidgets(); this->positionWidgets = new PositionWidgets(); this->sellWidgets = new SellWidgets(); - set_token("123123"); } wxPanel* ViewManager::createSplitLine(wxWindow* parent) @@ -24,40 +30,72 @@ window->SetBackgroundColour(wxColor(255, 255, 255)); wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); - - wxPanel* topPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TOP_HEIGHT)); + wxSize size = window->GetSize(); + cout << "size:"<< size.GetWidth() << endl; - wxPanel* tickPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TICK_HEIGHT)); + + wxPanel* topPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(-1, PANNEL_TOP_HEIGHT)); - wxPanel* moneyPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_MONEY_HEIGHT)); + wxPanel* tickPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(-1,size.GetWidth()<100? PANNEL_TICK_HEIGHT: size.GetWidth()*2/3)); - wxPanel* positionPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_POSITION_HEIGHT)); + wxPanel* moneyPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(-1, PANNEL_MONEY_HEIGHT)); - wxPanel* sellPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_SELL_HEIGHT)); + wxPanel* positionPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(-1, -1)); - sizer->Add(topPanel, 0, wxLEFT | wxRIGHT, 2); + wxPanel* sellPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(-1, PANNEL_SELL_HEIGHT)); + + initMenu((wxFrame*)window); + + sizer->Add(topPanel, 0, wxEXPAND|wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); - sizer->Add(tickPanel, 0, wxLEFT | wxRIGHT, 2); + sizer->Add(tickPanel, 0, wxEXPAND|wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); - sizer->Add(moneyPanel, 0, wxLEFT | wxRIGHT, 2); + sizer->Add(moneyPanel, 0, wxEXPAND|wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); - sizer->Add(positionPanel, 0, wxLEFT | wxRIGHT, 2); + sizer->Add(positionPanel, 1, wxEXPAND |wxLEFT | wxRIGHT, 2); sizer->Add(createSplitLine(window), 0, wxEXPAND); - sizer->Add(sellPanel, 0, wxLEFT | wxRIGHT, 2); + sizer->Add(sellPanel, 0, wxEXPAND|wxLEFT | wxRIGHT, 2); + sizer->Add(createSplitLine(window), 0, wxEXPAND); window->SetSizer(sizer); this->initTopView(topPanel); this->initTickView(tickPanel); this->initMoneyView(moneyPanel); this->initPositionView(positionPanel); this->initSellView(sellPanel); - } + +void ViewManager::ShowJueJinSetting(wxCommandEvent& event) +{ + JueJInSettingFrame *jueJinFrame = new JueJInSettingFrame("掘金参数设置"); + jueJinFrame->ShowModal(); +} + +void ViewManager::initMenu(wxFrame* window) +{ + // 初始化菜单 + menuBar = new wxMenuBar(); + + // 创建文件菜单 + wxMenu* menuSetting = new wxMenu(); + menuSetting->Append(10012, "&掘金参数设置"); + menuSetting->AppendSeparator(); + + // 将文件菜单添加到菜单栏 + menuBar->Append(menuSetting, "&设置"); + + // 将菜单栏设置为窗口的菜单栏 + window->SetMenuBar(menuBar); + + window->Bind(wxEVT_MENU, &ViewManager::ShowJueJinSetting, this, 10012); + + +} void ViewManager::initTopView(wxPanel* pancel) { @@ -65,10 +103,19 @@ this->topWidgets->refreshBtn = new wxButton(pancel, wxID_ANY, "刷新", wxDefaultPosition, wxSize(50, -1)); this->topWidgets->msgLabel = new wxStaticText(pancel, wxID_ANY, "提示语提示语", wxDefaultPosition); - this->topWidgets->codeEdit = new wxTextCtrl(pancel, wxID_ANY, "000333", wxDefaultPosition, wxSize(60, 25)); + this->topWidgets->codeEdit = new wxTextCtrl(pancel, wxID_ANY, "", wxDefaultPosition, wxSize(-1, 25)); + this->topWidgets->backTestDate = new wxTextCtrl(pancel, wxID_ANY); + this->topWidgets->btnBackTest = new wxButton(pancel, wxID_ANY, "开始回测"); + + + // 绑定事件 + this->topWidgets->refreshBtn->Bind(wxEVT_BUTTON, &ViewManager::OnRefresh, this); sizer->Add(this->topWidgets->codeEdit, 0, wxALL, 2); + sizer->Add(this->topWidgets->btnAddZX, 0, wxALL, 2); sizer->Add(this->topWidgets->msgLabel, 1, wxALIGN_CENTER_VERTICAL); + sizer->Add(topWidgets->backTestDate, 0, wxALIGN_CENTER_VERTICAL); + sizer->Add(topWidgets->btnBackTest, 0, wxLEFT| wxALIGN_CENTER_VERTICAL, 2); sizer->Add(this->topWidgets->refreshBtn, 0, wxALL, 2); pancel->SetSizer(sizer); } @@ -78,8 +125,6 @@ { public: wxChartsPresentationDatasetTheme10() { - - SetLineChartDatasetOptions(wxLineChartDatasetOptions( wxColor(220, 0, 0), wxColor(255, 255, 255), @@ -92,51 +137,19 @@ void ViewManager::initTickView(wxPanel* panel) { + wxString st = ""; + tickWidgets->tickChart = new TickChart(panel, wxID_ANY,60,TIME_SPACE_BAR,"09:25:00","15:00:00"); + tickWidgets->codeInfoLabel = new wxRichTextCtrl(panel, wxID_ANY, st, wxDefaultPosition,wxSize(-1,90), wxTE_MULTILINE| wxTE_READONLY| wxBORDER_NONE); + wxFont font = tickWidgets->codeInfoLabel->GetFont(); + font.SetPointSize(10); + tickWidgets->codeInfoLabel->SetFont(font); - if (1 > 0) { - return; - } + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(tickWidgets->codeInfoLabel,1, wxEXPAND); - // 设置主题 - - wxChartsDefaultTheme->SetDatasetTheme(wxChartsDatasetId::CreateImplicitId(0), wxSharedPtr<wxChartsDatasetTheme>(new wxChartsPresentationDatasetTheme10())); - - - wxVector<wxString> labels; - labels.push_back("January"); - labels.push_back("February"); - labels.push_back("March"); - labels.push_back("April"); - labels.push_back("May"); - labels.push_back("June"); - labels.push_back("July"); - wxChartsCategoricalData::ptr chartData = wxChartsCategoricalData::make_shared(labels); - - // Add the first dataset - wxVector<wxDouble> points1; - points1.push_back(3); - points1.push_back(-2.5); - points1.push_back(-1.2); - points1.push_back(3); - points1.push_back(6); - points1.push_back(5); - points1.push_back(1); - wxChartsDoubleDataset::ptr dataset1(new wxChartsDoubleDataset("id0", points1)); - - chartData->AddDataset(dataset1); - - - // Create the line chart widget from the constructed data - const wxLineChartOptions *options = new wxLineChartOptions(); - wxLineChartCtrl* lineChartCtrl = new wxLineChartCtrl(panel, wxID_ANY, chartData, - wxCHARTSLINETYPE_STRAIGHT, *options, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - lineChartCtrl->SetBackgroundColour(*wxBLACK); - - - - wxBoxSizer* panelSizer = new wxBoxSizer(wxHORIZONTAL); - panelSizer->Add(lineChartCtrl, 1, wxEXPAND); - //panelSizer->Add(legendCtrl, 1, wxEXPAND); + panelSizer->Add(sizer, 0, wxEXPAND, 2); + panelSizer->Add(tickWidgets->tickChart, 1, wxEXPAND); panel->SetSizer(panelSizer); } void ViewManager::initMoneyView(wxPanel* panel) @@ -208,8 +221,11 @@ class ButtonRenderer : public wxDataViewCustomRenderer { +private: + MyButton info; + public: - ButtonRenderer(const wxString& varianttype = "string") + ButtonRenderer(const wxString& varianttype = "wxObject") : wxDataViewCustomRenderer(varianttype, wxDATAVIEW_CELL_ACTIVATABLE) { @@ -219,17 +235,13 @@ { // 设置绘制按钮的位置和大小 wxRect buttonRect(cell.GetPosition(), wxSize(40, 20)); - dc->SetTextForeground(wxColour(64, 64, 64)); + dc->SetTextForeground(info.getTextColor()); // 绘制按钮的外框 - dc->SetPen(wxColour(225, 225, 225)); - - dc->SetBrush(wxColour(225, 225, 225)); + dc->SetPen(info.getBgColor()); + dc->SetBrush(info.getBgColor()); dc->DrawRectangle(buttonRect); - // 绘制按钮的文本 - dc->DrawLabel("查看", buttonRect, wxALIGN_CENTER); - - + dc->DrawLabel(info.getText(), buttonRect, wxALIGN_CENTER); return false; } @@ -237,7 +249,13 @@ bool ActivateCell(const wxRect& WXUNUSED(cell), wxDataViewModel* WXUNUSED(model), const wxDataViewItem& WXUNUSED(item), unsigned int WXUNUSED(col), const wxMouseEvent* mouseEvent) override { // 处理点击事件 if (mouseEvent->LeftDown()) { - wxMessageBox("单元格被点击"); + try { + thread t(Win32Util::addToTHS, info.getCode().ToStdString()); + t.detach(); + } + catch (...) { + + } } return false; // 返回 true 表示已经处理了点击事件 } @@ -249,7 +267,7 @@ } virtual bool SetValue(const wxVariant& value) { - + info << value; return true; } virtual bool GetValue(wxVariant& value) const { @@ -258,48 +276,113 @@ } }; + + +class ColorTextRenderer : public wxDataViewCustomRenderer +{ +private: + MyColorText colorText; + +public: + ColorTextRenderer(const wxString& varianttype = wxS("wxObject")) + : wxDataViewCustomRenderer(varianttype, wxDATAVIEW_CELL_ACTIVATABLE) + { + + } + + virtual bool Render(wxRect cell, wxDC* dc, int state) + { + dc->SetTextForeground(colorText.getColor()); + // 绘制按钮的外框 + dc->SetPen(wxColour(225, 225, 225)); + dc->SetBrush(wxColour(225, 225, 225)); + // 绘制按钮的文本 + dc->DrawLabel(colorText.getText(), cell, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + return false; + } + + + virtual wxSize GetSize() const + { + // 返回按钮的大小 + return wxSize(-1, -1); + } + + virtual bool SetValue(const wxVariant& value) wxOVERRIDE { + cout << value.GetType() << endl; + //colorText = (ColorText) value.GetType(); + colorText << value; + return true; + } + + virtual bool GetValue(wxVariant& value) const wxOVERRIDE { + + return true; + } + wxString GetAccessibleDescription() const wxOVERRIDE + { + return wxEmptyString; + } + +}; + + void ViewManager::initPositionView(wxPanel* panel) { wxDataViewListCtrl* listCtrl = new wxDataViewListCtrl( panel, wxID_ANY, wxDefaultPosition, wxSize(-1, -1), wxLC_REPORT | wxBORDER_NONE); + // 设置整体的字体大小 + wxFont font = listCtrl->GetFont(); + font.SetPointSize(10); + listCtrl->SetFont(font); - listCtrl->Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, &ViewManager::OnPositionSelectionChanged, this); - const int COL_COUNT = 10; - std::string headers[COL_COUNT] = { "名称","涨幅","现价","L1现手","剩余持仓","持仓金额","盈亏","盈亏比","正股名称","更多" }; - int colWidths[COL_COUNT] = { 70,50 ,60 ,50 ,70 ,100 ,90 ,50 ,80 ,50 }; + const int COL_COUNT = 13; + std::string headers[COL_COUNT] = { "名称","涨幅","现价","现手","正股涨幅","正股买一","持仓金额","成本价","盈亏比","更多","持仓","盈亏","正股名称" }; + list<int> widths= MyConfigUtil::getPositionColumnWidth(); for (int i = 0; i < COL_COUNT; i++) { - if (i < COL_COUNT - 1) { - listCtrl->AppendTextColumn(headers[i], wxDATAVIEW_CELL_INERT, colWidths[i]); + int width = -1; + if (widths.size() > i) { + list<int>::iterator e = widths.begin(); + std::advance(e,i); + width = *e; + } + cout << "持仓列宽度:" << i << "-" << width << endl; + + if (i != 9) { + auto ctr = new ColorTextRenderer(); + listCtrl->AppendColumn(new wxDataViewColumn(headers[i], ctr, i, width < 0 ? 50 : width, i == 0 ? wxALIGN_LEFT : wxALIGN_RIGHT, wxDATAVIEW_COL_RESIZABLE)); } else { auto bc = new ButtonRenderer(); - listCtrl->AppendColumn(new wxDataViewColumn(headers[i], bc, 9, colWidths[i], wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE)); + listCtrl->AppendColumn(new wxDataViewColumn(headers[i], bc,i, width < 0? 50:width, i == 0 ? wxALIGN_LEFT : wxALIGN_RIGHT, wxDATAVIEW_COL_RESIZABLE)); } } - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 1; i++) { wxVector<wxVariant> data; data.push_back(wxVariant("美的转债")); - data.push_back(wxVariant("10.2%")); + data.push_back(wxVariant("10.20%")); data.push_back(wxVariant("123.123")); data.push_back(wxVariant("452")); - data.push_back(wxVariant("30")); - data.push_back(wxVariant("2000.00元")); - data.push_back(wxVariant("+20000.10元")); + data.push_back(wxVariant("10.02%")); + data.push_back(wxVariant("12312万")); + + data.push_back(wxVariant("100000.00")); + data.push_back(wxVariant("123.123")); + data.push_back(wxVariant("1.01%")); data.push_back(wxVariant("美的集团")); + data.push_back(""); + data.push_back(wxVariant("1000")); + data.push_back(wxVariant("+20000.10")); listCtrl->AppendItem(data); } listCtrl->Refresh(); - - - positionWidgets->listCtrlReport = listCtrl; - wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); @@ -314,13 +397,13 @@ const int COLUMN_SPACE = 8; auto btnSizer = new wxBoxSizer(wxHORIZONTAL); - wxPanel* btnPannel = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 55)); + wxPanel* btnPannel = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 70)); btnPannel->SetSizer(btnSizer); sellWidgets->buyLock = new wxCheckBox(btnPannel, wxID_ANY, "买锁定"); - sellWidgets->buyMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1)); + sellWidgets->buyMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(90, -1), wxTE_PROCESS_ENTER); sellWidgets->sellLock = new wxCheckBox(btnPannel, wxID_ANY, "卖锁定"); - sellWidgets->sellMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1)); + sellWidgets->sellMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(90, -1), wxTE_PROCESS_ENTER); auto bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->buyLock, 0, wxTOP, 5); bv->AddStretchSpacer(); @@ -336,8 +419,8 @@ // 开启/关闭交易 - sellWidgets->openTrade = new wxButton(btnPannel, wxID_ANY, "开启交易", wxDefaultPosition, wxSize(60, -1)); - sellWidgets->closeTrade = new wxButton(btnPannel, wxID_ANY, "关闭交易", wxDefaultPosition, wxSize(60, -1)); + sellWidgets->openTrade = new wxButton(btnPannel, wxID_ANY, "开启交易", wxDefaultPosition, wxSize(80, -1)); + sellWidgets->closeTrade = new wxButton(btnPannel, wxID_ANY, "关闭交易", wxDefaultPosition, wxSize(80, -1)); bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->openTrade, 0); bv->AddStretchSpacer(); @@ -364,23 +447,23 @@ // 自动撤单/参数设置 sellWidgets->autoCancel = new wxCheckBox(btnPannel, wxID_ANY, "自动撤单"); - sellWidgets->setting = new wxButton(btnPannel, wxID_ANY, "参数设置", wxDefaultPosition, wxSize(70, -1)); + sellWidgets->setting = new wxButton(btnPannel, wxID_ANY, "参数设置", wxDefaultPosition, wxSize(80, -1)); bv = new wxBoxSizer(wxVERTICAL); bv->Add(sellWidgets->autoCancel, 0); bv->AddStretchSpacer(); bv->Add(sellWidgets->setting, 0); btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); - // 买价/卖价设置 + // 买价/卖价设置 0-价格笼子 1-跌停价 2-涨停价 3-现价 4-买5价 const wxString prices_buy[] = { "笼子价", "跌停价","涨停价","现价","买5价" }; const wxString prices_sell[] = { "笼子价", "跌停价","涨停价","现价","卖5价" }; - sellWidgets->sellPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(70, -1)); - sellWidgets->buyPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(70, -1)); + sellWidgets->sellPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(90, -1)); + sellWidgets->buyPrice = new wxChoice(btnPannel, wxID_ANY, wxDefaultPosition, wxSize(90, -1)); for (int i = 0; i < 5; i++) { sellWidgets->sellPrice->Append(prices_sell[i]); sellWidgets->buyPrice->Append(prices_buy[i]); } - sellWidgets->sellPrice->SetSelection(1); + sellWidgets->sellPrice->SetSelection(0); sellWidgets->buyPrice->SetSelection(2); bv = new wxBoxSizer(wxVERTICAL); @@ -396,9 +479,15 @@ btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); + sellWidgets->showAllPosition = new wxCheckBox(btnPannel, wxID_ANY, "显示无持仓"); + sellWidgets->showAllPosition->SetValue(TRUE); + btnSizer->Add(sellWidgets->showAllPosition, 0, wxLEFT, COLUMN_SPACE); + + + // 买入 btnSizer->AddStretchSpacer(); - sellWidgets->buyBtn = new wxButton(btnPannel, wxID_ANY, "买入", wxDefaultPosition, wxSize(50, -1)); + sellWidgets->buyBtn = new wxButton(btnPannel, wxID_ANY, "买入", wxDefaultPosition, wxSize(80, -1)); sellWidgets->buyBtn->SetFont(font); btnSizer->Add(sellWidgets->buyBtn, 0, wxEXPAND | wxLEFT, COLUMN_SPACE); @@ -407,7 +496,7 @@ //------- 卖金额区域 const int sellNumCount = sizeof(moneys) / sizeof(moneys[0]); for (int i = 0; i < sellNumCount; i++) { - sellWidgets->sellNums.push_back(new wxButton(panel, wxID_ANY, std::to_string(moneys[i]), wxDefaultPosition, wxSize(-1, 30))); + sellWidgets->sellNums.push_back(new wxButton(panel, wxID_ANY, std::to_string(moneys[i]), wxDefaultPosition, wxSize(-1, 50))); } auto sellNumsSizer = new wxBoxSizer(wxHORIZONTAL); @@ -421,8 +510,10 @@ panel->SetSizer(rootSizer); } -void ViewManager::OnPositionSelectionChanged(wxDataViewEvent& event) + + +void ViewManager::OnRefresh(wxCommandEvent& event) { - event.Skip(); - //event.Veto(); + MyNetworkApi::get_all_positions(); + } -- Gitblit v1.8.0