aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--src/meson.build2
-rw-r--r--src/ui/base.c5
-rw-r--r--src/ui/debug.c5
-rw-r--r--src/ui/menuwin.c22
-rw-r--r--src/ui/root.c14
-rw-r--r--src/ui/ui.internal.h12
-rw-r--r--src/ui/uimenu.internal.h2
8 files changed, 59 insertions, 4 deletions
diff --git a/README.md b/README.md
index 578b198..15fe4d3 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,7 @@ This project aims to be a general purpose program for snooping on the Minecraft
**NOTE**: This project is very WIP and currently only contains some basic UI code. Come back later for actual stuff maybe.
These are the features that are intended for the future:
+
- Online-mode authentication with a Mojang token
- Proxy mode
- Saving/loading trace logs
diff --git a/src/meson.build b/src/meson.build
index 03038df..f264e78 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,4 +1,4 @@
-umps_srcs = files('main.c', 'ui/base.c', 'ui/dock.c', 'ui/root.c', 'ui/debug.c', 'ui/menu.c')
+umps_srcs = files('main.c', 'ui/base.c', 'ui/dock.c', 'ui/root.c', 'ui/debug.c', 'ui/menu.c', 'ui/menuwin.c')
configure_file(input : 'config.h.in', output : 'config.h', configuration : conf_data)
umps_config_inc = include_directories('.')
diff --git a/src/ui/base.c b/src/ui/base.c
index f1aa217..8e7a7ea 100644
--- a/src/ui/base.c
+++ b/src/ui/base.c
@@ -110,6 +110,7 @@ void ui__init_window_root(struct ui_window_root *root, WINDOW *cwindow)
void ui__destroy_window_base(struct ui_window_base *base);
void ui__destroy_window_leaf(struct ui_window_leaf *leaf);
void ui__destroy_window_dock(struct ui_window_dock *dock);
+void ui__destroy_window_menu(struct ui_window_menu *menu);
void ui__window_destroy_root(struct ui_window_root *root)
{
@@ -165,6 +166,9 @@ void ui__destroy_window(struct ui_window_base *base)
break;
case UI__WINDOW_TYPE_BASE:
ui__destroy_window_base(base);
+ break;
+ case UI__WINDOW_TYPE_MENU:
+ ui__destroy_window_menu(ui__cast(menu, base));
}
}
@@ -223,6 +227,7 @@ WINDOW *ui__find_focused_leaf(struct ui_window_base *start)
{
switch (start->type) {
case UI__WINDOW_TYPE_LEAF:
+ case UI__WINDOW_TYPE_MENU:
return ui__cast(leaf, start)->cwindow;
case UI__WINDOW_TYPE_DOCK: {
struct ui_window_dock *dock = ui__cast(dock, start);
diff --git a/src/ui/debug.c b/src/ui/debug.c
index 5623b97..0b47340 100644
--- a/src/ui/debug.c
+++ b/src/ui/debug.c
@@ -51,6 +51,11 @@ struct ui_window_root *ui__check_cast_to_root(void *obj, const char *file, const
UMPS__DEBUG_DO_ERROR(obj, file, func, line, UI__WINDOW_TYPE_ROOT);
}
+struct ui_window_menu *ui__check_cast_to_menu(void *obj, const char *file, const char *func, int line)
+{
+ UMPS__DEBUG_DO_ERROR(obj, file, func, line, UI__WINDOW_TYPE_MENU);
+}
+
int ui__debug_nc_check_int(int in, const char *call, const char *file, const char *func, int line)
{
if (in == ERR) {
diff --git a/src/ui/menuwin.c b/src/ui/menuwin.c
new file mode 100644
index 0000000..76c0ac3
--- /dev/null
+++ b/src/ui/menuwin.c
@@ -0,0 +1,22 @@
+#include "ui.internal.h"
+
+#include <stddef.h> /* for size_t */
+
+/* number of columns wide a menu window is */
+#define UI__MENUWIN_COLS (20)
+
+size_t ui__menuwin_next_line(char **linep)
+{
+
+}
+
+void ui__init_window_menu(struct ui_window_menu *menu)
+{
+
+}
+
+/* for base.c */
+void ui__destroy_window_menu(struct ui_window_menu *menu)
+{
+
+}
diff --git a/src/ui/root.c b/src/ui/root.c
index eeeb1b9..49dc6c3 100644
--- a/src/ui/root.c
+++ b/src/ui/root.c
@@ -110,7 +110,7 @@ void ui__update_scroll(struct ui_window_root *root)
}
}
-void ui__root_scroll_text(struct ui_window_root *root, unsigned cursor, const char *text, size_t tlen)
+void ui__root_scroll_print(struct ui_window_root *root, unsigned cursor, const char *text, size_t tlen)
{
if (cursor < root->menu_scroll) {
size_t strend = cursor + tlen;
@@ -154,9 +154,10 @@ void ui__root_draw_menu(struct ui_window_root *root)
if (item == root->menu_selected) {
wattroff(root->menu_cwindow, A_REVERSE);
/* the coordinates of the selected menu item are here, place the window :) */
+ root->menu_selected_x = getcurx(root->menu_cwindow);
}
- ui__root_scroll_text(root, cursor, text, tlen);
+ ui__root_scroll_print(root, cursor, text, tlen);
wattron(root->menu_cwindow, A_REVERSE);
cursor += tlen;
@@ -259,6 +260,15 @@ struct ui_window_base *ui__root_control_proc(struct ui_window_base *base, ui_con
return NULL;
}
break;
+ case NS('\n'):
+ if (root->menu_selected) {
+ WINDOW *win = newwin(2, 30, 5, root->menu_selected_x);
+ ui__call_draw_proc(ui__cast(base, ui_root));
+ mvwaddstr(win, 0, 0, "this line is too long to fit in the window. this line is too long to fit in the window. this line is too long to fit in the window.");
+ wrefresh(win);
+ delwin(win);
+ }
+ break;
}
if (root->menu_selected) {
diff --git a/src/ui/ui.internal.h b/src/ui/ui.internal.h
index 863d9b2..0ad03f1 100644
--- a/src/ui/ui.internal.h
+++ b/src/ui/ui.internal.h
@@ -22,7 +22,8 @@
O(BASE), \
O(LEAF), \
O(DOCK), \
- O(ROOT)
+ O(ROOT), \
+ O(MENU)
enum {
#define WT_DEF(_t) UI__WINDOW_TYPE_ ## _t
@@ -48,6 +49,7 @@ struct ui_window_base *ui__check_cast_to_base(void *, const char *, const char *
struct ui_window_leaf *ui__check_cast_to_leaf(void *, const char *, const char *, int);
struct ui_window_dock *ui__check_cast_to_dock(void *, const char *, const char *, int);
struct ui_window_root *ui__check_cast_to_root(void *, const char *, const char *, int);
+struct ui_window_menu *ui__check_cast_to_menu(void *, const char *, const char *, int);
#define NCCI(_call) ui__debug_nc_check_int(_call, #_call, __FILE__, __func__, __LINE__)
#define NCCP(_call) ui__debug_nc_check_ptr(_call, #_call, __FILE__, __func__, __LINE__)
@@ -108,6 +110,7 @@ struct ui_window_root {
size_t menu_prefix_len;
struct uimenu_item_header *menu_selected;
+ int menu_selected_x;
unsigned menu_scroll;
bool undersize_scr; /* true if the screen was found to be undersize (set in layout proc) */
@@ -119,6 +122,12 @@ struct ui_window_root {
struct uimenu_item_menu *menu_root;
};
+struct ui_window_menu {
+ struct ui_window_leaf super;
+
+ struct uimenu_item_header *first_item;
+};
+
/* internal utils */
/* in-place constructors */
@@ -126,6 +135,7 @@ void ui__init_window_base(struct ui_window_base *);
void ui__init_window_leaf(struct ui_window_leaf *);
void ui__init_window_dock(struct ui_window_dock *);
void ui__init_window_root(struct ui_window_root *, WINDOW *);
+void ui__init_window_menu(struct ui_window_menu *);
struct ui_window_base *ui__find_focused(void);
diff --git a/src/ui/uimenu.internal.h b/src/ui/uimenu.internal.h
index 82360f5..f52ba4f 100644
--- a/src/ui/uimenu.internal.h
+++ b/src/ui/uimenu.internal.h
@@ -48,4 +48,6 @@ void uimenu_menu_remove(struct uimenu_item_menu *menu, struct uimenu_item_header
/* frees children */
void uimenu_menu_free(struct uimenu_item_menu *menu);
+
+
#endif /* include guard */