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.
230 lines
7.5 KiB
230 lines
7.5 KiB
/*
|
|
Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.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 Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <tqcheckbox.h>
|
|
#include <tqtooltip.h>
|
|
#include <tqbuttongroup.h>
|
|
#include <tqlineedit.h>
|
|
#include <tqfileinfo.h>
|
|
#include <tqlabel.h>
|
|
#include <tqregexp.h>
|
|
#include <kpushbutton.h>
|
|
#include <tdemessagebox.h>
|
|
#include <tdelocale.h>
|
|
#include <tqcombobox.h>
|
|
#include <tqtimer.h>
|
|
#include <kdebug.h>
|
|
#include "propertiespage.h"
|
|
#include <dcopref.h>
|
|
|
|
// keep in sync with .ui and kded module
|
|
const char *short_names[] = {"lower", "win95", "winnt", "mixed", 0 };
|
|
const char *journales[] = {"data", "ordered", "writeback", 0 };
|
|
|
|
PropertiesPage::PropertiesPage(TQWidget* parent, const TQString &_id)
|
|
: PropertiesPageGUI(parent), id(_id)
|
|
{
|
|
kdDebug() << "props page " << id << endl;
|
|
DCOPRef mediamanager("kded", "mediamanager");
|
|
DCOPReply reply = mediamanager.call( "mountoptions", id);
|
|
|
|
TQStringList list;
|
|
|
|
if (reply.isValid())
|
|
list = reply;
|
|
|
|
if (list.size()) {
|
|
kdDebug() << "list " << list << endl;
|
|
|
|
for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
|
|
{
|
|
TQString key = (*it).left((*it).find('='));
|
|
TQString value = (*it).mid((*it).find('=') + 1);
|
|
kdDebug() << "key '" << key << "' value '" << value << "'\n";
|
|
options[key] = value;
|
|
}
|
|
|
|
if (!options.contains("ro"))
|
|
option_ro->hide();
|
|
else
|
|
option_ro->setChecked(options["ro"] == "true");
|
|
connect( option_ro, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("quiet"))
|
|
option_quiet->hide();
|
|
else
|
|
option_quiet->setChecked(options["quiet"] == "true");
|
|
connect( option_quiet, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("sync"))
|
|
option_sync->hide();
|
|
else
|
|
option_sync->setChecked(options["sync"] == "true");
|
|
connect( option_sync, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("atime"))
|
|
option_atime->hide();
|
|
else
|
|
option_atime->setChecked(options["atime"] == "true");
|
|
connect( option_atime, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("flush"))
|
|
option_flush->hide();
|
|
else
|
|
option_flush->setChecked(options["flush"] == "true");
|
|
connect( option_flush, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("utf8"))
|
|
option_utf8->hide();
|
|
else
|
|
option_utf8->setChecked(options["utf8"] == "true");
|
|
connect( option_utf8, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("uid"))
|
|
option_uid->hide();
|
|
else
|
|
option_uid->setChecked(options["uid"] == "true");
|
|
connect( option_uid, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
if (!options.contains("shortname"))
|
|
{
|
|
option_shortname->hide();
|
|
text_shortname->hide();
|
|
}
|
|
else
|
|
{
|
|
for (int index = 0; short_names[index]; ++index)
|
|
if (options["shortname"] == short_names[index])
|
|
{
|
|
option_shortname->setCurrentItem(index);
|
|
break;
|
|
}
|
|
connect( option_shortname, TQ_SIGNAL( activated(int) ), TQ_SIGNAL( changed() ) );
|
|
}
|
|
|
|
if (!options.contains("journaling"))
|
|
{
|
|
text_journaling->hide();
|
|
option_journaling->hide();
|
|
}
|
|
else
|
|
{
|
|
for (int index = 0; journales[index]; ++index)
|
|
if (options["journaling"] == journales[index])
|
|
{
|
|
option_journaling->setCurrentItem(index);
|
|
break;
|
|
}
|
|
connect( option_journaling, TQ_SIGNAL( activated(int) ), TQ_SIGNAL( changed() ) );
|
|
}
|
|
|
|
label_filesystem->setText(i18n("Filesystem: %1").arg(options["filesystem"]));
|
|
option_mountpoint->setText(options["mountpoint"]);
|
|
connect( option_mountpoint, TQ_SIGNAL( textChanged( const TQString &) ), TQ_SIGNAL( changed() ) );
|
|
option_automount->setChecked(options["automount"] == "true");
|
|
connect( option_automount, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
bool has_groupbox_specific = true;
|
|
if (!options.contains("journaling") &&
|
|
!options.contains("shortname") &&
|
|
!options.contains("uid") &&
|
|
!options.contains("utf8") &&
|
|
!options.contains("flush")) {
|
|
groupbox_specific->hide();
|
|
has_groupbox_specific = false;
|
|
}
|
|
|
|
// The order is important - we want groupboxes to hide automatically depending on use_defaults
|
|
// but don't want to emit changed() until user actually changes something.
|
|
connect( option_defaults, TQ_SIGNAL( toggled(bool) ), groupbox_generic, TQ_SLOT( setHidden(bool) ) );
|
|
if (has_groupbox_specific)
|
|
connect( option_defaults, TQ_SIGNAL( toggled(bool) ), groupbox_specific, TQ_SLOT( setHidden(bool) ) );
|
|
option_defaults->setChecked(options["use_defaults"] == "true");
|
|
connect( option_defaults, TQ_SIGNAL( stateChanged(int) ), TQ_SIGNAL( changed() ) );
|
|
|
|
} else {
|
|
|
|
groupbox_generic->setEnabled(false);
|
|
groupbox_specific->setEnabled(false);
|
|
label_filesystem->hide();
|
|
}
|
|
}
|
|
|
|
PropertiesPage::~PropertiesPage()
|
|
{
|
|
}
|
|
|
|
bool PropertiesPage::save()
|
|
{
|
|
TQStringList result;
|
|
|
|
if (options.contains("ro"))
|
|
result << TQString("ro=%1").arg(option_ro->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("quiet"))
|
|
result << TQString("quiet=%1").arg(option_quiet->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("sync"))
|
|
result << TQString("sync=%1").arg(option_sync->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("atime"))
|
|
result << TQString("atime=%1").arg(option_atime->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("flush"))
|
|
result << TQString("flush=%1").arg(option_flush->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("utf8"))
|
|
result << TQString("utf8=%1").arg(option_utf8->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("uid"))
|
|
result << TQString("uid=%1").arg(option_uid->isChecked() ? "true" : "false");
|
|
|
|
if (options.contains("shortname"))
|
|
result << TQString("shortname=%1").arg(short_names[option_shortname->currentItem()]);
|
|
|
|
if (options.contains("journaling"))
|
|
result << TQString("journaling=%1").arg(journales[option_journaling->currentItem()]);
|
|
|
|
TQString mp = option_mountpoint->text();
|
|
if (!mp.startsWith("/media/"))
|
|
{
|
|
KMessageBox::sorry(this, i18n("Mountpoint has to be below /media"));
|
|
return false;
|
|
}
|
|
result << TQString("mountpoint=%1").arg(mp);
|
|
result << TQString("automount=%1").arg(option_automount->isChecked() ? "true" : "false");
|
|
result << TQString("use_defaults=%1").arg(option_defaults->isChecked() ? "true" : "false");
|
|
|
|
kdDebug() << result << endl;
|
|
|
|
DCOPRef mediamanager("kded", "mediamanager");
|
|
DCOPReply reply = mediamanager.call( "setMountoptions", id, result);
|
|
|
|
if (reply.isValid())
|
|
return (bool)reply;
|
|
else {
|
|
KMessageBox::sorry(this,
|
|
i18n("Saving the changes failed"));
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#include "propertiespage.moc"
|