summaryrefslogtreecommitdiffstats
path: root/kspaceduel/dialogs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kspaceduel/dialogs.cpp')
-rw-r--r--kspaceduel/dialogs.cpp434
1 files changed, 434 insertions, 0 deletions
diff --git a/kspaceduel/dialogs.cpp b/kspaceduel/dialogs.cpp
new file mode 100644
index 00000000..9e5b4b7a
--- /dev/null
+++ b/kspaceduel/dialogs.cpp
@@ -0,0 +1,434 @@
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qtabwidget.h>
+#include <qslider.h>
+#include <qlcdnumber.h>
+#include <qlayout.h>
+
+#include <klocale.h>
+
+#include "options.h"
+#include "dialogs.h"
+#include "general.h"
+
+bool operator!=(const SConfig &s1, const SConfig &s2)
+{
+ return
+(s1.gamespeed != s2.gamespeed) ||
+(s1.gravity != s2.gravity) ||
+(s1.acc != s2.acc) ||
+(s1.energyNeed != s2.energyNeed) ||
+(s1.sunEnergy != s2.sunEnergy) ||
+(s1.rotationSpeed != s2.rotationSpeed) ||
+(s1.mineActivateTime != s2.mineActivateTime) ||
+(s1.mineFuel != s2.mineFuel) ||
+(s1.shotSpeed != s2.shotSpeed) ||
+(s1.shotEnergyNeed != s2.shotEnergyNeed) ||
+(s1.mineEnergyNeed != s2.mineEnergyNeed) ||
+(s1.rotationEnergyNeed != s2.rotationEnergyNeed) ||
+(s1.startPosX != s2.startPosX) ||
+(s1.startPosY != s2.startPosY) ||
+(s1.startVelX != s2.startVelX) ||
+(s1.startVelY != s2.startVelY) ||
+(s1.bulletLifeTime != s2.bulletLifeTime) ||
+(s1.mineReloadTime != s2.mineReloadTime) ||
+(s1.bulletReloadTime != s2.bulletReloadTime) ||
+(s1.bulletDamage != s2.bulletDamage) ||
+(s1.shipDamage != s2.shipDamage) ||
+(s1.mineDamage != s2.mineDamage) ||
+(s1.maxBullets != s2.maxBullets) ||
+(s1.maxMines != s2.maxMines) ||
+(s1.powerupLifeTime != s2.powerupLifeTime) ||
+(s1.powerupRefreshTime != s2.powerupRefreshTime) ||
+(s1.powerupEnergyAmount != s2.powerupEnergyAmount) ||
+(s1.powerupShieldAmount != s2.powerupShieldAmount);
+}
+
+
+char ConfigSetup::LabelName[EditNum][25]=
+{
+ I18N_NOOP("Game speed:"), I18N_NOOP("Shot speed:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Max number:"),
+ I18N_NOOP("Damage:"), I18N_NOOP("Life time:"),
+ I18N_NOOP("Reload time:"), I18N_NOOP("Mine fuel:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Activate time:"),
+ I18N_NOOP("Damage:"), I18N_NOOP("Max number:"),
+ I18N_NOOP("Reload time:"), I18N_NOOP("Acceleration:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Rotation speed:"),
+ I18N_NOOP("Energy need:"), I18N_NOOP("Crash damage:"),
+ I18N_NOOP("Sun energy:"), I18N_NOOP("Gravity:"),
+ I18N_NOOP("Position X:"), I18N_NOOP("Position Y:"),
+ I18N_NOOP("Velocity X:"), I18N_NOOP("Velocity Y:"),
+ I18N_NOOP("Appearance time:"),I18N_NOOP("Life time:"),
+ I18N_NOOP("Energy amount:"), I18N_NOOP("Shield amount:")
+};
+
+enum ConfigSetup::Type ConfigSetup::VarType[EditNum]=
+{VarFloat,
+ VarFloat,VarFloat,VarInt,VarInt,VarFloat,VarFloat,
+ VarFloat,VarFloat,VarFloat,VarInt,VarInt,VarFloat,
+ VarFloat,VarFloat,VarFloat,
+ VarFloat,VarInt,
+ VarFloat,VarFloat,
+ VarFloat,VarFloat,VarFloat,VarFloat,
+ VarFloat,VarFloat,VarFloat,VarInt};
+
+double ConfigSetup::EditVal[EditNum][3]=
+{{0.2,4.0,1},
+ {0.1,10,3},{0,99,10},{0,10,5},{1,100,20},{50,2000,100},{0,400,10},
+ {5,200,65},{0,99,5},{5,100,15},{1,100,30},{0,10,3},{0,400,10},
+ {0,1.0,0.2},{0,10,1.0},{0.1,4,1},
+ {0,10,0.2},{0,100,50},
+ {1000,30000,9000},{0,10000,2200},
+ {-250,250,-130},{-180,180,-100},{-10,10,3},{-10,10,-1.7},
+ {200,4000,800},{200,4000,400},{0,99,50},{0,99,30}};
+
+int ConfigSetup::EditDiv[EditNum]=
+{100,
+ 10,1,1,1,1,10,
+ 1,1,10,1,1,10,
+ 100,10,10,
+ 10,1,
+ 1,1,
+ 10,10,100,100,
+ 1,1,1,1};
+
+int ConfigSetup::Parent[EditNum]=
+{TabGeneral,
+ TabBullet,TabBullet,TabBullet,TabBullet,TabBullet,TabBullet,
+ TabMine,TabMine,TabMine,TabMine,TabMine,TabMine,
+ TabShip,TabShip,TabShip,TabShip,TabShip,
+ TabSun,TabSun,
+ TabStart,TabStart,TabStart,TabStart,
+ TabPowerups,TabPowerups,TabPowerups,TabPowerups};
+
+int ConfigSetup::Position[EditNum]=
+{0,
+ 0,1,2,3,4,5,
+ 0,1,2,3,4,5,
+ 0,1,2,3,4,
+ 0,1,
+ 0,1,2,3,
+ 0,1,2,3};
+
+const int LCDLen=6;
+
+ConfigSetup::ConfigSetup(SConfig *custom,QWidget *parent,const char *name)
+ :QWidget( parent, name )
+{
+ QLabel *label[EditNum];
+ QGridLayout *stacklayout[TabNum];
+ QWidget *configWidgets[TabNum];
+ //QGroupBox *box;
+
+ int i;
+
+ resize(500,400);
+ //setCaption(i18n("Game Setup"));
+ //setHelp( "OptionsConfigurations" );
+
+
+ //box=new QGroupBox(i18n("Config"),this);
+ //setMainWidget( box );
+ QVBoxLayout *boxlayout = new QVBoxLayout( this, 6 );
+
+ tabs=new QTabWidget(this);
+ for(i=0;i<TabNum;i++)
+ {
+ configWidgets[i]=new QWidget(tabs);
+ stacklayout[i]=new QGridLayout(configWidgets[i],6,3,10);
+ }
+
+ for(i=0;i<EditNum;i++)
+ {
+ label[i]=new QLabel(i18n(LabelName[i]),configWidgets[Parent[i]]);
+ slider[i]=new QSlider(EditVal[i][0]*EditDiv[i],EditVal[i][1]*EditDiv[i],
+ (EditVal[i][1]-EditVal[i][0])/10,
+ EditVal[i][2]*EditDiv[i],
+ QSlider::Horizontal,configWidgets[Parent[i]]);
+ connect(slider[i],SIGNAL(valueChanged(int)),SLOT(sliderChanged(int)));
+ value[i]=new QLCDNumber(LCDLen,configWidgets[Parent[i]]);
+ value[i]->setFrameStyle(QFrame::NoFrame);
+ }
+
+ configCombo=new QComboBox(false,this);
+ connect(configCombo,SIGNAL(activated(int)),SLOT(configSelected(int)));
+ for(i=0;i<predefinedConfigNum;i++)
+ configCombo->insertItem(i18n(predefinedConfigName[i]));
+ configCombo->insertItem(i18n("Custom"));
+
+ boxlayout->addSpacing( 2 * 6 );
+ boxlayout->addWidget(configCombo);
+ boxlayout->addWidget(tabs);
+
+ for(i=0;i<EditNum;i++)
+ {
+ stacklayout[Parent[i]]->addWidget(label[i],Position[i],0);
+ stacklayout[Parent[i]]->addWidget(slider[i],Position[i],1);
+ stacklayout[Parent[i]]->addWidget(value[i],Position[i],2);
+ }
+
+ for(i=0;i<TabNum;i++)
+ stacklayout[i]->activate();
+
+ tabs->addTab(configWidgets[0],i18n("General"));
+ tabs->addTab(configWidgets[1],i18n("Bullet"));
+ tabs->addTab(configWidgets[2],i18n("Name","Mine"));
+ tabs->addTab(configWidgets[3],i18n("Ship"));
+ tabs->addTab(configWidgets[4],i18n("Sun"));
+ tabs->addTab(configWidgets[5],i18n("Start"));
+ tabs->addTab(configWidgets[6],i18n("Powerups"));
+
+ customConfig=custom;
+
+ updateWidgets();
+}
+
+void ConfigSetup::updateWidgets()
+{
+ config=*customConfig;
+ selectedConfig = -1;
+ configCombo->setCurrentItem(Options::lastConfig());
+ configSelected(Options::lastConfig());
+}
+
+void ConfigSetup::valueChanged(int ednum,int value)
+{
+ if(selectedConfig==predefinedConfigNum)
+ {
+ switch(ednum)
+ {
+ case EditMaxBullets:config.maxBullets=value;break;
+ case EditBulletDamage:config.bulletDamage=value;break;
+ case EditMaxMines:config.maxMines=value;break;
+ case EditMineDamage:config.mineDamage=value;break;
+ case EditShipDamage:config.shipDamage=value;break;
+ case EditPowerupShieldAmount:config.powerupShieldAmount=value;break;
+ }
+ emit changed();
+ }
+}
+
+void ConfigSetup::valueChanged(int ednum,double value)
+{
+ if(selectedConfig==predefinedConfigNum)
+ {
+ switch(ednum)
+ {
+ case EditSunEnergy:config.sunEnergy=value;break;
+ case EditGravity:config.gravity=value;break;
+ case EditShotSpeed:config.shotSpeed=value;break;
+ case EditShotEnergyNeed:config.shotEnergyNeed=value;break;
+ case EditBulletLifeTime:config.bulletLifeTime=value;break;
+ case EditBulletReloadTime:config.bulletReloadTime=value;break;
+ case EditMineFuel:config.mineFuel=value;break;
+ case EditMineEnergyNeed:config.mineEnergyNeed=value;break;
+ case EditMineActivateTime:config.mineActivateTime=value;break;
+ case EditMineReloadTime:config.mineReloadTime=value;break;
+ case EditGamespeed:config.gamespeed=value;break;
+ case EditPosX:config.startPosX=value;break;
+ case EditPosY:config.startPosY=value;break;
+ case EditVelX:config.startVelX=value;break;
+ case EditVelY:config.startVelY=value;break;
+ case EditAcc:config.acc=value;break;
+ case EditEnergyNeed:config.energyNeed=value;break;
+ case EditRotationSpeed:config.rotationSpeed=value;break;
+ case EditRotationEnergyNeed:config.rotationEnergyNeed=value;break;
+ case EditPowerupRefreshTime:config.powerupRefreshTime=value;break;
+ case EditPowerupLifeTime:config.powerupLifeTime=value;break;
+ case EditPowerupEnergyAmount:config.powerupEnergyAmount=value;break;
+ }
+ emit changed();
+ }
+}
+
+void ConfigSetup::updateSettings()
+{
+ *customConfig=config;
+
+ Options::setLastConfig(selectedConfig);
+ Options::writeConfig();
+}
+
+bool ConfigSetup::hasChanged()
+{
+ if (configCombo->currentItem() != Options::lastConfig())
+ return true;
+
+ if (configCombo->currentItem() != predefinedConfigNum)
+ return false;
+
+ return ((*customConfig) != config);
+}
+
+void ConfigSetup::updateWidgetsDefault()
+{
+ configCombo->setCurrentItem(0);
+ configSelected(0);
+}
+
+bool ConfigSetup::isDefault()
+{
+ return configCombo->currentItem() == 0;
+}
+
+void ConfigSetup::configSelected(int num)
+{
+ int i;
+ if(!((selectedConfig==predefinedConfigNum)&&(num==predefinedConfigNum)))
+ {
+ selectedConfig = num;
+ for(i=0;i<EditNum;i++)
+ slider[i]->setEnabled(num==predefinedConfigNum);
+ //enableButton( Default, num==predefinedConfigNum );
+ if(num<predefinedConfigNum)
+ displayConfig(predefinedConfig[num]);
+ else
+ displayConfig(config);
+ emit changed();
+ }
+}
+
+void ConfigSetup::displayConfig(SConfig cfg)
+{
+ setValue(EditSunEnergy,cfg.sunEnergy);
+ setValue(EditGravity,cfg.gravity);
+
+ setValue(EditShotSpeed,cfg.shotSpeed);
+ setValue(EditShotEnergyNeed,cfg.shotEnergyNeed);
+ setValue(EditMaxBullets,cfg.maxBullets);
+ setValue(EditBulletDamage,cfg.bulletDamage);
+ setValue(EditBulletLifeTime,cfg.bulletLifeTime);
+ setValue(EditBulletReloadTime,cfg.bulletReloadTime);
+
+ setValue(EditMineFuel,cfg.mineFuel);
+ setValue(EditMineEnergyNeed,cfg.mineEnergyNeed);
+ setValue(EditMineActivateTime,cfg.mineActivateTime);
+ setValue(EditMineDamage,cfg.mineDamage);
+ setValue(EditMaxMines,cfg.maxMines);
+ setValue(EditMineReloadTime,cfg.mineReloadTime);
+
+ setValue(EditGamespeed,cfg.gamespeed);
+
+ setValue(EditPosX,cfg.startPosX);
+ setValue(EditPosY,cfg.startPosY);
+ setValue(EditVelX,cfg.startVelX);
+ setValue(EditVelY,cfg.startVelY);
+
+ setValue(EditAcc,cfg.acc);
+ setValue(EditEnergyNeed,cfg.energyNeed);
+ setValue(EditRotationSpeed,cfg.rotationSpeed);
+ setValue(EditRotationEnergyNeed,cfg.rotationEnergyNeed);
+ setValue(EditShipDamage,cfg.shipDamage);
+
+ setValue(EditPowerupLifeTime,cfg.powerupLifeTime);
+ setValue(EditPowerupRefreshTime,cfg.powerupRefreshTime);
+ setValue(EditPowerupShieldAmount,cfg.powerupShieldAmount);
+ setValue(EditPowerupEnergyAmount,cfg.powerupEnergyAmount);
+}
+
+void ConfigSetup::setValue(int ednum,int val)
+{
+ QString str;
+ str.sprintf("%*i",LCDLen,val);
+ value[ednum]->display(str);
+ slider[ednum]->setValue(val);
+}
+
+void ConfigSetup::setValue(int ednum,double val)
+{
+ QString str;
+ int hval=(int)(val*EditDiv[ednum]+0.5);
+ int n,h;
+
+ if(EditDiv[ednum]==1)
+ str.sprintf("%*i",LCDLen,hval);
+ else
+ {
+ h=1;
+ for(n=0;h<EditDiv[ednum];n++)
+ h*=10;
+ str.sprintf("%*.*f",LCDLen,n,val);
+ }
+ value[ednum]->display(str);
+ slider[ednum]->setValue(hval);
+}
+
+void ConfigSetup::setValue(int ednum,unsigned val)
+{
+ QString str;
+ str.sprintf("%*i",LCDLen,(int)val);
+ value[ednum]->display(str);
+ slider[ednum]->setValue((int)val);
+}
+
+void ConfigSetup::sliderChanged(int val)
+{
+ int i,n,h;
+ QString str;
+
+ for(i=0;(i<EditNum)&&(slider[i]!=sender());i++);
+ if(i<EditNum)
+ {
+ if(EditDiv[i]==1)
+ str.sprintf("%*i",LCDLen,val);
+ else
+ {
+ h=1;
+ for(n=0;h<EditDiv[i];n++)
+ h*=10;
+ str.sprintf("%*.*f",LCDLen,n,(double)val/EditDiv[i]);
+ }
+ value[i]->display(str);
+ if(VarType[i]==VarFloat)
+ valueChanged(i,(double)val/EditDiv[i]);
+ else
+ valueChanged(i,val);
+ }
+
+}
+
+SettingsDialog::SettingsDialog(SConfig *customConfig, QWidget *parent, const char *name)
+ : KConfigDialog( parent, name, Options::self())
+{
+ General *general = new General();
+ addPage(general, i18n("General"), "package_settings", i18n("General Settings"));
+
+ cs = new ConfigSetup(customConfig);
+ addPage(cs, i18n("Game"), "kspaceduel", i18n("Game Settings"));
+ connect(cs, SIGNAL(changed()), this, SLOT(updateButtons()));
+
+// resize(600,400);
+}
+
+SettingsDialog::~SettingsDialog()
+{
+}
+
+void SettingsDialog::updateWidgetsDefault()
+{
+ cs->updateWidgetsDefault();
+}
+
+void SettingsDialog::updateWidgets()
+{
+ cs->updateWidgets();
+}
+
+void SettingsDialog::updateSettings()
+{
+ cs->updateSettings();
+ emit settingsUpdated();
+}
+
+bool SettingsDialog::hasChanged()
+{
+ return cs->hasChanged();
+}
+
+bool SettingsDialog::isDefault()
+{
+ return cs->isDefault();
+}
+
+#include "dialogs.moc"