DO NOT REPLY TO THIS MESSAGE. INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.
[STR New]
Link: http://www.fltk.org/str.php?L1758
Version: 1.3-feature
Link: http://www.fltk.org/str.php?L1758
Version: 1.3-feature
Index: src/Fl_Menu_add.cxx
===================================================================
--- src/Fl_Menu_add.cxx (revision 7469)
+++ src/Fl_Menu_add.cxx (working copy)
@@ -54,10 +54,11 @@
// Insert a single Fl_Menu_Item into an array of size at offset n,
// if this is local_array it will be reallocated if needed.
static Fl_Menu_Item* insert(
- Fl_Menu_Item* array, int size,
- int n,
- const char *text,
- int flags
+ Fl_Menu_Item* array, // array to modify
+ int size, // size of array
+ int n, // index of new insert position
+ const char *text, // text of new item (copy is made)
+ int flags // flags for new item
) {
if (array == local_array && size >= local_array_alloc) {
local_array_alloc = 2*size;
@@ -107,6 +108,17 @@
void *data,
int myflags
) {
+ return(insert(-1,mytext,sc,cb,data,myflags));
+}
+
+int Fl_Menu_Item::insert(
+ int index,
+ const char *mytext,
+ int sc,
+ Fl_Callback *cb,
+ void *data,
+ int myflags
+) {
Fl_Menu_Item *array = this;
Fl_Menu_Item *m = this;
const char *p;
@@ -140,10 +152,10 @@
if (m->flags&FL_SUBMENU && !compare(item, m->text)) break;
if (!m->text) { /* create a new menu */
- int n = m-array;
- array = insert(array, msize, n, item, FL_SUBMENU|flags1);
+ int n = (index==-1) ? m-array : index;
+ array = ::insert(array, msize, n, item, FL_SUBMENU|flags1);
msize++;
- array = insert(array, msize, n+1, 0, 0);
+ array = ::insert(array, msize, n+1, 0, 0);
msize++;
m = array+n;
}
@@ -156,11 +168,11 @@
if (!(m->flags&FL_SUBMENU) && !compare(m->text,item)) break;
if (!m->text) { /* add a new menu item */
- int n = m-array;
- array = insert(array, msize, n, item, myflags|flags1);
+ int n = (index==-1) ? m-array : index;
+ array = ::insert(array, msize, n, item, myflags|flags1);
msize++;
if (myflags & FL_SUBMENU) { // add submenu delimiter
- array = insert(array, msize, n+1, 0, 0);
+ array = ::insert(array, msize, n+1, 0, 0);
msize++;
}
m = array+n;
@@ -266,6 +278,17 @@
*/
int Fl_Menu_::add(const char *label,int shortcut,Fl_Callback *callback,void
*userdata,int flags) {
+ return(insert(-1,label,shortcut,callback,userdata,flags));
+}
+
+int Fl_Menu_::insert(
+ int index,
+ const char *label,
+ int shortcut,
+ Fl_Callback *callback,
+ void *userdata,
+ int flags
+) {
// make this widget own the local array:
if (this != fl_menu_array_owner) {
if (fl_menu_array_owner) {
@@ -299,7 +322,7 @@
}
fl_menu_array_owner = this;
}
- int r = menu_->add(label,shortcut,callback,userdata,flags);
+ int r = menu_->insert(index,label,shortcut,callback,userdata,flags);
// if it rellocated array we must fix the pointer:
int value_offset = value_-menu_;
menu_ = local_array; // in case it reallocated it
Index: FL/Fl_Menu_Item.H
===================================================================
--- FL/Fl_Menu_Item.H (revision 7469)
+++ FL/Fl_Menu_Item.H (working copy)
@@ -386,6 +386,7 @@
/** back compatibility only \deprecated. */
void uncheck() {flags &= ~FL_MENU_VALUE;}
+ int insert(int,const char*,int,Fl_Callback*,void* =0, int =0);
int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0);
/** See int add(const char*, int shortcut, Fl_Callback*, void*, int) */
Index: FL/Fl_Menu_.H
===================================================================
--- FL/Fl_Menu_.H (revision 7469)
+++ FL/Fl_Menu_.H (working copy)
@@ -77,6 +77,7 @@
const Fl_Menu_Item *menu() const {return menu_;}
void menu(const Fl_Menu_Item *m);
void copy(const Fl_Menu_Item *m, void* user_data = 0);
+ int insert(int index, const char*, int shortcut, Fl_Callback*, void* = 0,
int = 0);
int add(const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
/** See int Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*,
void *user_data=0, int flags=0)*/
int add(const char* a, const char* b, Fl_Callback* c, void* d = 0, int e =
0) {
_______________________________________________
fltk-dev mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-dev