ENH: Added popup menu for removing a property. Some style changes
This commit is contained in:
parent
8ef02a496a
commit
72377752f8
|
@ -7,10 +7,12 @@
|
||||||
#include <Fl/Fl_Tile.H>
|
#include <Fl/Fl_Tile.H>
|
||||||
#include <Fl/fl_ask.H>
|
#include <Fl/fl_ask.H>
|
||||||
#include <Fl/fl_file_chooser.H>
|
#include <Fl/fl_file_chooser.H>
|
||||||
|
#include <Fl/Fl_Color_Chooser.H>
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
namespace fltk {
|
namespace fltk {
|
||||||
|
|
||||||
|
|
||||||
PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -18,6 +20,7 @@ PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
||||||
m_ItemValue = new ItemValue;
|
m_ItemValue = new ItemValue;
|
||||||
|
|
||||||
|
|
||||||
|
const unsigned int fontsize = 11;
|
||||||
const unsigned int nameWidth = 200;
|
const unsigned int nameWidth = 200;
|
||||||
const unsigned int textWidth = 1400;
|
const unsigned int textWidth = 1400;
|
||||||
const unsigned int checkWidth = textWidth;
|
const unsigned int checkWidth = textWidth;
|
||||||
|
@ -39,44 +42,50 @@ PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
||||||
m_PropertyItem->m_propName.c_str() );
|
m_PropertyItem->m_propName.c_str() );
|
||||||
|
|
||||||
m_NameButton->align( FL_ALIGN_CLIP | FL_ALIGN_LEFT | FL_ALIGN_INSIDE );
|
m_NameButton->align( FL_ALIGN_CLIP | FL_ALIGN_LEFT | FL_ALIGN_INSIDE );
|
||||||
m_NameButton->labelsize(11);
|
m_NameButton->labelsize( fontsize );
|
||||||
m_NameButton->box( FL_DOWN_BOX );
|
m_NameButton->box( FL_DOWN_BOX );
|
||||||
m_NameButton->SetHelpText( m_PropertyItem->m_HelpString.c_str() );
|
m_NameButton->SetHelpText( m_PropertyItem->m_HelpString.c_str() );
|
||||||
m_NameButton->size( secondColumn, rowHeight );
|
m_NameButton->size( secondColumn, rowHeight );
|
||||||
|
|
||||||
switch( m_PropertyItem->m_nItemType )
|
switch( m_PropertyItem->m_nItemType )
|
||||||
{
|
{
|
||||||
case 1:
|
case PropertyList::COMBO:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PropertyList::EDIT:
|
||||||
{
|
{
|
||||||
|
|
||||||
Fl_Input * input = new
|
Fl_Input * input = new
|
||||||
Fl_Input( secondColumn, 0, textWidth ,rowHeight ,"");
|
Fl_Input( secondColumn, 0, textWidth ,rowHeight ,"");
|
||||||
input->value( m_PropertyItem->m_curValue.c_str() );
|
input->value( m_PropertyItem->m_curValue.c_str() );
|
||||||
input->textsize(11);
|
input->textsize( fontsize );
|
||||||
input->callback( InputTextCallback, (void *)m_PropertyItem );
|
input->callback( InputTextCallback, (void *)m_PropertyItem );
|
||||||
input->when( FL_WHEN_CHANGED );
|
input->when( FL_WHEN_CHANGED );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2:
|
case PropertyList::COLOR:
|
||||||
{
|
{
|
||||||
|
Fl_Button * colorButton = new
|
||||||
|
Fl_Button( secondColumn, 0, textWidth ,rowHeight ,"");
|
||||||
|
colorButton->labelsize( fontsize );
|
||||||
|
//colorButton->color();
|
||||||
|
colorButton->callback( ColorSelectionCallback, (void *)m_PropertyItem );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case PropertyList::FILE:
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 4:
|
|
||||||
{
|
{
|
||||||
|
|
||||||
Fl_Button * browseButton = new
|
Fl_Button * browseButton = new
|
||||||
Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
|
Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
|
||||||
browseButton->labelsize(11);
|
browseButton->labelsize( fontsize );
|
||||||
|
|
||||||
Fl_Input * input = new
|
Fl_Input * input = new
|
||||||
Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
|
Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
|
||||||
input->value( m_PropertyItem->m_curValue.c_str() );
|
input->value( m_PropertyItem->m_curValue.c_str() );
|
||||||
input->textsize(11);
|
input->textsize( fontsize );
|
||||||
|
|
||||||
m_ItemValue->m_InputText = input;
|
m_ItemValue->m_InputText = input;
|
||||||
m_ItemValue->m_PropertyItem = m_PropertyItem;
|
m_ItemValue->m_PropertyItem = m_PropertyItem;
|
||||||
|
@ -87,7 +96,7 @@ PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 5:
|
case PropertyList::CHECKBOX:
|
||||||
{
|
{
|
||||||
Fl_Button * button = new
|
Fl_Button * button = new
|
||||||
Fl_Button( secondColumn, 0, checkWidth ,rowHeight ,"");
|
Fl_Button( secondColumn, 0, checkWidth ,rowHeight ,"");
|
||||||
|
@ -105,26 +114,26 @@ PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
||||||
button->value(0);
|
button->value(0);
|
||||||
}
|
}
|
||||||
button->type( FL_TOGGLE_BUTTON );
|
button->type( FL_TOGGLE_BUTTON );
|
||||||
button->labelsize(11);
|
button->labelsize( fontsize );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6:
|
case PropertyList::PATH:
|
||||||
{
|
{
|
||||||
|
|
||||||
Fl_Button * browseButton = new
|
Fl_Button * browseButton = new
|
||||||
Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
|
Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
|
||||||
browseButton->labelsize(11);
|
browseButton->labelsize( fontsize );
|
||||||
|
|
||||||
Fl_Input * input = new
|
Fl_Input * input = new
|
||||||
Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
|
Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
|
||||||
input->value( m_PropertyItem->m_curValue.c_str() );
|
input->value( m_PropertyItem->m_curValue.c_str() );
|
||||||
input->textsize(11);
|
input->textsize( fontsize );
|
||||||
|
|
||||||
m_ItemValue->m_InputText = input;
|
m_ItemValue->m_InputText = input;
|
||||||
m_ItemValue->m_PropertyItem = m_PropertyItem;
|
m_ItemValue->m_PropertyItem = m_PropertyItem;
|
||||||
|
|
||||||
browseButton->callback( BrowsePathCallback, (void *)m_ItemValue );
|
browseButton->callback( BrowsePathCallback, (void *)m_ItemValue );
|
||||||
input->callback( InputTextCallback, m_PropertyItem );
|
input->callback( InputTextCallback, (void *)m_PropertyItem );
|
||||||
input->when( FL_WHEN_CHANGED );
|
input->when( FL_WHEN_CHANGED );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -138,7 +147,6 @@ PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
|
||||||
|
|
||||||
end(); // Close the inclusion of widgets in the Tile object
|
end(); // Close the inclusion of widgets in the Tile object
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,6 +199,38 @@ InputTextCallback( Fl_Widget * widget, void * data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PropertyItemRow::
|
||||||
|
ColorSelectionCallback( Fl_Widget * widget, void * data)
|
||||||
|
{
|
||||||
|
Fl_Button * colorButton = (Fl_Button *)widget;
|
||||||
|
PropertyItem * propertyItem = (PropertyItem *)data;
|
||||||
|
|
||||||
|
static Fl_Color colorIndex = FL_FREE_COLOR;
|
||||||
|
|
||||||
|
unsigned char red = 0;
|
||||||
|
unsigned char blue = 0;
|
||||||
|
unsigned char green = 0;
|
||||||
|
fl_color_chooser("Please pick a color",red,green,blue);
|
||||||
|
char buffer[300];
|
||||||
|
sprintf( buffer,"RGB(%d,%d,%d)", red, green, blue );
|
||||||
|
propertyItem->m_curValue = buffer;
|
||||||
|
Fl::set_color( colorIndex, red, green, blue );
|
||||||
|
colorButton->color( colorIndex );
|
||||||
|
colorIndex = (Fl_Color)( colorIndex + 1 );
|
||||||
|
if( colorIndex == FL_FREE_COLOR + FL_NUM_FREE_COLOR )
|
||||||
|
{
|
||||||
|
fl_alert("Maximum number of free colors used, recycling...");
|
||||||
|
colorIndex = FL_FREE_COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
colorButton->redraw();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -213,13 +253,14 @@ BrowsePathCallback( Fl_Widget * widget, void * data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
PropertyItemRow::
|
PropertyItemRow::
|
||||||
handle(int event)
|
handle(int event)
|
||||||
{
|
{
|
||||||
|
|
||||||
int status = Fl_Tile::handle( event );
|
int status = Fl_Tile::handle( event );
|
||||||
|
|
||||||
switch( event )
|
switch( event )
|
||||||
{
|
{
|
||||||
case FL_LEAVE:
|
case FL_LEAVE:
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <Fl/Fl_Tile.H>
|
#include <Fl/Fl_Tile.H>
|
||||||
#include <Fl/Fl_Input.H>
|
#include <Fl/Fl_Input.H>
|
||||||
|
|
||||||
|
|
||||||
namespace fltk {
|
namespace fltk {
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,9 +43,11 @@ class PropertyItemRow : public Fl_Tile
|
||||||
// manages the popup help blob
|
// manages the popup help blob
|
||||||
PropertyNameButtonWithHelp * m_NameButton;
|
PropertyNameButtonWithHelp * m_NameButton;
|
||||||
|
|
||||||
|
|
||||||
static void CheckButtonCallback( Fl_Widget *, void *);
|
static void CheckButtonCallback( Fl_Widget *, void *);
|
||||||
static void InputTextCallback( Fl_Widget *, void *);
|
static void InputTextCallback( Fl_Widget *, void *);
|
||||||
static void BrowsePathCallback( Fl_Widget *, void *);
|
static void BrowsePathCallback( Fl_Widget *, void *);
|
||||||
|
static void ColorSelectionCallback( Fl_Widget * widget, void * data);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -18,10 +18,10 @@ namespace fltk {
|
||||||
|
|
||||||
PropertyList::PropertyList()
|
PropertyList::PropertyList()
|
||||||
{
|
{
|
||||||
m_Dirty = false;
|
|
||||||
m_curSel = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PropertyList::~PropertyList()
|
PropertyList::~PropertyList()
|
||||||
{
|
{
|
||||||
for(std::set<PropertyItem*>::iterator i = m_PropertyItems.begin();
|
for(std::set<PropertyItem*>::iterator i = m_PropertyItems.begin();
|
||||||
|
@ -34,7 +34,7 @@ PropertyList::~PropertyList()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int PropertyList::AddItem(string txt)
|
int PropertyList::AddItem( std::string txt)
|
||||||
{
|
{
|
||||||
int nIndex =0;// = AddString(txt);
|
int nIndex =0;// = AddString(txt);
|
||||||
return nIndex;
|
return nIndex;
|
||||||
|
@ -71,7 +71,6 @@ int PropertyList::AddProperty(const char* name,
|
||||||
{
|
{
|
||||||
pItem->m_curValue = value;
|
pItem->m_curValue = value;
|
||||||
pItem->m_HelpString = helpString;
|
pItem->m_HelpString = helpString;
|
||||||
m_Dirty = true;
|
|
||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
|
@ -88,74 +87,6 @@ int PropertyList::AddProperty(const char* name,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void PropertyList::OnButton()
|
|
||||||
{
|
|
||||||
PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(m_curSel);
|
|
||||||
|
|
||||||
//display the appropriate common dialog depending on what type
|
|
||||||
//of chooser is associated with the property
|
|
||||||
if (pItem->m_nItemType == PropertyList::COLOR)
|
|
||||||
{
|
|
||||||
unsigned char red = 0;
|
|
||||||
unsigned char blue = 0;
|
|
||||||
unsigned char green = 0;
|
|
||||||
fl_color_chooser("Please pick a color",red,green,blue);
|
|
||||||
char buffer[300];
|
|
||||||
sprintf(buffer,"RGB(%d,%d,%d)",red,green,blue);
|
|
||||||
pItem->m_curValue = buffer;
|
|
||||||
m_Dirty = true;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
else if (pItem->m_nItemType == PropertyList::FILE)
|
|
||||||
{
|
|
||||||
string currPath = pItem->m_curValue;
|
|
||||||
|
|
||||||
const char * SelectedFile
|
|
||||||
= fl_file_chooser("Choose a file",
|
|
||||||
"*",currPath.c_str() );
|
|
||||||
|
|
||||||
if( SelectedFile )
|
|
||||||
{
|
|
||||||
pItem->m_curValue = SelectedFile;
|
|
||||||
m_Dirty = true;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (pItem->m_nItemType == PropertyList::PATH)
|
|
||||||
{
|
|
||||||
string currPath = pItem->m_curValue;
|
|
||||||
string initialDir = currPath;
|
|
||||||
|
|
||||||
const char * SelectedFile
|
|
||||||
= fl_file_chooser("Choose a directory",
|
|
||||||
"*/",initialDir.c_str() );
|
|
||||||
|
|
||||||
if( SelectedFile && filename_isdir( SelectedFile ) )
|
|
||||||
{
|
|
||||||
pItem->m_curValue = SelectedFile;
|
|
||||||
m_Dirty = true;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (pItem->m_nItemType == PropertyList::FONT)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void PropertyList::OnHelp()
|
|
||||||
{
|
|
||||||
if(m_curSel == -1 || this->GetCount() <= 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(m_curSel);
|
|
||||||
fl_message(pItem->m_HelpString.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PropertyList::RemoveAll()
|
void PropertyList::RemoveAll()
|
||||||
{
|
{
|
||||||
int c = this->GetCount();
|
int c = this->GetCount();
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
|
|
||||||
namespace fltk {
|
namespace fltk {
|
||||||
|
|
||||||
using std::string;
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//PropertyList Items
|
//PropertyList Items
|
||||||
|
@ -15,16 +14,18 @@ class PropertyItem
|
||||||
{
|
{
|
||||||
// Attributes
|
// Attributes
|
||||||
public:
|
public:
|
||||||
string m_HelpString;
|
std::string m_HelpString;
|
||||||
string m_propName;
|
std::string m_propName;
|
||||||
string m_curValue;
|
std::string m_curValue;
|
||||||
int m_nItemType;
|
int m_nItemType;
|
||||||
string m_cmbItems;
|
std::string m_cmbItems;
|
||||||
bool m_Removed;
|
bool m_Removed;
|
||||||
public:
|
public:
|
||||||
PropertyItem(string propName, string curValue,
|
PropertyItem( std::string propName,
|
||||||
string helpString,
|
std::string curValue,
|
||||||
int nItemType, string cmbItems)
|
std::string helpString,
|
||||||
|
int nItemType,
|
||||||
|
std::string cmbItems )
|
||||||
{
|
{
|
||||||
m_HelpString = helpString;
|
m_HelpString = helpString;
|
||||||
m_Removed = false;
|
m_Removed = false;
|
||||||
|
@ -59,7 +60,7 @@ public:
|
||||||
|
|
||||||
// Operations
|
// Operations
|
||||||
public:
|
public:
|
||||||
int AddItem(string txt);
|
int AddItem( std::string txt );
|
||||||
int AddProperty(const char* name,
|
int AddProperty(const char* name,
|
||||||
const char* value,
|
const char* value,
|
||||||
const char* helpString,
|
const char* helpString,
|
||||||
|
@ -88,17 +89,11 @@ public:
|
||||||
public:
|
public:
|
||||||
virtual ~PropertyList();
|
virtual ~PropertyList();
|
||||||
|
|
||||||
// Generated message map functions
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
int AddPropItem(PropertyItem* pItem);
|
int AddPropItem(PropertyItem* pItem);
|
||||||
|
|
||||||
// CComboBox m_cmbBox;
|
/*
|
||||||
// CEdit m_editBox;
|
|
||||||
// CButton m_btnCtrl;
|
|
||||||
// CButton m_CheckBoxControl;
|
|
||||||
|
|
||||||
|
|
||||||
bool m_Dirty;
|
bool m_Dirty;
|
||||||
int m_curSel;
|
int m_curSel;
|
||||||
int m_prevSel;
|
int m_prevSel;
|
||||||
|
@ -107,6 +102,7 @@ protected:
|
||||||
int m_nDivBtm;
|
int m_nDivBtm;
|
||||||
int m_nOldDivX;
|
int m_nOldDivX;
|
||||||
int m_nLastBox;
|
int m_nLastBox;
|
||||||
|
*/
|
||||||
|
|
||||||
std::set<PropertyItem*> m_PropertyItems;
|
std::set<PropertyItem*> m_PropertyItems;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
#include <FLTKPropertyNameButtonWithHelp.h>
|
#include <FLTKPropertyNameButtonWithHelp.h>
|
||||||
#include <Fl/Fl.H>
|
#include <Fl/Fl.H>
|
||||||
|
#include <Fl/fl_ask.H>
|
||||||
|
#include <Fl/Fl_Menu_Button.H>
|
||||||
|
#include "../cmCacheManager.h"
|
||||||
|
|
||||||
|
|
||||||
namespace fltk {
|
namespace fltk {
|
||||||
|
|
||||||
|
@ -72,6 +76,8 @@ PropertyNameButtonWithHelp::
|
||||||
handle( int event )
|
handle( int event )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
static bool helpBlobVisible = false;
|
||||||
|
|
||||||
const float delayForShowingHelpBlob = 1.0; // seconds
|
const float delayForShowingHelpBlob = 1.0; // seconds
|
||||||
|
|
||||||
const int maxWidth = 300;
|
const int maxWidth = 300;
|
||||||
|
@ -96,7 +102,7 @@ handle( int event )
|
||||||
switch( event )
|
switch( event )
|
||||||
{
|
{
|
||||||
case FL_ENTER:
|
case FL_ENTER:
|
||||||
{
|
{
|
||||||
lastMousePositionX = Fl::event_x();
|
lastMousePositionX = Fl::event_x();
|
||||||
lastMousePositionY = Fl::event_y();
|
lastMousePositionY = Fl::event_y();
|
||||||
const float factor = helpText->labelsize() * 0.5;
|
const float factor = helpText->labelsize() * 0.5;
|
||||||
|
@ -117,15 +123,33 @@ handle( int event )
|
||||||
helpText->label( m_HelpText.c_str() );
|
helpText->label( m_HelpText.c_str() );
|
||||||
Fl_Widget * parent = this->parent();
|
Fl_Widget * parent = this->parent();
|
||||||
Fl::add_timeout( delayForShowingHelpBlob, ShowHelpBlobCallback, (void *)parent );
|
Fl::add_timeout( delayForShowingHelpBlob, ShowHelpBlobCallback, (void *)parent );
|
||||||
|
helpBlobVisible = true;
|
||||||
eventManaged = 0;
|
eventManaged = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FL_LEAVE:
|
case FL_LEAVE:
|
||||||
helpBlob->hide();
|
{
|
||||||
|
if( helpBlobVisible )
|
||||||
|
{
|
||||||
|
helpBlobVisible = false;
|
||||||
|
helpBlob->hide();
|
||||||
|
}
|
||||||
eventManaged = 0;
|
eventManaged = 0;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case FL_MOVE:
|
case FL_MOVE:
|
||||||
helpBlob->hide();
|
if( helpBlobVisible )
|
||||||
|
{
|
||||||
|
helpBlobVisible = false;
|
||||||
|
helpBlob->hide();
|
||||||
|
}
|
||||||
|
eventManaged = 0;
|
||||||
|
break;
|
||||||
|
case FL_PUSH:
|
||||||
|
if( Fl::event_button() == FL_RIGHT_MOUSE )
|
||||||
|
{
|
||||||
|
PopupMenu();
|
||||||
|
}
|
||||||
eventManaged = 0;
|
eventManaged = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -156,5 +180,53 @@ ShowHelpBlobCallback( void * data )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
// This popup menu is displayed when the
|
||||||
|
// right mouse button is pressed
|
||||||
|
void
|
||||||
|
PropertyNameButtonWithHelp::
|
||||||
|
PopupMenu(void)
|
||||||
|
{
|
||||||
|
static Fl_Menu_Button * popupMenu = 0;
|
||||||
|
if( !popupMenu )
|
||||||
|
{
|
||||||
|
popupMenu = new Fl_Menu_Button(0,0,100,200);
|
||||||
|
}
|
||||||
|
|
||||||
|
popupMenu->type( Fl_Menu_Button::POPUP3 );
|
||||||
|
popupMenu->add("Remove|Properties...");
|
||||||
|
popupMenu->popup();
|
||||||
|
|
||||||
|
switch( popupMenu->value() )
|
||||||
|
{
|
||||||
|
case 0: // Remove
|
||||||
|
{
|
||||||
|
const char * propertyName = label();
|
||||||
|
int answer = fl_ask( "Do you want to remove property %s", propertyName );
|
||||||
|
if( answer == 1 )
|
||||||
|
{
|
||||||
|
// Remove the entry from the cache
|
||||||
|
cmCacheManager::GetInstance()->RemoveCacheEntry( propertyName );
|
||||||
|
// Get the parent: Fl_Tile that manages the whole row in the GUI
|
||||||
|
Fl_Group * parentGroup = (Fl_Group *) parent();
|
||||||
|
// Get the grandParent: Fl_Pack with the property list
|
||||||
|
Fl_Group * grandParentGroup = (Fl_Group *) parentGroup->parent();
|
||||||
|
// Remove the row from the list
|
||||||
|
grandParentGroup->remove( *parentGroup );
|
||||||
|
// Destroy the row
|
||||||
|
delete parentGroup; // Patricide... ?
|
||||||
|
// Redraw the list
|
||||||
|
grandParentGroup->redraw();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: // Properties
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace fltk
|
} // end namespace fltk
|
||||||
|
|
|
@ -28,9 +28,11 @@ class PropertyNameButtonWithHelp : public Fl_Button
|
||||||
|
|
||||||
static void ShowHelpBlobCallback( void * );
|
static void ShowHelpBlobCallback( void * );
|
||||||
|
|
||||||
|
void PopupMenu( void );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
string m_HelpText;
|
std::string m_HelpText;
|
||||||
|
|
||||||
// Class variables
|
// Class variables
|
||||||
static Fl_Window * helpBlob;
|
static Fl_Window * helpBlob;
|
||||||
|
|
Loading…
Reference in New Issue