aboutsummaryrefslogtreecommitdiff
path: root/src/tools/viewcsv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/viewcsv.cpp')
-rw-r--r--src/tools/viewcsv.cpp78
1 files changed, 75 insertions, 3 deletions
diff --git a/src/tools/viewcsv.cpp b/src/tools/viewcsv.cpp
index 649ec9e..176f25e 100644
--- a/src/tools/viewcsv.cpp
+++ b/src/tools/viewcsv.cpp
@@ -284,10 +284,76 @@ public:
284 } 284 }
285 } 285 }
286 286
287 void resetCaret()
288 {
289 sysCaret.reset();
290 }
291
292 void findNext( const Bu::FString &sTerm )
293 {
294 int y = sysCaret.iRow;
295 if( y < 0 )
296 y = 0;
297 int x = sysCaret.iCol+1;
298 for( ; y < doc.sgData.getSize(); y++ )
299 {
300 StrArray &aRow = doc.sgData[y];
301 for( ; x < aRow.getSize(); x++ )
302 {
303 if( aRow[x].find( sTerm ) )
304 {
305 sysCaret.iRow = y;
306 sysCaret.iCol = x;
307 scrollToCaret();
308 return;
309 }
310 }
311 x = 0;
312 }
313 }
314
315 void scrollToCaret()
316 {
317 iXOff = sysCaret.iCol;
318 iYOff = sysCaret.iRow;
319 }
320
287 CsvDoc &doc; 321 CsvDoc &doc;
288 int iXOff; 322 int iXOff;
289 int iYOff; 323 int iYOff;
290 bool bHeaderRow; 324 bool bHeaderRow;
325
326 class Caret
327 {
328 public:
329 Caret() :
330 iRow( -1 ),
331 iCol( -1 )
332 {
333 }
334
335 virtual ~Caret()
336 {
337 }
338
339
340 void reset()
341 {
342 iRow = iCol = -1;
343 }
344
345 bool isSet()
346 {
347 if( iRow < 0 || iCol < 0 )
348 return false;
349 return true;
350 }
351
352 int iRow;
353 int iCol;
354 };
355
356 Caret sysCaret;
291}; 357};
292 358
293int main( int argc, char *argv[] ) 359int main( int argc, char *argv[] )
@@ -327,6 +393,8 @@ int main( int argc, char *argv[] )
327 CsvView view( doc ); 393 CsvView view( doc );
328 view.setHeaderRow( opt.bHeader ); 394 view.setHeaderRow( opt.bHeader );
329 395
396 Bu::FString sSearchTerm;
397
330 bool bRun = true; 398 bool bRun = true;
331 do 399 do
332 { 400 {
@@ -372,9 +440,13 @@ int main( int argc, char *argv[] )
372 break; 440 break;
373 441
374 case '/': 442 case '/':
375 { 443 sSearchTerm = view.prompt("find: ");
376 Bu::FString sIn = view.prompt("find: "); 444 view.resetCaret();
377 } 445 view.findNext( sSearchTerm );
446 break;
447
448 case 'n':
449 view.findNext( sSearchTerm );
378 break; 450 break;
379 451
380 case 'h': 452 case 'h':