Example #1
0
static int listCursorPrev(GOC_HANDLER uchwyt)
{
	GOC_StList *lista = (GOC_StList*)uchwyt;
	if ( lista->kursor > 0 )
	{
		lista->kursor--;
		goc_systemSendMsg(uchwyt, GOC_MSG_LISTCHANGE,
			lista->pKolumna[0]->pText[lista->kursor],
			lista->kursor);
		if ( lista->start > lista->kursor )
		{
			// przemaluj calosc, nastapilo przewiniecie strony
			int n = goc_listGetRowsAmmount(uchwyt);
			GOC_POSITION height = goc_elementGetHeight(uchwyt);
			lista->start = listCountStart(lista->kursor, height, n);
			goc_systemSendMsg(uchwyt, GOC_MSG_PAINT, 0, 0);
		}
		if ( lista->flag & GOC_EFLAGA_SHOWN )
		{
			// przemaluj tylko linie nastepna i tam gdzie poszedl kursor
			listRedrawLine(uchwyt, lista->kursor);
			listRedrawLine(uchwyt, lista->kursor+1);
			goc_gotoxy(
				goc_elementGetScreenX(uchwyt)+1,
				goc_elementGetScreenY(uchwyt)+(lista->kursor-lista->start) + 1);
			fflush(stdout);
		}
	}
	return GOC_ERR_OK;
}
Example #2
0
int goc_labelDrawer(GOC_StElement *elem, const char *tekst)
{
	char *line; // line do wypisania
	unsigned int d; // d³ugo¶æ do kopiowania dla linii do wypisania
	unsigned int p = 0; // przesuniêcie wzglêdem pocz±tku punktu pisania
	GOC_POSITION w = goc_elementGetWidth((GOC_HANDLER)elem);
	line = (char *)malloc(w+1);
	memset(line, 0, w+1);
	memset(line, ' ', w);
	if ( tekst )
		d = strlen(tekst) > w ? w : strlen(tekst);
	else
		d = w;
	switch ( elem->flag & COC_EFLAGA_G_JUSTIFY )
	{
		case GOC_EFLAGA_RIGHT:
			p = w - d;
			break;
		case GOC_EFLAGA_LEFT:
			p = 0;
			break;
		case GOC_EFLAGA_CENTER:
			p = w - d;
			p >>= 1;
			break;
	}
	if ( tekst )
		memcpy( line + p, tekst, d );
	goc_gotoxy( 
		goc_elementGetScreenX( (GOC_HANDLER)elem ),
		goc_elementGetScreenY( (GOC_HANDLER)elem ) );
	goc_textallcolor( elem->color );
	fputs( line, stdout );
	free(line);
	return GOC_ERR_OK;
}
Example #3
0
int labelMoveDrawer(GOC_StElement *e, const char *tekst)
{
	if ( wait )
	{
		wait--;
		return GOC_ERR_OK;
	}
	wait = 1;

	if ( width != goc_elementGetWidth( (GOC_HANDLER)e ) )
	{
		counter = 0;
		direction = 0;
		width = goc_elementGetWidth( (GOC_HANDLER)e );
	}

	goc_textallcolor(e->color);
	if ( width <= strlen( tekst ) )
	{
		char *tekstPisany = (char *)malloc(width+1);
		memset( tekstPisany, 0, width+1 );
		memcpy( tekstPisany, tekst, width );
		goc_saveXY();
		goc_gotoxy(
			goc_elementGetScreenX( (GOC_HANDLER)e ),
			goc_elementGetScreenY( (GOC_HANDLER)e ));
		puts(tekstPisany);
		goc_loadXY();
		return GOC_ERR_OK;
	}

	if ( direction )
	{
		if ( counter > 0 )
		{
			counter--;
			goc_saveXY();
			goc_gotoxy(
				goc_elementGetScreenX( (GOC_HANDLER)e ) + counter,
				goc_elementGetScreenY( (GOC_HANDLER)e ));
			printf("%s ", tekst);
			goc_loadXY();
		}
		else
		{
			direction = 0;
		}
	}
	else
	{
		if ( counter < width-strlen(tekst) )
		{
			counter++;
			goc_saveXY();
			goc_gotoxy(
				goc_elementGetScreenX( (GOC_HANDLER)e ) + counter - 1,
				goc_elementGetScreenY( (GOC_HANDLER)e ));
			printf(" %s", tekst);
			goc_loadXY();
		}
		else
		{
			direction = 1;
		}
	}
	return GOC_ERR_OK;
}
Example #4
0
static int goc_listPaint(GOC_HANDLER u)
{
	GOC_StList *lista = (GOC_StList*)u;
	int i; // licznik zdañ
	int j; // licznik kolumn
	int n; // maksymalna liczba wierszy
	GOC_COLUMN *k;
	GOC_StElement e;
	GOC_FUN_LABELDRAWER *drawer;

	if ( !(lista->flag & GOC_EFLAGA_PAINTED) )
		return GOC_ERR_OK;

	drawer = goc_elementGetLabelDrawer(u);

	memcpy(&e, lista, sizeof(GOC_StElement));
	e.color = lista->kolorRamka;
	goc_elementGetFrameDrawer(u)(&e, "*-*| |*-*");
	// rysowanie tytulu, jesli obecny
	if ( lista->pTytul )
	{
		GOC_StElement elTytul;
		memcpy( &elTytul, lista, sizeof(GOC_StElement));
		elTytul.color = lista->kolorRamka;
		elTytul.height = 1;
		elTytul.x += 2;
		elTytul.flag = GOC_EFLAGA_CENTER;
		if ( elTytul.width > 2 )
		{
			elTytul.width -= 4;
			if ( strlen(lista->pTytul)+2 < elTytul.width )
				elTytul.width = strlen(lista->pTytul)+2;
		}
		else
			elTytul.width = 0;
		drawer(&elTytul, lista->pTytul);

	}
	
	n = goc_listGetRowsAmmount(u);
	j=0;
	for ( i=lista->start; i<n; i++ )
	{
		if ( i - lista->start > goc_elementGetHeight(u)-3 )
			break;
		goc_systemSendMsg(u, GOC_MSG_LISTSETCOLOR, &(e.color), i);
//		j %= lista->nKolumna;
		e.y++;
		e.x = lista->x;
		(e.x)++;
		for ( j = 0; j < lista->nKolumna; j++ )
		{
			k = lista->pKolumna[j];
			e.width = k->position;
			if ( i<k->nText )
				drawer(&e, k->pText[i]);
			else
				drawer(&e, "");
			e.x += k->position;
		}

//		if (!j)
//		{
//		}
//		e.width = lista->pKolumna[j];
//		j++;
	}
	if (lista->kursor != -1)
		goc_gotoxy(
			goc_elementGetScreenX(u)+1,
			goc_elementGetScreenY(u)+(lista->kursor-lista->start) + 1);
	fflush(stdout);
	lista->flag |= GOC_EFLAGA_SHOWN;
	return GOC_ERR_OK;
}