diff options
Diffstat (limited to '')
-rw-r--r-- | src/tools/viewcsv.cpp | 91 |
1 files changed, 81 insertions, 10 deletions
diff --git a/src/tools/viewcsv.cpp b/src/tools/viewcsv.cpp index d6c09c9..649ec9e 100644 --- a/src/tools/viewcsv.cpp +++ b/src/tools/viewcsv.cpp | |||
@@ -2,6 +2,8 @@ | |||
2 | #include <bu/optparser.h> | 2 | #include <bu/optparser.h> |
3 | #include <bu/csvreader.h> | 3 | #include <bu/csvreader.h> |
4 | #include <bu/file.h> | 4 | #include <bu/file.h> |
5 | #include <bu/newline.h> | ||
6 | #include <bu/buffer.h> | ||
5 | #include <bu/util.h> | 7 | #include <bu/util.h> |
6 | #include <ncurses.h> | 8 | #include <ncurses.h> |
7 | 9 | ||
@@ -207,14 +209,25 @@ public: | |||
207 | { | 209 | { |
208 | int maxx, maxy; | 210 | int maxx, maxy; |
209 | getmaxyx( stdscr, maxy, maxx ); | 211 | getmaxyx( stdscr, maxy, maxx ); |
210 | move( 0, maxy-2 ); | 212 | move( 0, maxy-((bHeaderRow)?(4):(3)) ); |
211 | } | 213 | } |
212 | 214 | ||
213 | void pageUp() | 215 | void pageUp() |
214 | { | 216 | { |
215 | int maxx, maxy; | 217 | int maxx, maxy; |
216 | getmaxyx( stdscr, maxy, maxx ); | 218 | getmaxyx( stdscr, maxy, maxx ); |
217 | move( 0, -(maxy-2) ); | 219 | move( 0, -(maxy-((bHeaderRow)?(4):(3))) ); |
220 | } | ||
221 | |||
222 | void home() | ||
223 | { | ||
224 | iYOff = 0; | ||
225 | if( bHeaderRow ) iYOff++; | ||
226 | } | ||
227 | |||
228 | void end() | ||
229 | { | ||
230 | iYOff = doc.sgData.getSize()-1; | ||
218 | } | 231 | } |
219 | 232 | ||
220 | void setHeaderRow( bool bOn ) | 233 | void setHeaderRow( bool bOn ) |
@@ -231,6 +244,46 @@ public: | |||
231 | setHeaderRow( !bHeaderRow ); | 244 | setHeaderRow( !bHeaderRow ); |
232 | } | 245 | } |
233 | 246 | ||
247 | Bu::FString prompt( const Bu::FString &sPrompt ) | ||
248 | { | ||
249 | int maxx, maxy; | ||
250 | Bu::FString sStr; | ||
251 | |||
252 | curs_set( 1 ); | ||
253 | for(;;) | ||
254 | { | ||
255 | getmaxyx( stdscr, maxy, maxx ); | ||
256 | for( int j = 0; j < maxx; j++ ) | ||
257 | { | ||
258 | mvaddch( maxy-1, j, ' ' ); | ||
259 | } | ||
260 | mvaddstr( maxy-1, 0, sPrompt.getStr() ); | ||
261 | |||
262 | mvaddstr( maxy-1, sPrompt.getSize(), sStr.getStr() ); | ||
263 | |||
264 | int iCh = getch(); | ||
265 | switch( iCh ) | ||
266 | { | ||
267 | case '\n': | ||
268 | case '\r': | ||
269 | case KEY_ENTER: | ||
270 | curs_set( 0 ); | ||
271 | return sStr; | ||
272 | break; | ||
273 | |||
274 | case KEY_BACKSPACE: | ||
275 | if( sStr.getSize() > 0 ) | ||
276 | sStr.setSize( sStr.getSize()-1 ); | ||
277 | break; | ||
278 | |||
279 | default: | ||
280 | if( iCh < 127 ) | ||
281 | sStr += (char)iCh; | ||
282 | break; | ||
283 | } | ||
284 | } | ||
285 | } | ||
286 | |||
234 | CsvDoc &doc; | 287 | CsvDoc &doc; |
235 | int iXOff; | 288 | int iXOff; |
236 | int iYOff; | 289 | int iYOff; |
@@ -248,15 +301,19 @@ int main( int argc, char *argv[] ) | |||
248 | } | 301 | } |
249 | 302 | ||
250 | CsvDoc doc; | 303 | CsvDoc doc; |
251 | File fIn( opt.sFileIn, File::Read ); | ||
252 | CsvReader cr( fIn ); | ||
253 | |||
254 | while( !fIn.isEos() ) | ||
255 | { | 304 | { |
256 | StrArray sa = cr.readLine(); | 305 | File fIn( opt.sFileIn, File::Read ); |
257 | if( fIn.isEos() ) | 306 | NewLine nlIn( fIn ); |
258 | break; | 307 | Buffer bIn( nlIn ); |
259 | doc.addRow( sa ); | 308 | CsvReader cr( bIn ); |
309 | |||
310 | while( !fIn.isEos() ) | ||
311 | { | ||
312 | StrArray sa = cr.readLine(); | ||
313 | if( fIn.isEos() ) | ||
314 | break; | ||
315 | doc.addRow( sa ); | ||
316 | } | ||
260 | } | 317 | } |
261 | 318 | ||
262 | initscr(); | 319 | initscr(); |
@@ -306,6 +363,20 @@ int main( int argc, char *argv[] ) | |||
306 | view.pageUp(); | 363 | view.pageUp(); |
307 | break; | 364 | break; |
308 | 365 | ||
366 | case KEY_HOME: | ||
367 | view.home(); | ||
368 | break; | ||
369 | |||
370 | case KEY_END: | ||
371 | view.end(); | ||
372 | break; | ||
373 | |||
374 | case '/': | ||
375 | { | ||
376 | Bu::FString sIn = view.prompt("find: "); | ||
377 | } | ||
378 | break; | ||
379 | |||
309 | case 'h': | 380 | case 'h': |
310 | view.toggleHeaderRow(); | 381 | view.toggleHeaderRow(); |
311 | break; | 382 | break; |