diff options
Diffstat (limited to 'kde2/kpsion/setupdialog.cpp')
-rw-r--r-- | kde2/kpsion/setupdialog.cpp | 257 |
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) { |