ref: c5f189be7a76f9b0c1376fd5a5d75c7106bad1a6
parent: 120c11d47e0505a831c68d146869cf872c648c60
author: phil9 <[email protected]>
date: Fri Nov 19 16:46:56 EST 2021
added menu2 with open and exit options
--- a/view.c
+++ b/view.c
@@ -24,6 +24,21 @@
Image *img;
Point pos;
+enum
+{
+ Mopen,
+ Mexit,
+};
+char *menu2str[] =
+{
+ "open",
+ "exit",
+ nil,
+};
+Menu menu2 = { menu2str };
+
+void redraw(void);
+
Image*
load9(char *filename)
{
@@ -91,6 +106,21 @@
return i;
}
+int
+loadfromfile(char *filename)
+{
+ Image *i;
+
+ i = load(filename);
+ if(i == nil)
+ return -1;
+ freeimage(img);
+ img = i;
+ pos = subpt(ZP, img->r.min);
+ redraw();
+ return 0;
+}
+
void
initbg(void)
{
@@ -158,7 +188,6 @@
{
int rm;
char *a, *f;
- Image *i;
rm = 0;
a = plumblookup(m->attr, "action");
@@ -172,13 +201,7 @@
}else{
f = strdup(m->data);
}
- i = load(f);
- if(i != nil){
- freeimage(img);
- img = i;
- pos = subpt(ZP, img->r.min);
- redraw();
- }else
+ if(loadfromfile(f) < 0)
fprint(2, "cannot load plumbed image: %r"); /* XXX: visual report */
Err:
plumbfree(m);
@@ -200,6 +223,8 @@
evtmouse(Mouse m)
{
Point o;
+ int n;
+ char buf[255] = {0};
if(m.buttons == 1){
for(;;){
@@ -209,6 +234,19 @@
if((mctl->buttons & 1) == 0)
break;
pan(subpt(mctl->xy, o));
+ }
+ }else if(m.buttons == 2){
+ n = menuhit(2, mctl, &menu2, nil);
+ switch(n){
+ case Mopen:
+ if(enter("open:", buf, sizeof buf, mctl, kctl, nil) > 0){
+ if(loadfromfile(buf) < 0)
+ fprint(2, "cannot open file '%s': %r\n", buf);
+ }
+ break;
+ case Mexit:
+ threadexitsall(nil);
+ break;
}
}
}