diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/newview/CMakeLists.txt | 6 | ||||
-rw-r--r-- | linden/indra/newview/floatergridmanager.cpp | 750 | ||||
-rw-r--r-- | linden/indra/newview/floatergridmanager.h | 93 | ||||
-rw-r--r-- | linden/indra/newview/floaterlogin.cpp | 722 | ||||
-rw-r--r-- | linden/indra/newview/floaterlogin.h | 90 | ||||
-rw-r--r-- | linden/indra/newview/llpanellogin.cpp | 6 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/floater_grid_manager.xml (renamed from linden/indra/newview/skins/default/xui/en-us/floater_login.xml) | 19 |
7 files changed, 860 insertions, 826 deletions
diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt index 2b4395d..ab0159f 100644 --- a/linden/indra/newview/CMakeLists.txt +++ b/linden/indra/newview/CMakeLists.txt | |||
@@ -69,7 +69,7 @@ set(viewer_SOURCE_FILES | |||
69 | emeraldboobutils.cpp | 69 | emeraldboobutils.cpp |
70 | floaterao.cpp | 70 | floaterao.cpp |
71 | floaterbusy.cpp | 71 | floaterbusy.cpp |
72 | floaterlogin.cpp | 72 | floatergridmanager.cpp |
73 | hbfloatergrouptitles.cpp | 73 | hbfloatergrouptitles.cpp |
74 | hippoGridManager.cpp | 74 | hippoGridManager.cpp |
75 | hippoLimits.cpp | 75 | hippoLimits.cpp |
@@ -498,7 +498,7 @@ set(viewer_HEADER_FILES | |||
498 | emeraldboobutils.h | 498 | emeraldboobutils.h |
499 | floaterao.h | 499 | floaterao.h |
500 | floaterbusy.h | 500 | floaterbusy.h |
501 | floaterlogin.h | 501 | floatergridmanager.h |
502 | hbfloatergrouptitles.h | 502 | hbfloatergrouptitles.h |
503 | hippoGridManager.h | 503 | hippoGridManager.h |
504 | hippoLimits.h | 504 | hippoLimits.h |
@@ -1125,6 +1125,7 @@ set(viewer_XUI_FILES | |||
1125 | skins/default/xui/en-us/floater_font_test.xml | 1125 | skins/default/xui/en-us/floater_font_test.xml |
1126 | skins/default/xui/en-us/floater_gesture.xml | 1126 | skins/default/xui/en-us/floater_gesture.xml |
1127 | skins/default/xui/en-us/floater_god_tools.xml | 1127 | skins/default/xui/en-us/floater_god_tools.xml |
1128 | skins/default/xui/en-us/floater_grid_manager.xml | ||
1128 | skins/default/xui/en-us/floater_group_info.xml | 1129 | skins/default/xui/en-us/floater_group_info.xml |
1129 | skins/default/xui/en-us/floater_group_titles.xml | 1130 | skins/default/xui/en-us/floater_group_titles.xml |
1130 | skins/default/xui/en-us/floater_hardware_settings.xml | 1131 | skins/default/xui/en-us/floater_hardware_settings.xml |
@@ -1145,7 +1146,6 @@ set(viewer_XUI_FILES | |||
1145 | skins/default/xui/en-us/floater_land_holdings.xml | 1146 | skins/default/xui/en-us/floater_land_holdings.xml |
1146 | skins/default/xui/en-us/floater_landmark_ctrl.xml | 1147 | skins/default/xui/en-us/floater_landmark_ctrl.xml |
1147 | skins/default/xui/en-us/floater_live_lsleditor.xml | 1148 | skins/default/xui/en-us/floater_live_lsleditor.xml |
1148 | skins/default/xui/en-us/floater_login.xml | ||
1149 | skins/default/xui/en-us/floater_lsl_guide.xml | 1149 | skins/default/xui/en-us/floater_lsl_guide.xml |
1150 | skins/default/xui/en-us/floater_media_browser.xml | 1150 | skins/default/xui/en-us/floater_media_browser.xml |
1151 | skins/default/xui/en-us/floater_mini_map.xml | 1151 | skins/default/xui/en-us/floater_mini_map.xml |
diff --git a/linden/indra/newview/floatergridmanager.cpp b/linden/indra/newview/floatergridmanager.cpp new file mode 100644 index 0000000..efd02ca --- /dev/null +++ b/linden/indra/newview/floatergridmanager.cpp | |||
@@ -0,0 +1,750 @@ | |||
1 | /* | ||
2 | * floatergridmanager.cpp | ||
3 | * This is Meerkats grid manager. | ||
4 | * -Patrick Sapinski (Monday, August 17, 2009) | ||
5 | * | ||
6 | * Modified by McCabe Maxsted for Imprudence | ||
7 | */ | ||
8 | |||
9 | #include "llviewerprecompiledheaders.h" | ||
10 | |||
11 | #include "floatergridmanager.h" | ||
12 | |||
13 | #include <boost/algorithm/string.hpp> | ||
14 | #include "llviewercontrol.h" | ||
15 | #include "llcombobox.h" | ||
16 | #include "llscrolllistctrl.h" | ||
17 | #include "llmd5.h" | ||
18 | #include "llurlsimstring.h" | ||
19 | #include "lluictrlfactory.h" | ||
20 | #include "hippoGridManager.h" | ||
21 | #include "llviewernetwork.h" | ||
22 | #include "llpanellogin.h" | ||
23 | |||
24 | #define PASSWORD_FILLER "123456789!123456" | ||
25 | |||
26 | LoginController* FloaterGridManager::sController = NULL; | ||
27 | bool FloaterGridManager::sIsInitialLogin; | ||
28 | std::string FloaterGridManager::sGrid; | ||
29 | |||
30 | FloaterGridManager::FloaterGridManager(const LLSD& key) | ||
31 | : mState(NORMAL), | ||
32 | mCurGrid(gHippoGridManager->getCurrentGridNick()), | ||
33 | mIncomingPassword(""), | ||
34 | mMungedPassword("") | ||
35 | { | ||
36 | llinfos << "Opening grid manager" << llendl; | ||
37 | |||
38 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_grid_manager.xml"); | ||
39 | center(); | ||
40 | |||
41 | LLLineEditor* edit = getChild<LLLineEditor>("avatar_password_edit"); | ||
42 | if (edit) | ||
43 | { | ||
44 | edit->setDrawAsterixes(TRUE); | ||
45 | } | ||
46 | } | ||
47 | |||
48 | |||
49 | FloaterGridManager::~FloaterGridManager() | ||
50 | { | ||
51 | FloaterGridManager::sController = NULL; | ||
52 | } | ||
53 | |||
54 | BOOL FloaterGridManager::postBuild() | ||
55 | { | ||
56 | /*requires<LLScrollListCtrl>("grid_selector"); | ||
57 | requires<LLLineEditor>("gridnick"); | ||
58 | requires<LLLineEditor>("gridname"); | ||
59 | requires<LLLineEditor>("loginuri"); | ||
60 | requires<LLLineEditor>("loginpage"); | ||
61 | requires<LLLineEditor>("helperuri"); | ||
62 | requires<LLLineEditor>("website"); | ||
63 | requires<LLLineEditor>("support"); | ||
64 | requires<LLLineEditor>("register"); | ||
65 | requires<LLLineEditor>("password"); | ||
66 | requires<LLLineEditor>("first_name"); | ||
67 | requires<LLLineEditor>("last_name"); | ||
68 | requires<LLLineEditor>("avatar_password"); | ||
69 | //requires<LLLineEditor>("search"); | ||
70 | requires<LLButton>("btn_delete"); | ||
71 | requires<LLButton>("btn_add"); | ||
72 | requires<LLButton>("btn_copy"); | ||
73 | requires<LLButton>("set_default"); | ||
74 | requires<LLButton>("btn_gridinfo");*/ | ||
75 | //requires<LLButton>("btn_help_render_compat"); | ||
76 | |||
77 | /*if (!checkRequirements()) | ||
78 | { | ||
79 | return false; | ||
80 | }*/ | ||
81 | |||
82 | LLLineEditor* password_edit = getChild<LLLineEditor>("avatar_password"); | ||
83 | if (password_edit) | ||
84 | { | ||
85 | password_edit->setDrawAsterixes(TRUE); | ||
86 | } | ||
87 | |||
88 | childSetAction("btn_delete", onClickDelete, this); | ||
89 | childSetAction("btn_add", onClickAdd, this); | ||
90 | childSetAction("btn_copy", onClickCopy, this); | ||
91 | childSetAction("btn_ok", onClickOk, this); | ||
92 | childSetAction("btn_apply", onClickApply, this); | ||
93 | // childSetAction("set_default", onClickDefault, this); // We use the last selected grid as the default | ||
94 | childSetAction("btn_cancel", onClickCancel, this); | ||
95 | childSetAction("btn_clear", onClickClear, this); | ||
96 | childSetAction("btn_gridinfo", onClickGridInfo, this); | ||
97 | // childSetAction("btn_help_render_compat", onClickHelpRenderCompat, this); // Ugly ugly ugly | ||
98 | |||
99 | childSetCommitCallback("grid_selector", onSelectGrid, this); | ||
100 | LLScrollListCtrl* combo = getChild<LLScrollListCtrl>("grid_selector"); | ||
101 | combo->setFocus(TRUE); | ||
102 | |||
103 | refreshGrids(); | ||
104 | |||
105 | return TRUE; | ||
106 | } | ||
107 | |||
108 | void FloaterGridManager::refreshGrids() | ||
109 | { | ||
110 | const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick(); | ||
111 | LLScrollListCtrl *grids = FloaterGridManager::getInstance()->getChild<LLScrollListCtrl>("grid_selector"); | ||
112 | grids->deleteAllItems(); | ||
113 | |||
114 | S32 selectIndex = -1; | ||
115 | S32 i = 0; | ||
116 | if (defaultGrid != "") | ||
117 | { | ||
118 | LLSD value; | ||
119 | value["id"] = defaultGrid; | ||
120 | value["columns"][0]["column"] = "grid"; | ||
121 | value["columns"][0]["value"] = defaultGrid; | ||
122 | grids->addElement(value); | ||
123 | selectIndex = i++; | ||
124 | } | ||
125 | |||
126 | HippoGridManager::GridIterator it = gHippoGridManager->beginGrid(); | ||
127 | HippoGridManager::GridIterator end = gHippoGridManager->endGrid(); | ||
128 | for (it; it != end; ++it) | ||
129 | { | ||
130 | const std::string &grid = it->second->getGridNick(); | ||
131 | if (grid != defaultGrid) | ||
132 | { | ||
133 | LLSD value; | ||
134 | value["id"] = grid; | ||
135 | value["columns"][0]["column"] = "grid"; | ||
136 | value["columns"][0]["value"] = grid; | ||
137 | grids->addElement(value); | ||
138 | |||
139 | if (grid == FloaterGridManager::getInstance()->getCurGrid()) | ||
140 | { | ||
141 | selectIndex = i; | ||
142 | } | ||
143 | i++; | ||
144 | } | ||
145 | } | ||
146 | |||
147 | if ((FloaterGridManager::getInstance()->getState() == ADD_NEW) || (FloaterGridManager::getInstance()->getState() == ADD_COPY)) | ||
148 | { | ||
149 | grids->addElement("<new>"); | ||
150 | selectIndex = i++; | ||
151 | } | ||
152 | |||
153 | //if (selectIndex >= 0) | ||
154 | //{ | ||
155 | // grids->setCurrentByIndex(selectIndex); | ||
156 | //} | ||
157 | //else | ||
158 | //{ | ||
159 | // grids->setLabel(LLStringExplicit("")); // LLComboBox::removeall() does not clear the label | ||
160 | //} | ||
161 | |||
162 | // FloaterGridManager::getInstance()->childSetTextArg("default_grid", "[DEFAULT]", (defaultGrid != "")? defaultGrid: " "); | ||
163 | |||
164 | FloaterGridManager::getInstance()->childSetEnabled("btn_delete", (selectIndex >= 0)); | ||
165 | FloaterGridManager::getInstance()->childSetEnabled("btn_copy", (FloaterGridManager::getInstance()->getState() == NORMAL) && (selectIndex >= 0)); | ||
166 | // FloaterGridManager::getInstance()->childSetEnabled("set_default", (FloaterGridManager::getInstance()->getState() == NORMAL) && (selectIndex > 0)); | ||
167 | FloaterGridManager::getInstance()->childSetEnabled("gridnick", (FloaterGridManager::getInstance()->getState() == ADD_NEW) || (FloaterGridManager::getInstance()->getState() == ADD_COPY)); | ||
168 | |||
169 | if (FloaterGridManager::getInstance()->getState() == NORMAL) | ||
170 | { | ||
171 | HippoGridInfo *gridInfo = gHippoGridManager->getGrid(FloaterGridManager::getInstance()->getCurGrid()); | ||
172 | if (gridInfo) | ||
173 | { | ||
174 | FloaterGridManager::getInstance()->childSetText("gridnick", gridInfo->getGridNick()); | ||
175 | //FloaterGridManager::getInstance()->childSetText("grid_name", gridInfo->getGridName()); | ||
176 | FloaterGridManager::getInstance()->childSetText("loginuri", gridInfo->getLoginUri()); | ||
177 | FloaterGridManager::getInstance()->childSetText("loginpage", gridInfo->getLoginPage()); | ||
178 | FloaterGridManager::getInstance()->childSetText("helperuri", gridInfo->getHelperUri()); | ||
179 | FloaterGridManager::getInstance()->childSetText("website", gridInfo->getWebSite()); | ||
180 | FloaterGridManager::getInstance()->childSetText("support", gridInfo->getSupportUrl()); | ||
181 | FloaterGridManager::getInstance()->childSetText("register", gridInfo->getRegisterUrl()); | ||
182 | FloaterGridManager::getInstance()->childSetText("password", gridInfo->getPasswordUrl()); | ||
183 | |||
184 | // FloaterGridManager::getInstance()->childSetText("first_name", gridInfo->getFirstName()); | ||
185 | // FloaterGridManager::getInstance()->childSetText("last_name", gridInfo->getLastName()); | ||
186 | // if(gridInfo->getAvatarPassword().length() == 32) | ||
187 | // FloaterGridManager::getInstance()->childSetText("avatar_password", std::string(PASSWORD_FILLER)); | ||
188 | // else if(gridInfo->getPasswordUrl().empty()) | ||
189 | // FloaterGridManager::getInstance()->childSetText("avatar_password", std::string("")); | ||
190 | |||
191 | // if (gridInfo->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE) { | ||
192 | // //childSetEnabled("search", false); | ||
193 | // //childSetText("search", LLStringExplicit("")); | ||
194 | // childSetEnabled("render_compat", false); | ||
195 | // childSetValue("render_compat", false); | ||
196 | // } else { | ||
197 | // //childSetEnabled("search", true); | ||
198 | // //childSetText("search", gridInfo->getSearchUrl()); | ||
199 | // childSetEnabled("render_compat", true); | ||
200 | // childSetValue("render_compat", gridInfo->isRenderCompat()); | ||
201 | // } | ||
202 | |||
203 | } | ||
204 | else | ||
205 | { | ||
206 | std::string empty = ""; | ||
207 | FloaterGridManager::getInstance()->childSetText("gridnick", empty); | ||
208 | FloaterGridManager::getInstance()->childSetText("gridname", empty); | ||
209 | FloaterGridManager::getInstance()->childSetText("loginuri", empty); | ||
210 | FloaterGridManager::getInstance()->childSetText("loginpage", empty); | ||
211 | FloaterGridManager::getInstance()->childSetText("helperuri", empty); | ||
212 | FloaterGridManager::getInstance()->childSetText("website", empty); | ||
213 | // FloaterGridManager::getInstance()->childSetText("first_name", empty); | ||
214 | // FloaterGridManager::getInstance()->childSetText("last_name", empty); | ||
215 | // FloaterGridManager::getInstance()->childSetText("avatar_password", empty); | ||
216 | } | ||
217 | } | ||
218 | else if (FloaterGridManager::getInstance()->getState() == ADD_NEW) | ||
219 | { | ||
220 | llinfos << "mState == ADD_NEW" << llendl; | ||
221 | std::string required = "<required>"; | ||
222 | std::string empty = ""; | ||
223 | FloaterGridManager::getInstance()->childSetText("gridnick", required); | ||
224 | FloaterGridManager::getInstance()->childSetText("gridname", empty); | ||
225 | FloaterGridManager::getInstance()->childSetText("loginuri", required); | ||
226 | FloaterGridManager::getInstance()->childSetText("loginpage", empty); | ||
227 | FloaterGridManager::getInstance()->childSetText("helperuri", empty); | ||
228 | FloaterGridManager::getInstance()->childSetText("website", empty); | ||
229 | FloaterGridManager::getInstance()->childSetText("support", empty); | ||
230 | FloaterGridManager::getInstance()->childSetText("register", empty); | ||
231 | FloaterGridManager::getInstance()->childSetText("password", empty); | ||
232 | // FloaterGridManager::getInstance()->childSetText("first_name", empty); | ||
233 | // FloaterGridManager::getInstance()->childSetText("last_name", empty); | ||
234 | // FloaterGridManager::getInstance()->childSetText("avatar_password", empty); | ||
235 | //childSetEnabled("search", true); | ||
236 | //childSetText("search", empty); | ||
237 | } | ||
238 | else if (FloaterGridManager::getInstance()->getState() == ADD_COPY) | ||
239 | { | ||
240 | llinfos << "mState == ADD_COPY" << llendl; | ||
241 | FloaterGridManager::getInstance()->childSetText("gridnick", LLStringExplicit("<required>")); | ||
242 | } | ||
243 | else | ||
244 | { | ||
245 | llwarns << "Illegal state " << FloaterGridManager::getInstance()->getState() << llendl; | ||
246 | } | ||
247 | return; | ||
248 | } | ||
249 | |||
250 | void FloaterGridManager::update() | ||
251 | { | ||
252 | setState(NORMAL); | ||
253 | setCurGrid(gHippoGridManager->getCurrentGridNick()); | ||
254 | refreshGrids(); | ||
255 | //KOW gHippoLimits->setLimits(); | ||
256 | } | ||
257 | |||
258 | void FloaterGridManager::applyChanges() | ||
259 | { | ||
260 | HippoGridInfo* gridInfo = gHippoGridManager->getGrid(mCurGrid); | ||
261 | if (gridInfo) | ||
262 | { | ||
263 | if (gridInfo->getGridNick() == childGetValue("gridnick").asString()) | ||
264 | { | ||
265 | gridInfo->setGridName(childGetValue("gridname")); | ||
266 | gridInfo->setLoginUri(childGetValue("loginuri")); | ||
267 | gridInfo->setLoginPage(childGetValue("loginpage")); | ||
268 | gridInfo->setHelperUri(childGetValue("helperuri")); | ||
269 | gridInfo->setWebSite(childGetValue("website")); | ||
270 | gridInfo->setSupportUrl(childGetValue("support")); | ||
271 | gridInfo->setRegisterUrl(childGetValue("register")); | ||
272 | gridInfo->setPasswordUrl(childGetValue("password")); | ||
273 | //gridInfo->setSearchUrl(childGetValue("search")); | ||
274 | gridInfo->setRenderCompat(childGetValue("render_compat")); | ||
275 | |||
276 | // gridInfo->setFirstName(childGetValue("first_name")); | ||
277 | // gridInfo->setLastName(childGetValue("last_name")); | ||
278 | // if(childGetValue("avatar_password").asString().empty()) | ||
279 | // gridInfo->setAvatarPassword(std::string("")); | ||
280 | // else if(childGetValue("avatar_password").asString() != std::string(PASSWORD_FILLER)) | ||
281 | // { | ||
282 | // // store account authentication data | ||
283 | // std::string auth_password = childGetValue("avatar_password"); | ||
284 | // std::string hashed_password; | ||
285 | // hashPassword(auth_password, hashed_password); | ||
286 | // gridInfo->setAvatarPassword(hashed_password); | ||
287 | // } | ||
288 | |||
289 | //this bug was a feature -Patrick Sapinski (Friday, August 21, 2009) | ||
290 | //LLPanelLogin::setFields(gridInfo->getFirstName(), gridInfo->getLastName(), | ||
291 | // gridInfo->getAvatarPassword(), true); | ||
292 | } | ||
293 | else | ||
294 | { | ||
295 | llwarns << "Grid nickname mismatch, ignoring changes." << llendl; | ||
296 | } | ||
297 | } | ||
298 | } | ||
299 | |||
300 | |||
301 | bool FloaterGridManager::createNewGrid() | ||
302 | { | ||
303 | // check nickname | ||
304 | std::string gridnick = childGetValue("gridnick"); | ||
305 | if (gridnick == "<required>") | ||
306 | { | ||
307 | gridnick = ""; | ||
308 | } | ||
309 | |||
310 | if (gridnick.empty()) | ||
311 | { | ||
312 | //KOW gViewerWindow->alertXml("GridsNoNick"); | ||
313 | return false; | ||
314 | } | ||
315 | |||
316 | if (gHippoGridManager->getGrid(gridnick)) | ||
317 | { | ||
318 | //LLStringUtil::format_map_t args; | ||
319 | //args["[NAME]"] = gridnick; | ||
320 | //KOW gViewerWindow->alertXml("GridExists", args); | ||
321 | return false; | ||
322 | } | ||
323 | |||
324 | // check login URI | ||
325 | std::string loginuri = childGetValue("loginuri"); | ||
326 | if ((loginuri.empty()) || (loginuri == "<required>")) | ||
327 | { | ||
328 | //LLStringUtil::format_map_t args; | ||
329 | //args["[NAME]"] = gridnick; | ||
330 | //KOW gViewerWindow->alertXml("GridsNoLoginUri", args); | ||
331 | return false; | ||
332 | } | ||
333 | |||
334 | // create new grid | ||
335 | HippoGridInfo* grid = new HippoGridInfo(gridnick); | ||
336 | grid->setGridName(childGetValue("gridname")); | ||
337 | grid->setLoginUri(loginuri); | ||
338 | grid->setLoginPage(childGetValue("loginpage")); | ||
339 | grid->setHelperUri(childGetValue("helperuri")); | ||
340 | grid->setWebSite(childGetValue("website")); | ||
341 | grid->setSupportUrl(childGetValue("support")); | ||
342 | grid->setRegisterUrl(childGetValue("register")); | ||
343 | grid->setPasswordUrl(childGetValue("password")); | ||
344 | //grid->setSearchUrl(childGetValue("search")); | ||
345 | grid->setRenderCompat(childGetValue("render_compat")); | ||
346 | gHippoGridManager->addGrid(grid); | ||
347 | |||
348 | // grid->setFirstName(childGetValue("first_name")); | ||
349 | // grid->setLastName(childGetValue("last_name")); | ||
350 | // if(childGetValue("avatar_password").asString().empty()) | ||
351 | // grid->setAvatarPassword(std::string("")); | ||
352 | // else | ||
353 | // { | ||
354 | // std::string hashed_password; | ||
355 | // hashPassword(childGetValue("avatar_password"), hashed_password); | ||
356 | // grid->setAvatarPassword(hashed_password); | ||
357 | // } | ||
358 | |||
359 | setCurGrid(gridnick); | ||
360 | return true; | ||
361 | } | ||
362 | |||
363 | void FloaterGridManager::retrieveGridInfo() | ||
364 | { | ||
365 | std::string loginuri = childGetValue("loginuri"); | ||
366 | if ((loginuri == "") || (loginuri == "<required>")) | ||
367 | { | ||
368 | //KOW gViewerWindow->alertXml("GridInfoNoLoginUri"); | ||
369 | return; | ||
370 | } | ||
371 | |||
372 | HippoGridInfo* grid = 0; | ||
373 | bool cleanupGrid = false; | ||
374 | |||
375 | if (mState == NORMAL) | ||
376 | { | ||
377 | grid = gHippoGridManager->getGrid(mCurGrid); | ||
378 | } | ||
379 | else if ((mState == ADD_NEW) || (mState == ADD_COPY)) | ||
380 | { | ||
381 | grid = new HippoGridInfo(""); | ||
382 | cleanupGrid = true; | ||
383 | } | ||
384 | else | ||
385 | { | ||
386 | llerrs << "Illegal state " << mState << '.' << llendl; | ||
387 | return; | ||
388 | } | ||
389 | if (!grid) | ||
390 | { | ||
391 | llerrs << "Internal error retrieving grid info." << llendl; | ||
392 | return; | ||
393 | } | ||
394 | |||
395 | grid->setLoginUri(loginuri); | ||
396 | if (grid->retrieveGridInfo()) | ||
397 | { | ||
398 | if (grid->getGridNick() != "") childSetText("gridnick", grid->getGridNick()); | ||
399 | if (grid->getGridName() != "") childSetText("gridname", grid->getGridName()); | ||
400 | if (grid->getLoginUri() != "") childSetText("loginuri", grid->getLoginUri()); | ||
401 | if (grid->getLoginPage() != "") childSetText("loginpage", grid->getLoginPage()); | ||
402 | if (grid->getHelperUri() != "") childSetText("helperuri", grid->getHelperUri()); | ||
403 | if (grid->getWebSite() != "") childSetText("website", grid->getWebSite()); | ||
404 | if (grid->getSupportUrl() != "") childSetText("support", grid->getSupportUrl()); | ||
405 | if (grid->getRegisterUrl() != "") childSetText("register", grid->getRegisterUrl()); | ||
406 | if (grid->getPasswordUrl() != "") childSetText("password", grid->getPasswordUrl()); | ||
407 | //if (grid->getSearchUrl() != "") childSetText("search", grid->getSearchUrl()); | ||
408 | } | ||
409 | else | ||
410 | { | ||
411 | //KOW gViewerWindow->alertXml("GridInfoError"); | ||
412 | } | ||
413 | |||
414 | if (cleanupGrid) delete grid; | ||
415 | } | ||
416 | |||
417 | void FloaterGridManager::apply() | ||
418 | { | ||
419 | if (mState == NORMAL) | ||
420 | { | ||
421 | applyChanges(); | ||
422 | } | ||
423 | else if ((mState == ADD_NEW) || (mState == ADD_COPY)) | ||
424 | { | ||
425 | if (!createNewGrid()) return; | ||
426 | } | ||
427 | else | ||
428 | { | ||
429 | llwarns << "Illegal state " << mState << '.' << llendl; | ||
430 | return; | ||
431 | } | ||
432 | //gHippoGridManager->setCurrentGrid(mCurGrid); | ||
433 | //gHippoGridManager->setDefaultGrid(mCurGrid); | ||
434 | gHippoGridManager->saveFile(); | ||
435 | LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
436 | } | ||
437 | |||
438 | //void FloaterGridManager::setDefault() | ||
439 | //{ | ||
440 | // if (mState == NORMAL) | ||
441 | // { | ||
442 | // applyChanges(); | ||
443 | // } | ||
444 | // else if ((mState == ADD_NEW) || (mState == ADD_COPY)) | ||
445 | // { | ||
446 | // if (!createNewGrid()) return; | ||
447 | // } | ||
448 | // else | ||
449 | // { | ||
450 | // llwarns << "Illegal state " << mState << '.' << llendl; | ||
451 | // return; | ||
452 | // } | ||
453 | // gHippoGridManager->setCurrentGrid(mCurGrid); | ||
454 | // gHippoGridManager->setDefaultGrid(mCurGrid); | ||
455 | // gHippoGridManager->saveFile(); | ||
456 | // LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
457 | //} | ||
458 | |||
459 | void FloaterGridManager::onSelectGrid(LLUICtrl* ctrl, void* data) | ||
460 | { | ||
461 | FloaterGridManager* self = (FloaterGridManager*)data; | ||
462 | if (self->getState() == NORMAL) | ||
463 | { | ||
464 | self->applyChanges(); | ||
465 | } | ||
466 | else if ((self->getState() == ADD_NEW) || (self->getState() == ADD_COPY)) | ||
467 | { | ||
468 | if (self->createNewGrid()) | ||
469 | { | ||
470 | self->setState(NORMAL); | ||
471 | } | ||
472 | else | ||
473 | { | ||
474 | //LLScrollListCtrl *grids = self->getChild<LLScrollListCtrl>("grid_selector"); | ||
475 | //grids->setCurrentByIndex(grids->getItemCount() - 1); | ||
476 | return; | ||
477 | } | ||
478 | } | ||
479 | else | ||
480 | { | ||
481 | llwarns << "Illegal state " << self->getState() << llendl; | ||
482 | return; | ||
483 | } | ||
484 | self->setCurGrid(ctrl->getValue().asString()); | ||
485 | self->refreshGrids(); | ||
486 | } | ||
487 | |||
488 | //static | ||
489 | void FloaterGridManager::onClickDelete(void* data) | ||
490 | { | ||
491 | //llinfos << "onClickDelete" << llendl; | ||
492 | FloaterGridManager* self = (FloaterGridManager*)data; | ||
493 | if (self->getState() == NORMAL) | ||
494 | { | ||
495 | gHippoGridManager->deleteGrid(self->getCurGrid()); | ||
496 | } | ||
497 | self->update(); | ||
498 | } | ||
499 | |||
500 | //static | ||
501 | void FloaterGridManager::onClickAdd(void* data) | ||
502 | { | ||
503 | //llinfos << "onClickAdd" << llendl; | ||
504 | FloaterGridManager* self = (FloaterGridManager*)data; | ||
505 | self->setState(ADD_NEW); | ||
506 | self->refreshGrids(); | ||
507 | } | ||
508 | |||
509 | |||
510 | //static | ||
511 | void FloaterGridManager::onClickCopy(void* data) | ||
512 | { | ||
513 | //llinfos << "onClickCopy" << llendl; | ||
514 | FloaterGridManager* self = (FloaterGridManager*)data; | ||
515 | self->setState(ADD_COPY); | ||
516 | self->refreshGrids(); | ||
517 | } | ||
518 | |||
519 | // static | ||
520 | void FloaterGridManager::onClickOk(void* data) | ||
521 | { | ||
522 | FloaterGridManager::getInstance()->apply(); | ||
523 | FloaterGridManager::getInstance()->close(); | ||
524 | } | ||
525 | |||
526 | //static | ||
527 | void FloaterGridManager::onClickApply(void* data) | ||
528 | { | ||
529 | FloaterGridManager::getInstance()->apply(); | ||
530 | refreshGrids(); | ||
531 | } | ||
532 | |||
533 | // static | ||
534 | void FloaterGridManager::onClickClear(void* data) | ||
535 | { | ||
536 | gHippoGridManager->discardAndReload(); | ||
537 | FloaterGridManager::getInstance()->update(); | ||
538 | } | ||
539 | |||
540 | //static | ||
541 | //void FloaterGridManager::onClickDefault(void* data) | ||
542 | //{ | ||
543 | // FloaterGridManager::getInstance()->setDefault(); | ||
544 | // FloaterGridManager::getInstance()->refreshGrids(); | ||
545 | //} | ||
546 | |||
547 | //static | ||
548 | void FloaterGridManager::onClickGridInfo(void* data) | ||
549 | { | ||
550 | //HippoPanelGrids* self = (HippoPanelGrids*)data; | ||
551 | FloaterGridManager::getInstance()->retrieveGridInfo(); | ||
552 | } | ||
553 | |||
554 | //static | ||
555 | void FloaterGridManager::onClickCancel(void* data) | ||
556 | { | ||
557 | FloaterGridManager::getInstance()->close(); | ||
558 | } | ||
559 | |||
560 | //void FloaterGridManager::setAlwaysRefresh(bool refresh) | ||
561 | //{ | ||
562 | // // wargames 2: dead code, LLPanelLogin compatibility | ||
563 | // return; | ||
564 | //} | ||
565 | |||
566 | //void FloaterGridManager::refreshLocation( bool force_visible ) | ||
567 | //{ | ||
568 | // llinfos << "refreshLocation called" << llendl; | ||
569 | // | ||
570 | // if (!FloaterGridManager::getInstance()) | ||
571 | // { | ||
572 | // return; | ||
573 | // } | ||
574 | |||
575 | //LLComboBox* combo = FloaterGridManager::getInstance()->getChild<LLComboBox>("start_location_combo"); | ||
576 | // | ||
577 | //if (LLURLSimString::parse()) | ||
578 | //{ | ||
579 | // combo->setCurrentByIndex( 3 ); // BUG? Maybe 2? | ||
580 | // combo->setTextEntry(LLURLSimString::FloaterGridManager::getInstance().mSimString); | ||
581 | //} | ||
582 | //else | ||
583 | //{ | ||
584 | // BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); | ||
585 | // combo->setCurrentByIndex( login_last ? 1 : 0 ); | ||
586 | //} | ||
587 | // | ||
588 | //BOOL show_start = TRUE; | ||
589 | // | ||
590 | //if (!force_visible) | ||
591 | // show_start = gSavedSettings.getBOOL("ShowStartLocation"); | ||
592 | // | ||
593 | //FloaterGridManager::getInstance()->childSetVisible("start_location_combo", show_start); | ||
594 | //FloaterGridManager::getInstance()->childSetVisible("start_location_text", show_start); | ||
595 | //FloaterGridManager::getInstance()->childSetVisible("server_combo", TRUE); | ||
596 | //} | ||
597 | |||
598 | //void FloaterGridManager::newShow(const std::string &grid, bool initialLogin) | ||
599 | //{ | ||
600 | // llinfos << "newShow called" << llendl; | ||
601 | // /*if (!FloaterGridManager::getInstance()) | ||
602 | // { | ||
603 | // FloaterGridManager::sGrid = grid; | ||
604 | // FloaterGridManager::sIsInitialLogin = initialLogin; | ||
605 | // FloaterGridManager::getInstance() = new FloaterGridManager(); | ||
606 | // | ||
607 | // llinfos << "FloaterGridManager::getInstance() assigned. FloaterGridManager::getInstance()=" << FloaterGridManager::getInstance() << llendl; | ||
608 | // }*/ | ||
609 | // | ||
610 | // llinfos << "newshow called" << llendl; | ||
611 | // FloaterGridManager::getInstance()->setCurGrid(gHippoGridManager->getCurrentGridNick()); | ||
612 | // refreshGrids(); | ||
613 | // | ||
614 | // FloaterGridManager::getInstance()->open(); | ||
615 | // // we're important | ||
616 | // //FloaterGridManager::getInstance()->setFrontmost(TRUE); | ||
617 | // //FloaterGridManager::getInstance()->setFocus(TRUE); | ||
618 | // | ||
619 | //} | ||
620 | |||
621 | //void FloaterGridManager::show(const LLRect &rect, BOOL show_server, | ||
622 | // void (*callback)(S32 option, void* user_data), | ||
623 | // void* callback_data) | ||
624 | //{ | ||
625 | // // we don't need a grid passed in because this is old-style login | ||
626 | // std::string grid = ""; | ||
627 | // newShow(grid, TRUE); | ||
628 | //} | ||
629 | |||
630 | //void FloaterGridManager::setFocus(BOOL b) | ||
631 | //{ | ||
632 | // if(b != hasFocus()) | ||
633 | // { | ||
634 | // if(b) | ||
635 | // { | ||
636 | // FloaterGridManager::giveFocus(); | ||
637 | // } | ||
638 | // else | ||
639 | // { | ||
640 | // LLPanel::setFocus(b); | ||
641 | // } | ||
642 | // } | ||
643 | //} | ||
644 | // | ||
645 | //void FloaterGridManager::giveFocus() | ||
646 | //{ | ||
647 | // LLScrollListCtrl *combo = NULL; | ||
648 | // | ||
649 | // if (!FloaterGridManager::getInstance()) | ||
650 | // { | ||
651 | // llinfos << "giveFocus has no FloaterGridManager instance. FloaterGridManager::getInstance()=" << FloaterGridManager::getInstance() << llendl; | ||
652 | // return; | ||
653 | // } | ||
654 | // | ||
655 | // // for our combo box approach, selecting the combo box is almost always | ||
656 | // // the right thing to do on the floater receiving focus | ||
657 | // combo = FloaterGridManager::getInstance()->getChild<LLScrollListCtrl>("grid_selector"); | ||
658 | // combo->setFocus(TRUE); | ||
659 | //} | ||
660 | |||
661 | BOOL FloaterGridManager::isGridComboDirty() | ||
662 | { | ||
663 | BOOL user_picked = FALSE; | ||
664 | if (!FloaterGridManager::getInstance()) | ||
665 | { | ||
666 | llwarns << "Attempted getServer with no login view shown" << llendl; | ||
667 | } | ||
668 | else | ||
669 | { | ||
670 | LLComboBox* combo = FloaterGridManager::getInstance()->getChild<LLComboBox>("server_combo"); | ||
671 | user_picked = combo->isDirty(); | ||
672 | } | ||
673 | return user_picked; | ||
674 | } | ||
675 | |||
676 | void FloaterGridManager::getLocation(std::string &location) | ||
677 | { | ||
678 | if (!FloaterGridManager::getInstance()) | ||
679 | { | ||
680 | llwarns << "Attempted getLocation with no login view shown" << llendl; | ||
681 | return; | ||
682 | } | ||
683 | |||
684 | LLComboBox* combo = FloaterGridManager::getInstance()->getChild<LLComboBox>("start_location_combo"); | ||
685 | location = combo->getValue().asString(); | ||
686 | } | ||
687 | |||
688 | std::string& FloaterGridManager::getPassword() | ||
689 | { | ||
690 | return mMungedPassword; | ||
691 | } | ||
692 | |||
693 | void FloaterGridManager::setPassword(std::string &password) | ||
694 | { | ||
695 | mMungedPassword = password; | ||
696 | } | ||
697 | |||
698 | bool FloaterGridManager::isSamePassword(std::string &password) | ||
699 | { | ||
700 | return mMungedPassword == password; | ||
701 | } | ||
702 | |||
703 | //void FloaterGridManager::addServer(const std::string& server, S32 domain_name) | ||
704 | //{ | ||
705 | // if (!FloaterGridManager::getInstance()) | ||
706 | // { | ||
707 | // llwarns << "Attempted addServer with no login view shown" << llendl; | ||
708 | // return; | ||
709 | // } | ||
710 | // | ||
711 | // /*LLComboBox* combo = FloaterGridManager::getInstance()->getChild<LLComboBox>("server_combo"); | ||
712 | // combo->add(server, LLSD(domain_name) ); | ||
713 | // combo->setCurrentByIndex(0);*/ | ||
714 | //} | ||
715 | |||
716 | //void FloaterGridManager::cancel_old() | ||
717 | //{ | ||
718 | // if (!FloaterGridManager::getInstance()) | ||
719 | // { | ||
720 | // return; | ||
721 | // } | ||
722 | // | ||
723 | // if (FloaterGridManager::getInstance()->sIsInitialLogin) | ||
724 | // { | ||
725 | // // send a callback that indicates we're quitting or closing | ||
726 | // if (FloaterGridManager::getInstance()->mCallback) | ||
727 | // FloaterGridManager::getInstance()->mCallback(LOGIN_OPTION_QUIT, FloaterGridManager::getInstance()->mCallbackData); | ||
728 | // return; | ||
729 | // } | ||
730 | // | ||
731 | // FloaterGridManager::getInstance()->close(); | ||
732 | //} | ||
733 | |||
734 | void FloaterGridManager::hashPassword(const std::string& password, std::string& hashedPassword) | ||
735 | { | ||
736 | // Max "actual" password length is 16 characters. | ||
737 | // Hex digests are always 32 characters. | ||
738 | if (password.length() == 32) | ||
739 | { | ||
740 | hashedPassword = password; | ||
741 | } | ||
742 | else | ||
743 | { | ||
744 | // this is a normal text password | ||
745 | LLMD5 pass((unsigned char *)password.c_str()); | ||
746 | char munged_password[MD5HEX_STR_SIZE]; | ||
747 | pass.hex_digest(munged_password); | ||
748 | hashedPassword = munged_password; | ||
749 | } | ||
750 | } | ||
diff --git a/linden/indra/newview/floatergridmanager.h b/linden/indra/newview/floatergridmanager.h new file mode 100644 index 0000000..16720bd --- /dev/null +++ b/linden/indra/newview/floatergridmanager.h | |||
@@ -0,0 +1,93 @@ | |||
1 | /* | ||
2 | * floatergridmanager.h | ||
3 | * This is Meerkats grid manager. | ||
4 | * -Patrick Sapinski (Monday, August 17, 2009) | ||
5 | * | ||
6 | * Modified by McCabe Maxsted for Imprudence | ||
7 | */ | ||
8 | |||
9 | #ifndef PL_floaterlogin_H | ||
10 | #define PL_floaterlogin_H | ||
11 | |||
12 | #define LOGIN_OPTION_CONNECT 0 | ||
13 | #define LOGIN_OPTION_QUIT 1 | ||
14 | |||
15 | #include "llfloater.h" | ||
16 | |||
17 | class LoginController; | ||
18 | class AuthenticationModel; | ||
19 | |||
20 | class FloaterGridManager : public LLFloater, public LLFloaterSingleton<FloaterGridManager> | ||
21 | { | ||
22 | public: | ||
23 | FloaterGridManager(const LLSD& key); | ||
24 | virtual ~FloaterGridManager(); | ||
25 | |||
26 | /*virtual*/ BOOL postBuild(); | ||
27 | |||
28 | static void refreshGrids(); | ||
29 | void apply(); | ||
30 | //void setDefault(); | ||
31 | void cancel(); | ||
32 | |||
33 | // new-style login methods | ||
34 | virtual std::string& getPassword(); | ||
35 | virtual void setPassword(std::string &password); | ||
36 | virtual bool isSamePassword(std::string &password); | ||
37 | static void getFields(std::string &loginname, std::string &password, | ||
38 | BOOL &remember); | ||
39 | static void setFields(const std::string &loginname, const std::string &password, | ||
40 | BOOL remember); | ||
41 | |||
42 | // LLLoginPanel compatibility | ||
43 | /*static void setAlwaysRefresh(bool refresh); | ||
44 | static void refreshLocation(bool force_visible); | ||
45 | virtual void setFocus(BOOL b); | ||
46 | static void giveFocus();*/ | ||
47 | static void getLocation(std::string &location); | ||
48 | static BOOL isGridComboDirty(); | ||
49 | //static void addServer(const std::string& server, S32 domain_name); | ||
50 | static void hashPassword(const std::string& password, std::string& hashedPassword); | ||
51 | protected: | ||
52 | static bool sIsInitialLogin; | ||
53 | static std::string sGrid; | ||
54 | private: | ||
55 | enum State | ||
56 | { | ||
57 | NORMAL, | ||
58 | ADD_NEW, | ||
59 | ADD_COPY | ||
60 | }; | ||
61 | |||
62 | State mState; | ||
63 | void setState(const State& state) { mState = state; } | ||
64 | State getState() { return mState; } | ||
65 | |||
66 | std::string mCurGrid; | ||
67 | void setCurGrid(const std::string& grid) { mCurGrid = grid; } | ||
68 | std::string getCurGrid() { return mCurGrid; } | ||
69 | |||
70 | std::string mIncomingPassword; | ||
71 | std::string mMungedPassword; | ||
72 | |||
73 | void applyChanges(); | ||
74 | bool createNewGrid(); | ||
75 | void update(); | ||
76 | void retrieveGridInfo(); | ||
77 | |||
78 | static void onSelectGrid(LLUICtrl* ctrl, void* data); | ||
79 | static void onClickDelete(void* data); | ||
80 | static void onClickAdd(void* data); | ||
81 | static void onClickCopy(void* data); | ||
82 | static void onClickOk(void* data); | ||
83 | static void onClickApply(void* data); | ||
84 | static void onClickDefault(void* data); | ||
85 | static void onClickGridInfo(void* data); | ||
86 | static void onClickCancel(void* data); | ||
87 | static void onClickClear(void* data); | ||
88 | |||
89 | static LoginController* sController; | ||
90 | static AuthenticationModel* sModel; | ||
91 | }; | ||
92 | |||
93 | #endif // PL_floaterlogin_H | ||
diff --git a/linden/indra/newview/floaterlogin.cpp b/linden/indra/newview/floaterlogin.cpp deleted file mode 100644 index 78aa0a2..0000000 --- a/linden/indra/newview/floaterlogin.cpp +++ /dev/null | |||
@@ -1,722 +0,0 @@ | |||
1 | /* | ||
2 | * floaterlogin.cpp (floatergridmanager.cpp pls) | ||
3 | * This is Meerkats grid manager, and I accidentally finished it with the wrong name :) | ||
4 | * -Patrick Sapinski (Monday, August 17, 2009) | ||
5 | */ | ||
6 | |||
7 | #include "llviewerprecompiledheaders.h" | ||
8 | |||
9 | #include <boost/algorithm/string.hpp> | ||
10 | #include "llviewercontrol.h" | ||
11 | #include "llcombobox.h" | ||
12 | #include "llscrolllistctrl.h" | ||
13 | #include "llmd5.h" | ||
14 | #include "llurlsimstring.h" | ||
15 | #include "lluictrlfactory.h" | ||
16 | #include "floaterlogin.h" | ||
17 | #include "hippoGridManager.h" | ||
18 | #include "llviewernetwork.h" | ||
19 | #include "llpanellogin.h" | ||
20 | |||
21 | #define PASSWORD_FILLER "123456789!123456" | ||
22 | |||
23 | LoginFloater* LoginFloater::sInstance = NULL; | ||
24 | LoginController* LoginFloater::sController = NULL; | ||
25 | bool LoginFloater::sIsInitialLogin; | ||
26 | std::string LoginFloater::sGrid; | ||
27 | |||
28 | LoginFloater::LoginFloater() | ||
29 | : LLFloater("floater_login") | ||
30 | { | ||
31 | |||
32 | mState = NORMAL; | ||
33 | LLUICtrlFactory::getInstance()->buildFloater(this, "floater_login.xml"); | ||
34 | |||
35 | |||
36 | llwarns << "LoginFloater called" << llendl; | ||
37 | |||
38 | |||
39 | // configure the floater interface for non-initial login | ||
40 | setCanMinimize(!sIsInitialLogin); | ||
41 | setCanClose(!sIsInitialLogin); | ||
42 | setCanDrag(!sIsInitialLogin); | ||
43 | childSetVisible("server_combo", sIsInitialLogin); | ||
44 | |||
45 | if(!sIsInitialLogin) | ||
46 | { | ||
47 | LLButton* quit_btn = getChild<LLButton>("quit_btn"); | ||
48 | quit_btn->setLabel(std::string("Cancel")); | ||
49 | setTitle(std::string("Grid Manager")); | ||
50 | } | ||
51 | |||
52 | center(); | ||
53 | LLLineEditor* edit = getChild<LLLineEditor>("avatar_password_edit"); | ||
54 | if (edit) edit->setDrawAsterixes(TRUE); | ||
55 | LLComboBox* combo = getChild<LLComboBox>("start_location_combo"); | ||
56 | combo->setAllowTextEntry(TRUE, 128, FALSE); | ||
57 | |||
58 | BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); | ||
59 | std::string sim_string = LLURLSimString::sInstance.mSimString; | ||
60 | if (!sim_string.empty()) | ||
61 | { | ||
62 | // Replace "<Type region name>" with this region name | ||
63 | combo->remove(2); | ||
64 | combo->add( sim_string ); | ||
65 | combo->setTextEntry(sim_string); | ||
66 | combo->setCurrentByIndex( 2 ); | ||
67 | } | ||
68 | else if (login_last) | ||
69 | { | ||
70 | combo->setCurrentByIndex( 1 ); | ||
71 | } | ||
72 | else | ||
73 | { | ||
74 | combo->setCurrentByIndex( 0 ); | ||
75 | } | ||
76 | } | ||
77 | |||
78 | |||
79 | LoginFloater::~LoginFloater() | ||
80 | { | ||
81 | LoginFloater::sController = NULL; | ||
82 | LoginFloater::sInstance = NULL; | ||
83 | } | ||
84 | |||
85 | void LoginFloater::close() | ||
86 | { | ||
87 | if(sInstance) | ||
88 | { | ||
89 | delete sInstance; | ||
90 | sInstance = NULL; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | BOOL LoginFloater::postBuild() | ||
95 | { | ||
96 | requires<LLScrollListCtrl>("grid_selector"); | ||
97 | requires<LLLineEditor>("gridnick"); | ||
98 | requires<LLLineEditor>("gridname"); | ||
99 | requires<LLLineEditor>("loginuri"); | ||
100 | requires<LLLineEditor>("loginpage"); | ||
101 | requires<LLLineEditor>("helperuri"); | ||
102 | requires<LLLineEditor>("website"); | ||
103 | requires<LLLineEditor>("support"); | ||
104 | requires<LLLineEditor>("register"); | ||
105 | requires<LLLineEditor>("password"); | ||
106 | requires<LLLineEditor>("first_name"); | ||
107 | requires<LLLineEditor>("last_name"); | ||
108 | requires<LLLineEditor>("avatar_password"); | ||
109 | //requires<LLLineEditor>("search"); | ||
110 | requires<LLButton>("btn_delete"); | ||
111 | requires<LLButton>("btn_add"); | ||
112 | requires<LLButton>("btn_copy"); | ||
113 | requires<LLButton>("set_default"); | ||
114 | requires<LLButton>("btn_gridinfo"); | ||
115 | requires<LLButton>("btn_help_render_compat"); | ||
116 | if (!checkRequirements()) return false; | ||
117 | LLLineEditor* password_edit = getChild<LLLineEditor>("avatar_password"); | ||
118 | if (password_edit) password_edit->setDrawAsterixes(TRUE); | ||
119 | |||
120 | childSetAction("btn_delete", onClickDelete, this); | ||
121 | childSetAction("btn_add", onClickAdd, this); | ||
122 | childSetAction("btn_copy", onClickCopy, this); | ||
123 | childSetAction("btn_ok", onClickOk, this); | ||
124 | childSetAction("btn_apply", onClickApply, this); | ||
125 | // childSetAction("set_default", onClickDefault, this); | ||
126 | childSetAction("btn_cancel", onClickCancel, this); | ||
127 | childSetAction("btn_gridinfo", onClickGridInfo, this); | ||
128 | // childSetAction("btn_help_render_compat", onClickHelpRenderCompat, this); | ||
129 | |||
130 | childSetCommitCallback("grid_selector", onSelectGrid, this); | ||
131 | //KOW childSetCommitCallback("platform", onSelectPlatform, this); | ||
132 | |||
133 | // !!!### server_choice_combo->setFocusLostCallback(onServerComboLostFocus); | ||
134 | |||
135 | //KOW update(); | ||
136 | return TRUE; | ||
137 | } | ||
138 | |||
139 | void LoginFloater::refresh_grids() | ||
140 | { | ||
141 | const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick(); | ||
142 | LLScrollListCtrl *grids = sInstance->getChild<LLScrollListCtrl>("grid_selector"); | ||
143 | S32 selectIndex = -1, i = 0; | ||
144 | grids->deleteAllItems(); | ||
145 | if (defaultGrid != "") { | ||
146 | LLSD value; | ||
147 | value["id"] = defaultGrid; | ||
148 | value["columns"][0]["column"] = "grid"; | ||
149 | value["columns"][0]["value"] = defaultGrid; | ||
150 | grids->addElement(value); | ||
151 | selectIndex = i++; | ||
152 | } | ||
153 | |||
154 | HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid(); | ||
155 | for (it = gHippoGridManager->beginGrid(); it != end; ++it) { | ||
156 | const std::string &grid = it->second->getGridNick(); | ||
157 | if (grid != defaultGrid) { | ||
158 | LLSD value; | ||
159 | value["id"] = grid; | ||
160 | value["columns"][0]["column"] = "grid"; | ||
161 | value["columns"][0]["value"] = grid; | ||
162 | grids->addElement(value); | ||
163 | |||
164 | if (grid == sInstance->mCurGrid) selectIndex = i; | ||
165 | i++; | ||
166 | } | ||
167 | } | ||
168 | if ((sInstance->mState == ADD_NEW) || (sInstance->mState == ADD_COPY)) { | ||
169 | grids->addElement("<new>"); | ||
170 | selectIndex = i++; | ||
171 | } | ||
172 | if (selectIndex >= 0) { | ||
173 | //grids->setCurrentByIndex(selectIndex); | ||
174 | } else { | ||
175 | //grids->setLabel(LLStringExplicit("")); // LLComboBox::removeall() does not clear the label | ||
176 | } | ||
177 | |||
178 | // sInstance->childSetTextArg("default_grid", "[DEFAULT]", (defaultGrid != "")? defaultGrid: " "); | ||
179 | |||
180 | sInstance->childSetEnabled("btn_delete", (selectIndex >= 0)); | ||
181 | sInstance->childSetEnabled("btn_copy", (sInstance->mState == NORMAL) && (selectIndex >= 0)); | ||
182 | // sInstance->childSetEnabled("set_default", (sInstance->mState == NORMAL) && (selectIndex > 0)); | ||
183 | sInstance->childSetEnabled("gridnick", (sInstance->mState == ADD_NEW) || (sInstance->mState == ADD_COPY)); | ||
184 | |||
185 | if (sInstance->mState == NORMAL) { | ||
186 | HippoGridInfo *gridInfo = gHippoGridManager->getGrid(sInstance->mCurGrid); | ||
187 | if (gridInfo) { | ||
188 | sInstance->childSetText("gridnick", gridInfo->getGridNick()); | ||
189 | //sInstance->childSetText("grid_name", gridInfo->getGridName()); | ||
190 | sInstance->childSetText("loginuri", gridInfo->getLoginUri()); | ||
191 | sInstance->childSetText("loginpage", gridInfo->getLoginPage()); | ||
192 | sInstance->childSetText("helperuri", gridInfo->getHelperUri()); | ||
193 | sInstance->childSetText("website", gridInfo->getWebSite()); | ||
194 | sInstance->childSetText("support", gridInfo->getSupportUrl()); | ||
195 | sInstance->childSetText("register", gridInfo->getRegisterUrl()); | ||
196 | sInstance->childSetText("password", gridInfo->getPasswordUrl()); | ||
197 | |||
198 | // sInstance->childSetText("first_name", gridInfo->getFirstName()); | ||
199 | // sInstance->childSetText("last_name", gridInfo->getLastName()); | ||
200 | // if(gridInfo->getAvatarPassword().length() == 32) | ||
201 | // sInstance->childSetText("avatar_password", std::string(PASSWORD_FILLER)); | ||
202 | // else if(gridInfo->getPasswordUrl().empty()) | ||
203 | // sInstance->childSetText("avatar_password", std::string("")); | ||
204 | |||
205 | // if (gridInfo->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE) { | ||
206 | // //childSetEnabled("search", false); | ||
207 | // //childSetText("search", LLStringExplicit("")); | ||
208 | // childSetEnabled("render_compat", false); | ||
209 | // childSetValue("render_compat", false); | ||
210 | // } else { | ||
211 | // //childSetEnabled("search", true); | ||
212 | // //childSetText("search", gridInfo->getSearchUrl()); | ||
213 | // childSetEnabled("render_compat", true); | ||
214 | // childSetValue("render_compat", gridInfo->isRenderCompat()); | ||
215 | // } | ||
216 | |||
217 | } else { | ||
218 | std::string empty = ""; | ||
219 | sInstance->childSetText("gridnick", empty); | ||
220 | sInstance->childSetText("gridname", empty); | ||
221 | sInstance->childSetText("loginuri", empty); | ||
222 | sInstance->childSetText("loginpage", empty); | ||
223 | sInstance->childSetText("helperuri", empty); | ||
224 | sInstance->childSetText("website", empty); | ||
225 | // sInstance->childSetText("first_name", empty); | ||
226 | // sInstance->childSetText("last_name", empty); | ||
227 | // sInstance->childSetText("avatar_password", empty); | ||
228 | } | ||
229 | } else if (sInstance->mState == ADD_NEW) { | ||
230 | llwarns << "ADD_NEW" << llendl; | ||
231 | std::string required = "<required>"; | ||
232 | std::string empty = ""; | ||
233 | sInstance->childSetText("gridnick", required); | ||
234 | sInstance->childSetText("gridname", empty); | ||
235 | sInstance->childSetText("loginuri", required); | ||
236 | sInstance->childSetText("loginpage", empty); | ||
237 | sInstance->childSetText("helperuri", empty); | ||
238 | sInstance->childSetText("website", empty); | ||
239 | sInstance->childSetText("support", empty); | ||
240 | sInstance->childSetText("register", empty); | ||
241 | sInstance->childSetText("password", empty); | ||
242 | // sInstance->childSetText("first_name", empty); | ||
243 | // sInstance->childSetText("last_name", empty); | ||
244 | // sInstance->childSetText("avatar_password", empty); | ||
245 | //childSetEnabled("search", true); | ||
246 | //childSetText("search", empty); | ||
247 | } else if (sInstance->mState == ADD_COPY) { | ||
248 | llwarns << "ADD_COPY" << llendl; | ||
249 | sInstance->childSetText("gridnick", LLStringExplicit("<required>")); | ||
250 | } else { | ||
251 | llwarns << "Illegal state " << sInstance->mState << '.' << llendl; | ||
252 | } | ||
253 | return; | ||
254 | } | ||
255 | |||
256 | void LoginFloater::update() | ||
257 | { | ||
258 | mState = NORMAL; | ||
259 | mCurGrid = gHippoGridManager->getCurrentGridNick(); | ||
260 | refresh_grids(); | ||
261 | //KOW gHippoLimits->setLimits(); | ||
262 | } | ||
263 | |||
264 | void LoginFloater::applyChanges() | ||
265 | { | ||
266 | HippoGridInfo *gridInfo = gHippoGridManager->getGrid(mCurGrid); | ||
267 | if (gridInfo) | ||
268 | { | ||
269 | if (gridInfo->getGridNick() == childGetValue("gridnick").asString()) | ||
270 | { | ||
271 | gridInfo->setGridName(childGetValue("gridname")); | ||
272 | gridInfo->setLoginUri(childGetValue("loginuri")); | ||
273 | gridInfo->setLoginPage(childGetValue("loginpage")); | ||
274 | gridInfo->setHelperUri(childGetValue("helperuri")); | ||
275 | gridInfo->setWebSite(childGetValue("website")); | ||
276 | gridInfo->setSupportUrl(childGetValue("support")); | ||
277 | gridInfo->setRegisterUrl(childGetValue("register")); | ||
278 | gridInfo->setPasswordUrl(childGetValue("password")); | ||
279 | //gridInfo->setSearchUrl(childGetValue("search")); | ||
280 | gridInfo->setRenderCompat(childGetValue("render_compat")); | ||
281 | |||
282 | // gridInfo->setFirstName(childGetValue("first_name")); | ||
283 | // gridInfo->setLastName(childGetValue("last_name")); | ||
284 | // if(childGetValue("avatar_password").asString().empty()) | ||
285 | // gridInfo->setAvatarPassword(std::string("")); | ||
286 | // else if(childGetValue("avatar_password").asString() != std::string(PASSWORD_FILLER)) | ||
287 | // { | ||
288 | // // store account authentication data | ||
289 | // std::string auth_password = childGetValue("avatar_password"); | ||
290 | // std::string hashed_password; | ||
291 | // hashPassword(auth_password, hashed_password); | ||
292 | // gridInfo->setAvatarPassword(hashed_password); | ||
293 | // } | ||
294 | |||
295 | //this bug was a feature -Patrick Sapinski (Friday, August 21, 2009) | ||
296 | //LLPanelLogin::setFields(gridInfo->getFirstName(), gridInfo->getLastName(), | ||
297 | // gridInfo->getAvatarPassword(), true); | ||
298 | } | ||
299 | else | ||
300 | { | ||
301 | llwarns << "Grid nickname mismatch, ignoring changes." << llendl; | ||
302 | } | ||
303 | } | ||
304 | } | ||
305 | |||
306 | |||
307 | bool LoginFloater::createNewGrid() | ||
308 | { | ||
309 | // check nickname | ||
310 | std::string gridnick = childGetValue("gridnick"); | ||
311 | if (gridnick == "<required>") gridnick = ""; | ||
312 | if (gridnick == "") { | ||
313 | //KOW gViewerWindow->alertXml("GridsNoNick"); | ||
314 | return false; | ||
315 | } | ||
316 | if (gHippoGridManager->getGrid(gridnick)) { | ||
317 | LLStringUtil::format_map_t args; | ||
318 | args["[NAME]"] = gridnick; | ||
319 | //KOW gViewerWindow->alertXml("GridExists", args); | ||
320 | return false; | ||
321 | } | ||
322 | |||
323 | // check login URI | ||
324 | std::string loginuri = childGetValue("loginuri"); | ||
325 | if ((loginuri == "") || (loginuri == "<required>")) { | ||
326 | LLStringUtil::format_map_t args; | ||
327 | args["[NAME]"] = gridnick; | ||
328 | //KOW gViewerWindow->alertXml("GridsNoLoginUri", args); | ||
329 | return false; | ||
330 | } | ||
331 | |||
332 | // create new grid | ||
333 | HippoGridInfo *grid = new HippoGridInfo(gridnick); | ||
334 | grid->setGridName(childGetValue("gridname")); | ||
335 | grid->setLoginUri(loginuri); | ||
336 | grid->setLoginPage(childGetValue("loginpage")); | ||
337 | grid->setHelperUri(childGetValue("helperuri")); | ||
338 | grid->setWebSite(childGetValue("website")); | ||
339 | grid->setSupportUrl(childGetValue("support")); | ||
340 | grid->setRegisterUrl(childGetValue("register")); | ||
341 | grid->setPasswordUrl(childGetValue("password")); | ||
342 | //grid->setSearchUrl(childGetValue("search")); | ||
343 | grid->setRenderCompat(childGetValue("render_compat")); | ||
344 | gHippoGridManager->addGrid(grid); | ||
345 | |||
346 | // grid->setFirstName(childGetValue("first_name")); | ||
347 | // grid->setLastName(childGetValue("last_name")); | ||
348 | // if(childGetValue("avatar_password").asString().empty()) | ||
349 | // grid->setAvatarPassword(std::string("")); | ||
350 | // else | ||
351 | // { | ||
352 | // std::string hashed_password; | ||
353 | // hashPassword(childGetValue("avatar_password"), hashed_password); | ||
354 | // grid->setAvatarPassword(hashed_password); | ||
355 | // } | ||
356 | |||
357 | mCurGrid = gridnick; | ||
358 | return true; | ||
359 | } | ||
360 | |||
361 | void LoginFloater::retrieveGridInfo() | ||
362 | { | ||
363 | std::string loginuri = childGetValue("loginuri"); | ||
364 | if ((loginuri == "") || (loginuri == "<required>")) { | ||
365 | //KOW gViewerWindow->alertXml("GridInfoNoLoginUri"); | ||
366 | return; | ||
367 | } | ||
368 | |||
369 | HippoGridInfo *grid = 0; | ||
370 | bool cleanupGrid = false; | ||
371 | if (mState == NORMAL) { | ||
372 | grid = gHippoGridManager->getGrid(mCurGrid); | ||
373 | } else if ((mState == ADD_NEW) || (mState == ADD_COPY)) { | ||
374 | grid = new HippoGridInfo(""); | ||
375 | cleanupGrid = true; | ||
376 | } else { | ||
377 | llerrs << "Illegal state " << mState << '.' << llendl; | ||
378 | return; | ||
379 | } | ||
380 | if (!grid) { | ||
381 | llerrs << "Internal error retrieving grid info." << llendl; | ||
382 | return; | ||
383 | } | ||
384 | |||
385 | grid->setLoginUri(loginuri); | ||
386 | if (grid->retrieveGridInfo()) { | ||
387 | if (grid->getGridNick() != "") childSetText("gridnick", grid->getGridNick()); | ||
388 | if (grid->getGridName() != "") childSetText("gridname", grid->getGridName()); | ||
389 | if (grid->getLoginUri() != "") childSetText("loginuri", grid->getLoginUri()); | ||
390 | if (grid->getLoginPage() != "") childSetText("loginpage", grid->getLoginPage()); | ||
391 | if (grid->getHelperUri() != "") childSetText("helperuri", grid->getHelperUri()); | ||
392 | if (grid->getWebSite() != "") childSetText("website", grid->getWebSite()); | ||
393 | if (grid->getSupportUrl() != "") childSetText("support", grid->getSupportUrl()); | ||
394 | if (grid->getRegisterUrl() != "") childSetText("register", grid->getRegisterUrl()); | ||
395 | if (grid->getPasswordUrl() != "") childSetText("password", grid->getPasswordUrl()); | ||
396 | //if (grid->getSearchUrl() != "") childSetText("search", grid->getSearchUrl()); | ||
397 | } else { | ||
398 | //KOW gViewerWindow->alertXml("GridInfoError"); | ||
399 | } | ||
400 | |||
401 | if (cleanupGrid) delete grid; | ||
402 | } | ||
403 | |||
404 | void LoginFloater::apply() | ||
405 | { | ||
406 | if (mState == NORMAL) { | ||
407 | applyChanges(); | ||
408 | } else if ((mState == ADD_NEW) || (mState == ADD_COPY)) { | ||
409 | if (!createNewGrid()) return; | ||
410 | } else { | ||
411 | llwarns << "Illegal state " << mState << '.' << llendl; | ||
412 | return; | ||
413 | } | ||
414 | //gHippoGridManager->setCurrentGrid(mCurGrid); | ||
415 | //gHippoGridManager->setDefaultGrid(mCurGrid); | ||
416 | //LLPanelLogin::refreshLoginPage(); | ||
417 | gHippoGridManager->saveFile(); | ||
418 | LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
419 | } | ||
420 | |||
421 | void LoginFloater::setDefault() | ||
422 | { | ||
423 | if (mState == NORMAL) { | ||
424 | applyChanges(); | ||
425 | } else if ((mState == ADD_NEW) || (mState == ADD_COPY)) { | ||
426 | if (!createNewGrid()) return; | ||
427 | } else { | ||
428 | llwarns << "Illegal state " << mState << '.' << llendl; | ||
429 | return; | ||
430 | } | ||
431 | gHippoGridManager->setCurrentGrid(mCurGrid); | ||
432 | gHippoGridManager->setDefaultGrid(mCurGrid); | ||
433 | gHippoGridManager->saveFile(); | ||
434 | LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel()); | ||
435 | } | ||
436 | |||
437 | void LoginFloater::cancel() | ||
438 | { | ||
439 | gHippoGridManager->discardAndReload(); | ||
440 | update(); | ||
441 | } | ||
442 | |||
443 | void LoginFloater::onSelectGrid(LLUICtrl* ctrl, void *data) | ||
444 | { | ||
445 | LoginFloater* self = (LoginFloater*)data; | ||
446 | if (self->mState == NORMAL) { | ||
447 | self->applyChanges(); | ||
448 | } else if ((self->mState == ADD_NEW) || (self->mState == ADD_COPY)) { | ||
449 | if (self->createNewGrid()) { | ||
450 | self->mState = NORMAL; | ||
451 | } else { | ||
452 | //LLScrollListCtrl *grids = self->getChild<LLScrollListCtrl>("grid_selector"); | ||
453 | //grids->setCurrentByIndex(grids->getItemCount() - 1); | ||
454 | return; | ||
455 | } | ||
456 | } else { | ||
457 | llwarns << "Illegal state " << self->mState << '.' << llendl; | ||
458 | return; | ||
459 | } | ||
460 | self->mCurGrid = ctrl->getValue().asString(); | ||
461 | self->refresh_grids(); | ||
462 | } | ||
463 | |||
464 | //static | ||
465 | void LoginFloater::onClickDelete(void *data) | ||
466 | { | ||
467 | llwarns << "onclickdelete" << llendl; | ||
468 | LoginFloater* self = (LoginFloater*)data; | ||
469 | if (self->mState == NORMAL) | ||
470 | gHippoGridManager->deleteGrid(self->mCurGrid); | ||
471 | self->update(); | ||
472 | } | ||
473 | |||
474 | //static | ||
475 | void LoginFloater::onClickAdd(void *data) | ||
476 | { | ||
477 | llwarns << "add" << llendl; | ||
478 | LoginFloater* self = (LoginFloater*)data; | ||
479 | self->mState = ADD_NEW; | ||
480 | self->refresh_grids(); | ||
481 | } | ||
482 | |||
483 | |||
484 | //static | ||
485 | void LoginFloater::onClickCopy(void *data) | ||
486 | { | ||
487 | llwarns << "copy" << llendl; | ||
488 | LoginFloater* self = (LoginFloater*)data; | ||
489 | self->mState = ADD_COPY; | ||
490 | self->refresh_grids(); | ||
491 | } | ||
492 | |||
493 | // static | ||
494 | void LoginFloater::onClickOk(void* data) | ||
495 | { | ||
496 | if(NULL==sInstance) | ||
497 | return; | ||
498 | |||
499 | sInstance->apply(); | ||
500 | sInstance->close(); | ||
501 | } | ||
502 | |||
503 | //static | ||
504 | void LoginFloater::onClickApply(void *data) | ||
505 | { | ||
506 | if(NULL==sInstance) | ||
507 | return; | ||
508 | |||
509 | sInstance->apply(); | ||
510 | refresh_grids(); | ||
511 | } | ||
512 | |||
513 | //static | ||
514 | void LoginFloater::onClickDefault(void *data) | ||
515 | { | ||
516 | sInstance->setDefault(); | ||
517 | sInstance->refresh_grids(); | ||
518 | } | ||
519 | |||
520 | //static | ||
521 | void LoginFloater::onClickGridInfo(void *data) | ||
522 | { | ||
523 | //HippoPanelGrids* self = (HippoPanelGrids*)data; | ||
524 | sInstance->retrieveGridInfo(); | ||
525 | } | ||
526 | |||
527 | //static | ||
528 | void LoginFloater::onClickCancel(void *data) | ||
529 | { | ||
530 | sInstance->cancel(); | ||
531 | } | ||
532 | |||
533 | void LoginFloater::setAlwaysRefresh(bool refresh) | ||
534 | { | ||
535 | // wargames 2: dead code, LLPanelLogin compatibility | ||
536 | return; | ||
537 | } | ||
538 | |||
539 | void LoginFloater::refreshLocation( bool force_visible ) | ||
540 | { | ||
541 | |||
542 | llwarns << "refreshLocation called" << llendl; | ||
543 | |||
544 | if (!sInstance) return; | ||
545 | |||
546 | LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo"); | ||
547 | |||
548 | if (LLURLSimString::parse()) | ||
549 | { | ||
550 | combo->setCurrentByIndex( 3 ); // BUG? Maybe 2? | ||
551 | combo->setTextEntry(LLURLSimString::sInstance.mSimString); | ||
552 | } | ||
553 | else | ||
554 | { | ||
555 | BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation"); | ||
556 | combo->setCurrentByIndex( login_last ? 1 : 0 ); | ||
557 | } | ||
558 | |||
559 | BOOL show_start = TRUE; | ||
560 | |||
561 | if ( ! force_visible ) | ||
562 | show_start = gSavedSettings.getBOOL("ShowStartLocation"); | ||
563 | |||
564 | sInstance->childSetVisible("start_location_combo", show_start); | ||
565 | sInstance->childSetVisible("start_location_text", show_start); | ||
566 | sInstance->childSetVisible("server_combo", TRUE); | ||
567 | } | ||
568 | |||
569 | void LoginFloater::newShow(const std::string &grid, bool initialLogin) | ||
570 | { | ||
571 | |||
572 | llwarns << "newShow called" << llendl; | ||
573 | if(NULL==sInstance) | ||
574 | { | ||
575 | LoginFloater::sGrid = grid; | ||
576 | LoginFloater::sIsInitialLogin = initialLogin; | ||
577 | sInstance = new LoginFloater(); | ||
578 | |||
579 | llwarns << "sInstance assigned. sInstance=" << sInstance << llendl; | ||
580 | } | ||
581 | |||
582 | llwarns << "newshow called" << llendl; | ||
583 | sInstance->mCurGrid = gHippoGridManager->getCurrentGridNick(); | ||
584 | refresh_grids(); | ||
585 | |||
586 | sInstance->open(); /*Flawfinder: ignore*/ | ||
587 | // we're important | ||
588 | //sInstance->setFrontmost(TRUE); | ||
589 | //sInstance->setFocus(TRUE); | ||
590 | |||
591 | } | ||
592 | |||
593 | void LoginFloater::show(const LLRect &rect, BOOL show_server, | ||
594 | void (*callback)(S32 option, void* user_data), | ||
595 | void* callback_data) | ||
596 | { | ||
597 | // we don't need a grid passed in because this is old-style login | ||
598 | std::string grid = ""; | ||
599 | newShow(grid, TRUE); | ||
600 | } | ||
601 | |||
602 | void LoginFloater::setFocus(BOOL b) | ||
603 | { | ||
604 | if(b != hasFocus()) | ||
605 | { | ||
606 | if(b) | ||
607 | { | ||
608 | LoginFloater::giveFocus(); | ||
609 | } | ||
610 | else | ||
611 | { | ||
612 | LLPanel::setFocus(b); | ||
613 | } | ||
614 | } | ||
615 | } | ||
616 | |||
617 | void LoginFloater::giveFocus() | ||
618 | { | ||
619 | LLScrollListCtrl *combo = NULL; | ||
620 | |||
621 | if(NULL==sInstance) | ||
622 | { | ||
623 | llwarns << "giveFocus has no LoginFloater instance. sInstance=" << sInstance << llendl; | ||
624 | return; | ||
625 | } | ||
626 | |||
627 | // for our combo box approach, selecting the combo box is almost always | ||
628 | // the right thing to do on the floater receiving focus | ||
629 | combo = sInstance->getChild<LLScrollListCtrl>("grid_selector"); | ||
630 | combo->setFocus(TRUE); | ||
631 | } | ||
632 | |||
633 | BOOL LoginFloater::isGridComboDirty() | ||
634 | { | ||
635 | BOOL user_picked = FALSE; | ||
636 | if (!sInstance) | ||
637 | { | ||
638 | llwarns << "Attempted getServer with no login view shown" << llendl; | ||
639 | } | ||
640 | else | ||
641 | { | ||
642 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | ||
643 | user_picked = combo->isDirty(); | ||
644 | } | ||
645 | return user_picked; | ||
646 | } | ||
647 | |||
648 | void LoginFloater::getLocation(std::string &location) | ||
649 | { | ||
650 | if (!sInstance) | ||
651 | { | ||
652 | llwarns << "Attempted getLocation with no login view shown" << llendl; | ||
653 | return; | ||
654 | } | ||
655 | |||
656 | LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo"); | ||
657 | location = combo->getValue().asString(); | ||
658 | } | ||
659 | |||
660 | std::string& LoginFloater::getPassword() | ||
661 | { | ||
662 | return mMungedPassword; | ||
663 | } | ||
664 | |||
665 | void LoginFloater::setPassword(std::string &password) | ||
666 | { | ||
667 | mMungedPassword = password; | ||
668 | } | ||
669 | |||
670 | bool LoginFloater::isSamePassword(std::string &password) | ||
671 | { | ||
672 | return mMungedPassword == password; | ||
673 | } | ||
674 | |||
675 | void LoginFloater::addServer(const std::string& server, S32 domain_name) | ||
676 | { | ||
677 | if (!sInstance) | ||
678 | { | ||
679 | llwarns << "Attempted addServer with no login view shown" << llendl; | ||
680 | return; | ||
681 | } | ||
682 | |||
683 | LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo"); | ||
684 | combo->add(server, LLSD(domain_name) ); | ||
685 | combo->setCurrentByIndex(0); | ||
686 | } | ||
687 | |||
688 | void LoginFloater::cancel_old() | ||
689 | { | ||
690 | if(NULL==sInstance) | ||
691 | return; | ||
692 | |||
693 | if(sInstance->sIsInitialLogin) | ||
694 | { | ||
695 | // send a callback that indicates we're quitting or closing | ||
696 | if(sInstance->mCallback) | ||
697 | sInstance->mCallback(LOGIN_OPTION_QUIT, sInstance->mCallbackData); | ||
698 | return; | ||
699 | } | ||
700 | |||
701 | sInstance->close(); | ||
702 | } | ||
703 | |||
704 | void LoginFloater::hashPassword(const std::string& password, std::string& hashedPassword) | ||
705 | { | ||
706 | // Max "actual" password length is 16 characters. | ||
707 | // Hex digests are always 32 characters. | ||
708 | if (password.length() == 32) | ||
709 | { | ||
710 | hashedPassword = password; | ||
711 | } | ||
712 | else | ||
713 | { | ||
714 | // this is a normal text password | ||
715 | LLMD5 pass((unsigned char *)password.c_str()); | ||
716 | char munged_password[MD5HEX_STR_SIZE]; | ||
717 | pass.hex_digest(munged_password); | ||
718 | hashedPassword = munged_password; | ||
719 | } | ||
720 | |||
721 | } | ||
722 | |||
diff --git a/linden/indra/newview/floaterlogin.h b/linden/indra/newview/floaterlogin.h deleted file mode 100644 index cdb60b0..0000000 --- a/linden/indra/newview/floaterlogin.h +++ /dev/null | |||
@@ -1,90 +0,0 @@ | |||
1 | /* | ||
2 | * floaterlogin.h (floatergridmanager.h pls) | ||
3 | * This is Meerkats grid manager, and I accidentally finished it with the wrong name :) | ||
4 | * -Patrick Sapinski (Monday, August 17, 2009) | ||
5 | */ | ||
6 | |||
7 | #ifndef PL_floaterlogin_H | ||
8 | #define PL_floaterlogin_H | ||
9 | |||
10 | #define LOGIN_OPTION_CONNECT 0 | ||
11 | #define LOGIN_OPTION_QUIT 1 | ||
12 | |||
13 | #include "llfloater.h" | ||
14 | |||
15 | class LoginController; | ||
16 | class AuthenticationModel; | ||
17 | |||
18 | class LoginFloater : public LLFloater | ||
19 | { | ||
20 | public: | ||
21 | LoginFloater(); | ||
22 | virtual ~LoginFloater(); | ||
23 | |||
24 | virtual BOOL postBuild(); | ||
25 | |||
26 | static void refresh_grids(); | ||
27 | void apply(); | ||
28 | void setDefault(); | ||
29 | void cancel(); | ||
30 | |||
31 | // new-style login methods | ||
32 | static void newShow(const std::string &grid, bool initialLogin); | ||
33 | virtual std::string& getPassword(); | ||
34 | virtual void setPassword(std::string &password); | ||
35 | virtual bool isSamePassword(std::string &password); | ||
36 | static void getFields(std::string &loginname, std::string &password, | ||
37 | BOOL &remember); | ||
38 | static void setFields(const std::string &loginname, const std::string &password, | ||
39 | BOOL remember); | ||
40 | |||
41 | // LLLoginPanel compatibility | ||
42 | //TODO: Make this not suck | ||
43 | static void show(const LLRect &rect, BOOL show_server, | ||
44 | void (*callback)(S32 option, void *user_data), | ||
45 | void *callback_data); | ||
46 | static void close(); | ||
47 | static void setAlwaysRefresh(bool refresh); | ||
48 | static void refreshLocation(bool force_visible); | ||
49 | virtual void setFocus(BOOL b); | ||
50 | static void giveFocus(); | ||
51 | static void getLocation(std::string &location); | ||
52 | static BOOL isGridComboDirty(); | ||
53 | static void addServer(const std::string& server, S32 domain_name); | ||
54 | static void cancel_old(); | ||
55 | static void hashPassword(const std::string& password, std::string& hashedPassword); | ||
56 | protected: | ||
57 | static bool sIsInitialLogin; | ||
58 | static std::string sGrid; | ||
59 | private: | ||
60 | enum State { NORMAL, ADD_NEW, ADD_COPY }; | ||
61 | State mState; | ||
62 | std::string mCurGrid; | ||
63 | |||
64 | std::string mIncomingPassword; | ||
65 | std::string mMungedPassword; | ||
66 | |||
67 | void applyChanges(); | ||
68 | bool createNewGrid(); | ||
69 | void update(); | ||
70 | void retrieveGridInfo(); | ||
71 | |||
72 | static void onSelectGrid(LLUICtrl *ctrl, void *data); | ||
73 | static void onClickDelete(void *data); | ||
74 | static void onClickAdd(void *data); | ||
75 | static void onClickCopy(void *data); | ||
76 | static void onClickOk(void *data); | ||
77 | static void onClickApply(void *data); | ||
78 | static void onClickDefault(void *data); | ||
79 | static void onClickGridInfo(void *data); | ||
80 | static void onClickCancel(void *data); | ||
81 | |||
82 | static LoginFloater *sInstance; | ||
83 | static LoginController *sController; | ||
84 | static AuthenticationModel *sModel; | ||
85 | |||
86 | void (*mCallback)(S32 option, void *userdata); | ||
87 | void *mCallbackData; | ||
88 | }; | ||
89 | |||
90 | #endif // PL_floaterlogin_H | ||
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp index 8dde683..ea84fee 100644 --- a/linden/indra/newview/llpanellogin.cpp +++ b/linden/indra/newview/llpanellogin.cpp | |||
@@ -38,8 +38,7 @@ | |||
38 | 38 | ||
39 | #include "hippoGridManager.h" | 39 | #include "hippoGridManager.h" |
40 | #include "hippoLimits.h" | 40 | #include "hippoLimits.h" |
41 | 41 | #include "floatergridmanager.h" | |
42 | #include "floaterlogin.h" | ||
43 | 42 | ||
44 | #include "indra_constants.h" // for key and mask constants | 43 | #include "indra_constants.h" // for key and mask constants |
45 | #include "llfontgl.h" | 44 | #include "llfontgl.h" |
@@ -1006,7 +1005,8 @@ void LLPanelLogin::onClickGrid(void *) | |||
1006 | { | 1005 | { |
1007 | if (sInstance && sInstance->mCallback) | 1006 | if (sInstance && sInstance->mCallback) |
1008 | { | 1007 | { |
1009 | LoginFloater::newShow(std::string("Test"), false); | 1008 | FloaterGridManager::getInstance()->open(); |
1009 | FloaterGridManager::getInstance()->center(); | ||
1010 | } | 1010 | } |
1011 | } | 1011 | } |
1012 | 1012 | ||
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_login.xml b/linden/indra/newview/skins/default/xui/en-us/floater_grid_manager.xml index 96e2aa3..401780f 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_login.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_grid_manager.xml | |||
@@ -1,7 +1,7 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <floater can_close="false" can_drag_on_left="false" can_minimize="false" | 2 | <floater can_close="true" can_drag_on_left="false" can_minimize="false" |
3 | can_resize="true" height="400" min_height="400" min_width="600" | 3 | can_resize="true" height="400" min_height="400" min_width="600" |
4 | name="floater_login" title="plasticwuzhere" width="600"> | 4 | name="floater_login" title="Grid Manager" width="600"> |
5 | 5 | ||
6 | <!-- Grid Selector --> | 6 | <!-- Grid Selector --> |
7 | <text type="string" length="1" enabled="true" name="grid_selector_label" | 7 | <text type="string" length="1" enabled="true" name="grid_selector_label" |
@@ -244,14 +244,17 @@ | |||
244 | left="280" mouse_opaque="true" name="connect_btn" scale_image="TRUE" | 244 | left="280" mouse_opaque="true" name="connect_btn" scale_image="TRUE" |
245 | width="100" /> --> | 245 | width="100" /> --> |
246 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | 246 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" |
247 | height="24" label="Ok" label_selected="Apply" left="280" | 247 | height="24" label="Apply" label_selected="Apply" left="-108" |
248 | mouse_opaque="true" name="btn_apply" scale_image="TRUE" width="100" /> | ||
249 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | ||
250 | height="24" label="Cancel" label_selected="Cancel" left_delta="-104" | ||
251 | mouse_opaque="true" name="btn_cancel" scale_image="TRUE" width="100" /> | ||
252 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | ||
253 | height="24" label="OK" label_selected="OK" left_delta="-104" | ||
248 | mouse_opaque="true" name="btn_ok" scale_image="TRUE" width="100" /> | 254 | mouse_opaque="true" name="btn_ok" scale_image="TRUE" width="100" /> |
249 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | 255 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" |
250 | height="24" label="Apply" label_selected="Apply" left="385" | 256 | height="24" label="Clear" label_selected="Clear" left_delta="-104" |
251 | mouse_opaque="true" name="btn_apply" scale_image="TRUE" width="100" /> | 257 | mouse_opaque="true" name="btn_clear" scale_image="TRUE" width="100" /> |
252 | <button bottom="8" follows="right|bottom" font="SansSerif" halign="center" | ||
253 | height="24" label="Undo" label_selected="Undo" left="490" | ||
254 | mouse_opaque="true" name="btn_cancel" scale_image="TRUE" width="100" /> | ||
255 | <!-- | 258 | <!-- |
256 | <combo_box allow_text_entry="true" bottom="32" follows="left|bottom" height="18" | 259 | <combo_box allow_text_entry="true" bottom="32" follows="left|bottom" height="18" |
257 | left_delta="135" max_chars="40" mouse_opaque="true" | 260 | left_delta="135" max_chars="40" mouse_opaque="true" |