diff options
author | Michal Kubecek <mkubecek@suse.cz> | 2015-04-13 09:21:39 +0200 |
---|---|---|
committer | Michal Kubecek <mkubecek@suse.cz> | 2015-04-13 09:21:39 +0200 |
commit | e2bc6f4153813cc570ae814c8ddb74628009b488 (patch) | |
tree | a40b171be1d859c2232ccc94f758010f9ae54d3c /src/gui/selectprofileform.ui.h | |
download | twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar.gz twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar.lz twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.tar.xz twinkle-e2bc6f4153813cc570ae814c8ddb74628009b488.zip |
initial checkin
Check in contents of upstream 1.4.2 tarball, exclude generated files.
Diffstat (limited to 'src/gui/selectprofileform.ui.h')
-rw-r--r-- | src/gui/selectprofileform.ui.h | 631 |
1 files changed, 631 insertions, 0 deletions
diff --git a/src/gui/selectprofileform.ui.h b/src/gui/selectprofileform.ui.h new file mode 100644 index 0000000..1586227 --- /dev/null +++ b/src/gui/selectprofileform.ui.h @@ -0,0 +1,631 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename functions or slots use +** Qt Designer which will update this file, preserving your code. Create an +** init() function in place of a constructor, and a destroy() function in +** place of a destructor. +*****************************************************************************/ +/* + Copyright (C) 2005-2009 Michel de Boer <michel@twinklephone.com> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +void SelectProfileForm::init() +{ + user_config = 0; +} + +void SelectProfileForm::destroy() +{ + if (user_config) { + MEMMAN_DELETE(user_config); + delete user_config; + } +} + +// The exec() method is called at startup +int SelectProfileForm::execForm() +{ + mainWindow = 0; + profileListView->clear(); + defaultSet = false; // no default has been set + + // Get list of all profiles + QStringList profiles; + QString error; + if (!SelectProfileForm::getUserProfiles(profiles, error)) { + QMessageBox::critical(this, PRODUCT_NAME, error); + return QDialog::Rejected; + } + + // If there are no profiles then the user has to create one + if (profiles.isEmpty()) { + QMessageBox::information(this, PRODUCT_NAME, tr( + "<html>"\ + "Before you can use Twinkle, you must create a user "\ + "profile.<br>Click OK to create a profile.</html>")); + + int newProfileMethod = QMessageBox::question(this, PRODUCT_NAME, tr( + "<html>"\ + "You can use the profile editor to create a profile. "\ + "With the profile editor you can change many settings "\ + "to tune the SIP protocol, RTP and many other things.<br><br>"\ + "Alternatively you can use the wizard to quickly setup a "\ + "user profile. The wizard asks you only a few essential "\ + "settings. If you create a user profile with the wizard you "\ + "can still edit the full profile with the profile editor at a later "\ + "time.<br><br>"\ + "You can create a Diamondcard account to make worldwide "\ + "calls to regular and cell phones and send SMS messages.<br><br>"\ + "Choose what method you wish to use.</html>"), + tr("&Wizard"), tr("&Profile editor"), tr("&Diamondcard")); + + switch (newProfileMethod) { + case 0: + wizardProfile(true); + break; + case 1: + newProfile(true); + break; + case 2: + diamondcardProfile(true); + break; + default: + return QDialog::Rejected; + } + + if (profileListView->childCount() == 0) { + // No profile has been created. + return QDialog::Rejected; + } + + // Select the created profile + QCheckListItem *item = (QCheckListItem *)profileListView->currentItem(); + QString profile = item->text(); + profile.append(USER_FILE_EXT); + selectedProfiles.clear(); + selectedProfiles.push_back(profile.ascii()); + + QMessageBox::information(this, PRODUCT_NAME, tr( + "<html>"\ + "Next you may adjust the system settings. "\ + "You can change these settings always at a later time."\ + "<br><br>"\ + "Click OK to view and adjust the system settings.</html>")); + + SysSettingsForm f(this, "system settings", true); + f.exec(); + + return QDialog::Accepted; + } + + fillProfileListView(profiles); + sysPushButton->show(); + runPushButton->setFocus(); + + // Show the modal dialog + return QDialog::exec(); +} + +// The showForm() method is called from File menu when Twinkle is running. +// The execForm() method cannot be used as it will block the Qt event loop. +// NOTE: the method show() is not re-implemented as Qt calls this method +// from exec() internally. +void SelectProfileForm::showForm(QMainWindow *_mainWindow) +{ + mainWindow = _mainWindow; + profileListView->clear(); + defaultSet = false; + + // Get list of all profiles + QStringList profiles; + QString error; + if (!SelectProfileForm::getUserProfiles(profiles, error)) { + QMessageBox::critical(this, PRODUCT_NAME, error); + return; + } + + // Initialize profile list view + fillProfileListView(profiles); + QListViewItemIterator j(profileListView); + while (j.current()) { + QCheckListItem *item = (QCheckListItem *)j.current(); + QString profile = item->text(); + + // Set pixmap of default profile + list<string> l = sys_config->get_start_user_profiles(); + if (std::find(l.begin(), l.end(), profile.ascii()) != l.end()) + { + item->setPixmap(0, QPixmap::fromMimeSource("twinkle16.png")); + defaultSet = true; + } + + // Tick check box of active profile + if (phone->ref_user_profile(profile.ascii())) { + item->setOn(true); + } + + j++; + } + + sysPushButton->hide(); + runPushButton->setText("&OK"); + runPushButton->setFocus(); + QDialog::show(); +} + +void SelectProfileForm::runProfile() +{ + selectedProfiles.clear(); + QListViewItemIterator i(profileListView, QListViewItemIterator::Checked); + while (i.current()) { + QCheckListItem *item = (QCheckListItem *)i.current(); + QString profile =item->text(); + profile.append(USER_FILE_EXT); + selectedProfiles.push_back(profile.ascii()); + i++; + } + + if (selectedProfiles.empty()) { + QMessageBox::warning(this, PRODUCT_NAME, tr( + "You did not select any user profile to run.\n"\ + "Please select a profile.")); + return; + } + + // This signal will be caught when Twinkle is running. + // At startup the selectedProfiles attribute is read. + emit selection(selectedProfiles); + + accept(); +} + +void SelectProfileForm::editProfile() +{ + QCheckListItem *item = (QCheckListItem *)profileListView->currentItem(); + QString profile = item->text(); + + // If the profile to edit is currently active, then edit the in-memory + // user profile owned by the t_phone_user object + if (mainWindow) { + t_user *active_user = phone->ref_user_profile(profile.ascii()); + if (active_user) { + list<t_user *> user_list; + user_list.push_back(active_user); + UserProfileForm *f = new UserProfileForm(this, + "edit user profile", true, + Qt::WDestructiveClose); + + connect(f, SIGNAL(authCredentialsChanged(t_user *, const string&)), + mainWindow, + SLOT(updateAuthCache(t_user *, const string&))); + + connect(f, SIGNAL(stunServerChanged(t_user *)), + mainWindow, SLOT(updateStunSettings(t_user *))); + + f->show(user_list, ""); + return; + } + } + + // Edit the user profile from disk. + profile.append(USER_FILE_EXT); + + // Read selected config file + string error_msg; + + if (user_config) { + MEMMAN_DELETE(user_config); + delete user_config; + } + user_config = new t_user(); + MEMMAN_NEW(user_config); + + if (!user_config->read_config(profile.ascii(), error_msg)) { + ((t_gui *)ui)->cb_show_msg(this, error_msg, MSG_WARNING); + return; + } + + // Show the edit user profile form (modal dialog) + list<t_user *> user_list; + user_list.push_back(user_config); + UserProfileForm *f = new UserProfileForm(this, "edit user profile", true, + Qt::WDestructiveClose); + f->show(user_list, ""); +} + +void SelectProfileForm::newProfile() +{ + newProfile(false); +} + +void SelectProfileForm::newProfile(bool exec_mode) +{ + // Ask user for a profile name + GetProfileNameForm getProfileNameForm(this, "get profile name", true); + if (!getProfileNameForm.execNewName()) return; + + // Create file name + QString profile = getProfileNameForm.getProfileName(); + QString filename = profile; + filename.append(USER_FILE_EXT); + + // Create a new user config + if (user_config) { + MEMMAN_DELETE(user_config); + delete user_config; + } + user_config = new t_user(); + MEMMAN_NEW(user_config); + user_config->set_config(filename.ascii()); + + // Show the edit user profile form (modal dialog) + list<t_user *> user_list; + user_list.push_back(user_config); + UserProfileForm *f = new UserProfileForm(this, "edit user profile", true, + Qt::WDestructiveClose); + connect(f, SIGNAL(success()), this, SLOT(newProfileCreated())); + + if (exec_mode) { + f->exec(user_list, ""); + } else { + f->show(user_list, ""); + } +} + +void SelectProfileForm::newProfileCreated() +{ + // New profile created + // Add the new profile to the profile list box + QCheckListItem *item = new QCheckListItem(profileListView, + user_config->get_profile_name().c_str(), + QCheckListItem::CheckBox); + item->setPixmap(0, QPixmap::fromMimeSource("penguin-small.png")); + + // Make the new profile the selected profile + // Do not change this without changing the exec method. + // When there are no profiles, the exec methods relies on the + // fact that afer creation of the profile it is selected. + profileListView->setSelected(item, true); + + // Enable buttons that act on a profile + editPushButton->setEnabled(true); + deletePushButton->setEnabled(true); + renamePushButton->setEnabled(true); + defaultPushButton->setEnabled(true); + runPushButton->setEnabled(true); +} + +void SelectProfileForm::deleteProfile() +{ + QCheckListItem *item = (QCheckListItem *)profileListView->currentItem(); + QString profile = item->text(); + QString msg = tr("Are you sure you want to delete profile '%1'?").arg(profile); + QMessageBox *mb = new QMessageBox(tr("Delete profile"), msg, + QMessageBox::Warning, + QMessageBox::Yes, + QMessageBox::No, + QMessageBox::NoButton, + this); + MEMMAN_NEW(mb); + if (mb->exec() == QMessageBox::Yes) { + // Delete file + QDir d = QDir::home(); + d.cd(USER_DIR); + QString filename = profile; + filename.append(USER_FILE_EXT); + QString fullname = d.filePath(filename); + if (!QFile::remove(fullname)) { + // Failed to delete file + QMessageBox::critical(this, PRODUCT_NAME, + tr("Failed to delete profile.")); + } else { + // Delete possible backup of the profile + QString backupname = fullname; + backupname.append("~"); + (void)QFile::remove(backupname); + + // Delete service files + filename = profile; + filename.append(SVC_FILE_EXT); + fullname = d.filePath(filename); + (void)QFile::remove(fullname); + fullname.append("~"); + (void)QFile::remove(fullname); + + // Delete profile from list of default profiles in + // system settings + list<string> l = sys_config->get_start_user_profiles(); + if (std::find(l.begin(), l.end(), profile.ascii()) != l.end()) { + l.remove(profile.ascii()); + sys_config->set_start_user_profiles(l); + + string error_msg; + if (!sys_config->write_config(error_msg)) { + // Failed to write config file + ((t_gui *)ui)->cb_show_msg(this, + error_msg, MSG_CRITICAL); + } + } + + // Delete profile from profile list box + QCheckListItem *item = (QCheckListItem *)profileListView-> + currentItem(); + delete item; + if (profileListView->childCount() == 0) { + // There are no profiles anymore + // Disable buttons that act on a profile + editPushButton->setEnabled(false); + deletePushButton->setEnabled(false); + renamePushButton->setEnabled(false); + defaultPushButton->setEnabled(false); + runPushButton->setEnabled(false); + } else { + profileListView->setSelected(profileListView-> + firstChild(), true); + } + } + } + + MEMMAN_DELETE(mb); + delete mb; +} + +void SelectProfileForm::renameProfile() +{ + QCheckListItem *item = (QCheckListItem *)profileListView->currentItem(); + QString oldProfile = item->text(); + + // Ask user for a new profile name + GetProfileNameForm getProfileNameForm(this, "get profile name", true); + if (!getProfileNameForm.execRename(oldProfile)) return; + + // Create file name for the new profile + QString newProfile = getProfileNameForm.getProfileName(); + QString newFilename = newProfile; + newFilename.append(USER_FILE_EXT); + + // Create file name for the old profile + QString oldFilename = oldProfile; + oldFilename.append(USER_FILE_EXT); + + // Rename the file + QDir d = QDir::home(); + d.cd(USER_DIR); + if (!d.rename(oldFilename, newFilename)) { + // Failed to delete file + QMessageBox::critical(this, PRODUCT_NAME, + tr("Failed to rename profile.")); + } else { + // If there is a backup of the profile, rename it too. + QString oldBackupFilename = oldFilename; + oldBackupFilename.append("~"); + QString oldBackupFullname = d.filePath(oldBackupFilename); + if (QFile::exists(oldBackupFullname)) { + QString newBackupFilename = newFilename; + newBackupFilename.append("~"); + d.rename(oldBackupFilename, newBackupFilename); + } + + // Rename service files + oldFilename = oldProfile; + oldFilename.append(SVC_FILE_EXT); + QString oldFullname = d.filePath(oldFilename); + if (QFile::exists(oldFullname)) { + newFilename = newProfile; + newFilename.append(SVC_FILE_EXT); + d.rename(oldFilename, newFilename); + } + + // Rename service backup file + oldFilename.append("~"); + oldFullname = d.filePath(oldFilename); + if (QFile::exists(oldFullname)) { + newFilename.append("~"); + d.rename(oldFilename, newFilename); + } + + // Rename buddy list file + oldFilename = oldProfile; + oldFilename.append(BUDDY_FILE_EXT); + oldFullname = d.filePath(oldFilename); + if (QFile::exists(oldFullname)) { + newFilename = newProfile; + newFilename.append(BUDDY_FILE_EXT); + d.rename(oldFilename, newFilename); + } + + // Rename profile in list of default profiles in + // system settings + list<string> l = sys_config->get_start_user_profiles(); + if (std::find(l.begin(), l.end(), oldProfile.ascii()) != l.end()) + { + std::replace(l.begin(), l.end(), oldProfile.ascii(), newProfile.ascii()); + sys_config->set_start_user_profiles(l); + + string error_msg; + if (!sys_config->write_config(error_msg)) { + // Failed to write config file + ((t_gui *)ui)->cb_show_msg(this, + error_msg, MSG_CRITICAL); + } + } + + emit profileRenamed(); + + // Change profile name in the list box + QCheckListItem *item = (QCheckListItem *)profileListView->currentItem(); + item->setText(0, newProfile); + } +} + +void SelectProfileForm::setAsDefault() +{ + // Only show the information when the default button is + // pressed for the first time. + if (!defaultSet) { + QMessageBox::information(this, PRODUCT_NAME, tr( + "<p>" + "If you want to remove or " + "change the default at a later time, you can do that " + "via the system settings." + "</p>")); + } + + defaultSet = true; + + // Restore all pixmaps + QListViewItemIterator i(profileListView); + while (i.current()) { + i.current()->setPixmap(0, QPixmap::fromMimeSource("penguin-small.png")); + i++; + } + + // Set pixmap of the default profiles. + // Set default profiles in system settings. + list<string> l; + QListViewItemIterator j(profileListView, QListViewItemIterator::Checked); + while (j.current()) { + QCheckListItem *item = (QCheckListItem *)j.current(); + item->setPixmap(0, QPixmap::fromMimeSource("twinkle16.png")); + l.push_back(item->text().ascii()); + j++; + } + sys_config->set_start_user_profiles(l); + + // Write default to system settings + string error_msg; + if (!sys_config->write_config(error_msg)) { + // Failed to write config file + ((t_gui *)ui)->cb_show_msg(this, error_msg, MSG_CRITICAL); + } +} + +void SelectProfileForm::wizardProfile() +{ + wizardProfile(false); +} + +void SelectProfileForm::wizardProfile(bool exec_mode) +{ + // Ask user for a profile name + GetProfileNameForm getProfileNameForm(this, "get profile name", true); + if (!getProfileNameForm.execNewName()) return; + + // Create file name + QString profile = getProfileNameForm.getProfileName(); + QString filename = profile; + filename.append(USER_FILE_EXT); + + // Create a new user config + if (user_config) { + MEMMAN_DELETE(user_config); + delete user_config; + } + user_config = new t_user(); + MEMMAN_NEW(user_config); + user_config->set_config(filename.ascii()); + + // Show the wizard form (modal dialog) + WizardForm *f = new WizardForm(this, "wizard", true, Qt::WDestructiveClose); + connect(f, SIGNAL(success()), this, SLOT(newProfileCreated())); + + if (exec_mode) { + f->exec(user_config); + } else { + f->show(user_config); + } +} + +void SelectProfileForm::diamondcardProfile() +{ + diamondcardProfile(false); +} + +void SelectProfileForm::diamondcardProfile(bool exec_mode) +{ + // Create a new user config + if (user_config) { + MEMMAN_DELETE(user_config); + delete user_config; + } + user_config = new t_user(); + MEMMAN_NEW(user_config); + + // Show the diamondcard profile form (modal dialog) + DiamondcardProfileForm *f = new DiamondcardProfileForm(this, "diamondcard", + true, Qt::WDestructiveClose); + connect(f, SIGNAL(success()), this, SLOT(newProfileCreated())); + + if (exec_mode) { + f->exec(user_config); + } else { + f->show(user_config); + } +} + + +void SelectProfileForm::sysSettings() +{ + SysSettingsForm *f = new SysSettingsForm(this, "system settings", true, + Qt::WDestructiveClose); + f->show(); +} + +// Get a list of all profiles. Returns false if there is an error. +bool SelectProfileForm::getUserProfiles(QStringList &profiles, QString &error) +{ + // Find the .twinkle directory in HOME + QDir d = QDir::home(); + if (!d.cd(USER_DIR)) { + error = tr("Cannot find .twinkle directory in your home directory."); + return false; + } + + // Select all config files + QString filterName = "*"; + filterName.append(USER_FILE_EXT); + d.setFilter(QDir::Files); + d.setNameFilter(filterName); + d.setSorting(QDir::Name | QDir::IgnoreCase); + profiles = d.entryList(); + + return true; +} + +void SelectProfileForm::fillProfileListView(const QStringList &profiles) +{ + // Put the profiles in the profile list view + for (QStringList::ConstIterator i = profiles.begin(); i != profiles.end(); i++) { + // Strip off the user file extension + QString profile = *i; + profile.truncate(profile.length() - strlen(USER_FILE_EXT)); + QCheckListItem *item = new QCheckListItem( + profileListView, profile, QCheckListItem::CheckBox); + item->setPixmap(0, QPixmap::fromMimeSource("penguin-small.png")); + } + + // Highlight the first profile + profileListView->setSelected(profileListView->firstChild(), true); +} + +void SelectProfileForm::toggleItem(QListViewItem *item) +{ + QCheckListItem *checkItem = (QCheckListItem *)item; + checkItem->setOn(!checkItem->isOn()); +} + |