1
// KDat - a tar-based DAT archiver
2
// Copyright (C) 1998-2000 Sean Vyain, svyain@mail.tds.net
3
// Copyright (C) 2001-2002 Lawrence Widman, kdat@cardiothink.com
5
// This program is free software; you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation; either version 2 of the License, or
8
// (at your option) any later version.
10
// This program is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
// GNU General Public License for more details.
15
// You should have received a copy of the GNU General Public License
16
// along with this program; if not, write to the Free Software
17
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
#include <q3listbox.h>
25
#include <QPushButton>
27
#include <QVBoxLayout>
28
#include <QHBoxLayout>
31
#include "BackupProfile.h"
32
#include "BackupProfileWidget.h"
36
#include "BackupProfileWidget.moc"
38
BackupProfileWidget::BackupProfileWidget( QWidget* parent, const char* name )
42
QWidget* one = new QWidget( this );
43
addTab( one, i18n( "Backup" ) );
45
QLabel* lbl1 = new QLabel( i18n( "Archive name:" ), one );
46
lbl1->setFixedSize( lbl1->sizeHint() );
48
_archiveName = new QLineEdit( one );
49
_archiveName->setFixedHeight( _archiveName->sizeHint().height() );
51
QLabel* lbl2 = new QLabel( i18n( "Working folder:" ), one );
52
lbl2->setFixedSize( lbl2->sizeHint() );
54
_workingDir = new QComboBox( FALSE, one );
55
_workingDir->setFixedHeight( _workingDir->sizeHint().height() );
57
QLabel* lbl3 = new QLabel( i18n( "Backup files:" ), one );
58
lbl3->setFixedHeight( lbl3->sizeHint().height() );
60
_files = new Q3ListBox( one );
62
QWidget* two = new QWidget( this );
63
addTab( two, i18n( "Tar Options" ) );
65
_oneFilesystem = new QCheckBox( i18n( "Stay on one filesystem" ), two );
66
_oneFilesystem->setFixedHeight( _oneFilesystem->sizeHint().height() );
68
_incremental = new QCheckBox( i18n( "GNU listed incremental" ), two );
69
_incremental->setFixedHeight( _incremental->sizeHint().height() );
70
connect( _incremental, SIGNAL( toggled( bool ) ), this, SLOT( slotIncrementalToggled( bool ) ) );
72
_snapshotLabel = new QLabel( i18n( "Snapshot file:" ), two );
73
_snapshotLabel->setFixedSize( _snapshotLabel->sizeHint() );
75
_snapshotFile = new QLineEdit( two );
76
_snapshotFile->setFixedHeight( _snapshotFile->sizeHint().height() );
78
_removeSnapshot = new QCheckBox( i18n( "Remove snapshot file before backup" ), two );
79
_removeSnapshot->setFixedHeight( _removeSnapshot->sizeHint().height() );
81
slotIncrementalToggled( FALSE );
83
QVBoxLayout* l1 = new QVBoxLayout( one, 8, 4 );
85
QHBoxLayout* l1_1 = new QHBoxLayout();
86
l1->addLayout( l1_1 );
87
l1_1->addWidget( lbl1 );
88
l1_1->addWidget( _archiveName, 1 );
90
QHBoxLayout* l1_2 = new QHBoxLayout();
91
l1->addLayout( l1_2 );
92
l1_2->addWidget( lbl2 );
93
l1_2->addWidget( _workingDir, 1 );
95
l1->addWidget( lbl3 );
96
l1->addWidget( _files, 1 );
98
QVBoxLayout* l2 = new QVBoxLayout( two, 8, 4 );
99
l2->addWidget( _oneFilesystem );
100
l2->addWidget( _incremental );
102
QHBoxLayout* l2_1 = new QHBoxLayout();
103
l2->addLayout( l2_1 );
104
l2_1->addSpacing( 20 );
105
l2_1->addWidget( _snapshotLabel );
106
l2_1->addWidget( _snapshotFile, 1 );
108
QHBoxLayout* l2_2 = new QHBoxLayout();
109
l2->addLayout( l2_2 );
110
l2_2->addSpacing( 20 );
111
l2_2->addWidget( _removeSnapshot );
115
connect( _archiveName , SIGNAL( textChanged( const QString & ) ), this, SLOT( slotTextChanged( const QString & ) ) );
116
connect( _workingDir , SIGNAL( activated( const QString & ) ) , this, SLOT( slotWorkingDirActivated( const QString & ) ) );
117
connect( _oneFilesystem , SIGNAL( toggled( bool ) ) , this, SLOT( slotToggled( bool ) ) );
118
connect( _incremental , SIGNAL( toggled( bool ) ) , this, SLOT( slotIncrementalToggled( bool ) ) );
119
connect( _snapshotFile , SIGNAL( textChanged( const QString & ) ), this, SLOT( slotTextChanged( const QString & ) ) );
120
connect( _removeSnapshot, SIGNAL( toggled( bool ) ) , this, SLOT( slotToggled( bool ) ) );
123
BackupProfileWidget::~BackupProfileWidget()
127
void BackupProfileWidget::slotTextChanged( const QString & )
129
emit sigSomethingChanged();
132
void BackupProfileWidget::slotToggled( bool )
134
emit sigSomethingChanged();
137
void BackupProfileWidget::slotIncrementalToggled( bool set )
139
_snapshotLabel->setEnabled( set );
140
_snapshotFile->setEnabled( set );
141
_removeSnapshot->setEnabled( set );
143
emit sigSomethingChanged();
146
void BackupProfileWidget::slotWorkingDirActivated( const QString & text )
148
while ( FALSE == _relativeFiles.isEmpty() ) {
149
QString my_first = _relativeFiles.first();
150
_relativeFiles.remove( my_first );
154
QStringList::Iterator i = _absoluteFiles.begin();
155
int remove = text.length();
159
for ( ; i != _absoluteFiles.end(); ++i ) {
161
fn.remove( 0, remove );
162
if ( fn.isEmpty() ) {
165
_files->insertItem( fn );
166
_relativeFiles.append( fn );
169
emit sigSomethingChanged();
172
void BackupProfileWidget::setBackupProfile( BackupProfile* backupProfile )
174
// Set the archive name.
175
_archiveName->setText( backupProfile->getArchiveName() );
177
setAbsoluteFiles( backupProfile->getAbsoluteFiles() );
179
if ( !backupProfile->getWorkingDirectory().isNull() ) {
180
for ( int ii = 0; ii < _workingDir->count(); ii++ ) {
181
QString one = _workingDir->text( ii );
182
QString two = backupProfile->getWorkingDirectory();
183
// if ( _workingDir->text( ii ) == backupProfile->getWorkingDirectory() ) {
185
_workingDir->setCurrentItem( ii );
191
// slotWorkingDirActivated( _workingDir->currentText() );
192
QString one = _workingDir->currentText();
193
slotWorkingDirActivated( one );
195
_oneFilesystem->setChecked( backupProfile->isOneFilesystem() );
196
_incremental->setChecked( backupProfile->isIncremental() );
197
_snapshotFile->setText( backupProfile->getSnapshotFile() );
198
_removeSnapshot->setChecked( backupProfile->getRemoveSnapshot() );
200
slotIncrementalToggled( backupProfile->isIncremental() );
203
void BackupProfileWidget::setAbsoluteFiles( const QStringList& files )
205
// Copy the string list.
206
_absoluteFiles = files;
208
QString prefix = Util::longestCommonPath( files );
210
_workingDir->clear();
211
for ( int pos = prefix.length(); pos > 0; pos = prefix.lastIndexOf( '/', pos - 1 ) ) {
212
_workingDir->insertItem( prefix.left( pos ) );
214
_workingDir->insertItem( "/" );
215
_workingDir->setCurrentItem( 0 );
217
slotWorkingDirActivated( _workingDir->currentText() );
220
QString BackupProfileWidget::getArchiveName()
222
return _archiveName->text();
225
QString BackupProfileWidget::getWorkingDirectory()
227
if ( _workingDir->count() > 0 ) {
228
return _workingDir->currentText();
234
const QStringList& BackupProfileWidget::getRelativeFiles()
236
return _relativeFiles;
239
const QStringList& BackupProfileWidget::getAbsoluteFiles()
241
return _absoluteFiles;
244
bool BackupProfileWidget::isOneFilesystem()
246
return _oneFilesystem->isChecked();
249
bool BackupProfileWidget::isIncremental()
251
return _incremental->isChecked();
254
QString BackupProfileWidget::getSnapshotFile()
256
return _snapshotFile->text();
259
bool BackupProfileWidget::getRemoveSnapshot()
261
return _removeSnapshot->isChecked();