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);
104 AddBool(8,20043,&m_locks.settings);
105 AddBool(9,24090,&m_locks.addonManager);
106 EnableDetails(m_locks.mode != LOCK_MODE_EVERYONE);
110 void CGUIDialogLockSettings::OnSettingChanged(SettingInfo &setting)
112 // check and update anything that needs it
117 CStdString strHeading;
118 CStdString strDecodeUrl = m_strURL;
119 CURL::Decode(strDecodeUrl);
120 strHeading.Format("%s %s",g_localizeStrings.Get(14062).c_str(),strDecodeUrl.c_str());
121 if (CGUIKeyboardFactory::ShowAndGetInput(m_strUser,strHeading,true))
124 m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(20142).c_str(),m_strUser.c_str());
129 CContextButtons choices;
130 choices.Add(1, 1223);
131 choices.Add(2, 12337);
132 choices.Add(3, 12338);
133 choices.Add(4, 12339);
135 int choice = CGUIDialogContextMenu::ShowAndGetChoice(choices);
137 CStdString newPassword;
138 LockType iLockMode = LOCK_MODE_UNKNOWN;
139 bool bResult = false;
143 iLockMode = LOCK_MODE_EVERYONE; //Disabled! Need check routine!!!
147 iLockMode = LOCK_MODE_NUMERIC;
148 bResult = CGUIDialogNumeric::ShowAndVerifyNewPassword(newPassword);
151 iLockMode = LOCK_MODE_GAMEPAD;
152 bResult = CGUIDialogGamepad::ShowAndVerifyNewPassword(newPassword);
155 iLockMode = LOCK_MODE_QWERTY;
156 bResult = CGUIKeyboardFactory::ShowAndVerifyNewPassword(newPassword);
163 if (iLockMode == LOCK_MODE_EVERYONE)
165 m_locks.code = newPassword;
166 if (m_locks.code == "-")
167 iLockMode = LOCK_MODE_EVERYONE;
168 m_locks.mode = iLockMode;
170 EnableDetails(m_locks.mode != LOCK_MODE_EVERYONE);
172 if (m_locks.mode != LOCK_MODE_EVERYONE)
173 setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(12336+m_locks.mode).c_str());
175 setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(1223).c_str());
180 if (setting.id == 2 && m_bGetUser)
182 CStdString strHeading;
183 CStdString strDecodeUrl = m_strURL;
184 CURL::Decode(strDecodeUrl);
185 strHeading.Format("%s %s",g_localizeStrings.Get(20143).c_str(),strDecodeUrl.c_str());
186 if (CGUIKeyboardFactory::ShowAndGetInput(m_locks.code,strHeading,true,true))
188 m_settings[1].name.Format("%s (%s)",g_localizeStrings.Get(12326).c_str(),g_localizeStrings.Get(20141).c_str());
198 bool CGUIDialogLockSettings::ShowAndGetUserAndPassword(CStdString& strUser, CStdString& strPassword, const CStdString& strURL, bool *saveUserDetails)
200 CGUIDialogLockSettings *dialog = (CGUIDialogLockSettings *)g_windowManager.GetWindow(WINDOW_DIALOG_LOCK_SETTINGS);
201 if (!dialog) return false;
202 dialog->m_bGetUser = true;
203 dialog->m_locks.code = strPassword;
204 dialog->m_strUser = strUser;
205 dialog->m_strURL = strURL;
206 dialog->m_bChanged = false;
207 dialog->m_saveUserDetails = saveUserDetails;
209 if (dialog->m_bChanged)
211 strUser = dialog->m_strUser;
212 strPassword = dialog->m_locks.code;
219 bool CGUIDialogLockSettings::ShowAndGetLock(LockType& iLockMode, CStdString& strPassword, int iHeader)
221 CProfile::CLock locks(iLockMode, strPassword);
222 if (ShowAndGetLock(locks, iHeader, false, false))
225 iLockMode = locks.mode;
226 strPassword = locks.code;
232 bool CGUIDialogLockSettings::ShowAndGetLock(CProfile::CLock &locks, int iButtonLabel, bool bConditional, bool bDetails)
234 CGUIDialogLockSettings *dialog = (CGUIDialogLockSettings *)g_windowManager.GetWindow(WINDOW_DIALOG_LOCK_SETTINGS);
235 if (!dialog) return false;
236 dialog->m_locks = locks;
237 dialog->m_iButtonLabel = iButtonLabel;
238 dialog->m_bChanged = false;
239 dialog->m_bGetUser = false;
240 dialog->m_bConditionalDetails = bConditional;
241 dialog->m_bDetails = bDetails;
243 if (dialog->m_bChanged)
245 locks = dialog->m_locks;