aboutsummaryrefslogtreecommitdiffstats
path: root/kde2/kpsion/setupdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kde2/kpsion/setupdialog.cpp')
-rw-r--r--kde2/kpsion/setupdialog.cpp257
1 files changed, 225 insertions, 32 deletions
diff --git a/kde2/kpsion/setupdialog.cpp b/kde2/kpsion/setupdialog.cpp
index 0498545..e049ec2 100644
--- a/kde2/kpsion/setupdialog.cpp
+++ b/kde2/kpsion/setupdialog.cpp
@@ -34,7 +34,9 @@
#include <kmessagebox.h>
#include <qlayout.h>
+#include <qgroupbox.h>
#include <qwhatsthis.h>
+#include <qheader.h>
#include <errno.h>
@@ -46,91 +48,150 @@ SetupDialog::SetupDialog(QWidget *parent, rfsv *plpRfsv, rpcs *plpRpcs)
QString tmp;
QStringList sl;
QStringList::Iterator sli;
+ QLabel *l;
KPsionConfig pcfg;
KConfig *config = kapp->config();
// Page 1
- page1 = addPage(i18n("Backup &folder"));
- QGridLayout *grid = new QGridLayout(page1, 1, 1,
- marginHint() * 2, spacingHint() * 2);
+ page1 = addPage(i18n("&Backup"));
+ QBoxLayout *box = new QVBoxLayout(page1, KDialog::spacingHint());
+
+ QGroupBox *gb = new QGroupBox(i18n("Backup folder"), page1, "bdirBox");
+ box->addWidget(gb);
+
+ QGridLayout *grid = new QGridLayout(gb, 1, 1, marginHint() * 2,
+ spacingHint() * 2);
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_BACKUPDIR));
tmp = config->readEntry(pcfg.getOptionName(KPsionConfig::OPT_BACKUPDIR));
oldBDir = tmp;
- bdirLabel = new QLabel(page1, "bdirLabel");
+ bdirLabel = new QLabel(gb, "bdirLabel");
bdirLabel->setText(tmp);
- bdirButton = new QPushButton(i18n("Browse"), page1);
-
- QWhatsThis::add(bdirLabel,
- i18n("This is the name of the backup folder."));
- QWhatsThis::add(bdirButton,
- i18n("Click here, for opening a dialog which lets you easily select the backup folder."));
- grid->addWidget(bdirLabel, 0, 1);
- grid->addWidget(bdirButton, 0, 2);
- grid->setColStretch(0, 1);
+ bdirButton = new QPushButton(i18n("Browse"), gb);
+
+ QWhatsThis::add(bdirLabel, i18n(
+ "<QT>This is the name of the backup folder. "
+ "Click on <B>Browse</B>, for opening a dialog which lets you easily "
+ "select the backup folder. If the backup folder is changed and "
+ "it already contains backups, these are moved to the new "
+ "location.</QT>"));
+ QWhatsThis::add(bdirButton, i18n(
+ "<QT>Click here, for opening a dialog which lets you easily "
+ "select the backup folder. If the backup folder is changed and "
+ "it already contains backups, these are moved to the new "
+ "location.</QT>"));
+ grid->addWidget(bdirLabel, 0, 0);
+ grid->addWidget(bdirButton, 0, 1);
connect(bdirButton, SIGNAL(clicked()), SLOT(slotBdirBrowse()));
+ grid->addRowSpacing(0, marginHint());
+ grid->setColStretch(0, 1);
- // Page 2
- page2 = addPage(i18n("Backup &policy"));
- grid = new QGridLayout(page2, 1, 1, marginHint() * 2, spacingHint() * 2);
+ gb = new QGroupBox(i18n("Backup strategy"), page1, "stratBox");
+ box->addWidget(gb);
- QLabel *l = new QLabel(i18n("&Incremental backup interval"), page2,
+ grid = new QGridLayout(gb, 1, 1, marginHint() * 2, spacingHint() * 2);
+ l = new QLabel(i18n("&Incremental backup interval"), gb,
"iBackupIntLabel");
grid->addWidget(l, 0, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>If you select an interval here, <B>KPsion</B> creates an entry "
+ "in your Autostart directory which performs an incremental backup of "
+ "selected drives. If your Psion is not connected at that time, "
+ "nothing will happen.</QT>"));
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_INCINTERVAL));
i = config->readNumEntry(pcfg.getOptionName(KPsionConfig::OPT_INCINTERVAL));
- iIntCombo = new KComboBox(false, page2, "iIntCombo");
+ iIntCombo = new KComboBox(false, gb, "iIntCombo");
iIntCombo->insertStringList(pcfg.getConfigBackupInterval());
iIntCombo->setCurrentItem(i);
grid->addWidget(iIntCombo, 0, 1);
l->setBuddy(iIntCombo);
+ QWhatsThis::add(iIntCombo, i18n(
+ "<QT>If you select an interval here, <B>KPsion</B> creates an entry "
+ "in your Autostart directory which performs an incremental backup of "
+ "selected drives. If your Psion is not connected at that time, "
+ "nothing will happen.</QT>"));
- l = new QLabel(i18n("&Full backup interval"), page2, "fBackupIntLabel");
+ l = new QLabel(i18n("&Full backup interval"), gb, "fBackupIntLabel");
grid->addWidget(l, 1, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>If you select an interval here, <B>KPsion</B> creates an entry "
+ "in your Autostart directory which performs a full backup of "
+ "selected drives. If your Psion is not connected at that time, "
+ "nothing will happen.</QT>"));
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_FULLINTERVAL));
i = config->readNumEntry(pcfg.getOptionName(KPsionConfig::OPT_FULLINTERVAL));
- fIntCombo = new KComboBox(false, page2, "fIntCombo");
+ fIntCombo = new KComboBox(false, gb, "fIntCombo");
fIntCombo->insertStringList(pcfg.getConfigBackupInterval());
fIntCombo->setCurrentItem(i);
grid->addWidget(fIntCombo, 1, 1);
l->setBuddy(fIntCombo);
+ QWhatsThis::add(fIntCombo, i18n(
+ "<QT>If you select an interval here, <B>KPsion</B> creates an entry "
+ "in your Autostart directory which performs a full backup of "
+ "selected drives. If your Psion is not connected at that time, "
+ "nothing will happen.</QT>"));
- l = new QLabel(i18n("Backup &generations"), page2, "backupGenLabel");
+ l = new QLabel(i18n("Backup &generations"), gb, "backupGenLabel");
grid->addWidget(l, 2, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>Specify the number of backup generations you want to keep "
+ "on your machine. One backup generation means a full backup of "
+ "a drive plus eventually made incrmental backups of that drive. "
+ "This is checked every time, a full backup is done and if the "
+ "number of existing backups is exceeded, the oldest backup and "
+ "its corresponding incremental backups are deleted.</QT>"));
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_BACKUPGEN));
i = config->readNumEntry(pcfg.getOptionName(KPsionConfig::OPT_BACKUPGEN));
- genSpin = new KIntSpinBox(0, 10, 1, i, 10, page2, "backupGenSpin");
+ genSpin = new KIntSpinBox(0, 10, 1, i, 10, gb, "backupGenSpin");
grid->addWidget(genSpin, 2, 1);
l->setBuddy(genSpin);
-
+ QWhatsThis::add(genSpin, i18n(
+ "<QT>Specify the number of backup generations you want to keep "
+ "on your machine. One backup generation means a full backup of "
+ "a drive plus eventually made incrmental backups of that drive. "
+ "This is checked every time, a full backup is done and if the "
+ "number of existing backups is exceeded, the oldest backup and "
+ "its corresponding incremental backups are deleted.</QT>"));
+
+ grid->addRowSpacing(0, marginHint());
grid->setColStretch(0, 1);
// Page 3
- page3 = addPage(i18n("&Connection"));
- grid = new QGridLayout(page3, 1, 1, marginHint() * 2, spacingHint() * 2);
+ page2 = addPage(i18n("&Connection"));
+ grid = new QGridLayout(page2, 1, 1, marginHint() * 2, spacingHint() * 2);
- l = new QLabel(i18n("&Connection retry interval (sec.)"), page3,
+ l = new QLabel(i18n("&Connection retry interval (sec.)"), page2,
"rconLabel");
grid->addWidget(l, 0, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>If this is not 0, <B>KPsion</B> attempts to retry connection "
+ "setup.</QT>"));
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_CONNRETRY));
i = config->readNumEntry(pcfg.getOptionName(KPsionConfig::OPT_CONNRETRY));
- rconSpin = new KIntSpinBox(0, 600, 1, i, 10, page3, "rconSpin");
+ rconSpin = new KIntSpinBox(0, 600, 1, i, 10, page2, "rconSpin");
grid->addWidget(rconSpin, 0, 1);
l->setBuddy(rconSpin);
+ QWhatsThis::add(rconSpin, i18n(
+ "<QT>If this is not 0, <B>KPsion</B> attempts to retry connection "
+ "setup.</QT>"));
- l = new QLabel(i18n("Serial &device"), page3, "devLabel");
+ l = new QLabel(i18n("Serial &device"), page2, "devLabel");
grid->addWidget(l, 1, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>If a device is selected here and the connection can not "
+ "established at startup, <B>KPsion</B> will attempt to start "
+ "the ncpd daemon with appropriate parameters.</QT>"));
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_SERIALDEV));
tmp = config->readEntry(pcfg.getOptionName(KPsionConfig::OPT_SERIALDEV));
- devCombo = new KComboBox(false, page3, "devCombo");
+ devCombo = new KComboBox(false, page2, "devCombo");
sl = pcfg.getConfigDevices();
devCombo->insertStringList(sl);
if (tmp == "off")
@@ -142,14 +203,22 @@ SetupDialog::SetupDialog(QWidget *parent, rfsv *plpRfsv, rpcs *plpRpcs)
}
grid->addWidget(devCombo, 1, 1);
l->setBuddy(devCombo);
+ QWhatsThis::add(devCombo, i18n(
+ "<QT>If a device is selected here and the connection can not "
+ "established at startup, <B>KPsion</B> will attempt to start "
+ "the ncpd daemon with appropriate parameters.</QT>"));
- l = new QLabel(i18n("Serial &speed"), page3, "speedLabel");
+ l = new QLabel(i18n("Serial &speed"), page2, "speedLabel");
grid->addWidget(l, 2, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>If a device is selected at <B>Serial device</B> and the "
+ "connection can not established at startup, <B>KPsion</B> will "
+ "attempt to start the ncpd daemon with appropriate parameters.</QT>"));
config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_SERIALSPEED));
tmp = config->readEntry(pcfg.getOptionName(KPsionConfig::OPT_SERIALSPEED));
- speedCombo = new KComboBox(false, page3, "speedCombo");
+ speedCombo = new KComboBox(false, page2, "speedCombo");
sl = pcfg.getConfigSpeeds();
speedCombo->insertStringList(sl);
for (i = 0, sli = sl.begin(); sli != sl.end(); ++i, ++sli) {
@@ -158,15 +227,139 @@ SetupDialog::SetupDialog(QWidget *parent, rfsv *plpRfsv, rpcs *plpRpcs)
}
grid->addWidget(speedCombo, 2, 1);
l->setBuddy(speedCombo);
+ QWhatsThis::add(speedCombo, i18n(
+ "<QT>If a device is selected at <B>Serial device</B> and the "
+ "connection can not established at startup, <B>KPsion</B> will "
+ "attempt to start the ncpd daemon with appropriate parameters.</QT>"));
+
grid->setColStretch(0, 1);
+ // Page 4
+ page3 = addPage(i18n("&Machines"));
+ grid = new QGridLayout(page3, 1, 1, marginHint() * 2, spacingHint() * 2);
+
+ l = new QLabel(page3, "nameLabel");
+ l->setText(i18n("Machine &UID"));
+ grid->addWidget(l, 0, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>This shows the known machines. Select an entry here and you "
+ "will be able to change its name and specify the drives that should "
+ "be selected for automatic backups. You also can delete a machine "
+ "which includes deleting all backups for it.</QT>"));
+
+ config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_UIDS));
+ sl = config->readListEntry(pcfg.getOptionName(KPsionConfig::OPT_UIDS));
+ machCombo = new KComboBox(false, page3, "machCombo");
+ machCombo->insertStringList(sl);
+ grid->addWidget(machCombo, 0, 1);
+ l->setBuddy(machCombo);
+ QWhatsThis::add(machCombo, i18n(
+ "<QT>This shows the known machines. Select an entry here and you "
+ "will be able to change its name and specify the drives that should "
+ "be selected for automatic backups. You also can delete a machine "
+ "which includes deleting all backups for it.</QT>"));
+
+ l = new QLabel(page3, "nameLabel");
+ l->setText(i18n("Machine &Name"));
+ grid->addWidget(l, 1, 0);
+ QWhatsThis::add(l, i18n(
+ "<QT>You can change the name of the machine here. The name "
+ "is not used internally but only provided for display purposes.</QT>"));
+
+ nameEdit = new KLineEdit(page3, "nameEdit");
+ grid->addWidget(nameEdit, 1, 1);
+ l->setBuddy(nameEdit);
+ QWhatsThis::add(l, i18n(
+ "<QT>You can change the name of the machine here. The name "
+ "is not used internally but only provided for display purposes.</QT>"));
+
+ mdelButton = new QPushButton(i18n("Delete"), page3);
+ grid->addMultiCellWidget(mdelButton, 0, 1, 2, 2);
+ connect(mdelButton, SIGNAL(clicked()), SLOT(slotDeleteMachine()));
+ QWhatsThis::add(mdelButton, i18n(
+ "<QT>Click here to delete the selected machine from the list of "
+ "known machines. This includes deleting all backups of that "
+ "machine.</QT>"));
+
+ backupListView = new KListView(page3, "bdriveListView");
+ backupListView->addColumn(i18n("Automatic backup drives"));
+
+ backupListView->header()->setClickEnabled(false);
+ backupListView->header()->setResizeEnabled(false);
+ backupListView->header()->setMovingEnabled(false);
+ int height = backupListView->header()->height();
+ backupListView->setMinimumWidth(backupListView->columnWidth(0) + 4);
+ backupListView->setMinimumHeight(height + 10);
+ backupListView->setMaximumHeight(height + 10);
+ QWhatsThis::add(backupListView, i18n(
+ "<QT>Here, you can select the drives which shall be included in "
+ "atomatic backups.</QT>"));
+
+ grid->addMultiCellWidget(backupListView, 2, 2, 0, 2);
+ connect(machCombo, SIGNAL(activated(int)), SLOT(slotMachineChanged(int)));
+ slotMachineChanged(0);
+ grid->setColStretch(0, 1);
+ grid->setRowStretch(2, 1);
+
connect(this, SIGNAL(defaultClicked()), SLOT(slotDefaultClicked()));
connect(this, SIGNAL(okClicked()), SLOT(slotSaveSettings()));
connect(this, SIGNAL(applyClicked()), SLOT(slotSaveSettings()));
}
void SetupDialog::
+slotMachineChanged(int idx) {
+ KPsionConfig pcfg;
+ KConfig *config = kapp->config();
+ int height = 0;
+ QString mach = machCombo->currentText();
+
+ backupListView->clear();
+ nameEdit->clear();
+ config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_MACHNAME));
+ nameEdit->setText(config->readEntry(
+ pcfg.getOptionName(KPsionConfig::OPT_MACHNAME).arg(mach)));
+
+ config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_DRIVES));
+ QStringList drives = config->readListEntry(
+ pcfg.getOptionName(KPsionConfig::OPT_DRIVES).arg(mach));
+ config->setGroup(pcfg.getSectionName(KPsionConfig::OPT_BACKUPDRIVES));
+ QStringList bDrives = config->readListEntry(
+ pcfg.getOptionName(KPsionConfig::OPT_BACKUPDRIVES).arg(mach));
+
+ QStringList::Iterator it;
+ for (it = drives.begin(); it != drives.end(); it++) {
+ QCheckListItem *i = new QCheckListItem(backupListView, *it,
+ QCheckListItem::CheckBox);
+ height += i->height();
+ if (bDrives.find(*it) != bDrives.end())
+ i->setOn(true);
+ i->setSelectable(false);
+ }
+ if (idx == -1)
+ return;
+ height += backupListView->header()->height();
+ backupListView->setMinimumWidth(backupListView->columnWidth(0) + 4);
+ backupListView->setMinimumHeight(height + 10);
+ backupListView->setMaximumHeight(height + 10);
+}
+
+void SetupDialog::
+slotDeleteMachine() {
+ QString mach = machCombo->currentText();
+
+ int res = KMessageBox::questionYesNo(this, i18n(
+ "<QT>Removing a machine also removes all backups of this machine.<BR/>"
+ "<B>This can not be reverted!</B><BR/>"
+ "Do you really want to remove the machine %1 (%2)?</QT>"
+ ).arg(mach).arg(nameEdit->text()));
+ if (res != KMessageBox::Yes)
+ return;
+ machCombo->removeItem(machCombo->currentItem());
+ slotMachineChanged(-1);
+}
+
+void SetupDialog::
slotDefaultClicked() {
KPsionConfig pcfg;
@@ -323,7 +516,7 @@ checkBackupDir(QString &dir) {
if ((*ei) == (*ui)) {
QString from = oldBDir;
QString to = dir;
-
+
from += "/"; from += *ui;
to += "/"; to += *ui;
if (::rename(from.latin1(), to.latin1()) != 0) {