| | |
| | | #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(); |
| | |
| | | this->moneyWidgets = new MoneyWidgets(); |
| | | this->positionWidgets = new PositionWidgets(); |
| | | this->sellWidgets = new SellWidgets(); |
| | | set_token("123123"); |
| | | } |
| | | |
| | | wxPanel* ViewManager::createSplitLine(wxWindow* parent) |
| | |
| | | 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) |
| | | { |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | { |
| | | public: |
| | | wxChartsPresentationDatasetTheme10() { |
| | | |
| | | |
| | | SetLineChartDatasetOptions(wxLineChartDatasetOptions( |
| | | wxColor(220, 0, 0), |
| | | wxColor(255, 255, 255), |
| | |
| | | |
| | | 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) |
| | |
| | | |
| | | class ButtonRenderer : public wxDataViewCustomRenderer |
| | | { |
| | | private: |
| | | MyButton info; |
| | | |
| | | public: |
| | | ButtonRenderer(const wxString& varianttype = "string") |
| | | ButtonRenderer(const wxString& varianttype = "wxObject") |
| | | : wxDataViewCustomRenderer(varianttype, wxDATAVIEW_CELL_ACTIVATABLE) |
| | | { |
| | | |
| | |
| | | { |
| | | // 设置绘制按钮的位置和大小 |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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 表示已经处理了点击事件 |
| | | } |
| | |
| | | } |
| | | |
| | | virtual bool SetValue(const wxVariant& value) { |
| | | |
| | | info << value; |
| | | return true; |
| | | } |
| | | virtual bool GetValue(wxVariant& value) const { |
| | |
| | | } |
| | | }; |
| | | |
| | | |
| | | |
| | | 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); |
| | |
| | | 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(); |
| | |
| | | |
| | | |
| | | // 开启/关闭交易 |
| | | 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(); |
| | |
| | | |
| | | // 自动撤单/参数设置 |
| | | 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); |
| | |
| | | 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); |
| | | |
| | |
| | | //------- 卖金额区域 |
| | | 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); |
| | |
| | | panel->SetSizer(rootSizer); |
| | | } |
| | | |
| | | void ViewManager::OnPositionSelectionChanged(wxDataViewEvent& event) |
| | | |
| | | |
| | | void ViewManager::OnRefresh(wxCommandEvent& event) |
| | | { |
| | | event.Skip(); |
| | | //event.Veto(); |
| | | MyNetworkApi::get_all_positions(); |
| | | |
| | | } |