[w3m-dev 03456] tiling of tab

* display.c (displayBuffer): use LastTab->y
	(redrawNLine): fix column calculation
* fm.h (TabBuffer): add x1, x2, y
* main.c (calcTabPos): added
	(main): calcTabPos()
	(mouse_scroll_line): rewrite
	(process_mouse): use LastTab->y
	(_newT): calcTabPos()
	(calcTabPos): added
	(deleteTab): calcTabPos()
	(moveTab): calcTabPos()
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
Fumitoshi UKAI
2002-11-21 17:05:00 +00:00
parent ed3e673f0a
commit edf793a00b
4 changed files with 96 additions and 32 deletions

View File

@@ -1,3 +1,18 @@
2002-11-22 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
* [w3m-dev 03456] tiling of tab
* display.c (displayBuffer): use LastTab->y
(redrawNLine): fix column calculation
* fm.h (TabBuffer): add x1, x2, y
* main.c (calcTabPos): added
(main): calcTabPos()
(mouse_scroll_line): rewrite
(process_mouse): use LastTab->y
(_newT): calcTabPos()
(calcTabPos): added
(deleteTab): calcTabPos()
(moveTab): calcTabPos()
2002-11-22 Fumitoshi UKAI <ukai@debian.or.jp>
* doc/README.mouse_menu: added
@@ -4978,4 +4993,4 @@ a * [w3m-dev 03276] compile error on EWS4800
* release-0-2-1
* import w3m-0.2.1
$Id: ChangeLog,v 1.542 2002/11/21 16:47:13 ukai Exp $
$Id: ChangeLog,v 1.543 2002/11/21 17:05:00 ukai Exp $

View File

@@ -1,4 +1,4 @@
/* $Id: display.c,v 1.36 2002/11/21 16:32:29 ukai Exp $ */
/* $Id: display.c,v 1.37 2002/11/21 17:05:01 ukai Exp $ */
#include <signal.h>
#include "fm.h"
@@ -255,7 +255,7 @@ displayBuffer(Buffer *buf, int mode)
buf->rootX = 0;
buf->COLS = COLS - buf->rootX;
if (nTab2 > 1) {
ny = (nTab2 - 1) / nTabLine() + 2;
ny = LastTab->y + 2;
if (ny > LASTLINE)
ny = LASTLINE;
}
@@ -447,7 +447,7 @@ redrawNLine(Buffer *buf, int n)
#endif /* USE_COLOR */
if (nTab2 > 1) {
TabBuffer *t;
int nx = nTabLine(), col = COLS - 2, x, l;
int l;
i = 0;
move(0, 0);
@@ -456,31 +456,30 @@ redrawNLine(Buffer *buf, int n)
clrtoeolx();
i++;
}
for (t = FirstTab; t; t = t->nextTab, i++) {
x = col * (i % nx) / nx;
move(i / nx, x);
clrtoeolx();
for (t = FirstTab; t; t = t->nextTab) {
move(t->y, t->x1);
if (t == CurrentTab)
bold();
addch('[');
l = strlen(t->currentBuffer->buffername);
if (col / nx - 2 > l)
addnstr_sup(" ", (col / nx - 2 - l) / 2);
if (t->x2 - t->x1 - 2 > l)
addnstr_sup(" ", (t->x2 - t->x1 - 1 - l) / 2);
if (t == CurrentTab)
EFFECT_ACTIVE_START;
addstr(t->currentBuffer->buffername);
if (t == CurrentTab)
EFFECT_ACTIVE_END;
clrtoeolx();
x = col * (i % nx + 1) / nx - 1;
move(i / nx, x);
move(t->y, t->x2);
addch(']');
if (t == CurrentTab)
boldend();
clrtoeolx();
}
move(0, col);
move(0, COLS - 2);
addstr(" x");
move((nTab2 - 1) / nx + 1, 0);
move(LastTab->y + 1, 0);
for (i = 0; i < COLS; i++)
addch('~');
}

5
fm.h
View File

@@ -1,4 +1,4 @@
/* $Id: fm.h,v 1.85 2002/11/21 16:31:36 ukai Exp $ */
/* $Id: fm.h,v 1.86 2002/11/21 17:05:01 ukai Exp $ */
/*
* w3m: WWW wo Miru utility
*
@@ -452,6 +452,9 @@ typedef struct _TabBuffer {
struct _TabBuffer *prevTab;
Buffer *currentBuffer;
Buffer *firstBuffer;
short x1;
short x2;
short y;
} TabBuffer;
typedef struct _DownloadList {

81
main.c
View File

@@ -1,4 +1,4 @@
/* $Id: main.c,v 1.147 2002/11/21 16:31:36 ukai Exp $ */
/* $Id: main.c,v 1.148 2002/11/21 17:05:01 ukai Exp $ */
#define MAINPROGRAM
#include "fm.h"
#include <signal.h>
@@ -101,6 +101,7 @@ void set_buffer_environ(Buffer *);
static void _followForm(int);
static void _goLine(char *);
static void _newT(void);
static void calcTabPos(void);
static void followTab(TabBuffer * tab);
static void moveTab(TabBuffer * t, TabBuffer * t2, int right);
static int check_target = TRUE;
@@ -895,6 +896,7 @@ main(int argc, char **argv, char **envp)
if (CurrentTab == NULL) {
FirstTab = LastTab = CurrentTab = newTab();
nTab = 1;
calcTabPos();
Firstbuf = Currentbuf = newbuf;
}
else {
@@ -935,6 +937,7 @@ main(int argc, char **argv, char **envp)
if (!FirstTab) {
FirstTab = LastTab = CurrentTab = newTab();
nTab = 1;
calcTabPos();
}
if (!Firstbuf || Firstbuf == NO_BUFFER) {
Firstbuf = Currentbuf = newBuffer(INIT_BUFFER_WIDTH);
@@ -4785,21 +4788,13 @@ mouse_scroll_line(void)
static TabBuffer *
posTab(int x, int y)
{
TabBuffer *t;
int i, n, col = COLS - 2;
TabBuffer *tab;
if (col <= 0)
return NULL;
n = nTabLine();
n = x * n / col + y * n;
i = 0;
if (mouse_menu) {
if (n == 0)
return NO_TABBUFFER;
i++;
for (tab = FirstTab; tab; tab = tab->nextTab) {
if (tab->x1 <= x && x <= tab->x2 && tab->y == y)
return tab;
}
for (t = FirstTab; t && i < n; t = t->nextTab, i++) ;
return t;
return NULL;
}
static void
@@ -4836,11 +4831,11 @@ process_mouse(int btn, int x, int y)
int ny = 0;
if (nTab2 > 1)
ny = (nTab2 - 1) / nTabLine() + 1;
ny = LastTab->y + 1;
if (btn == MOUSE_BTN_UP) {
switch (press_btn) {
case MOUSE_BTN1_DOWN:
if (nTab2 > 1 && y < ny) {
if (ny && y < ny) {
if (press_y == y && press_x == x) {
if (y == 0 && x >= COLS - 2) {
deleteTab(CurrentTab);
@@ -4958,7 +4953,7 @@ process_mouse(int btn, int x, int y)
}
break;
case MOUSE_BTN2_DOWN:
if (nTab2 > 1 && y < ny) {
if (ny && y < ny) {
if (press_y == y && press_x == x) {
t = posTab(x, y);
if (t == NO_TABBUFFER) {
@@ -5616,6 +5611,7 @@ _newT(void)
CurrentTab->nextTab = tag;
CurrentTab = tag;
nTab++;
calcTabPos();
}
void
@@ -5654,6 +5650,55 @@ numTab(int n)
return tab;
}
static void
calcTabPos(void)
{
TabBuffer *tab;
int lcol = 0, rcol = 2, col;
int n1, n2, na, nx, ny, ix, iy;
if (nTab <= 0)
return;
n1 = (COLS - rcol - lcol) / TabCols;
if (n1 >= nTab) {
n2 = 1;
ny = 1;
}
else {
if (n1 < 0)
n1 = 0;
n2 = COLS / TabCols;
if (n2 == 0)
n2 = 1;
ny = (nTab - n1 - 1) / n2 + 2;
}
na = n1 + n2 * (ny - 1);
n1 -= (na - nTab) / ny;
if (n1 < 0)
n1 = 0;
na = n1 + n2 * (ny - 1);
tab = FirstTab;
for (iy = 0; iy < ny && tab; iy++) {
if (iy == 0) {
nx = n1;
col = COLS - rcol - lcol;
}
else {
nx = n2 - (na - nTab + (iy - 1)) / (ny - 1);
col = COLS;
}
for (ix = 0; ix < nx && tab; ix++, tab = tab->nextTab) {
tab->x1 = col * ix / nx;
tab->x2 = col * (ix + 1) / nx - 1;
tab->y = iy;
if (iy == 0) {
tab->x1 += lcol;
tab->x2 += lcol;
}
}
}
}
TabBuffer *
deleteTab(TabBuffer * tab)
{
@@ -5677,6 +5722,7 @@ deleteTab(TabBuffer * tab)
CurrentTab = tab->nextTab;
}
nTab--;
calcTabPos();
buf = tab->firstBuffer;
while (buf && buf != NO_BUFFER) {
next = buf->nextBuffer;
@@ -5875,6 +5921,7 @@ moveTab(TabBuffer * t, TabBuffer * t2, int right)
FirstTab = t;
t2->prevTab = t;
}
calcTabPos();
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}