git-svn-id: svn://db.shs.com.ru/libs@127 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -128,6 +128,12 @@ void CDCore::k_update(PIIODevice * d) {
|
|||||||
k_ = uk;
|
k_ = uk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDCore::k_calculate() {
|
||||||
|
k_.calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CDCore::reinitConnection(const PIString &configuration) {
|
void CDCore::reinitConnection(const PIString &configuration) {
|
||||||
PIString c = configuration;
|
PIString c = configuration;
|
||||||
connection.stop();
|
connection.stop();
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public:
|
|||||||
void k_read(PIIODevice * d);
|
void k_read(PIIODevice * d);
|
||||||
void k_parse(PIIODevice * d);
|
void k_parse(PIIODevice * d);
|
||||||
void k_update(PIIODevice * d);
|
void k_update(PIIODevice * d);
|
||||||
|
void k_calculate();
|
||||||
PIString pultConfig() {return PIString(pult_config);}
|
PIString pultConfig() {return PIString(pult_config);}
|
||||||
PIString appConfig() {return PIString(app_config);}
|
PIString appConfig() {return PIString(app_config);}
|
||||||
void reinitConnection(const PIString & configuration);
|
void reinitConnection(const PIString & configuration);
|
||||||
|
|||||||
@@ -118,6 +118,11 @@ void KInterface::update(PIIODevice * d) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void KInterface::calculate() {
|
||||||
|
core->k_calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PIString KInterface::appConfig() {
|
PIString KInterface::appConfig() {
|
||||||
return core->appConfig();
|
return core->appConfig();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ public:
|
|||||||
void read(PIIODevice * d);
|
void read(PIIODevice * d);
|
||||||
void parse(PIIODevice * d);
|
void parse(PIIODevice * d);
|
||||||
void update(PIIODevice * d);
|
void update(PIIODevice * d);
|
||||||
|
void calculate();
|
||||||
|
|
||||||
PIString appConfig();
|
PIString appConfig();
|
||||||
PIString pultConfig();
|
PIString pultConfig();
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#include "cdutils_types.h"
|
#include "cdutils_types.h"
|
||||||
#include "piconfig.h"
|
#include "piconfig.h"
|
||||||
#include "pifile.h"
|
#include "pifile.h"
|
||||||
|
#include "pievaluator.h"
|
||||||
|
#include "cdutils_core.h"
|
||||||
|
|
||||||
using namespace CDUtils;
|
using namespace CDUtils;
|
||||||
|
|
||||||
@@ -10,8 +12,9 @@ CDType::CDType() {
|
|||||||
index_ = -1;
|
index_ = -1;
|
||||||
value_d = 0.;
|
value_d = 0.;
|
||||||
value_i = 0;
|
value_i = 0;
|
||||||
value_b = false;
|
value_b = calculated = false;
|
||||||
cd_type_ = cdNull;
|
cd_type_ = cdNull;
|
||||||
|
parent = 0;
|
||||||
// debug_cnt = cdtype_debug_cnt;
|
// debug_cnt = cdtype_debug_cnt;
|
||||||
// cdtype_debug_cnt++;
|
// cdtype_debug_cnt++;
|
||||||
// piCout << "[CDType]" << "create Null" << debug_cnt;
|
// piCout << "[CDType]" << "create Null" << debug_cnt;
|
||||||
@@ -31,6 +34,8 @@ CDType::CDType(int i, const PIString & n, const PIString & t, const PIString & v
|
|||||||
value_i = v.toInt();
|
value_i = v.toInt();
|
||||||
value_b = v.toBool();
|
value_b = v.toBool();
|
||||||
cd_type_ = cd_t;
|
cd_type_ = cd_t;
|
||||||
|
calculated = false;
|
||||||
|
parent = 0;
|
||||||
if (type_ == "e") {
|
if (type_ == "e") {
|
||||||
enum_values << comment_.inBrackets('{', '}').split(",");
|
enum_values << comment_.inBrackets('{', '}').split(",");
|
||||||
piForeach(PIString &s, enum_values) s.trim();
|
piForeach(PIString &s, enum_values) s.trim();
|
||||||
@@ -60,18 +65,83 @@ PIString CDType::value() const {
|
|||||||
|
|
||||||
void CDType::setFormula(const PIString & f) {
|
void CDType::setFormula(const PIString & f) {
|
||||||
formula_ = f;
|
formula_ = f;
|
||||||
calculate();
|
calculated = false;
|
||||||
|
//PIEvaluator e;
|
||||||
|
//calculate(&e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CDType::calculate() {
|
void CDType::setValue(const PIString & value_) {
|
||||||
value_s = formula_.trimmed();
|
formula_ = value_;
|
||||||
value_d = formula_.toDouble();
|
value_d = formula_.toDouble();
|
||||||
value_i = formula_.toInt();
|
value_i = formula_.toInt();
|
||||||
value_b = formula_.toBool();
|
value_b = formula_.toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CDType::calculate(PIEvaluator * e, PIVector<const CDType * > stack) {
|
||||||
|
if (stack.contains(this)) {
|
||||||
|
error_ = "Circular dependencies: ";
|
||||||
|
piForeachC (CDType * k, stack)
|
||||||
|
error_ << k->name() << " -> ";
|
||||||
|
error_ << name();
|
||||||
|
//piCout << error_;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
stack << this;
|
||||||
|
if (calculated) return true;
|
||||||
|
calculated = true;
|
||||||
|
error_.clear();
|
||||||
|
if (!parent) return true;
|
||||||
|
//piCout << "calc" << name_ << (parent ? parent->alias : "root");
|
||||||
|
value_s = formula_.trimmed();
|
||||||
|
for (;;) {
|
||||||
|
int ki = value_s.find("K[");
|
||||||
|
if (ki < 0) break;
|
||||||
|
int ke = value_s.find("]", ki + 2);
|
||||||
|
if (ke < 0) break;
|
||||||
|
PIString kp = value_s.mid(ki + 2, ke - ki - 2);
|
||||||
|
//piCout << kp;
|
||||||
|
CDType & k((*parent)[kp]);
|
||||||
|
k.calculate(e, stack);
|
||||||
|
value_s.replace(ki, ke - ki + 1, PIString::fromNumber(k.value_d));
|
||||||
|
}
|
||||||
|
value_d = formula_.toDouble();
|
||||||
|
value_i = formula_.toInt();
|
||||||
|
value_b = formula_.toBool();
|
||||||
|
double ev = 0.;
|
||||||
|
if (!e->check(value_s) && value_d == 0. && value_i == 0 && !value_b) {
|
||||||
|
PIString f = formula_.trimmed().toLowerCase();
|
||||||
|
if (f != "off" && f != "false" && f != "no" && !value_b) {
|
||||||
|
error_ = e->error();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (e->isCorrect())
|
||||||
|
ev = e->evaluate().real();
|
||||||
|
//piCout << value_s << value_i << value_d << ev;
|
||||||
|
//if ((value_d == 0.) || (piAbsd(value_d) < piAbsd(ev))) value_d = ev;
|
||||||
|
//if ((value_i == 0) || (piAbsd(value_i) < piAbsd(ev))) value_i = int(ev);
|
||||||
|
if ((value_d == 0.) || (ev != 0.)) value_d = ev;
|
||||||
|
if ((value_i == 0) || (ev != 0.)) value_i = int(ev);
|
||||||
|
value_b = value_b || (ev > 0.);
|
||||||
|
if (value_i != 0) {
|
||||||
|
if (value_d == 0.) value_d = value_i;
|
||||||
|
value_b = value_i > 0;
|
||||||
|
}
|
||||||
|
if (value_d != 0.) {
|
||||||
|
if (value_i == 0) value_i = value_d;
|
||||||
|
value_b = value_d > 0.;
|
||||||
|
}
|
||||||
|
if (value_b) {
|
||||||
|
if (value_d == 0.) value_d = 1.;
|
||||||
|
if (value_i == 0) value_i = 1;
|
||||||
|
}
|
||||||
|
value_s = PIString::fromNumber(value_d);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//CDType::CDType(const CDType &cdt) {
|
//CDType::CDType(const CDType &cdt) {
|
||||||
// index_ = cdt.index_;
|
// index_ = cdt.index_;
|
||||||
// name_ = cdt.name_;
|
// name_ = cdt.name_;
|
||||||
@@ -111,6 +181,56 @@ void CDType::calculate() {
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
CDType & CDSection::operator [](const PIString & name_) {
|
||||||
|
PIStringList np = name_.split(".");
|
||||||
|
if (np.isEmpty()) return null;
|
||||||
|
//piCout << np;
|
||||||
|
CDSection * cs = this, * ns = 0;
|
||||||
|
if (np.front().isEmpty()) {
|
||||||
|
if (np.size_s() < 2) return null;
|
||||||
|
cs = &(CDCore::instance()->k_);
|
||||||
|
np.pop_front();
|
||||||
|
}
|
||||||
|
for (int i = 0; i < np.size_s() - 1; ++i) {
|
||||||
|
if (np[i].isEmpty()) return null;
|
||||||
|
bool isd = np[i][0].isDigit() || (np[i][0] == '-');
|
||||||
|
int dv = 0;
|
||||||
|
if (isd) dv = np[i].toInt();
|
||||||
|
ns = 0;
|
||||||
|
PIMap<int, CDSection>::iterator it;
|
||||||
|
//piCout << np[i] << isd << dv;
|
||||||
|
for (it = cs->s.begin(); it != cs->s.end(); ++it) {
|
||||||
|
bool f = false;
|
||||||
|
if (isd) f = (dv == it.key());
|
||||||
|
else f = (np[i] == it.value().alias);
|
||||||
|
//piCout << "s..." << it.key() << it.value().alias << f;
|
||||||
|
if (f) {
|
||||||
|
ns = &(it.value());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//piCout << ns;
|
||||||
|
if (!ns) return null;
|
||||||
|
cs = ns;
|
||||||
|
}
|
||||||
|
PIMap<int, CDType>::iterator it;
|
||||||
|
if (np.back().isEmpty()) return null;
|
||||||
|
bool isd = np.back()[0].isDigit() || (np.back()[0] == '-');
|
||||||
|
int dv = 0;
|
||||||
|
if (isd) dv = np.back().toInt();
|
||||||
|
//piCout << np.back() << isd << dv;
|
||||||
|
for (it = cs->k.begin(); it != cs->k.end(); ++it) {
|
||||||
|
bool f = false;
|
||||||
|
if (isd) f = (dv == it.key());
|
||||||
|
else f = (np.back() == it.value().name());
|
||||||
|
//piCout << "k..." << it.key() << it.value().name() << f;
|
||||||
|
if (f)
|
||||||
|
return cs->k[it.key()];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int CDSection::count(bool recursive) const {
|
int CDSection::count(bool recursive) const {
|
||||||
int ret = k.size_s();
|
int ret = k.size_s();
|
||||||
if (recursive) {
|
if (recursive) {
|
||||||
@@ -136,6 +256,13 @@ PIStringList CDSection::index_names() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDSection::calculate() {
|
||||||
|
CDCore::instance()->k_.prepareCalculate();
|
||||||
|
PIEvaluator e;
|
||||||
|
calculateRecursive(&e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CDSection::write(PIIODevice * d, const PIString & prefix) {
|
void CDSection::write(PIIODevice * d, const PIString & prefix) {
|
||||||
if (!d) return;
|
if (!d) return;
|
||||||
if (k.isEmpty() && s.isEmpty()) return;
|
if (k.isEmpty() && s.isEmpty()) return;
|
||||||
@@ -266,3 +393,25 @@ bool CDSection::isSameStructure(CDSection & v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDSection::prepareCalculate() {
|
||||||
|
PIMap<int, CDType>::iterator i;
|
||||||
|
for (i = k.begin(); i != k.end(); ++i) {
|
||||||
|
i.value().parent = this;
|
||||||
|
i.value().calculated = false;
|
||||||
|
}
|
||||||
|
PIMap<int, CDSection>::iterator j;
|
||||||
|
for (j = s.begin(); j != s.end(); ++j)
|
||||||
|
j.value().prepareCalculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDSection::calculateRecursive(PIEvaluator * e) {
|
||||||
|
PIMap<int, CDType>::iterator i;
|
||||||
|
for (i = k.begin(); i != k.end(); ++i)
|
||||||
|
i.value().calculate(e);
|
||||||
|
PIMap<int, CDSection>::iterator j;
|
||||||
|
for (j = s.begin(); j != s.end(); ++j)
|
||||||
|
j.value().calculateRecursive(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "pimap.h"
|
#include "pimap.h"
|
||||||
|
|
||||||
class PIIODevice;
|
class PIIODevice;
|
||||||
|
class PIEvaluator;
|
||||||
class CD_Pult;
|
class CD_Pult;
|
||||||
class CDKItem;
|
class CDKItem;
|
||||||
class CDKItemModel;
|
class CDKItemModel;
|
||||||
@@ -30,19 +31,22 @@ public:
|
|||||||
bool toBool() const {return value_b;}
|
bool toBool() const {return value_b;}
|
||||||
cdT cd_type() const {return cd_type_;}
|
cdT cd_type() const {return cd_type_;}
|
||||||
void setFormula(const PIString & formula);
|
void setFormula(const PIString & formula);
|
||||||
void calculate();
|
void setValue(const PIString & value_);
|
||||||
operator double() const {return value_d;}
|
operator double() const {return value_d;}
|
||||||
const PIStringList & enumValues() const {return enum_values;}
|
const PIStringList & enumValues() const {return enum_values;}
|
||||||
|
const PIString & errorString() const {return error_;}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool calculate(PIEvaluator * e, PIVector<const CDType * > stack = PIVector<const CDType * >());
|
||||||
cdT cd_type_;
|
cdT cd_type_;
|
||||||
int index_;
|
int index_;
|
||||||
PIString name_, type_;
|
PIString name_, type_;
|
||||||
PIString value_s, formula_, comment_;
|
PIString value_s, formula_, comment_, error_;
|
||||||
PIStringList enum_values;
|
PIStringList enum_values;
|
||||||
|
CDSection * parent;
|
||||||
double value_d;
|
double value_d;
|
||||||
int value_i;
|
int value_i;
|
||||||
bool value_b;
|
bool value_b, calculated;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -60,6 +64,8 @@ public:
|
|||||||
// CDType & operator [](int v) {if (!k.contains(v)) k[v].index_ = v; return k[v];}
|
// CDType & operator [](int v) {if (!k.contains(v)) k[v].index_ = v; return k[v];}
|
||||||
CDType & operator [](int v) {return k[v];}
|
CDType & operator [](int v) {return k[v];}
|
||||||
const CDType operator [](int v) const {return k[v];}
|
const CDType operator [](int v) const {return k[v];}
|
||||||
|
CDType & operator [](const PIString & name_);
|
||||||
|
const CDType operator [](const PIString & name_) const {return (*this)[name_];}
|
||||||
CDSection & section(int v) {return s[v];}
|
CDSection & section(int v) {return s[v];}
|
||||||
const CDSection section(int v) const {return s[v];}
|
const CDSection section(int v) const {return s[v];}
|
||||||
|
|
||||||
@@ -68,6 +74,7 @@ public:
|
|||||||
int sectionsCount() const;
|
int sectionsCount() const;
|
||||||
PIVector<int> indexes() const {return k.keys();}
|
PIVector<int> indexes() const {return k.keys();}
|
||||||
PIStringList index_names() const;
|
PIStringList index_names() const;
|
||||||
|
void calculate();
|
||||||
|
|
||||||
PIString name;
|
PIString name;
|
||||||
PIString alias;
|
PIString alias;
|
||||||
@@ -81,9 +88,12 @@ protected:
|
|||||||
void read(const void * ep);
|
void read(const void * ep);
|
||||||
void update(CDSection & v, bool keep_names);
|
void update(CDSection & v, bool keep_names);
|
||||||
bool isSameStructure(CDSection & v);
|
bool isSameStructure(CDSection & v);
|
||||||
|
void prepareCalculate();
|
||||||
|
void calculateRecursive(PIEvaluator * e);
|
||||||
|
|
||||||
PIMap<int, CDType> k;
|
PIMap<int, CDType> k;
|
||||||
PIMap<int, CDSection> s;
|
PIMap<int, CDSection> s;
|
||||||
|
CDType null;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ void CDKItemModel::buildItem(CDKItem *it, CDSection & r) {
|
|||||||
|
|
||||||
|
|
||||||
void CDKItemModel::internalRebuild() {
|
void CDKItemModel::internalRebuild() {
|
||||||
qDebug() << "[CDKItemModel]" << "internalRebuild()";
|
//qDebug() << "[CDKItemModel]" << "internalRebuild()";
|
||||||
if (root) delete root;
|
if (root) delete root;
|
||||||
root = new CDKItem(0, CDKItem::ItemCDSection, 0);
|
root = new CDKItem(0, CDKItem::ItemCDSection, 0);
|
||||||
CDSection & r = K.root();
|
CDSection & r = K.root();
|
||||||
@@ -162,7 +162,11 @@ CDKItem::~CDKItem() {
|
|||||||
QVariant CDKItem::data(int column, int role) const {
|
QVariant CDKItem::data(int column, int role) const {
|
||||||
if (role == Qt::BackgroundRole) {
|
if (role == Qt::BackgroundRole) {
|
||||||
switch (type_) {
|
switch (type_) {
|
||||||
case ItemCDType: return QBrush(QColor(255, 250, 230));
|
case ItemCDType: {
|
||||||
|
CDType & t = K.section(buildPath())[index_];
|
||||||
|
if (t.errorString().isEmpty()) return QBrush(QColor(255, 250, 230));
|
||||||
|
else return QBrush(QColor(255, 128, 128));
|
||||||
|
}
|
||||||
case ItemCDSection: return QBrush(QColor(230, 250, 230));
|
case ItemCDSection: return QBrush(QColor(230, 250, 230));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,6 +175,10 @@ QVariant CDKItem::data(int column, int role) const {
|
|||||||
if (t.type() == "b") return t.toBool() ? Qt::Checked : Qt::Unchecked;
|
if (t.type() == "b") return t.toBool() ? Qt::Checked : Qt::Unchecked;
|
||||||
else QVariant();
|
else QVariant();
|
||||||
}
|
}
|
||||||
|
if (role == Qt::ToolTipRole && type_ == ItemCDType) {
|
||||||
|
CDType & t = K.section(buildPath())[index_];
|
||||||
|
return PI2QString(t.errorString());
|
||||||
|
}
|
||||||
if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant();
|
if (role != Qt::DisplayRole && role != Qt::EditRole) return QVariant();
|
||||||
PIDeque<int> path = buildPath();
|
PIDeque<int> path = buildPath();
|
||||||
CDSection & rs = K.section(path);
|
CDSection & rs = K.section(path);
|
||||||
@@ -221,7 +229,7 @@ QVariant CDKItem::value(CDType t, int role) const {
|
|||||||
|
|
||||||
bool CDKItem::setData(int column, const QVariant &value) {
|
bool CDKItem::setData(int column, const QVariant &value) {
|
||||||
if ((column == 3 || column == 4) && type_ == ItemCDType) {
|
if ((column == 3 || column == 4) && type_ == ItemCDType) {
|
||||||
K.section(buildPath())[index_].setFormula(Q2PIString(value.toString()));
|
K.section(buildPath())[index_].setValue(Q2PIString(value.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -87,6 +87,11 @@ void CDKView::buildFromHeader(const QString &kdescription) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDKView::calculateK() {
|
||||||
|
K.calculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CDKView::k_sendFailed() {
|
void CDKView::k_sendFailed() {
|
||||||
bisyStatusChanged(false);
|
bisyStatusChanged(false);
|
||||||
emit messageStatus("send failed");
|
emit messageStatus("send failed");
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ public slots:
|
|||||||
void loadK();
|
void loadK();
|
||||||
void clearK();
|
void clearK();
|
||||||
void buildFromHeader(const QString & kdescription);
|
void buildFromHeader(const QString & kdescription);
|
||||||
|
void calculateK();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void k_sendFailed();
|
void k_sendFailed();
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
#include "form.h"
|
#include "form.h"
|
||||||
#include "ui_form.h"
|
#include "ui_form.h"
|
||||||
#include "QFileDialog"
|
#include "QFileDialog"
|
||||||
|
#include "cdutils_k.h"
|
||||||
|
using namespace CDUtils;
|
||||||
|
|
||||||
Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
|
Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->treeView->setKFile("");
|
ui->treeView->setKFile("");
|
||||||
ui->treeView->refresh();
|
ui->treeView->refresh();
|
||||||
ui->treeView->startPing();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -31,4 +33,14 @@ void Form::on_pushButton_4_clicked() {
|
|||||||
|
|
||||||
void Form::on_pushButton_6_clicked() {
|
void Form::on_pushButton_6_clicked() {
|
||||||
ui->treeView->buildFromHeader(QFileDialog::getOpenFileName(this, trUtf8("Select *.h file with K description"), "k_description.h", "C/C++ header files(*.h *.hpp);;All files(*)"));
|
ui->treeView->buildFromHeader(QFileDialog::getOpenFileName(this, trUtf8("Select *.h file with K description"), "k_description.h", "C/C++ header files(*.h *.hpp);;All files(*)"));
|
||||||
|
/*piCout << K.root()["Radar_WaveFreqTune"];
|
||||||
|
piCout << K.root()["11.NVA_PulseGenFineTune"];
|
||||||
|
piCout << K.root()[".NVA.NVA_PulseGenFineTune"];
|
||||||
|
piCout << K.root()["NVA_A.1.NVA_Clk"];*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Form::on_buttonCalc_clicked() {
|
||||||
|
ui->treeView->calculateK();
|
||||||
|
ui->treeView->refresh();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,9 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_pushButton_3_clicked();
|
void on_pushButton_3_clicked();
|
||||||
|
|
||||||
void on_pushButton_4_clicked();
|
void on_pushButton_4_clicked();
|
||||||
|
|
||||||
void on_pushButton_6_clicked();
|
void on_pushButton_6_clicked();
|
||||||
|
void on_buttonCalc_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::Form *ui;
|
Ui::Form *ui;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="3" column="0" colspan="2">
|
<item row="4" column="0" colspan="2">
|
||||||
<widget class="CDKView" name="treeView"/>
|
<widget class="CDKView" name="treeView"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
@@ -59,6 +59,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QPushButton" name="buttonCalc">
|
||||||
|
<property name="text">
|
||||||
|
<string>Calculate</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
|||||||
BIN
qad_widgets/icons/f1.png
Normal file
BIN
qad_widgets/icons/f1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
@@ -35,5 +35,6 @@
|
|||||||
<file>icons/qcodeedit.png</file>
|
<file>icons/qcodeedit.png</file>
|
||||||
<file>icons/qvariantedit.png</file>
|
<file>icons/qvariantedit.png</file>
|
||||||
<file>icons/code-word.png</file>
|
<file>icons/code-word.png</file>
|
||||||
|
<file>icons/f1.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -22,12 +22,22 @@ QCodeEdit::QCodeEdit(QWidget * parent): QWidget(parent) {
|
|||||||
es_line.format.setBackground(QColor(240, 245, 240));
|
es_line.format.setBackground(QColor(240, 245, 240));
|
||||||
es_line.format.setProperty(QTextFormat::FullWidthSelection, true);
|
es_line.format.setProperty(QTextFormat::FullWidthSelection, true);
|
||||||
es_cursor.format.setBackground(QColor(220, 255, 200));
|
es_cursor.format.setBackground(QColor(220, 255, 200));
|
||||||
lbl_help = new IconedLabel();
|
widget_help = new QFrame();
|
||||||
lbl_help->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
|
widget_help->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
|
||||||
lbl_help->setFocusPolicy(Qt::NoFocus);
|
widget_help->setFocusPolicy(Qt::NoFocus);
|
||||||
lbl_help->setFrameShadow(QFrame::Sunken);
|
widget_help->setFrameShadow(QFrame::Sunken);
|
||||||
lbl_help->setFrameShape(QFrame::StyledPanel);
|
widget_help->setFrameShape(QFrame::StyledPanel);
|
||||||
lbl_help->setDirection(IconedLabel::RightToLeft);
|
widget_help->setLayout(new QBoxLayout(QBoxLayout::TopToBottom));
|
||||||
|
widget_help->layout()->setContentsMargins(0, 0, 0, 0);
|
||||||
|
for (int i = 0; i < 2; ++i) {
|
||||||
|
lbl_help[i] = new IconedLabel();
|
||||||
|
lbl_help[i]->setFrameShadow(QFrame::Plain);
|
||||||
|
lbl_help[i]->setFrameShape(QFrame::NoFrame);
|
||||||
|
lbl_help[i]->setDirection(IconedLabel::RightToLeft);
|
||||||
|
widget_help->layout()->addWidget(lbl_help[i]);
|
||||||
|
}
|
||||||
|
lbl_help[1]->setIcon(QIcon(":/icons/f1.png"));
|
||||||
|
lbl_help[1]->setText(trUtf8("Press F1 for details"));
|
||||||
completer = new QTreeWidget();
|
completer = new QTreeWidget();
|
||||||
completer->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
|
completer->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
|
||||||
completer->setFocusPolicy(Qt::NoFocus);
|
completer->setFocusPolicy(Qt::NoFocus);
|
||||||
@@ -107,7 +117,9 @@ QCodeEdit::~QCodeEdit() {
|
|||||||
delete textCode;
|
delete textCode;
|
||||||
delete textLines;
|
delete textLines;
|
||||||
delete completer;
|
delete completer;
|
||||||
delete lbl_help;
|
//for (int i = 0; i < 2; ++i)
|
||||||
|
// delete lbl_help[i];
|
||||||
|
delete widget_help;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -706,8 +718,8 @@ void QCodeEdit::raiseHelp(QTextCursor tc, int arg) {
|
|||||||
}
|
}
|
||||||
//qDebug() << s.second << st;
|
//qDebug() << s.second << st;
|
||||||
ACClass acc = ac_classes.value(i.first);
|
ACClass acc = ac_classes.value(i.first);
|
||||||
lbl_help->setIcon(acc.icon);
|
lbl_help[0]->setIcon(acc.icon);
|
||||||
lbl_help->setText(QString("<html><body>[%1] %2 %3</html></body>").arg(acc.name, s.first, selectArg(s.second, arg)));
|
lbl_help[0]->setText(QString("<html><body>[%1] %2 %3</html></body>").arg(acc.name, s.first, selectArg(s.second, arg)));
|
||||||
ok = true;
|
ok = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -720,10 +732,10 @@ void QCodeEdit::raiseHelp(QTextCursor tc, int arg) {
|
|||||||
es_cursor.cursor = tc;
|
es_cursor.cursor = tc;
|
||||||
applyExtraSelection();
|
applyExtraSelection();
|
||||||
tc.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, st.size());
|
tc.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, st.size());
|
||||||
lbl_help->setFont(font());
|
lbl_help[0]->setFont(font());
|
||||||
lbl_help->resize(lbl_help->sizeHint());
|
widget_help->resize(widget_help->sizeHint());
|
||||||
lbl_help->move(textCode->mapToGlobal(textCode->cursorRect(tc).topLeft() - QPoint(0, lbl_help->height() + 8)));
|
widget_help->move(textCode->mapToGlobal(textCode->cursorRect(tc).topLeft() - QPoint(0, widget_help->height() + 8)));
|
||||||
lbl_help->show();
|
widget_help->show();
|
||||||
cursor_scope = scope.first;
|
cursor_scope = scope.first;
|
||||||
cursor_scope << scope.second;
|
cursor_scope << scope.second;
|
||||||
//qDebug() << "tooltip" << st;
|
//qDebug() << "tooltip" << st;
|
||||||
@@ -731,7 +743,7 @@ void QCodeEdit::raiseHelp(QTextCursor tc, int arg) {
|
|||||||
|
|
||||||
|
|
||||||
void QCodeEdit::hideHelp() {
|
void QCodeEdit::hideHelp() {
|
||||||
lbl_help->hide();
|
widget_help->hide();
|
||||||
es_cursor.cursor = QTextCursor();
|
es_cursor.cursor = QTextCursor();
|
||||||
cursor_scope.clear();
|
cursor_scope.clear();
|
||||||
applyExtraSelection();
|
applyExtraSelection();
|
||||||
|
|||||||
@@ -75,7 +75,8 @@ private:
|
|||||||
|
|
||||||
QPlainTextEdit * textCode, * textLines;
|
QPlainTextEdit * textCode, * textLines;
|
||||||
QTreeWidget * completer;
|
QTreeWidget * completer;
|
||||||
IconedLabel * lbl_help;
|
IconedLabel * lbl_help[2];
|
||||||
|
QFrame * widget_help;
|
||||||
QTextEdit::ExtraSelection es_line, es_cursor;
|
QTextEdit::ExtraSelection es_line, es_cursor;
|
||||||
QList<QTextEdit::ExtraSelection> es_selected, es_custom;
|
QList<QTextEdit::ExtraSelection> es_selected, es_custom;
|
||||||
QMap<int, ACClass> ac_classes;
|
QMap<int, ACClass> ac_classes;
|
||||||
|
|||||||
Reference in New Issue
Block a user