Пример #1
0
float mouseDragListBox(entity me, vector pos)
{
	float hit;
	float i;
	me.updateControlTopBottom(me);
	me.dragScrollPos = pos;
	if(me.pressed == 1)
	{
		hit = 1;
		if(pos_x < 1 - me.controlWidth - me.tolerance_y * me.controlWidth) hit = 0;
		if(pos_y < 0 - me.tolerance_x) hit = 0;
		if(pos_x >= 1 + me.tolerance_y * me.controlWidth) hit = 0;
		if(pos_y >= 1 + me.tolerance_x) hit = 0;
		if(hit)
		{
			// calculate new pos to v
			float delta;
			delta = (pos_y - me.pressOffset) / (1 - (me.controlBottom - me.controlTop)) * (me.nItems * me.itemHeight - 1);
			me.scrollPos = me.previousValue + delta;
		}
		else
			me.scrollPos = me.previousValue;
		me.scrollPos = min(me.scrollPos, me.nItems * me.itemHeight - 1);
		me.scrollPos = max(me.scrollPos, 0);
		i = min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1));
		i = max(i, ceil(me.scrollPos / me.itemHeight));
		me.setSelected(me, i);
	}
	else if(me.pressed == 2)
	{
		me.setSelected(me, floor((me.scrollPos + pos_y) / me.itemHeight));
	}
	return 1;
}
Пример #2
0
float keyDownListBox(entity me, float key, float ascii, float shift)
{
	me.dragScrollTimer = time;
	if(key == K_MWHEELUP)
	{
		me.scrollPos = max(me.scrollPos - 0.5, 0);
		me.setSelected(me, min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1)));
	}
	else if(key == K_MWHEELDOWN)
	{
		me.scrollPos = min(me.scrollPos + 0.5, me.nItems * me.itemHeight - 1);
		me.setSelected(me, max(me.selectedItem, ceil(me.scrollPos / me.itemHeight)));
	}
	else if(key == K_PGUP)
		me.setSelected(me, me.selectedItem - 1 / me.itemHeight);
	else if(key == K_PGDN)
		me.setSelected(me, me.selectedItem + 1 / me.itemHeight);
	else if(key == K_UPARROW)
		me.setSelected(me, me.selectedItem - 1);
	else if(key == K_DOWNARROW)
		me.setSelected(me, me.selectedItem + 1);
	else if(key == K_HOME)
	{
		me.scrollPos = 0;
		me.setSelected(me, 0);
	}
	else if(key == K_END)
	{
		me.scrollPos = max(0, me.nItems * me.itemHeight - 1);
		me.setSelected(me, me.nItems - 1);
	}
	else
		return 0;
	return 1;
}
Пример #3
0
void refilterNexuizMapList(entity me)
{
	float i, j, n;
	string s;
	float gt, f;
	gt = gametype_ID_to_MapID(gametype_GetMenu());
	f = MapInfo_CurrentFeatures();
	MapInfo_FilterGametype(gt, f, MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
	me.nItems = MapInfo_count;
	for(i = 0; i < MapInfo_count; ++i)
		draw_PreloadPicture(strcat("/maps/", MapInfo_BSPName_ByID(i)));
	if(me.g_maplistCache)
		strunzone(me.g_maplistCache);
	s = "0";
	for(i = 1; i < MapInfo_count; i *= 2)
		s = strcat(s, s);
	n = tokenize_console(CVAR_STR(g_maplist));
	for(i = 0; i < n; ++i)
	{
		j = MapInfo_FindName(argv(i));
		if(j >= 0)
			s = strcat(
				substring(s, 0, j),
				"1",
				substring(s, j+1, MapInfo_count - (j+1))
			);
	}
	me.g_maplistCache = strzone(s);
	if(gt != me.lastGametype || f != me.lastFeatures)
	{
		me.lastGametype = gt;
		me.lastFeatures = f;
		me.setSelected(me, 0);
	}
}
Пример #4
0
void CvarList_Filter_Change(entity box, entity me)
{
	buf_cvarlist(me.handle, box.text, "_");
	me.nItems = buf_getsize(me.handle);

	me.setSelected(me, 0);
}
Пример #5
0
void NexuizCreditsList_draw(entity me)
{
	float i;
	if(me.scrolling)
	{
		me.scrollPos = bound(0, (time - me.scrolling) * me.itemHeight, me.nItems * me.itemHeight - 1);
		i = min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1));
		i = max(i, ceil(me.scrollPos / me.itemHeight));
		me.setSelected(me, i);
	}
	SUPER(NexuizCreditsList).draw(me);
}
Пример #6
0
void NexuizDemoList_clickListBoxItem(entity me, float i, vector where)
{
    if(i == me.lastClickedDemo)
        if(time < me.lastClickedTime + 0.3)
        {
            // DOUBLE CLICK!
            me.setSelected(me, i);
            me.startDemo(me);
        }
    me.lastClickedDemo = i;
    me.lastClickedTime = time;
}
Пример #7
0
float mousePressListBox(entity me, vector pos)
{
	if(pos_x < 0) return 0;
	if(pos_y < 0) return 0;
	if(pos_x >= 1) return 0;
	if(pos_y >= 1) return 0;
	me.dragScrollPos = pos;
	me.updateControlTopBottom(me);
	me.dragScrollTimer = time;
	if(pos_x >= 1 - me.controlWidth)
	{
		// if hit, set me.pressed, otherwise scroll by one page
		if(pos_y < me.controlTop)
		{
			// page up
			me.scrollPos = max(me.scrollPos - 1, 0);
			me.setSelected(me, min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1)));
		}
		else if(pos_y > me.controlBottom)
		{
			// page down
			me.scrollPos = min(me.scrollPos + 1, me.nItems * me.itemHeight - 1);
			me.setSelected(me, max(me.selectedItem, ceil(me.scrollPos / me.itemHeight)));
		}
		else
		{
			me.pressed = 1;
			me.pressOffset = pos_y;
			me.previousValue = me.scrollPos;
		}
	}
	else
	{
		// continue doing that while dragging (even when dragging outside). When releasing, forward the click to the then selected item.
		me.pressed = 2;
		// an item has been clicked. Select it, ...
		me.setSelected(me, floor((me.scrollPos + pos_y) / me.itemHeight));
	}
	return 1;
}
Пример #8
0
void resizeNotifyNexuizCvarList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
{
	resizeNotifyNexuizListBox(me, relOrigin, relSize, absOrigin, absSize);

	me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);
	me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));
	me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);

	me.columnNameOrigin = 0;
	me.columnValueSize = me.realFontSize_x * 20;
	me.columnNameSize = 1 - me.columnValueSize - me.realFontSize_x;
	me.columnValueOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x;

	me.setSelected(me, me.selectedItem);
}
Пример #9
0
float NexuizCreditsList_keyDown(entity me, float key, float ascii, float shift)
{
	float i;
	me.dragScrollTimer = time;
	me.scrolling = 0;
	if(key == K_PGUP || key == K_KP_PGUP)
		me.scrollPos = max(me.scrollPos - 0.5, 0);
	else if(key == K_PGDN || key == K_KP_PGDN)
		me.scrollPos = min(me.scrollPos + 0.5, me.nItems * me.itemHeight - 1);
	else if(key == K_UPARROW || key == K_KP_UPARROW)
		me.scrollPos = max(me.scrollPos - me.itemHeight, 0);
	else if(key == K_DOWNARROW || key == K_KP_DOWNARROW)
		me.scrollPos = min(me.scrollPos + me.itemHeight, me.nItems * me.itemHeight - 1);
	else
		return SUPER(NexuizCreditsList).keyDown(me, key, ascii, shift);

	i = min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1));
	i = max(i, ceil(me.scrollPos / me.itemHeight));
	me.setSelected(me, i);

	return 1;
}
Пример #10
0
float mouseReleaseListBox(entity me, vector pos)
{
	vector absSize;
	if(me.pressed == 1)
	{
		// slider dragging mode
		// in that case, nothing happens on releasing
	}
	else if(me.pressed == 2)
	{
		me.pressed = 3; // do that here, so setSelected can know the mouse has been released
		// item dragging mode
		// select current one one last time...
		me.setSelected(me, floor((me.scrollPos + pos_y) / me.itemHeight));
		// and give it a nice click event
		if(me.nItems > 0)
		{
			absSize = boxToGlobalSize(me.size, eX * (1 - me.controlWidth) + eY * me.itemHeight);
			me.clickListBoxItem(me, me.selectedItem, globalToBox(pos, eY * (me.selectedItem * me.itemHeight - me.scrollPos), eX * (1 - me.controlWidth) + eY * me.itemHeight));
		}
	}
	me.pressed = 0;
	return 1;
}