Subversion Repositories svn1-original

Rev

Rev 178 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
176 - 1
#include "qmconfig.h"
2
#include "mainwindow.h"
3
#include <QFileDialog>
4
#include <QObject>
5
#include <QMessageBox>
6
 
7
// Global Data
8
MARA_CFG    config;
9
 
10
 
11
QmConfig::QmConfig(const QString &cnfFile)
12
{
13
    fileName = cnfFile;
14
    if ( !fileName.endsWith(".cnf",Qt::CaseInsensitive))
15
    {
16
        fileName.append(".cnf");
17
    }
18
    if (cnfFile.isEmpty())
19
    {
20
        fileName = QFileDialog::getOpenFileName(0, "Select Config File",
21
                                                         QDir::currentPath(),
22
                                                         "Data (*.cnf);;All (*.*)",
23
                                                         0,
24
 
25
                                                         );
26
    }
27
 
28
    //  No file selected
29
    //  Just exit
30
    if (fileName.isEmpty())
31
    {
32
        qDebug("No Confog file selected");
33
        exit(1);
34
    }
35
 
36
    if ( !open_read_config() )
37
    {
38
        if (QMessageBox::Cancel == QMessageBox::question ( 0,
39
                                                       "Config Load Error",
40
                                                       "Cannot load or read configuration file.\n"
41
                                                       "If you continue a new configuration will be created\n"
42
                                                       "If you cancel then the application will terminate.",
43
                                                       QMessageBox::Ok | QMessageBox::Cancel
44
                                                       ) )
45
        {
46
            qDebug("Canel to bad config");
47
            exit(2);
48
        }
49
    }
50
}
51
 
52
 
53
bool QmConfig::open_read_config( void )
54
{
55
    bool result;
56
    // Open the file
57
    configFile.setFileName(fileName);
58
    if ( ! configFile.open(QIODevice::ReadOnly) )
59
    {
60
        MainWindow::showMessage("Cannot open config File");
61
        return (false );
62
    }
63
 
64
    result = read_config();
65
    configFile.close();
66
 
67
    if ( result )
68
    {
69
        /*
70
         **  Post read calculations and fixups
71
         */
72
        if( config.datafilename[0] )
73
        {
74
            strcpy( datfile, config.datafilename );
75
            strcat( datfile, ".dat" );
76
        }
77
        config.nonequestrian_class = lookup_class( config.nonequestrian_class_abr, &config );
78
    }
79
    return result;
80
}
81
 
82
/*========================================================================
83
 *
84
 *  Read in the configuration file
85
 *
86
 *  Purpose:
87
 *      This function is called to read in the configuration file
88
 *      NOTE: Must be maintained with the Writer function
89
 *
90
 *  Parameters:
91
 *      fcon        File number of the config file
92
 *
93
 *  Returns:
94
 *      FALSE if an error is encountered
95
 *
96
 *========================================================================*/
97
 
98
bool QmConfig::read_config( void )
99
{
100
    int         len;                            /* Length of data read */
101
    int         fsize;                          /* Length of desired data */
102
 
103
    /*
104
     * Event name
105
     */
106
qDebug( "Reading: Event Name" );
107
    fsize = sizeof( config.event_name );
108
    len = configFile.read( config.event_name, fsize );
109
    if( len != fsize )
110
        return ( FALSE );
111
 
112
    /*
113
     * Leg names
114
     */
115
qDebug( "Reading: Leg Names" );
116
    fsize = sizeof( config.leg_name );
117
    len = configFile.read( (char *)config.leg_name, fsize );
118
    if( len != fsize )
119
        return ( FALSE );
120
 
121
    /*
122
     * Team definitions
123
     */
124
qDebug( "Reading: Team Defs" );
125
    fsize = sizeof( config.t_def  );
126
    len = configFile.read( (char *)config.t_def, fsize );
127
    if( len != fsize )
128
        return ( FALSE );
129
 
130
    /*
131
     * Number of legs
132
     */
133
 
134
qDebug( "Reading: Leg Nums" );
135
    fsize = sizeof( config.num_legs  );
136
    len = configFile.read( (char *)&config.num_legs, fsize );
137
    if( len != fsize)
138
        return ( FALSE );
139
 
140
    /*
141
     * Number of team splits
142
     */
143
 
144
qDebug( "Reading: Team Splits" );
145
    fsize = sizeof( config.num_teams  );
146
    len = configFile.read( (char *)&config.num_teams, fsize );
147
    if( len != fsize )
148
        return ( FALSE );
149
 
150
    config.min_team = config.t_def[0].start;
151
    config.max_team = config.t_def[config.num_teams - 1].end;
152
 
153
    /*
154
     * Class information
155
     */
156
qDebug( "Reading: Class Data" );
157
    fsize = sizeof( config.team_class  );
158
    len = configFile.read( (char *)config.team_class, fsize );
159
    if( len != fsize )
160
        return ( FALSE );
161
    fsize = sizeof( config.num_class  );
162
    len = configFile.read( (char *)&config.num_class, fsize);
163
    if( len != fsize )
164
        return ( FALSE );
165
 
166
    /*
167
     * Country list
168
     */
169
 
170
qDebug( "Reading: Country Data, Name" );
171
    fsize = sizeof( config.country_name  );
172
    len = configFile.read( (char *)config.country_name, fsize );
173
    if( len != fsize )
174
        return ( FALSE );
175
 
176
qDebug( "Reading: Country Data, Number" );
177
    fsize = sizeof( config.num_countries  );
178
    len = configFile.read( (char *)&config.num_countries, fsize );
179
    if( len != fsize )
180
        return ( FALSE );
181
 
182
    /*
183
     * Addendum file
184
     */
185
 
186
qDebug( "Reading: Addendum File" );
187
    fsize = sizeof( config.addendum );
188
    len = configFile.read( config.addendum, fsize );
189
    if( len != fsize )
190
        return ( configFile.atEnd() );
191
 
192
    /*
193
     * Name of the data file
194
     */
195
 
196
qDebug( "Reading: Name of data file" );
197
    fsize = sizeof( config.datafilename );
198
    len = configFile.read( config.datafilename, fsize );
199
    if( len != fsize )
200
        return ( configFile.atEnd() );
201
 
202
    /*
203
     **  Non-equestrian configuration information
204
     */
205
qDebug( "Reading: NonEquest" );
206
    fsize = sizeof( config.nonequestrian_class_abr );
207
    len = configFile.read( config.nonequestrian_class_abr, fsize );
208
    if( len != fsize )
209
        return ( configFile.atEnd() );
210
 
211
qDebug( "Reading: NonEquest-2" );
212
    fsize = sizeof( config.equestrian_leg );
213
    len = configFile.read( (char *)&config.equestrian_leg, fsize );
214
    if( len != fsize )
215
        return ( FALSE );
216
 
217
    /*
218
    **  .txt file output control. Lines per page and perf-skipping
219
    */
220
qDebug( "Reading: Output Control" );
221
    fsize = sizeof( config.lines_per_page );
222
    len = configFile.read( (char *)&config.lines_per_page, fsize );
223
    if( len != fsize )
224
        return ( configFile.atEnd() );
225
 
226
qDebug( "Reading: Output Control-2" );
227
    fsize = sizeof( config.perf_skip );
228
    len = configFile.read( (char *)&config.perf_skip, fsize );
229
    if( len != fsize )
230
        return ( FALSE );
231
 
232
qDebug( "Reading: Winners Info" );
233
    fsize = sizeof( config.class_winners );
234
    len = configFile.read( (char *)&config.class_winners, fsize );
235
    if( len != fsize )
236
        return ( FALSE );
237
 
238
qDebug( "Reading: Hall of Fame Info" );
239
    fsize = sizeof( config.hall_fame );
240
    len = configFile.read( (char *)&config.hall_fame, fsize );
241
    if( len != fsize )
242
        return ( FALSE );
243
 
244
qDebug( "Reading: Hall of Fame Numbers" );
245
    fsize = sizeof( config.hall_fame );
246
    len = configFile.read( (char *)&config.num_fame, fsize );
247
    if( len != fsize )
248
        return ( configFile.atEnd() );
249
 
250
 
251
    return ( TRUE );
252
}
253
 
254
 
255
/*========================================================================
256
 *
257
 *  Write out the configuration file
258
 *
259
 *  Purpose:
260
 *      This function is called to write the configuration file
261
 *      NOTE: Must be maintained with the Reader function
262
 *
263
 *  Parameters:
264
 *      None
265
 *
266
 *  Returns:
267
 *      FALSE   : Error encountered
268
 *
269
 *========================================================================*/
270
 
271
bool QmConfig::write_config( void )
272
{
273
    /*
274
     **  Open as a binary file
275
     */
276
    QFile file(fileName);
277
    if ( ! file.open(QIODevice::WriteOnly | QIODevice::Truncate) )
278
    {
279
        MainWindow::showMessage("Cannot opne config file");
280
        return (false);
281
    }
282
 
283
     /*
284
     **  Write out multiple structures
285
     **     Event name
286
     **     Leg names
287
     **     Team definitions
288
     **     Number of legs
289
     **     Number fo team splits
290
     **     Class information
291
     **     Number of defined classes
292
     **     Country list
293
     **     Number of defined countries
294
     **     Legend config.addendum file name
295
     **     Data file name
296
     */
297
 
298
    file.write( (const char *) config.event_name, sizeof( config.event_name ) );
299
    file.write( (const char *) config.leg_name, sizeof( config.leg_name ) );
300
    file.write( (const char *) config.t_def, sizeof( config.t_def ) );
301
    file.write( (const char *) &config.num_legs, sizeof( config.num_legs ) );
302
    file.write( (const char *) &config.num_teams, sizeof( config.num_teams ) );
303
    file.write( (const char *) config.team_class, sizeof( config.team_class ) );
304
    file.write( (const char *) &config.num_class, sizeof( config.num_class ) );
305
    file.write( (const char *) config.country_name, sizeof( config.country_name ) );
306
    file.write( (const char *) &config.num_countries, sizeof( config.num_countries ) );
307
    file.write( (const char *) config.addendum, sizeof( config.addendum ) );
308
    file.write( (const char *) config.datafilename, sizeof( config.datafilename ) );
309
    file.write( (const char *) config.nonequestrian_class_abr, sizeof( config.nonequestrian_class_abr ) );
310
    file.write( (const char *) &config.equestrian_leg, sizeof( config.equestrian_leg ) );
311
    file.write( (const char *) &config.lines_per_page, sizeof( config.lines_per_page ) );
312
    file.write( (const char *) &config.perf_skip, sizeof( config.perf_skip ) );
313
    file.write( (const char *) &config.class_winners, sizeof( config.class_winners ) );
314
    file.write( (const char *) &config.hall_fame, sizeof( config.hall_fame ) );
315
    file.write( (const char *) &config.num_fame, sizeof( config.num_fame ) );
316
 
317
    file.close();
318
    return ( TRUE );
319
}