⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fluid.cxx

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CXX
字号:
//// "$Id: fluid.cxx,v 1.1.1.1 2003/08/07 21:18:39 jasonk Exp $"//// FLUID main entry for the Fast Light Tool Kit (FLTK).//// Copyright 1998-1999 by Bill Spitzak and others.//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Library General Public// License as published by the Free Software Foundation; either// version 2 of the License, or (at your option) any later version.//// This library 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// Library General Public License for more details.//// You should have received a copy of the GNU Library General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307// USA.//// Please report all bugs and problems to "fltk-bugs@easysw.com".//const char *copyright ="The FLTK user interface designer version 1.0\n""Copyright 1998-1999 by Bill Spitzak and others.\n""\n""This library is free software; you can redistribute it and/or ""modify it under the terms of the GNU Library General Public ""License as published by the Free Software Foundation; either ""version 2 of the License, or (at your option) any later version.\n""\n""This library 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 Library General Public License for more details.\n""\n""You should have received a copy of the GNU Library General Public ""License along with this library; if not, write to the Free Software ""Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 ""USA.\n""\n""Please report bugs to fltk-bugs@easysw.com.";#include <FL/Fl.H>#include <FL/Fl_Double_Window.H>#include <FL/Fl_Box.H>#include <FL/Fl_Button.H>#include <FL/Fl_Hold_Browser.H>#include <FL/Fl_Menu_Bar.H>#include <FL/Fl_Input.H>#include <FL/fl_ask.H>#include <FL/fl_draw.H>#include <FL/fl_file_chooser.H>#include <FL/fl_message.H>#include <FL/filename.H>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <errno.h>#if defined(WIN32) && !defined(CYGNUS)# include <direct.h>#else# include <unistd.h>#endif#include "about_panel.h"#include "Fl_Type.h"////////////////////////////////////////////////////////////////void nyi(Fl_Widget *,void *) {    fl_message("That's not yet implemented, sorry");}static const char *filename;void set_filename(const char *c);int modflag;static char* pwd;static char in_source_dir;void goto_source_dir() {  if (in_source_dir) return;  if (!filename || !*filename) return;  const char *p = filename_name(filename);  if (p <= filename) return; // it is in the current directory  char buffer[1024];  strcpy(buffer,filename);  int n = p-filename; if (n>1) n--; buffer[n] = 0;  if (!pwd) {    pwd = getcwd(0,1024);    if (!pwd) {fprintf(stderr,"getwd : %s\n",strerror(errno)); return;}  }  if (chdir(buffer)<0) {fprintf(stderr, "Can't chdir to %s : %s\n",				buffer, strerror(errno)); return;}  in_source_dir = 1;}void leave_source_dir() {  if (!in_source_dir) return;  if (chdir(pwd)<0) {fprintf(stderr, "Can't chdir to %s : %s\n",			     pwd, strerror(errno));}  in_source_dir = 0;}  Fl_Window *main_window;void save_cb(Fl_Widget *, void *v) {  const char *c = filename;  if (v || !c || !*c) {    if (!(c=fl_file_chooser("Save to:", "*.f[ld]", c))) return;    set_filename(c);  }  if (!write_file(c)) {    fl_message("Error writing %s: %s", c, strerror(errno));    return;  }  modflag = 0;}void exit_cb(Fl_Widget *,void *) {  if (modflag)    switch (fl_choice("Save changes before exiting?", "Cancel", "No", "Yes"))    {      case 0 : /* Cancel */          return;      case 2 : /* Yes */          save_cb(NULL, NULL);	  if (modflag) return;	// Didn't save!    }  exit(0);}void open_cb(Fl_Widget *, void *v) {  if (!v && modflag && !fl_ask("Discard changes?")) return;  const char *c;  if (!(c = fl_file_chooser("Open:", "*.f[ld]", filename))) return;  if (!read_file(c, v!=0)) {    fl_message("Can't read %s: %s", c, strerror(errno));    return;  }  if (!v) {set_filename(c); modflag = 0;}  else modflag = 1;}void new_cb(Fl_Widget *, void *v) {  if (!v && modflag && !fl_ask("Discard changes?")) return;  const char *c;  if (!(c = fl_file_chooser("New:", "*.f[ld]", 0))) return;  delete_all();  set_filename(c);  modflag = 0;}int compile_only = 0;int header_file_set = 0;int code_file_set = 0;const char* header_file_name = ".h";const char* code_file_name = ".cxx";void write_cb(Fl_Widget *, void *) {  if (!filename) {    save_cb(0,0);    if (!filename) return;  }  char cname[1024];  char hname[1024];  if (*code_file_name == '.') {    strcpy(cname,filename_name(filename));    filename_setext(cname, code_file_name);  } else {    strcpy(cname, code_file_name);  }  if (*header_file_name == '.') {    strcpy(hname,filename_name(filename));    filename_setext(hname, header_file_name);  } else {    strcpy(hname, header_file_name);  }  if (!compile_only) goto_source_dir();  int x = write_code(cname,hname);  if (!compile_only) leave_source_dir();  strcat(cname, "/"); strcat(cname,header_file_name);  if (compile_only) {    if (!x) {fprintf(stderr,"%s : %s\n",cname,strerror(errno)); exit(1);}  } else {    if (!x) {      fl_message("Can't write %s: %s", cname, strerror(errno));    } else {      fl_message("Wrote %s", cname, 0);    }  }}void openwidget_cb(Fl_Widget *, void *) {  if (!Fl_Type::current) {    fl_message("Please select a widget");    return;  }  Fl_Type::current->open();}void toggle_overlays(Fl_Widget *,void *);void select_all_cb(Fl_Widget *,void *);void group_cb(Fl_Widget *, void *);void ungroup_cb(Fl_Widget *, void *);extern int pasteoffset;static int ipasteoffset;static char* cutfname() {#ifdef WIN32  return "\\.fluid_cut_buffer";#else  static char name[256] = "~/.fluid_cut_buffer";  static char beenhere;  if (!beenhere) {beenhere = 1; filename_expand(name,name);}  return name;#endif}void copy_cb(Fl_Widget*, void*) {  if (!Fl_Type::current) return;  ipasteoffset = 10;  if (!write_file(cutfname(),1)) {    fl_message("Can't write %s: %s", cutfname(), strerror(errno));    return;  }}extern void select_only(Fl_Type *);void cut_cb(Fl_Widget *, void *) {  if (!Fl_Type::current) return;  ipasteoffset = 0;  Fl_Type *p = Fl_Type::current->parent;  while (p && p->selected) p = p->parent;  if (!write_file(cutfname(),1)) {    fl_message("Can't write %s: %s", cutfname(), strerror(errno));    return;  }  delete_all(1);  if (p) select_only(p);}extern int force_parent, gridx, gridy;void paste_cb(Fl_Widget*, void*) {  if (ipasteoffset) force_parent = 1;  pasteoffset = ipasteoffset;  if (gridx>1) pasteoffset = ((pasteoffset-1)/gridx+1)*gridx;  if (gridy>1) pasteoffset = ((pasteoffset-1)/gridy+1)*gridy;  if (!read_file(cutfname(), 1)) {    fl_message("Can't read %s: %s", cutfname(), strerror(errno));  }  pasteoffset = 0;  ipasteoffset += 10;  force_parent = 0;}void earlier_cb(Fl_Widget*,void*);void later_cb(Fl_Widget*,void*);Fl_Type *sort(Fl_Type *parent);static void sort_cb(Fl_Widget *,void *) {  sort((Fl_Type*)0);}void show_alignment_cb(Fl_Widget *, void *);void about_cb(Fl_Widget *, void *) {  if (!about_panel) make_about_panel(copyright);  copyright_box->hide();  display_group->show();  about_panel->show();}////////////////////////////////////////////////////////////////extern Fl_Menu_Item New_Menu[];Fl_Menu_Item Main_Menu[] = {{"&File",0,0,0,FL_SUBMENU},  {"New", 0, new_cb, 0},  {"Open...", FL_ALT+'o', open_cb, 0},  {"Save", FL_ALT+'s', save_cb, 0},  {"Save As...", FL_ALT+'S', save_cb, (void*)1},  {"Merge...", FL_ALT+'i', open_cb, (void*)1, FL_MENU_DIVIDER},  {"Write code", FL_ALT+'C', write_cb, 0},  {"Quit", FL_ALT+'q', exit_cb},  {0},{"&Edit",0,0,0,FL_SUBMENU},  {"Undo", FL_ALT+'z', nyi},  {"Cut", FL_ALT+'x', cut_cb},  {"Copy", FL_ALT+'c', copy_cb},  {"Paste", FL_ALT+'v', paste_cb},  {"Select All", FL_ALT+'a', select_all_cb, 0, FL_MENU_DIVIDER},  {"Open...", FL_F+1, openwidget_cb},  {"Sort",0,sort_cb},  {"Earlier", FL_F+2, earlier_cb},  {"Later", FL_F+3, later_cb},//{"Show", FL_F+5, show_cb},//{"Hide", FL_F+6, hide_cb},  {"Group", FL_F+7, group_cb},  {"Ungroup", FL_F+8, ungroup_cb,0, FL_MENU_DIVIDER},//{"Deactivate", 0, nyi},//{"Activate", 0, nyi, 0, FL_MENU_DIVIDER},  {"Overlays on/off",FL_ALT+'O',toggle_overlays},  {"Preferences",FL_ALT+'p',show_alignment_cb},  {0},{"&New", 0, 0, (void *)New_Menu, FL_SUBMENU_POINTER},{"&Help",0,0,0,FL_SUBMENU},  {"About fluid",0,about_cb},//{"Manual",0,nyi},  {0},{0}};#define BROWSERWIDTH 300#define BROWSERHEIGHT 500#define WINWIDTH 300#define MENUHEIGHT 30#define WINHEIGHT (BROWSERHEIGHT+MENUHEIGHT)extern void fill_in_New_Menu();void make_main_window() {  if (!main_window) {    Fl_Widget *o;    main_window = new Fl_Double_Window(WINWIDTH,WINHEIGHT,"fluid");    main_window->box(FL_NO_BOX);    o = make_widget_browser(0,MENUHEIGHT,BROWSERWIDTH,BROWSERHEIGHT);    o->box(FL_FLAT_BOX);    main_window->resizable(o);    Fl_Menu_Bar *m = new Fl_Menu_Bar(0,0,BROWSERWIDTH,MENUHEIGHT);    m->menu(Main_Menu);    m->global();    fill_in_New_Menu();    main_window->end();  }}void set_filename(const char *c) {  if (filename) free((void *)filename);  filename = strdup(c);  if (main_window) main_window->label(filename);}////////////////////////////////////////////////////////////////static int arg(int argc, char** argv, int& i) {  if (argv[i][1] == 'c' && !argv[i][2]) {compile_only = 1; i++; return 1;}  if (argv[i][1] == 'o' && !argv[i][2] && i+1 < argc) {    code_file_name = argv[i+1];    code_file_set  = 1;    i += 2;    return 2;  }  if (argv[i][1] == 'h' && !argv[i][2]) {    header_file_name = argv[i+1];    header_file_set  = 1;    i += 2;    return 2;  }  return 0;}#ifndef WIN32#include <signal.h>#ifdef _sigargs#define SIGARG _sigargs#else#ifdef __sigargs#define SIGARG __sigargs#else#define SIGARG int // you may need to fix this for older systems#endif#endifstatic void sigint(SIGARG) {  signal(SIGINT,sigint);  exit_cb(0,0);}#endifint main(int argc,char **argv) {  int i = 1;  if (!Fl::args(argc,argv,i,arg) || i < argc-1) {    fprintf(stderr,"usage: %s <switches> name.fl\n"" -c : write .cxx and .h and exit\n"" -o <name> : .cxx output filename, or extension if <name> starts with '.'\n"" -h <name> : .h output filename, or extension if <name> starts with '.'\n""%s\n", argv[0], Fl::help);    return 1;  }  const char *c = argv[i];  make_main_window();  if (c) set_filename(c);  if (!compile_only) {    Fl::visual((Fl_Mode)(FL_DOUBLE|FL_INDEX));    main_window->callback(exit_cb);    main_window->show(argc,argv);  }  if (c && !read_file(c,0)) {    if (compile_only) {      fprintf(stderr,"%s : %s\n", c, strerror(errno));      exit(1);    }    fl_message("Can't read %s: %s", c, strerror(errno));  }  if (compile_only) {write_cb(0,0); exit(0);}  modflag = 0;#ifndef WIN32  signal(SIGINT,sigint);#endif  return Fl::run();}//// End of "$Id: fluid.cxx,v 1.1.1.1 2003/08/07 21:18:39 jasonk Exp $".//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -