/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you want to add, delete, or rename functions or slots, use
** Qt Designer to update this file, preserving your code.
**
** You should not define a constructor or destructor in this file.
** Instead, write your code in functions called init() and destroy().
** These will automatically be called by the form's constructor and
** destructor.
*****************************************************************************/
void KNetAttach::init()
{
setIcon(SmallIcon("knetattach"));
disconnect(finishButton(), TQT_SIGNAL(clicked()), (TQDialog*)this, TQT_SLOT(accept()));
connect(finishButton(), TQT_SIGNAL(clicked()), this, TQT_SLOT(finished()));
finishButton()->setText(i18n("Save && C&onnect"));
//setResizeMode(Fixed); FIXME: make the wizard fixed-geometry
setFinishEnabled(_folderParameters, false);
TDEConfig recent("tderecentconnections", true, false);
recent.setGroup("General");
TQStringList idx = recent.readListEntry("Index");
if (idx.isEmpty()) {
_recent->setEnabled(false);
if (_recent->isChecked()) {
_webfolder->setChecked(true);
}
} else {
_recent->setEnabled(true);
_recentConnectionName->insertStringList(idx);
}
}
void KNetAttach::setInformationText( const TQString &type )
{
TQString text;
if (type=="WebFolder") {
text = i18n("Enter a name for this WebFolder as well as a server address, port and folder path to use and press the Save & Connect button.");
} else if (type=="Fish") {
text = i18n("Enter a name for this Secure shell connection as well as a server address, port and folder path to use and press the Save & Connect button.");
} else if (type=="FTP") {
text = i18n("Enter a name for this File Transfer Protocol connection as well as a server address and folder path to use and press the Save & Connect button.");
} else if (type=="SMB") {
text = i18n("Enter a name for this Microsoft Windows network drive as well as a server address and folder path to use and press the Save & Connect button.");
}
_informationText->setText(text);
}
void KNetAttach::showPage( TQWidget *page )
{
if (page == _folderType) {
} else if (page == _folderParameters) {
_host->setFocus();
_connectionName->setFocus();
if (_webfolder->isChecked()) {
setInformationText("WebFolder");
updateForProtocol("WebFolder");
_port->setValue(80);
} else if (_fish->isChecked()) {
setInformationText("Fish");
updateForProtocol("Fish");
_port->setValue(22);
} else if (_ftp->isChecked()) {
setInformationText("FTP");
updateForProtocol("FTP");
_port->setValue(21);
if (_path->text().isEmpty()) {
_path->setText("/");
}
} else if (_smb->isChecked()) {
setInformationText("SMB");
updateForProtocol("SMB");
} else { //if (_recent->isChecked()) {
TDEConfig recent("tderecentconnections", true, false);
if (!recent.hasGroup(_recentConnectionName->currentText())) {
recent.setGroup("General");
TQStringList idx = recent.readListEntry("Index");
if (idx.isEmpty()) {
_recent->setEnabled(false);
if (_recent->isChecked()) {
_webfolder->setChecked(true);
}
} else {
_recent->setEnabled(true);
_recentConnectionName->insertStringList(idx);
}
showPage(_folderType);
return;
}
recent.setGroup(_recentConnectionName->currentText());
_type = recent.readEntry("Type");
setInformationText(_type);
if (!updateForProtocol(_type)) {
// FIXME: handle error
}
KURL u(recent.readEntry("URL"));
_host->setText(u.host());
_user->setText(u.user());
_path->setText(u.path());
if (recent.hasKey("Port")) {
_port->setValue(recent.readNumEntry("Port"));
} else {
_port->setValue(u.port());
}
_connectionName->setText(_recentConnectionName->currentText());
_createIcon->setChecked(false);
}
updateParametersPageStatus();
}
TQWizard::showPage(page);
}
void KNetAttach::updateParametersPageStatus()
{
setFinishEnabled(_folderParameters,
!_host->text().stripWhiteSpace().isEmpty() &&
!_path->text().stripWhiteSpace().isEmpty() &&
!_connectionName->text().stripWhiteSpace().isEmpty());
}
void KNetAttach::finished()
{
setBackEnabled(_folderParameters,false);
setFinishEnabled(_folderParameters, false);
KURL url;
if (_type == "WebFolder") {
if (_useEncryption->isChecked()) {
url.setProtocol("webdavs");
} else {
url.setProtocol("webdav");
}
url.setPort(_port->value());
} else if (_type == "Fish") {
url.setProtocol("fish");
url.setPort(_port->value());
} else if (_type == "FTP") {
url.setProtocol("ftp");
url.setPort(_port->value());
} else if (_type == "SMB") {
url.setProtocol("smb");
} else { // recent
}
url.setHost(_host->text().stripWhiteSpace());
url.setUser(_user->text().stripWhiteSpace());
TQString path = _path->text().stripWhiteSpace();
if (!path.startsWith("/")) {
path = TQString("/") + path;
}
url.setPath(path);
_folderParameters->setEnabled(false);
bool success = doConnectionTest(url);
_folderParameters->setEnabled(true);
if (!success) {
KMessageBox::sorry(this, i18n("Unable to connect to server. Please check your settings and try again."));
showPage(_folderParameters);
setBackEnabled(_folderParameters, true);
return;
}
kapp->invokeBrowser(url.url());
TQString name = _connectionName->text().stripWhiteSpace();
if (_createIcon->isChecked()) {
TDEGlobal::dirs()->addResourceType("remote_entries",
TDEStandardDirs::kde_default("data") + "remoteview");
TQString path = TDEGlobal::dirs()->saveLocation("remote_entries");
path += name + ".desktop";
KSimpleConfig desktopFile(path, false);
desktopFile.setGroup("Desktop Entry");
desktopFile.writeEntry("Icon", "applications-internet");
desktopFile.writeEntry("Name", name);
desktopFile.writeEntry("Type", "Link");
desktopFile.writeEntry("URL", url.prettyURL());
desktopFile.sync();
KDirNotify_stub notifier("*", "*");
notifier.FilesAdded( "remote:/" );
}
if (!name.isEmpty()) {
TDEConfig recent("tderecentconnections", false, false);
recent.setGroup("General");
TQStringList idx = recent.readListEntry("Index");
recent.deleteGroup(name); // erase anything stale
if (idx.contains(name)) {
idx.remove(name);
idx.prepend(name);
recent.writeEntry("Index", idx);
recent.setGroup(name);
} else {
TQString last;
if (!idx.isEmpty()) {
last = idx.last();
idx.pop_back();
}
idx.prepend(name);
recent.deleteGroup(last);
recent.writeEntry("Index", idx);
}
recent.setGroup(name);
recent.writeEntry("URL", url.prettyURL());
if (_type == "WebFolder" || _type == "Fish" || _type == "FTP") {
recent.writeEntry("Port", _port->value());
}
recent.writeEntry("Type", _type);
recent.sync();
}
TQDialog::accept();
}
void KNetAttach::updatePort(bool encryption)
{
if (_webfolder->isChecked()) {
if (encryption) {
_port->setValue(443);
} else {
_port->setValue(80);
}
}
}
bool KNetAttach::doConnectionTest(const KURL& url)
{
TDEIO::UDSEntry entry;
if (TDEIO::NetAccess::stat(url, entry, this)) {
// Anything to test here?
return true;
}
return false;
}
bool KNetAttach::updateForProtocol(const TQString& protocol)
{
_type = protocol;
if (protocol == "WebFolder") {
_useEncryption->show();
_portText->show();
_port->show();
_userText->show();
_user->show();
} else if (protocol == "Fish") {
_useEncryption->hide();
_portText->show();
_port->show();
_userText->show();
_user->show();
} else if (protocol == "FTP") {
_useEncryption->hide();
_portText->show();
_port->show();
_userText->show();
_user->show();
} else if (protocol == "SMB") {
_useEncryption->hide();
_portText->hide();
_port->hide();
_userText->hide();
_user->hide();
} else {
_type = "";
return false;
}
return true;
}
void KNetAttach::updateFinishButtonText(bool save)
{
if (save) {
finishButton()->setText(i18n("Save && C&onnect"));
} else {
finishButton()->setText(i18n("C&onnect"));
}
}