1/*
2 * Copyright 2009-2012 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		John Scipione <jscipione@gmail.com>
7 *		Alex Wilson <yourpalal2@gmail.com>
8 *		Artur Wyszynski <harakash@gmail.com>
9 */
10
11
12#include "ExtensionsView.h"
13
14#include <Catalog.h>
15#include <GL/gl.h>
16#include <GL/glu.h>
17#include <GroupLayout.h>
18#include <GroupLayoutBuilder.h>
19#include <Locale.h>
20#include <Message.h>
21#include <SpaceLayoutItem.h>
22#include <String.h>
23
24
25#undef B_TRANSLATION_CONTEXT
26#define B_TRANSLATION_CONTEXT "Extensions"
27
28
29ExtensionsView::ExtensionsView()
30	:
31	BGroupView(B_TRANSLATE("Extensions"), B_VERTICAL),
32	fExtensionsList(new BColumnListView("ExtensionsList", 0))
33{
34	// add the columns
35
36	float availableColWidth = this->StringWidth("M") * 28;
37
38	fAvailableColumn = new BStringColumn(B_TRANSLATE("Available extensions"),
39		availableColWidth, availableColWidth, availableColWidth,
40		B_TRUNCATE_MIDDLE);
41	fExtensionsList->AddColumn(fAvailableColumn, 0);
42	fExtensionsList->SetSortingEnabled(true);
43	fExtensionsList->SetSortColumn(fAvailableColumn, true, true);
44
45	// add the rows
46
47	_AddExtensionsList(fExtensionsList, (char*)glGetString(GL_EXTENSIONS));
48	_AddExtensionsList(fExtensionsList, (char*)gluGetString(GLU_EXTENSIONS));
49
50	// add the list
51
52	AddChild(fExtensionsList);
53	GroupLayout()->SetInsets(5.0, 5.0, 5.0, 5.0);
54}
55
56
57ExtensionsView::~ExtensionsView()
58{
59	BRow *row;
60	while ((row = fExtensionsList->RowAt((int32)0, NULL)) != NULL) {
61		fExtensionsList->RemoveRow(row);
62		delete row;
63	}
64	delete fAvailableColumn;
65	delete fExtensionsList;
66}
67
68
69//	#pragma mark -
70
71
72void
73ExtensionsView::_AddExtensionsList(BColumnListView* fExtensionsList, char* stringList)
74{
75	if (stringList == NULL) {
76		// empty extensions string
77		return;
78	}
79
80	while (*stringList != '\0') {
81		char extName[255];
82		int n = strcspn(stringList, " ");
83		strncpy(extName, stringList, n);
84		extName[n] = 0;
85		BRow* row = new BRow();
86		row->SetField(new BStringField(extName), 0);
87		fExtensionsList->AddRow(row);
88		if (!stringList[n])
89			break;
90		stringList += (n + 1);
91			// next !
92	}
93}
94