You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
smb4k/smb4k/dialogs/smb4kcustomoptionsdialog.cpp

1028 lines
32 KiB

/***************************************************************************
smb4kcustomoptionsdialog - With this dialog the user can define
custom Samba options for hosts or shares.
-------------------
begin : So Jun 25 2006
copyright : (C) 2006 by Alexander Reinholdt
email : dustpuppy@mail.berlios.de
***************************************************************************/
/***************************************************************************
* 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., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301 USA *
***************************************************************************/
// TQt includes
#include <tqlayout.h>
#include <tqlabel.h>
#include <tqframe.h>
// KDE includes
#include <tdelocale.h>
#include <tdeapplication.h>
#include <klineedit.h>
#include <kdebug.h>
// application specific includes
#include "smb4kcustomoptionsdialog.h"
#include "../core/smb4tdeglobal.h"
#include "../core/smb4kcore.h"
#include "../core/smb4ksambaoptionsinfo.h"
#include "../core/smb4ksambaoptionshandler.h"
#include "../core/smb4knetworkitems.h"
#include "../core/smb4ksettings.h"
using namespace Smb4TDEGlobal;
// FIXME: Maybe introduce a private class here?
static int default_port = -1;
static TQString default_protocol = TQString();
static bool default_kerberos = false;
static TQString default_uid = TQString();
static TQString default_gid = TQString();
#ifndef __FreeBSD__
static TQString default_filesystem = TQString();
static bool default_readwrite = true;
#endif
static int port_value = -1;
static TQString protocol_value = TQString();
static bool kerberos_value = false;
static TQString uid_value = TQString();
static TQString gid_value = TQString();
#ifndef __FreeBSD__
static TQString filesystem_value = TQString();
static bool readwrite_value = true;
#endif
static bool port_changed_ok = false;
static bool protocol_changed_ok = false;
static bool kerberos_changed_ok = false;
static bool uid_changed_ok = false;
static bool gid_changed_ok = false;
#ifndef __FreeBSD__
static bool filesystem_changed_ok = false;
static bool readwrite_changed_ok = false;
#endif
static bool port_changed_default = false;
static bool protocol_changed_default = false;
static bool kerberos_changed_default = false;
static bool uid_changed_default = false;
static bool gid_changed_default = false;
#ifndef __FreeBSD__
static bool filesystem_changed_default = false;
static bool readwrite_changed_default = false;
#endif
Smb4KCustomOptionsDialog::Smb4KCustomOptionsDialog( Smb4KHostItem *host, TQWidget *parent, const char *name )
: KDialogBase( Plain, i18n( "Custom Options" ), User1|Ok|Cancel, Ok, parent, name, true, true ), m_type( Host ), m_host_item( host ), m_share_item( NULL ), m_homes_user( TQString() )
{
m_initialized = true;
setButtonGuiItem( User1, KStdGuiItem::defaults() );
setWFlags( TQt::WDestructiveClose );
setupDialog();
}
Smb4KCustomOptionsDialog::Smb4KCustomOptionsDialog( Smb4KShareItem *share, TQWidget *parent, const char *name )
: KDialogBase( Plain, i18n( "Custom Options" ), User1|Ok|Cancel, Ok, parent, name, true, true ), m_type( Share ), m_host_item( NULL ), m_share_item( share ), m_homes_user( TQString() )
{
if ( TQString::compare( share->name(), "homes" ) != 0 )
{
m_initialized = true;
}
else
{
m_homes_user = specifyUser( share->host(), kapp->mainWidget() ? kapp->mainWidget() : 0, "SpecifyUser" );
m_initialized = m_homes_user.isEmpty() ? false : true;
}
setButtonGuiItem( User1, KStdGuiItem::defaults() );
setWFlags( TQt::WDestructiveClose );
setupDialog();
}
Smb4KCustomOptionsDialog::~Smb4KCustomOptionsDialog()
{
}
void Smb4KCustomOptionsDialog::setupDialog()
{
// The Smb4KSambaOptionsInfo object:
Smb4KSambaOptionsInfo *info = NULL;
// We need this later to decide if the "Default"
// button needs to be enabled:
bool enable_default_button = false;
// These are the input widgets we need below:
m_port_input = NULL;
m_kerberos = NULL;
m_proto_input = NULL;
m_uid_input = NULL;
m_gid_input = NULL;
#ifndef __FreeBSD__
m_fs_input = NULL;
m_rw_input = NULL;
#endif
// Set-up the widget:
TQFrame *frame = plainPage();
TQGridLayout *grid = new TQGridLayout( frame );
grid->setSpacing( 5 );
grid->setMargin( 0 );
// The following widgets are independent of the type of
// the network item:
TQLabel *location_label = new TQLabel( m_type == Host ? i18n( "Host:" ) : i18n( "Share:" ), frame );
KLineEdit *location = new KLineEdit( m_type == Host ? m_host_item->name() : "//"+m_share_item->host()+"/"+(TQString::compare( m_share_item->name(), "homes" ) != 0 ? m_share_item->name() : m_homes_user), frame );
location->setReadOnly( true );
TQLabel *port_label = new TQLabel( i18n( "Port:" ), frame );
m_port_input = new KIntNumInput( -1, frame );
m_port_input->setMinimumWidth( 200 );
m_port_input->setMinValue( -1 );
m_port_input->setMaxValue( 65535 );
// The widgets will be put into the layout below.
// Here comes the item-dependent stuff:
switch ( m_type )
{
case Host:
{
TQLabel *protocol_label = new TQLabel( i18n( "Protocol:" ), frame );
m_proto_input = new KComboBox( false, frame );
m_proto_input->setMinimumWidth( 200 );
m_proto_input->insertItem( i18n( "auto" ), -1 );
m_proto_input->insertItem( "RPC", -1 );
m_proto_input->insertItem( "RAP", -1 );
m_proto_input->insertItem( "ADS", -1 );
m_kerberos = new TQCheckBox( i18n( "Try to authenticate with Kerberos (Active Directory)" ), frame );
grid->addWidget( location_label, 0, 0, 0 );
grid->addWidget( location, 0, 1, 0 );
grid->addWidget( port_label, 1, 0, 0 );
grid->addWidget( m_port_input, 1, 1, 0 );
grid->addWidget( protocol_label, 2, 0, 0 );
grid->addWidget( m_proto_input, 2, 1, 0 );
grid->addMultiCellWidget( m_kerberos, 3, 3, 0, 1, 0 );
info = optionsHandler()->findItem( m_host_item->name() );
// Get the default values from the config file:
default_port = Smb4KSettings::remotePort();
default_kerberos = Smb4KSettings::useKerberos();
switch ( Smb4KSettings::protocolHint() )
{
case Smb4KSettings::EnumProtocolHint::Automatic:
{
// In this case the user leaves it to the net
// command to determine the right protocol.
default_protocol = "auto";
break;
}
case Smb4KSettings::EnumProtocolHint::RPC:
{
default_protocol = "rpc";
break;
}
case Smb4KSettings::EnumProtocolHint::RAP:
{
default_protocol = "rap";
break;
}
case Smb4KSettings::EnumProtocolHint::ADS:
{
default_protocol = "ads";
break;
}
default:
{
default_protocol = TQString();
break;
}
}
// Define the values that have to be put into the widgets:
port_value = (info && info->port() != -1) ?
info->port() :
default_port;
protocol_value = (info && !info->protocol().isEmpty()) ?
info->protocol() :
default_protocol;
kerberos_value = (info && info->kerberos() != default_kerberos) ?
info->kerberos() :
default_kerberos;
// Put the values in the widgets:
m_port_input->setValue( port_value );
m_proto_input->setCurrentText( (TQString::compare( protocol_value, "auto" ) == 0 ? i18n( "auto" ) : protocol_value.upper()) );
m_kerberos->setChecked( kerberos_value );
// Does the 'Default' button need to be enabled?
if ( default_port != port_value ||
TQString::compare( default_protocol, protocol_value ) != 0 ||
default_kerberos != kerberos_value )
{
enable_default_button = true;
}
// Connections:
connect( m_port_input, TQT_SIGNAL( valueChanged( int ) ),
this, TQT_SLOT( slotPortChanged( int ) ) );
connect( m_kerberos, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( slotKerberosToggled( bool ) ) );
connect( m_proto_input, TQT_SIGNAL( activated( const TQString & ) ),
this, TQT_SLOT( slotProtocolChanged( const TQString & ) ) );
break;
}
case Share:
{
#ifndef __FreeBSD__
TQLabel *filesystem_label = new TQLabel( i18n( "File system:" ), frame );
m_fs_input = new KComboBox( false, frame );
m_fs_input->setMinimumWidth( 200 );
m_fs_input->insertItem( "SMBFS", -1 );
m_fs_input->insertItem( "CIFS", -1 );
m_fs_input->setCurrentItem( 0 );
TQLabel *permission_label = new TQLabel( i18n( "Write access:" ), frame );
m_rw_input = new KComboBox( false, frame );
m_rw_input->setMinimumWidth( 200 );
m_rw_input->insertItem( i18n( "read-write" ) );
m_rw_input->insertItem( i18n( "read-only" ) );
TQLabel *uid_label = new TQLabel( i18n( "User ID:" ), frame );
m_uid_input = new KLineEdit( frame );
m_uid_input->setMinimumWidth( 200 );
m_uid_input->setAlignment( TQt::AlignRight );
TQLabel *gid_label = new TQLabel( i18n( "Group ID:" ), frame );
m_gid_input = new KLineEdit( frame );
m_gid_input->setMinimumWidth( 200 );
m_gid_input->setAlignment( TQt::AlignRight );
m_kerberos = new TQCheckBox( i18n( "Try to authenticate with Kerberos (Active Directory)" ), frame );
grid->addWidget( location_label, 0, 0, 0 );
grid->addWidget( location, 0, 1, 0 );
grid->addWidget( port_label, 1, 0, 0 );
grid->addWidget( m_port_input, 1, 1, 0 );
grid->addWidget( filesystem_label, 2, 0, 0 );
grid->addWidget( m_fs_input, 2, 1, 0 );
grid->addWidget( uid_label, 3, 0, 0 );
grid->addWidget( m_uid_input, 3, 1, 0 );
grid->addWidget( gid_label, 4, 0, 0 );
grid->addWidget( m_gid_input, 4, 1, 0 );
grid->addWidget( permission_label, 5, 0, 0 );
grid->addWidget( m_rw_input, 5, 1, 0 );
grid->addMultiCellWidget( m_kerberos, 6, 6, 0, 1, 0 );
#else
TQLabel *uid_label = new TQLabel( i18n( "User ID:" ), frame );
m_uid_input = new KLineEdit( frame );
m_uid_input->setMinimumWidth( 200 );
m_uid_input->setAlignment( TQt::AlignRight );
TQLabel *gid_label = new TQLabel( i18n( "Group ID:" ), frame );
m_gid_input = new KLineEdit( frame );
m_gid_input->setMinimumWidth( 200 );
m_gid_input->setAlignment( TQt::AlignRight );
grid->addWidget( location_label, 0, 0, 0 );
grid->addWidget( location, 0, 1, 0 );
grid->addWidget( port_label, 1, 0, 0 );
grid->addWidget( m_port_input, 1, 1, 0 );
grid->addWidget( uid_label, 2, 0, 0 );
grid->addWidget( m_uid_input, 2, 1, 0 );
grid->addWidget( gid_label, 3, 0, 0 );
grid->addWidget( m_gid_input, 3, 1, 0 );
#endif
info = optionsHandler()->findItem( TQString( "//%1/%2" ).arg( m_share_item->host(), m_share_item->name() ) );
// Get the default values from the config file:
default_port = Smb4KSettings::remotePort();
default_uid = Smb4KSettings::userID();
default_gid = Smb4KSettings::groupID();
#ifndef __FreeBSD__
default_kerberos = Smb4KSettings::useKerberos();
switch ( Smb4KSettings::writeAccess() )
{
case Smb4KSettings::EnumWriteAccess::ReadWrite:
{
default_readwrite = true;
break;
}
case Smb4KSettings::EnumWriteAccess::ReadOnly:
{
default_readwrite = false;
break;
}
default:
{
break;
}
}
switch( Smb4KSettings::filesystem() )
{
case Smb4KSettings::EnumFilesystem::CIFS:
{
default_filesystem = "cifs";
break;
}
case Smb4KSettings::EnumFilesystem::SMBFS:
{
default_filesystem = "smbfs";
break;
}
default:
{
// FIXME: Set default_filesystem to "cifs"?
break;
}
}
#endif
// Define the values that have to be put into the widgets:
port_value = (info && info->port() != -1) ?
info->port() :
default_port;
uid_value = (info && !info->uid().isEmpty()) ?
info->uid() :
default_uid;
gid_value = (info && !info->gid().isEmpty()) ?
info->gid() :
default_gid;
#ifndef __FreeBSD__
kerberos_value = (info && info->kerberos() != default_kerberos) ?
info->kerberos() :
default_kerberos;
readwrite_value = (info && info->writeAccess() != default_readwrite) ?
info->writeAccess() :
default_readwrite;
filesystem_value = (info && !info->filesystem().isEmpty()) ?
info->filesystem() :
default_filesystem;
#endif
// Put the values in the widgets:
m_port_input->setValue( port_value );
m_uid_input->setText( uid_value );
m_gid_input->setText( gid_value );
#ifndef __FreeBSD__
m_kerberos->setChecked( kerberos_value );
m_fs_input->setCurrentText( filesystem_value.upper() );
m_rw_input->setCurrentText( (readwrite_value ?
i18n( "read-write" ) :
i18n( "read-only" )) );
// Because we do not have Kerberos with CIFS, disable this button
// in that case:
m_kerberos->setEnabled( !(TQString::compare( filesystem_value, "cifs" ) == 0) );
#endif
// Does the 'Default' button need to be enabled?
#ifndef __FreeBSD__
if ( default_port != port_value ||
TQString::compare( default_filesystem, filesystem_value ) != 0 ||
default_kerberos != kerberos_value ||
default_readwrite != readwrite_value ||
TQString::compare( default_uid, uid_value ) != 0 ||
TQString::compare( default_gid, gid_value ) != 0 )
{
enable_default_button = true;
}
#else
if ( default_port != port_value ||
TQString::compare( default_uid, uid_value ) != 0 ||
TQString::compare( default_gid, gid_value ) != 0 )
{
enable_default_button = true;
}
#endif
// Connections:
connect( m_port_input, TQT_SIGNAL( valueChanged( int ) ),
this, TQT_SLOT( slotPortChanged( int ) ) );
connect( m_uid_input, TQT_SIGNAL( textChanged( const TQString & ) ),
this, TQT_SLOT( slotUIDChanged( const TQString & ) ) );
connect( m_gid_input, TQT_SIGNAL( textChanged( const TQString & ) ),
this, TQT_SLOT( slotGIDChanged( const TQString & ) ) );
#ifndef __FreeBSD__
connect( m_kerberos, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( slotKerberosToggled( bool ) ) );
connect( m_rw_input, TQT_SIGNAL( activated( const TQString & ) ),
this, TQT_SLOT( slotWriteAccessChanged( const TQString & ) ) );
connect( m_fs_input, TQT_SIGNAL( activated( const TQString & ) ),
this, TQT_SLOT( slotFilesystemChanged( const TQString & ) ) );
#endif
break;
}
default:
{
// This should not happen...
break;
}
}
// Enable the buttons:
enableButton( Ok, false );
enableButton( User1, enable_default_button );
// Connect the buttons:
connect( this, TQT_SIGNAL( okClicked() ),
this, TQT_SLOT( slotOKButtonClicked() ) );
connect( this, TQT_SIGNAL( user1Clicked() ),
this, TQT_SLOT( slotDefaultButtonClicked() ) );
setFixedSize( (sizeHint().width() > 350 ? sizeHint().width() : 350), sizeHint().height() );
}
/////////////////////////////////////////////////////////////////////////////
// TQT_SLOT IMPLEMENTATIONS
/////////////////////////////////////////////////////////////////////////////
void Smb4KCustomOptionsDialog::slotPortChanged( int val )
{
port_changed_ok = (port_value != val);
port_changed_default = (default_port != val);
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
#ifndef __FreeBSD__
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
#endif
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
#ifndef __FreeBSD__
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
#endif
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
}
void Smb4KCustomOptionsDialog::slotFilesystemChanged( const TQString &text )
{
#ifndef __FreeBSD__
filesystem_changed_ok = (TQString::compare( filesystem_value, text.lower() ) != 0);
filesystem_changed_default = (TQString::compare( default_filesystem, text.lower() ) != 0);
// Authentication with Kerberos does not exist with mount.cifs:
if ( TQString::compare( text, "CIFS" ) == 0 )
{
m_kerberos->setEnabled( false );
}
else
{
m_kerberos->setEnabled( true );
}
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
#endif
}
void Smb4KCustomOptionsDialog::slotProtocolChanged( const TQString &protocol )
{
protocol_changed_ok = (TQString::compare( protocol_value, protocol.lower() ) != 0);
protocol_changed_default = (TQString::compare( default_protocol, protocol.lower() ) != 0);
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
#ifndef __FreeBSD__
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
#endif
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
#ifndef __FreeBSD__
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
#endif
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
}
void Smb4KCustomOptionsDialog::slotKerberosToggled( bool on )
{
kerberos_changed_ok = (kerberos_value != on);
kerberos_changed_default = (default_kerberos != on);
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
#ifndef __FreeBSD__
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
#endif
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
#ifndef __FreeBSD__
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
#endif
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
}
void Smb4KCustomOptionsDialog::slotWriteAccessChanged( const TQString &rw )
{
#ifndef __FreeBSD__
bool readwrite = (TQString::compare( rw, i18n( "read-write" ) ) == 0);
readwrite_changed_ok = (readwrite_value != readwrite);
readwrite_changed_default = (default_readwrite != readwrite);
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
#endif
}
void Smb4KCustomOptionsDialog::slotUIDChanged( const TQString &uid )
{
uid_changed_ok = (TQString::compare( uid_value, uid ) != 0);
uid_changed_default = (TQString::compare( default_uid, uid ) != 0);
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
#ifndef __FreeBSD__
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
#endif
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
#ifndef __FreeBSD__
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
#endif
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
}
void Smb4KCustomOptionsDialog::slotGIDChanged( const TQString &gid )
{
gid_changed_ok = (TQString::compare( gid_value, gid ) != 0);
gid_changed_default = (TQString::compare( default_gid, gid ) != 0);
switch ( m_type )
{
case Host:
{
enableButton( Ok, port_changed_ok ||
protocol_changed_ok ||
kerberos_changed_ok );
enableButton( User1, port_changed_default ||
protocol_changed_default ||
kerberos_changed_default );
break;
}
case Share:
{
enableButton( Ok, port_changed_ok ||
#ifndef __FreeBSD__
filesystem_changed_ok ||
kerberos_changed_ok ||
readwrite_changed_ok ||
#endif
uid_changed_ok ||
gid_changed_ok );
enableButton( User1, port_changed_default ||
#ifndef __FreeBSD__
filesystem_changed_default ||
kerberos_changed_default ||
readwrite_changed_default ||
#endif
uid_changed_default ||
gid_changed_default );
break;
}
default:
{
break;
}
}
}
void Smb4KCustomOptionsDialog::slotOKButtonClicked()
{
Smb4KSambaOptionsInfo *info = NULL;
switch ( m_type )
{
case Host:
{
TQString item_name = m_host_item->name();
// Check if we can remove the item:
if ( !port_changed_default && !protocol_changed_default && !kerberos_changed_default )
{
optionsHandler()->removeItem( item_name, true );
}
else
{
// First search for the item in the custom options list
// and create a new one only if the info could not be
// found:
if ( !(info = optionsHandler()->findItem( item_name, true )) )
{
info = new Smb4KSambaOptionsInfo( item_name );
}
// Put in the needed information:
info->setPort( m_port_input->value() );
info->setProtocol( TQString::compare( m_proto_input->currentText(), i18n( "auto" ) ) == 0 ?
"auto" :
m_proto_input->currentText().lower() );
info->setKerberos( m_kerberos->isChecked() );
// Add the new item.
optionsHandler()->addItem( info, true );
}
break;
}
case Share:
{
TQString item_name = TQString( "//%1/%2" ).arg( m_share_item->host(),
TQString::compare( m_share_item->name(), "homes" ) == 0 ?
m_homes_user :
m_share_item->name() );
#ifndef __FreeBSD__
// Check if we can remove the item:
if ( !port_changed_default && !filesystem_changed_default && !kerberos_changed_default &&
!readwrite_changed_default && !uid_changed_default && !gid_changed_default )
{
optionsHandler()->removeItem( item_name, true );
}
else
{
// First search for the item in the custom options list
// and create a new one only if the info could not be
// found:
if ( !(info = optionsHandler()->findItem( item_name, true )) )
{
info = new Smb4KSambaOptionsInfo( item_name );
}
// Put in the needed information:
info->setPort( m_port_input->value() );
info->setKerberos( m_kerberos->isChecked() );
info->setWriteAccess( (TQString::compare( m_rw_input->currentText(), i18n( "read-write" ) ) == 0) );
info->setFilesystem( m_fs_input->currentText().lower() );
info->setUID( m_uid_input->text() );
info->setGID( m_gid_input->text() );
// Add the new item.
optionsHandler()->addItem( info, true );
}
#else
// Check if we can remove the item:
if ( !port_changed_default && !kerberos_changed_default && !uid_changed_default &&
!gid_changed_default )
{
optionsHandler()->removeItem( item_name, true );
}
else
{
// First search for the item in the custom options list
// and create a new one only if the info could not be
// found:
if ( !(info = optionsHandler()->findItem( item_name, true )) )
{
info = new Smb4KSambaOptionsInfo( item_name );
}
// Put in the needed information:
info->setPort( m_port_input->value() );
info->setUID( m_uid_input->text() );
info->setGID( m_gid_input->text() );
// Add the new item.
optionsHandler()->addItem( info, true );
}
#endif
break;
}
default:
{
break;
}
}
}
void Smb4KCustomOptionsDialog::slotDefaultButtonClicked()
{
// Here, we only reset the dialog and enable the OK button
// if necessary.
switch ( m_type )
{
case Host:
{
m_port_input->setValue( default_port );
m_kerberos->setChecked( default_kerberos );
TQString protocol = (TQString::compare( default_protocol, "auto" ) == 0 ? i18n( "auto" ) : protocol_value.upper());
m_proto_input->setCurrentText( protocol );
// Enable or disable the OK button:
enableButton( Ok, default_port != port_value ||
default_kerberos != kerberos_value ||
TQString::compare( default_protocol, protocol_value ) != 0 );
break;
}
case Share:
{
m_port_input->setValue( default_port );
m_uid_input->setText( default_uid );
m_gid_input->setText( default_gid );
#ifndef __FreeBSD__
m_kerberos->setChecked( default_kerberos );
TQString write_access = (default_readwrite ? i18n( "read-write" ) : i18n( "read-only" ));
m_rw_input->setCurrentText( write_access );
m_fs_input->setCurrentText( default_filesystem.upper() );
// Enable or disable the Kerberos check box depending on
// the (default) file system:
if ( TQString::compare( default_filesystem, "cifs" ) == 0 )
{
m_kerberos->setEnabled( false );
}
else
{
m_kerberos->setEnabled( true );
}
#endif
// Enable or disable the OK button:
enableButton( Ok, default_port != port_value ||
#ifndef __FreeBSD__
default_kerberos != kerberos_value ||
TQString::compare( default_filesystem, filesystem_value ) != 0 ||
default_readwrite != readwrite_value ||
#endif
TQString::compare( default_uid, uid_value ) != 0 ||
TQString::compare( default_gid, gid_value ) != 0 );
break;
}
default:
{
break;
}
}
// We just put the default values into the dialog.
// Disable the 'Default' button:
enableButton( User1, false );
}
#include "smb4kcustomoptionsdialog.moc"