23 #include "dmflagspanel.h" 24 #include "ui_dmflagspanel.h" 27 #include "plugins/engineplugin.h" 28 #include "serverapi/gamecreateparams.h" 33 class DMFlagsTabWidget
42 QList<QCheckBox *> checkBoxes;
46 DClass<DMFlagsPanel> :
public Ui::DMFlagsPanel
49 QList<DMFlagsTabWidget *> dmFlagsTabs;
61 DMFlagsPanel::~DMFlagsPanel()
66 QList<DMFlagsSection> DMFlagsPanel::dmFlags()
const 68 QList<DMFlagsSection> result;
69 for (
const DMFlagsTabWidget *p : d->dmFlagsTabs)
72 for (
int i = 0; i < p->section.count(); ++i)
74 if (p->checkBoxes[i]->isChecked())
75 sec.
add(p->section[i]);
82 bool DMFlagsPanel::initDMFlagsTabs(
const EnginePlugin *engine)
88 QList<DMFlagsSection> dmFlagsSections = engine->
dmFlags();
89 if (dmFlagsSections.empty())
92 for (
int i = 0; i < dmFlagsSections.count(); ++i)
94 auto dmftw =
new DMFlagsTabWidget();
96 QWidget *flagsTab =
new QWidget(
this);
97 dmftw->widget = flagsTab;
98 dmftw->section = dmFlagsSections[i];
100 auto hLayout =
new QHBoxLayout(flagsTab);
102 QVBoxLayout *layout =
nullptr;
103 for (
int j = 0; j < dmFlagsSections[i].count(); ++j)
107 if (layout !=
nullptr)
108 layout->addStretch();
110 layout =
new QVBoxLayout();
111 hLayout->addLayout(layout);
114 auto checkBox =
new QCheckBox();
115 checkBox->setText(dmFlagsSections[i][j].name());
116 dmftw->checkBoxes << checkBox;
117 layout->addWidget(checkBox);
120 if (layout !=
nullptr)
121 layout->addStretch();
123 d->dmFlagsTabs << dmftw;
124 d->tabWidget->addTab(flagsTab, dmFlagsSections[i].name());
131 void DMFlagsPanel::removeDMFlagsTabs()
133 for (DMFlagsTabWidget *flags : d->dmFlagsTabs)
135 int index = d->tabWidget->indexOf(flags->widget);
136 d->tabWidget->removeTab(index);
137 delete flags->widget;
141 d->dmFlagsTabs.clear();
146 params.dmFlags() = dmFlags();
149 void DMFlagsPanel::loadConfig(
Ini &config)
152 for (DMFlagsTabWidget *p : d->dmFlagsTabs)
155 for (
int i = 0; i < section.
count(); ++i)
162 flagKey = section.
name() +
"/" + section[i].
name();
164 p->checkBoxes[i]->setChecked(dmflags[flagKey]);
169 void DMFlagsPanel::saveConfig(
Ini &config)
173 for (DMFlagsTabWidget *p : d->dmFlagsTabs)
175 for (
int i = 0; i < p->section.count(); ++i)
177 dmflags[p->section.internalName() +
"/" + p->section[i].internalName()]
178 = p->checkBoxes[i]->isChecked();
void add(const DMFlag &flag)
Append a new DMFlag to this section.
bool createDMFlagsPagesAutomatic
Controls behavior of "Create Game" dialog.
virtual QList< DMFlagsSection > dmFlags() const
Game settings flags.
const QString & internalName() const
Game parametrization data used when creating new games.
A group of DMFlag objects that can be safely OR'ed together to form a meaningful value.
int count() const
Number of DMFlag objects inside the collection.
bool hasSetting(const QString &name) const
true if setting of given name exists within the section.
INI section representation.
IniSection section(const QString &name)
Access configuration file section.
const QString & name() const
User-displayable name of this section, ex. "Compatibility flags".
void deleteSection(const QString §ionname)