home · contact · privacy
Read default order of windows from file config/toggle_win_order.
[plomrogue] / src / wincontrol.c
1 /* wincontrol.c */
2
3 #include "wincontrol.h"
4 #include <string.h> /* for strlen() */
5 #include <stdint.h> /* for uint8_t, uint16_t */
6 #include "windows.h" /* for suspend_win(), append_win(), reset_pad_offset(),
7                       * resize_active_win(), struct Win, struct WinMeta
8                       */
9 #include "yx_uint16.h" /* for yx_uint16 struct */
10 #include "main.h" /* for Wins struct */
11 #include "misc.h" /* for textfile_sizes() */
12 #include "rexit.h" /* for exit_err() */
13 #include "main.h" /* for World, Wins structs */
14
15
16
17
18 extern void sorted_wintoggle(struct World * world)
19 {
20     char * err = "Trouble in sorted_wintoggle() with fopen() on file "
21                  "'config/toggle_win_order'.";
22     FILE * file = fopen("config/toggle_win_order", "r");
23     exit_err(NULL == file, world, err);
24     uint16_t linemax;
25     textfile_sizes(file, &linemax, NULL);
26     char win_order[linemax];
27     err = "Trouble in sorted_wintoggle() with fgets() on file "
28           "'config/toggle_win_order'.";
29     exit_err(NULL == fgets(win_order, linemax, file), world, err);
30     err = "Trouble in sorted_wintoggle() with fclose() on file "
31           "'toggle_win_order'.";
32     exit_err(fclose(file), world, err);
33
34     char c;
35     uint8_t i = 0;
36     for (; i < linemax; i++)
37     {
38         c = win_order[i];
39         if      ('k' == c)
40         {
41             toggle_window(world->wins.meta, world->wins.keys);
42         }
43         else if ('m' == c)
44         {
45             toggle_window(world->wins.meta, world->wins.map);
46         }
47         else if ('i' == c)
48         {
49             toggle_window(world->wins.meta, world->wins.info);
50         }
51         else if ('l' == c)
52         {
53             toggle_window(world->wins.meta, world->wins.log);
54         }
55     }
56 }
57
58
59
60
61 extern uint8_t toggle_window(struct WinMeta * win_meta, struct Win * win)
62 {
63     if (0 != win->frame.curses_win)
64     {
65         return suspend_win(win_meta, win);
66     }
67     else
68     {
69         return append_win(win_meta, win);
70     }
71 }
72
73
74
75 extern void scroll_pad(struct WinMeta * win_meta, char dir)
76 {
77     if      ('+' == dir)
78     {
79         reset_pad_offset(win_meta, win_meta->pad_offset + 1);
80     }
81     else if ('-' == dir)
82     {
83         reset_pad_offset(win_meta, win_meta->pad_offset - 1);
84     }
85 }
86
87
88
89 extern uint8_t growshrink_active_window(struct WinMeta * win_meta, char change)
90 {
91     if (0 != win_meta->active)
92     {
93         struct yx_uint16 size = win_meta->active->frame.size;
94         if      (change == '-')
95         {
96             size.y--;
97         }
98         else if (change == '+')
99         {
100             size.y++;
101         }
102         else if (change == '_')
103         {
104             size.x--;
105         }
106         else if (change == '*')
107         {
108             size.x++;
109         }
110         return resize_active_win (win_meta, size);
111     }
112     return 0;
113 }
114