36 void C4StartupOptionsDlg::SmallButton::DrawElement(
C4TargetFacet &cgo)
41 float x0 = cgo.
TargetX + rcBounds.x, y0 = cgo.
TargetY + rcBounds.y, x1 = cgo.
TargetX + rcBounds.x + rcBounds.Wdt, y1 = cgo.
TargetY + rcBounds.y + rcBounds.Hgt;
45 if (fDown) std::swap(dwClrHigh, dwClrLow);
46 int32_t iIndent = Clamp<int32_t>((rcBounds.Hgt-iTextHgt)/3, 2, 5);
47 float iDrawQuadTop[8] = { x0,y0, x1,y0, x1-iIndent,y0+iIndent, x0,y0+iIndent };
48 float iDrawQuadLeft[8] = { x0,y0, x0+iIndent,y0, x0+iIndent,y1-iIndent, x0,y1 };
49 float iDrawQuadRight[8] = { x1,y0, x1,y1, x1-iIndent,y1, x1-iIndent,y0+iIndent };
50 float iDrawQuadBottom[8] = { x1,y1, x0,y1, x0+iIndent,y1-iIndent, x1,y1-iIndent };
57 int32_t iTxtOff = fDown ? iIndent : 0;
58 if (fEnabled)
if (HasDrawFocus() || (fMouseOver && IsInActiveDlg(
false)))
68 int32_t C4StartupOptionsDlg::SmallButton::GetDefaultButtonHeight()
79 C4StartupOptionsDlg::ResChangeConfirmDlg::ResChangeConfirmDlg()
86 iResChangeSwitchTime = 12;
100 AddElement(pLblMessage);
102 (
int)iResChangeSwitchTime).getData(),
103 caMain.GetInnerWidth(), &sMsgBroken,
true);
105 AddElement(pOperationCancelLabel);
108 int32_t iButtonCount = 2;
119 SetFocus(pBtnNo,
false);
121 SetClientSize(GetClientRect().Wdt, GetClientRect().Hgt - caMain.GetHeight());
124 C4StartupOptionsDlg::ResChangeConfirmDlg::~ResChangeConfirmDlg()
129 void C4StartupOptionsDlg::ResChangeConfirmDlg::OnSec1Timer()
132 if (!--iResChangeSwitchTime)
134 Close(
false);
return;
139 (
int)iResChangeSwitchTime).getData(),
140 pOperationCancelLabel->GetBounds().Wdt, &sTimerText,
true);
141 pOperationCancelLabel->SetText(sTimerText.
getData());
148 :
C4GUI::MessageDialog(GetDlgMessage(assignment, assignment_set).getData(),
LoadResStr(
"IDS_MSG_DEFINEKEY"),
C4GUI::MessageDialog::btnAbort |
C4GUI::MessageDialog::btnReset, GetDlgIcon(assignment_set),
C4GUI::MessageDialog::dsRegular),
149 key(
KEY_Undefined), assignment(assignment), assignment_set(assignment_set)
154 for (uint32_t k =
KEYS_None; k <= KEYS_Allmod; k++) {
155 if (~KEYS_Allmod & k)
159 KeyListeners = std::make_unique<C4KeyBinding>(
165 &C4StartupOptionsDlg::KeySelDialog::KeyDown,
166 &C4StartupOptionsDlg::KeySelDialog::KeyUp
175 if (!assignment || !assignment_set)
return StdStrBuf(
"err");
183 if (ctrl_desc && *ctrl_desc)
185 result_string.
Append(
"||");
186 result_string.
Append(ctrl_desc);
188 return result_string;
198 void C4StartupOptionsDlg::KeySelDialog::MouseInput(
C4GUI::CMouse& rMouse, int32_t iButton, int32_t iX, int32_t iY,
DWORD dwKeyParam)
205 C4Rect &rcClientRect = GetClientRect(), &rcBounds = GetBounds();
206 iX -= rcClientRect.
x - rcBounds.x; iY -= rcClientRect.
y - rcBounds.y;
208 for (Element *pChild = pLast; pChild; pChild = pChild->GetPrev())
209 if (pChild->fVisible && pChild->GetBounds().Contains(iX, iY))
225 bool C4StartupOptionsDlg::KeySelDialog::KeyPress(
const C4KeyCodeEx &key,
bool fDown)
228 if (!assignment || !assignment_set)
return false;
232 if (!assignment_set->
HasGamepad())
return false;
236 if (!assignment_set->
HasMouse())
return false;
257 :
C4GUI::Label(
"", bounds,
ALeft, 0xffffffff, nullptr, false, false, true), assignment(assignment), assignment_set(assignment_set)
259 UpdateAssignmentString();
262 void C4StartupOptionsDlg::ControlConfigListBox::ControlAssignmentLabel::MouseInput(
C4GUI::CMouse &rMouse, int32_t iButton, int32_t iX, int32_t iY,
DWORD dwKeyParam)
269 KeySelDialog *dlg =
new KeySelDialog(assignment, assignment_set);
270 dlg->SetDelOnClose(
false);
271 bool success = GetScreen()->ShowModalDlg(dlg,
false);
278 C4StartupOptionsDlg::ControlConfigListBox::SetUserKey(assignment_set, assignment, key);
279 UpdateAssignmentString();
284 Element::MouseInput(rMouse, iButton, iX, iY, dwKeyParam);
287 void C4StartupOptionsDlg::ControlConfigListBox::ControlAssignmentLabel::UpdateAssignmentString()
315 :
C4GUI::Window(), assignment_label(nullptr), has_extra_spacing(has_extra_spacing)
320 SetBounds(
C4Rect(0,0,42,height));
321 parent_list->InsertElement(
this,
nullptr);
322 int32_t name_col_width = GetBounds().Wdt * 2/3;
327 C4Rect assignment_label_bounds =
C4Rect(name_col_width + margin, margin, GetBounds().Wdt - name_col_width - margin, GetBounds().Hgt - 2 * margin);
328 assignment_label =
new ControlAssignmentLabel(assignment, assignment_set, assignment_label_bounds);
329 AddElement(name_label);
330 AddElement(assignment_label);
331 if (gui_desc && *gui_desc) SetToolTip(gui_desc);
339 :
C4GUI::ListBox(rcBounds), set(nullptr)
341 SetAssignmentSet(set);
348 if (pClientWindow) pClientWindow->ClearChildren();
354 std::vector<C4PlayerControlAssignment *> grouped_assignments;
355 for (int32_t i=0; (assignment = set->GetAssignmentByIndex(i)); ++i)
356 grouped_assignments.push_back(assignment);
358 std::stable_sort(grouped_assignments.begin(),grouped_assignments.end(),&C4StartupOptionsDlg::ControlConfigListBox::sort_by_group);
360 int32_t current_group = 0;
361 for (
auto & grouped_assignment : grouped_assignments)
363 assignment = grouped_assignment;
364 bool first_element_of_group = assignment->
GetGUIGroup() > current_group;
368 if (gui_name && *gui_name)
370 ListItem *element =
new ListItem(
this, assignment, set, first_element_of_group);
382 if (!assignment || !assignment_set)
return;
411 config_assignment->
SetKey(key);
418 if (other_assignment != assignment)
423 if (gui_name && *gui_name)
435 C4StartupOptionsDlg::ControlConfigArea::ControlConfigArea(
const C4Rect &rcArea, int32_t iHMargin, int32_t iVMargin,
bool fGamepad,
C4StartupOptionsDlg *pOptionsDlg)
436 :
C4GUI::Window(), fGamepad(fGamepad), pOptionsDlg(pOptionsDlg), pGUICtrl(nullptr)
443 iMaxControlSets = std::max<size_t>(assignment_sets.
GetSetCount(),1u);
447 int32_t iCtrlSetWdt = caArea.GetWidth() - caArea.GetHMargin()*2;
448 int32_t iCtrlSetHMargin = 5, iCtrlSetVMargin = 5;
449 int32_t iCtrlSetBtnWdt = Clamp<int32_t>((iCtrlSetWdt - iMaxControlSets*iCtrlSetHMargin*2) / iMaxControlSets, 5, fctCtrlDefPic.
Wdt);
451 iCtrlSetHMargin = (iCtrlSetWdt - iCtrlSetBtnWdt*iMaxControlSets) / (iMaxControlSets*2);
452 C4GUI::ComponentAligner caKeyboardSetSel(caArea.GetFromTop(2*iCtrlSetVMargin+iCtrlSetBtnHgt), iCtrlSetHMargin, iCtrlSetVMargin);
453 const char *szCtrlSetHotkeys =
"1234567890";
455 for (i = 0; i < assignment_sets.
GetSetCount(); ++i)
458 char cCtrlSetHotkey = 0;
459 if (i <= strlen(szCtrlSetHotkeys)) cCtrlSetHotkey = szCtrlSetHotkeys[i];
462 pBtn->SetFacet(fctCtrlPic);
463 AddElement(ppKeyControlSetBtns[i] = pBtn);
468 iSelectedCtrlSet = 0;
469 caArea.ExpandTop(caArea.GetVMargin());
471 caArea.ExpandTop(caArea.GetVMargin());
472 control_list =
new ControlConfigListBox(caArea.GetFromLeft(caArea.GetInnerWidth()),
nullptr);
473 AddElement(control_list);
478 C4StartupOptionsDlg::ControlConfigArea::~ControlConfigArea()
480 delete [] ppKeyControlSetBtns;
483 void C4StartupOptionsDlg::ControlConfigArea::OnCtrlSetBtn(
C4GUI::Control *btn)
487 for (i = 0; i < iMaxControlSets; ++i)
488 if (btn == ppKeyControlSetBtns[i])
490 iSelectedCtrlSet = i;
497 void C4StartupOptionsDlg::ControlConfigArea::UpdateCtrlSet()
501 for (i = 0; i < iMaxControlSets; ++i)
502 ppKeyControlSetBtns[i]->SetHighlight(i == iSelectedCtrlSet);
507 void C4StartupOptionsDlg::ControlConfigArea::OnResetKeysBtn(
C4GUI::Control *btn)
514 void C4StartupOptionsDlg::ControlConfigArea::OnGUIGamepadCheckChange(
C4GUI::Element *pCheckBox)
530 C4StartupOptionsDlg::NetworkPortConfig::NetworkPortConfig(
const C4Rect &rcBounds,
const char *szName, int32_t *pConfigValue, int32_t iDefault)
531 :
C4GUI::Window(), pConfigValue(pConfigValue)
537 bool fEnabled = (*pConfigValue != -1);
541 const char *szText =
LoadResStr(
"IDS_CTL_ACTIVE");
542 int iWdt=100, iHgt=12;
544 pEnableCheck =
new C4GUI::CheckBox(caBottomLine.GetFromLeft(iWdt, iHgt), szText, fEnabled);
547 AddElement(pEnableCheck);
548 pPortEdit =
new C4GUI::Edit(caBottomLine.GetAll(),
true);
550 pPortEdit->SetFont(pUseFont);
551 pPortEdit->InsertText(
FormatString(
"%d", fEnabled ? ((
int) *pConfigValue) : (
int) iDefault).getData(),
false);
552 pPortEdit->SetMaxText(10);
553 pPortEdit->SetVisibility(fEnabled);
554 AddElement(pPortEdit);
557 void C4StartupOptionsDlg::NetworkPortConfig::OnEnabledCheckChange(
C4GUI::Element *pCheckBox)
559 pPortEdit->SetVisibility(pEnableCheck->GetChecked());
562 void C4StartupOptionsDlg::NetworkPortConfig::SavePort()
564 *pConfigValue=GetPort();
567 int32_t C4StartupOptionsDlg::NetworkPortConfig::GetPort()
570 if (!pEnableCheck->GetChecked())
573 return atoi(pPortEdit->GetText());
576 bool C4StartupOptionsDlg::NetworkPortConfig::GetControlSize(
int *piWdt,
int *piHgt)
582 const char *szText =
LoadResStr(
"IDS_CTL_ACTIVE");
594 C4StartupOptionsDlg::NetworkServerAddressConfig::NetworkServerAddressConfig(
const C4Rect &rcBounds,
const char *szName, int32_t *piConfigEnableValue,
char *szConfigAddressValue,
int iTabWidth)
595 :
C4GUI::Window(), piConfigEnableValue(piConfigEnableValue), szConfigAddressValue(szConfigAddressValue)
604 AddElement(pEnableCheck);
605 caMain.ExpandLeft(-2);
606 pAddressEdit =
new C4GUI::Edit(caMain.GetAll(),
true);
608 pAddressEdit->SetFont(pUseFont);
609 pAddressEdit->InsertText(szConfigAddressValue,
false);
611 pAddressEdit->SetVisibility(!!*piConfigEnableValue);
612 AddElement(pAddressEdit);
615 void C4StartupOptionsDlg::NetworkServerAddressConfig::OnEnabledCheckChange(
C4GUI::Element *pCheckBox)
618 if (pEnableCheck->GetChecked())
623 pAddressEdit->SetVisibility(pEnableCheck->GetChecked());
626 void C4StartupOptionsDlg::NetworkServerAddressConfig::Save2Config()
629 *piConfigEnableValue = pEnableCheck->GetChecked();
633 bool C4StartupOptionsDlg::NetworkServerAddressConfig::GetControlSize(
int *piWdt,
int *piHgt,
int *piTabPos,
const char *szForText)
638 int32_t iEdtWdt=120, iEdtHgt=24;
639 pUseFont->
GetTextExtent(
"sorgentelefon@treffpunktclonk.net", iEdtWdt, iEdtHgt,
false);
640 if (piWdt) *piWdt = iWdt+iEdtWdt+2;
641 if (piTabPos) *piTabPos = iWdt+2;
646 C4StartupOptionsDlg::NetworkModDatabaseServerAddressConfig::NetworkModDatabaseServerAddressConfig(
const C4Rect &rcBounds,
const char *szName, int32_t *piConfigEnableValue,
char *szConfigAddressValue,
int iTabWidth)
647 : NetworkServerAddressConfig(rcBounds, szName, piConfigEnableValue, szConfigAddressValue, iTabWidth)
652 void C4StartupOptionsDlg::NetworkModDatabaseServerAddressConfig::OnEnabledCheckChange(
C4GUI::Element *pCheckBox)
655 pAddressEdit->SetVisibility(pEnableCheck->GetChecked());
661 C4StartupOptionsDlg::BoolConfig::BoolConfig(
const C4Rect &rcBounds,
const char *szName,
bool *pbVal, int32_t *piVal,
bool fInvert, int32_t *piRestartChangeCfgVal)
662 :
C4GUI::CheckBox(rcBounds, szName, fInvert != (pbVal ? *pbVal : !!*piVal)), pbVal(pbVal), fInvert(fInvert), piVal(piVal), piRestartChangeCfgVal(piRestartChangeCfgVal)
667 void C4StartupOptionsDlg::BoolConfig::OnCheckChange(
C4GUI::Element *pCheckBox)
669 if (pbVal) *pbVal = (GetChecked() != fInvert);
670 if (piVal) *piVal = (GetChecked() != fInvert);
671 if (piRestartChangeCfgVal) GetScreen()->ShowMessage(
LoadResStr(
"IDS_MSG_RESTARTCHANGECFG"), GetText(),
678 C4StartupOptionsDlg::EditConfig::EditConfig(
const C4Rect &rcBounds,
const char *szName,
ValidatedStdCopyStrBufBase *psConfigVal, int32_t *piConfigVal,
bool fMultiline)
679 :
C4GUI::LabeledEdit(rcBounds, szName, fMultiline, psConfigVal ? psConfigVal->getData() : nullptr, &(
C4Startup::Get()->Graphics.BookFont),
C4StartupFontClr), psConfigVal(psConfigVal), piConfigVal(piConfigVal)
683 if (piConfigVal) SetIntVal(*piConfigVal);
687 void C4StartupOptionsDlg::EditConfig::Save2Config()
693 *piConfigVal = GetIntVal();
700 return BaseEdit::GetControlSize(piWdt, piHgt, szForText, pUseFont, fMultiline);
715 keys.emplace_back(K_BACK); keys.emplace_back(K_LEFT);
719 keys.emplace_back(K_F3);
724 int32_t iButtonWidth,iCaptionFontHgt;
728 int iIndentX1, iIndentY1, iIndentY2;
739 iIndentY1=1; iIndentY2=1;
744 iIndentY2 = std::max<int32_t>(1, iIndentY1/2);
767 int iCheckWdt=100, iCheckHgt=20, iEdit2Wdt=100, iEdit2Hgt=40;
768 BoolConfig::GetStandardCheckBoxSize(&iCheckWdt, &iCheckHgt,
"Default text", pUseFont);
769 EditConfig::GetControlSize(&iEdit2Wdt, &iEdit2Hgt,
"Default text",
false);
774 const char *szLangTip =
LoadResStr(
"IDS_MSG_SELECTLANG");
775 C4GUI::ComponentAligner caLanguage(caSheetProgram.
GetGridCell(0,1,0,7,-1,-1,
true,1,2), 0,
C4GUI_DefDlgSmallIndent,
false);
783 pUseFont->
GetTextExtent(
"XX: Top Secret Language", w,q,
true);
796 const char *szFontTip =
LoadResStr(
"IDS_DESC_SELECTFONT");
808 pFontFaceCombo->
SetFont(pUseFont);
816 pFontSizeCombo->
SetFont(pUseFont);
819 UpdateFontControls();
821 pCheck =
new BoolConfig(caSheetProgram.
GetGridCell(0,1,3,7,-1,iCheckHgt,
true),
LoadResStr(
"IDS_CTL_MMTIMER"),
nullptr, &
Config.
General.
MMTimer,
true, &
Config.
Startup.
HideMsgMMTimerChange);
826 const char *szBtnText =
LoadResStr(
"IDS_BTN_RESETCONFIG");
829 C4Rect rcResetBtn = caSheetProgram.
GetGridCell(1,2,6,7, std::min<int32_t>(iButtonWidth+iButtonHeight*4, caSheetProgram.
GetInnerWidth()*2/5), SmallButton::GetDefaultButtonHeight(),
true);
839 pGroupResolution->
SetFont(pUseFont);
843 int32_t iNumGfxOptions = 3, iOpt = 0;
853 pGfxResCombo->
SetFont(pUseFont);
862 for(
int i = 0; i < 3; ++i)
865 wmax = std::max<int32_t>(w, wmax);
873 pCombo->
SetText(GetWindowedName());
876 iNumGfxOptions = 5, iOpt=0;
879 pGroupOptions->
SetFont(pUseFont);
893 pGfxMSCombo->
SetFont(pUseFont);
898 else Current.
Copy(
"Off");
901 std::vector<int> multisamples;
914 int32_t iGridWdt = iCheckWdt * 2, iGridHgt = iCheckHgt * 5/2;
918 pGroupFESound->
SetFont(pUseFont);
936 pGroupRXSound->
SetFont(pUseFont);
954 pGroupVolume->
SetFont(pUseFont);
973 pSlider->SetDecoration(&
C4Startup::Get()->Graphics.sfctBookScroll,
false);
974 pSlider->SetToolTip(i ?
LoadResStr(
"IDS_DESC_VOLUMESOUND") :
LoadResStr(
"IDS_DESC_VOLUMEMUSIC"));
983 int iPortCfgWdt=200, iPortCfgHgt=48; NetworkPortConfig::GetControlSize(&iPortCfgWdt, &iPortCfgHgt);
984 int iServerCfgWdt = 120, iServerCfgHgt = 20, iServerCfgWdtMid = 0;
986 NetworkServerAddressConfig::GetControlSize(&iServerCfgWdt, &iServerCfgHgt, &iServerCfgWdtMid, sServerText.
getData());
987 int32_t net_component_hgt = iPortCfgHgt * 4 + 2 * iServerCfgHgt + 3 * pUseFont->
GetLineHeight();
993 pPortCfgTCP->SetToolTip(
LoadResStr(
"IDS_NET_PORT_TCP_DESC"));
994 pPortCfgUDP->SetToolTip(
LoadResStr(
"IDS_NET_PORT_UDP_DESC"));
995 pPortCfgRef->SetToolTip(
LoadResStr(
"IDS_NET_PORT_REFERENCE_DESC"));
996 pPortCfgDsc->SetToolTip(
LoadResStr(
"IDS_NET_PORT_DISCOVERY_DESC"));
1001 int iNetHgt0=pPortCfgDsc->GetBounds().GetBottom();
1004 pLeagueServerCfg->SetToolTip(
LoadResStr(
"IDS_NET_MASTERSRV_DESC"));
1007 pModDatabaseServerCfg->SetToolTip(
LoadResStr(
"IDS_NET_USEOTHERMODSDATABASESERVER_DESC"));
1008 pSheetNetwork->
AddElement(pModDatabaseServerCfg);
1009 #ifdef WITH_AUTOMATIC_UPDATE
1023 const char *szNameCfgText =
LoadResStr(
"IDS_NET_USERNAME");
1024 int iNameCfgWdt=200, iNameCfgHgt=48; C4StartupOptionsDlg::EditConfig::GetControlSize(&iNameCfgWdt, &iNameCfgHgt, szNameCfgText,
false);
1027 pNetworkNickEdit->SetToolTip(
LoadResStr(
"IDS_NET_USERNAME_DESC"));
1032 pNetworkNickEdit->GetEdit()->SetText(NickBuf.
getData(),
false);
1040 delete pKeyToggleMusic;
1074 std::vector<int> multisamples;
1077 std::sort(multisamples.begin(), multisamples.end());
1078 for(
int multisample : multisamples)
1081 text.Format(
"%dx", multisample);
1086 bool C4StartupOptionsDlg::OnGfxMSComboSelChange(
C4GUI::ComboBox *pForCombo, int32_t idNewSelection)
1116 int32_t idx = 0, iXRes, iYRes, iBitDepth, iRefreshRate;
1122 StdStrBuf sGfxString = GetGfxResString(iXRes, iYRes);
1124 pFiller->
AddEntry(sGfxString.
getData(), iXRes + (uint32_t(iYRes) << 12) + (uint32_t(iRefreshRate) << 24));
1128 bool C4StartupOptionsDlg::OnGfxResComboSelChange(
C4GUI::ComboBox *pForCombo, int32_t idNewSelection)
1131 int iResX=(idNewSelection & 0xfff), iResY=(uint32_t(idNewSelection) >> 12) & 0xfff, iRefreshRate = (uint32_t(idNewSelection) >> 24) & 0xff;
1132 if (idNewSelection == -1)
1142 if (!TryNewResolution(iResX, iResY, iRefreshRate))
1151 bool C4StartupOptionsDlg::TryNewResolution(int32_t iResX, int32_t iResY, int32_t iRefreshRate)
1158 int32_t iNewFontSize = 14;
1159 if (iResY >= 0 && iResY < 600)
1161 else if (iResY > 800)
1171 if (iNewFontSize != iOldFontSize)
1175 iNewFontSize = iOldFontSize;
1188 ResChangeConfirmDlg *pConfirmDlg =
new ResChangeConfirmDlg();
1209 StdStrBuf C4StartupOptionsDlg::GetGfxResString(int32_t iResX, int32_t iResY)
1214 return FormatString(
"%d x %d", (
int)iResX, (
int)iResY);
1217 const char * C4StartupOptionsDlg::GetWindowedName(int32_t mode )
1221 if(mode == 0)
return LoadResStr(
"IDS_MSG_FULLSCREEN");
1222 else if(mode == 1)
return LoadResStr(
"IDS_MSG_WINDOWED");
1223 else if(mode == 2)
return LoadResStr(
"IDS_MSG_AUTOWINDOWED");
1224 assert(!
"Requested name for config value which does not exist");
1225 return "ERR: Unknown";
1231 for(int32_t i = 0; i < 3; ++i)
1232 pFiller->
AddEntry(GetWindowedName(i), i);
1235 bool C4StartupOptionsDlg::OnWindowedModeComboSelChange(
C4GUI::ComboBox *pForCombo, int32_t idNewSelection)
1239 pForCombo->
SetText(GetWindowedName(idNewSelection));
1246 if (fConfigSaved)
return true;
1252 if (pPortCfgTCP->GetPort()>0 && pPortCfgTCP->GetPort() == pPortCfgRef->GetPort())
1257 if (pPortCfgUDP->GetPort()>0 && pPortCfgUDP->GetPort() == pPortCfgDsc->GetPort())
1264 pPortCfgTCP->SavePort();
1265 pPortCfgUDP->SavePort();
1266 pPortCfgRef->SavePort();
1267 pPortCfgDsc->SavePort();
1268 pLeagueServerCfg->Save2Config();
1269 pModDatabaseServerCfg->Save2Config();
1270 pNetworkNickEdit->Save2Config();
1277 if (!fKeepOpen) fConfigSaved =
true;
1293 const char *page_names[] = {
"general",
"graphics",
"sound",
"controls",
"network",
nullptr };
1295 while (page_names[i])
1301 if (!page_names[i])
return false;
1307 void C4StartupOptionsDlg::UpdateLanguage()
1352 bool C4StartupOptionsDlg::OnLangComboSelChange(
C4GUI::ComboBox *pForCombo, int32_t idNewSelection)
1366 void C4StartupOptionsDlg::UpdateFontControls()
1402 bool C4StartupOptionsDlg::OnFontComboSelChange(
C4GUI::ComboBox *pForCombo, int32_t idNewSelection)
1407 if (pForCombo == pFontFaceCombo)
1409 else if (pForCombo == pFontSizeCombo)
1410 iNewFontSize = idNewSelection;
1432 pNewDlg->pOptionsTabular->
SelectSheet(iPage,
false);
1433 pNewDlg->fCanGoBack =
false;
1436 void C4StartupOptionsDlg::OnFEMusicCheck(
C4GUI::Element *pCheckBox)
1446 void C4StartupOptionsDlg::OnMusicVolumeSliderChange(int32_t iNewVal)
1453 void C4StartupOptionsDlg::OnSoundVolumeSliderChange(int32_t iNewVal)
1461 void C4StartupOptionsDlg::OnRXSoundCheck(
C4GUI::Element *pCheckBox)
1484 pFESoundCheck->SetEnabled(fIsOn);
1502 pControlConfigArea->UpdateCtrlSet();
#define C4DEFAULT_FONT_NAME
C4Application Application
C4GraphicsResource GraphicsResource
#define C4GUI_ButtonAreaHgt
#define C4GUI_DefDlgIndent
#define C4GUI_InactCaptionFontClr
#define C4GUI_DefButton2Wdt
#define C4GUI_CaptionFontClr
#define C4GUI_DefDlgSmallIndent
#define C4GUI_MessageFontClr
#define C4GUI_ScrollBarHgt
#define C4GUI_MessageDlgWdt
#define C4GUI_DefButton2HSpace
#define C4GUI_Caption2FontClr
const char * LoadResStrNoAmp(const char *id)
const char * LoadResStr(const char *id)
const int32_t C4MC_Button_None
const int32_t C4MC_Button_LeftDown
const int16_t C4NetStdPortRefServer
const int16_t C4NetStdPortDiscovery
const int16_t C4NetStdPortUDP
const int16_t C4NetStdPortTCP
C4SoundInstance * StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier)
const int32_t C4StartupFontClrDisabled
const int32_t C4StartupBtnBorderColor2
const int32_t C4StartupEditBorderColor
const int32_t C4StartupEditBGColor
const int32_t C4StartupFontClr
const int32_t C4StartupBtnFontClr
const int32_t C4StartupBtnBorderColor1
const char * DefaultFonts[]
#define C4GFXBLIT_ADDITIVE
const char * SSearch(const char *szString, const char *szIndex)
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
bool SEqualNoCase(const char *szStr1, const char *szStr2, int iLen)
void SAppendChar(char cChar, char *szStr)
void SAppend(const char *szSource, char *szTarget, int iMaxL)
bool SEqual(const char *szStr1, const char *szStr2)
size_t SLen(const char *sptr)
StdStrBuf FormatString(const char *szFmt,...)
bool SetVideoMode(int iXRes, int iYRes, unsigned int iRefreshRate, unsigned int iMonitor, bool fFullScreen)
bool GetIndexedDisplayMode(int32_t iIndex, int32_t *piXRes, int32_t *piYRes, int32_t *piBitDepth, int32_t *piRefreshRate, uint32_t iMonitor)
const char * GetLastError()
C4MusicSystem MusicSystem
C4SoundSystem SoundSystem
bool SetGameFont(const char *szFontFace, int32_t iFontSize)
C4PlayerControlAssignmentSets UserSets
int32_t GamepadGuiControl
char LanguageEx[CFG_MaxString+1]
char Language[CFG_MaxString+1]
char RXFontName[CFG_MaxString+1]
static int GetLanguageSequence(const char *source, char *target)
const char * GetRegistrationData(const char *field)
C4ConfigControls Controls
C4ConfigGraphics Graphics
int32_t UseAlternateModDatabaseServer
char AlternateModDatabaseServerAddress[CFG_MaxString+1]
int32_t UseAlternateServer
char AlternateServerAddress[CFG_MaxString+1]
ValidatedStdCopyStrBuf< C4InVal::VAL_NameAllowEmpty > Nick
int32_t HideMsgNoOfficialLeague
int32_t HideMsgMMTimerChange
std::vector< C4KeyCodeEx > CodeList
virtual bool InvalidateDeviceObjects()=0
void DrawQuadDw(C4Surface *sfcTarget, float *ipVtx, DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, DWORD dwClr4, C4ShaderCall *shader_call)
void SetBlitMode(DWORD dwBlitMode)
virtual bool RestoreDeviceObjects()=0
static constexpr int COLOR_DEPTH
bool TextOut(const char *szText, CStdFont &rFont, float fZoom, C4Surface *sfcDest, float iTx, float iTy, DWORD dwFCol=0xffffffff, BYTE byForm=ALeft, bool fDoMarkup=true)
void DrawX(C4Surface *sfcTarget, float iX, float iY, float iWdt, float iHgt, int32_t iPhaseX=0, int32_t iPhaseY=0) const
int32_t GetHeightByWidth(int32_t iWidth)
void SetFont(CStdFont *pFont, uint32_t dwEnabledClr, uint32_t dwDisabledClr)
void SetOnChecked(BaseCallbackHandler *pCB)
void SetChecked(bool fToVal)
static bool GetStandardCheckBoxSize(int *piWdt, int *piHgt, const char *szForCaptionText, CStdFont *pUseFont)
void AddEntry(const char *szText, int32_t id)
bool FindEntry(const char *szText)
static int32_t GetDefaultHeight()
void SetComboCB(ComboBox_FillCB *pNewFillCallback)
void SetColors(uint32_t dwFontClr, uint32_t dwBGClr, uint32_t dwBorderClr)
void SetFont(CStdFont *pToFont)
void SetReadOnly(bool fToVal)
void SetDecoration(C4Facet *pFctSideArrow)
void SetText(const char *szToText)
bool GetFromLeft(int32_t iWdt, int32_t iHgt, C4Rect &rcOut)
void ExpandLeft(int32_t iByWdt)
bool GetCentered(int32_t iWdt, int32_t iHgt, C4Rect &rcOut)
int32_t GetHeight() const
int32_t GetInnerWidth() const
bool GetFromRight(int32_t iWdt, int32_t iHgt, C4Rect &rcOut)
void ExpandTop(int32_t iByHgt)
bool GetFromTop(int32_t iHgt, int32_t iWdt, C4Rect &rcOut)
C4Rect & GetGridCell(int32_t iSectX, int32_t iSectXMax, int32_t iSectY, int32_t iSectYMax, int32_t iSectSizeX=-1, int32_t iSectSizeY=-1, bool fCenterPos=false, int32_t iSectNumX=1, int32_t iSectNumY=1)
void GetAll(C4Rect &rcOut)
bool GetFromBottom(int32_t iHgt, int32_t iWdt, C4Rect &rcOut)
void AddElement(Element *pChild)
void SetFocus(Control *pCtrl, bool fByMouse)
void MouseInput(CMouse &rMouse, int32_t iButton, int32_t iX, int32_t iY, DWORD dwKeyParam) override
void UpdateSize() override
virtual void OnClosed(bool fOK)
static int32_t GetCustomEditHeight(CStdFont *pUseFont)
virtual Screen * GetScreen()
void SetToolTip(const char *szNewTooltip, bool is_immediate=false)
void SetColors(uint32_t dwFrameClr, uint32_t dwTitleClr, uint32_t dwBackClr=0xffffffff)
void SetTitle(const char *szToTitle)
void SetFont(CStdFont *pToFont)
void SetText(const char *szToText, bool fAllowHotkey=true)
static bool GetControlSize(int *piWdt, int *piHgt, const char *szForText, CStdFont *pForFont, bool fMultiline)
bool ShowModalDlg(Dialog *pDlg, bool fDestruct=true)
bool ShowErrorMessage(const char *szMessage)
void UpdateGamepadGUIControlEnabled()
bool ShowMessage(const char *szMessage, const char *szCaption, Icons icoIcon, int32_t *piConfigDontShowAgainSetting=nullptr)
Sheet * AddSheet(const char *szTitle, int32_t icoTitle=Ico_None)
void SelectSheet(int32_t iIndex, bool fByUser)
int32_t GetActiveSheetIndex()
void SetGfx(C4Facet *pafctBack, C4Facet *pafctClip, C4Facet *pafctIcons, CStdFont *paSheetCaptionFont, bool fResizeByAspect)
C4Rect & GetClientRect() override
C4PlayerControlAssignmentSets PlayerControlDefaultAssignmentSets
C4PlayerControlAssignmentSets PlayerControlUserAssignmentSets
C4PlayerControlDefs PlayerControlDefs
C4FacetID fctButtonHighlight
C4LanguageInfo * FindInfo(const char *strCode)
C4LanguageInfo * GetInfo(int iIndex)
bool LoadLanguage(const char *strLanguages)
char Name[C4MaxLanguageInfo+1]
char Fallback[C4MaxLanguageInfo+1]
char Info[C4MaxLanguageInfo+1]
bool Play(const char *szSongname=nullptr, bool fLoop=false, int fadetime_ms=0, double max_resume_time=0.0, bool allow_break=false)
void SetKey(const C4KeyCodeEx &key)
int32_t GetGUIGroup() const
const char * GetControlName() const
const char * GetGUIName(const C4PlayerControlDefs &defs) const
StdStrBuf GetKeysAsString(bool human_readable, bool short_name) const
const char * GetGUIDesc(const C4PlayerControlDefs &defs) const
bool IsKeyChanged() const
bool IsGUIDisabled() const
const C4KeyCodeEx & GetTriggerKey() const
void ResetKeyToInherited()
C4PlayerControlAssignment * GetAssignmentByControlName(const char *szControlName)
void RemoveAssignmentByControlName(const char *control_name)
const char * GetGUIName() const
C4Facet GetPicture() const
C4PlayerControlAssignment * GetAssignmentByIndex(int32_t index)
C4PlayerControlAssignment * CreateAssignmentForControl(const char *control_name)
const char * GetName() const
C4PlayerControlAssignmentSet * GetSetByName(const char *szName)
C4PlayerControlAssignmentSet * CreateEmptySetByTemplate(const C4PlayerControlAssignmentSet &template_set)
size_t GetSetCount() const
void RemoveSetByName(const char *set_name)
C4PlayerControlAssignmentSet * GetSetByIndex(int32_t index)
C4FacetID fctOptionsTabClip
C4FacetID fctOptionsIcons
class C4StartupDlg * SwitchDialog(DialogID eToDlg, bool fFade=true, const char *szSubDialog=nullptr)
C4StartupGraphics Graphics
bool SetSubscreen(const char *szToScreen) override
~C4StartupOptionsDlg() override
void RecreateDialog(bool fFade)
void OnClosed(bool fOK) override
void OnKeyboardLayoutChanged() override
bool SaveConfig(bool fForce, bool fKeepOpen)
void OnBackBtn(C4GUI::Control *btn)
virtual void EnumerateMultiSamples(std::vector< int > &samples, int min_expected=0) const
virtual bool ReInit(C4AbstractApp *pApp)
int GetLineHeight() const
std::tuple< std::string, int > BreakMessage(const char *szMsg, int iWdt, bool fCheckMarkup, float fZoom=1.0f)
bool GetTextExtent(const char *szText, int32_t &rsx, int32_t &rsy, bool fCheckMarkup=true)
virtual bool Init(C4Window *pWindow, C4AbstractApp *pApp)
virtual void Clear(bool multisample_change=false)
bool InitShaders(C4GroupSet *pGroups)
void Remove(StdSchedulerProc *pProc)
void Add(StdSchedulerProc *pProc)
const char * getData() const
void AppendChar(char cChar)
void Append(const char *pnData, size_t iChars)
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
static C4KeyCodeEx FromC4MC(int8_t mouse_id, int32_t button, DWORD param, bool *is_down=nullptr)
StdStrBuf ToString(bool fHumanReadable, bool fShort) const
void CopyValidated(const char *szFromVal)