diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx index d718738f3fbd2a3e0232f70d8acfb3f463786aba..fc4548c5247c2f9cee7d20e734e805a0e939b207 100644 --- a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx +++ b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx @@ -34,10 +34,11 @@ ImageViewerManagerViewGUI m_UndisplayedLabel("- "),m_DiaporamaCurrentIndex(0) { - m_VisuView = VisuViewType::New(); - m_PreviewWidget = ImageWidgetType::New(); - m_pRenderingFuntion = StandardRenderingFunctionType::New(); - m_WidgetManagerList = WidgetManagerList::New(); + m_VisuView = VisuViewType::New(); + m_PreviewWidget = ImageWidgetType::New(); + m_pRenderingFuntion = StandardRenderingFunctionType::New(); + m_WidgetManagerList = WidgetManagerList::New(); + m_LinkWidgetManagerList = WidgetManagerList::New(); //Get an instance of the model m_ImageViewerManagerModel = ImageViewerManagerModel::GetInstance(); @@ -115,29 +116,38 @@ ImageViewerManagerViewGUI ::Initialize(const char * cfname) { //Initialise the boolean pair - PairType pair(false,false); //Not displayed , Packed View + PairType pair(false,false); //(Not displayed , Packed View) //Put a new WidgetManager in the list if(bSplitted->value() && !bPacked->value()) { - SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); + SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); + SplittedWidgetManagerType::Pointer linkwidgetManager = SplittedWidgetManagerType::New(); + m_WidgetManagerList->PushBack(widgetManager); + m_LinkWidgetManagerList->PushBack(linkwidgetManager); pair.second = true; } else { - PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); + PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); + PackedWidgetManagerType::Pointer linkwidgetManager = PackedWidgetManagerType::New(); m_WidgetManagerList->PushBack(widgetManager); + m_LinkWidgetManagerList->PushBack(linkwidgetManager); } //Put the status of the last added image m_DisplayStatusList.push_back(pair); + m_LinkedDisplayStatusList.push_back(false); // Call the Controller m_ImageViewerManagerController->OpenInputImage(cfname); //Update the Progress Bar this->UpdateDiaporamaProgressBar(); + + //Update the Link Setup + this->UpdateLinkSetupWindow(); } /** @@ -165,7 +175,7 @@ ImageViewerManagerViewGUI { //m_CurveWidget->ClearAllCurves();//hide(); m_WidgetManagerList->GetNthElement(selectedItem-1)->Refresh(); - this->Display(selectedItem); + this->Display(m_WidgetManagerList,selectedItem); } @@ -200,7 +210,9 @@ ImageViewerManagerViewGUI //Erase from the lists m_DisplayStatusList.erase( m_DisplayStatusList.begin()+(selectedItem-1)); + m_LinkedDisplayStatusList.erase( m_LinkedDisplayStatusList.begin()+(selectedItem-1)); m_WidgetManagerList->Erase(selectedItem-1); + m_LinkWidgetManagerList->Erase(selectedItem-1); } /** @@ -328,7 +340,7 @@ ImageViewerManagerViewGUI //New Display m_DisplayStatusList[selectedItem-1].first = true; this->UpdateImageListShowed(selectedItem, m_DisplayedLabel); - this->Display(selectedItem); + this->Display(m_WidgetManagerList,selectedItem); } else { @@ -343,7 +355,7 @@ ImageViewerManagerViewGUI */ void ImageViewerManagerViewGUI -::Display(unsigned int selectedItem) +::Display(WidgetManagerList::Pointer widgetList, unsigned int selectedItem) { //Get the view stored in the model CurvesWidgetType::Pointer curveWidget = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pCurveWidget; @@ -378,15 +390,24 @@ ImageViewerManagerViewGUI //Get the pixelView PixelDescriptionViewType::Pointer pixelView = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pPixelView; - //Edit the Widget Manager - m_WidgetManagerList->GetNthElement(selectedItem-1)->UnRegisterAll(); - m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterFullWidget(currentVisuView->GetFullWidget()); - m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterScrollWidget(currentVisuView->GetScrollWidget()); - m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterZoomWidget(currentVisuView->GetZoomWidget()); - m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterPixelInformationWidget(pixelView->GetPixelDescriptionWidget()); - m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterHistogramWidget(curveWidget); - m_WidgetManagerList->GetNthElement(selectedItem-1)->SetLabel(this->CutFileName(selectedItem-1)); - m_WidgetManagerList->GetNthElement(selectedItem-1)->Show(); +// //Edit the Widget Manager +// m_WidgetManagerList->GetNthElement(selectedItem-1)->UnRegisterAll(); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterFullWidget(currentVisuView->GetFullWidget()); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterScrollWidget(currentVisuView->GetScrollWidget()); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterZoomWidget(currentVisuView->GetZoomWidget()); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterPixelInformationWidget(pixelView->GetPixelDescriptionWidget()); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterHistogramWidget(curveWidget); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->SetLabel(this->CutFileName(selectedItem-1)); +// m_WidgetManagerList->GetNthElement(selectedItem-1)->Show(); + + //widgetList->GetNthElement(selectedItem-1)->UnRegisterAll(); + widgetList->GetNthElement(selectedItem-1)->RegisterFullWidget(currentVisuView->GetFullWidget()); + widgetList->GetNthElement(selectedItem-1)->RegisterScrollWidget(currentVisuView->GetScrollWidget()); + widgetList->GetNthElement(selectedItem-1)->RegisterZoomWidget(currentVisuView->GetZoomWidget()); + widgetList->GetNthElement(selectedItem-1)->RegisterPixelInformationWidget(pixelView->GetPixelDescriptionWidget()); + widgetList->GetNthElement(selectedItem-1)->RegisterHistogramWidget(curveWidget); + widgetList->GetNthElement(selectedItem-1)->SetLabel(this->CutFileName(selectedItem-1)); + widgetList->GetNthElement(selectedItem-1)->Show(); } /** @@ -401,25 +422,27 @@ ImageViewerManagerViewGUI // no image selected, return return; } + + SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); + m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); + m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager); //Update the view mode if(!m_DisplayStatusList[selectedItem-1].first) { - SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); - m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); - m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager); m_DisplayStatusList[selectedItem-1].second = true; } //If already displayed : update the view mode and display the new viewMode if(m_DisplayStatusList[selectedItem-1].first /*&& !m_DisplayStatusList[selectedItem-1].second*/ ) { - SplittedWidgetManagerType::Pointer widgetManager = SplittedWidgetManagerType::New(); - m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); - m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager); m_DisplayStatusList[selectedItem-1].second = true; - this->Display(selectedItem); + this->Display(m_WidgetManagerList, selectedItem); } + + //Update the list link + m_LinkWidgetManagerList->GetNthElement(selectedItem-1)->Hide(); + m_LinkWidgetManagerList->SetNthElement(selectedItem-1,widgetManager); } /** @@ -435,25 +458,28 @@ ImageViewerManagerViewGUI // no image selected, return return; } + + // + PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); + m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); + m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager); //Update the view mode if(!m_DisplayStatusList[selectedItem-1].first) { - PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); - m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); - m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager); m_DisplayStatusList[selectedItem-1].second = false; } //If already displayed : update the view mode and display the new viewMode if(m_DisplayStatusList[selectedItem-1].first /*&& m_DisplayStatusList[selectedItem-1].second*/ ) { - PackedWidgetManagerType::Pointer widgetManager = PackedWidgetManagerType::New(); - m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); - m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager); m_DisplayStatusList[selectedItem-1].second = false; - this->Display(selectedItem); + this->Display(m_WidgetManagerList, selectedItem); } + + //Update the link list + m_LinkWidgetManagerList->GetNthElement(selectedItem-1)->Hide(); + m_LinkWidgetManagerList->SetNthElement(selectedItem-1,widgetManager); } /** @@ -464,7 +490,6 @@ void ImageViewerManagerViewGUI ::UpdateImageListShowed(unsigned int selectedItem, std::string status) { - /* Update the ImageList using the status label "+" or "-" */ std::string fileName = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).fileName; int slashIndex = fileName.find_last_of("/",fileName.size()); @@ -486,25 +511,53 @@ ImageViewerManagerViewGUI m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); m_WidgetManagerList->GetNthElement(selectedItem-1)->UnRegisterAll(); } + /** * Hide all the widget opened */ void ImageViewerManagerViewGUI ::HideAll() +{ + this->CloseAllDisplayedImages(true); +} + +/** + * Close all the displayed images: + * showHideEvent : if true clear the showedlist else don't clear. + */ +void +ImageViewerManagerViewGUI +::CloseAllDisplayedImages(bool showHideEvent) { // Set the display Label to undislayed for(unsigned int i = 0; i<m_DisplayStatusList.size() ; i++) { if(m_DisplayStatusList[i].first) { - this->UpdateImageListShowed(i+1, m_UndisplayedLabel); - m_DisplayStatusList[i].first = false; + if(showHideEvent) + { + this->UpdateImageListShowed(i+1, m_UndisplayedLabel); + m_DisplayStatusList[i].first = false; + } m_WidgetManagerList->GetNthElement(i)->Hide(); m_WidgetManagerList->GetNthElement(i)->UnRegisterAll(); } } - } +} + +/** + * + */ +void +ImageViewerManagerViewGUI +::ShowTemporaryClosedDisplay() +{ + for(unsigned int i = 0; i<m_DisplayStatusList.size() ; i++) + if(m_DisplayStatusList[i].first) + this->Display(m_WidgetManagerList,i+1); +} + /** * Quit GUI @@ -798,10 +851,13 @@ ImageViewerManagerViewGUI return; } guiDiaporama->show(); - //guiDiaporama->set_modal(); guiDiaporamaProgressBar->minimum(1); guiDiaporamaProgressBar->maximum(static_cast<float>(guiImageList->size())); + //Close the showed image without clearing the ShowedList + this->CloseAllDisplayedImages(false); + + //Show the diaporama widget this->DisplayDiaporama(); UpdateDiaporamaProgressBar(); } @@ -869,7 +925,7 @@ ImageViewerManagerViewGUI PixelDescriptionViewType::Pointer pixelView = m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pPixelView; //Edit the Widget Manager - //m_WidgetManager->UnRegisterAll(); + m_WidgetManager->UnRegisterAll(); m_WidgetManager->RegisterFullWidget(currentVisuView->GetFullWidget()); m_WidgetManager->RegisterScrollWidget(currentVisuView->GetScrollWidget()); m_WidgetManager->RegisterZoomWidget(currentVisuView->GetZoomWidget()); @@ -921,6 +977,8 @@ ImageViewerManagerViewGUI { guiDiaporama->hide(); m_WidgetManager->Hide(); + m_WidgetManager->UnRegisterAll(); + this->ShowTemporaryClosedDisplay(); } /** @@ -940,6 +998,7 @@ ImageViewerManagerViewGUI guiLinkSetupWindow->show(); } + /** * */ @@ -952,41 +1011,82 @@ ImageViewerManagerViewGUI m_PossibleLinkList.clear(); m_AlreadyLinkList.clear(); m_AlreadyLinkOffsetList.clear(); - guiLinkChoice->clear(); - guiLinkList->clear(); - guiLinkList->value(0); - - //Fill the link choice - int sizeImageList = guiImageList->size(); - for (int i = 0 ; i < sizeImageList ; i++) - { - oss.str(""); - oss<<this->CutFileName(i); - guiLinkChoice->add(oss.str().c_str()); - } + guiLinkListLeft->clear(); + guiLinkListRight->clear(); + guiLinkListLeft->value(0); + guiLinkListRight->value(0); + //Fill the guiLinkList - for (int i = 0 ; i < sizeImageList ; i++) + + for (int i = 0 ; i < guiImageList->size() ; i++) { - if(strcmp(guiLinkChoice->value(),this->CutFileName(i)) != 0 ) - { - oss.str(""); - oss<<this->CutFileName(i); - guiLinkList->add(oss.str().c_str()); - } + oss.str(""); + oss<<this->CutFileName(i); + guiLinkListRight->add(oss.str().c_str()); + guiLinkListLeft->add(oss.str().c_str()); } guiLinkXOffset->value("0"); guiLinkYOffset->value("0"); - guiLinkChoice->redraw(); - guiLinkList->redraw(); + guiLinkListLeft->redraw(); + guiLinkListRight->redraw(); } +/** +* +*/ +void +ImageViewerManagerViewGUI +::LinkSetupSave() +{ + unsigned int leftChoice = guiLinkListLeft->value(); + unsigned int rightChoice = guiLinkListRight->value(); + + if(leftChoice == 0 || rightChoice == 0) + return; + else + { + //Call the controller + this->m_ImageViewerManagerController->Link(leftChoice, rightChoice); + + //Close the temporary Showed images + this->CloseAllDisplayedImages(false); + + //Diplay the Linked images + this->Display(m_LinkWidgetManagerList, leftChoice); + this->Display(m_LinkWidgetManagerList, rightChoice); + + //Add the linked to the list + m_LinkedDisplayStatusList[leftChoice] = true; + m_LinkedDisplayStatusList[rightChoice] = true; + } +} + +/** +* +*/ +void +ImageViewerManagerViewGUI +::LinkSetupOk() +{ + guiLinkSetupWindow->hide(); + + //Close the displays linked + for(unsigned int i = 0; i<m_LinkedDisplayStatusList.size() ; i++) + if(m_LinkedDisplayStatusList[i]) + m_LinkWidgetManagerList->GetNthElement(i)->Hide(); + + //Display temporary closed displays if any + this->ShowTemporaryClosedDisplay(); +} + + + /** * PrintSelf Method */ - void ImageViewerManagerViewGUI ::PrintSelf(std::ostream& os, itk::Indent indent) const diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.h b/ViewerManager/View/otbImageViewerManagerViewGUI.h index d921a4b944defb53759fd746b77639f4beb5ac6b..bdabd9edd2caaa7bb90f84e1d72cb8733ef19a62 100644 --- a/ViewerManager/View/otbImageViewerManagerViewGUI.h +++ b/ViewerManager/View/otbImageViewerManagerViewGUI.h @@ -109,7 +109,7 @@ public: /** vector to store the status of images : diplayed or not displayed*/ //---> Note : f the packed view is selected : 2nd boolean : false, Splitted view : 2nd boolean true; typedef std::pair<bool, bool> PairType; - typedef std::vector<PairType> BoolVector; + typedef std::vector<PairType> BoolVector; /** list in order to store the diplay manager*/ typedef WidgetManager WidgetManagerType; @@ -133,22 +133,19 @@ public: // Visu itkGetMacro(VisuView,VisuViewPointerType); - itkGetMacro(PreviewWidget,ImageWidgetPointerType ); - /// Show() + // Show() virtual void Show(); - // Update the display + // Update the display virtual void ImageViewerManagerNotify(); - // - virtual void OpenImage(); - // virtual void OpenImage(const char * inputFileName); protected: + virtual void OpenImage(); virtual void Initialize(const char * cfname); virtual void CloseImage(); virtual void ViewerSetup(); @@ -157,25 +154,27 @@ protected: /* virtual void LinkSetupRemove(); */ /* virtual void LinkSetupClear(); */ - /* virtual void LinkSetupOk(); */ - /* virtual void LinkSetupSave(); */ + //virtual void LinkSetupOk(); + virtual void LinkSetupSave(); virtual void AddImageListName(); virtual void Quit(); virtual void SelectAction(); virtual double UpdatePreviewWidgetIsotropicZoom(SizeType size); virtual void ShowHide(); + virtual void CloseAllDisplayedImages(bool showHideEvent); + virtual void ShowTemporaryClosedDisplay(); virtual void HideAll(); - virtual void Display(unsigned int selectedItem); + virtual void Display(WidgetManagerList::Pointer widgetList, unsigned int selectedItem); virtual void Undisplay(unsigned int selectedItem); virtual void UpdateImageListShowed(unsigned int selectedItem, std::string status); virtual void GrayScaleSet(); virtual void RGBSet(); virtual void ComplexSet(); - virtual void Diaporama(); - virtual void DisplayDiaporama(); - virtual void DiaporamaNext(); - virtual void DiaporamaPrevious(); - virtual void DiaporamaQuit(); + virtual void Diaporama(); + virtual void DisplayDiaporama(); + virtual void DiaporamaNext(); + virtual void DiaporamaPrevious(); + virtual void DiaporamaQuit(); virtual void UpdateInformation(unsigned int selectedItem); virtual void UpdateViewerSetupWindow(unsigned int selectedItem); @@ -188,6 +187,7 @@ protected: virtual void LinkSetup(); virtual void UpdateLinkSetupWindow(); + virtual void LinkSetupOk(); /* virtual void UpdatePreviewWindow(unsigned int selectedItem); */ @@ -210,12 +210,15 @@ private: // BoolVector m_DisplayStatusList; + std::vector<bool> m_LinkedDisplayStatusList; + std::string m_TemplateViewerName; std::string m_DisplayedLabel; std::string m_UndisplayedLabel ; //Widget Manager WidgetManagerList::Pointer m_WidgetManagerList; + WidgetManagerList::Pointer m_LinkWidgetManagerList; //SlideShow widget Manager PackedWidgetManagerType::Pointer m_WidgetManager; diff --git a/ViewerManager/View/otbImageViewerManagerViewGroup.fl b/ViewerManager/View/otbImageViewerManagerViewGroup.fl index aa9aba6f03d21f5fd5f402451fb0f772690bb165..f4ad74976fa718664220f2ee8ccc112bb87e6e7e 100644 --- a/ViewerManager/View/otbImageViewerManagerViewGroup.fl +++ b/ViewerManager/View/otbImageViewerManagerViewGroup.fl @@ -55,7 +55,7 @@ class ImageViewerManagerViewGroup {open //if(bPacked->value()) // bSplitted->deactivate(); //else -// bSplitted->value(1);} selected +// bSplitted->value(1);} tooltip {Toggle Splitted mode} xywh {275 237 105 15} type Radio down_box ROUND_DOWN_BOX labelcolor 187 deactivate } } @@ -166,50 +166,49 @@ class ImageViewerManagerViewGroup {open } } Fl_Window guiLinkSetupWindow { - label {Link setup} - xywh {888 755 440 220} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 hide + label {Link Images} open + xywh {738 336 560 220} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible } { - Fl_Input_Choice guiLinkChoice { - label {Link to viewer: } open - tooltip {Select the viewer to link with} xywh {115 26 185 24} box EMBOSSED_BOX color 54 selection_color 55 labelcolor 187 - } {} Fl_Input guiLinkXOffset { label {X offset} - tooltip {Set the x offset of the link} xywh {379 16 35 23} box EMBOSSED_BOX selection_color 55 labelcolor 186 textcolor 187 + tooltip {Set the x offset of the link} xywh {210 127 35 23} box EMBOSSED_BOX selection_color 55 labelcolor 186 textcolor 187 } Fl_Input guiLinkYOffset { label {Y offset} - tooltip {Set the Y offset of the link} xywh {379 41 35 23} box EMBOSSED_BOX selection_color 55 labelcolor 186 textcolor 187 + tooltip {Set the Y offset of the link} xywh {320 127 35 23} box EMBOSSED_BOX selection_color 55 labelcolor 186 textcolor 187 } Fl_Button guiSaveLink { label Apply callback {LinkSetupSave();} - tooltip {Save the current link} xywh {15 175 90 30} box ROUND_UP_BOX color 23 selection_color 23 labelcolor 186 + tooltip {Save the current link} xywh {84 175 90 30} box ROUND_UP_BOX color 23 selection_color 23 labelcolor 186 } - Fl_Browser guiLinkList { - label {Existing links} - tooltip {List of image viewers already linked with the selected image viewer} xywh {15 88 405 75} type Hold box EMBOSSED_BOX color 54 selection_color 20 labelcolor 186 align 1 textcolor 187 + Fl_Browser guiLinkListLeft { + label {First Image} + tooltip {List of image viewers already linked with the selected image viewer} xywh {10 25 235 75} type Hold box EMBOSSED_BOX color 54 selection_color 20 labelcolor 186 align 1 textcolor 187 } Fl_Button guiLinkRemove { label Remove callback {LinkSetupRemove();} - tooltip {Remove the selected link} xywh {121 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 + tooltip {Remove the selected link} xywh {190 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 } Fl_Button guiLinkClear { label Clear callback {LinkSetupClear();} - tooltip {Clear all links for the selected image viewer} xywh {225 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 + tooltip {Clear all links for the selected image viewer} xywh {294 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 } Fl_Return_Button guiLinkOk { label Quit - callback {LinkSetupOk();} - tooltip {Leave the link set up interface} xywh {331 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff0d color 23 selection_color 23 labelcolor 186 - code0 {guiLinkSetupWindow->hide();} + callback {LinkSetupOk();} selected + tooltip {Leave the link set up interface} xywh {400 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff0d color 23 selection_color 23 labelcolor 186 + } + Fl_Browser guiLinkListRight { + label SecondImage + tooltip {List of image viewers already linked with the selected image viewer} xywh {307 25 235 75} type Hold box EMBOSSED_BOX color 54 selection_color 20 labelcolor 186 align 1 textcolor 187 } } Fl_Window guiDiaporama { label Slideshow - xywh {652 599 390 90} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible + xywh {652 599 390 90} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 hide } { Fl_Progress guiDiaporamaProgressBar { label Progress