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; }
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(); } }