PROTECTED void handle_findreplace(HWND hwnd, LPFINDREPLACE pfr) { CHARRANGE sel; int matchcase=0, wholeword=0, down=0; char buf[100]; if (pfr->Flags & FR_MATCHCASE) matchcase = 1; if (pfr->Flags & FR_WHOLEWORD) wholeword = 1; if (pfr->Flags & FR_DOWN) down = 1; if (pfr->Flags & FR_FINDNEXT) { if (!richeditfind(hwnd, pfr->lpstrFindWhat, matchcase, wholeword, down)) { snprintf(buf, 100, G_("\"%s\" not found"), pfr->lpstrFindWhat); askok(buf); } } else if (pfr->Flags & FR_REPLACE) { if (!richeditreplace(hwnd, pfr->lpstrFindWhat, pfr->lpstrReplaceWith, matchcase, wholeword, down)) { snprintf(buf, 100, G_("\"%s\" not found"), pfr->lpstrFindWhat); askok(buf); } } else if (pfr->Flags & FR_REPLACEALL) { /* replace all in the whole buffer then return to original selection state */ sendmessage (hwnd, EM_EXGETSEL, 0, &sel) ; sendmessage (hwnd, EM_SETSEL, 0, 0) ; while ( richeditreplace(hwnd, pfr->lpstrFindWhat, pfr->lpstrReplaceWith, matchcase, wholeword, down) ) ; sendmessage (hwnd, EM_EXSETSEL, 0, &sel) ; } else if (pfr->Flags & FR_DIALOGTERM) hModelessDlg = NULL; }
static void apply(button b) { v[0] = GA_gettext(var1); v[1] = GA_gettext(var2); done = strlen(v[0]) && strlen(v[1]); if (!done) askok("all fields must be completed"); }
static void editor_save_file(editor c, const char *name, int enc) { textbox t = getdata(c); FILE *f; char buf[MAX_PATH+30]; const char *sname; if (name == NULL) return; else { if(enc == CE_UTF8) { wchar_t wname[MAX_PATH+1]; Rf_utf8towcs(wname, name, MAX_PATH+1); sname = reEnc(name, CE_UTF8, CE_NATIVE, 3); f = R_wfopen(wname, L"w"); } else { sname = name; f = R_fopen(sname, "w"); } if (f == NULL) { snprintf(buf, MAX_PATH+30, G_("Could not save file '%s'"), sname); askok(buf); return; } fprintf(f, "%s", gettext(t)); fclose(f); } }
SEXP winDialog(SEXP call, SEXP op, SEXP args, SEXP env) { SEXP message; const char * type; int res=YES; args = CDR(args); type = translateChar(STRING_ELT(CAR(args), 0)); message = CADR(args); if(!isString(message) || length(message) != 1 || strlen(translateChar(STRING_ELT(message, 0))) > 255) error(_("invalid '%s' argument"), "message"); if (strcmp(type, "ok") == 0) { askok(translateChar(STRING_ELT(message, 0))); res = 10; } else if (strcmp(type, "okcancel") == 0) { res = askokcancel(translateChar(STRING_ELT(message, 0))); if(res == YES) res = 2; } else if (strcmp(type, "yesno") == 0) { res = askyesno(translateChar(STRING_ELT(message, 0))); } else if (strcmp(type, "yesnocancel") == 0) { res = askyesnocancel(translateChar(STRING_ELT(message, 0))); } else errorcall(call, _("unknown type")); return ScalarInteger(res); }
static void dropconsole(control m, char *fn) { char *p, local[MAX_PATH]; p = Rf_strrchr(fn, '.'); if(p) { /* OK even in MBCS */ if(stricmp(p+1, "R") == 0) { if(ConsoleAcceptCmd) { double_backslashes(fn, local); snprintf(cmd, 1024, "source(\"%s\")", local); consolecmd(RConsole, cmd); } /* OK even in MBCS */ } else if(stricmp(p+1, "RData") == 0 || stricmp(p+1, "rda")) { if(ConsoleAcceptCmd) { double_backslashes(fn, local); snprintf(cmd, 1024, "load(\"%s\")", local); consolecmd(RConsole, cmd); } } return; } askok(G_("Can only drag-and-drop .R, .RData and .rda files")); }
static void menupastecmds(control m) { if (consolecanpaste(RConsole)) consolepastecmds(RConsole); else askok(G_("No text available")); }
static void menucopy(control m) { if (consolecancopy(RConsole)) consolecopy(RConsole); else askok(G_("No selection")); /* show(RConsole); */ }
static void menucopypaste(control m) { if (consolecancopy(RConsole)) { consolecopy(RConsole); consolepaste(RConsole); } else askok(G_("No selection")); /* show(RConsole); */ }
static void menuabout(control m) { char s[256], s2[256]; PrintVersionString(s2, 256); snprintf(s, 256, "%s\n%s %s %s", s2, "Copyright (C)", R_YEAR, "The R Foundation for Statistical Computing"); askok(s); /* show(RConsole); */ }
void askchangedir() { char *s, msg[MAX_PATH + 40]; /* set cod to current directory */ GetCurrentDirectory(MAX_PATH, cod); s = askcdstring(G_(" Change working directory to:"), cod); if (s && (SetCurrentDirectory(s) == FALSE)) { snprintf(msg, MAX_PATH + 40, G_("Unable to set '%s' as working directory"), s); askok(msg); } /* in every case reset cod (to new directory if all went ok or to old since user may have edited it) */ GetCurrentDirectory(MAX_PATH, cod); }
static void editor_load_file(editor c, const char *name, int enc) { textbox t = getdata(c); EditorData p = getdata(t); FILE *f; char *buffer = NULL, tmp[MAX_PATH+50], tname[MAX_PATH+1]; const char *sname; long num = 1, bufsize; if(enc == CE_UTF8) { wchar_t wname[MAX_PATH+1]; Rf_utf8towcs(wname, name, MAX_PATH+1); f = R_wfopen(wname, L"r"); reEnc2(name, tname, MAX_PATH+1, CE_UTF8, CE_NATIVE, 3); sname = tname; } else { f = R_fopen(name, "r"); sname = name; } if (f == NULL) { snprintf(tmp, MAX_PATH+50, G_("unable to open file %s for reading"), sname); R_ShowMessage(tmp); return; } p->file = 1; strncpy(p->filename, name, MAX_PATH+1); bufsize = 0; while (num > 0) { buffer = realloc(buffer, bufsize + 3000 + 1); num = fread(buffer + bufsize, 1, 3000 - 1, f); if (num >= 0) { bufsize += num; buffer[bufsize] = '\0'; } else { snprintf(tmp, MAX_PATH+50, G_("Could not read from file '%s'"), sname); askok(tmp); } } setlimittext(t, 2 * strlen(buffer)); settext(t, buffer); gsetmodified(t, 0); free(buffer); fclose(f); }
static void load(button b) /* button callback */ { char *optf, buf[256]; struct structGUI newGUI; setuserfilter("All files (*.*)\0*.*\0\0"); strcpy(buf, getenv("R_USER")); R_fixbackslash(buf); optf = askfilenamewithdir(G_("Select 'Rconsole' file"), "Rconsole", buf); if(!optf) return; getChoices(&newGUI); if (loadRconsole(&newGUI, optf)) { if (strlen(newGUI.warning)) askok(newGUI.warning); cleanup(); showDialog(&newGUI); } }
static void editorhelp(void) { char s[4096]; strcpy(s, G_("R EDITOR\n")); strcat(s, "\n"); strcat(s, G_("A standard text editor for editing and running R code.\n")); strcat(s, "\n"); strcat(s, G_("RUNNING COMMANDS\n")); strcat(s, G_("To run a line or section of R code, select the code and either\n")); strcat(s, G_(" Press Ctrl-R\n")); strcat(s, G_(" Select \"Run line or selection\" from the \"Edit\" menu\n")); strcat(s, G_(" Press the \"Run line or selection\" icon on the toolbar\n")); strcat(s, G_("This will copy the selected commands to the console and evaluate them.\n")); strcat(s, G_("If there is no selection, this will just run the current line and advance\n")); strcat(s, G_("the cursor by one line.\n")); askok(s); }
static void menude(control m) { char *s; SEXP var; if (!ConsoleAcceptCmd) return; s = askstring(G_("Name of data frame or matrix"), ""); if(s) { var = findVar(install(s), R_GlobalEnv); if (var != R_UnboundValue) { snprintf(cmd, 1024,"fix(%s)", s); consolecmd(RConsole, cmd); } else { snprintf(cmd, 1024, G_("'%s' cannot be found"), s); askok(cmd); } } /* show(RConsole); */ }
void applyGUI(Gui newGUI) { rect r = getrect(RConsole); ConsoleData p = (ConsoleData) getdata(RConsole); int havenewfont = 0; struct structGUI curGUI; getActive(&curGUI); if(!has_changed(&curGUI, newGUI)) return; if(newGUI->MDI != curGUI.MDI || newGUI->toolbar != curGUI.toolbar || newGUI->statusbar != curGUI.statusbar) askok(G_("The overall console properties cannot be changed\non a running console.\n\nSave the preferences and restart Rgui to apply them.\n")); if(strcmp(newGUI->language, curGUI.language)) { char *buf = malloc(50); askok(G_("The language for menus cannot be changed on a\n running console.\n\nSave the preferences and restart Rgui to apply to menus.\n")); snprintf(buf, 50, "LANGUAGE=%s", newGUI->language); putenv(buf); } /* Set a new font? */ if(strcmp(newGUI->font, curGUI.font) || newGUI->pointsize != curGUI.pointsize || strcmp(newGUI->style, curGUI.style)) { char msg[LF_FACESIZE + 128]; int sty = Plain; if(newGUI->tt_font) strcpy(fontname, "TT "); else strcpy(fontname, ""); strcat(fontname, newGUI->font); if (!strcmp(newGUI->style, "bold")) sty = Bold; if (!strcmp(newGUI->style, "italic")) sty = Italic; pointsize = newGUI->pointsize; fontsty = sty; /* Don't delete font: open pagers may be using it */ if (strcmp(fontname, "FixedFont")) consolefn = gnewfont(NULL, fontname, fontsty, pointsize, 0.0, 1); else consolefn = FixedFont; if (!consolefn) { snprintf(msg, LF_FACESIZE + 128, G_("Font %s-%d-%d not found.\nUsing system fixed font"), fontname, fontsty | FixedWidth, pointsize); R_ShowMessage(msg); consolefn = FixedFont; } /* if (!ghasfixedwidth(consolefn)) { sprintf(msg, G_("Font %s-%d-%d has variable width.\nUsing system fixed font"), fontname, fontsty, pointsize); R_ShowMessage(msg); consolefn = FixedFont; } */ p->f = consolefn; FH = fontheight(p->f); FW = fontwidth(p->f); havenewfont = 1; } /* resize console, possibly with new font */ if (consoler != newGUI->crows || consolec != newGUI->ccols || havenewfont) { char buf[20]; consoler = newGUI->crows; consolec = newGUI->ccols; r.width = (consolec + 1) * FW; r.height = (consoler + 1) * FH; resize(RConsole, r); snprintf(buf, 20, "%d", ROWS); settext(f_crows, buf); snprintf(buf, 20, "%d", COLS); settext(f_ccols, buf); } if (p->lbuf->dim != newGUI->cbb || p->lbuf->ms != newGUI->cbl) xbufgrow(p->lbuf, newGUI->cbb, newGUI->cbl); /* Set colours and redraw */ for (int i=0; i<numGuiColors; i++) p->guiColors[i] = guiColors[i] = newGUI->guiColors[i]; drawconsole(RConsole, r); if(haveusedapager && (newGUI->prows != curGUI.prows || newGUI->pcols != curGUI.pcols)) askok(G_("Changes in pager size will not apply to any open pagers")); pagerrow = newGUI->prows; pagercol = newGUI->pcols; if(newGUI->pagerMultiple != pagerMultiple) { if(!haveusedapager || askokcancel(G_("Do not change pager type if any pager is open\nProceed?")) == YES) pagerMultiple = newGUI->pagerMultiple; if(pagerMultiple) { check(rb_mwin); uncheck(rb_swin); } else {check(rb_swin); uncheck(rb_mwin);} } setWidthOnResize = newGUI->setWidthOnResize; consolebuffered = newGUI->buffered; Rwin_graphicsx = newGUI->grx; Rwin_graphicsy = newGUI->gry; p->cursor_blink = newGUI->cursor_blink; }