summaryrefslogtreecommitdiffstats
path: root/kdat/Options.h
blob: 4f65795e856dee5d186bf8646dd081606973a1c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
// 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

#ifndef _Options_h_
#define _Options_h_

#include <qobject.h>

class KConfig;

/**
 * @short The central repository for user preferences.
 */
class Options : public QObject {
    Q_OBJECT
    KConfig* _config;
    int      _defaultTapeSize;
    int      _tapeBlockSize;
    QString  _tapeDevice;
    QString  _tarCommand;
    bool     _loadOnMount;
    bool     _lockOnMount;
    bool     _ejectOnUnmount;
    bool     _variableBlockSize;

    static Options* _instance;

    Options();
public:
    /**
     * Get a reference to the single instance of the Options object.
     *
     * @return A pointer to the options object.
     */
    static Options* instance();
    
    /**
     * Save the current user preference settings.
     */
    void sync();

    /**
     * Get the default size to use when formatting a tape.
     *
     * @return The default size in kilobytes of a tape.
     */
    int getDefaultTapeSize();

    /**
     * The size of a tape block can be different from the size of a tar block.
     * Tar blocks are always 512 bytes long.  Be careful!
     *
     * @return the size in bytes of a single tape block
     */
    int getTapeBlockSize();

    /**
     * Get the full path to the tape device.
     *
     * @return The tape device path.
     */
    QString getTapeDevice();

    /**
     * Get the full path to the tar command.
     *
     * @return The path to the tar command.
     */
    QString getTarCommand();

    /**
     * Get whether to load the tape before attempting to mount it.
     *
     * @return TRUE if the tape should be loaded.
     */
    bool getLoadOnMount();

    /**
     * Get whether to lock the tape drive when a tape is mounted.
     *
     * @return TRUE if the tape drive should be locked, otherwise FALSE.
     */
    bool getLockOnMount();

    /**
     * Get whether to automatically eject the tape when it is unmounted.
     *
     * @return TRUE if the tape should be ejected, otherwise FALSE.
     */
    bool getEjectOnUnmount();

    /**
     * Get whether the tape drive supports variable block sizes.
     *
     * @return TRUE if the tape drive can handle the MTSETBLK command.
     */
    bool getVariableBlockSize();

    /**
     * Set the default size for new tapes.
     *
     * @param kbytes The size in kilobytes.
     */
    void setDefaultTapeSize( int kbytes );

    /**
     * Set the size of tape block.
     *
     * @param bytes The size in bytes of one tape block.
     */
    void setTapeBlockSize( int bytes );

    /**
     * Set the path to the tape device.
     *
     * @param str The full path to the tape device.
     */
    void setTapeDevice( const QString & str );

    /**
     * Set the path to the tar command.
     *
     * @param str The full path to the tar command.
     */
    void setTarCommand( const QString & str );

    /**
     * Set whether to load the tape before attempting to mount it.
     *
     * @param b TRUE if the tape should be loaded.
     */
    void setLoadOnMount( bool b );

    /**
     * Set whether to lock the tape drive whenever a tape is mounted.
     *
     * @param b TRUE means lock the drive, FALSE means don't.
     */
    void setLockOnMount( bool b );

    /**
     * Set whether to eject the tape drive whenever a tape is unmounted.
     *
     * @param b TRUE means eject the tape, FALSE means don't.
     */
    void setEjectOnUnmount( bool b );

    /**
     * Set whether the tape drive can support variable block sizes.
     *
     * @param b TRUE means the tape drive understands MTSETBLK.
     */
    void setVariableBlockSize( bool b );
signals:
    /**
     * Emitted when the default tape size changes.
     */
    void sigDefaultTapeSize();

    /**
     * Emitted when the tape block size changes.
     */
    void sigTapeBlockSize();

    /**
     * Emitted when the path to the tape device changes.
     */
    void sigTapeDevice();

    /**
     * Emitted when the path to the tar command changes.
     */
    void sigTarCommand();

    /**
     * Emitted when the load on mount feature is enabled/disabled.
     */
    void sigLoadOnMount();

    /**
     * Emitted when the lock on mount feature is enabled/disabled.
     */
    void sigLockOnMount();

    /**
     * Emitted when the eject on umount feature is enabled/disabled.
     */
    void sigEjectOnUnmount();

    /**
     * Emitted when the variable block size feature is enabled/disabled.
     */
    void sigVariableBlockSize();
};

#endif