Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'DevicePropsPage (./kdelibs/kfile/kpropsdlg.h:518)
class DevicePropsPage : public PropsPage
{
Q_OBJECT
public:
DevicePropsPage( PropertiesDialog *_props );
~DevicePropsPage() { }
virtual QString tabName() const { return i18n("De&vice"); }
virtual void applyChanges();
static bool supports( KFileItemList _items );
protected slots:
void slotActivated( int );
protected:
QComboBox* device;
QLineEdit* mountpoint;
QCheckBox* readonly;
QLineEdit* fstype;
//KIconLoaderButton* mounted;
KIconLoaderButton* unmounted;
bool IamRoot;
QStringList m_devicelist;
int indexDevice;
int indexMountPoint;
int indexFSType;
QPixmap pixmap;
QString pixmapFile;
};
kdelibs'DevicePropsPage::DevicePropsPage() (./kdelibs/kfile/kpropsdlg.cpp:1557)
DevicePropsPage::DevicePropsPage( PropertiesDialog *_props ) : PropsPage( _props )
{
IamRoot = (geteuid() == 0);
QStringList devices;
QCString fstabFile;
indexDevice = 0; // device on first column
indexMountPoint = 1; // mount point on second column
indexFSType = 2; // fstype on third column
if ( QFile::exists(QString::fromLatin1("/etc/fstab")) ) // Linux, ...
{
fstabFile = "/etc/fstab";
}
else if ( QFile::exists(QString::fromLatin1("/etc/vfstab")) ) // Solaris
{
fstabFile = "/etc/vfstab";
indexMountPoint++;
indexFSType++;
}
// insert your favorite location for fstab here
if ( !fstabFile.isEmpty() )
{
QFile f( fstabFile );
f.open( IO_ReadOnly );
QTextStream stream( &f );
while ( !stream.eof() )
{
QString line = stream.readLine();
line = line.simplifyWhiteSpace();
if (!line.isEmpty() && line[0] == '/') // skip comments but also
{
QStringList lst = QStringList::split( ' ', line );
if ( lst.count() > 2 && lst[indexDevice] != QString::fromLatin1("/proc")
&& lst[indexMountPoint] != QString::fromLatin1("none")
&& lst[indexMountPoint] != QString::fromLatin1("-") )
{
devices.append( lst[indexDevice]+QString::fromLatin1(" (")
+lst[indexMountPoint]+QString::fromLatin1(")") );
m_devicelist.append( line );
}
}
}
f.close();
}
QGridLayout *layout = new QGridLayout(this, 0, 3, KDialog::marginHint(),
KDialog::spacingHint());
layout->setColStretch(1, 1);
QLabel* label;
label = new QLabel( this );
label->setText( devices.count() == 0 ?
i18n("Device (/dev/fd0):") : // old style
i18n("Device:") ); // new style (combobox)
layout->addWidget(label, 0, 0);
device = new QComboBox( true, this, "ComboBox_device" );
device->insertStringList( devices );
layout->addWidget(device, 0, 1);
connect( device, SIGNAL( activated( int ) ),
this, SLOT( slotActivated( int ) ) );
readonly = new QCheckBox( this, "CheckBox_readonly" );
readonly->setText( i18n("Read Only") );
layout->addWidget(readonly, 1, 1);
if ( !IamRoot )
readonly->setEnabled( false );
label = new QLabel( this );
label->setText( devices.count()==0 ?
i18n("Mount Point (/mnt/floppy):") : // old style
i18n("Mount Point:")); // new style (combobox)
layout->addWidget(label, 2, 0);
mountpoint = new KLineEdit( this, "LineEdit_mountpoint" );
layout->addWidget(mountpoint, 2, 1);
if ( !IamRoot )
mountpoint->setEnabled( false );
label = new QLabel( this );
label->setText( i18n("File System Type:") );
layout->addWidget(label, 3, 0);
fstype = new KLineEdit( this, "LineEdit_fstype" );
layout->addWidget(fstype, 3, 1);
if ( !IamRoot )
fstype->setEnabled( false );
QFrame *frame = new QFrame(this);
frame->setFrameStyle(QFrame::HLine|QFrame::Sunken);
layout->addMultiCellWidget(frame, 4, 4, 0, 2);
unmounted = new KIconLoaderButton( KGlobal::iconLoader(), this );
unmounted->setFixedSize(50, 50);
unmounted->setIconType(KIcon::Desktop, KIcon::Device);
layout->addWidget(unmounted, 5, 0);
label = new QLabel( i18n("Unmounted Icon"), this );
layout->addWidget(label, 5, 1);
layout->setRowStretch(6, 1);
QString path( _props->kurl().path() );
QFile f( path );
if ( !f.open( IO_ReadOnly ) )
return;
f.close();
KSimpleConfig config( path );
config.setDesktopGroup();
QString deviceStr = config.readEntry( QString::fromLatin1("Dev") );
QString mountPointStr = config.readEntry( QString::fromLatin1("MountPoint") );
bool ro = config.readBoolEntry( QString::fromLatin1("ReadOnly"), false );
QString fstypeStr = config.readEntry( QString::fromLatin1("FSType") );
QString unmountedStr = config.readEntry( QString::fromLatin1("UnmountIcon") );
device->setEditText( deviceStr );
if ( !deviceStr.isEmpty() ) {
// Set default options for this device (first matching entry)
int index = 0;
for ( QStringList::Iterator it = m_devicelist.begin();
it != m_devicelist.end(); ++it, ++index ) {
// WARNING : this works only if indexDevice == 0
if ( (*it).left( deviceStr.length() ) == deviceStr ) {
//qDebug( "found it %d", index );
slotActivated( index );
break;
}
}
}
if ( !mountPointStr.isEmpty() )
mountpoint->setText( mountPointStr );
if ( !fstypeStr.isEmpty() )
fstype->setText( fstypeStr );
readonly->setChecked( ro );
if ( unmountedStr.isEmpty() )
unmountedStr = KMimeType::mimeType(QString::fromLatin1("application/octet-stream"))->KServiceType::icon(); // default icon
unmounted->setIcon( unmountedStr );
}
kdelibs'DevicePropsPage::slotActivated() (./kdelibs/kfile/kpropsdlg.cpp:1706)
void DevicePropsPage::slotActivated( int index )
{
QStringList lst = QStringList::split( ' ', m_devicelist[index] );
device->setEditText( lst[indexDevice] );
mountpoint->setText( lst[indexMountPoint] );
fstype->setText( lst[indexFSType] );
}
kdelibs'DevicePropsPage::supports() (./kdelibs/kfile/kpropsdlg.cpp:1714)
bool DevicePropsPage::supports( KFileItemList _items )
{
KFileItem * item = _items.first();
// check if desktop file
if ( !PropsPage::isDesktopFile( item ) )
return false;
// open file and check type
KDesktopFile config( item->url().path(), true /* readonly */ );
return config.hasDeviceType();
}
kdelibs'DevicePropsPage::applyChanges() (./kdelibs/kfile/kpropsdlg.cpp:1725)
void DevicePropsPage::applyChanges()
{
QString path = properties->kurl().path();
QFile f( path );
if ( !f.open( IO_ReadWrite ) )
{
KMessageBox::sorry( 0, i18n("Could not save properties\nYou most likely do not have access to write to %1.").arg(path));
return;
}
f.close();
KSimpleConfig config( path );
config.setDesktopGroup();
config.writeEntry( QString::fromLatin1("Type"), QString::fromLatin1("FSDevice") );
config.writeEntry( QString::fromLatin1("Dev"), device->currentText() );
if ( IamRoot )
{
config.writeEntry( QString::fromLatin1("MountPoint"), mountpoint->text() );
config.writeEntry( QString::fromLatin1("FSType"), fstype->text() );
}
config.writeEntry( QString::fromLatin1("UnmountIcon"), unmounted->icon() );
kdDebug(1203) << "unmounted->icon() = " << unmounted->icon() << endl;
config.writeEntry( QString::fromLatin1("ReadOnly"), readonly->isChecked() );
config.sync();
}