mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-08-20 06:12:41 -06:00
ScatterCtrl: GetSeries changed to GetDataSource
git-svn-id: svn://ultimatepp.org/upp/trunk@13650 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
a5175ef38f
commit
85ced8bdd4
7 changed files with 127 additions and 61 deletions
|
|
@ -29,10 +29,10 @@ void DataDlg::Init(ScatterCtrl& scatter)
|
|||
OnTab();
|
||||
|
||||
bool addedAll = false;
|
||||
DataSource &serie0 = scatter.GetSeries(0);
|
||||
DataSource &serie0 = scatter.GetDataSource(0);
|
||||
for(int c = 1; c < scatter.GetCount(); c++) {
|
||||
if (!IsNull(scatter.GetCount(c))) {
|
||||
DataSource &serie = scatter.GetSeries(c);
|
||||
DataSource &serie = scatter.GetDataSource(c);
|
||||
if (serie0.SameX(serie)) {
|
||||
if (!addedAll) {
|
||||
addedAll = true;
|
||||
|
|
@ -51,7 +51,7 @@ void DataDlg::Init(ScatterCtrl& scatter)
|
|||
|
||||
Value DataDlg::DataSourceX::Format(const Value& q) const
|
||||
{
|
||||
if (int(q) >= pscatter->GetSeries(index).GetCount())
|
||||
if (int(q) >= pscatter->GetDataSource(index).GetCount())
|
||||
return Null;
|
||||
Value ret = pscatter->GetStringX(index, q);
|
||||
if (ret.Is<String>()) {
|
||||
|
|
@ -64,7 +64,7 @@ Value DataDlg::DataSourceX::Format(const Value& q) const
|
|||
|
||||
Value DataDlg::DataSourceY::Format(const Value& q) const
|
||||
{
|
||||
if (int(q) >= pscatter->GetSeries(index).GetCount())
|
||||
if (int(q) >= pscatter->GetDataSource(index).GetCount())
|
||||
return Null;
|
||||
Value ret = pscatter->GetStringY(index, q);
|
||||
if (ret.Is<String>()) {
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ void ProcessingTab::OnArrayBar(Bar &menu) {
|
|||
void ProcessingTab::OnFit() {
|
||||
WaitCursor waitcursor;
|
||||
|
||||
DataSource &ds = pscatter->GetSeries(id);
|
||||
DataSource &ds = pscatter->GetDataSource(id);
|
||||
|
||||
userEquation->Init("User", ~tabBestFitRight.userFormula, "x");
|
||||
|
||||
|
|
@ -230,7 +230,7 @@ void ProcessingTab::OnFit() {
|
|||
|
||||
void ProcessingTab::OnOp()
|
||||
{
|
||||
DataSource &data = tabFitLeft.scatter.GetSeries(0);
|
||||
DataSource &data = tabFitLeft.scatter.GetDataSource(0);
|
||||
|
||||
if (data.IsParam() || data.IsExplicit())
|
||||
return;
|
||||
|
|
@ -326,7 +326,7 @@ void ProcessingTab::OnOp()
|
|||
|
||||
void ProcessingTab::OnAutoSensSector()
|
||||
{
|
||||
DataSource &data = tabFitLeft.scatter.GetSeries(0);
|
||||
DataSource &data = tabFitLeft.scatter.GetDataSource(0);
|
||||
Vector<Pointf> secAvg;
|
||||
double baseWidth;
|
||||
|
||||
|
|
@ -363,7 +363,7 @@ void ProcessingTab::OnOperation()
|
|||
}
|
||||
}
|
||||
exclamationOpened = false;
|
||||
dataXRange.Init(pscatter->GetSeries(id), tabOpRight.xLow, tabOpRight.xHigh);
|
||||
dataXRange.Init(pscatter->GetDataSource(id), tabOpRight.xLow, tabOpRight.xHigh);
|
||||
tabOpLeft.scatter.Refresh();
|
||||
}
|
||||
|
||||
|
|
@ -373,7 +373,7 @@ void ProcessingTab::UpdateField(const String _name, int _id)
|
|||
name.SetText(_name);
|
||||
|
||||
tabFitLeft.scatter.RemoveAllSeries();
|
||||
tabFitLeft.scatter.AddSeries(pscatter->GetSeries(id)).SetSequentialX(pscatter->GetSequentialX())
|
||||
tabFitLeft.scatter.AddSeries(pscatter->GetDataSource(id)).SetSequentialX(pscatter->GetSequentialX())
|
||||
.Legend(pscatter->GetLegend(id));
|
||||
tabFitLeft.scatter.SetFastViewX(pscatter->GetFastViewX());
|
||||
|
||||
|
|
@ -400,7 +400,7 @@ void ProcessingTab::UpdateField(const String _name, int _id)
|
|||
|
||||
tabFitLeft.scatter.ShowInfo().ShowContextMenu().ShowProcessDlg().ShowPropertiesDlg().SetMouseHandlingLinked(true, true);
|
||||
|
||||
DataSource &data = tabFitLeft.scatter.GetSeries(0);
|
||||
DataSource &data = tabFitLeft.scatter.GetDataSource(0);
|
||||
|
||||
if (!data.IsParam()/* && !data.IsExplicit()*/) {
|
||||
double avg = data.AvgY();
|
||||
|
|
@ -461,7 +461,7 @@ void ProcessingTab::UpdateField(const String _name, int _id)
|
|||
|
||||
void ProcessingTab::OnUpdateSensitivity()
|
||||
{
|
||||
DataSource &data = tabFitLeft.scatter.GetSeries(0);
|
||||
DataSource &data = tabFitLeft.scatter.GetDataSource(0);
|
||||
|
||||
bool refresh = false;
|
||||
if (tabFitRight.opMax && newWidthMax != tabFitRight.width) {
|
||||
|
|
@ -505,7 +505,7 @@ void ProcessingTab::OnUpdateSensitivity()
|
|||
|
||||
void ProcessingTab::OnSet()
|
||||
{
|
||||
DataSource &data = tabFitLeft.scatter.GetSeries(0);
|
||||
DataSource &data = tabFitLeft.scatter.GetDataSource(0);
|
||||
|
||||
if (tabFreqFirst && tab.Get() == 1) {
|
||||
tabFreqFirst = false;
|
||||
|
|
@ -538,19 +538,19 @@ void ProcessingTab::OnSet()
|
|||
|
||||
tabOpLeft.scatter.RemoveAllSeries();
|
||||
String legend = pscatter->GetLegend(id);
|
||||
double xLow = pscatter->GetSeries(id).MinX();
|
||||
double xLow = pscatter->GetDataSource(id).MinX();
|
||||
if (IsNull(xLow))
|
||||
xLow = pscatter->GetXMin();
|
||||
tabOpRight.xLow <<= xLow;
|
||||
double xHigh = pscatter->GetSeries(id).MaxX();
|
||||
double xHigh = pscatter->GetDataSource(id).MaxX();
|
||||
if (IsNull(xHigh))
|
||||
xHigh = pscatter->GetXMin() + pscatter->GetXRange();
|
||||
tabOpRight.xHigh <<= xHigh;
|
||||
dataXRange.Init(pscatter->GetSeries(id), xLow, xHigh);
|
||||
dataXRange.Init(pscatter->GetDataSource(id), xLow, xHigh);
|
||||
tabOpLeft.scatter.AddSeries(dataXRange).SetSequentialX(pscatter->GetSequentialX())
|
||||
.Legend(legend + String("-") + t_("Processed")).NoMark()
|
||||
.Stroke(8, Upp::Color(115, 214, 74));
|
||||
tabOpLeft.scatter.AddSeries(pscatter->GetSeries(id)).SetSequentialX(pscatter->GetSequentialX())
|
||||
tabOpLeft.scatter.AddSeries(pscatter->GetDataSource(id)).SetSequentialX(pscatter->GetSequentialX())
|
||||
.Legend(legend).NoMark().Stroke(2, Blue());
|
||||
tabOpLeft.scatter.SetFastViewX(pscatter->GetFastViewX());
|
||||
|
||||
|
|
@ -571,7 +571,7 @@ void ProcessingTab::OnSet()
|
|||
tabBestFitLeft.scatter.RemoveAllSeries();
|
||||
String legend = pscatter->GetLegend(id);
|
||||
|
||||
tabBestFitLeft.scatter.AddSeries(pscatter->GetSeries(id)).SetSequentialX(pscatter->GetSequentialX())
|
||||
tabBestFitLeft.scatter.AddSeries(pscatter->GetDataSource(id)).SetSequentialX(pscatter->GetSequentialX())
|
||||
.Legend(legend).NoMark().Stroke(2);
|
||||
tabBestFitLeft.scatter.SetFastViewX(pscatter->GetFastViewX());
|
||||
|
||||
|
|
@ -636,7 +636,7 @@ void ProcessingTab::OnFFT()
|
|||
{
|
||||
WaitCursor waitcursor;
|
||||
|
||||
DataSource &data = tabFitLeft.scatter.GetSeries(0);
|
||||
DataSource &data = tabFitLeft.scatter.GetDataSource(0);
|
||||
|
||||
Vector<Pointf> orderedSeries;
|
||||
for (int64 i = 0; i < data.GetCount(); ++i) { // Clean Nulls
|
||||
|
|
|
|||
|
|
@ -324,6 +324,8 @@ void GeneralTab::Init(ScatterCtrl& scatter)
|
|||
editSensitivity <<= THISBACK(Change);
|
||||
editJpgQ <<= THISBACK(Change);
|
||||
|
||||
butApplyToAll <<= THISBACK(ChangeAll);
|
||||
|
||||
Change();
|
||||
}
|
||||
|
||||
|
|
@ -342,6 +344,23 @@ void GeneralTab::Change()
|
|||
scatter.Refresh();
|
||||
}
|
||||
|
||||
void GeneralTab::ChangeAll()
|
||||
{
|
||||
for (int i = 0; i < ScatterCtrl::GetInstancesCount(); ++i) {
|
||||
ScatterCtrl &scatter = ScatterCtrl::GetInstance(i);
|
||||
|
||||
scatter.SetMode(~dropResolution);
|
||||
scatter.Rotate((ScatterCtrl::Angle)(int)dropRotate.GetData());
|
||||
Size size(~editWidth, ~editHeight);
|
||||
scatter.SetSaveSize(size);
|
||||
scatter.ScatterDraw::Responsive(~opResponsive, ~editSensitivity);
|
||||
scatter.SetJPGQuality(~editJpgQ);
|
||||
|
||||
scatter.SetModify();
|
||||
scatter.Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void SeriesTab::Init(ScatterCtrl& scatter)
|
||||
{
|
||||
CtrlLayout(left);
|
||||
|
|
|
|||
|
|
@ -164,6 +164,7 @@ private:
|
|||
ScatterCtrl *pscatter;
|
||||
|
||||
void Change();
|
||||
void ChangeAll();
|
||||
};
|
||||
|
||||
class DataDlg : public WithData<TopWindow> {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
#define TFILE <ScatterCtrl/ScatterCtrl.t>
|
||||
#include <Core/t.h>
|
||||
|
||||
Vector<ScatterCtrl *> ScatterCtrl::instances;
|
||||
|
||||
#ifdef PLATFORM_WIN32
|
||||
|
||||
void ScatterCtrl::SaveAsMetafile(const char* file)
|
||||
|
|
@ -193,7 +195,6 @@ void ScatterCtrl::SaveControl() {
|
|||
}
|
||||
|
||||
void ScatterCtrl::Paint0(Draw& w, const Size &sz) {
|
||||
GuiLock __;
|
||||
if (IsNull(highlight_0) && highlighting) {
|
||||
highlighting = false;
|
||||
KillTimeCallback();
|
||||
|
|
@ -233,6 +234,8 @@ void ScatterCtrl::Paint0(Draw& w, const Size &sz) {
|
|||
|
||||
|
||||
void ScatterCtrl::Paint(Draw& w) {
|
||||
GuiLock __;
|
||||
|
||||
if (rotate == Angle_0)
|
||||
Paint0(w, GetSize());
|
||||
else if (rotate == Angle_90) {
|
||||
|
|
@ -257,8 +260,46 @@ void ScatterCtrl::TimerCallback() {
|
|||
Refresh();
|
||||
}
|
||||
|
||||
void ScatterCtrl::ProcessPopUp(const Point &pt)
|
||||
{
|
||||
void ScatterCtrl::Closest(double &x, double &y, double &y2) {
|
||||
double minD = DBL_MAX;
|
||||
double retx, rety, rety2;
|
||||
|
||||
for (int i = 0; i < series.GetCount(); ++i) {
|
||||
ScatterSeries &serie = series[i];
|
||||
if (serie.IsDeleted() || serie.opacity == 0 || serie.Data().IsExplicit())
|
||||
continue;
|
||||
DataSource &data = serie.Data();
|
||||
double d;
|
||||
int64 id;
|
||||
if (serie.primaryY) {
|
||||
id = data.Closest(x, y);
|
||||
d = GetScatterDistance(x - data.x(id), y - data.y(id));
|
||||
} else {
|
||||
id = data.Closest(x, y);
|
||||
d = GetScatterDistance2(x - data.x(id), y - data.y(id));
|
||||
}
|
||||
if (minD > d) {
|
||||
minD = d;
|
||||
retx = data.x(id);
|
||||
if (serie.primaryY) {
|
||||
rety = data.y(id);
|
||||
rety2 = GetRealPosY2(GetScatterPosY(data.y(id)));
|
||||
} else {
|
||||
rety2 = data.y(id);
|
||||
rety = GetRealPosY(GetScatterPosY2(data.y(id)));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (minD == DBL_MAX)
|
||||
x = y = y2 = Null;
|
||||
else {
|
||||
x = retx;
|
||||
y = rety;
|
||||
y2 = rety2;
|
||||
}
|
||||
}
|
||||
|
||||
void ScatterCtrl::ProcessPopUp(Point &pt) {
|
||||
double _x = GetRealPosX(popLT.x);
|
||||
double _y = GetRealPosY(popLT.y);
|
||||
double _y2 = GetRealPosY2(popLT.y);
|
||||
|
|
@ -266,6 +307,10 @@ void ScatterCtrl::ProcessPopUp(const Point &pt)
|
|||
double y = GetRealPosY(pt.y);
|
||||
double y2 = GetRealPosY2(pt.y);
|
||||
|
||||
if (IsNull(popLT))
|
||||
popLT = pt;
|
||||
popRB = pt;
|
||||
|
||||
double dx = fabs(x - _x);
|
||||
double dy = fabs(y - _y);
|
||||
double dy2 = fabs(y2 - _y2);
|
||||
|
|
@ -379,14 +424,6 @@ void ScatterCtrl::ProcessPopUp(const Point &pt)
|
|||
} else
|
||||
popTextEnd.Hide();
|
||||
}
|
||||
|
||||
/*void ScatterCtrl::ProcessClickSeries(const Point &pt)
|
||||
{
|
||||
double posx = GetRealPosX(pt.x);
|
||||
double posy = GetRealPosY(pt.y);
|
||||
double dx = 2*GetPixelThickX();
|
||||
double dy = 2*GetPixelThickY();
|
||||
}*/
|
||||
|
||||
void ScatterCtrl::DoMouseAction(bool down, Point pt, ScatterAction action, int wheel)
|
||||
{
|
||||
|
|
@ -520,8 +557,9 @@ bool ScatterCtrl::ProcessKey(int key)
|
|||
return processed;
|
||||
}
|
||||
|
||||
void ScatterCtrl::LabelPopUp(bool down, Point &pt)
|
||||
{
|
||||
void ScatterCtrl::LabelPopUp(bool down, Point &pt) {
|
||||
GuiLock __;
|
||||
|
||||
if (down) {
|
||||
if(showInfo && PointInPlot(pt)) {
|
||||
popTextBegin.AppearOnly(this);
|
||||
|
|
@ -530,16 +568,6 @@ void ScatterCtrl::LabelPopUp(bool down, Point &pt)
|
|||
popTextEnd.AppearOnly(this);
|
||||
|
||||
isLabelPopUp = true;
|
||||
if (IsNull(popLT))
|
||||
popLT = pt;
|
||||
popRB = pt;
|
||||
/*Rect wa = GetWorkArea();
|
||||
Rect rc = GetScreenRect();
|
||||
if (wa.right - (rc.left + pt.x) < 200)
|
||||
pt.x -= 200;
|
||||
if (wa.bottom - (rc.top + pt.y) < 200)
|
||||
pt.y -= 200;*/
|
||||
//ProcessClickSeries(pt); TBD
|
||||
ProcessPopUp(pt);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -555,8 +583,7 @@ void ScatterCtrl::LabelPopUp(bool down, Point &pt)
|
|||
}
|
||||
}
|
||||
|
||||
void ScatterCtrl::ZoomWindow(bool down, Point &pt)
|
||||
{
|
||||
void ScatterCtrl::ZoomWindow(bool down, Point &pt) {
|
||||
if (down) {
|
||||
if (PointInPlot(pt)) {
|
||||
isZoomWindow = true;
|
||||
|
|
@ -565,7 +592,7 @@ void ScatterCtrl::ZoomWindow(bool down, Point &pt)
|
|||
popRB = pt;
|
||||
}
|
||||
} else {
|
||||
if(isZoomWindow) {
|
||||
if (isZoomWindow) {
|
||||
isLabelPopUp = isZoomWindow = false;
|
||||
|
||||
if (popLT.x > popRB.x)
|
||||
|
|
@ -625,7 +652,7 @@ bool ScatterCtrl::Key(dword key, int )
|
|||
else if (key == K_CTRL_D)
|
||||
DoShowData();
|
||||
else if (key == K_CTRL_C)
|
||||
SaveToClipboard(true);
|
||||
SaveToClipboard(false);
|
||||
else if (key == K_CTRL_S)
|
||||
SaveToFile(Null);
|
||||
else
|
||||
|
|
@ -722,6 +749,8 @@ void ScatterCtrl::MouseWheel(Point pt, int zdelta, dword keyFlags)
|
|||
|
||||
void ScatterCtrl::MouseMove(Point pt, dword keyFlags)
|
||||
{
|
||||
GuiLock __;
|
||||
|
||||
MousePointRot(pt);
|
||||
if (isScrolling) {
|
||||
double factorX = 0, factorY = 0;
|
||||
|
|
@ -738,9 +767,6 @@ void ScatterCtrl::MouseMove(Point pt, dword keyFlags)
|
|||
}
|
||||
if(isLabelPopUp) {
|
||||
if (showInfo && PointInPlot(pt)) {
|
||||
if (IsNull(popLT))
|
||||
popLT = pt;
|
||||
popRB = pt;
|
||||
ProcessPopUp(pt);
|
||||
popTextBegin.AppearOnlyOpen(this);
|
||||
popTextHoriz.AppearOnlyOpen(this);
|
||||
|
|
@ -886,6 +912,7 @@ void ScatterCtrl::OnTypeImage(FileSel *_fs)
|
|||
void ScatterCtrl::SaveToFile(String fileName)
|
||||
{
|
||||
GuiLock __;
|
||||
|
||||
if (IsNull(fileName)) {
|
||||
FileSel fs;
|
||||
fs.Type(Format(t_("%s bitmap file"), "jpeg"), "*.jpg");
|
||||
|
|
@ -1067,5 +1094,7 @@ ScatterCtrl::ScatterCtrl() : popOffset(10, 12), mouseAction(NONE)
|
|||
AddKeyBehavior(true, false, false, K_UP, true, ScatterCtrl::SCROLL_UP);
|
||||
AddKeyBehavior(true, false, false, K_DOWN, true, ScatterCtrl::SCROLL_DOWN);
|
||||
AddKeyBehavior(true, false, false, K_F, true, ScatterCtrl::ZOOM_FIT);
|
||||
|
||||
AddInstance(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,15 +60,15 @@ public:
|
|||
ids << idY << idX;
|
||||
Init(_data, ids, _useCols, _beginData, _numData);
|
||||
}
|
||||
virtual inline double y(int64 id) {return useCols ? data->Get(beginData + int(id), ids[0]) : data->Get(ids[0], beginData + int(id));};
|
||||
virtual inline double x(int64 id) {
|
||||
virtual inline double y(int64 id) {return useCols ? data->Get(beginData + int(id), ids[0]) : data->Get(ids[0], beginData + int(id));};
|
||||
virtual inline double x(int64 id) {
|
||||
if (IsNull(ids[1]))
|
||||
return double(id);
|
||||
else
|
||||
return useCols ? data->Get(beginData + int(id), ids[1]) : data->Get(ids[1], beginData + int(id));
|
||||
}
|
||||
virtual inline double xn(int n, int64 id) {return useCols ? data->Get(beginData + int(id), ids[n]) : data->Get(ids[n], beginData + int(id));}
|
||||
virtual inline int64 GetCount() {return numData;};
|
||||
virtual inline int64 GetCount() const {return numData;};
|
||||
};
|
||||
|
||||
class GridCtrlSource : public DataSource {
|
||||
|
|
@ -112,7 +112,7 @@ public:
|
|||
_ids << idY << idX;
|
||||
Init(_data, _ids, _useCols, _beginData, _numData);
|
||||
}
|
||||
double GetVal(int64 id, int idx) {
|
||||
double GetVal(int64 id, int idx) const {
|
||||
if (IsNull(ids[idx]))
|
||||
return double(id);
|
||||
else {
|
||||
|
|
@ -131,10 +131,10 @@ public:
|
|||
return ScanDouble(val.ToString());
|
||||
}
|
||||
}
|
||||
virtual inline double y(int64 id) {return GetVal(id, 0);}
|
||||
virtual inline double x(int64 id) {return GetVal(id, 1);}
|
||||
virtual inline double y(int64 id) {return GetVal(id, 0);}
|
||||
virtual inline double x(int64 id) {return GetVal(id, 1);}
|
||||
virtual inline double xn(int n, int64 id) {return useCols ? data->Get(beginData + int(id), ids[n]) : data->Get(ids[n], beginData + int(id));}
|
||||
virtual inline int64 GetCount() {return numData;};
|
||||
virtual inline int64 GetCount() const {return numData;};
|
||||
};
|
||||
|
||||
class ScatterCtrl : public Ctrl, public ScatterDraw {
|
||||
|
|
@ -142,10 +142,11 @@ public:
|
|||
typedef ScatterCtrl CLASSNAME;
|
||||
|
||||
ScatterCtrl();
|
||||
virtual ~ScatterCtrl() {};
|
||||
virtual ~ScatterCtrl() {RemoveInstance(this);};
|
||||
|
||||
enum ScatterAction {NO_ACTION = 0, SCROLL, ZOOM_H_ENL, ZOOM_H_RED, ZOOM_V_ENL, ZOOM_V_RED, SHOW_COORDINATES, CONTEXT_MENU, ZOOM_WINDOW,
|
||||
SCROLL_LEFT, SCROLL_RIGHT, SCROLL_UP, SCROLL_DOWN, ZOOM_FIT};
|
||||
enum ScatterAction {NO_ACTION = 0, SCROLL, ZOOM_H_ENL, ZOOM_H_RED, ZOOM_V_ENL, ZOOM_V_RED,
|
||||
SHOW_COORDINATES, CONTEXT_MENU, ZOOM_WINDOW,
|
||||
SCROLL_LEFT, SCROLL_RIGHT, SCROLL_UP, SCROLL_DOWN, ZOOM_FIT};
|
||||
#define SHOW_INFO SHOW_COORDINATES
|
||||
|
||||
struct MouseBehavior {
|
||||
|
|
@ -277,6 +278,11 @@ public:
|
|||
void InsertSeries(int id, ArrayCtrl &data, bool useCols = true, int idX = 0, int idY = 1, int idZ = 2, int beginData = 0, int numData = Null);
|
||||
void InsertSeries(int id, GridCtrl &data, bool useCols = true, int idX = 0, int idY = 1, int idZ = 2, int beginData = 0, int numData = Null);
|
||||
|
||||
void RemoveAllSeries() {
|
||||
GuiLock __;
|
||||
ScatterDraw::RemoveAllSeries();
|
||||
}
|
||||
|
||||
ScatterCtrl& SetMaxRefreshTime(int _maxRefresh_ms) {maxRefresh_ms = _maxRefresh_ms; return *this;}
|
||||
int GetMaxRefreshTime() {return maxRefresh_ms;}
|
||||
|
||||
|
|
@ -336,6 +342,9 @@ public:
|
|||
virtual bool Key(dword key, int count);
|
||||
virtual void GotFocus();
|
||||
virtual void LostFocus();
|
||||
|
||||
static int GetInstancesCount() {return instances.GetCount();}
|
||||
static ScatterCtrl &GetInstance(int i) {return *(instances[i]);}
|
||||
|
||||
private:
|
||||
bool showInfo;
|
||||
|
|
@ -366,8 +375,7 @@ private:
|
|||
|
||||
void Paint0(Draw& w, const Size &sz);
|
||||
|
||||
void ProcessPopUp(const Point &pt);
|
||||
//void ProcessClickSeries(const Point &pt);
|
||||
void ProcessPopUp(Point &pt);
|
||||
|
||||
void DoMouseAction(bool down, Point pt, ScatterAction action, int wheel);
|
||||
void DoKeyAction(ScatterAction action);
|
||||
|
|
@ -383,6 +391,8 @@ private:
|
|||
void DoShowData();
|
||||
void DoProcessing();
|
||||
|
||||
void Closest(double &x, double &y, double &y2);
|
||||
|
||||
virtual Image CursorImage(Point p, dword keyflags);
|
||||
|
||||
template <class T>
|
||||
|
|
@ -404,7 +414,13 @@ private:
|
|||
|
||||
int rotate;
|
||||
Point &MousePointRot(Point &pt);
|
||||
Point &MousePointUnrot(Point &pt);
|
||||
Point &MousePointUnrot(Point &pt);
|
||||
|
||||
static Vector<ScatterCtrl *> instances;
|
||||
static void AddInstance(ScatterCtrl *instance) {instances << instance;}
|
||||
static void RemoveInstance(ScatterCtrl *instance) {
|
||||
instances.RemoveIf([&](int i) {return instance == instances[i];});
|
||||
}
|
||||
};
|
||||
|
||||
template <class T>
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ LAYOUT(General, 340, 188)
|
|||
ITEM(OptionBox, opResponsive, AutoBox(true).SetLabel(t_("Responsive")).LeftPosZ(136, 112).TopPosZ(32, 44))
|
||||
ITEM(Label, dv___12, SetLabel(t_("JPG quality:")).LeftPosZ(136, 64).TopPosZ(80, 19))
|
||||
ITEM(EditDouble, editSensitivity, Min(0).LeftPosZ(216, 24).TopPosZ(48, 19))
|
||||
ITEM(Button, butApplyToAll, SetLabel(t_("Apply to all plots")).RightPosZ(8, 96).BottomPosZ(8, 20))
|
||||
END_LAYOUT
|
||||
|
||||
LAYOUT(SeriesLeft, 128, 228)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue