Beispiel #1
0
static int barPaint(GOC_HANDLER uchwyt)
{
	GOC_StBar *pasek = (GOC_StBar*)uchwyt;
	int i;
	GOC_StElement elem;
	GOC_POSITION w = goc_elementGetWidth(uchwyt);
	memcpy(&elem, pasek, sizeof(GOC_StElement));
	goc_elementGetLabelDrawer(uchwyt)(&elem, "");
	if ( pasek->nText == 0 )
		return GOC_ERR_OK;
	if ( pasek->rozmiar == GOC_BAR_COUNTEDSIZE )
		elem.width = w / pasek->nText;
	else
		elem.width = pasek->rozmiar;
	for ( i=pasek->start; i<pasek->nText; i++ )
	{
		if ( i<(elem.width%(pasek->nText)) )
			elem.width++;
		if ( elem.x + elem.width > pasek->x + w )
			elem.width = pasek->x + w - elem.x;
		if ( i != pasek->kursor )
			elem.color = pasek->color;
		else
			elem.color = pasek->kolorZaznaczony;
		goc_elementGetLabelDrawer(uchwyt)(&elem, pasek->tekst[i]);
		elem.x += elem.width;
		if ( i<(elem.width%(pasek->nText)) )
		{
			elem.x++;
			elem.width--;
		}
	}
	fflush(stdout);
	return GOC_ERR_OK;
}
Beispiel #2
0
int goc_listAddColumn(GOC_HANDLER u, GOC_POSITION width)
{
	GOC_POSITION free;
	GOC_COLUMN *kolumna;
	int i;
	GOC_StList *lista = (GOC_StList*)u;
	free = goc_elementGetWidth(u);
	free -= 2; /* ramka */
	for ( i=0; i<lista->nKolumna; i++ )
		free -= lista->pKolumna[i]->position;
	lista->pKolumna = goc_tableAdd( lista->pKolumna, &(lista->nKolumna), sizeof(GOC_COLUMN*) );
	kolumna = malloc(sizeof(GOC_COLUMN));
	memset(kolumna, 0, sizeof(GOC_COLUMN));
	lista->pKolumna[lista->nKolumna-1] = kolumna;
	kolumna->position = width <= free ? width : free;
	// Wyrowanie liczby wierszow w stosunku do istenijacych kolumn
	if ( lista->nKolumna > 1 )
	{
		kolumna->pText = goc_tableResize(kolumna->pText,
			&(kolumna->nText), sizeof(char*),
			lista->pKolumna[0]->nText);
		// Wyzerowanie wierszy
		if ( kolumna->pText )
			memset(kolumna->pText, 0,
				sizeof(char*)*kolumna->nText);
	}
//	lista->kursor = -1;
	return GOC_ERR_OK;
}
Beispiel #3
0
int listSetExt(
	GOC_HANDLER uchwyt, const char **pTable, unsigned int size)
{
	GOC_StList *lista = (GOC_StList*)uchwyt;
	
	goc_listClear(uchwyt);
	/* Jesli nie ma zadnej kolumny, to zbuduj */
	if ( lista->nKolumna == 0 )
		goc_listAddColumn(uchwyt, goc_elementGetWidth(uchwyt));
	lista->pKolumna[0]->pText = (char **)pTable;
	lista->pKolumna[0]->nText = size;
	lista->flag |= GOC_LISTFLAG_EXTERNAL;
	return GOC_ERR_OK;
}
Beispiel #4
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;
}
Beispiel #5
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;
}
Beispiel #6
0
/*
 * Odmowa wykonania polecenia, jezeli ustawione dane sa zewnetrzne.
 */
static int listAddRow(GOC_HANDLER u, GOC_LISTROW *wiersz)
{
	GOC_StList* lista = (GOC_StList*)u;
	GOC_COLUMN *k = NULL;
	int i;
	
	if ( lista->flag & GOC_LISTFLAG_EXTERNAL )
		return GOC_ERR_REFUSE;
	// jesli nie ma to stworz nowa kolumne
	if ( lista->nKolumna == 0 )
		goc_listAddColumn(u, goc_elementGetWidth(u));
	// ustal pozcje na podstawie sortowania lub jako ostatni element
	if ( wiersz->nRow == -1 )
	{
		if ( lista->flag & GOC_LISTFLAG_SORT )
		{
			k = lista->pKolumna[0];
			for (i=0; i<k->nText; i++)
			{
				if ( strcmp(wiersz->pText[0], k->pText[i])<0 )
					break;
			}
			wiersz->nRow = i;
		}
		else
		{
			wiersz->nRow = lista->pKolumna[0]->nText;
		}
	}
	// czy nie wykracza ponad dodanie
	if ( wiersz->nRow > lista->pKolumna[0]->nText )
		return GOC_ERR_REFUSE;
	// dodawanie danych wiersza do kolumn
	for ( i=0; i<lista->nKolumna; i++ )
	{
		k = lista->pKolumna[i];
		k->pText = goc_tableInsert(k->pText, &(k->nText), sizeof(char*),
				wiersz->nRow);

		if ( i < wiersz->nText )
		{
			k->pText[wiersz->nRow] = goc_stringCopy(NULL,
				wiersz->pText[i]);
		}
		else
		{
			k->pText[wiersz->nRow] = NULL;
		}
	}
	return GOC_ERR_OK;

//	return goc_listAddColumnText(u, tekst, 0);
/*	GOC_StList* lista = (GOC_StList*)u;
	char *pBuf = NULL;
	GOC_COLUMN *kolumna = NULL;
	if ( lista->flag & GOC_LISTFLAG_EXTERNAL )
		return GOC_ERR_REFUSE;
	if ( lista->nKolumna == 0 )
		goc_listAddColumn(u, lista->width);
	kolumna = lista->pKolumna[0];
	pBuf = goc_stringCopy(pBuf, tekst);
	kolumna->pText = goc_tableAdd( kolumna->pText, &(kolumna->nText),
		sizeof(char*) );
	kolumna->pText[kolumna->nText-1] = pBuf;
//	goc_systemSendMsg(u, GOC_MSG_PAINT, 0, 0);
	return GOC_ERR_OK;*/
}