2 * Copyright (C) 2005-2013 Team XBMC
5 * This Program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * This Program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with XBMC; see the file COPYING. If not, see
17 * <http://www.gnu.org/licenses/>.
21 #include "GUIDialogLockSettings.h"
22 #include "dialogs/GUIDialogNumeric.h"
23 #include "guilib/GUIKeyboardFactory.h"
24 #include "dialogs/GUIDialogGamepad.h"
25 #include "dialogs/GUIDialogContextMenu.h"
26 #include "guilib/GUIWindowManager.h"
28 #include "guilib/LocalizeStrings.h"
30 CGUIDialogLockSettings::CGUIDialogLockSettings(void)
31 : CGUIDialogSettings(WINDOW_DIALOG_LOCK_SETTINGS, "LockSettings.xml")
35 CGUIDialogLockSettings::~CGUIDialogLockSettings(void)
40 void CGUIDialogLockSettings::OnCancel()
45 void CGUIDialogLockSettings::SetupPage()
47 CGUIDialogSettings::SetupPage();
48 // update our settings label
52 CStdString strLabel2=m_strURL;
53 CURL::Decode(strLabel2);
54 strLabel.Format(g_localizeStrings.Get(20152),strLabel2.c_str());
55 SET_CONTROL_LABEL(2,strLabel);
58 SET_CONTROL_LABEL(2,g_localizeStrings.Get(20066));
59 SET_CONTROL_HIDDEN(3);
62 void CGUIDialogLockSettings::EnableDetails(bool bEnable)
66 m_settings[i].enabled = bEnable || !m_bConditionalDetails;
71 void CGUIDialogLockSettings::CreateSettings()
73 // clear out any old settings
75 // create our settings
79 if (!m_strUser.IsEmpty())
80 m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(20142).c_str(),m_strUser.c_str());
82 if (!m_locks.code.IsEmpty())
83 m_settings[1].name.Format("%s (%s)",g_localizeStrings.Get(12326).c_str(),g_localizeStrings.Get(20141).c_str());
84 if (m_saveUserDetails)
85 AddBool(3, 13423, m_saveUserDetails);
88 AddButton(1,m_iButtonLabel);
89 if (m_locks.mode > LOCK_MODE_QWERTY)
90 m_locks.mode = LOCK_MODE_EVERYONE;
91 if (m_locks.mode != LOCK_MODE_EVERYONE)
92 m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(12336+m_locks.mode).c_str());
94 m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(1223).c_str());
99 AddBool(3,20038,&m_locks.music);
100 AddBool(4,20039,&m_locks.video);
101 AddBool(5,20040,&m_locks.pictures);
102 AddBool(6,20041,&m_locks.programs);
103 AddBool(7,20042,&m_locks.files);
105 std::vector<std::pair<int, int> > settingsLevelOptions;
106 settingsLevelOptions.push_back(std::make_pair(LOCK_LEVEL::NONE, 106));
107 settingsLevelOptions.push_back(std::make_pair(LOCK_LEVEL::ALL, 593));
108 settingsLevelOptions.push_back(std::make_pair(LOCK_LEVEL::STANDARD, 10037));
109 settingsLevelOptions.push_back(std::make_pair(LOCK_LEVEL::ADVANCED, 10038));
110 settingsLevelOptions.push_back(std::make_pair(LOCK_LEVEL::EXPERT, 10039));
111 AddSpin(8, 20043, (int*)&m_locks.settings, settingsLevelOptions);
113 AddBool(9,24090,&m_locks.addonManager);
114 EnableDetails(m_locks.mode != LOCK_MODE_EVERYONE);
118 void CGUIDialogLockSettings::OnSettingChanged(SettingInfo &setting)
120 // check and update anything that needs it
125 CStdString strHeading;
126 CStdString strDecodeUrl = m_strURL;
127 CURL::Decode(strDecodeUrl);
128 strHeading.Format("%s %s",g_localizeStrings.Get(14062).c_str(),strDecodeUrl.c_str());
129 if (CGUIKeyboardFactory::ShowAndGetInput(m_strUser,strHeading,true))
132 m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(20142).c_str(),m_strUser.c_str());
137 CContextButtons choices;
138 choices.Add(1, 1223);
139 choices.Add(2, 12337);
140 choices.Add(3, 12338);
141 choices.Add(4, 12339);
143 int choice = CGUIDialogContextMenu::ShowAndGetChoice(choices);
145 CStdString newPassword;
146 LockType iLockMode = LOCK_MODE_UNKNOWN;
147 bool bResult = false;
151 iLockMode = LOCK_MODE_EVERYONE; //Disabled! Need check routine!!!
155 iLockMode = LOCK_MODE_NUMERIC;
156 bResult = CGUIDialogNumeric::ShowAndVerifyNewPassword(newPassword);
159 iLockMode = LOCK_MODE_GAMEPAD;
160 bResult = CGUIDialogGamepad::ShowAndVerifyNewPassword(newPassword);
163 iLockMode = LOCK_MODE_QWERTY;
164 bResult = CGUIKeyboardFactory::ShowAndVerifyNewPassword(newPassword);
171 if (iLockMode == LOCK_MODE_EVERYONE)
173 m_locks.code = newPassword;
174 if (m_locks.code == "-")
175 iLockMode = LOCK_MODE_EVERYONE;
176 m_locks.mode = iLockMode;
178 EnableDetails(m_locks.mode != LOCK_MODE_EVERYONE);
180 if (m_locks.mode != LOCK_MODE_EVERYONE)
181 setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(12336+m_locks.mode).c_str());
183 setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(1223).c_str());
188 if (setting.id == 2 && m_bGetUser)
190 CStdString strHeading;
191 CStdString strDecodeUrl = m_strURL;
192 CURL::Decode(strDecodeUrl);
193 strHeading.Format("%s %s",g_localizeStrings.Get(20143).c_str(),strDecodeUrl.c_str());
194 if (CGUIKeyboardFactory::ShowAndGetInput(m_locks.code,strHeading,true,true))
196 m_settings[1].name.Format("%s (%s)",g_localizeStrings.Get(12326).c_str(),g_localizeStrings.Get(20141).c_str());
206 bool CGUIDialogLockSettings::ShowAndGetUserAndPassword(CStdString& strUser, CStdString& strPassword, const CStdString& strURL, bool *saveUserDetails)
208 CGUIDialogLockSettings *dialog = (CGUIDialogLockSettings *)g_windowManager.GetWindow(WINDOW_DIALOG_LOCK_SETTINGS);
209 if (!dialog) return false;
210 dialog->m_bGetUser = true;
211 dialog->m_locks.code = strPassword;
212 dialog->m_strUser = strUser;
213 dialog->m_strURL = strURL;
214 dialog->m_bChanged = false;
215 dialog->m_saveUserDetails = saveUserDetails;
217 if (dialog->m_bChanged)
219 strUser = dialog->m_strUser;
220 strPassword = dialog->m_locks.code;
227 bool CGUIDialogLockSettings::ShowAndGetLock(LockType& iLockMode, CStdString& strPassword, int iHeader)
229 CProfile::CLock locks(iLockMode, strPassword);
230 if (ShowAndGetLock(locks, iHeader, false, false))
233 iLockMode = locks.mode;
234 strPassword = locks.code;
240 bool CGUIDialogLockSettings::ShowAndGetLock(CProfile::CLock &locks, int iButtonLabel, bool bConditional, bool bDetails)
242 CGUIDialogLockSettings *dialog = (CGUIDialogLockSettings *)g_windowManager.GetWindow(WINDOW_DIALOG_LOCK_SETTINGS);
243 if (!dialog) return false;
244 dialog->m_locks = locks;
245 dialog->m_iButtonLabel = iButtonLabel;
246 dialog->m_bChanged = false;
247 dialog->m_bGetUser = false;
248 dialog->m_bConditionalDetails = bConditional;
249 dialog->m_bDetails = bDetails;
251 if (dialog->m_bChanged)
253 locks = dialog->m_locks;