Various fixes: modelPrinter free, mixer crash, trims display, channel names, monospace font
This commit is contained in:
@@ -78,10 +78,9 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
ui->trimCB->hide();
|
||||
}
|
||||
|
||||
ui->trimCB->addItem(tr("Rud"), 1);
|
||||
ui->trimCB->addItem(tr("Ele"), 2);
|
||||
ui->trimCB->addItem(tr("Thr"), 3);
|
||||
ui->trimCB->addItem(tr("Ail"), 4);
|
||||
for(int i=0; i < NUM_STICKS; i++) {
|
||||
ui->trimCB->addItem(AnalogString(i), i+1);
|
||||
}
|
||||
ui->trimCB->setCurrentIndex(1 - ed->carryTrim);
|
||||
|
||||
int expolength = firmware->getCapability(HasExpoNames);
|
||||
|
||||
@@ -56,7 +56,11 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
|
||||
}
|
||||
|
||||
// The trims
|
||||
QString labels[] = { tr("Rud"), tr("Ele"), tr("Thr"), tr("Ail") }; // TODO is elsewhere for sure
|
||||
QString labels[NUM_STICKS];
|
||||
for(int i=0; i < NUM_STICKS; i++) {
|
||||
labels[i] = AnalogString(i);
|
||||
}
|
||||
|
||||
|
||||
trimsLabel << ui->trim1Label << ui->trim2Label << ui->trim3Label << ui->trim4Label;
|
||||
trimsUse << ui->trim1Use << ui->trim2Use << ui->trim3Use << ui->trim4Use;
|
||||
|
||||
@@ -38,10 +38,9 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G
|
||||
}
|
||||
|
||||
if (!firmware->getCapability(VirtualInputs)) {
|
||||
ui->trimCB->addItem(tr("Rud"));
|
||||
ui->trimCB->addItem(tr("Ele"));
|
||||
ui->trimCB->addItem(tr("Thr"));
|
||||
ui->trimCB->addItem(tr("Ail"));
|
||||
for(int i=0; i < NUM_STICKS; i++) {
|
||||
ui->trimCB->addItem(AnalogString(i));
|
||||
}
|
||||
}
|
||||
|
||||
ui->trimCB->setCurrentIndex(1 - md->carryTrim);
|
||||
|
||||
@@ -64,7 +64,7 @@ QString ModelPrinter::printOutputName(int idx)
|
||||
return name;
|
||||
}
|
||||
else {
|
||||
return printChannelName(idx);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ QString ModelPrinter::printTimer(int idx)
|
||||
QString ModelPrinter::printTimer(const TimerData & timer)
|
||||
{
|
||||
QStringList result;
|
||||
if (firmware->getCapability(TimersName))
|
||||
if (firmware->getCapability(TimersName) && timer.name[0])
|
||||
result += tr("Name(%1)").arg(timer.name);
|
||||
result += tr("%1:%2").arg(timer.val/60, 2, 10, QChar('0')).arg(timer.val%60, 2, 10, QChar('0'));
|
||||
result += timer.mode.toString();
|
||||
@@ -201,10 +201,25 @@ QString ModelPrinter::printTrim(int flightModeIndex, int stickIndex)
|
||||
{
|
||||
const FlightModeData & fm = model.flightModeData[flightModeIndex];
|
||||
|
||||
if (fm.trimRef[stickIndex] == -1)
|
||||
return QString("%1").arg(fm.trim[stickIndex]);
|
||||
else
|
||||
return tr("FM%1").arg(fm.trimRef[stickIndex]);
|
||||
if (fm.trimMode[stickIndex] == -1) {
|
||||
return tr("Off");
|
||||
}
|
||||
else {
|
||||
if (fm.trimRef[stickIndex] == flightModeIndex) {
|
||||
return QString("%1").arg(fm.trim[stickIndex]);
|
||||
}
|
||||
else {
|
||||
if (fm.trimMode[stickIndex] == 0) {
|
||||
return tr("FM%1").arg(fm.trimRef[stickIndex]);
|
||||
}
|
||||
else {
|
||||
if (fm.trim[stickIndex] < 0)
|
||||
return tr("FM%1%2").arg(fm.trimRef[stickIndex]).arg(fm.trim[stickIndex]);
|
||||
else
|
||||
return tr("FM%1+%2").arg(fm.trimRef[stickIndex]).arg(fm.trim[stickIndex]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString ModelPrinter::printGlobalVar(int flightModeIndex, int gvarIndex)
|
||||
@@ -295,7 +310,7 @@ QString ModelPrinter::printInputLine(const ExpoData & input)
|
||||
|
||||
QString ModelPrinter::printMixerName(int curDest)
|
||||
{
|
||||
QString str = printChannelName(curDest) + " ";
|
||||
QString str = printChannelName(curDest-1) + " ";
|
||||
if (firmware->getCapability(HasChNames)) {
|
||||
QString name = model.limitData[curDest-1].name;
|
||||
if (!name.isEmpty()) {
|
||||
|
||||
@@ -84,8 +84,8 @@ bool MultiModelPrinter::MultiColumns::isEmpty()
|
||||
for (int cc=0; cc<models.size(); cc++) { \
|
||||
ModelPrinter * modelPrinter = modelPrinters[cc]; \
|
||||
ModelData * model = models[cc]; \
|
||||
model = model; modelPrinter = modelPrinter; \
|
||||
columns.append(cc, what); \
|
||||
(void)(model); (void)(modelPrinter); \
|
||||
columns.append(cc, (what)); \
|
||||
} \
|
||||
columns.endCompare();
|
||||
|
||||
@@ -101,6 +101,9 @@ MultiModelPrinter::MultiModelPrinter(Firmware * firmware):
|
||||
|
||||
MultiModelPrinter::~MultiModelPrinter()
|
||||
{
|
||||
for(int i=0; i<modelPrinters.size(); i++) {
|
||||
if (modelPrinters[i]) delete modelPrinters[i];
|
||||
}
|
||||
}
|
||||
|
||||
void MultiModelPrinter::setModel(int idx, const ModelData & model)
|
||||
@@ -108,13 +111,20 @@ void MultiModelPrinter::setModel(int idx, const ModelData & model)
|
||||
int count = std::max(models.size(), idx+1);
|
||||
models.resize(count);
|
||||
modelPrinters.resize(count);
|
||||
|
||||
if (modelPrinters[idx]) {
|
||||
// free existing model printer
|
||||
delete modelPrinters[idx];
|
||||
modelPrinters[idx] = 0;
|
||||
}
|
||||
|
||||
models[idx] = (ModelData *)&model; // TODO remove cast
|
||||
modelPrinters[idx] = new ModelPrinter(firmware, defaultSettings, model);
|
||||
}
|
||||
|
||||
QString MultiModelPrinter::print()
|
||||
{
|
||||
QString str = "<table border='1' cellspacing='0' cellpadding='3' width='100%'>";
|
||||
QString str = "<table border='1' cellspacing='0' cellpadding='3' width='100%' style='font-family: monospace;'>";
|
||||
str += printSetup();
|
||||
if (firmware->getCapability(FlightModes))
|
||||
str += printFlightModes();
|
||||
@@ -182,10 +192,8 @@ QString MultiModelPrinter::printFlightModes()
|
||||
columns.append("<td><b>" + tr("Switch") + "</b></td>");
|
||||
columns.append("<td><b>" + tr("Fade IN") + "</b></td>");
|
||||
columns.append("<td><b>" + tr("Fade OUT") + "</b></td>");
|
||||
for (int i=0; i<4; i++) {
|
||||
columns.append("<td><b>");
|
||||
COMPARE(modelPrinter->printInputName(i));
|
||||
columns.append("</b></td>");
|
||||
for (int i=0; i<NUM_STICKS; i++) {
|
||||
columns.append("<td><b>" + AnalogString(i) + " trim</b></td>");
|
||||
}
|
||||
columns.append("</tr>");
|
||||
|
||||
@@ -199,7 +207,7 @@ QString MultiModelPrinter::printFlightModes()
|
||||
columns.append("</td><td>");
|
||||
COMPARE(model->flightModeData[i].fadeOut);
|
||||
columns.append("</td>");
|
||||
for (int k=0; k<4; k++) {
|
||||
for (int k=0; k<NUM_STICKS; k++) {
|
||||
columns.append("<td>");
|
||||
COMPARE(modelPrinter->printTrim(i, k));
|
||||
columns.append("</td>");
|
||||
@@ -259,14 +267,17 @@ QString MultiModelPrinter::printLimits()
|
||||
MultiColumns columns(models.size());
|
||||
columns.append("<table border='0' cellspacing='0' cellpadding='1' width='100%'>" \
|
||||
"<tr>" \
|
||||
" <td>" + (firmware->getCapability(HasChNames) ? tr("Name") : "") + "</td>" \
|
||||
" <td><b>" + tr("Channel") + "</b></td>" \
|
||||
" <td><b>" + (firmware->getCapability(HasChNames) ? tr("Name") : "") + "</b></td>" \
|
||||
" <td><b>" + tr("Offset") + "</b></td>" \
|
||||
" <td><b>" + tr("Min") + "</b></td>" \
|
||||
" <td><b>" + tr("Max") + "</b></td>" \
|
||||
" <td><b>" + tr("Invert") + "</b></td>" \
|
||||
"</tr>");
|
||||
for (int i=0; i<firmware->getCapability(Outputs); i++) {
|
||||
columns.append("<tr><td>");
|
||||
columns.append("<tr><td><b>");
|
||||
COMPARE(modelPrinter->printChannelName(i));
|
||||
columns.append("</b></td><td>");
|
||||
COMPARE(modelPrinter->printOutputName(i));
|
||||
columns.append("</td><td>");
|
||||
COMPARE(model->limitData[i].offsetToString());
|
||||
@@ -341,12 +352,12 @@ QString MultiModelPrinter::printMixers()
|
||||
}
|
||||
if (count > 0) {
|
||||
columns.append("<tr><td width='20%'><b>");
|
||||
COMPARE(modelPrinter->printChannelName(i));
|
||||
COMPARE(modelPrinter->printMixerName(i+1));
|
||||
columns.append("</b></td><td>");
|
||||
for (int j=0; j<count; j++) {
|
||||
if (j > 0)
|
||||
columns.append("<br/>");
|
||||
COMPARE(modelPrinter->printMixerLine(*model->mixes(i)[j]));
|
||||
COMPARE((j < model->mixes(i).size()) ? modelPrinter->printMixerLine(*model->mixes(i)[j]) : " ");
|
||||
}
|
||||
columns.append("</td></tr>");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user