void ResourceWindow::treeCallBack( Fl_Widget* widget, void* data ) { //LOG("Tree call back...."); Fl_Tree *tree = (Fl_Tree*)widget; Fl_Tree_Item *item = (Fl_Tree_Item*)tree->callback_item(); // get selected item ResourceWindow* window = (ResourceWindow*)data; if (tree->callback_reason() == FL_TREE_REASON_SELECTED) { std::stringstream strstr; strstr << window->getNameFromItem(item); long specialNameIndex = (long) item->user_data(); if (specialNameIndex == 0) // assume any item with a special name doesn't need an additional label strstr << "/" << item->label(); SBSelectionManager::getSelectionManager()->select(strstr.str()); } if (tree->callback_reason() == FL_TREE_REASON_DESELECTED) { std::stringstream strstr; strstr << window->getNameFromItem(item) << "/" << item->label(); //SBSelectionManager::getSelectionManager()->select(""); } }
void frmPrjTree::tree_event(Fl_Widget* w, void* v) { Fl_Tree *tree = static_cast<Fl_Tree*>(w); Fl_Tree_Item *item = tree->callback_item(); // the item changed (can be NULL if more than one item was changed!) switch ( tree->callback_reason() ) { // reason callback was invoked case FL_TREE_REASON_OPENED: printf("..item was opened..\n"); break; case FL_TREE_REASON_CLOSED: printf("..item was closed..\n"); break; case FL_TREE_REASON_SELECTED: frmmain->eventball.lastev=Q_DEL; frmmain->ehq_scene.top().Handle(&frmmain->eventball); frmmain->ehq_scene.top().clear(); printf("..item was selected..\n"); if(std::string(item->label()) == "View") frmviewctrl->select(true); else if(std::string(item->label()) == "Surface") frmsurfctrl->select(true); else if(std::string(item->label()) == "SFS Builder"){ // select ui panel frmimageplane->select(true); // add event handler to the scene queue frmmain->ehq_scene.top().ins_top(&frmmain->dv->imageplane->eh); frmmain->eventball.lastev=Q_ADD; frmmain->dv->imageplane->eh.Handle(&frmmain->eventball); } else if(std::string(item->label()) == "Matting"){ frmmatting->select(true); frmmain->ehq_scene.top().ins_top(&frmmain->dv->matting->eh); frmmain->eventball.lastev=Q_ADD; frmmain->dv->matting->eh.Handle(&frmmain->eventball); } break; //case FL_TREE_REASON_RESELECTED: // printf("..item was reselected (double-clicked, etc)..\n"); // break; case FL_TREE_REASON_DESELECTED: if(std::string(item->label()) == "View") frmviewctrl->select(false); else if(std::string(item->label()) == "Surface") frmsurfctrl->select(false); else if(std::string(item->label()) == "SFS Builder") frmimageplane->select(false); else if(std::string(item->label()) == "Matting") frmmatting->select(false); printf("..item was deselected..\n"); break; } }
void init_appendai_list() { std::shared_ptr<AppendAIPatch> aip = std::dynamic_pointer_cast<AppendAIPatch>(mods->get("aip")); Fl_Tree* tree = new Fl_Tree(5, 70+40, 254, 70, "Hybrid Enemies Mod"); if(!aip->valid()) { tree->deactivate(); return; } Fl_Tree_Item* first = tree->first(); first->label("Enemy AI"); AppendAIPatch::entity_storage appended_ais = aip->appended_ai(); int idx = 0; for(unsigned ai : appended_ais) { first->add(Fl_Tree_Prefs(), AppendAIPatch::FriendlyName(ai).c_str())->user_data(new int(idx)); idx++; } new AddAIButton(150, 145+40, 35, 20, "Add"); new RemoveAIButton(190, 145+40, 70, 20, "Remove"); appended_ai_tree = tree; }
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(); } }