diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2011-08-15 17:20:13 +0000 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2011-08-15 17:20:13 +0000 |
commit | cd4fe3e06985f2d0b107abd301f704156a0489c2 (patch) | |
tree | 17feba4b024c36322062d4bc02fcf89e8b868809 /src/cursesview.c | |
parent | e9ef70cefa571bb1ada1ec515a433ed9a643a171 (diff) | |
download | 2011-ddhardrescue-cd4fe3e06985f2d0b107abd301f704156a0489c2.tar.gz 2011-ddhardrescue-cd4fe3e06985f2d0b107abd301f704156a0489c2.tar.bz2 2011-ddhardrescue-cd4fe3e06985f2d0b107abd301f704156a0489c2.zip |
Ajout d'une gestion du zoom très primitive du dump dans curses. Il y avait un méchant bug dans le calcul des intervales pour le sb/se.
git-svn-id: file:///var/svn/2011-ddhardrescue/trunk@22 d3078510-dda0-49f1-841c-895ef4b7ec81
Diffstat (limited to 'src/cursesview.c')
-rw-r--r-- | src/cursesview.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/cursesview.c b/src/cursesview.c index b032356..ddd5a2f 100644 --- a/src/cursesview.c +++ b/src/cursesview.c @@ -13,6 +13,7 @@ extern int end; // window updated by cursesUpdateSliceDump callback from "worker" thread, with a mutex for prevent fuzzy concurrent updates WINDOW *winUpdateSliceDump=NULL; static pthread_mutex_t ncursesWriteMutex = PTHREAD_MUTEX_INITIALIZER; +address_t sliceDumpBegin, sliceDumpEnd; // Helpers declaration (below the interesting code of this file) int cursesInit(WINDOW *wins[], PANEL *panels[], int count); @@ -24,16 +25,19 @@ void makeWin(WINDOW **win, PANEL **panel, int h, int w, int y, int x, char title void cursesMainLoop(slices_evt_t *slicesEvt) { WINDOW *wins[CURSESWIN_COUNT]; PANEL *panels[CURSESWIN_COUNT]; + char msgViewedArea[255]; int ch, i; - char str[2]; cursesInit(wins, panels, CURSESWIN_COUNT); + sliceDumpBegin=slicesEvt->data->min; + sliceDumpEnd=slicesEvt->data->max; + wattron(wins[CURSESWIN_COUNT-1], COLOR_PAIR(4)); - mvwprintw(wins[CURSESWIN_COUNT-1], 1, 0, "(F2 to Exit)"); + mvwprintw(wins[CURSESWIN_COUNT-1], 1, 0, "F2:Exit F5:Zoom left F6:Unzoom left F7:Unzoom right F8:Zoom right"); // wattroff(wins[CURSESWIN_COUNT-1], COLOR_PAIR(4)); - update_panels(); +// update_panels(); doupdate(); /* Enable worker listener */ @@ -46,11 +50,25 @@ void cursesMainLoop(slices_evt_t *slicesEvt) { pthread_mutex_lock(&ncursesWriteMutex); switch(ch) { + // Zoom handling + case KEY_F(5): + sliceDumpEnd=(sliceDumpBegin+sliceDumpEnd)/2; + break; + case KEY_F(6): + sliceDumpBegin=slicesEvt->data->min; + break; + case KEY_F(7): + sliceDumpEnd=slicesEvt->data->max; + break; + case KEY_F(8): + sliceDumpBegin=(sliceDumpBegin+sliceDumpEnd)/2; + break; + + // Panel focus case '1': case '2': case '3': - str[0]=ch; str[1]='\0'; // int (ascii value+flags) to string - i=strtol(str, (char **)NULL, 10); // string to real integer + i=ch-'0'; if (i>0 && i<=CURSESWIN_COUNT) { top_panel(panels[i-1]); update_panels(); @@ -60,6 +78,10 @@ void cursesMainLoop(slices_evt_t *slicesEvt) { doupdate(); + sprintf(msgViewedArea, "Viewing [%lli-%lli] of [%lli-%lli] working region ", sliceDumpBegin, sliceDumpEnd, slicesEvt->data->min, slicesEvt->data->max); + wattron(wins[0], COLOR_PAIR(4)); + mvwprintw(wins[0], 1, 0, msgViewedArea); + pthread_mutex_unlock(&ncursesWriteMutex); } @@ -127,7 +149,7 @@ void cursesUpdateSliceDump(slices_evt_t *slicesEvt, slice_t *modifiedSlice) { //TODO : refesh only right parts of the representation pthread_mutex_lock(&ncursesWriteMutex); - toPrint=slicesDump(slicesEvt->data, &blockSize, charCount, slicesEvt->data->min, slicesEvt->data->max); + toPrint=slicesDump(slicesEvt->data, &blockSize, charCount, sliceDumpBegin, sliceDumpEnd); if (toPrint != NULL) { attron(COLOR_PAIR(4)); mvwprintw(winUpdateSliceDump, 1, 0, toPrint); |