Skip to content

Commit

Permalink
switch panels
Browse files Browse the repository at this point in the history
  • Loading branch information
kucaahbe committed May 27, 2020
1 parent 7bbe324 commit 46b9392
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ demos = just-text \
window-with-text\
two-windows \
doupdate \
panels
panels \
panels-switch
demos_files = $(patsubst %, %.exe, $(demos))

.PHONY: all
Expand Down
8 changes: 8 additions & 0 deletions curses-panel.vapi
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ namespace Curses {
public class Panel {
[CCode (cname = "new_panel")]
public Panel(Window win);
public void * userptr {
[CCode (cname = "panel_userptr")] get;
[CCode (cname = "set_panel_userptr")] set;
}
[CCode (cname = "top_panel")]
public int top();
[CCode (cname = "bottom_panel")]
public int botton();

public static void update_panels();
}
Expand Down
85 changes: 85 additions & 0 deletions panels-switch.vala
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using Curses;
using Posix;

public class Demo {
public MainLoop loop;
private IOChannel io_channel;
internal IOSource io;

public Demo() {
loop = new MainLoop();

io_channel = new IOChannel.unix_new(Posix.STDIN_FILENO);
io = new IOSource(io_channel, IOCondition.IN);
io.attach(loop.get_context());
}

public void start() {
initscr();
noecho();
}

public void stop() {
endwin();
}

private Window window1;
private Window window2;

private Panel panel1;
private Panel panel2;
public void activate() {
this.window1 = new Window(5, 20, 1, 1);
panel1 = new Panel(window1);
this.window1.box(0, 0);
this.window1.mvprintw(1, 1, "I am in window 1");
//this.window1.noutrefresh();

this.window2 = new Window(5, 20, 2, 19);
panel2 = new Panel(window2);
this.window2.box(0, 0);
this.window2.mvprintw(1, 1, "I am in window 2");
//this.window2.noutrefresh();

panel1.userptr = panel2;
panel2.userptr = panel1;

unowned Panel top_panel = panel2;

io.set_callback(() => {
var c = getch();

if (c == Key.F0) {
loop.quit();
} else {
top_panel = (Panel) top_panel.userptr;
top_panel.top();
Panel.update_panels();
doupdate();
}

return Source.CONTINUE;
});
}

public void run() {
loop.run();
}

public void redraw() {
Panel.update_panels();
doupdate();
}

static int main(string[] args) {
var app = new Demo();

app.start();
app.activate();
app.redraw();
app.run();
app.stop();

return EXIT_SUCCESS;
}
}

0 comments on commit 46b9392

Please sign in to comment.