Rev 44870 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/** R : A Computer Language for Statistical Data Analysis* Copyright (C) 1998--1999 Guido Masarotto* Copyright (C) 2004 The R Foundation** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, a copy is available at* http://www.r-project.org/Licenses/*//*Pop-up menus support + convenience methods for defininingmenubar (and pop-up) from static array of MenuItem (defined inga.h)*/#include "win-nls.h"#include "internal.h"static void mdimenu(menuitem m){switch (getvalue(m)) {case 1:SendMessage(hwndClient,WM_MDICASCADE,0,0);break;case 2:SendMessage(hwndClient,WM_MDITILE,0,0);break;case 3:SendMessage(hwndClient,WM_MDIICONARRANGE,0,0);break;}}menu newmdimenu(){menu m ;if (!ismdi()) return NULL;m = newmenu(G_("Windows"));setvalue(newmenuitem(G_("Cascade"),0,mdimenu),1);setvalue(newmenuitem(G_("Tile"),0,mdimenu),2);setvalue(newmenuitem(G_("Arrange Icons"),0,mdimenu),3);current_menubar->menubar = m;return m;}menu newpopup(actionfn fn){menu mnew;if (!current_window) return 0;mnew = newsubmenu(current_window,"");mnew->action = fn;current_window->popup = mnew;current_menu = mnew;return mnew;}void gchangepopup(window w, menu m){w->popup = m;}void gchangemenubar(menubar mb){window w = current_window;if (!w) return;w->menubar = mb;SetMenu(w->handle, mb->handle);if (ismdi()) {menu mdi = (w->menubar)->menubar;SendMessage(hwndClient, WM_MDISETMENU,(WPARAM)w->menubar->handle,(LPARAM)(mdi ? (mdi->handle) : 0));DrawMenuBar(hwndFrame);} elseDrawMenuBar(w->handle);}/* FIXME: only one level of sub-menu - no checks -*/static int addmenuitemarray(menu m,MenuItem a[]){menu ma = m;int i = 0;while (a[i].nm) {if (!strcmp(a[i].nm,"@STARTMENU")) {i += 1;ma = newsubmenu(m, G_(a[i].nm));}else if (!strcmp(a[i].nm,"@ENDMENU")) {i += 1;ma = m;}else if (!strcmp(a[i].nm,"@STARTSUBMENU")) {i += 1;newsubmenu(ma,a[i].nm);}else if (!strcmp(a[i].nm,"@ENDSUBMENU")) {i += 1;}else if (!strcmp(a[i].nm,"@MDIMENU")) {if (!(a[i].m = newmdimenu())) return 0;ma = a[i].m;}else {if (!(a[i].m = newmenuitem(G_(a[i].nm), a[i].key, a[i].fn))) return 0;}i += 1;}return 1;}menubar gmenubar(actionfn fn, MenuItem a[]){menubar m = newmenubar(fn);if (m) {if (!addmenuitemarray(m,a)) {del(m);m = NULL;}}return m;}popup gpopup(actionfn fn, MenuItem a[]){popup m = newpopup(fn);if (m) {if (!addmenuitemarray(m,a)) {del(m);m = NULL;}}return m;}