Add icons to close window and toggle window state using mouse.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2012-05-14 22:36:39 +04:00
parent 4fa4e7568d
commit ba79784948
12 changed files with 114 additions and 8 deletions

View File

@ -99,6 +99,8 @@
editframe=gray; editframe=gray;
editframeactive=lightgray; editframeactive=lightgray;
editframedrag=red; editframedrag=red;
window-state-char =
window-close-char =
[viewer] [viewer]
viewbold=yellow;black viewbold=yellow;black
@ -146,3 +148,4 @@
last-horiz-char=» last-horiz-char=»
current-char= current-char=
background-char= background-char=

View File

@ -99,6 +99,8 @@
editframe=gray; editframe=gray;
editframeactive=lightgray; editframeactive=lightgray;
editframedrag=white; editframedrag=white;
window-state-char =
window-close-char = ×
[viewer] [viewer]
viewbold=yellow;black viewbold=yellow;black

View File

@ -107,6 +107,8 @@
# editframe=lightgray; # editframe=lightgray;
editframeactive=white; editframeactive=white;
editframedrag=green; editframedrag=green;
window-state-char = *
window-close-char = X
[viewer] [viewer]
viewbold=yellow;blue viewbold=yellow;blue

View File

@ -106,6 +106,8 @@
# editframe= # editframe=
editframeactive=white; editframeactive=white;
editframedrag=green; editframedrag=green;
window-state-char = *
window-close-char = X
[viewer] [viewer]
viewbold=yellow;blue viewbold=yellow;blue

View File

@ -108,6 +108,8 @@
# editframe= # editframe=
editframeactive=lightgray; editframeactive=lightgray;
editframedrag=cyan; editframedrag=cyan;
window-state-char =
window-close-char =
[viewer] [viewer]
viewbold=yellow;blue viewbold=yellow;blue
@ -151,3 +153,4 @@
leftmiddle= leftmiddle=
rightmiddle= rightmiddle=
cross= cross=

View File

@ -103,6 +103,8 @@
# editframe= # editframe=
editframeactive=white; editframeactive=white;
editframedrag=green; editframedrag=green;
window-state-char = *
window-close-char = X
[viewer] [viewer]
viewbold=brightred;black viewbold=brightred;black

View File

@ -98,6 +98,8 @@
# editframe= # editframe=
editframeactive=lightgray; editframeactive=lightgray;
editframedrag=cyan; editframedrag=cyan;
window-state-char = *
window-close-char = X
[viewer] [viewer]
viewbold=yellow;blue viewbold=yellow;blue

View File

@ -106,6 +106,8 @@
editframe=gray; editframe=gray;
editframeactive=lightgray; editframeactive=lightgray;
editframedrag=brightblue; editframedrag=brightblue;
window-state-char =
window-close-char =
[viewer] [viewer]
viewbold=brown;blue viewbold=brown;blue
@ -138,3 +140,4 @@
history-show-list-sign = ^ history-show-list-sign = ^
filename-scroll-left-char = « filename-scroll-left-char = «
filename-scroll-right-char = » filename-scroll-right-char = »

View File

@ -163,6 +163,8 @@
editframe=rgb530; editframe=rgb530;
editframeactive=black; editframeactive=black;
editframedrag=rgb400; editframedrag=rgb400;
window-state-char =
window-close-char =
[viewer] [viewer]
viewunderline=;;underline viewunderline=;;underline
@ -196,3 +198,4 @@
last-horiz-char=» last-horiz-char=»
current-char= current-char=
background-char= background-char=

View File

@ -152,6 +152,8 @@
editframe=color244; editframe=color244;
editframeactive=color250; editframeactive=color250;
editframedrag=color73; editframedrag=color73;
window-state-char =
window-close-char =
[viewer] [viewer]
viewunderline=;;underline viewunderline=;;underline
@ -187,3 +189,4 @@
last-horiz-char=» last-horiz-char=»
current-char= current-char=
background-char= background-char=

View File

@ -881,6 +881,7 @@ edit_status (WEdit * edit)
void void
edit_info_status (WEdit * edit) edit_info_status (WEdit * edit)
{ {
int y, x;
int cols = edit->widget.cols; int cols = edit->widget.cols;
tty_setcolor (STATUSBAR_COLOR); tty_setcolor (STATUSBAR_COLOR);
@ -905,9 +906,12 @@ edit_info_status (WEdit * edit)
g_free (full_fname); g_free (full_fname);
} }
if (cols > 13) tty_getyx (&y, &x);
x -= edit->widget.x;
x += 4;
if (x + 6 <= cols - (edit->fullscreen ? 0 : 2) - 6)
{ {
edit_move (edit->widget.cols - (edit->fullscreen ? 6 : 8), 0); edit_move (x, 0);
tty_printf ("[%c%c%c%c]", tty_printf ("[%c%c%c%c]",
edit->mark1 != edit->mark2 ? (edit->column_highlight ? 'C' : 'B') : '-', edit->mark1 != edit->mark2 ? (edit->column_highlight ? 'C' : 'B') : '-',
edit->modified ? 'M' : '-', edit->modified ? 'M' : '-',

View File

@ -2,11 +2,12 @@
Editor initialisation and callback handler. Editor initialisation and callback handler.
Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006, Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006,
2007,2011 2007, 2011, 2012
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Paul Sheer, 1996, 1997 Paul Sheer, 1996, 1997
Andrew Borodin <aborodin@vmail.ru> 2012
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -47,7 +48,7 @@
#include "lib/tty/tty.h" /* LINES, COLS */ #include "lib/tty/tty.h" /* LINES, COLS */
#include "lib/tty/key.h" /* is_idle() */ #include "lib/tty/key.h" /* is_idle() */
#include "lib/tty/color.h" /* tty_setcolor() */ #include "lib/tty/color.h" /* tty_setcolor() */
#include "lib/skin.h" /* EDITOR_NORMAL_COLOR */ #include "lib/skin.h"
#include "lib/strutil.h" /* str_term_trim() */ #include "lib/strutil.h" /* str_term_trim() */
#include "lib/util.h" /* mc_build_filename() */ #include "lib/util.h" /* mc_build_filename() */
#include "lib/widget.h" #include "lib/widget.h"
@ -67,15 +68,56 @@
/*** file scope macro definitions ****************************************************************/ /*** file scope macro definitions ****************************************************************/
#define WINDOW_MIN_LINES (2 + 2) #define WINDOW_MIN_LINES (2 + 2)
#define WINDOW_MIN_COLS (2 + LINE_STATE_WIDTH) #define WINDOW_MIN_COLS (2 + LINE_STATE_WIDTH + 2)
/*** file scope type declarations ****************************************************************/ /*** file scope type declarations ****************************************************************/
/*** file scope variables ************************************************************************/ /*** file scope variables ************************************************************************/
static char *edit_window_state_char = NULL;
static char *edit_window_close_char = NULL;
static unsigned int edit_dlg_init_refcounter = 0;
/*** file scope functions ************************************************************************/ /*** file scope functions ************************************************************************/
static cb_ret_t edit_callback (Widget * w, widget_msg_t msg, int parm); static cb_ret_t edit_callback (Widget * w, widget_msg_t msg, int parm);
static cb_ret_t edit_dialog_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm,
void *data);
/* --------------------------------------------------------------------------------------------- */
/**
* Init the 'edit' subsystem
*/
static void
edit_dlg_init (void)
{
if (edit_dlg_init_refcounter == 0)
{
edit_window_state_char = mc_skin_get ("editor", "window-state-char", "*");
edit_window_close_char = mc_skin_get ("editor", "window-close-char", "X");
}
edit_dlg_init_refcounter++;
}
/* --------------------------------------------------------------------------------------------- */
/**
* Deinit the 'edit' subsystem
*/
static void
edit_dlg_deinit (void)
{
if (edit_dlg_init_refcounter != 0)
edit_dlg_init_refcounter--;
if (edit_dlg_init_refcounter == 0)
{
g_free (edit_window_state_char);
g_free (edit_window_close_char);
}
}
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/** /**
@ -148,6 +190,12 @@ static void
edit_draw_frame (const WEdit * edit, gboolean active) edit_draw_frame (const WEdit * edit, gboolean active)
{ {
const Widget *w = (const Widget *) edit; const Widget *w = (const Widget *) edit;
int dx;
char tmp[17];
int color;
color = edit->drag_state != MCEDIT_DRAG_NORMAL ? EDITOR_FRAME_DRAG : active ?
EDITOR_FRAME_ACTIVE : EDITOR_FRAME;
if (edit->fullscreen) if (edit->fullscreen)
{ {
@ -158,12 +206,12 @@ edit_draw_frame (const WEdit * edit, gboolean active)
w->cols); w->cols);
tty_draw_hline (w->y + w->lines - 1, w->x, tty_draw_hline (w->y + w->lines - 1, w->x,
mc_tty_frm[!active ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], w->cols); mc_tty_frm[!active ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], w->cols);
dx = 6;
} }
else else
{ {
/* draw a frame around edit area */ /* draw a frame around edit area */
tty_setcolor (edit->drag_state != MCEDIT_DRAG_NORMAL ? EDITOR_FRAME_DRAG : tty_setcolor (color);
active ? EDITOR_FRAME_ACTIVE : EDITOR_FRAME);
/* draw double frame for active window if skin supports that */ /* draw double frame for active window if skin supports that */
tty_draw_box (w->y, w->x, w->lines, w->cols, !active); tty_draw_box (w->y, w->x, w->lines, w->cols, !active);
/* draw a drag marker */ /* draw a drag marker */
@ -173,7 +221,14 @@ edit_draw_frame (const WEdit * edit, gboolean active)
widget_move (w, w->lines - 1, w->cols - 1); widget_move (w, w->lines - 1, w->cols - 1);
tty_print_alt_char (ACS_LRCORNER, TRUE); tty_print_alt_char (ACS_LRCORNER, TRUE);
} }
dx = 8;
} }
/* toggle fullscreen mode and close icons */
tty_setcolor (color);
widget_move (w, 0, edit->widget.cols - dx);
g_snprintf (tmp, sizeof (tmp), "[%s][%s]", edit_window_state_char, edit_window_close_char);
tty_print_string (tmp);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -423,9 +478,23 @@ edit_event (Gpm_Event * event, void *data)
else if (local.y == 1 && edit->drag_state != MCEDIT_DRAG_RESIZE) else if (local.y == 1 && edit->drag_state != MCEDIT_DRAG_RESIZE)
{ {
/* click on the top line (move) */ /* click on the top line (move) */
/* move if not fullscreen */ int dx = edit->fullscreen ? 0 : 2;
if (local.x == edit->widget.cols - dx - 1)
{
edit_dialog_callback (w->owner, NULL, DLG_ACTION, CK_Close, NULL);
return MOU_NORMAL;
}
if (local.x == edit->widget.cols - dx - 4)
{
edit_toggle_fullscreen (edit);
return MOU_NORMAL;
}
if ((local.type & (GPM_DOWN | GPM_DRAG)) != 0) if ((local.type & (GPM_DOWN | GPM_DRAG)) != 0)
{ {
/* move if not fullscreen */
edit->drag_state_start = local.x; edit->drag_state_start = local.x;
edit->drag_state = MCEDIT_DRAG_MOVE; edit->drag_state = MCEDIT_DRAG_MOVE;
edit->force |= REDRAW_COMPLETELY; edit->force |= REDRAW_COMPLETELY;
@ -778,6 +847,10 @@ edit_dialog_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, vo
switch (msg) switch (msg)
{ {
case DLG_INIT:
edit_dlg_init ();
return MSG_HANDLED;
case DLG_DRAW: case DLG_DRAW:
/* don't use common_dialog_repaint() -- we don't need a frame */ /* don't use common_dialog_repaint() -- we don't need a frame */
tty_setcolor (EDITOR_BACKGROUND); tty_setcolor (EDITOR_BACKGROUND);
@ -852,6 +925,10 @@ edit_dialog_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, vo
edit_quit (h); edit_quit (h);
return MSG_HANDLED; return MSG_HANDLED;
case DLG_END:
edit_dlg_deinit ();
return MSG_HANDLED;
default: default:
return default_dlg_callback (h, sender, msg, parm, data); return default_dlg_callback (h, sender, msg, parm, data);
} }