[bluray] Fix stream info/language retrieval for blurays in non-nav mode.
[vuplus_xbmc] / xbmc / profiles / dialogs / GUIDialogLockSettings.cpp
1 /*
2  *      Copyright (C) 2005-2013 Team XBMC
3  *      http://www.xbmc.org
4  *
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)
8  *  any later version.
9  *
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.
14  *
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/>.
18  *
19  */
20
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"
27 #include "URL.h"
28 #include "guilib/LocalizeStrings.h"
29
30 CGUIDialogLockSettings::CGUIDialogLockSettings(void)
31     : CGUIDialogSettings(WINDOW_DIALOG_LOCK_SETTINGS, "LockSettings.xml")
32 {
33 }
34
35 CGUIDialogLockSettings::~CGUIDialogLockSettings(void)
36
37 {
38 }
39
40 void CGUIDialogLockSettings::OnCancel()
41 {
42   m_bChanged = false;
43 }
44
45 void CGUIDialogLockSettings::SetupPage()
46 {
47   CGUIDialogSettings::SetupPage();
48   // update our settings label
49   if (m_bGetUser)
50   {
51     CStdString strLabel;
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);
56   }
57   else
58     SET_CONTROL_LABEL(2,g_localizeStrings.Get(20066));
59   SET_CONTROL_HIDDEN(3);
60 }
61
62 void CGUIDialogLockSettings::EnableDetails(bool bEnable)
63 {
64   for (int i=2;i<9;++i)
65   {
66     m_settings[i].enabled = bEnable || !m_bConditionalDetails;
67     UpdateSetting(i+1);
68   }
69 }
70
71 void CGUIDialogLockSettings::CreateSettings()
72 {
73   // clear out any old settings
74   m_settings.clear();
75   // create our settings
76   if (m_bGetUser)
77   {
78     AddButton(1,20142);
79     if (!m_strUser.IsEmpty())
80       m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(20142).c_str(),m_strUser.c_str());
81     AddButton(2,12326);
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);
86     return;
87   }
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());
93   else
94     m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(1223).c_str());
95
96   if (m_bDetails)
97   {
98     AddSeparator(2);
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);
107   }
108 }
109
110 void CGUIDialogLockSettings::OnSettingChanged(SettingInfo &setting)
111 {
112   // check and update anything that needs it
113   if (setting.id == 1)
114   {
115     if (m_bGetUser)
116     {
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))
122       {
123         m_bChanged = true;
124         m_settings[0].name.Format("%s (%s)",g_localizeStrings.Get(20142).c_str(),m_strUser.c_str());
125         UpdateSetting(1);
126       }
127       return;
128     }
129     CContextButtons choices;
130     choices.Add(1, 1223);
131     choices.Add(2, 12337);
132     choices.Add(3, 12338);
133     choices.Add(4, 12339);
134     
135     int choice = CGUIDialogContextMenu::ShowAndGetChoice(choices);
136
137     CStdString newPassword;
138     LockType iLockMode = LOCK_MODE_UNKNOWN;
139     bool bResult = false;
140     switch(choice)
141     {
142     case 1:
143       iLockMode = LOCK_MODE_EVERYONE; //Disabled! Need check routine!!!
144       bResult = true;
145       break;
146     case 2:
147       iLockMode = LOCK_MODE_NUMERIC;
148       bResult = CGUIDialogNumeric::ShowAndVerifyNewPassword(newPassword);
149       break;
150     case 3:
151       iLockMode = LOCK_MODE_GAMEPAD;
152       bResult = CGUIDialogGamepad::ShowAndVerifyNewPassword(newPassword);
153       break;
154     case 4:
155       iLockMode = LOCK_MODE_QWERTY;
156       bResult = CGUIKeyboardFactory::ShowAndVerifyNewPassword(newPassword);
157       break;
158     default:
159       break;
160     }
161     if (bResult)
162     {
163       if (iLockMode == LOCK_MODE_EVERYONE)
164         newPassword = "-";
165       m_locks.code = newPassword;
166       if (m_locks.code == "-")
167         iLockMode = LOCK_MODE_EVERYONE;
168       m_locks.mode = iLockMode;
169       if (m_bDetails)
170         EnableDetails(m_locks.mode != LOCK_MODE_EVERYONE);
171       m_bChanged = true;
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());
174       else
175         setting.name.Format("%s (%s)",g_localizeStrings.Get(m_iButtonLabel).c_str(),g_localizeStrings.Get(1223).c_str());
176
177       UpdateSetting(1);
178     }
179   }
180   if (setting.id == 2 && m_bGetUser)
181   {
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))
187     {
188       m_settings[1].name.Format("%s (%s)",g_localizeStrings.Get(12326).c_str(),g_localizeStrings.Get(20141).c_str());
189       m_bChanged = true;
190       UpdateSetting(2);
191     }
192     return;
193   }
194   if (setting.id > 1)
195     m_bChanged = true;
196 }
197
198 bool CGUIDialogLockSettings::ShowAndGetUserAndPassword(CStdString& strUser, CStdString& strPassword, const CStdString& strURL, bool *saveUserDetails)
199 {
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;
208   dialog->DoModal();
209   if (dialog->m_bChanged)
210   {
211     strUser = dialog->m_strUser;
212     strPassword = dialog->m_locks.code;
213     return true;
214   }
215
216   return false;
217 }
218
219 bool CGUIDialogLockSettings::ShowAndGetLock(LockType& iLockMode, CStdString& strPassword, int iHeader)
220 {
221   CProfile::CLock locks(iLockMode, strPassword);
222   if (ShowAndGetLock(locks, iHeader, false, false))
223   {
224     locks.Validate();
225     iLockMode = locks.mode;
226     strPassword = locks.code;
227     return true;
228   }
229   return false;
230 }
231
232 bool CGUIDialogLockSettings::ShowAndGetLock(CProfile::CLock &locks, int iButtonLabel, bool bConditional, bool bDetails)
233 {
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;
242   dialog->DoModal();
243   if (dialog->m_bChanged)
244   {
245     locks = dialog->m_locks;
246     return true;
247   }
248
249   return false;
250 }