void FBReader::initWindow() { ZLApplication::initWindow(); trackStylus(true); MigrationRunnable migration; if (migration.shouldMigrate()) { ZLDialogManager::instance().wait(ZLResourceKey("migrate"), migration); } if (!myBookAlreadyOpen) { BookDescriptionPtr description; if (!myBookToOpen.empty()) { createDescription(myBookToOpen, description); } if (description.isNull()) { ZLStringOption bookName(ZLCategoryKey::STATE, STATE, BOOK, ""); description = BookDescription::getDescription(bookName.value()); } if (description.isNull()) { description = BookDescription::getDescription(helpFileName(ZLibrary::Language())); } if (description.isNull()) { description = BookDescription::getDescription(helpFileName("en")); } openBook(description); } refreshWindow(); // ZLTimeManager::instance().addTask(new TimeUpdater(*this), 1000); }
int InteractivelyCollectAddresses(const wxArrayString& addresses, const String& bookNameOrig, const String& groupNameOrig, wxFrame *parent) { // by default, select all addresses wxArrayInt selections; size_t count = addresses.GetCount(); for ( size_t n = 0; n < count; n++ ) { selections.Add(n); } if ( count > 1 ) { // now ask the user which ones does he really want count = MDialog_GetSelections ( _("Please select the addresses to save"), _("Save addresses"), addresses, &selections, parent, _T("AddrExtract") ); } //else: don't ask the user to choose when there is one address only if ( count > 0 ) { // ask the user for the book and group names to use // // TODO propose something better - ADB tree dialog for example wxString bookName(bookNameOrig), groupName(groupNameOrig); if ( MDialog_GetText2FromUser ( _("Please select the location in the address\n" "book to save the selected entries to:"), _("Save addresses"), _("Address book name:"), &bookName, _("Group name:"), &groupName, parent ) ) { AdbManager_obj manager; CHECK( manager, -1, _T("can't get AdbManager") ); AdbBook_obj autocollectbook(manager->CreateBook(bookName)); if ( !autocollectbook ) { wxLogError(_("Failed to create the address book '%s' " "for autocollected e-mail addresses."), bookName.c_str()); // TODO ask the user for another book name return -1; } AdbEntryGroup_obj group(autocollectbook->CreateGroup(groupName)); if ( !group ) { wxLogError(_("Failed to create group '%s' in the address " "book '%s'."), groupName.c_str(), bookName.c_str()); return -1; } // create all entries in this group size_t saved = 0; for ( size_t n = 0; n < count; n++ ) { AddressList_obj addrList(addresses[selections[n]]); for ( Address *addr = addrList->GetFirst(); addr; addr = addrList->GetNext(addr) ) { String name = addr->GetName(), email = addr->GetEMail(); if ( name.empty() || name == email ) { name = addr->GetMailbox(); } AdbEntry_obj entry(group->CreateEntry(name)); entry->SetField(AdbField_NickName, name); entry->SetField(AdbField_FullName, name); entry->SetField(AdbField_EMail, email); saved++; } } wxLogStatus(parent, _("Saved %u addresses."), saved); } //else: cancelled } else // cancelled by user or nothing selected { wxLogStatus(parent, _("No addresses to save.")); } return count; }