Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

RenderFltkMenu.C

Go to the documentation of this file.
00001 /***************************************************************************
00002  *cr                                                                       
00003  *cr            (C) Copyright 1995-2008 The Board of Trustees of the           
00004  *cr                        University of Illinois                       
00005  *cr                         All Rights Reserved                        
00006  *cr                                                                   
00007  ***************************************************************************/
00008 
00009 #include "RenderFltkMenu.h"
00010 #include "CmdRender.h"
00011 #include <FL/Fl.H>
00012 #include <FL/forms.H>
00013 #include <FL/Fl_Window.H>
00014 #include <FL/Fl_Choice.H>
00015 #include <FL/Fl_Input.H>
00016 #include <FL/Fl_Button.H>
00017 #include <FL/Fl_Box.H>
00018 #include "VMDApp.h"
00019 
00020 void RenderFltkMenu::make_window() {
00021   size(330, 220);
00022   { 
00023     { Fl_Choice* o = formatchoice = new Fl_Choice(110, 45, 130, 25, "Render using:");
00024       o->down_box(FL_BORDER_BOX);
00025       o->color(FL_PALEGREEN, FL_BLACK);
00026       o->callback(formatchoice_cb, this);
00027     }
00028     { Fl_Input* o = filenameinput = new Fl_Input(15, 95, 235, 25, "Filename:");
00029       o->align(FL_ALIGN_TOP_LEFT);
00030       o->selection_color(FL_YELLOW);
00031     }
00032     Fl_Button *browsebutton = new Fl_Button(255, 95, 65, 25, "Browse...");
00033     browsebutton->callback(browse_cb, this);
00034     { Fl_Input* o = commandinput = new Fl_Input(15, 145, 190, 25, "Render Command:");
00035       o->align(FL_ALIGN_TOP_LEFT);
00036       o->selection_color(FL_YELLOW);
00037       o->when(FL_WHEN_CHANGED);
00038       o->callback(command_cb, this);
00039     }
00040     Fl_Button *defaultbutton = new Fl_Button(210, 145, 110, 25, "Restore default");
00041     defaultbutton->callback(default_cb, this);
00042     Fl_Button *renderbutton = new Fl_Button(15, 185, 305, 25, "Start Rendering");
00043     renderbutton->callback(render_cb, this);
00044     { Fl_Box* o = new Fl_Box(15, 15, 230, 25, "Render the current scene to a file.");
00045       o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
00046     }
00047     end();
00048   }
00049 }
00050 
00051 void RenderFltkMenu::fill_render_choices() {
00052   formatchoice->clear();
00053   for (int n=0; n<app->filerender_num(); n++)
00054     formatchoice->add(app->filerender_name(n));
00055   formatchoice->value(0);
00056   formatchoice_cb(NULL, this);
00057 }
00058 
00059 RenderFltkMenu::RenderFltkMenu(VMDApp *vmdapp)
00060 : VMDFltkMenu("render", "File Render Controls", vmdapp) {
00061 
00062   make_window();
00063   fill_render_choices();
00064   command_wanted(Command::RENDER_OPTION);
00065 }
00066 
00067 void RenderFltkMenu::formatchoice_cb(Fl_Widget *, void *v) {
00068   RenderFltkMenu *self = (RenderFltkMenu *)v;
00069   const char *method = self->formatchoice->text();
00070   const char *fname = self->app->filerender_default_filename(method);
00071   const char *opt = self->app->filerender_option(method, NULL);
00072   if (fname) self->filenameinput->value(fname);
00073   if (opt)   self->commandinput->value(opt);
00074 }
00075 
00076 void RenderFltkMenu::command_cb(Fl_Widget *, void *v) {
00077   RenderFltkMenu *self = (RenderFltkMenu *)v;
00078   const char *method = self->formatchoice->text();
00079   const char *cmd = self->commandinput->value();
00080   if (method && cmd) self->app->filerender_option(method, cmd);
00081 }
00082 
00083 void RenderFltkMenu::default_cb(Fl_Widget *, void *v) {
00084   RenderFltkMenu *self = (RenderFltkMenu *)v;
00085   const char *method = self->formatchoice->text();
00086   if (method) {
00087     const char *opt = self->app->filerender_default_option(method);
00088     self->app->filerender_option(method, opt);
00089     self->commandinput->value(opt);
00090   }
00091 }
00092 
00093 void RenderFltkMenu::browse_cb(Fl_Widget *, void *v) {
00094   RenderFltkMenu *self = (RenderFltkMenu *)v;
00095   char *fname = self->app->vmd_choose_file(
00096       "Select rendering output file:", "*", "All files",1);
00097   if (fname) {
00098     self->filenameinput->value(fname);
00099     delete [] fname;
00100   }
00101 }
00102 
00103 void RenderFltkMenu::render_cb(Fl_Widget *w, void *v) {
00104   RenderFltkMenu *self = (RenderFltkMenu *)v;
00105   Fl_Button *renderbutton = (Fl_Button *)w;
00106   const char *method = self->formatchoice->text();
00107   const char *outfile = self->filenameinput->value();
00108   const char *outcmd = self->commandinput->value();
00109   if (!method || !outfile || !strlen(outfile)) {
00110     fl_alert("Please select a file format and filename before rendering.");
00111     return;
00112   }
00113   renderbutton->label("Rendering in progress...");
00114   renderbutton->value(1);
00115   Fl::wait(0);
00116 
00117   int rc = self->app->filerender_render(method, outfile, outcmd);
00118   renderbutton->label("Start Rendering");
00119   renderbutton->value(0);
00120   if (!rc) {
00121     fl_alert("File rendering failed; check the VMD text console for errors.");
00122   }
00123 }
00124 
00125 int RenderFltkMenu::act_on_command(int type, Command *cmd) {
00126   if (type == Command::RENDER_OPTION) {
00127     CmdRenderOption *cmdrender = (CmdRenderOption *)cmd;
00128     if (!strcmp(cmdrender->method, formatchoice->text()) &&
00129          strcmp(cmdrender->option, commandinput->value())) {
00130       commandinput->value(cmdrender->option);
00131     }
00132     return TRUE;
00133   }
00134   return FALSE;
00135 }
00136 
00137 

Generated on Sun Sep 7 01:26:11 2008 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002