1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "main_window/TeamsPage.h"
8
9#include <stdio.h>
10
11#include <new>
12
13#include "table/TableColumns.h"
14
15
16// #pragma mark - TeamsTableModel
17
18
19class MainWindow::TeamsPage::TeamsTableModel : public TableModel {
20public:
21	TeamsTableModel(Model* model)
22		:
23		fModel(model)
24	{
25	}
26
27	virtual int32 CountColumns() const
28	{
29		return 4;
30	}
31
32	virtual int32 CountRows() const
33	{
34		return fModel->CountTeams();
35	}
36
37	virtual bool GetValueAt(int32 rowIndex, int32 columnIndex, BVariant& value)
38	{
39		Model::Team* team = fModel->TeamAt(rowIndex);
40		if (team == NULL)
41			return false;
42
43		switch (columnIndex) {
44			case 0:
45				value.SetTo(team->ID());
46				return true;
47			case 1:
48				value.SetTo(team->Name(), B_VARIANT_DONT_COPY_DATA);
49				return true;
50			case 2:
51				value.SetTo(team->CreationTime());
52				return true;
53			case 3:
54				value.SetTo(team->DeletionTime());
55				return true;
56			default:
57				return false;
58		}
59	}
60
61private:
62	Model*	fModel;
63};
64
65
66// #pragma mark - TeamsPage
67
68
69MainWindow::TeamsPage::TeamsPage(MainWindow* parent)
70	:
71	BGroupView(B_VERTICAL),
72	fParent(parent),
73	fTeamsTable(NULL),
74	fTeamsTableModel(NULL),
75	fModel(NULL)
76{
77	SetName("Teams");
78
79	fTeamsTable = new Table("teams list", 0);
80	AddChild(fTeamsTable->ToView());
81
82	fTeamsTable->AddColumn(new Int32TableColumn(0, "ID", 40, 20, 1000,
83		B_TRUNCATE_MIDDLE, B_ALIGN_RIGHT));
84	fTeamsTable->AddColumn(new StringTableColumn(1, "Name", 80, 40, 1000,
85		B_TRUNCATE_END, B_ALIGN_LEFT));
86	fTeamsTable->AddColumn(new NanotimeTableColumn(2, "Creation", 80, 40, 1000,
87		true, B_TRUNCATE_MIDDLE, B_ALIGN_RIGHT));
88	fTeamsTable->AddColumn(new NanotimeTableColumn(3, "Deletion", 80, 40, 1000,
89		false, B_TRUNCATE_MIDDLE, B_ALIGN_RIGHT));
90
91	fTeamsTable->AddTableListener(this);
92}
93
94
95MainWindow::TeamsPage::~TeamsPage()
96{
97	fTeamsTable->SetTableModel(NULL);
98	delete fTeamsTableModel;
99}
100
101
102void
103MainWindow::TeamsPage::SetModel(Model* model)
104{
105	if (model == fModel)
106		return;
107
108	if (fModel != NULL) {
109		fTeamsTable->SetTableModel(NULL);
110		delete fTeamsTableModel;
111		fTeamsTableModel = NULL;
112	}
113
114	fModel = model;
115
116	if (fModel != NULL) {
117		fTeamsTableModel = new(std::nothrow) TeamsTableModel(fModel);
118		fTeamsTable->SetTableModel(fTeamsTableModel);
119		fTeamsTable->ResizeAllColumnsToPreferred();
120	}
121}
122
123
124void
125MainWindow::TeamsPage::TableRowInvoked(Table* table, int32 rowIndex)
126{
127	Model::Team* team = fModel->TeamAt(rowIndex);
128	if (team != NULL)
129		fParent->OpenTeamWindow(team);
130}
131