#include "ViewManager.h"
|
#include <wx/charts/wxcharts.h>
|
#include <gmapi.h>
|
#include <set>
|
|
ViewManager::ViewManager() {
|
this->topWidgets = new TopWidgets();
|
this->tickWidgets = new TickWidgets();
|
this->moneyWidgets = new MoneyWidgets();
|
this->positionWidgets = new PositionWidgets();
|
this->sellWidgets = new SellWidgets();
|
set_token("123123");
|
}
|
|
wxPanel* ViewManager::createSplitLine(wxWindow* parent)
|
{
|
wxPanel* splitterLine = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1));
|
splitterLine->SetBackgroundColour(wxColour(225, 225, 225));
|
return splitterLine;
|
}
|
|
void ViewManager::initView(wxWindow* window) {
|
|
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));
|
|
|
wxPanel* tickPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_TICK_HEIGHT));
|
|
|
wxPanel* moneyPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_MONEY_HEIGHT));
|
|
|
wxPanel* positionPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_POSITION_HEIGHT));
|
|
|
wxPanel* sellPanel = new wxPanel(window, wxID_ANY, wxDefaultPosition, wxSize(MAIN_WINDOW_WIDTH, PANNEL_SELL_HEIGHT));
|
|
|
sizer->Add(topPanel, 0, wxLEFT | wxRIGHT, 2);
|
sizer->Add(createSplitLine(window), 0, wxEXPAND);
|
sizer->Add(tickPanel, 0, wxLEFT | wxRIGHT, 2);
|
sizer->Add(createSplitLine(window), 0, wxEXPAND);
|
sizer->Add(moneyPanel, 0, wxLEFT | wxRIGHT, 2);
|
sizer->Add(createSplitLine(window), 0, wxEXPAND);
|
sizer->Add(positionPanel, 0, wxLEFT | wxRIGHT, 2);
|
sizer->Add(createSplitLine(window), 0, wxEXPAND);
|
sizer->Add(sellPanel, 0, wxLEFT | wxRIGHT, 2);
|
window->SetSizer(sizer);
|
this->initTopView(topPanel);
|
this->initTickView(tickPanel);
|
this->initMoneyView(moneyPanel);
|
this->initPositionView(positionPanel);
|
this->initSellView(sellPanel);
|
|
}
|
|
|
void ViewManager::initTopView(wxPanel* pancel)
|
{
|
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
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));
|
|
sizer->Add(this->topWidgets->codeEdit, 0, wxALL, 2);
|
sizer->Add(this->topWidgets->msgLabel, 1, wxALIGN_CENTER_VERTICAL);
|
sizer->Add(this->topWidgets->refreshBtn, 0, wxALL, 2);
|
pancel->SetSizer(sizer);
|
}
|
|
|
class wxChartsPresentationDatasetTheme10 : public wxChartsDatasetTheme
|
{
|
public:
|
wxChartsPresentationDatasetTheme10() {
|
|
|
SetLineChartDatasetOptions(wxLineChartDatasetOptions(
|
wxColor(220, 0, 0),
|
wxColor(255, 255, 255),
|
// wxColor(220, 220, 220, 0x33)
|
wxColor(220, 0, 0, 0)
|
));
|
}
|
};
|
|
|
void ViewManager::initTickView(wxPanel* panel)
|
{
|
|
if (1 > 0) {
|
return;
|
}
|
|
// ÉèÖÃÖ÷Ìâ
|
|
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);
|
panel->SetSizer(panelSizer);
|
}
|
void ViewManager::initMoneyView(wxPanel* panel)
|
{
|
//wxStaticText* positionLabel;//³Ö²Ö½ð¶î
|
wxStaticText* frozenLabel; //¶³½á½ð¶î
|
wxStaticText* totalLabel; // ÕË»§×ܽð¶î
|
wxStaticText* todayCommissionLabel;// ½ñÈÕÊÖÐø·Ñ
|
wxStaticText* todayProfitLabel;// Ó¯Àû½ð¶î
|
wxStaticText* todayProfitRateLabel;// ½ñÈÕÓ¯Àû±È
|
wxStaticText* totalProfitLabel;// ÀÛ¼ÆÓ¯Àû
|
//
|
|
wxGridSizer* rootSizer = new wxGridSizer(2, 4, 10, 20);
|
|
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "¿ÉÓÃ×ʽð£º"));
|
moneyWidgets->availableLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->availableLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "³Ö²Ö×ʽð£º"));
|
moneyWidgets->positionLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->positionLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "¶³½á×ʽð£º"));
|
moneyWidgets->frozenLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->frozenLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "ÕË»§×ܽð¶î£º"));
|
moneyWidgets->totalLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->totalLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "½ñÈÕÊÖÐø·Ñ£º"));
|
moneyWidgets->todayCommissionLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->todayCommissionLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "½ñÈÕÓ¯¿÷£º"));
|
moneyWidgets->todayProfitLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->todayProfitLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "½ñÈÕÓ¯¿÷±È£º"));
|
moneyWidgets->todayProfitRateLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->todayProfitRateLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
sizer = new wxBoxSizer(wxHORIZONTAL);
|
sizer->Add(new wxStaticText(panel, wxID_ANY, "ÀÛ¼ÆÓ¯¿÷£º"));
|
moneyWidgets->totalProfitLabel = new wxStaticText(panel, wxID_ANY, "--");
|
sizer->Add(moneyWidgets->totalProfitLabel);
|
rootSizer->Add(sizer, 0, wxEXPAND);
|
|
panel->SetSizer(rootSizer);
|
|
}
|
|
class ButtonRenderer : public wxDataViewCustomRenderer
|
{
|
public:
|
ButtonRenderer(const wxString& varianttype = "string")
|
: wxDataViewCustomRenderer(varianttype, wxDATAVIEW_CELL_ACTIVATABLE)
|
{
|
|
}
|
|
virtual bool Render(wxRect cell, wxDC* dc, int state)
|
{
|
// ÉèÖûæÖư´Å¥µÄλÖúʹóС
|
wxRect buttonRect(cell.GetPosition(), wxSize(40, 20));
|
dc->SetTextForeground(wxColour(64, 64, 64));
|
// »æÖư´Å¥µÄÍâ¿ò
|
dc->SetPen(wxColour(225, 225, 225));
|
|
dc->SetBrush(wxColour(225, 225, 225));
|
dc->DrawRectangle(buttonRect);
|
|
// »æÖư´Å¥µÄÎı¾
|
dc->DrawLabel("²é¿´", 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("µ¥Ôª¸ñ±»µã»÷");
|
}
|
return false; // ·µ»Ø true ±íʾÒѾ´¦ÀíÁ˵ã»÷ʼþ
|
}
|
|
virtual wxSize GetSize() const
|
{
|
// ·µ»Ø°´Å¥µÄ´óС
|
return wxSize(40, 20);
|
}
|
|
virtual bool SetValue(const wxVariant& value) {
|
|
return true;
|
}
|
virtual bool GetValue(wxVariant& value) const {
|
|
return true;
|
}
|
};
|
|
void ViewManager::initPositionView(wxPanel* panel)
|
{
|
wxDataViewListCtrl* listCtrl = new wxDataViewListCtrl(
|
panel, wxID_ANY, wxDefaultPosition, wxSize(-1, -1),
|
wxLC_REPORT | wxBORDER_NONE);
|
|
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 };
|
|
for (int i = 0; i < COL_COUNT; i++) {
|
if (i < COL_COUNT - 1) {
|
listCtrl->AppendTextColumn(headers[i], wxDATAVIEW_CELL_INERT, colWidths[i]);
|
}
|
else {
|
auto bc = new ButtonRenderer();
|
listCtrl->AppendColumn(new wxDataViewColumn(headers[i], bc, 9, colWidths[i], wxALIGN_LEFT, wxDATAVIEW_COL_RESIZABLE));
|
}
|
}
|
|
for (int i = 0; i < 5; i++) {
|
wxVector<wxVariant> data;
|
data.push_back(wxVariant("ÃÀµÄתծ"));
|
data.push_back(wxVariant("10.2%"));
|
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("1.01%"));
|
data.push_back(wxVariant("ÃÀµÄ¼¯ÍÅ"));
|
data.push_back("");
|
listCtrl->AppendItem(data);
|
}
|
listCtrl->Refresh();
|
|
|
|
positionWidgets->listCtrlReport = listCtrl;
|
|
|
|
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
sizer->Add(positionWidgets->listCtrlReport, 1, wxEXPAND);
|
panel->SetSizer(sizer);
|
}
|
|
void ViewManager::initSellView(wxPanel* panel)
|
{
|
const int moneys[] = { 50000,40000,30000,20000,10000,5000,3000,2000,1000 };
|
//-------°´Å¥²Ù×÷ÇøÓò
|
const int COLUMN_SPACE = 8;
|
|
auto btnSizer = new wxBoxSizer(wxHORIZONTAL);
|
wxPanel* btnPannel = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 55));
|
btnPannel->SetSizer(btnSizer);
|
|
sellWidgets->buyLock = new wxCheckBox(btnPannel, wxID_ANY, "ÂòËø¶¨");
|
sellWidgets->buyMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1));
|
sellWidgets->sellLock = new wxCheckBox(btnPannel, wxID_ANY, "ÂôËø¶¨");
|
sellWidgets->sellMoney = new wxTextCtrl(btnPannel, wxID_ANY, "", wxDefaultPosition, wxSize(60, -1));
|
auto bv = new wxBoxSizer(wxVERTICAL);
|
bv->Add(sellWidgets->buyLock, 0, wxTOP, 5);
|
bv->AddStretchSpacer();
|
bv->Add(sellWidgets->buyMoney, 0);
|
btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, 5);
|
|
bv = new wxBoxSizer(wxVERTICAL);
|
bv->Add(sellWidgets->sellLock, 0, wxTOP, 5);
|
bv->AddStretchSpacer();
|
bv->Add(sellWidgets->sellMoney, 0);
|
btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
|
|
|
|
// ¿ªÆô/¹Ø±Õ½»Ò×
|
sellWidgets->openTrade = new wxButton(btnPannel, wxID_ANY, "¿ªÆô½»Ò×", wxDefaultPosition, wxSize(60, -1));
|
sellWidgets->closeTrade = new wxButton(btnPannel, wxID_ANY, "¹Ø±Õ½»Ò×", wxDefaultPosition, wxSize(60, -1));
|
bv = new wxBoxSizer(wxVERTICAL);
|
bv->Add(sellWidgets->openTrade, 0);
|
bv->AddStretchSpacer();
|
bv->Add(sellWidgets->closeTrade, 0);
|
btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
|
|
|
// ÏëÂòµ¥
|
sellWidgets->addWantBuy = new wxButton(btnPannel, wxID_ANY, "¼ÓÏë", wxDefaultPosition, wxSize(40, -1));
|
sellWidgets->removeWantBuy = new wxButton(btnPannel, wxID_ANY, "ÒÆÏë", wxDefaultPosition, wxSize(40, -1));
|
sellWidgets->wantBuyList = new wxButton(btnPannel, wxID_ANY, "Ïëµ¥", wxDefaultPosition, wxSize(40, -1));
|
bv = new wxBoxSizer(wxVERTICAL);
|
bv->Add(sellWidgets->addWantBuy, 0);
|
bv->AddStretchSpacer();
|
bv->Add(sellWidgets->removeWantBuy, 0);
|
btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
|
btnSizer->Add(sellWidgets->wantBuyList, 0, wxEXPAND | wxLEFT, 3);
|
|
// Âô³ö°´Å¥
|
sellWidgets->sellBtn = new wxButton(btnPannel, wxID_ANY, "Âô³ö", wxDefaultPosition, wxSize(80, -1));
|
wxFont font(15, sellWidgets->sellBtn->GetFont().GetFamily(), wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
|
sellWidgets->sellBtn->SetFont(font);
|
btnSizer->Add(sellWidgets->sellBtn, 0, wxEXPAND | wxLEFT, 10);
|
|
// ×Ô¶¯³·µ¥/²ÎÊýÉèÖÃ
|
sellWidgets->autoCancel = new wxCheckBox(btnPannel, wxID_ANY, "×Ô¶¯³·µ¥");
|
sellWidgets->setting = new wxButton(btnPannel, wxID_ANY, "²ÎÊýÉèÖÃ", wxDefaultPosition, wxSize(70, -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);
|
|
// Âò¼Û/Âô¼ÛÉèÖÃ
|
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));
|
for (int i = 0; i < 5; i++) {
|
sellWidgets->sellPrice->Append(prices_sell[i]);
|
sellWidgets->buyPrice->Append(prices_buy[i]);
|
}
|
sellWidgets->sellPrice->SetSelection(1);
|
sellWidgets->buyPrice->SetSelection(2);
|
|
bv = new wxBoxSizer(wxVERTICAL);
|
bv->Add(new wxStaticText(btnPannel, wxID_ANY, "Âô¼ÛÉèÖÃ"), 0);
|
bv->AddStretchSpacer();
|
bv->Add(sellWidgets->sellPrice, 0);
|
btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, 10);
|
|
bv = new wxBoxSizer(wxVERTICAL);
|
bv->Add(new wxStaticText(btnPannel, wxID_ANY, "Âò¼ÛÉèÖÃ"), 0);
|
bv->AddStretchSpacer();
|
bv->Add(sellWidgets->buyPrice, 0);
|
btnSizer->Add(bv, 0, wxEXPAND | wxLEFT, COLUMN_SPACE);
|
|
|
// ÂòÈë
|
btnSizer->AddStretchSpacer();
|
sellWidgets->buyBtn = new wxButton(btnPannel, wxID_ANY, "ÂòÈë", wxDefaultPosition, wxSize(50, -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)));
|
}
|
|
auto sellNumsSizer = new wxBoxSizer(wxHORIZONTAL);
|
|
for (std::list<wxButton*>::iterator e = sellWidgets->sellNums.begin(); e != sellWidgets->sellNums.end(); e++) {
|
sellNumsSizer->Add(*e, 1, wxEXPAND | wxLEFT | wxRIGHT, 2);
|
}
|
auto rootSizer = new wxBoxSizer(wxVERTICAL);
|
rootSizer->Add(btnPannel, 0, wxEXPAND | wxTOP, 5);
|
rootSizer->Add(sellNumsSizer, 1, wxEXPAND | wxTOP, 5);
|
panel->SetSizer(rootSizer);
|
}
|
|
void ViewManager::OnPositionSelectionChanged(wxDataViewEvent& event)
|
{
|
event.Skip();
|
//event.Veto();
|
}
|