55 #include <sys/types.h> 65 #include "rnr/rnrconfig.h" 94 void *WinButton::getCurrentImageWidget()
102 return getActiveImageWidget();
106 return getNormalImageWidget();
110 string WinButton::getCurrentLabel()
118 return m_strTagActive;
122 return m_strTagNormal;
126 string WinButton::getCurrentToolTip()
133 if( getActiveImageWidget() != NULL )
135 return m_strToolTipActive;
139 if( !m_strTagActive.empty() )
141 return m_strToolTipActive;
148 return m_strToolTipNormal;
156 WinButtonMenu::~WinButtonMenu()
158 MapBttns_T::iterator iter;
160 for(iter=m_mapButtons.begin(); iter!=m_mapButtons.end(); ++iter)
164 m_mapButtons.clear();
167 void WinButtonMenu::bind(
Win *pWin)
169 MapBttns_T::iterator iter;
174 LOGERROR(
"Binding window is NULL.");
187 for(iter=m_mapButtons.begin(); iter!=m_mapButtons.end(); ++iter)
189 pButton = iter->second;
194 m_pWin->addImageButton(pButton->
m_nEvent,
201 m_pWin->addLabelButton(pButton->
m_nEvent,
212 resetAllButtonStates();
215 m_pWin->registerButtonClickCallback(WinButtonMenu::onMenuButtonClick,
this);
218 void WinButtonMenu::unbind()
222 m_pWin->unregisterButtonClickCallback();
223 m_pWin->removeAllButtons();
225 resetAllButtonStates();
229 void WinButtonMenu::setButtonStateList(
const string &strEvent, ...)
235 MapBttns_T::iterator pos;
237 LOGDIAG3(
"'%s' bulk menu state changes.", strEvent.c_str());
239 va_start(ap, strEvent);
244 for(i=0; i<m_mapButtons.size(); ++i)
246 nEvent = va_arg(ap,
int);
256 if( (pos = m_mapButtons.find(nEvent)) != m_mapButtons.end() )
258 changeButtonState(pos->second, eNewState);
265 void WinButtonMenu::resetAllButtonStates()
267 MapBttns_T::iterator iter;
269 for(iter=m_mapButtons.begin(); iter!=m_mapButtons.end(); ++iter)
271 changeButtonState(iter->second, iter->second->m_eInitState);
275 string WinButtonMenu::makeIconPath(
const string &strIconFile)
278 string strIconFqName;
285 if( strIconFile.empty() )
287 return strIconFqName;
293 if( strIconFile[0] == DIR_SEP_CHAR )
295 strIconFqName = strIconFile;
296 if( access(strIconFqName.c_str(), F_OK|R_OK) != 0 )
298 LOGWARN(
"%s: %s(errno=%d)",
299 strIconFqName.c_str(), strerror(errno), errno);
300 strIconFqName.clear();
302 return strIconFqName;
308 if( m_strIconPath.empty() )
314 strPath = m_strIconPath + PATH_SEP_STR +
".";
317 for(pos1=0, pos2=strPath.find(PATH_SEP_STR, pos1);
318 pos1 != strPath.npos;
319 pos1=pos2+1, pos2=strPath.find(PATH_SEP_STR, pos1))
321 strIconFqName = strPath.substr(pos1, pos2) + DIR_SEP_STR + strIconFile;
322 if( access(strIconFqName.c_str(), F_OK|R_OK) == 0 )
324 return strIconFqName;
331 LOGWARN(
"%s: Icon not found in %s.", strIconFile.c_str(), strPath.c_str());
333 strIconFqName.clear();
335 return strIconFqName;
356 m_pWin->replaceButtonImage(pButton->
m_nEvent,
364 m_pWin->replaceButtonImage(pButton->
m_nEvent,
377 m_pWin->replaceButtonLabel(pButton->
m_nEvent,
385 m_pWin->replaceButtonImage(pButton->
m_nEvent,
394 m_pWin->showButtonState(pButton->
m_nEvent, eNewState);
398 void WinButtonMenu::onMenuButtonClick(
int nEvent,
void *user_data)
401 MapBttns_T::iterator pos;
408 eState = pos->second->m_eState;
RoadNarrows Robotics Win abstract base class interface.
RNR Win window abstract base class.