ref: c5f189be7a76f9b0c1376fd5a5d75c7106bad1a6
parent: 120c11d47e0505a831c68d146869cf872c648c60
author: phil9 <telephil9@gmail.com>
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;
}
}
}
--
⑨