From fa46eaeeaaa75e3f738032a35777aee9a2b35e7b Mon Sep 17 00:00:00 2001 From: fluxgen Date: Fri, 8 Feb 2002 13:20:23 +0000 Subject: back to stl vector --- src/Basemenu.cc | 30 ++++++------------- src/Basemenu.hh | 89 ++++++++++++++++++++++++++------------------------------- 2 files changed, 48 insertions(+), 71 deletions(-) diff --git a/src/Basemenu.cc b/src/Basemenu.cc index 4beca57..4abc055 100644 --- a/src/Basemenu.cc +++ b/src/Basemenu.cc @@ -22,7 +22,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Basemenu.cc,v 1.8 2002/02/04 22:33:09 fluxgen Exp $ +// $Id: Basemenu.cc,v 1.9 2002/02/08 13:20:23 fluxgen Exp $ // stupid macros needed to access some functions in version 2 of the GNU C // library @@ -196,12 +196,7 @@ Basemenu::~Basemenu(void) { } -int Basemenu::insert(const char *l, int function, const char *e, int pos) { - char *label = 0, *exec = 0; - - if (l) label = StringUtil::strdup(l); - if (e) exec = StringUtil::strdup(e); - +int Basemenu::insert(const char *label, int function, const char *exec, int pos) { BasemenuItem *item = new BasemenuItem(label, function, exec); if (pos == -1) { menuitems.push_back(item); @@ -213,11 +208,7 @@ int Basemenu::insert(const char *l, int function, const char *e, int pos) { } -int Basemenu::insert(const char *l, Basemenu *submenu, int pos) { - char *label = 0; - - if (l) label = StringUtil::strdup(l); - +int Basemenu::insert(const char *label, Basemenu *submenu, int pos) { BasemenuItem *item = new BasemenuItem(label, submenu); if (pos == -1) { menuitems.push_back(item); @@ -232,7 +223,8 @@ int Basemenu::insert(const char *l, Basemenu *submenu, int pos) { int Basemenu::insert(const char **ulabel, int pos, int function) { - BasemenuItem *item = new BasemenuItem(ulabel, function); + assert(ulabel); + BasemenuItem *item = new BasemenuItem(*ulabel, function); if (pos == -1) { menuitems.push_back(item); } else { @@ -259,13 +251,8 @@ int Basemenu::remove(int index) { tmp->internal_hide(); } - if (item->label()) - delete [] item->label(); - - if (item->exec()) - delete [] item->exec(); - delete item; + menuitems.erase(it); } if (which_sub == index) @@ -323,8 +310,7 @@ void Basemenu::update(void) { for (; it != it_end; ++it) { BasemenuItem *itmp = (*it); - const char *s = ((itmp->u && *itmp->u) ? *itmp->u : - ((itmp->l) ? itmp->l : (const char *) 0)); + const char *s = itmp->label(); int l = strlen(s); if (i18n->multibyte()) { @@ -635,7 +621,7 @@ void Basemenu::drawItem(int index, Bool highlight, Bool clear, if (! item) return; Bool dotext = True, dohilite = True, dosel = True; - const char *text = (item->ulabel()) ? *item->ulabel() : item->label(); + const char *text = item->label(); int sbl = index / menu.persub, i = index - (sbl * menu.persub); int item_x = (sbl * menu.item_w), item_y = (i * menu.item_h); int hilite_x = item_x, hilite_y = item_y, hoff_x = 0, hoff_y = 0; diff --git a/src/Basemenu.hh b/src/Basemenu.hh index af40983..126f06e 100644 --- a/src/Basemenu.hh +++ b/src/Basemenu.hh @@ -22,12 +22,14 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: Basemenu.hh,v 1.5 2002/02/04 22:33:09 fluxgen Exp $ +// $Id: Basemenu.hh,v 1.6 2002/02/08 13:20:23 fluxgen Exp $ #ifndef _BASEMENU_HH_ #define _BASEMENU_HH_ #include +#include +#include // forward declarations class Basemenu; @@ -37,8 +39,6 @@ class Fluxbox; class BImageControl; class BScreen; -#include - class Basemenu { private: typedef std::vector Menuitems; @@ -139,55 +139,46 @@ public: }; - class BasemenuItem { -private: - Basemenu *s; - const char **u, *l, *e; - int f, enabled, selected; +public: + BasemenuItem( + const char *label, + int function, + const char *exec = (const char *) 0) + : m_label(label ? label : "") + , m_exec(exec ? exec : "") + , m_submenu(0) + , m_function(function) + , m_enabled(true) + , m_selected(false) + { } + + BasemenuItem(const char *label, Basemenu *submenu) + : m_label(label ? label : "") + , m_exec("") + , m_submenu(submenu) + , m_function(0) + , m_enabled(true) + , m_selected(false) + { } + + inline const char *exec(void) const { return m_exec.c_str(); } + inline const char *label(void) const { return m_label.c_str(); } + inline int function(void) const { return m_function; } + inline Basemenu *submenu(void) { return m_submenu; } + + inline bool isEnabled(void) const { return m_enabled; } + inline void setEnabled(bool enabled) { m_enabled = enabled; } + inline bool isSelected(void) const { return m_selected; } + inline void setSelected(bool selected) { m_selected = selected; } - friend class Basemenu; +private: + std::string m_label, m_exec; + Basemenu *m_submenu; + int m_function; + bool m_enabled, m_selected; -public: - BasemenuItem(const char *lp, int fp, const char *ep = (const char *) 0) { - l = lp; - e = ep; - s = 0; - f = fp; - u = 0; - enabled = 1; - selected = 0; - } - - BasemenuItem(const char *lp, Basemenu *mp) { - l = lp; - s = mp; - e = 0; - f = 0; - u = 0; - enabled = 1; - selected = 0; - } - - BasemenuItem(const char **up, int fp) { - u = up; - l = e = 0; - f = fp; - s = 0; - enabled = 1; - selected = 0; - } - - inline const char *exec(void) const { return e; } - inline const char *label(void) const { return l; } - inline const char **ulabel(void) const { return u; } - inline const int &function(void) const { return f; } - inline Basemenu *submenu(void) { return s; } - - inline const int &isEnabled(void) const { return enabled; } - inline void setEnabled(int e) { enabled = e; } - inline const int &isSelected(void) const { return selected; } - inline void setSelected(int s) { selected = s; } + friend class Basemenu; }; -- cgit v0.11.2