summaryrefslogtreecommitdiffstats
path: root/kdat/BackupProfileWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdat/BackupProfileWidget.cpp')
-rw-r--r--kdat/BackupProfileWidget.cpp259
1 files changed, 259 insertions, 0 deletions
diff --git a/kdat/BackupProfileWidget.cpp b/kdat/BackupProfileWidget.cpp
new file mode 100644
index 0000000..0b4dfa0
--- /dev/null
+++ b/kdat/BackupProfileWidget.cpp
@@ -0,0 +1,259 @@
+// KDat - a tar-based DAT archiver
+// Copyright (C) 1998-2000 Sean Vyain, svyain@mail.tds.net
+// Copyright (C) 2001-2002 Lawrence Widman, kdat@cardiothink.com
+//
+// 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
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qlistbox.h>
+#include <qpushbutton.h>
+
+#include <kapplication.h>
+
+#include "BackupProfile.h"
+#include "BackupProfileWidget.h"
+#include "Util.h"
+#include <klocale.h>
+
+#include "BackupProfileWidget.moc"
+
+BackupProfileWidget::BackupProfileWidget( QWidget* parent, const char* name )
+ : KTabCtl( parent, name )
+{
+ QWidget* one = new QWidget( this );
+ addTab( one, i18n( "Backup" ) );
+
+ QLabel* lbl1 = new QLabel( i18n( "Archive name:" ), one );
+ lbl1->setFixedSize( lbl1->sizeHint() );
+
+ _archiveName = new QLineEdit( one );
+ _archiveName->setFixedHeight( _archiveName->sizeHint().height() );
+
+ QLabel* lbl2 = new QLabel( i18n( "Working folder:" ), one );
+ lbl2->setFixedSize( lbl2->sizeHint() );
+
+ _workingDir = new QComboBox( FALSE, one );
+ _workingDir->setFixedHeight( _workingDir->sizeHint().height() );
+
+ QLabel* lbl3 = new QLabel( i18n( "Backup files:" ), one );
+ lbl3->setFixedHeight( lbl3->sizeHint().height() );
+
+ _files = new QListBox( one );
+
+ QWidget* two = new QWidget( this );
+ addTab( two, i18n( "Tar Options" ) );
+
+ _oneFilesystem = new QCheckBox( i18n( "Stay on one filesystem" ), two );
+ _oneFilesystem->setFixedHeight( _oneFilesystem->sizeHint().height() );
+
+ _incremental = new QCheckBox( i18n( "GNU listed incremental" ), two );
+ _incremental->setFixedHeight( _incremental->sizeHint().height() );
+ connect( _incremental, SIGNAL( toggled( bool ) ), this, SLOT( slotIncrementalToggled( bool ) ) );
+
+ _snapshotLabel = new QLabel( i18n( "Snapshot file:" ), two );
+ _snapshotLabel->setFixedSize( _snapshotLabel->sizeHint() );
+
+ _snapshotFile = new QLineEdit( two );
+ _snapshotFile->setFixedHeight( _snapshotFile->sizeHint().height() );
+
+ _removeSnapshot = new QCheckBox( i18n( "Remove snapshot file before backup" ), two );
+ _removeSnapshot->setFixedHeight( _removeSnapshot->sizeHint().height() );
+
+ slotIncrementalToggled( FALSE );
+
+ QVBoxLayout* l1 = new QVBoxLayout( one, 8, 4 );
+
+ QHBoxLayout* l1_1 = new QHBoxLayout();
+ l1->addLayout( l1_1 );
+ l1_1->addWidget( lbl1 );
+ l1_1->addWidget( _archiveName, 1 );
+
+ QHBoxLayout* l1_2 = new QHBoxLayout();
+ l1->addLayout( l1_2 );
+ l1_2->addWidget( lbl2 );
+ l1_2->addWidget( _workingDir, 1 );
+
+ l1->addWidget( lbl3 );
+ l1->addWidget( _files, 1 );
+
+ QVBoxLayout* l2 = new QVBoxLayout( two, 8, 4 );
+ l2->addWidget( _oneFilesystem );
+ l2->addWidget( _incremental );
+
+ QHBoxLayout* l2_1 = new QHBoxLayout();
+ l2->addLayout( l2_1 );
+ l2_1->addSpacing( 20 );
+ l2_1->addWidget( _snapshotLabel );
+ l2_1->addWidget( _snapshotFile, 1 );
+
+ QHBoxLayout* l2_2 = new QHBoxLayout();
+ l2->addLayout( l2_2 );
+ l2_2->addSpacing( 20 );
+ l2_2->addWidget( _removeSnapshot );
+
+ l2->addStretch( 1 );
+
+ connect( _archiveName , SIGNAL( textChanged( const QString & ) ), this, SLOT( slotTextChanged( const QString & ) ) );
+ connect( _workingDir , SIGNAL( activated( const QString & ) ) , this, SLOT( slotWorkingDirActivated( const QString & ) ) );
+ connect( _oneFilesystem , SIGNAL( toggled( bool ) ) , this, SLOT( slotToggled( bool ) ) );
+ connect( _incremental , SIGNAL( toggled( bool ) ) , this, SLOT( slotIncrementalToggled( bool ) ) );
+ connect( _snapshotFile , SIGNAL( textChanged( const QString & ) ), this, SLOT( slotTextChanged( const QString & ) ) );
+ connect( _removeSnapshot, SIGNAL( toggled( bool ) ) , this, SLOT( slotToggled( bool ) ) );
+}
+
+BackupProfileWidget::~BackupProfileWidget()
+{
+}
+
+void BackupProfileWidget::slotTextChanged( const QString & )
+{
+ emit sigSomethingChanged();
+}
+
+void BackupProfileWidget::slotToggled( bool )
+{
+ emit sigSomethingChanged();
+}
+
+void BackupProfileWidget::slotIncrementalToggled( bool set )
+{
+ _snapshotLabel->setEnabled( set );
+ _snapshotFile->setEnabled( set );
+ _removeSnapshot->setEnabled( set );
+
+ emit sigSomethingChanged();
+}
+
+void BackupProfileWidget::slotWorkingDirActivated( const QString & text )
+{
+ while ( FALSE == _relativeFiles.isEmpty() ) {
+ QString my_first = _relativeFiles.first();
+ _relativeFiles.remove( my_first );
+ }
+ _files->clear();
+
+ QStringList::Iterator i = _absoluteFiles.begin();
+ int remove = text.length();
+ if ( remove > 1 ) {
+ remove++;
+ }
+ for ( ; i != _absoluteFiles.end(); ++i ) {
+ QString fn = *i;
+ fn.remove( 0, remove );
+ if ( fn.isEmpty() ) {
+ fn = ".";
+ }
+ _files->insertItem( fn );
+ _relativeFiles.append( fn );
+ }
+
+ emit sigSomethingChanged();
+}
+
+void BackupProfileWidget::setBackupProfile( BackupProfile* backupProfile )
+{
+ // Set the archive name.
+ _archiveName->setText( backupProfile->getArchiveName() );
+
+ setAbsoluteFiles( backupProfile->getAbsoluteFiles() );
+
+ if ( !backupProfile->getWorkingDirectory().isNull() ) {
+ for ( int ii = 0; ii < _workingDir->count(); ii++ ) {
+ QString one = _workingDir->text( ii );
+ QString two = backupProfile->getWorkingDirectory();
+ // if ( _workingDir->text( ii ) == backupProfile->getWorkingDirectory() ) {
+ if( one == two ){
+ _workingDir->setCurrentItem( ii );
+ break;
+ }
+ }
+ }
+
+ // slotWorkingDirActivated( _workingDir->currentText() );
+ QString one = _workingDir->currentText();
+ slotWorkingDirActivated( one );
+
+ _oneFilesystem->setChecked( backupProfile->isOneFilesystem() );
+ _incremental->setChecked( backupProfile->isIncremental() );
+ _snapshotFile->setText( backupProfile->getSnapshotFile() );
+ _removeSnapshot->setChecked( backupProfile->getRemoveSnapshot() );
+
+ slotIncrementalToggled( backupProfile->isIncremental() );
+}
+
+void BackupProfileWidget::setAbsoluteFiles( const QStringList& files )
+{
+ // Copy the string list.
+ _absoluteFiles = files;
+
+ QString prefix = Util::longestCommonPath( files );
+
+ _workingDir->clear();
+ for ( int pos = prefix.length(); pos > 0; pos = prefix.findRev( '/', pos - 1 ) ) {
+ _workingDir->insertItem( prefix.left( pos ) );
+ }
+ _workingDir->insertItem( "/" );
+ _workingDir->setCurrentItem( 0 );
+
+ slotWorkingDirActivated( _workingDir->currentText() );
+}
+
+QString BackupProfileWidget::getArchiveName()
+{
+ return _archiveName->text();
+}
+
+QString BackupProfileWidget::getWorkingDirectory()
+{
+ if ( _workingDir->count() > 0 ) {
+ return _workingDir->currentText();
+ } else {
+ return 0;
+ }
+}
+
+const QStringList& BackupProfileWidget::getRelativeFiles()
+{
+ return _relativeFiles;
+}
+
+const QStringList& BackupProfileWidget::getAbsoluteFiles()
+{
+ return _absoluteFiles;
+}
+
+bool BackupProfileWidget::isOneFilesystem()
+{
+ return _oneFilesystem->isChecked();
+}
+
+bool BackupProfileWidget::isIncremental()
+{
+ return _incremental->isChecked();
+}
+
+QString BackupProfileWidget::getSnapshotFile()
+{
+ return _snapshotFile->text();
+}
+
+bool BackupProfileWidget::getRemoveSnapshot()
+{
+ return _removeSnapshot->isChecked();
+}