1
0
Fork 0

(svn r17993) -Codechange: Move widget and data initialization into the dropdown menu class.

release/1.0
alberth 2009-11-07 11:44:38 +00:00
parent 81796f10e5
commit d03bf874fc
1 changed files with 51 additions and 37 deletions

View File

@ -101,13 +101,59 @@ struct DropdownWindow : Window {
int scrolling; ///< If non-zero, auto-scroll the item list (one time).
/** Create a dropdown menu.
* @param pos Topleft position of the dropdown menu window.
* @param size Size of the dropdown menu window.
* @param widget Widgets of the dropdown menu window.
* @param parent Parent window.
* @param list Dropdown item list.
* @param selected Index of the selected item in the list.
* @param button Widget of the parent window doing the dropdown.
* @param instant_close ???
* @param pos Topleft position of the dropdown menu window.
* @param size Size of the dropdown menu window.
* @param wi_colour Colour of the parent widget.
* @param scroll Dropdown menu has a scrollbar.
* @param widget Widgets of the dropdown menu window.
*/
DropdownWindow(const Point &pos, const Dimension &size, const Widget *widget) : Window(pos.x, pos.y, size.width, size.height + 4, WC_DROPDOWN_MENU, widget)
DropdownWindow(Window *parent, DropDownList *list, int selected, int button, bool instant_close, const Point &pos, const Dimension &size, Colours wi_colour, bool scroll, const Widget *widget) :
Window(pos.x, pos.y, size.width, size.height + 4, WC_DROPDOWN_MENU, widget)
{
this->FindWindowPlacementAndResize(size.width, size.height + 4);
this->widget[DDM_ITEMS].colour = wi_colour;
this->widget[DDM_ITEMS].right = size.width - 1;
this->widget[DDM_ITEMS].bottom = size.height + 3;
this->SetWidgetHiddenState(DDM_SCROLL, !scroll);
if (scroll) {
/* We're scrolling, so enable the scroll bar and shrink the list by
* the scrollbar's width */
this->widget[DDM_SCROLL].colour = wi_colour;
this->widget[DDM_SCROLL].right = this->widget[DDM_ITEMS].right;
this->widget[DDM_SCROLL].left = this->widget[DDM_SCROLL].right - (WD_VSCROLLBAR_WIDTH - 1);
this->widget[DDM_SCROLL].bottom = this->widget[DDM_ITEMS].bottom;
this->widget[DDM_ITEMS].right -= WD_VSCROLLBAR_WIDTH;
/* Total length of list */
int list_height = 0;
for (DropDownList::const_iterator it = list->begin(); it != list->end(); ++it) {
DropDownListItem *item = *it;
list_height += item->Height(size.width - WD_VSCROLLBAR_WIDTH);
}
/* Capacity is the average number of items visible */
this->vscroll.SetCapacity(size.height * (uint16)list->size() / list_height);
this->vscroll.SetCount((uint16)list->size());
}
this->desc_flags = WDF_DEF_WIDGET;
this->flags4 &= ~WF_WHITE_BORDER_MASK;
this->parent_wnd_class = parent->window_class;
this->parent_wnd_num = parent->window_number;
this->parent_button = button;
this->list = list;
this->selected_index = selected;
this->click_delay = 0;
this->drag_mode = true;
this->instant_close = instant_close;
}
~DropdownWindow()
@ -359,39 +405,7 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u
_dropdown_menu_widgets, &generated_dropdown_menu_widgets);
Point dw_pos = {w->left + wi_rect.left, top};
Dimension dw_size = {width, height};
DropdownWindow *dw = new DropdownWindow(dw_pos, dw_size, wid);
dw->widget[DDM_ITEMS].colour = wi_colour;
dw->widget[DDM_ITEMS].right = width - 1;
dw->widget[DDM_ITEMS].bottom = height + 3;
dw->SetWidgetHiddenState(DDM_SCROLL, !scroll);
if (scroll) {
/* We're scrolling, so enable the scroll bar and shrink the list by
* the scrollbar's width */
dw->widget[DDM_SCROLL].colour = wi_colour;
dw->widget[DDM_SCROLL].right = dw->widget[DDM_ITEMS].right;
dw->widget[DDM_SCROLL].left = dw->widget[DDM_SCROLL].right - (WD_VSCROLLBAR_WIDTH - 1);
dw->widget[DDM_SCROLL].bottom = dw->widget[DDM_ITEMS].bottom;
dw->widget[DDM_ITEMS].right -= WD_VSCROLLBAR_WIDTH;
/* Capacity is the average number of items visible */
dw->vscroll.SetCapacity(height * (uint16)list->size() / list_height);
dw->vscroll.SetCount((uint16)list->size());
}
dw->desc_flags = WDF_DEF_WIDGET;
dw->flags4 &= ~WF_WHITE_BORDER_MASK;
dw->parent_wnd_class = w->window_class;
dw->parent_wnd_num = w->window_number;
dw->parent_button = button;
dw->list = list;
dw->selected_index = selected;
dw->click_delay = 0;
dw->drag_mode = true;
dw->instant_close = instant_close;
new DropdownWindow(w, list, selected, button, instant_close, dw_pos, dw_size, wi_colour, scroll, wid);
}
/** Show a dropdown menu window near a widget of the parent window.