1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-19 14:25:11 +03:00

Merge branch 'next' of https://github.com/opentx/opentx into bsongis/Issue713_more_custom_functions

This commit is contained in:
Andre Bernet 2014-02-25 18:17:15 +01:00
commit 82146f7b7d
208 changed files with 4928 additions and 5779 deletions

View file

@ -325,3 +325,5 @@ Reginald H Millsom
Emanuel Stassar Emanuel Stassar
Pierluigi Sommaruga Pierluigi Sommaruga
Rafael Eric Suarez Nordlow Rafael Eric Suarez Nordlow
A Harris
Stefan Grunenberg

View file

@ -9,201 +9,201 @@ AppData g;
// ** CompStoreObj class******************** // ** CompStoreObj class********************
void CompStoreObj::clear (const QString tag1, const QString tag2, const QString tag3) void CompStoreObj::clear (const QString tag1, const QString tag2, const QString tag3)
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (tag2.isEmpty()) if (tag2.isEmpty())
{ {
settings.remove(tag1); settings.remove(tag1);
} }
else if (tag3.isEmpty()) else if (tag3.isEmpty())
{ {
settings.beginGroup(tag1); settings.beginGroup(tag1);
settings.remove(tag2); settings.remove(tag2);
settings.endGroup(); settings.endGroup();
} }
else else
{ {
settings.beginGroup(tag1); settings.beginGroup(tag1);
settings.beginGroup(tag2); settings.beginGroup(tag2);
settings.remove(tag3); settings.remove(tag3);
settings.endGroup(); settings.endGroup();
settings.endGroup(); settings.endGroup();
} }
} }
void CompStoreObj::store(const QByteArray newArray, QByteArray &array, const QString tag, const QString group1, const QString group2 ) void CompStoreObj::store(const QByteArray newArray, QByteArray &array, const QString tag, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
settings.setValue(tag, newArray); settings.setValue(tag, newArray);
array = newArray; array = newArray;
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::store(const QStringList newSList, QStringList &stringList, const QString tag, const QString group1, const QString group2 ) void CompStoreObj::store(const QStringList newSList, QStringList &stringList, const QString tag, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
settings.setValue(tag, newSList); settings.setValue(tag, newSList);
stringList = newSList; stringList = newSList;
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::store(const QString newString, QString &string, const QString tag, const QString group1, const QString group2 ) void CompStoreObj::store(const QString newString, QString &string, const QString tag, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
settings.setValue(tag, newString); settings.setValue(tag, newString);
string = newString; string = newString;
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::store(const bool newTruth, bool &truth, const QString tag, const QString group1, const QString group2 ) void CompStoreObj::store(const bool newTruth, bool &truth, const QString tag, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
settings.setValue(tag, newTruth); settings.setValue(tag, newTruth);
truth = newTruth; truth = newTruth;
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::store(const int newNumber, int &number, const QString tag, const QString group1, const QString group2 ) void CompStoreObj::store(const int newNumber, int &number, const QString tag, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
settings.setValue(tag, newNumber); settings.setValue(tag, newNumber);
number = newNumber; number = newNumber;
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
// Retrieval functions // Retrieval functions
void CompStoreObj::retrieve( QByteArray &array, const QString tag, const QString def, const QString group1, const QString group2 ) void CompStoreObj::retrieve( QByteArray &array, const QString tag, const QString def, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
array = settings.value(tag, def).toByteArray(); array = settings.value(tag, def).toByteArray();
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::retrieve( QStringList &stringList, const QString tag, const QString def, const QString group1, const QString group2 ) void CompStoreObj::retrieve( QStringList &stringList, const QString tag, const QString def, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
stringList = settings.value(tag, def).toStringList(); stringList = settings.value(tag, def).toStringList();
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::retrieve( QString &string, const QString tag, const QString def, const QString group1, const QString group2 ) void CompStoreObj::retrieve( QString &string, const QString tag, const QString def, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
string = settings.value(tag, def).toString(); string = settings.value(tag, def).toString();
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::retrieve( bool &truth, const QString tag, const bool def, const QString group1, const QString group2 ) void CompStoreObj::retrieve( bool &truth, const QString tag, const bool def, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
truth = settings.value(tag, def).toBool(); truth = settings.value(tag, def).toBool();
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
void CompStoreObj::retrieve( int &number, const QString tag, const int def, const QString group1, const QString group2 ) void CompStoreObj::retrieve( int &number, const QString tag, const int def, const QString group1, const QString group2 )
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
if (!group1.isEmpty()) settings.beginGroup(group1); if (!group1.isEmpty()) settings.beginGroup(group1);
if (!group2.isEmpty()) settings.beginGroup(group2); if (!group2.isEmpty()) settings.beginGroup(group2);
number = settings.value(tag, def).toInt(); number = settings.value(tag, def).toInt();
if (!group1.isEmpty()) settings.endGroup(); if (!group1.isEmpty()) settings.endGroup();
if (!group2.isEmpty()) settings.endGroup(); if (!group2.isEmpty()) settings.endGroup();
} }
// Retrieve and Store functions // Retrieve and Store functions
void CompStoreObj::getset( QByteArray &array, const QString tag, const QString def, const QString group1, const QString group2 ) void CompStoreObj::getset( QByteArray &array, const QString tag, const QString def, const QString group1, const QString group2 )
{ {
retrieve( array, tag, def, group1, group2); retrieve( array, tag, def, group1, group2);
store(array, array, tag, group1, group2); store(array, array, tag, group1, group2);
} }
void CompStoreObj::getset( QStringList &stringList, const QString tag, const QString def, const QString group1, const QString group2 ) void CompStoreObj::getset( QStringList &stringList, const QString tag, const QString def, const QString group1, const QString group2 )
{ {
retrieve( stringList, tag, def, group1, group2); retrieve( stringList, tag, def, group1, group2);
store(stringList, stringList, tag, group1, group2); store(stringList, stringList, tag, group1, group2);
} }
void CompStoreObj::getset( QString &string, const QString tag, const QString def, const QString group1, const QString group2 ) void CompStoreObj::getset( QString &string, const QString tag, const QString def, const QString group1, const QString group2 )
{ {
retrieve( string, tag, def, group1, group2); retrieve( string, tag, def, group1, group2);
store(string, string, tag, group1, group2); store(string, string, tag, group1, group2);
} }
void CompStoreObj::getset( bool &truth, const QString tag, const bool def, const QString group1, const QString group2 ) void CompStoreObj::getset( bool &truth, const QString tag, const bool def, const QString group1, const QString group2 )
{ {
retrieve( truth, tag, def, group1, group2); retrieve( truth, tag, def, group1, group2);
store(truth, truth, tag, group1, group2); store(truth, truth, tag, group1, group2);
} }
void CompStoreObj::getset( int &number, const QString tag, const int def, const QString group1, const QString group2 ) void CompStoreObj::getset( int &number, const QString tag, const int def, const QString group1, const QString group2 )
{ {
retrieve( number, tag, def, group1, group2); retrieve( number, tag, def, group1, group2);
store(number, number, tag, group1, group2); store(number, number, tag, group1, group2);
} }
// ** FwRevision class******************** // ** FwRevision class********************
int FwRevision::get( const QString fwName ) int FwRevision::get( const QString fwType )
{ {
QString result; QString result;
retrieve( result, fwName, "", "FwRevisions" ); retrieve( result, fwType, "", "FwRevisions" );
return result.toInt(); return result.toInt();
} }
void FwRevision::set( const QString fwName, const int fwRevision ) void FwRevision::set( const QString fwType, const int fwRevision )
{ {
QString tempString= QString("%1").arg(fwRevision); QString tempString= QString("%1").arg(fwRevision);
store( tempString, tempString, fwName, "FwRevisions" ); store( tempString, tempString, fwType, "FwRevisions" );
} }
void FwRevision::remove( const QString tag ) void FwRevision::remove( const QString tag )
{ {
clear( "FwRevisions", tag ); clear( "FwRevisions", tag );
} }
// ** JStickData class******************** // ** JStickData class********************
@ -224,97 +224,93 @@ void JStickData::stick_inv(const int it) { store( it, _stickInv, QString("stick%
// Constructor // Constructor
JStickData::JStickData() JStickData::JStickData()
{ {
index = -1; index = -1;
} }
void JStickData::remove() void JStickData::remove()
{ {
// Remove all JStickData values from settings file // Remove all JStickData values from settings file
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
settings.beginGroup( "JsCalibration" ); settings.beginGroup( "JsCalibration" );
settings.remove( QString( "stick%1_axe").arg(index) ); settings.remove( QString( "stick%1_axe").arg(index) );
settings.remove( QString( "stick%1_min").arg(index) ); settings.remove( QString( "stick%1_min").arg(index) );
settings.remove( QString( "stick%1_med").arg(index) ); settings.remove( QString( "stick%1_med").arg(index) );
settings.remove( QString( "stick%1_max").arg(index) ); settings.remove( QString( "stick%1_max").arg(index) );
settings.remove( QString( "stick%1_inv").arg(index) ); settings.remove( QString( "stick%1_inv").arg(index) );
settings.endGroup(); settings.endGroup();
// Reset all JStickData variables to initial values // Reset all JStickData variables to initial values
init(index); init(index);
} }
bool JStickData::existsOnDisk() bool JStickData::existsOnDisk()
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
settings.beginGroup("JsCalibration"); settings.beginGroup("JsCalibration");
int axe = settings.value( QString("stick%1_axe").arg(index), -1 ).toInt(); int axe = settings.value( QString("stick%1_axe").arg(index), -1 ).toInt();
settings.endGroup(); settings.endGroup();
return (axe > -1); return (axe > -1);
} }
void JStickData::init(int newIndex) void JStickData::init(int newIndex)
{ {
index = newIndex; index = newIndex;
_stickAxe = -1; _stickAxe = -1;
_stickMin = -32767; _stickMin = -32767;
_stickMed = 0; _stickMed = 0;
_stickMax = 0; _stickMax = 0;
_stickInv = 0; _stickInv = 0;
// Do not write empty joystick calibrations to disk. // Do not write empty joystick calibrations to disk.
if ( !existsOnDisk() ) if ( !existsOnDisk() )
return; return;
flush(); flush();
} }
void JStickData::flush() void JStickData::flush()
{ {
getset( _stickAxe, QString("stick%1_axe").arg(index), -1, "JsCalibration" ); getset( _stickAxe, QString("stick%1_axe").arg(index), -1, "JsCalibration" );
getset( _stickMin, QString("stick%1_min").arg(index), -32767, "JsCalibration" ); getset( _stickMin, QString("stick%1_min").arg(index), -32767, "JsCalibration" );
getset( _stickMed, QString("stick%1_med").arg(index), 0, "JsCalibration" ); getset( _stickMed, QString("stick%1_med").arg(index), 0, "JsCalibration" );
getset( _stickMax, QString("stick%1_max").arg(index), 0, "JsCalibration" ); getset( _stickMax, QString("stick%1_max").arg(index), 0, "JsCalibration" );
getset( _stickInv, QString("stick%1_inv").arg(index), 0, "JsCalibration" ); getset( _stickInv, QString("stick%1_inv").arg(index), 0, "JsCalibration" );
} }
// ** Profile class******************** // ** Profile class********************
// Get declarations // Get declarations
QString Profile::firmware() { return _firmware; } QString Profile::fwName() const { return _fwName; }
QString Profile::name() { return _name; } QString Profile::fwType() const { return _fwType; }
QString Profile::sdPath() { return _sdPath; } QString Profile::name() const { return _name; }
QString Profile::splashFile() { return _splashFile; } QString Profile::sdPath() const { return _sdPath; }
bool Profile::burnFirmware() { return _burnFirmware; } QString Profile::splashFile() const { return _splashFile; }
bool Profile::renameFwFiles() { return _renameFwFiles; } bool Profile::burnFirmware() const { return _burnFirmware; }
bool Profile::patchImage() { return _patchImage; } bool Profile::renameFwFiles() const { return _renameFwFiles; }
int Profile::channelOrder() { return _channelOrder; } int Profile::channelOrder() const { return _channelOrder; }
int Profile::defaultMode() { return _defaultMode; } int Profile::defaultMode() const { return _defaultMode; }
QString Profile::beeper() { return _beeper; } QString Profile::beeper() const { return _beeper; }
QString Profile::countryCode() { return _countryCode; } QString Profile::countryCode() const { return _countryCode; }
QString Profile::display() { return _display; } QString Profile::display() const { return _display; }
QString Profile::haptic() { return _haptic; } QString Profile::haptic() const { return _haptic; }
QString Profile::speaker() { return _speaker; } QString Profile::speaker() const { return _speaker; }
QString Profile::stickPotCalib() { return _stickPotCalib; } QString Profile::stickPotCalib() const { return _stickPotCalib; }
QString Profile::trainerCalib() { return _trainerCalib; } QString Profile::trainerCalib() const { return _trainerCalib; }
int Profile::currentCalib() { return _currentCalib; } int Profile::currentCalib() const { return _currentCalib; }
int Profile::gsStickMode() { return _gsStickMode; } int Profile::gsStickMode() const { return _gsStickMode; }
int Profile::ppmMultiplier() { return _ppmMultiplier; } int Profile::ppmMultiplier() const { return _ppmMultiplier; }
int Profile::vBatCalib() { return _vBatCalib; } int Profile::vBatCalib() const { return _vBatCalib; }
int Profile::vBatWarn() { return _vBatWarn; } int Profile::vBatWarn() const { return _vBatWarn; }
// Set declarations // Set declarations
void Profile::name (const QString x) { if (x.isEmpty()) // Name may never be empty! void Profile::name (const QString x) { store(x, _name, "Name" ,"Profiles", QString("profile%1").arg(index));}
store("----", _name, "Name", "Profiles", QString("profile%1").arg(index)); void Profile::fwName (const QString x) { store(x, _fwName, "fwName" ,"Profiles", QString("profile%1").arg(index));}
else void Profile::fwType (const QString x) { store(x, _fwType, "fwType" ,"Profiles", QString("profile%1").arg(index));}
store(x, _name, "Name", "Profiles", QString("profile%1").arg(index));}
void Profile::firmware (const QString x) { store(x, _firmware, "firmware" ,"Profiles", QString("profile%1").arg(index));}
void Profile::sdPath (const QString x) { store(x, _sdPath, "sdPath" ,"Profiles", QString("profile%1").arg(index));} void Profile::sdPath (const QString x) { store(x, _sdPath, "sdPath" ,"Profiles", QString("profile%1").arg(index));}
void Profile::splashFile (const QString x) { store(x, _splashFile, "SplashFileName" ,"Profiles", QString("profile%1").arg(index));} void Profile::splashFile (const QString x) { store(x, _splashFile, "SplashFileName" ,"Profiles", QString("profile%1").arg(index));}
void Profile::burnFirmware (const bool x) { store(x, _burnFirmware, "burnFirmware" ,"Profiles", QString("profile%1").arg(index));} void Profile::burnFirmware (const bool x) { store(x, _burnFirmware, "burnFirmware" ,"Profiles", QString("profile%1").arg(index));}
void Profile::renameFwFiles (const bool x) { store(x, _renameFwFiles, "rename_firmware_files" ,"Profiles", QString("profile%1").arg(index));} void Profile::renameFwFiles (const bool x) { store(x, _renameFwFiles, "rename_firmware_files" ,"Profiles", QString("profile%1").arg(index));}
void Profile::patchImage (const bool x) { store(x, _patchImage, "patchImage" ,"Profiles", QString("profile%1").arg(index));}
void Profile::channelOrder (const int x) { store(x, _channelOrder, "default_channel_order" ,"Profiles", QString("profile%1").arg(index));} void Profile::channelOrder (const int x) { store(x, _channelOrder, "default_channel_order" ,"Profiles", QString("profile%1").arg(index));}
void Profile::defaultMode (const int x) { store(x, _defaultMode, "default_mode" ,"Profiles", QString("profile%1").arg(index));} void Profile::defaultMode (const int x) { store(x, _defaultMode, "default_mode" ,"Profiles", QString("profile%1").arg(index));}
@ -334,93 +330,121 @@ void Profile::vBatWarn (const int x) { store(x, _vBatWarn, "vBatWa
// Constructor // Constructor
Profile::Profile() Profile::Profile()
{ {
index = -1; index = -1;
}
// The default copy operator can not be used since the index variable would be destroyed
Profile& Profile::operator=(const Profile& rhs)
{
name ( rhs.name() );
fwName ( rhs.fwName() );
fwType ( rhs.fwType() );
sdPath ( rhs.sdPath() );
splashFile ( rhs.splashFile() );
burnFirmware ( rhs.burnFirmware() );
renameFwFiles( rhs.renameFwFiles() );
channelOrder ( rhs.channelOrder() );
defaultMode ( rhs.defaultMode() );
beeper ( rhs.beeper() );
countryCode ( rhs.countryCode() );
display ( rhs.display() );
haptic ( rhs.haptic() );
speaker ( rhs.speaker() );
stickPotCalib( rhs.stickPotCalib() );
trainerCalib ( rhs.trainerCalib() );
currentCalib ( rhs.currentCalib() );
gsStickMode ( rhs.gsStickMode() );
ppmMultiplier( rhs.ppmMultiplier() );
vBatCalib ( rhs.vBatCalib() );
vBatWarn ( rhs.vBatWarn() );
return *this;
} }
void Profile::remove() void Profile::remove()
{ {
// Remove all profile values from settings file // Remove all profile values from settings file
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
settings.beginGroup("Profiles"); settings.beginGroup("Profiles");
settings.remove(QString("profile%1").arg(index)); settings.remove(QString("profile%1").arg(index));
settings.endGroup(); settings.endGroup();
// Reset all profile variables to initial values // Reset all profile variables to initial values
init(index); init(index);
} }
bool Profile::existsOnDisk() bool Profile::existsOnDisk()
{ {
QSettings settings(PRODUCT, COMPANY); QSettings settings(PRODUCT, COMPANY);
settings.beginGroup("Profiles"); settings.beginGroup("Profiles");
settings.beginGroup(QString("profile%1").arg(index)); settings.beginGroup(QString("profile%1").arg(index));
QStringList keyList = settings.allKeys(); QStringList keyList = settings.allKeys();
settings.endGroup(); settings.endGroup();
settings.endGroup(); settings.endGroup();
return (keyList.length() > 0); return (keyList.length() > 0);
} }
void Profile::init(int newIndex) void Profile::init(int newIndex)
{ {
index = newIndex; index = newIndex;
_firmware = ""; _fwName = "";
_name = ""; _fwType = "";
_sdPath = ""; _name = "";
_splashFile = ""; _sdPath = "";
_burnFirmware = false; _splashFile = "";
_renameFwFiles = false; _burnFirmware = false;
_patchImage = false; _renameFwFiles = false;
_channelOrder = 0; _channelOrder = 0;
_defaultMode = 1; _defaultMode = 1;
_beeper = ""; _beeper = "";
_countryCode = ""; _countryCode = "";
_display = ""; _display = "";
_haptic = ""; _haptic = "";
_speaker = ""; _speaker = "";
_stickPotCalib = ""; _stickPotCalib = "";
_trainerCalib = ""; _trainerCalib = "";
_currentCalib = 0; _currentCalib = 0;
_gsStickMode = 0; _gsStickMode = 0;
_ppmMultiplier = 0; _ppmMultiplier = 0;
_vBatCalib = 0; _vBatCalib = 0;
_vBatWarn = 0; _vBatWarn = 0;
// Do not write empty profiles to disk except the default (0) profile. // Do not write empty profiles to disk except the default (0) profile.
if ( index > 0 && !existsOnDisk()) if ( index > 0 && !existsOnDisk())
return; return;
flush(); flush();
} }
void Profile::flush() void Profile::flush()
{ {
// Load and store all variables. Use default values if setting values are missing // Load and store all variables. Use default values if setting values are missing
getset( _firmware, "firmware" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _fwName, "fwName" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _name, "Name" ,"----" ,"Profiles", QString("profile%1").arg(index)); getset( _fwType, "fwType" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _sdPath, "sdPath" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _name, "Name" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _splashFile, "SplashFileName" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _sdPath, "sdPath" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _burnFirmware, "burnFirmware" ,false ,"Profiles", QString("profile%1").arg(index)); getset( _splashFile, "SplashFileName" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _renameFwFiles, "rename_firmware_files" ,false ,"Profiles", QString("profile%1").arg(index)); getset( _burnFirmware, "burnFirmware" ,false ,"Profiles", QString("profile%1").arg(index));
getset( _patchImage, "patchImage" ,false ,"Profiles", QString("profile%1").arg(index)); getset( _renameFwFiles, "rename_firmware_files" ,false ,"Profiles", QString("profile%1").arg(index));
getset( _channelOrder, "default_channel_order" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _channelOrder, "default_channel_order" ,0 ,"Profiles", QString("profile%1").arg(index));
getset( _defaultMode, "default_mode" ,1 ,"Profiles", QString("profile%1").arg(index)); getset( _defaultMode, "default_mode" ,1 ,"Profiles", QString("profile%1").arg(index));
getset( _beeper, "Beeper" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _beeper, "Beeper" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _countryCode, "countryCode" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _countryCode, "countryCode" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _display, "Display" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _display, "Display" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _haptic, "Haptic" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _haptic, "Haptic" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _speaker, "Speaker" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _speaker, "Speaker" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _stickPotCalib, "StickPotCalib" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _stickPotCalib, "StickPotCalib" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _trainerCalib, "TrainerCalib" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _trainerCalib, "TrainerCalib" ,"" ,"Profiles", QString("profile%1").arg(index));
getset( _currentCalib, "currentCalib" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _currentCalib, "currentCalib" ,0 ,"Profiles", QString("profile%1").arg(index));
getset( _gsStickMode, "GSStickMode" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _gsStickMode, "GSStickMode" ,0 ,"Profiles", QString("profile%1").arg(index));
getset( _ppmMultiplier, "PPM_Multiplier" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _ppmMultiplier, "PPM_Multiplier" ,0 ,"Profiles", QString("profile%1").arg(index));
getset( _vBatCalib, "VbatCalib" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _vBatCalib, "VbatCalib" ,0 ,"Profiles", QString("profile%1").arg(index));
getset( _vBatWarn, "vBatWarn" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _vBatWarn, "vBatWarn" ,0 ,"Profiles", QString("profile%1").arg(index));
} }
@ -440,7 +464,6 @@ QString AppData::compileServer() { return _compileServer; }
QString AppData::cpuId() { return _cpuId; } QString AppData::cpuId() { return _cpuId; }
QString AppData::dfuArguments() { return _dfuArguments; } QString AppData::dfuArguments() { return _dfuArguments; }
QString AppData::dfuLocation() { return _dfuLocation; } QString AppData::dfuLocation() { return _dfuLocation; }
QString AppData::lastFw() { return _lastFw; }
QString AppData::locale() { return _locale; } QString AppData::locale() { return _locale; }
QString AppData::mcu() { return _mcu; } QString AppData::mcu() { return _mcu; }
QString AppData::programmer() { return _programmer; } QString AppData::programmer() { return _programmer; }
@ -495,7 +518,6 @@ void AppData::compileServer (const QString x) { store(x, _compileServer,
void AppData::cpuId (const QString x) { store(x, _cpuId, "cpu_id" );} void AppData::cpuId (const QString x) { store(x, _cpuId, "cpu_id" );}
void AppData::dfuArguments (const QString x) { store(x, _dfuArguments, "dfu_arguments" );} void AppData::dfuArguments (const QString x) { store(x, _dfuArguments, "dfu_arguments" );}
void AppData::dfuLocation (const QString x) { store(x, _dfuLocation, "dfu_location" );} void AppData::dfuLocation (const QString x) { store(x, _dfuLocation, "dfu_location" );}
void AppData::lastFw (const QString x) { store(x, _lastFw, "lastFw" );}
void AppData::locale (const QString x) { store(x, _locale, "locale" );} void AppData::locale (const QString x) { store(x, _locale, "locale" );}
void AppData::mcu (const QString x) { store(x, _mcu, "mcu" );} void AppData::mcu (const QString x) { store(x, _mcu, "mcu" );}
void AppData::programmer (const QString x) { store(x, _programmer, "programmer" );} void AppData::programmer (const QString x) { store(x, _programmer, "programmer" );}
@ -539,105 +561,118 @@ void AppData::warningId (const int x) { store(x, _warningId,
// Constructor // Constructor
AppData::AppData() AppData::AppData()
{ {
//Initialize the profiles //Initialize the profiles
for (int i=0; i<MAX_PROFILES; i++) for (int i=0; i<MAX_PROFILES; i++)
profile[i].init( i ); profile[i].init( i );
//Initialize the joysticks //Initialize the joysticks
for (int i=0; i<MAX_JOYSTICKS; i++) for (int i=0; i<MAX_JOYSTICKS; i++)
joystick[i].init( i ); joystick[i].init( i );
// Import settings from companion9x, but only do it one time. // Import settings from companion9x, but only do it one time.
// Use "location" tag as an indicator that the settings are missing QSettings c9x_settings("companion9x", "companion9x");
QSettings c9x_settings("companion9x", "companion9x"); QSettings settings(PRODUCT, COMPANY);
QSettings settings(PRODUCT, COMPANY); if (profile[0].name().isEmpty() )
if (!settings.contains("locale")) {
{ // Copy all settings from companion9x to companion
QStringList keys = c9x_settings.allKeys(); QStringList keys = c9x_settings.allKeys();
for (QStringList::iterator i=keys.begin(); i!=keys.end(); i++) for (QStringList::iterator i=keys.begin(); i!=keys.end(); i++)
{ {
settings.setValue(*i, c9x_settings.value(*i)); settings.setValue(*i, c9x_settings.value(*i));
} }
// Convert firmware name
QString firmware = settings.value("firmware", "").toString();
firmware.replace("open9x","opentx");
firmware.replace("x9da","taranis");
// Move Companion9x settings to profile0, the new default profile // Store old values in new locations
profile[0].firmware( firmware ); autoCheckApp(settings.value("startup_check_companion9x", true).toBool());
profile[0].name( settings.value( "Name", "" ).toString());
profile[0].sdPath( settings.value( "sdPath", "" ).toString());
profile[0].splashFile( settings.value( "SplashFileName", "" ).toString());
profile[0].burnFirmware( settings.value( "burnFirmware", false ).toBool());
profile[0].renameFwFiles( settings.value( "rename_firmware_files", false ).toBool());
profile[0].patchImage( settings.value( "patchImage", false ).toBool());
profile[0].channelOrder( settings.value( "default_channel_order", "0" ).toInt());
profile[0].defaultMode( settings.value( "default_mode", "1" ).toInt());
// Delete unused settings // Convert and store the firmware type
settings.remove("firmware"); QString fwType = settings.value("firmware", "").toString();
settings.remove("Name"); fwType.replace("open9x","opentx");
settings.remove("sdPath"); fwType.replace("x9da","taranis");
settings.remove("SplashFileName"); profile[0].fwType( fwType );
settings.remove("burnFirmware");
settings.remove("rename_firmware_files");
settings.remove("patchImage");
settings.remove("default_channel_order");
settings.remove("default_mode");
}
// Load and store all variables. Use default values if setting values are missing // Move the Companion9x profile settings to profile0, the new default profile
getset( _recentFiles, "recentFileList" ,"" ); profile[0].name( settings.value( "Name", "" ).toString());
getset( _mainWinGeo, "mainWindowGeometry" ,"" ); profile[0].sdPath( settings.value( "sdPath", "" ).toString());
getset( _mainWinState, "mainWindowState" ,"" ); profile[0].splashFile( settings.value( "SplashFileName", "" ).toString());
getset( _modelEditGeo, "modelEditGeometry" ,"" ); profile[0].burnFirmware( settings.value( "burnFirmware", false ).toBool());
profile[0].renameFwFiles( settings.value( "rename_firmware_files", false ).toBool());
profile[0].channelOrder( settings.value( "default_channel_order", "0" ).toInt());
profile[0].defaultMode( settings.value( "default_mode", "1" ).toInt());
getset( _armMcu, "arm_mcu" ,"at91sam3s4-9x" ); // Ensure that the default profile has a name
getset( _avrArguments, "avr_arguments" ,"" ); if ( profile[0].name().isEmpty() )
getset( _avrPort, "avr_port" ,"" ); profile[0].name("My Radio");
getset( _avrdudeLocation, "avrdudeLocation" ,"" );
getset( _compileServer, "compilation-server" ,"" );
getset( _cpuId, "cpu_id" ,"" );
getset( _dfuArguments, "dfu_arguments" ,"-a 0" );
getset( _dfuLocation, "dfu_location" ,"" );
getset( _lastFw, "lastFw" ,"" );
getset( _locale, "locale" ,"" );
getset( _mcu, "mcu" ,"m64" );
getset( _programmer, "programmer" ,"usbasp" );
getset( _sambaLocation, "samba_location" ,"" );
getset( _sambaPort, "samba_port" ,"\\USBserial\\COM23" );
getset( _backupDir, "backupPath" ,"" ); // Delete obsolete settings fields
getset( _gePath, "gePath" ,"" ); settings.remove("ActiveProfile");
getset( _eepromDir, "lastDir" ,"" ); settings.remove("burnFirmware");
getset( _flashDir, "lastFlashDir" ,"" ); settings.remove("custom_id");
getset( _imagesDir, "lastImagesDir" ,"" ); settings.remove("default_channel_order");
getset( _logDir, "lastLogDir" ,"" ); settings.remove("default_mode");
getset( _libDir, "libraryPath" ,"" ); settings.remove("firmware");
getset( _snapshotDir, "snapshotpath" ,"" ); settings.remove("lastFw");
getset( _updatesDir, "lastUpdatesDir" ,"" ); settings.remove("Name");
settings.remove("patchImage");
settings.remove("rename_firmware_files");
settings.remove("sdPath");
settings.remove("SplashFileName");
settings.remove("startup_check_companion9x");
getset( _enableBackup, "backupEnable" ,false ); // Select the new default profile as current profile
getset( _backupOnFlash, "backupOnFlash" ,true ); id( 0 );
getset( _jsSupport, "js_support" ,false ); }
getset( _rev4aSupport, "rev4asupport" ,false );
getset( _maximized, "maximized" ,false );
getset( _showSplash, "show_splash" ,true );
getset( _snapToClpbrd, "snapshot_to_clipboard" ,false );
getset( _autoCheckApp, "startup_check_companion" ,true );
getset( _autoCheckFw, "startup_check_fw" ,true );
getset( _simuSW, "simuSW" ,false );
getset( _enableWizard, "wizardEnable" ,true );
getset( _backLight, "backLight" ,0 ); // Load and store all variables. Use default values if setting values are missing
getset( _embedSplashes, "embedded_splashes" ,0 ); getset( _recentFiles, "recentFileList" ,"" );
getset( _fwServerFails, "fwserver" ,0 ); getset( _mainWinGeo, "mainWindowGeometry" ,"" );
getset( _generalEditTab, "generalEditTab" ,0 ); getset( _mainWinState, "mainWindowState" ,"" );
getset( _iconSize, "icon_size" ,2 ); getset( _modelEditGeo, "modelEditGeometry" ,"" );
getset( _jsCtrl, "js_ctrl" ,0 );
getset( _historySize, "history_size" ,10 ); getset( _armMcu, "arm_mcu" ,"at91sam3s4-9x" );
getset( _modelEditTab, "modelEditTab" ,0 ); getset( _avrArguments, "avr_arguments" ,"" );
getset( _id, "profileId" ,0 ); getset( _avrPort, "avr_port" ,"" );
getset( _theme, "theme" ,1 ); getset( _avrdudeLocation, "avrdudeLocation" ,"" );
getset( _warningId, "warningId" ,0 ); getset( _compileServer, "compilation-server" ,"" );
getset( _cpuId, "cpu_id" ,"" );
getset( _dfuArguments, "dfu_arguments" ,"-a 0" );
getset( _dfuLocation, "dfu_location" ,"" );
getset( _locale, "locale" ,"" );
getset( _mcu, "mcu" ,"m64" );
getset( _programmer, "programmer" ,"usbasp" );
getset( _sambaLocation, "samba_location" ,"" );
getset( _sambaPort, "samba_port" ,"\\USBserial\\COM23" );
getset( _backupDir, "backupPath" ,"" );
getset( _gePath, "gePath" ,"" );
getset( _eepromDir, "lastDir" ,"" );
getset( _flashDir, "lastFlashDir" ,"" );
getset( _imagesDir, "lastImagesDir" ,"" );
getset( _logDir, "lastLogDir" ,"" );
getset( _libDir, "libraryPath" ,"" );
getset( _snapshotDir, "snapshotpath" ,"" );
getset( _updatesDir, "lastUpdatesDir" ,"" );
getset( _enableBackup, "backupEnable" ,false );
getset( _backupOnFlash, "backupOnFlash" ,true );
getset( _jsSupport, "js_support" ,false );
getset( _rev4aSupport, "rev4asupport" ,false );
getset( _maximized, "maximized" ,false );
getset( _showSplash, "show_splash" ,true );
getset( _snapToClpbrd, "snapshot_to_clipboard" ,false );
getset( _autoCheckApp, "startup_check_companion" ,true );
getset( _autoCheckFw, "startup_check_fw" ,true );
getset( _simuSW, "simuSW" ,false );
getset( _enableWizard, "wizardEnable" ,true );
getset( _backLight, "backLight" ,0 );
getset( _embedSplashes, "embedded_splashes" ,0 );
getset( _fwServerFails, "fwserver" ,0 );
getset( _generalEditTab, "generalEditTab" ,0 );
getset( _iconSize, "icon_size" ,2 );
getset( _jsCtrl, "js_ctrl" ,0 );
getset( _historySize, "history_size" ,10 );
getset( _modelEditTab, "modelEditTab" ,0 );
getset( _id, "profileId" ,0 );
getset( _theme, "theme" ,1 );
getset( _warningId, "warningId" ,0 );
} }

View file

@ -1,4 +1,4 @@
// Companion Application Data Class Definition. // Companion Application Data Class Declaration.
// Author Kjell Kernen // Author Kjell Kernen
// All temporary and permanent global variables are defined here to make // All temporary and permanent global variables are defined here to make
@ -92,13 +92,13 @@ class Profile: protected CompStoreObj
int index; int index;
// Application Variables // Application Variables
QString _firmware; QString _fwName;
QString _fwType;
QString _name; QString _name;
QString _sdPath; QString _sdPath;
QString _splashFile; QString _splashFile;
bool _burnFirmware; bool _burnFirmware;
bool _renameFwFiles; bool _renameFwFiles;
bool _patchImage;
int _channelOrder; int _channelOrder;
int _defaultMode; int _defaultMode;
@ -118,37 +118,37 @@ class Profile: protected CompStoreObj
public: public:
// All the get definitions // All the get definitions
QString firmware(); QString fwName() const;
QString name(); QString fwType() const;
QString sdPath(); QString name() const;
QString splashFile(); QString sdPath() const;
bool burnFirmware(); QString splashFile() const;
bool renameFwFiles(); bool burnFirmware() const;
bool patchImage(); bool renameFwFiles() const;
int channelOrder(); int channelOrder() const;
int defaultMode(); int defaultMode() const;
QString beeper(); QString beeper() const;
QString countryCode(); QString countryCode() const;
QString display(); QString display() const;
QString haptic(); QString haptic() const;
QString speaker(); QString speaker() const;
QString stickPotCalib(); QString stickPotCalib() const;
QString trainerCalib(); QString trainerCalib() const;
int currentCalib(); int currentCalib() const;
int gsStickMode(); int gsStickMode() const;
int ppmMultiplier(); int ppmMultiplier() const;
int vBatCalib(); int vBatCalib() const;
int vBatWarn(); int vBatWarn() const;
// All the set definitions // All the set definitions
void name (const QString); void name (const QString);
void firmware (const QString); void fwName (const QString);
void fwType (const QString);
void sdPath (const QString); void sdPath (const QString);
void splashFile (const QString); void splashFile (const QString);
void burnFirmware (const bool); void burnFirmware (const bool);
void renameFwFiles (const bool); void renameFwFiles (const bool);
void patchImage (const bool);
void channelOrder (const int); void channelOrder (const int);
void defaultMode (const int); void defaultMode (const int);
@ -166,6 +166,7 @@ class Profile: protected CompStoreObj
void vBatWarn (const int); void vBatWarn (const int);
Profile(); Profile();
Profile& operator=(const Profile&);
void remove(); void remove();
bool existsOnDisk(); bool existsOnDisk();
void init(int newIndex); void init(int newIndex);
@ -194,7 +195,6 @@ class AppData: protected CompStoreObj
QString _cpuId; QString _cpuId;
QString _dfuArguments; QString _dfuArguments;
QString _dfuLocation; QString _dfuLocation;
QString _lastFw;
QString _locale; QString _locale;
QString _mcu; QString _mcu;
QString _programmer; QString _programmer;
@ -250,7 +250,7 @@ class AppData: protected CompStoreObj
QString cpuId(); QString cpuId();
QString dfuArguments(); QString dfuArguments();
QString dfuLocation(); QString dfuLocation();
QString lastFw(); QString lastFw();
QString locale(); QString locale();
QString mcu(); QString mcu();
QString programmer(); QString programmer();
@ -286,7 +286,7 @@ class AppData: protected CompStoreObj
int iconSize(); int iconSize();
int historySize(); int historySize();
int jsCtrl(); int jsCtrl();
int modelEditTab(); int modelEditTab(); // This variable is unused an can be removed
int id(); int id();
int theme(); int theme();
int warningId(); int warningId();

View file

@ -56,9 +56,6 @@ void appPreferencesDialog::writeValues()
g.jsSupport(false); g.jsSupport(false);
g.jsCtrl(0); g.jsCtrl(0);
} }
g.id(ui->profileIndexLE->text().toInt());
g.profile[g.id()].channelOrder(ui->channelorderCB->currentIndex()); g.profile[g.id()].channelOrder(ui->channelorderCB->currentIndex());
g.profile[g.id()].defaultMode(ui->stickmodeCB->currentIndex()); g.profile[g.id()].defaultMode(ui->stickmodeCB->currentIndex());
g.profile[g.id()].renameFwFiles(ui->renameFirmware->isChecked()); g.profile[g.id()].renameFwFiles(ui->renameFirmware->isChecked());
@ -66,7 +63,8 @@ void appPreferencesDialog::writeValues()
g.profile[g.id()].name(ui->profileNameLE->text()); g.profile[g.id()].name(ui->profileNameLE->text());
g.profile[g.id()].sdPath(ui->sdPath->text()); g.profile[g.id()].sdPath(ui->sdPath->text());
g.profile[g.id()].splashFile(ui->SplashFileName->text()); g.profile[g.id()].splashFile(ui->SplashFileName->text());
g.profile[g.id()].firmware(ui->firmwareLE->text()); g.profile[g.id()].fwName(ui->fwNameLE->text());
g.profile[g.id()].fwType(ui->fwTypeLE->text());
saveProfile(); saveProfile();
} }
@ -147,9 +145,9 @@ void appPreferencesDialog::initSettings()
ui->stickmodeCB->setCurrentIndex(g.profile[g.id()].defaultMode()); ui->stickmodeCB->setCurrentIndex(g.profile[g.id()].defaultMode());
ui->renameFirmware->setChecked(g.profile[g.id()].renameFwFiles()); ui->renameFirmware->setChecked(g.profile[g.id()].renameFwFiles());
ui->sdPath->setText(g.profile[g.id()].sdPath()); ui->sdPath->setText(g.profile[g.id()].sdPath());
ui->profileIndexLE->setText(QString("%1").arg(g.id()));
ui->profileNameLE->setText(g.profile[g.id()].name()); ui->profileNameLE->setText(g.profile[g.id()].name());
ui->firmwareLE->setText(g.profile[g.id()].firmware()); ui->fwNameLE->setText(g.profile[g.id()].fwName());
ui->fwTypeLE->setText(g.profile[g.id()].fwType());
ui->SplashFileName->setText(g.profile[g.id()].splashFile()); ui->SplashFileName->setText(g.profile[g.id()].splashFile());
displayImage( g.profile[g.id()].splashFile() ); displayImage( g.profile[g.id()].splashFile() );
@ -252,7 +250,8 @@ void appPreferencesDialog::saveProfile()
g.profile[g.id()].renameFwFiles( ui->renameFirmware->isChecked()); g.profile[g.id()].renameFwFiles( ui->renameFirmware->isChecked());
g.profile[g.id()].sdPath( ui->sdPath->text()); g.profile[g.id()].sdPath( ui->sdPath->text());
g.profile[g.id()].splashFile( ui->SplashFileName->text()); g.profile[g.id()].splashFile( ui->SplashFileName->text());
g.profile[g.id()].firmware( ui->firmwareLE->text()); g.profile[g.id()].fwName( ui->fwNameLE->text());
g.profile[g.id()].fwType( ui->fwTypeLE->text());
} }
void appPreferencesDialog::on_removeProfileButton_clicked() void appPreferencesDialog::on_removeProfileButton_clicked()
@ -278,31 +277,11 @@ bool appPreferencesDialog::displayImage( QString fileName )
// Use the firmware name to determine splash width // Use the firmware name to determine splash width
int width = SPLASH_WIDTH; int width = SPLASH_WIDTH;
if (g.profile[g.id()].firmware().contains("taranis")) if (g.profile[g.id()].fwType().contains("taranis"))
width = SPLASHX9D_WIDTH; width = SPLASHX9D_WIDTH;
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(width, SPLASH_HEIGHT))); ui->imageLabel->setPixmap( makePixMap( image, g.profile[g.id()].fwType()));
if (width==SPLASHX9D_WIDTH) { ui->imageLabel->setFixedSize(width, SPLASH_HEIGHT);
image=image.convertToFormat(QImage::Format_RGB32);
QRgb col;
int gray, height = image.height();
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
col = image.pixel(i, j);
gray = qGray(col);
image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
ui->imageLabel->setPixmap(QPixmap::fromImage(image));
}
else {
ui->imageLabel->setPixmap(QPixmap::fromImage(image.convertToFormat(QImage::Format_Mono)));
}
if (width == SPLASH_WIDTH)
ui->imageLabel->setFixedSize(SPLASH_WIDTH, SPLASH_HEIGHT);
else
ui->imageLabel->setFixedSize(SPLASHX9D_WIDTH, SPLASHX9D_HEIGHT);
return true; return true;
} }

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>685</width> <width>685</width>
<height>446</height> <height>442</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -26,12 +26,21 @@
<string>Edit Settings</string> <string>Edit Settings</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<property name="verticalSpacing"> <property name="verticalSpacing">
<number>2</number> <number>2</number>
</property> </property>
<property name="margin">
<number>6</number>
</property>
<item row="2" column="0" colspan="2"> <item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">
@ -124,12 +133,12 @@
</property> </property>
<item> <item>
<property name="text"> <property name="text">
<string>Include companion splashes</string> <string>Only show user splash images</string>
</property> </property>
</item> </item>
<item> <item>
<property name="text"> <property name="text">
<string>Only user defined splashes</string> <string>Show user and companion splash images</string>
</property> </property>
</item> </item>
</widget> </widget>
@ -490,10 +499,10 @@
</widget> </widget>
<widget class="QWidget" name="profileTab"> <widget class="QWidget" name="profileTab">
<attribute name="title"> <attribute name="title">
<string>Radio Settings</string> <string>Radio Settings Profile</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="10" column="1" colspan="4"> <item row="11" column="1" colspan="4">
<widget class="QComboBox" name="stickmodeCB"> <widget class="QComboBox" name="stickmodeCB">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
@ -547,7 +556,7 @@ Mode 4:
</item> </item>
</widget> </widget>
</item> </item>
<item row="12" column="1" colspan="4"> <item row="13" column="1" colspan="4">
<widget class="QComboBox" name="channelorderCB"> <widget class="QComboBox" name="channelorderCB">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@ -697,14 +706,7 @@ This is used by the templated to determine which channel goes to what number out
</item> </item>
</widget> </widget>
</item> </item>
<item row="3" column="1" colspan="5"> <item row="11" column="0">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum"> <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
@ -720,11 +722,11 @@ This is used by the templated to determine which channel goes to what number out
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Settings Profile</string> <string>Profile Name</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="1"> <item row="16" column="1">
<spacer name="verticalSpacer_3"> <spacer name="verticalSpacer_3">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -737,7 +739,7 @@ This is used by the templated to determine which channel goes to what number out
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum"> <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
@ -750,7 +752,7 @@ This is used by the templated to determine which channel goes to what number out
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="0"> <item row="13" column="0">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
@ -766,14 +768,14 @@ This is used by the templated to determine which channel goes to what number out
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1" colspan="4"> <item row="14" column="1" colspan="4">
<widget class="QCheckBox" name="renameFirmware"> <widget class="QCheckBox" name="renameFirmware">
<property name="text"> <property name="text">
<string>Append version number to FW file name</string> <string>Append version number to FW file name</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<widget class="QLabel" name="sdPathLabel"> <widget class="QLabel" name="sdPathLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum"> <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
@ -789,7 +791,7 @@ This is used by the templated to determine which channel goes to what number out
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1" colspan="3"> <item row="3" column="1" colspan="3">
<widget class="QLineEdit" name="sdPath"> <widget class="QLineEdit" name="sdPath">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@ -800,12 +802,18 @@ This is used by the templated to determine which channel goes to what number out
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>350</width>
<height>16777215</height>
</size>
</property>
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="5"> <item row="3" column="5">
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -818,45 +826,51 @@ This is used by the templated to determine which channel goes to what number out
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="14" column="1" colspan="4"> <item row="15" column="1" colspan="4">
<widget class="QCheckBox" name="burnFirmware"> <widget class="QCheckBox" name="burnFirmware">
<property name="text"> <property name="text">
<string>Offer to write FW to Tx after download</string> <string>Offer to write FW to Tx after download</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="6"> <item row="15" column="6">
<widget class="QPushButton" name="removeProfileButton"> <widget class="QPushButton" name="removeProfileButton">
<property name="text"> <property name="text">
<string>Remove Profile</string> <string>Remove Profile</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="6"> <item row="3" column="6">
<widget class="QPushButton" name="sdPathButton"> <widget class="QPushButton" name="sdPathButton">
<property name="text"> <property name="text">
<string>Open Folder</string> <string>Open Folder</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="1" colspan="6"> <item row="10" column="1" colspan="6">
<widget class="Line" name="line_6"> <widget class="Line" name="line_6">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1" colspan="3"> <item row="5" column="1" colspan="3">
<widget class="QLineEdit" name="SplashFileName"> <widget class="QLineEdit" name="SplashFileName">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>350</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>350</width>
<height>16777215</height>
</size>
</property>
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -865,55 +879,60 @@ This is used by the templated to determine which channel goes to what number out
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>Firmware</string> <string>Firmware Variant</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" colspan="2"> <item row="1" column="1" colspan="2">
<widget class="QLineEdit" name="firmwareLE"> <widget class="QLineEdit" name="fwTypeLE">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="minimumSize">
<size>
<width>350</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>350</width>
<height>16777215</height>
</size>
</property>
</widget> </widget>
</item> </item>
<item row="4" column="6"> <item row="5" column="6">
<widget class="QPushButton" name="SplashSelect"> <widget class="QPushButton" name="SplashSelect">
<property name="text"> <property name="text">
<string>Select Image</string> <string>Select Image</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="6"> <item row="8" column="6">
<widget class="QPushButton" name="clearImageButton"> <widget class="QPushButton" name="clearImageButton">
<property name="text"> <property name="text">
<string>Clear Image</string> <string>Clear Image</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="6">
<widget class="QLineEdit" name="profileIndexLE">
<property name="enabled">
<bool>false</bool>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="profileNameLE"> <widget class="QLineEdit" name="profileNameLE">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>350</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize">
<size>
<width>350</width>
<height>16777215</height>
</size>
</property>
</widget> </widget>
</item> </item>
<item row="7" column="1"> <item row="8" column="1">
<widget class="QLabel" name="imageLabel"> <widget class="QLabel" name="imageLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum"> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
@ -937,7 +956,10 @@ This is used by the templated to determine which channel goes to what number out
<enum>QFrame::Panel</enum> <enum>QFrame::Panel</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property> </property>
<property name="text"> <property name="text">
<string/> <string/>
@ -947,6 +969,39 @@ This is used by the templated to determine which channel goes to what number out
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1" colspan="6">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Firmware File</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="fwNameLE">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>350</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>350</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>

View file

@ -9,6 +9,7 @@
#include "hexinterface.h" #include "hexinterface.h"
#include "appdata.h" #include "appdata.h"
// Type 1 = Burn EEPROM, Type 2= Burn Flash
burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * backupEE, QString DocName): burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * backupEE, QString DocName):
QDialog(parent), QDialog(parent),
ui(new Ui::burnDialog), ui(new Ui::burnDialog),
@ -17,17 +18,25 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
hexType(Type) hexType(Type)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->libraryButton->setIcon(CompanionIcon("library.png"));
if(!g.profile[g.id()].splashFile().isEmpty()){
imageSource=PROFILE;
imageFile=g.profile[g.id()].splashFile();
}
else{
ui->useProfileImageCB->setDisabled(true);
imageSource=FIRMWARE;
imageFile="";
}
ui->SplashFrame->hide(); ui->SplashFrame->hide();
ui->FramFWInfo->hide(); ui->FramFWInfo->hide();
ui->EEbackupCB->hide(); ui->EEbackupCB->hide();
ui->EEbackupCB->setCheckState(*backup ? Qt::Checked : Qt::Unchecked); ui->EEbackupCB->setCheckState(*backup ? Qt::Checked : Qt::Unchecked);
if (Type == 2) { if (Type == FLASH_FILE_TYPE ) {
ui->EEpromCB->hide(); ui->EEpromCB->hide();
ui->profile_label->hide(); ui->profile_label->hide();
ui->patchcalib_CB->hide(); ui->patchcalib_CB->hide();
ui->patchhw_CB->hide(); ui->patchhw_CB->hide();
ui->InvertColorButton->setDisabled(true);
setWindowTitle(tr("Write firmware to TX")); setWindowTitle(tr("Write firmware to TX"));
if (IS_TARANIS(GetEepromInterface()->getBoard())) { if (IS_TARANIS(GetEepromInterface()->getBoard())) {
ui->EEbackupCB->hide(); ui->EEbackupCB->hide();
@ -39,12 +48,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
ui->patchcalib_CB->hide(); ui->patchcalib_CB->hide();
ui->patchhw_CB->hide(); ui->patchhw_CB->hide();
ui->EEpromCB->hide(); ui->EEpromCB->hide();
ui->ImageLoadButton->setDisabled(true);
ui->libraryButton->setDisabled(true);
ui->InvertColorButton->setDisabled(true);
ui->BurnFlashButton->setDisabled(true); ui->BurnFlashButton->setDisabled(true);
ui->ImageFileName->clear();
ui->FwImage->clear();
ui->FWFileName->clear(); ui->FWFileName->clear();
ui->DateField->clear(); ui->DateField->clear();
ui->SVNField->clear(); ui->SVNField->clear();
@ -63,7 +67,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
} }
if (!hexfileName->isEmpty()) { if (!hexfileName->isEmpty()) {
ui->FWFileName->setText(*hexfileName); ui->FWFileName->setText(*hexfileName);
if (Type==2) { if (Type==FLASH_FILE_TYPE) {
checkFw(*hexfileName); checkFw(*hexfileName);
} }
else { else {
@ -104,14 +108,14 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
ui->FlashLoadButton->hide(); ui->FlashLoadButton->hide();
hexfileName->clear(); hexfileName->clear();
} }
else if (Type==2) { else if (Type==FLASH_FILE_TYPE) {
QString FileName; QString FileName = g.profile[g.id()].fwName();
FileName = g.lastFw();
QFile file(FileName); QFile file(FileName);
if (file.exists()) { if (file.exists()) {
checkFw(FileName); checkFw(FileName);
} }
} }
updateUI();
resize(0, 0); resize(0, 0);
} }
@ -124,12 +128,7 @@ void burnDialog::on_FlashLoadButton_clicked()
{ {
QString fileName; QString fileName;
ui->ImageLoadButton->setDisabled(true);
ui->libraryButton->setDisabled(true);
ui->InvertColorButton->setDisabled(true);
ui->BurnFlashButton->setDisabled(true); ui->BurnFlashButton->setDisabled(true);
ui->ImageFileName->clear();
ui->FwImage->clear();
ui->FWFileName->clear(); ui->FWFileName->clear();
ui->DateField->clear(); ui->DateField->clear();
ui->SVNField->clear(); ui->SVNField->clear();
@ -139,8 +138,10 @@ void burnDialog::on_FlashLoadButton_clicked()
ui->BurnFlashButton->setDisabled(true); ui->BurnFlashButton->setDisabled(true);
ui->EEbackupCB->hide(); ui->EEbackupCB->hide();
QTimer::singleShot(0, this, SLOT(shrink())); QTimer::singleShot(0, this, SLOT(shrink()));
if (hexType==2) { if (hexType==FLASH_FILE_TYPE) {
fileName = QFileDialog::getOpenFileName(this, tr("Open"), g.flashDir(), FLASH_FILES_FILTER); fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER);
if(fileName.isEmpty())
return;
checkFw(fileName); checkFw(fileName);
} }
else { else {
@ -169,6 +170,7 @@ void burnDialog::on_FlashLoadButton_clicked()
QTimer::singleShot(0, this, SLOT(shrink())); QTimer::singleShot(0, this, SLOT(shrink()));
} }
} }
updateUI();
} }
void burnDialog::checkFw(QString fileName) void burnDialog::checkFw(QString fileName)
@ -176,6 +178,7 @@ void burnDialog::checkFw(QString fileName)
if (fileName.isEmpty()) { if (fileName.isEmpty()) {
return; return;
} }
if (!IS_TARANIS(GetEepromInterface()->getBoard())) { if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
ui->EEbackupCB->show(); ui->EEbackupCB->show();
} }
@ -190,59 +193,17 @@ void burnDialog::checkFw(QString fileName)
ui->DateField->setText(flash.getDate() + " " + flash.getTime()); ui->DateField->setText(flash.getDate() + " " + flash.getTime());
ui->SVNField->setText(flash.getSvn()); ui->SVNField->setText(flash.getSvn());
ui->ModField->setText(flash.getBuild()); ui->ModField->setText(flash.getBuild());
ui->BurnFlashButton->setEnabled(true);
ui->BurnFlashButton->setText(tr("Write to TX")); ui->SplashFrame->hide();
if (flash.hasSplash()) { if (flash.hasSplash()) {
ui->SplashFrame->show(); ui->SplashFrame->show();
ui->ImageLoadButton->setEnabled(true);
ui->libraryButton->setEnabled(true);
ui->FwImage->setFixedSize(flash.getSplashWidth(), flash.getSplashHeight());
ui->imageLabel->setFixedSize(flash.getSplashWidth(), flash.getSplashHeight()); ui->imageLabel->setFixedSize(flash.getSplashWidth(), flash.getSplashHeight());
ui->FwImage->show();
ui->FwImage->setPixmap(QPixmap::fromImage(flash.getSplash()));
QString ImageStr = g.profile[g.id()].splashFile();
bool PatchFwCB = g.profile[g.id()].patchImage();
if (!ImageStr.isEmpty()) {
QImage Image = qstring2image(ImageStr);
ui->imageLabel->setPixmap(QPixmap::fromImage(Image.convertToFormat(flash.getSplashFormat())));
ui->InvertColorButton->setEnabled(true);
ui->PreferredImageCB->setChecked(true);
ui->PatchFWCB->setChecked(PatchFwCB);
}
else {
QString fileName=ui->ImageFileName->text();
if (!fileName.isEmpty()) {
QImage image(fileName);
if (!image.isNull()) {
ui->InvertColorButton->setEnabled(true);
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(flash.getSplashFormat())));
ui->PatchFWCB->setEnabled(true);
ui->PatchFWCB->setChecked(PatchFwCB);
}
else {
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
ui->PreferredImageCB->setDisabled(true);
}
}
else {
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
ui->PreferredImageCB->setDisabled(true);
}
}
}
else {
ui->FwImage->hide();
ui->ImageFileName->setText("");
ui->SplashFrame->hide();
} }
} }
else { else {
QMessageBox::warning(this, tr("Warning"), tr("%1 is not a known firmware").arg(fileName)); QMessageBox::warning(this, tr("Warning"), tr("%1 may not be a valid firmware file").arg(fileName));
ui->BurnFlashButton->setText(tr("Burn anyway !"));
ui->BurnFlashButton->setEnabled(true);
} }
ui->BurnFlashButton->setEnabled(true);
QTimer::singleShot(0, this, SLOT(shrink())); QTimer::singleShot(0, this, SLOT(shrink()));
g.flashDir( QFileInfo(fileName).dir().absolutePath() ); g.flashDir( QFileInfo(fileName).dir().absolutePath() );
} }
@ -337,51 +298,92 @@ bool burnDialog::checkeEprom(QString fileName)
return true; return true;
} }
void burnDialog::on_ImageLoadButton_clicked() void burnDialog::displaySplash()
{
QImage image;
if (imageSource == FIRMWARE){
FlashInterface flash(ui->FWFileName->text());
image = flash.getSplash();
}
else{
image.load(imageFile);
}
if (image.isNull()) {
return;
}
ui->imageLabel->setPixmap( makePixMap( image, g.profile[g.id()].fwType()));
}
void burnDialog::updateUI()
{
if (hexType==EEPROM_FILE_TYPE)
return;
ui->useProfileImageCB->setChecked( imageSource == PROFILE );
ui->useFwImageCB->setChecked( imageSource == FIRMWARE );
ui->useLibraryImageCB->setChecked( imageSource == LIBRARY );
ui->useAnotherImageCB->setChecked( imageSource == ANOTHER );
displaySplash();
}
void burnDialog::on_useFwImageCB_clicked()
{
QString fileName = ui->FWFileName->text();
FlashInterface flash(fileName);
if (!flash.isValid()) {
QMessageBox::critical(this, tr("Error"), tr( "The firmware file is not valid." ));
}
else {
if (!flash.hasSplash()) {
QMessageBox::critical(this, tr("Error"), tr( "There is no start screen image in the firmware file." ));
}
else{
imageSource = FIRMWARE;
imageFile = fileName;
}
}
updateUI();
}
void burnDialog::on_useProfileImageCB_clicked()
{
QString fileName = g.profile[g.id()].splashFile();
if (!fileName.isEmpty()){
QImage image(fileName);
if (image.isNull()) {
QMessageBox::critical(this, tr("Error"), tr("The profile image %1 does not contain an image.").arg(fileName));
}
else {
imageSource = PROFILE;
imageFile = fileName;
}
}
updateUI();
}
void burnDialog::on_useAnotherImageCB_clicked()
{ {
QString supportedImageFormats; QString supportedImageFormats;
for (int formatIndex = 0; formatIndex < QImageReader::supportedImageFormats().count(); formatIndex++) { for (int formatIndex = 0; formatIndex < QImageReader::supportedImageFormats().count(); formatIndex++) {
supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex]; supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex];
} }
QString fileName = QFileDialog::getOpenFileName(this, tr("Open image file to use as Tx start screen"), g.imagesDir(), tr("Images (%1)").arg(supportedImageFormats));
QString fileName = QFileDialog::getOpenFileName(this, if (!fileName.isEmpty()){
tr("Open Image to load"), g.imagesDir(), tr("Images (%1)").arg(supportedImageFormats));
if (!fileName.isEmpty()) {
g.imagesDir( QFileInfo(fileName).dir().absolutePath() ); g.imagesDir( QFileInfo(fileName).dir().absolutePath() );
QImage image(fileName); QImage image(fileName);
if (image.isNull()) { if (image.isNull()) {
QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); QMessageBox::critical(this, tr("Error"), tr("Image could not be loaded from %1").arg(fileName));
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
ui->InvertColorButton->setDisabled(true);
return;
} }
ui->ImageFileName->setText(fileName); else{
ui->InvertColorButton->setEnabled(true); imageSource = ANOTHER;
if (ui->imageLabel->width()!=128) { imageFile = fileName;
image=image.convertToFormat(QImage::Format_RGB32); }
QRgb col;
int gray;
int width = image.width();
int height = image.height();
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
col = image.pixel(i, j);
gray = qGray(col);
image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height())));
}
else {
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono)));
}
ui->PatchFWCB->setEnabled(true);
} }
updateUI();
} }
void burnDialog::on_libraryButton_clicked() void burnDialog::on_useLibraryImageCB_clicked()
{ {
QString fileName; QString fileName;
splashLibrary *ld = new splashLibrary(this,&fileName); splashLibrary *ld = new splashLibrary(this,&fileName);
@ -389,49 +391,26 @@ void burnDialog::on_libraryButton_clicked()
if (!fileName.isEmpty()) { if (!fileName.isEmpty()) {
QImage image(fileName); QImage image(fileName);
if (image.isNull()) { if (image.isNull()) {
QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); QMessageBox::critical(this, tr("Error"), tr("The library image could not be loaded"));
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
ui->InvertColorButton->setDisabled(true);
return;
} }
ui->ImageFileName->setText(fileName); else{
ui->InvertColorButton->setEnabled(true); imageSource = LIBRARY;
if (ui->imageLabel->width()!=128) { imageFile = fileName;
image=image.convertToFormat(QImage::Format_RGB32);
QRgb col;
int gray;
int width = image.width();
int height = image.height();
for (int i = 0; i < width; ++i)
{
for (int j = 0; j < height; ++j)
{
col = image.pixel(i, j);
gray = qGray(col);
image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height())));
} else {
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono)));
} }
ui->PatchFWCB->setEnabled(true);
} }
updateUI();
} }
void burnDialog::on_BurnFlashButton_clicked() void burnDialog::on_BurnFlashButton_clicked()
{ {
if (hexType==2) { if (hexType==FLASH_FILE_TYPE) {
QString fileName=ui->FWFileName->text(); QString fileName=ui->FWFileName->text();
if (!fileName.isEmpty()) { if (!fileName.isEmpty()) {
g.flashDir( QFileInfo(fileName).dir().absolutePath() ); g.flashDir( QFileInfo(fileName).dir().absolutePath() );
g.lastFw( fileName ); if (!ui->useFwImageCB->isChecked()) {
if (ui->PatchFWCB->isChecked()) {
g.profile[g.id()].patchImage( true );
QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width(), ui->imageLabel->height()); QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width(), ui->imageLabel->height());
if (!image.isNull()) { if (!image.isNull()) {
QString tempDir = QDir::tempPath(); QString tempDir = QDir::tempPath();
QString tempFile; QString tempFile;
if (getFileType(fileName) == FILE_TYPE_HEX) if (getFileType(fileName) == FILE_TYPE_HEX)
tempFile = tempDir + "/flash.hex"; tempFile = tempDir + "/flash.hex";
@ -451,7 +430,6 @@ void burnDialog::on_BurnFlashButton_clicked()
QMessageBox::critical(this, tr("Warning"), tr("Custom image not found")); QMessageBox::critical(this, tr("Warning"), tr("Custom image not found"));
} }
} else { } else {
g.profile[g.id()].patchImage( false );
hexfileName->clear(); hexfileName->clear();
hexfileName->append(fileName); hexfileName->append(fileName);
} }
@ -460,7 +438,7 @@ void burnDialog::on_BurnFlashButton_clicked()
hexfileName->clear(); hexfileName->clear();
} }
} }
if (hexType==1) { if (hexType==EEPROM_FILE_TYPE) {
QString calib = g.profile[g.id()].stickPotCalib(); QString calib = g.profile[g.id()].stickPotCalib();
QString trainercalib = g.profile[g.id()].trainerCalib(); QString trainercalib = g.profile[g.id()].trainerCalib();
int potsnum=GetEepromInterface()->getCapability(Pots); int potsnum=GetEepromInterface()->getCapability(Pots);
@ -609,98 +587,9 @@ void burnDialog::on_cancelButton_clicked()
this->close(); this->close();
} }
void burnDialog::on_InvertColorButton_clicked()
{
if (ui->imageLabel->pixmap()) {
QImage image = ui->imageLabel->pixmap()->toImage();
image.invertPixels();
ui->imageLabel->setPixmap(QPixmap::fromImage(image));
}
}
void burnDialog::on_EEpromCB_toggled(bool checked) void burnDialog::on_EEpromCB_toggled(bool checked)
{ {
if (ui->EEpromCB->isChecked()) { *backup = ui->EEpromCB->isChecked();
*backup=true;
} else {
*backup=false;
}
}
void burnDialog::on_PreferredImageCB_toggled(bool checked)
{
QString tmpFileName;
if (checked) {
QString ImageStr = g.profile[g.id()].splashFile();
if (!ImageStr.isEmpty()) {
QImage Image = qstring2image(ImageStr);
if (ui->imageLabel->width()!=128) {
Image=Image.convertToFormat(QImage::Format_RGB32);
QRgb col;
int gray;
int width = Image.width();
int height = Image.height();
for (int i = 0; i < width; ++i)
{
for (int j = 0; j < height; ++j)
{
col = Image.pixel(i, j);
gray = qGray(col);
Image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
} else {
Image=Image.convertToFormat(QImage::Format_Mono);
}
ui->imageLabel->setPixmap(QPixmap::fromImage(Image));
ui->InvertColorButton->setEnabled(true);
ui->PreferredImageCB->setChecked(true);
ui->ImageFileName->setDisabled(true);
ui->ImageLoadButton->setDisabled(true);
ui->libraryButton->setDisabled(true);
ui->PatchFWCB->setEnabled(true);
}
} else {
ui->imageLabel->clear();
ui->ImageLoadButton->setEnabled(true);
ui->libraryButton->setEnabled(true);
tmpFileName = ui->ImageFileName->text();
if (!tmpFileName.isEmpty()) {
QImage image(tmpFileName);
if (!image.isNull()) {
if (ui->imageLabel->width()!=128) {
image=image.convertToFormat(QImage::Format_RGB32);
QRgb col;
int gray;
int width = image.width();
int height = image.height();
for (int i = 0; i < width; ++i)
{
for (int j = 0; j < height; ++j)
{
col = image.pixel(i, j);
gray = qGray(col);
image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
} else {
image=image.convertToFormat(QImage::Format_Mono);
}
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height())));
ui->InvertColorButton->setEnabled(true);
ui->ImageFileName->setEnabled(true);
ui->PatchFWCB->setDisabled(false);
} else {
ui->InvertColorButton->setDisabled(true);
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
}
} else {
ui->InvertColorButton->setDisabled(true);
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
}
}
} }
void burnDialog::shrink() void burnDialog::shrink()
@ -710,9 +599,5 @@ void burnDialog::shrink()
void burnDialog::on_EEbackupCB_clicked() void burnDialog::on_EEbackupCB_clicked()
{ {
if (ui->EEbackupCB->isChecked()) { *backup = ui->EEbackupCB->isChecked();
*backup=true;
} else {
*backup=false;
}
} }

View file

@ -19,6 +19,8 @@
#define ER9X_EEPROM_FILE_TYPE "ER9X_EEPROM_FILE" #define ER9X_EEPROM_FILE_TYPE "ER9X_EEPROM_FILE"
#define EEPE_EEPROM_FILE_HEADER "EEPE EEPROM FILE" #define EEPE_EEPROM_FILE_HEADER "EEPE EEPROM FILE"
#define EEPE_MODEL_FILE_HEADER "EEPE MODEL FILE" #define EEPE_MODEL_FILE_HEADER "EEPE MODEL FILE"
#define EEPROM_FILE_TYPE 1
#define FLASH_FILE_TYPE 2
namespace Ui namespace Ui
@ -36,18 +38,22 @@ public:
private slots: private slots:
void on_FlashLoadButton_clicked(); void on_FlashLoadButton_clicked();
void on_ImageLoadButton_clicked();
void on_libraryButton_clicked();
void on_BurnFlashButton_clicked(); void on_BurnFlashButton_clicked();
void on_cancelButton_clicked(); void on_cancelButton_clicked();
void on_InvertColorButton_clicked();
void on_EEbackupCB_clicked(); void on_EEbackupCB_clicked();
void on_PreferredImageCB_toggled(bool checked); void on_EEpromCB_toggled(bool checked);
void on_EEpromCB_toggled(bool checked);
void checkFw(QString fileName);
bool checkeEprom(QString fileName); bool checkeEprom(QString fileName);
void on_useProfileImageCB_clicked();
void on_useFwImageCB_clicked();
void on_useLibraryImageCB_clicked();
void on_useAnotherImageCB_clicked();
void checkFw(QString fileName);
void displaySplash();
void updateUI();
void shrink(); void shrink();
private: private:
Ui::burnDialog *ui; Ui::burnDialog *ui;
QString * hexfileName; QString * hexfileName;
@ -55,6 +61,9 @@ private:
int hexType; int hexType;
RadioData radioData; RadioData radioData;
bool burnraw; bool burnraw;
enum ImageSource {FIRMWARE, PROFILE, LIBRARY, ANOTHER};
ImageSource imageSource;
QString imageFile;
}; };
#endif // BURNDIALOG_H #endif // BURNDIALOG_H

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>440</width> <width>440</width>
<height>418</height> <height>423</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -30,21 +30,8 @@
<normaloff>:/icon.png</normaloff>:/icon.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="1" column="0"> <item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<spacer name="hs2"> <spacer name="hs2">
<property name="orientation"> <property name="orientation">
@ -71,19 +58,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<widget class="QPushButton" name="BurnFlashButton"> <widget class="QPushButton" name="BurnFlashButton">
<property name="enabled"> <property name="enabled">
@ -100,19 +74,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="hs2_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>48</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</item> </item>
<item row="0" column="0"> <item row="0" column="0">
@ -152,56 +113,22 @@
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<layout class="QGridLayout" name="gridLayout_5"> <layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="2" rowspan="3"> <item row="1" column="1">
<widget class="QLabel" name="FwImage"> <widget class="QLineEdit" name="SVNField">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>128</width>
<height>64</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>212</width>
<height>64</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string/>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="DateField">
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="2" column="0">
<widget class="QLabel" name="dateLabel"> <widget class="QLabel" name="buildLabel">
<property name="text"> <property name="text">
<string>Date &amp; Time</string> <string>Variant</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="2" column="1">
<widget class="QLineEdit" name="SVNField"> <widget class="QLineEdit" name="ModField">
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -214,17 +141,17 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="0" column="0">
<widget class="QLineEdit" name="ModField"> <widget class="QLabel" name="dateLabel">
<property name="readOnly"> <property name="text">
<bool>true</bool> <string>Date &amp; Time</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="0" column="1">
<widget class="QLabel" name="buildLabel"> <widget class="QLineEdit" name="DateField">
<property name="text"> <property name="readOnly">
<string>Variant</string> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
@ -325,17 +252,10 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QGridLayout" name="SplashLayout" rowstretch="0,0,0,1"> <layout class="QGridLayout" name="SplashLayout" rowstretch="0,0,0,0,0,0,0">
<item row="0" column="1" rowspan="4"> <item row="0" column="1" rowspan="7">
<layout class="QGridLayout" name="gridLayout_2" rowstretch="1,0"> <layout class="QGridLayout" name="gridLayout_2" rowstretch="1">
<item row="1" column="0"> <item row="0" column="1">
<widget class="QPushButton" name="InvertColorButton">
<property name="text">
<string>Invert Color</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="imageLabel"> <widget class="QLabel" name="imageLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum"> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
@ -359,7 +279,7 @@
<enum>QFrame::Panel</enum> <enum>QFrame::Panel</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Plain</enum>
</property> </property>
<property name="text"> <property name="text">
<string/> <string/>
@ -369,10 +289,50 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QCheckBox" name="PreferredImageCB"> <widget class="QCheckBox" name="useFwImageCB">
<property name="text">
<string>Use firmware start screen</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="useAnotherImageCB">
<property name="text">
<string>Use another start screen</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="useProfileImageCB">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -380,86 +340,14 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>Use image in settings</string> <string>Use profile start screen</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="PatchFWCB">
<property name="text">
<string>Substitute image in firmware</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<spacer name="verticalSpacer_3"> <widget class="QCheckBox" name="useLibraryImageCB">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>13</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>13</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLineEdit" name="ImageFileName">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ImageLoadButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text"> <property name="text">
<string>Load Image</string> <string>Use library start screen</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="libraryButton">
<property name="toolTip">
<string>Open Splash Library</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property> </property>
</widget> </widget>
</item> </item>
@ -470,18 +358,37 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<tabstops> <tabstops>
<tabstop>BurnFlashButton</tabstop>
<tabstop>FWFileName</tabstop> <tabstop>FWFileName</tabstop>
<tabstop>FlashLoadButton</tabstop> <tabstop>FlashLoadButton</tabstop>
<tabstop>ImageFileName</tabstop> <tabstop>DateField</tabstop>
<tabstop>ImageLoadButton</tabstop> <tabstop>SVNField</tabstop>
<tabstop>libraryButton</tabstop> <tabstop>ModField</tabstop>
<tabstop>useProfileImageCB</tabstop>
<tabstop>useFwImageCB</tabstop>
<tabstop>useLibraryImageCB</tabstop>
<tabstop>useAnotherImageCB</tabstop>
<tabstop>EEbackupCB</tabstop> <tabstop>EEbackupCB</tabstop>
<tabstop>patchcalib_CB</tabstop>
<tabstop>patchhw_CB</tabstop>
<tabstop>EEpromCB</tabstop> <tabstop>EEpromCB</tabstop>
<tabstop>cancelButton</tabstop> <tabstop>cancelButton</tabstop>
<tabstop>BurnFlashButton</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="companion.qrc"/> <include location="companion.qrc"/>

View file

@ -95,15 +95,18 @@ int main(int argc, char *argv[])
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
if (g.profile[g.id()].firmware().isEmpty()) if (g.profile[g.id()].fwType().isEmpty()){
g.profile[g.id()].firmware(default_firmware_variant.id); g.profile[g.id()].fwType(default_firmware_variant.id);
g.profile[g.id()].fwName("");
}
QPixmap pixmap = QPixmap(g.profile[g.id()].firmware().contains("taranis") ? ":/images/splasht.png" : ":/images/splash.png"); QPixmap pixmap = QPixmap(g.profile[g.id()].fwType().contains("taranis") ? ":/images/splasht.png" : ":/images/splash.png");
QSplashScreen *splash = new QSplashScreen(pixmap); QSplashScreen *splash = new QSplashScreen(pixmap);
RegisterFirmwares(); RegisterFirmwares();
current_firmware_variant = GetFirmwareVariant(g.profile[g.id()].firmware()); current_firmware_variant = GetFirmwareVariant(g.profile[g.id()].fwType());
MainWindow *mainWin = new MainWindow(); MainWindow *mainWin = new MainWindow();
if (g.showSplash()) { if (g.showSplash()) {

View file

@ -168,131 +168,57 @@
<file>images/library/00009.png</file> <file>images/library/00009.png</file>
<file>images/library/00010.png</file> <file>images/library/00010.png</file>
<file>images/library/00011.png</file> <file>images/library/00011.png</file>
<file>images/library/00012.png</file>
<file>images/library/00013.png</file> <file>images/library/00013.png</file>
<file>images/library/00014.png</file> <file>images/library/00014.png</file>
<file>images/library/00015.png</file> <file>images/library/00015.png</file>
<file>images/library/00016.png</file> <file>images/library/00016.png</file>
<file>images/library/01001.png</file> <file>images/library/00017.png</file>
<file>images/library/01002.png</file> <file>images/library/00018.png</file>
<file>images/library/01003.png</file> <file>images/library/00019.png</file>
<file>images/library/01004.png</file> <file>images/library/00020.png</file>
<file>images/library/01005.png</file> <file>images/library/00021.png</file>
<file>images/library/01006.png</file> <file>images/library/00022.png</file>
<file>images/library/01007.png</file> <file>images/library/00023.png</file>
<file>images/library/01008.png</file> <file>images/library/00024.png</file>
<file>images/library/00051.png</file>
<file>images/library/00100.png</file>
<file>images/library/00101.png</file>
<file>images/library/00102.png</file>
<file>images/library/00103.png</file>
<file>images/library/00104.png</file>
<file>images/library/00105.png</file>
<file>images/library/00106.png</file>
<file>images/library/00201.png</file>
<file>images/library/00202.png</file>
<file>images/library/00203.png</file>
<file>images/library/00204.png</file>
<file>images/library/00301.png</file>
<file>images/library/00302.png</file>
<file>images/library/00303.png</file>
<file>images/library/00304.png</file>
<file>images/library/00401.png</file>
<file>images/library/00402.png</file>
<file>images/library/00403.png</file>
<file>images/library/00404.png</file>
<file>images/library/00501.png</file>
<file>images/library/10001.png</file> <file>images/library/10001.png</file>
<file>images/library/10002.png</file> <file>images/library/10002.png</file>
<file>images/library/10003.png</file> <file>images/library/10003.png</file>
<file>images/library/10004.png</file>
<file>images/library/10005.png</file>
<file>images/library/10006.png</file>
<file>images/library/10007.png</file>
<file>images/library/10008.png</file>
<file>images/library/10009.png</file>
<file>images/library/10010.png</file>
<file>images/library/10011.png</file>
<file>images/library/10012.png</file>
<file>images/library/10013.png</file>
<file>images/library/10014.png</file>
<file>images/library/10015.png</file>
<file>images/library/10016.png</file>
<file>images/library/10017.png</file>
<file>images/library/10018.png</file>
<file>images/library/10019.png</file>
<file>images/library/10020.png</file>
<file>images/library/10021.png</file>
<file>images/library/10022.png</file>
<file>images/library/10023.png</file>
<file>images/library/10024.png</file>
<file>images/library/10033.png</file>
<file>images/library/10034.png</file>
<file>images/library/10035.png</file>
<file>images/library/10036.png</file>
<file>images/library/10049.png</file>
<file>images/library/10050.png</file>
<file>images/library/10051.png</file>
<file>images/library/10052.png</file>
<file>images/library/10037.png</file>
<file>images/library/10038.png</file>
<file>images/library/10039.png</file>
<file>images/library/10040.png</file>
<file>images/library/10053.png</file>
<file>images/library/10054.png</file>
<file>images/library/10055.png</file>
<file>images/library/10056.png</file>
<file>images/library/10025.png</file>
<file>images/library/10026.png</file>
<file>images/library/10027.png</file>
<file>images/library/10028.png</file>
<file>images/library/10029.png</file>
<file>images/library/10030.png</file>
<file>images/library/10031.png</file>
<file>images/library/10032.png</file>
<file>images/library/10041.png</file>
<file>images/library/10042.png</file>
<file>images/library/10043.png</file>
<file>images/library/10044.png</file>
<file>images/library/10057.png</file>
<file>images/library/10058.png</file>
<file>images/library/10059.png</file>
<file>images/library/10060.png</file>
<file>images/library/10045.png</file>
<file>images/library/10046.png</file>
<file>images/library/10047.png</file>
<file>images/library/10048.png</file>
<file>images/library/10061.png</file>
<file>images/library/10062.png</file>
<file>images/library/10063.png</file>
<file>images/library/10064.png</file>
<file>images/library/10065.png</file>
<file>images/library/10066.png</file>
<file>images/library/10067.png</file>
<file>images/library/10068.png</file>
<file>images/library/10081.png</file>
<file>images/library/10082.png</file>
<file>images/library/10083.png</file>
<file>images/library/10084.png</file>
<file>images/library/10069.png</file>
<file>images/library/10070.png</file>
<file>images/library/10071.png</file>
<file>images/library/10072.png</file>
<file>images/library/10085.png</file>
<file>images/library/10086.png</file>
<file>images/library/10087.png</file>
<file>images/library/10088.png</file>
<file>images/library/10073.png</file>
<file>images/library/10074.png</file>
<file>images/library/10075.png</file>
<file>images/library/10076.png</file>
<file>images/library/10089.png</file>
<file>images/library/10090.png</file>
<file>images/library/10091.png</file>
<file>images/library/10092.png</file>
<file>images/library/10077.png</file>
<file>images/library/10078.png</file>
<file>images/library/10079.png</file>
<file>images/library/10080.png</file>
<file>images/library/10093.png</file>
<file>images/library/10094.png</file>
<file>images/library/10095.png</file>
<file>images/library/10096.png</file>
<file>images/library/10097.png</file>
<file>images/library/10098.png</file>
<file>images/library/10099.png</file>
<file>images/library/10100.png</file>
<file>images/library/10101.png</file> <file>images/library/10101.png</file>
<file>images/library/10102.png</file> <file>images/library/10102.png</file>
<file>images/library/10103.png</file> <file>images/library/10103.png</file>
<file>images/library/10104.png</file> <file>images/library/10501.png</file>
<file>images/library/20001.png</file> <file>images/library/10502.png</file>
<file>images/library/20002.png</file> <file>images/library/10503.png</file>
<file>images/library/20003.png</file> <file>images/library/10504.png</file>
<file>images/library/20004.png</file> <file>images/library/10505.png</file>
<file>images/library/30001.png</file> <file>images/library/10506.png</file>
<file>images/library/30002.png</file> <file>images/library/10508.png</file>
<file>images/library/30003.png</file> <file>images/library/10601.png</file>
<file>images/library/30004.png</file> <file>images/library/10701.png</file>
<file>images/library/10702.png</file>
<file>images/library/10801.png</file>
<file>images/library/10802.png</file>
<file>themes/monochrome/16/paintbrush.png</file> <file>themes/monochrome/16/paintbrush.png</file>
<file>themes/monochrome/16/open.png</file> <file>themes/monochrome/16/open.png</file>
<file>themes/monochrome/16/edit.png</file> <file>themes/monochrome/16/edit.png</file>

View file

@ -14,11 +14,21 @@ Side::Side(){
imageLabel = 0; imageLabel = 0;
fileNameEdit = 0; fileNameEdit = 0;
saveButton = 0; saveButton = 0;
loadFwButton=0;
loadPictButton = 0;
loadProfileButton = 0;
saveToFileName = new QString(""); saveToFileName = new QString("");
source = new Source(UNDEFINED); source = new Source(UNDEFINED);
format = new LCDFormat(LCDTARANIS); format = new LCDFormat(LCDTARANIS);
} }
void Side::markSourceButton()
{
loadFwButton->setChecked(*source == FW ? true : false );
loadPictButton->setChecked(*source == PICT ? true : false );
loadProfileButton->setChecked(*source == PROFILE ? true : false );
}
void Side::copyImage( Side side ) void Side::copyImage( Side side )
{ {
if ((*source!=UNDEFINED) && (*side.source!=UNDEFINED)) if ((*source!=UNDEFINED) && (*side.source!=UNDEFINED))
@ -31,7 +41,7 @@ bool Side::displayImage( QString fileName, Source pictSource )
if (fileName.isEmpty()) if (fileName.isEmpty())
return false; return false;
// Determine which picture format to use // Determine which picture format to use
if (pictSource == FW ){ if (pictSource == FW ){
FlashInterface flash(fileName); FlashInterface flash(fileName);
@ -39,60 +49,46 @@ bool Side::displayImage( QString fileName, Source pictSource )
return false; return false;
else else
image = flash.getSplash(); image = flash.getSplash();
*format = (flash.getSplashWidth()==WIDTH_TARANIS ? LCDTARANIS : LCD9X); *format = (flash.getSplashWidth()==WIDTH_TARANIS ? LCDTARANIS : LCD9X);
} }
else { else {
image.load(fileName); image.load(fileName);
if (pictSource== PICT) if (pictSource== PICT)
*format = image.width()>WIDTH_9X ? LCDTARANIS : LCD9X; *format = image.width()>WIDTH_9X ? LCDTARANIS : LCD9X;
else if (pictSource == PROFILE) else if (pictSource == PROFILE)
*format = (g.profile[g.id()].firmware().contains("taranis")) ? LCDTARANIS : LCD9X; *format = (g.profile[g.id()].fwType().contains("taranis")) ? LCDTARANIS : LCD9X;
} }
if (image.isNull()) { if (image.isNull()) {
return false; return false;
} }
// Prepare and display image // Load image
if (*format==LCDTARANIS) { if (*format==LCDTARANIS) {
image=image.convertToFormat(QImage::Format_RGB32); imageLabel->setPixmap( makePixMap( image, "taranis" ));
QRgb col; imageLabel->setFixedSize(WIDTH_TARANIS*2, HEIGHT_TARANIS*2);
int gray;
int width = image.width();
int height = image.height();
for (int i = 0; i < width; ++i) {
for (int j = 0; j < height; ++j) {
col = image.pixel(i, j);
gray = qGray(col);
image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
imageLabel->setPixmap(QPixmap::fromImage(image.scaled(imageLabel->width()/2, imageLabel->height()/2)));
} }
else else {
imageLabel->setPixmap(QPixmap::fromImage(image.scaled(imageLabel->width()/2, imageLabel->height()/2).convertToFormat(QImage::Format_Mono))); imageLabel->setPixmap( makePixMap( image, "9x" ));
imageLabel->setFixedSize(WIDTH_9X*2, HEIGHT_9X*2);
if (*format == LCD9X) }
imageLabel->setFixedSize(WIDTH_9X*2, HEIGHT_9X*2);
else
imageLabel->setFixedSize(WIDTH_TARANIS*2, HEIGHT_TARANIS*2);
switch (pictSource){ switch (pictSource){
case FW: case FW:
fileNameEdit->setText(QObject::tr("FW: %1").arg(fileName)); fileNameEdit->setText(QObject::tr("FW: %1").arg(fileName));
*saveToFileName = fileName; *saveToFileName = fileName;
*source=FW; *source=FW;
break; break;
case PICT: case PICT:
fileNameEdit->setText(QObject::tr("Pict: %1").arg(fileName)); fileNameEdit->setText(QObject::tr("Pict: %1").arg(fileName));
*saveToFileName = fileName; *saveToFileName = fileName;
*source=PICT; *source=PICT;
break; break;
case PROFILE: case PROFILE:
fileNameEdit->setText(QObject::tr("Profile image")); fileNameEdit->setText(QObject::tr("Profile image"));
*saveToFileName = fileName; *saveToFileName = fileName;
*source=PROFILE; *source=PROFILE;
break; break;
default: default:
break; break;
} }
saveButton->setEnabled(true); saveButton->setEnabled(true);
libraryButton->setEnabled(true); libraryButton->setEnabled(true);
@ -160,8 +156,17 @@ customizeSplashDialog::customizeSplashDialog(QWidget *parent) :
right.libraryButton = ui->rightLibraryButton; right.libraryButton = ui->rightLibraryButton;
left.invertButton = ui->leftInvertButton; left.invertButton = ui->leftInvertButton;
right.invertButton = ui->rightInvertButton; right.invertButton = ui->rightInvertButton;
left.loadFwButton = ui->leftLoadFwButton;
right.loadFwButton = ui->rightLoadFwButton;
left.loadPictButton = ui->leftLoadPictButton;
right.loadPictButton = ui->rightLoadPictButton;
left.loadProfileButton = ui->leftLoadProfileButton;
right.loadProfileButton = ui->rightLoadProfileButton;
loadProfile(left); loadProfile(left);
left.markSourceButton();
resize(0,0); resize(0,0);
} }
@ -182,13 +187,14 @@ void customizeSplashDialog::on_leftLoadFwButton_clicked() {loadFirmware(left);}
void customizeSplashDialog::on_rightLoadFwButton_clicked() {loadFirmware(right);} void customizeSplashDialog::on_rightLoadFwButton_clicked() {loadFirmware(right);}
void customizeSplashDialog::loadFirmware(Side side) void customizeSplashDialog::loadFirmware(Side side)
{ {
QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), g.flashDir(), FLASH_FILES_FILTER); QString fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER);
if (!fileName.isEmpty()) { if (!fileName.isEmpty()) {
if (!side.displayImage( fileName, FW )) if (!side.displayImage( fileName, FW ))
QMessageBox::critical(this, tr("Error"), tr("Cannot load embedded FW image from %1.").arg(fileName)); QMessageBox::critical(this, tr("Error"), tr("Can not load embedded image from firmware file %1.").arg(fileName));
else else
g.flashDir( QFileInfo(fileName).dir().absolutePath() ); g.flashDir( QFileInfo(fileName).dir().absolutePath() );
} }
side.markSourceButton();
} }
void customizeSplashDialog::on_leftLoadPictButton_clicked() {loadPicture(left);} void customizeSplashDialog::on_leftLoadPictButton_clicked() {loadPicture(left);}
@ -208,6 +214,7 @@ void customizeSplashDialog::loadPicture(Side side)
else else
g.imagesDir( QFileInfo(fileName).dir().absolutePath() ); g.imagesDir( QFileInfo(fileName).dir().absolutePath() );
} }
side.markSourceButton();
} }
void customizeSplashDialog::on_leftLoadProfileButton_clicked() {loadProfile(left);} void customizeSplashDialog::on_leftLoadProfileButton_clicked() {loadProfile(left);}
@ -220,6 +227,7 @@ void customizeSplashDialog::loadProfile(Side side)
if (!side.displayImage( fileName, PROFILE )) if (!side.displayImage( fileName, PROFILE ))
QMessageBox::critical(this, tr("Error"), tr("Cannot load the profile image %1.").arg(fileName)); QMessageBox::critical(this, tr("Error"), tr("Cannot load the profile image %1.").arg(fileName));
} }
side.markSourceButton();
} }
void customizeSplashDialog::on_leftLibraryButton_clicked(){libraryButton_clicked(left);} void customizeSplashDialog::on_leftLibraryButton_clicked(){libraryButton_clicked(left);}

View file

@ -22,6 +22,7 @@ class Side
{ {
public: public:
Side(); Side();
void markSourceButton();
void copyImage( Side ); void copyImage( Side );
bool displayImage( QString fileName, Source source ); bool displayImage( QString fileName, Source source );
bool saveImage(); bool saveImage();
@ -32,6 +33,9 @@ public:
QPushButton *saveButton; QPushButton *saveButton;
QPushButton *invertButton; QPushButton *invertButton;
QToolButton *libraryButton; QToolButton *libraryButton;
QPushButton *loadFwButton;
QPushButton *loadPictButton;
QPushButton *loadProfileButton;
QString *saveToFileName; QString *saveToFileName;

View file

@ -258,6 +258,9 @@
<property name="text"> <property name="text">
<string>Load Profile</string> <string>Load Profile</string>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -265,6 +268,9 @@
<property name="text"> <property name="text">
<string>Load FW</string> <string>Load FW</string>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -272,6 +278,9 @@
<property name="text"> <property name="text">
<string>Load Pict</string> <string>Load Pict</string>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -554,6 +563,9 @@
<property name="text"> <property name="text">
<string>Load Profile</string> <string>Load Profile</string>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -564,6 +576,9 @@
<property name="text"> <property name="text">
<string>Load FW</string> <string>Load FW</string>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@ -571,6 +586,9 @@
<property name="text"> <property name="text">
<string>Load Pict</string> <string>Load Pict</string>
</property> </property>
<property name="checkable">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>

View file

@ -896,7 +896,12 @@ class ExpoField: public TransformedField {
virtual void afterImport() virtual void afterImport()
{ {
expo.weight = smallGvarToC9x(_weight); if (IS_TARANIS(board) && version < 216) {
expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn);
}
expo.weight = smallGvarToC9x(_weight);
if (!IS_TARANIS(board) || version < 216) { if (!IS_TARANIS(board) || version < 216) {
if (!_curveMode) if (!_curveMode)
expo.curve = CurveReference(CurveReference::CURVE_REF_EXPO, smallGvarToC9x(_curveParam)); expo.curve = CurveReference(CurveReference::CURVE_REF_EXPO, smallGvarToC9x(_curveParam));

View file

@ -213,7 +213,7 @@ void fwPreferencesDialog::writeValues()
{ {
g.cpuId( ui->CPU_ID_LE->text() ); g.cpuId( ui->CPU_ID_LE->text() );
current_firmware_variant = getFirmwareVariant(); current_firmware_variant = getFirmwareVariant();
g.profile[g.id()].firmware( current_firmware_variant.id ); g.profile[g.id()].fwType( current_firmware_variant.id );
} }
void fwPreferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware) void fwPreferencesDialog::populateFirmwareOptions(const FirmwareInfo * firmware)
@ -290,7 +290,7 @@ void fwPreferencesDialog::on_checkFWUpdates_clicked()
FirmwareVariant variant = getFirmwareVariant(); FirmwareVariant variant = getFirmwareVariant();
if (g.profile[g.id()].burnFirmware()) { if (g.profile[g.id()].burnFirmware()) {
current_firmware_variant = variant; current_firmware_variant = variant;
g.profile[g.id()].firmware( variant.id ); g.profile[g.id()].fwType( variant.id );
} }
MainWindow * mw = (MainWindow *)this->parent(); MainWindow * mw = (MainWindow *)this->parent();
mw->checkForUpdates(true, variant.id); mw->checkForUpdates(true, variant.id);
@ -305,7 +305,7 @@ void fwPreferencesDialog::on_fw_dnld_clicked()
if (!variant.firmware->getUrl(variant.id).isNull()) { if (!variant.firmware->getUrl(variant.id).isNull()) {
if (g.profile[g.id()].burnFirmware()) { if (g.profile[g.id()].burnFirmware()) {
current_firmware_variant = getFirmwareVariant(); current_firmware_variant = getFirmwareVariant();
g.profile[g.id()].firmware( current_firmware_variant.id ); g.profile[g.id()].fwType( current_firmware_variant.id );
} }
mw->downloadLatestFW(current_firmware_variant.firmware, current_firmware_variant.id); mw->downloadLatestFW(current_firmware_variant.firmware, current_firmware_variant.id);
} }

View file

@ -20,7 +20,7 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->setupUi(this); ui->setupUi(this);
this->setWindowIcon(CompanionIcon("open.png")); this->setWindowIcon(CompanionIcon("open.png"));
QString firmware_id = g.profile[g.id()].firmware(); QString firmware_id = g.profile[g.id()].fwType();
ui->tabWidget->setCurrentIndex( g.generalEditTab() ); ui->tabWidget->setCurrentIndex( g.generalEditTab() );
QString name=g.profile[g.id()].name(); QString name=g.profile[g.id()].name();
if (name.isEmpty()) { if (name.isEmpty()) {
@ -74,7 +74,7 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
if (!name.isEmpty()) { if (!name.isEmpty()) {
ui->profile_CB->addItem(name, i); ui->profile_CB->addItem(name, i);
if (i==g.id()) { if (i==g.id()) {
ui->profile_CB->setCurrentIndex(ui->profile_CB->count()); ui->profile_CB->setCurrentIndex(ui->profile_CB->count()-1);
} }
} }
} }

View file

@ -2,6 +2,7 @@
#include "appdata.h" #include "appdata.h"
#include "helpers.h" #include "helpers.h"
#include "simulatordialog.h" #include "simulatordialog.h"
#include "flashinterface.h"
QString getPhaseName(int val, char * phasename) QString getPhaseName(int val, char * phasename)
{ {
@ -694,6 +695,14 @@ QString image2qstring(QImage image)
return ImageStr; return ImageStr;
} }
// TODO KKERNEN 20140222
// I am sure that this code has had some kind of function, but now it only seems to cause
// problems. I think it is an attempt to open an image file from a double byte string which
// is first converted to a single byte string. Only used in burndialog.cpp
// It doesn't work for me in 2.0. I do not know why. I doubt it has ever worked for files or
// file paths containing non-english characters.
// Code can be removed ,when 2.0 is tested.
QImage qstring2image(QString imagestr) QImage qstring2image(QString imagestr)
{ {
bool ok; bool ok;
@ -938,3 +947,24 @@ void startSimulation(QWidget * parent, RadioData & radioData, int modelIdx)
QObject::tr("Simulator for this firmware is not yet available")); QObject::tr("Simulator for this firmware is not yet available"));
} }
} }
QPixmap makePixMap( QImage image, QString firmwareType )
{
if (firmwareType.contains( "taranis" )) {
image = image.convertToFormat(QImage::Format_RGB32);
QRgb col;
int gray;
for (int i = 0; i < image.width(); ++i) {
for (int j = 0; j < image.height(); ++j) {
col = image.pixel(i, j);
gray = qGray(col);
image.setPixel(i, j, qRgb(gray, gray, gray));
}
}
image = image.scaled(SPLASHX9D_WIDTH, SPLASHX9D_HEIGHT);
}
else {
image = image.scaled(SPLASH_WIDTH, SPLASH_HEIGHT).convertToFormat(QImage::Format_Mono);
}
return(QPixmap::fromImage(image));
}

View file

@ -128,4 +128,6 @@ QString getFrSkySrc(int index);
void startSimulation(QWidget * parent, RadioData & radioData, int modelIdx); void startSimulation(QWidget * parent, RadioData & radioData, int modelIdx);
QPixmap makePixMap( QImage image, QString firmwareType );
#endif // HELPERS_H #endif // HELPERS_H

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 B

After

Width:  |  Height:  |  Size: 2.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

After

Width:  |  Height:  |  Size: 4.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 B

After

Width:  |  Height:  |  Size: 7.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 B

After

Width:  |  Height:  |  Size: 209 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 209 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 209 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 209 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 209 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 353 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

Before

Width:  |  Height:  |  Size: 537 B

After

Width:  |  Height:  |  Size: 537 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 546 B

After

Width:  |  Height:  |  Size: 546 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 535 B

After

Width:  |  Height:  |  Size: 535 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 872 B

After

Width:  |  Height:  |  Size: 872 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 929 B

After

Width:  |  Height:  |  Size: 929 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 720 B

After

Width:  |  Height:  |  Size: 720 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

After

Width:  |  Height:  |  Size: 590 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 563 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 857 B

After

Width:  |  Height:  |  Size: 612 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 889 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 606 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 716 B

Some files were not shown because too many files have changed in this diff Show more