Warning, file /rolisteam/rolisteam/src/libraries/rwidgets/gmtoolbox/UnitConvertor/convertor.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 #include "convertor.h" 0002 #include "ui_convertor.h" 0003 #include <QDebug> 0004 #include <QMetaType> 0005 0006 namespace GMTOOL 0007 { 0008 Convertor::Convertor(QWidget* parent) : QWidget(parent), ui(new Ui::Convertor), m_customRulesModel(new CustomRuleModel) 0009 { 0010 qRegisterMetaType<Unit>(); 0011 // qRegisterMetaType<Unit*>(); 0012 ui->setupUi(this); 0013 connect(ui->m_categoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryHasChanged(int))); 0014 connect(ui->m_categoryCombo2, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryHasChangedOnSecondPanel(int))); 0015 connect(ui->m_reverseAct, &QAction::triggered, this, [=]() { 0016 auto from= ui->m_fromCombo->currentIndex(); 0017 ui->m_fromCombo->setCurrentIndex(ui->m_toCombo->currentIndex()); 0018 ui->m_toCombo->setCurrentIndex(from); 0019 }); 0020 0021 ui->m_addBtn->setDefaultAction(ui->m_addUnitAction); 0022 ui->m_removeBtn->setDefaultAction(ui->m_removeUnit); 0023 ui->m_reverse->setDefaultAction(ui->m_reverseAct); 0024 ui->m_customValue->setDefaultAction(ui->m_customRuleAct); 0025 ui->m_backBtn->setDefaultAction(ui->m_back); 0026 0027 connect(ui->m_customRuleAct, &QAction::triggered, this, [=]() { ui->stackedWidget->setCurrentIndex(1); }); 0028 0029 connect(ui->m_back, &QAction::triggered, this, [=]() { 0030 ui->stackedWidget->setCurrentIndex(0); 0031 categoryHasChanged(ui->m_categoryCombo->currentIndex()); 0032 }); 0033 ui->stackedWidget->setCurrentIndex(0); 0034 0035 connect(ui->m_addUnitAction, &QAction::triggered, m_customRulesModel.get(), &CustomRuleModel::insertUnit); 0036 0037 m_model.reset(new UnitModel()); 0038 connect(m_model.get(), &UnitModel::modelChanged, this, &Convertor::writeSettings); 0039 m_catModel.reset(new CategoryModel()); 0040 m_toModel.reset(new CategoryModel()); 0041 // auto editCatModel = new CategoryModel(this); 0042 0043 readSettings(); 0044 0045 if(m_model->rowCount(QModelIndex()) == 0) 0046 { 0047 Unit* meter= m_model->insertData(new Unit(QStringLiteral("meter"), QStringLiteral("m"), Unit::DISTANCE)); 0048 Unit* km= m_model->insertData(new Unit(QStringLiteral("kilometer"), QStringLiteral("km"), Unit::DISTANCE)); 0049 Unit* dam= m_model->insertData(new Unit(QStringLiteral("decameter"), QStringLiteral("dam"), Unit::DISTANCE)); 0050 Unit* dm= m_model->insertData(new Unit(QStringLiteral("decimeter"), QStringLiteral("dm"), Unit::DISTANCE)); 0051 Unit* hm= m_model->insertData(new Unit(QStringLiteral("hectometer"), QStringLiteral("hm"), Unit::DISTANCE)); 0052 Unit* cm= m_model->insertData(new Unit(QStringLiteral("centimeter"), QStringLiteral("cm"), Unit::DISTANCE)); 0053 Unit* mm= m_model->insertData(new Unit(QStringLiteral("millitimeter"), QStringLiteral("mm"), Unit::DISTANCE)); 0054 Unit* po= m_model->insertData(new Unit(QStringLiteral("Inch"), QStringLiteral("″"), Unit::DISTANCE)); 0055 Unit* ft= m_model->insertData(new Unit(QStringLiteral("Foot"), QStringLiteral("′"), Unit::DISTANCE)); 0056 Unit* yd= m_model->insertData(new Unit(QStringLiteral("Yard"), QStringLiteral("yd"), Unit::DISTANCE)); 0057 Unit* mile= m_model->insertData(new Unit(QStringLiteral("Mile"), QStringLiteral("mi"), Unit::DISTANCE)); 0058 0059 // kilometer to * 0060 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, meter), new ConvertorOperator(1000)); 0061 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, dam), new ConvertorOperator(100)); 0062 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, dm), new ConvertorOperator(10000)); 0063 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, hm), new ConvertorOperator(10)); 0064 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, cm), new ConvertorOperator(100000)); 0065 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, mm), new ConvertorOperator(1000000)); 0066 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, po), new ConvertorOperator(39370.1)); 0067 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, ft), new ConvertorOperator(3280.84)); 0068 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, yd), new ConvertorOperator(1093.61)); 0069 m_convertorTable.insert(QPair<const Unit*, const Unit*>(km, mile), new ConvertorOperator(0.621371)); 0070 0071 // hectometer to * 0072 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, meter), new ConvertorOperator(100)); 0073 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, dam), new ConvertorOperator(10)); 0074 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, dm), new ConvertorOperator(1000)); 0075 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, km), new ConvertorOperator(0.1)); 0076 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, cm), new ConvertorOperator(10000)); 0077 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, mm), new ConvertorOperator(100000)); 0078 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, po), new ConvertorOperator(3937.01)); 0079 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, ft), new ConvertorOperator(328.084)); 0080 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, yd), new ConvertorOperator(109.361)); 0081 m_convertorTable.insert(QPair<const Unit*, const Unit*>(hm, mile), new ConvertorOperator(0.0621371)); 0082 0083 // decameter to * 0084 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, meter), new ConvertorOperator(10)); 0085 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, hm), new ConvertorOperator(0.1)); 0086 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, dm), new ConvertorOperator(100)); 0087 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, km), new ConvertorOperator(0.01)); 0088 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, cm), new ConvertorOperator(1000)); 0089 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, mm), new ConvertorOperator(10000)); 0090 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, po), new ConvertorOperator(393.701)); 0091 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, ft), new ConvertorOperator(32.8084)); 0092 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, yd), new ConvertorOperator(10.9361)); 0093 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dam, mile), new ConvertorOperator(0.00621371)); 0094 0095 // meter to * 0096 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, km), new ConvertorOperator(0.001)); 0097 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, dam), new ConvertorOperator(0.1)); 0098 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, dm), new ConvertorOperator(10)); 0099 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, hm), new ConvertorOperator(0.01)); 0100 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, cm), new ConvertorOperator(100)); 0101 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, mm), new ConvertorOperator(1000)); 0102 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, po), new ConvertorOperator(39.3701)); 0103 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, ft), new ConvertorOperator(3.28084)); 0104 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, yd), new ConvertorOperator(1.09361)); 0105 m_convertorTable.insert(QPair<const Unit*, const Unit*>(meter, mile), new ConvertorOperator(0.000621371)); 0106 0107 // decimeter to * 0108 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, meter), new ConvertorOperator(0.1)); 0109 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, dam), new ConvertorOperator(0.01)); 0110 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, hm), new ConvertorOperator(0.001)); 0111 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, km), new ConvertorOperator(0.0001)); 0112 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, cm), new ConvertorOperator(10)); 0113 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, mm), new ConvertorOperator(100)); 0114 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, po), new ConvertorOperator(3.93701)); 0115 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, ft), new ConvertorOperator(0.328084)); 0116 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, yd), new ConvertorOperator(0.109361)); 0117 m_convertorTable.insert(QPair<const Unit*, const Unit*>(dm, mile), new ConvertorOperator(0.00000621371)); 0118 0119 // centimeter to * 0120 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, meter), new ConvertorOperator(0.01)); 0121 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, hm), new ConvertorOperator(0.0001)); 0122 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, dm), new ConvertorOperator(0.1)); 0123 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, km), new ConvertorOperator(0.000001)); 0124 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, dam), new ConvertorOperator(0.001)); 0125 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, mm), new ConvertorOperator(10)); 0126 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, po), new ConvertorOperator(0.393701)); 0127 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, ft), new ConvertorOperator(0.0328084)); 0128 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, yd), new ConvertorOperator(0.0109361)); 0129 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cm, mile), new ConvertorOperator(0.000000621371)); 0130 0131 // milimeter to * 0132 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, meter), new ConvertorOperator(0.001)); 0133 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, hm), new ConvertorOperator(0.00001)); 0134 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, dm), new ConvertorOperator(0.01)); 0135 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, km), new ConvertorOperator(0.0000001)); 0136 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, dam), new ConvertorOperator(0.0001)); 0137 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, cm), new ConvertorOperator(0.1)); 0138 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, po), new ConvertorOperator(0.0393701)); 0139 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, ft), new ConvertorOperator(0.00328084)); 0140 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, yd), new ConvertorOperator(0.00109361)); 0141 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mm, mile), new ConvertorOperator(0.0000000621371)); 0142 0143 // mile to * 0144 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, meter), new ConvertorOperator(1609.34)); 0145 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, hm), new ConvertorOperator(16.0934)); 0146 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, dm), new ConvertorOperator(1609340)); 0147 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, km), new ConvertorOperator(1.60934)); 0148 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, dam), new ConvertorOperator(160.934)); 0149 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, cm), new ConvertorOperator(16093400)); 0150 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, po), new ConvertorOperator(63360)); 0151 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, ft), new ConvertorOperator(5280)); 0152 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, yd), new ConvertorOperator(1760)); 0153 m_convertorTable.insert(QPair<const Unit*, const Unit*>(mile, mm), new ConvertorOperator(1.609e+6)); 0154 0155 // yard to * 0156 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, meter), new ConvertorOperator(0.9144)); 0157 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, hm), new ConvertorOperator(0.009144)); 0158 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, dm), new ConvertorOperator(9.144)); 0159 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, km), new ConvertorOperator(0.0009144)); 0160 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, dam), new ConvertorOperator(0.09144)); 0161 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, cm), new ConvertorOperator(91.44)); 0162 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, po), new ConvertorOperator(36)); 0163 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, ft), new ConvertorOperator(3)); 0164 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, mile), new ConvertorOperator(0.000568182)); 0165 m_convertorTable.insert(QPair<const Unit*, const Unit*>(yd, mm), new ConvertorOperator(914.4)); 0166 0167 // ft to * 0168 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, meter), new ConvertorOperator(0.3048)); 0169 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, hm), new ConvertorOperator(0.003048)); 0170 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, dm), new ConvertorOperator(3.048)); 0171 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, km), new ConvertorOperator(0.0003048)); 0172 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, dam), new ConvertorOperator(0.03048)); 0173 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, cm), new ConvertorOperator(30.48)); 0174 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, po), new ConvertorOperator(12)); 0175 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, yd), new ConvertorOperator(0.333333)); 0176 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, mile), new ConvertorOperator(0.000189394)); 0177 m_convertorTable.insert(QPair<const Unit*, const Unit*>(ft, mm), new ConvertorOperator(304.8)); 0178 0179 // inch to * 0180 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, meter), new ConvertorOperator(0.0254)); 0181 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, hm), new ConvertorOperator(0.000254)); 0182 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, dm), new ConvertorOperator(0.254)); 0183 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, km), new ConvertorOperator(2.54e-5)); 0184 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, dam), new ConvertorOperator(0.00254)); 0185 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, cm), new ConvertorOperator(2.54)); 0186 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, ft), new ConvertorOperator(0.0833333)); 0187 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, yd), new ConvertorOperator(0.0277778)); 0188 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, mile), new ConvertorOperator(1.5783e-5)); 0189 m_convertorTable.insert(QPair<const Unit*, const Unit*>(po, mm), new ConvertorOperator(25.4)); 0190 0191 ////////////////////////// 0192 // TEMPERATURE 0193 ///////////////////////// 0194 0195 Unit* celsius 0196 = m_model->insertData(new Unit(QStringLiteral("celsius"), QStringLiteral("°C"), Unit::TEMPERATURE)); 0197 Unit* kelvin= m_model->insertData(new Unit(QStringLiteral("kelvin"), QStringLiteral("K"), Unit::TEMPERATURE)); 0198 Unit* fahrenheit 0199 = m_model->insertData(new Unit(QStringLiteral("fahrenheit"), QStringLiteral("°F"), Unit::TEMPERATURE)); 0200 0201 m_convertorTable.insert(QPair<const Unit*, const Unit*>(celsius, kelvin), new ConvertorOperator(1, -273.15)); 0202 m_convertorTable.insert(QPair<const Unit*, const Unit*>(celsius, fahrenheit), new ConvertorOperator(1.8, 32)); 0203 m_convertorTable.insert(QPair<const Unit*, const Unit*>(kelvin, celsius), new ConvertorOperator(1, 273.15)); 0204 m_convertorTable.insert(QPair<const Unit*, const Unit*>(fahrenheit, celsius), 0205 new ConvertorOperator(1.8, -32, true)); 0206 0207 m_convertorTable.insert(QPair<const Unit*, const Unit*>(fahrenheit, kelvin), 0208 new ConvertorOperator(9.0 / 5.0, 459.67, true)); 0209 m_convertorTable.insert(QPair<const Unit*, const Unit*>(kelvin, fahrenheit), 0210 new ConvertorOperator(9.0 / 5.0, -459.67)); 0211 0212 ////////////////////////// 0213 // Currency 0214 ///////////////////////// 0215 Unit* koku= m_model->insertData(new Unit(QStringLiteral("koku"), QStringLiteral("koku"), Unit::CURRENCY)); 0216 Unit* bu= m_model->insertData(new Unit(QStringLiteral("bu"), QStringLiteral("bu"), Unit::CURRENCY)); 0217 Unit* zeni= m_model->insertData(new Unit(QStringLiteral("zeni"), QStringLiteral("zeni"), Unit::CURRENCY)); 0218 0219 m_convertorTable.insert(QPair<const Unit*, const Unit*>(koku, bu), new ConvertorOperator(5)); 0220 m_convertorTable.insert(QPair<const Unit*, const Unit*>(koku, zeni), new ConvertorOperator(50)); 0221 0222 m_convertorTable.insert(QPair<const Unit*, const Unit*>(bu, koku), new ConvertorOperator(0.2)); 0223 m_convertorTable.insert(QPair<const Unit*, const Unit*>(bu, zeni), new ConvertorOperator(10)); 0224 0225 m_convertorTable.insert(QPair<const Unit*, const Unit*>(zeni, koku), new ConvertorOperator(0.02)); 0226 m_convertorTable.insert(QPair<const Unit*, const Unit*>(zeni, bu), new ConvertorOperator(0.1)); 0227 0228 ////////////////////////// 0229 // MASS 0230 ///////////////////////// 0231 Unit* gram= m_model->insertData(new Unit(QStringLiteral("gram"), QStringLiteral("g"), Unit::MASS)); 0232 Unit* kilo= m_model->insertData(new Unit(QStringLiteral("kilogram"), QStringLiteral("Kg"), Unit::MASS)); 0233 Unit* once= m_model->insertData(new Unit(QStringLiteral("Once"), QStringLiteral("oz"), Unit::MASS)); 0234 Unit* pound= m_model->insertData(new Unit(QStringLiteral("Pound"), QStringLiteral("lb"), Unit::MASS)); 0235 0236 m_convertorTable.insert(QPair<const Unit*, const Unit*>(gram, kilo), new ConvertorOperator(0.001)); 0237 m_convertorTable.insert(QPair<const Unit*, const Unit*>(gram, once), new ConvertorOperator(1.0 / 28.349)); 0238 m_convertorTable.insert(QPair<const Unit*, const Unit*>(gram, pound), new ConvertorOperator(1.0 / 453.59237)); 0239 0240 m_convertorTable.insert(QPair<const Unit*, const Unit*>(kilo, gram), new ConvertorOperator(1000)); 0241 m_convertorTable.insert(QPair<const Unit*, const Unit*>(kilo, once), new ConvertorOperator(1.0 / 0.028349)); 0242 m_convertorTable.insert(QPair<const Unit*, const Unit*>(kilo, pound), new ConvertorOperator(1.0 / 0.45359237)); 0243 0244 m_convertorTable.insert(QPair<const Unit*, const Unit*>(once, gram), new ConvertorOperator(28.349)); 0245 m_convertorTable.insert(QPair<const Unit*, const Unit*>(once, kilo), new ConvertorOperator(0.028349)); 0246 m_convertorTable.insert(QPair<const Unit*, const Unit*>(once, pound), new ConvertorOperator(1.0 / 16.0)); 0247 0248 m_convertorTable.insert(QPair<const Unit*, const Unit*>(pound, gram), new ConvertorOperator(453.59237)); 0249 m_convertorTable.insert(QPair<const Unit*, const Unit*>(pound, kilo), new ConvertorOperator(0.45359237)); 0250 m_convertorTable.insert(QPair<const Unit*, const Unit*>(pound, once), new ConvertorOperator(16.0)); 0251 0252 //////////////////////////// 0253 // Volume 0254 //////////////////////////// 0255 Unit* cubicMeter 0256 = m_model->insertData(new Unit(QStringLiteral("Cubic Meter"), QStringLiteral("m³"), Unit::VOLUME)); 0257 Unit* cubicFeet 0258 = m_model->insertData(new Unit(QStringLiteral("Cubic Feet"), QStringLiteral("ft³"), Unit::VOLUME)); 0259 0260 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cubicMeter, cubicFeet), new ConvertorOperator(35.3147)); 0261 m_convertorTable.insert(QPair<const Unit*, const Unit*>(cubicFeet, cubicMeter), 0262 new ConvertorOperator(0.0283168)); 0263 } 0264 0265 m_catModel->setSourceModel(m_model.get()); 0266 m_toModel->setSourceModel(m_model.get()); 0267 // editCatModel->setSourceModel(m_model); 0268 0269 m_customRulesModel->setSourceModel(m_model.get()); 0270 categoryHasChangedOnSecondPanel(0); 0271 m_customRulesModel->setConvertionRules(&m_convertorTable); 0272 0273 ui->m_tableView->setModel(m_customRulesModel.get()); 0274 0275 ui->m_fromCombo->setModel(m_catModel.get()); 0276 ui->m_toCombo->setModel(m_toModel.get()); 0277 connect(ui->m_fromLine, SIGNAL(textChanged(QString)), this, SLOT(convert())); 0278 connect(ui->m_convert, SIGNAL(clicked(bool)), this, SLOT(convert())); 0279 connect(ui->m_fromCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(convert())); 0280 connect(ui->m_toCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(convert())); 0281 0282 categoryHasChanged(0); 0283 } 0284 0285 Convertor::~Convertor() 0286 { 0287 qDeleteAll(m_convertorTable); 0288 delete ui; 0289 } 0290 0291 void Convertor::readSettings() 0292 { 0293 QSettings setting(QStringLiteral("rolisteam"), QStringLiteral("rolisteam")); 0294 setting.beginGroup("UnitModel"); 0295 0296 auto size= setting.beginReadArray("units"); 0297 for(int i= 0; i < size; ++i) 0298 { 0299 setting.setArrayIndex(i); 0300 auto name= setting.value("name").toString(); 0301 auto symbol= setting.value("symbol").toString(); 0302 auto cat= setting.value("category").toInt(); 0303 auto readonly= setting.value("readonly").toBool(); 0304 auto unit= new Unit(name, symbol, static_cast<GMTOOL::Unit::Category>(cat)); 0305 unit->setReadOnly(readonly); 0306 m_model->insertData(unit); 0307 } 0308 setting.endArray(); 0309 setting.endGroup(); 0310 0311 setting.beginGroup("UnitModel"); 0312 0313 int nodeSize= setting.beginReadArray(QStringLiteral("convertor")); 0314 for(int i= 0; i < nodeSize; ++i) 0315 { 0316 setting.setArrayIndex(i); 0317 auto fromUnitId= setting.value(QStringLiteral("fromUnit")).toInt(); 0318 auto toUnitId= setting.value(QStringLiteral("toUnit")).toInt(); 0319 0320 auto readOnly= setting.value(QStringLiteral("readOnly")).toBool(); 0321 auto fraction= setting.value(QStringLiteral("fraction")).toBool(); 0322 auto a= setting.value(QStringLiteral("a")).toDouble(); 0323 auto b= setting.value(QStringLiteral("b")).toDouble(); 0324 0325 auto convertor= new ConvertorOperator(a, b, fraction, readOnly); 0326 0327 auto unitFrom= m_model->getUnitByIndex(fromUnitId); 0328 auto unitTo= m_model->getUnitByIndex(toUnitId); 0329 m_convertorTable.insert(QPair<const Unit*, const Unit*>(unitFrom, unitTo), convertor); 0330 } 0331 setting.endArray(); 0332 setting.endGroup(); 0333 } 0334 0335 void Convertor::writeSettings() 0336 { 0337 QSettings setting("rolisteam", "rolisteam"); 0338 setting.beginGroup("UnitModel"); 0339 0340 setting.beginWriteArray("units"); 0341 for(int i= 0; i < m_model->rowCount(); ++i) 0342 { 0343 auto unit= m_model->getUnitByIndex(i); 0344 setting.setArrayIndex(i); 0345 setting.setValue("name", unit->name()); 0346 setting.setValue("symbol", unit->symbol()); 0347 setting.setValue("category", unit->currentCat()); 0348 setting.setValue("readonly", unit->readOnly()); 0349 } 0350 setting.endArray(); 0351 setting.endGroup(); 0352 0353 setting.beginGroup("UnitModel"); 0354 setting.beginWriteArray(QStringLiteral("convertor"), m_convertorTable.size()); 0355 0356 int i= 0; 0357 auto const& keys= m_convertorTable.keys(); 0358 for(auto& pair : keys) 0359 { 0360 auto convertor= m_convertorTable[pair]; 0361 0362 if(nullptr != convertor) 0363 { 0364 setting.setArrayIndex(i); 0365 auto a= m_model->getIndex(const_cast<Unit*>(pair.first)); 0366 auto b= m_model->getIndex(const_cast<Unit*>(pair.second)); 0367 0368 setting.setValue(QStringLiteral("fromUnit"), a); 0369 setting.setValue(QStringLiteral("toUnit"), b); 0370 0371 setting.setValue(QStringLiteral("readOnly"), convertor->isReadOnly()); 0372 setting.setValue(QStringLiteral("fraction"), convertor->fraction()); 0373 setting.setValue(QStringLiteral("a"), convertor->a()); 0374 setting.setValue(QStringLiteral("b"), convertor->b()); 0375 ++i; 0376 } 0377 } 0378 setting.endArray(); 0379 setting.endGroup(); 0380 } 0381 0382 void Convertor::categoryHasChanged(int i) 0383 { 0384 ui->m_toLine->clear(); 0385 m_catModel->setCurrentCategory(m_model->getCatNameFromId(static_cast<Unit::Category>(i))); 0386 m_toModel->setCurrentCategory(m_model->getCatNameFromId(static_cast<Unit::Category>(i))); 0387 } 0388 0389 void Convertor::categoryHasChangedOnSecondPanel(int i) 0390 { 0391 m_customRulesModel->setCurrentCategoryId(m_model->getCatNameFromId(static_cast<Unit::Category>(i)), i); 0392 } 0393 0394 void Convertor::convert() 0395 { 0396 QModelIndex source= m_catModel->index(ui->m_fromCombo->currentIndex(), 0); 0397 QModelIndex to= m_toModel->index(ui->m_toCombo->currentIndex(), 0); 0398 0399 if(!source.isValid() || !to.isValid()) 0400 return; 0401 0402 Unit* from= m_model->getUnitFromIndex(source, ui->m_categoryCombo->currentIndex()); 0403 Unit* dest= m_model->getUnitFromIndex(to, ui->m_categoryCombo->currentIndex()); 0404 0405 ConvertorOperator* convert= m_convertorTable.value(QPair<const Unit*, const Unit*>(from, dest)); 0406 if(nullptr != convert) 0407 { 0408 double d= convert->convert(ui->m_fromLine->text().toDouble()); 0409 ui->m_toLine->setText(QStringLiteral("%1").arg(d)); 0410 } 0411 } 0412 } // namespace GMTOOL