Fl_Double_Window* make_window() {
  Fl_Double_Window* w;
  { Fl_Double_Window* o = new Fl_Double_Window(400, 605);
    w = o;
    { undobutton = new Fl_Button(6, 25, 40, 25, "Undo");
      undobutton->down_box(FL_DOWN_BOX);
      undobutton->callback((Fl_Callback*)undo_cb);
    } // Fl_Button* undobutton
    { forceslider = new Fl_Slider(206, 25, 75, 25, "Force");
      forceslider->type(5);
      forceslider->selection_color((Fl_Color)1);
      forceslider->minimum(0.05);
      forceslider->value(0.5);
      forceslider->callback((Fl_Callback*)lerp_cb);
      forceslider->align(Fl_Align(FL_ALIGN_RIGHT));
    } // Fl_Slider* forceslider
    { rgbmode = new Fl_Button(331, 25, 35, 25, "HSB");
      rgbmode->labelsize(12);
      rgbmode->callback((Fl_Callback*)rgbmode_cb);
      rgbmode->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
    } // Fl_Button* rgbmode
    { fnamebox = new Fl_Input(31, 60, 355, 25, "File:");
      fnamebox->labeltype(FL_ENGRAVED_LABEL);
      fnamebox->labelsize(12);
      fnamebox->callback((Fl_Callback*)input_cb);
      fnamebox->when(FL_WHEN_ENTER_KEY_ALWAYS);
    } // Fl_Input* fnamebox
    { cshow.hsblbls[0] = new Fl_Box(30, 219, 80, 20, "Hue (L)");
      cshow.hsblbls[0]->box(FL_FLAT_BOX);
      cshow.hsblbls[0]->color((Fl_Color)34);
      cshow.hsblbls[0]->labelfont(1);
      cshow.hsblbls[0]->labelsize(12);
      cshow.hsblbls[0]->labelcolor((Fl_Color)3);
    } // Fl_Box* cshow.hsblbls[0]
    { cshow.hsblbls[1] = new Fl_Box(115, 219, 75, 20, "Sat(M)");
      cshow.hsblbls[1]->box(FL_FLAT_BOX);
      cshow.hsblbls[1]->color((Fl_Color)34);
      cshow.hsblbls[1]->labelfont(1);
      cshow.hsblbls[1]->labelsize(12);
      cshow.hsblbls[1]->labelcolor((Fl_Color)2);
    } // Fl_Box* cshow.hsblbls[1]
    { cshow.hsblbls[2] = new Fl_Box(195, 219, 75, 20, "Bright(R)");
      cshow.hsblbls[2]->box(FL_FLAT_BOX);
      cshow.hsblbls[2]->color((Fl_Color)34);
      cshow.hsblbls[2]->labelfont(1);
      cshow.hsblbls[2]->labelsize(12);
      cshow.hsblbls[2]->labelcolor((Fl_Color)235);
    } // Fl_Box* cshow.hsblbls[2]
    { Fl_Box* o = new Fl_Box(275, 219, 80, 20, "Alpha(shift)");
      o->box(FL_FLAT_BOX);
      o->color((Fl_Color)34);
      o->labelfont(1);
      o->labelsize(12);
      o->labelcolor(FL_BACKGROUND2_COLOR);
    } // Fl_Box* o
    { cmedit = new class CMedit(5, 239, 380, 270);
      cmedit->box(FL_FLAT_BOX);
      cmedit->color(FL_BACKGROUND_COLOR);
      cmedit->selection_color(FL_BACKGROUND_COLOR);
      cmedit->labeltype(FL_NORMAL_LABEL);
      cmedit->labelfont(0);
      cmedit->labelsize(14);
      cmedit->labelcolor(FL_FOREGROUND_COLOR);
      cmedit->align(Fl_Align(FL_ALIGN_CENTER));
      cmedit->when(FL_WHEN_RELEASE);
      Fl_Group::current()->resizable(cmedit);
    } // class CMedit* cmedit
    { cshow.color = new colorpatch(62, 515, 50, 40);
      cshow.color->box(FL_DOWN_BOX);
      cshow.color->color(FL_BACKGROUND_COLOR);
      cshow.color->selection_color(FL_BACKGROUND_COLOR);
      cshow.color->labeltype(FL_NO_LABEL);
      cshow.color->labelfont(0);
      cshow.color->labelsize(14);
      cshow.color->labelcolor(FL_FOREGROUND_COLOR);
      cshow.color->align(Fl_Align(FL_ALIGN_CENTER));
      cshow.color->when(FL_WHEN_RELEASE);
    } // colorpatch* cshow.color
    { cshow.cindex = new Fl_Value_Input(7, 530, 50, 25, "  (index");
      cshow.cindex->box(FL_FLAT_BOX);
      cshow.cindex->color((Fl_Color)16);
      cshow.cindex->maximum(0);
      cshow.cindex->step(1);
      cshow.cindex->textsize(12);
      cshow.cindex->callback((Fl_Callback*)report_cb);
      cshow.cindex->align(Fl_Align(FL_ALIGN_TOP));
    } // Fl_Value_Input* cshow.cindex
    { cshow.hsba = new Fl_Output(117, 530, 120, 25, "HSBA");
      cshow.hsba->box(FL_FLAT_BOX);
      cshow.hsba->color((Fl_Color)16);
      cshow.hsba->textsize(11);
      cshow.hsba->align(Fl_Align(FL_ALIGN_TOP));
    } // Fl_Output* cshow.hsba
    { cshow.rgba = new Fl_Output(247, 530, 125, 25, "rgb");
      cshow.rgba->box(FL_FLAT_BOX);
      cshow.rgba->color((Fl_Color)16);
      cshow.rgba->textsize(11);
      cshow.rgba->align(Fl_Align(FL_ALIGN_TOP));
    } // Fl_Output* cshow.rgba
    { cshow.postscalein = new Fl_Value_Input(317, 570, 65, 25, "* Amax");
      cshow.postscalein->callback((Fl_Callback*)ascale_cb);
      cshow.postscalein->align(Fl_Align(FL_ALIGN_TOP_LEFT));
    } // Fl_Value_Input* cshow.postscalein
    { cshow.postexponin = new Fl_Value_Input(237, 570, 75, 25, "**  expon  )");
      cshow.postexponin->callback((Fl_Callback*)ascale_cb);
      cshow.postexponin->align(Fl_Align(FL_ALIGN_TOP_LEFT));
    } // Fl_Value_Input* cshow.postexponin
    { cshow.cmentin = new Fl_Value_Input(7, 570, 55, 25, "cmapsize");
      cshow.cmentin->box(FL_ENGRAVED_BOX);
      cshow.cmentin->color((Fl_Color)25);
      cshow.cmentin->callback((Fl_Callback*)ncment_cb);
      cshow.cmentin->align(Fl_Align(FL_ALIGN_TOP_LEFT));
      cshow.cmentin->when(FL_WHEN_RELEASE);
    } // Fl_Value_Input* cshow.cmentin
    { cshow.scaleout = new Fl_Output(137, 570, 95, 25, "  Aout  =  ( Ain");
      cshow.scaleout->box(FL_FLAT_BOX);
      cshow.scaleout->color((Fl_Color)16);
      cshow.scaleout->align(Fl_Align(FL_ALIGN_TOP_LEFT));
    } // Fl_Output* cshow.scaleout
    { Fl_Menu_Bar* o = new Fl_Menu_Bar(0, 0, 400, 20);
      o->color((Fl_Color)46);
      o->menu(menu_);
    } // Fl_Menu_Bar* o
    o->end();
  } // Fl_Double_Window* o
  return w;
}
Example #2
0
ModelerUserInterface::ModelerUserInterface() {
	// Make this instance the current one
	instance = this;

	// Initialize pointers to NULL
	m_nativeChooser = NULL;
	model = NULL;
	currentGroup = NULL;

	// Set appearance to GTK+ for a nice look
	Fl::scheme("gtk+");

	// Set the animation speed to 24 frames/second
	framesPerSecond = 24;

	// We're not animating yet.
	animating = false;

	// Set the color scheme
	Fl::set_color(FL_BACKGROUND_COLOR, 240, 240, 240);
	Fl::set_color(FL_BACKGROUND2_COLOR, 255, 255, 255);
	Fl::set_color(FL_FOREGROUND_COLOR, 0, 0, 0);
	Fl::set_color(FL_INACTIVE_COLOR, 128, 128, 128);
	Fl::set_color(FL_SELECTION_COLOR, 51, 153, 255);

	// Create all of the UI elements
	// (autogenerated by FLUID, the FLTK UI Designer)
	Fl_Double_Window* w;
	//const char* title = "CSEP457 Modeler";
	const char* title = "CSEP557 Modeler";
	{ Fl_Double_Window* o = m_controlsWindow = new Fl_Double_Window(800, 625, title);
		w = o;
		o->callback((Fl_Callback*)cb_m_controlsWindow, (void*)(this));
		o->when(FL_WHEN_NEVER);
		{ Fl_Menu_Bar* o = m_controlsMenuBar = new Fl_Menu_Bar(0, 0, 800, 25);
		  o->menu(menu_m_controlsMenuBar);
		}

		// Contains the controls on the left
		{ leftPane = new Fl_Group(0, 25, 250, 600);
			int tabSpace = -25, controlSpace = 0;
				{ Fl_Tile* o = m_controlSplitPane = new Fl_Tile(0, 50 + tabSpace, 250, 575 - tabSpace);
					o->box(FL_FLAT_BOX);
					{ Fl_Tree* o = m_controlsTree = new Fl_Tree(0, 50 + tabSpace, 250, 100);
					  o->when(FL_WHEN_CHANGED);
					  o->callback((Fl_Callback*)TreeCallback);
					  o->marginleft(-5);
					  o->end();
					}
					{ Fl_Scroll* o = m_controlsScroll =
						new Fl_Scroll(0, 150 + tabSpace, 250, 475 - tabSpace - controlSpace);
					  o->type(Fl_Scroll::VERTICAL);
					  o->when(FL_WHEN_CHANGED);
					  { Fl_Pack* o = m_controlsPack =
						  new Fl_Pack(10, 150 + tabSpace, 215, 475 - tabSpace - controlSpace);
						Fl_Group::current()->resizable(o);
						o->spacing(2);
						o->end();
					  }
					  o->end();
					}
					o->end();
				} // end Modeler group/tab
			leftPane->end();
		} // left pane
		{ // TODO: remove this extra brace!
			{ Fl_Group* o = m_viewPane = new Fl_Group(250, 25, 550, 600);
				o->box(FL_NO_BOX);
				o->color(FL_BACKGROUND_COLOR);
				m_modelerView = new ModelerView(250, 25, 550, 600, "");
				w->resizable(m_modelerView);
				o->end();
				Fl_Group::current()->resizable(o);
			}
		}
		o->end();
	}
}
ModelerUserInterface::ModelerUserInterface() {
	// Make this instance the current one
	instance = this;

	// Initialize pointers to NULL
	m_nativeChooser = NULL;
	model = NULL;
	currentGroup = NULL;
	renderGroup = NULL;
	defaultCam = NULL;
	ps = NULL;
	movieWidth = 720;
	movieHeight = 480;

	// Set appearance to GTK+ for a nice look
	Fl::scheme("gtk+");

	// Set the animation speed to 24 frames/second
	framesPerSecond = 24;

	// We're not animating yet.
	animating = false;
	simulating = false;
	rendering = false;
	drawing = false;

	// Set the color scheme
	Fl::set_color(FL_BACKGROUND_COLOR, 240, 240, 240);
	Fl::set_color(FL_BACKGROUND2_COLOR, 255, 255, 255);
	Fl::set_color(FL_FOREGROUND_COLOR, 0, 0, 0);
	Fl::set_color(FL_INACTIVE_COLOR, 128, 128, 128);
	Fl::set_color(FL_SELECTION_COLOR, 51, 153, 255);

	// Create all of the UI elements
	// (autogenerated by FLUID, the FLTK UI Designer)
	Fl_Double_Window* w;
	const char* title = "Animator";
	{ Fl_Double_Window* o = m_controlsWindow = new Fl_Double_Window(800, 625, title);
		w = o;
		o->callback((Fl_Callback*)cb_m_controlsWindow, (void*)(this));
		o->when(FL_WHEN_NEVER);
		{ Fl_Menu_Bar* o = m_controlsMenuBar = new Fl_Menu_Bar(0, 0, 800, 25);
		  o->menu(menu_m_controlsMenuBar);
		}

		// Contains the controls on the left
		{ leftPane = new Fl_Group(0, 25, 250, 600);
			int tabSpace = 0, controlSpace = 0;
			int controlTop = 25 + 600 - controlSpace;

			// Modeler and Curves tabs
			{ Fl_Tabs* t = new Fl_Tabs(0, 25, 250, 600 - controlSpace);
				// Make the tab area stretch.
				leftPane->resizable(t);
				t->when(FL_WHEN_CHANGED);
				t->callback((Fl_Callback*)TabsCallback, this);
				// Curves tab
				{ Fl_Group* o = new Fl_Group(0, 50, 250, 575 - controlSpace, "Curves");
					o->box(FL_FLAT_BOX);
					o->color(FL_BACKGROUND_COLOR);
					{ Fl_Tree* o = curvesTree = new Fl_Tree(0, 50, 250, 575 - controlSpace);
					  o->when(FL_WHEN_CHANGED);
					  o->callback((Fl_Callback*)CurveTreeCallback);
					  o->marginleft(-5);
					  o->end();
					}
					o->end();
				}

				// Modeler tab
				{ Fl_Tile* o = m_controlSplitPane =
					new Fl_Tile(0, 50 + tabSpace, 250, 575 + tabSpace - controlSpace, "Modeler");
					// Make only the content area of the tabs resize.
					t->resizable(o);
					o->box(FL_FLAT_BOX);
					{ Fl_Tree* o = m_controlsTree = new Fl_Tree(0, 50 + tabSpace, 250, 100);
					  o->when(FL_WHEN_CHANGED);
					  o->callback((Fl_Callback*)TreeCallback);
					  o->marginleft(-5);
					  o->end();
					}
					{ Fl_Scroll* o = m_controlsScroll =
						new Fl_Scroll(0, 150 + tabSpace, 250, 475 - tabSpace - controlSpace);
					  o->type(Fl_Scroll::VERTICAL);
					  o->when(FL_WHEN_CHANGED);
					  { Fl_Pack* o = m_controlsPack =
						  new Fl_Pack(10, 150 + tabSpace, 215, 475 - tabSpace - controlSpace);
						Fl_Group::current()->resizable(o);
						o->spacing(2);
						o->end();
					  }
					  o->end();
					}
					o->end();
				} // end Modeler group/tab
				t->end();
			} // end tabs
			leftPane->end();
		} // left pane
		{ // TODO: remove this extra brace!
			{ Fl_Group* o = m_viewPane = new Special_Tile(250, 25, 550, 600);
				o->box(FL_NO_BOX);
				o->color(FL_BACKGROUND_COLOR);
				// show a smaller modeler view
				m_modelerView = new ModelerView(250, 25, 550, 350, "");
				m_modelerView->resizable();
				// show a curve window with animation controls underneath
				{ curvePane = new Fl_Group(250, 375, 550, 250);
					

					// Row containing the curve options
					{ Fl_Group* o = new Fl_Group(255, 380, 540, 20, "Curve Editor");
						// Put particle system label inside
						o->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
						o->labelfont(FL_HELVETICA_BOLD);

						// Curve type chooser
						chooserCurveType = new Fl_Choice(445, 380, 120, 20, "Curve Type: ");
						chooserCurveType->menu(curveTypeMenu);
						chooserCurveType->callback((Fl_Callback*)chooserCurveTypeCallback, this);
						chooserCurveType->deactivate();

						// Wrap checkbox
						checkboxWrap = new Fl_Check_Button(570, 380, 60, 20, "Wrap");
						checkboxWrap->callback((Fl_Callback*)checkboxWrapCallback, this);
						checkboxWrap->deactivate();

						// Zoom All button
						buttonZoomAll = new Fl_Button(640, 380, 80, 20, "Zoom All");
						buttonZoomAll->callback((Fl_Callback*)buttonZoomAllCallback, this);
						buttonZoomAll->deactivate();

						// No resizing
						o->resizable(NULL);

						o->end();
					}

					// The graph widget
					graph = new GraphWidget(255, 405, 540, 140);
					graph->callback((Fl_Callback*)graphCallback, this);
					curvePane->resizable(graph); // stretch the graph on resize

					// Camera buttons
					{ cameraPane = new Fl_Group(255, 550, 540, 20, "Camera");
						// Put camera label inside
						cameraPane->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
						cameraPane->labelfont(FL_HELVETICA_BOLD);

						// Prevent internal widgets from resizing when the group is resized.
						cameraPane->resizable(NULL);

						// Use Camera button
						checkboxUseCamera = new Fl_Check_Button(315, 550, 165, 20, "Look Through Camera");
						checkboxUseCamera->callback((Fl_Callback*)checkboxUseCameraCallback);

						// Plot Camera checkbox
						Fl_Button* buttonPlotCamera = new Fl_Button(485, 550, 120, 20, "Plot Keyframe");
						buttonPlotCamera->callback((Fl_Callback*)buttonPlotCameraCallback);

						// Clear Plot button
						Fl_Button* buttonClearPlot = new Fl_Button(610, 550, 120, 20, "Clear Keyframe");
						buttonClearPlot->callback((Fl_Callback*)buttonClearCameraCallback);
						
						// End this group
						cameraPane->end();
					}

					// Particle system buttons
					{ particlePane = new Fl_Group(255, 575, 540, 20, "Particle System");
						// Put particle system label inside
						particlePane->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
						particlePane->labelfont(FL_HELVETICA_BOLD);

						// Simulate button
						checkboxSimulate = new Fl_Check_Button(375, 575, 75, 20, "Simulate");
						checkboxSimulate->callback((Fl_Callback*)checkboxSimulateCallback);

						// Clear Particles button
						buttonClearParticles = new Fl_Button(455, 575, 50, 20, "Clear");
						buttonClearParticles->callback((Fl_Callback*)buttonClearParticlesCallback);

						// Particle "bake" indicator
						particleBakeIndicator = new IndicatorWindow(510, 575, 285, 20);
						// TODO: fix this:
						particleBakeIndicator->range(0, 20);
						particleBakeIndicator->deactivate();
						particlePane->resizable(particleBakeIndicator);

						// End this group
						particlePane->end();
					}

					// The playback controls
					{ Fl_Group* o = new Fl_Group(255, 600, 540, 20, "Playback");
						// Put particle system label inside
						o->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
						o->labelfont(FL_HELVETICA_BOLD);

						// Rewind button
						Fl_Button* rewind = new Fl_Button(335, 600, 20, 20, "@|<");
						rewind->labeltype(FL_SYMBOL_LABEL);
						rewind->callback((Fl_Callback*)buttonRewindCallback, this);

						// Play button
						buttonPlay = new Fl_Button(360, 600, 20, 20, "@>");
						buttonPlay->labeltype(FL_SYMBOL_LABEL);
						buttonPlay->callback((Fl_Callback*)buttonPlayCallback, this);
						buttonPlay->labelcolor(FL_GREEN);

						// Fast Forward button
						Fl_Button* fastForward = new Fl_Button(385, 600, 20, 20, "@>|");
						fastForward->labeltype(FL_SYMBOL_LABEL);
						fastForward->callback((Fl_Callback*)buttonFastForwardCallback, this);

						// Time slider
						sliderTime = new Fl_Value_Slider(455, 600, 340, 20, "Time:");
						sliderTime->type(FL_HORIZONTAL);
						sliderTime->align(FL_ALIGN_LEFT);
						sliderTime->callback((Fl_Callback*)sliderTimeCallback, this);
						sliderTime->bounds(0, 20);

						// Stretch the time slider on resize
						o->resizable(sliderTime);
						o->end();
					}
					curvePane->end();
				}
				w->resizable(m_modelerView);
				o->end();
				Fl_Group::current()->resizable(o);
			}
		}
		o->end();
	}
}