ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/cf.schmorp.de/dclient/src/backend/ncxx/pen.cpp
Revision: 1.2
Committed: Mon Oct 18 14:11:48 2010 UTC (16 years ago) by sf-pippijn
Branch: MAIN
Changes since 1.1: +28 -12 lines
Log Message:
check and log but do not die when ncurses stuff fails

File Contents

# User Rev Content
1 sf-pippijn 1.1 #include <ncurses/pen.hh>
2    
3     #include <ncurses/assert.hh>
4     #include <ncurses/color.hh>
5     #include <ncurses/pad.hh>
6     #include <ncurses/window.hh>
7    
8    
9     static bool
10     is_bold (WINDOW *win)
11     {
12     short pair;
13     attr_t attrs;
14    
15     wattr_get (win, &attrs, &pair, NULL);
16    
17     return attrs & WA_BOLD;
18     }
19    
20    
21     using ncurses::pen;
22    
23     void
24     pen::write (WINDOW *win, char const *str, int len)
25     {
26     waddnstr (win, str, len);
27     }
28    
29     void
30     pen::write (WINDOW *win, std::string const &str)
31     {
32     write (win, str.data (), str.length ());
33     }
34    
35     void
36     pen::write (WINDOW *win, char const ch)
37     {
38 sf-pippijn 1.2 return_unless (waddch (win, ch) == OK);
39 sf-pippijn 1.1 }
40    
41     std::string const &pen::ltitle (bool bold) { static std::string const s[2] = { "┤", "╣" }; return s[bold]; }
42     std::string const &pen::rtitle (bool bold) { static std::string const s[2] = { "├", "╠" }; return s[bold]; }
43     std::string const &pen::ulcorner (bool bold) { static std::string const s[2] = { "┌", "╔" }; return s[bold]; }
44     std::string const &pen::llcorner (bool bold) { static std::string const s[2] = { "└", "╚" }; return s[bold]; }
45     std::string const &pen::urcorner (bool bold) { static std::string const s[2] = { "┐", "╗" }; return s[bold]; }
46     std::string const &pen::lrcorner (bool bold) { static std::string const s[2] = { "┘", "╝" }; return s[bold]; }
47     std::string const &pen::h_line (bool bold) { static std::string const s[2] = { "─", "═" }; return s[bold]; }
48     std::string const &pen::v_line (bool bold) { static std::string const s[2] = { "│", "║" }; return s[bold]; }
49    
50     pen::pen (window &win)
51     : win_ (win.win ())
52     {
53     }
54    
55     pen::pen (pad &pad)
56     : win_ (pad.win ())
57     {
58     }
59    
60 sf-pippijn 1.2 bool
61 sf-pippijn 1.1 pen::move (int x, int y)
62     {
63 sf-pippijn 1.2 return_val_unless (wmove (win_, y, x) == OK, false);
64     return true;
65 sf-pippijn 1.1 }
66    
67     void
68     pen::commit ()
69     {
70 sf-pippijn 1.2 return_unless (wnoutrefresh (win_) == OK);
71 sf-pippijn 1.1 }
72    
73     int
74     pen::x () const
75     {
76     return getcurx (win_);
77     }
78    
79     int
80     pen::y () const
81     {
82     return getcury (win_);
83     }
84    
85 sf-pippijn 1.2 #if 0
86     int
87     pen::width () const
88     {
89     return getmaxx (win_);
90     }
91    
92     int
93     pen::height () const
94     {
95     return getmaxy (win_);
96     }
97     #endif
98    
99 sf-pippijn 1.1 void
100     pen::clear ()
101     {
102 sf-pippijn 1.2 return_unless (werase (win_) == OK);
103 sf-pippijn 1.1 }
104    
105     void
106     pen::fill (color const &col)
107     {
108 sf-pippijn 1.2 return_unless (wbkgd (win_, COLOR_PAIR (col.num ())) == OK);
109 sf-pippijn 1.1 }
110    
111     void
112     pen::set_color (color const &c)
113     {
114     /* what should I use here: wattrset or wattr_set */
115 sf-pippijn 1.2 return_unless (wattr_set (win_, c.attr (), c.num (), 0) == OK);
116 sf-pippijn 1.1 }
117    
118     void
119     pen::frame ()
120     {
121 sf-pippijn 1.2 return_unless (move (0, 0));
122 sf-pippijn 1.1
123     bool const bold = is_bold (win_);
124    
125     int maxx, maxy;
126     getmaxyx (win_, maxy, maxx);
127    
128 sf-pippijn 1.2 return_unless (maxx > 1 && maxy > 1);
129    
130 sf-pippijn 1.1 write (ulcorner (bold));
131     for (int i = 1; i < maxx - 1; i++)
132     write (h_line (bold));
133     write (urcorner (bold));
134    
135     for (int i = 1; i < maxy; i++)
136     {
137     write (v_line (bold));
138 sf-pippijn 1.2 return_unless (move (0, i));
139 sf-pippijn 1.1 }
140    
141     write (llcorner (bold));
142     for (int i = 1; i < maxx - 1; i++)
143     write (h_line (bold));
144     write (lrcorner (bold));
145    
146     for (int i = 1; i < maxy - 1; i++)
147     {
148 sf-pippijn 1.2 return_unless (move (maxx - 1, i));
149 sf-pippijn 1.1 write (v_line (bold));
150     }
151     }
152    
153     void
154     pen::title (std::string const &title)
155     {
156     bool const bold = is_bold (win_);
157    
158 sf-pippijn 1.2 return_unless (move (2, 0));
159 sf-pippijn 1.1 write (ltitle (bold));
160     write (title);
161     write (rtitle (bold));
162     }
163    
164     void
165     pen::write (std::string const &str)
166     {
167     write (win_, str);
168     }
169    
170     void
171     pen::write (char const ch)
172     {
173     write (win_, ch);
174     }