summaryrefslogtreecommitdiff
path: root/noncore/apps/tableviewer/ui/tvbrowseview.cpp
blob: f6da7b13f82e7577cd672685aa2b8cf12ac99c08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**********************************************************************
** Copyright (C) 2000 Trolltech AS.  All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/ 
#include "tvbrowseview.h"
#include "browsekeyentry.h"
#include <qtoolbutton.h>
#include <qtextview.h>
#include <qtextbrowser.h>
#include <qlayout.h>

/*!
    \class TVBrowseView
    \brief The widget describing how to draw the browse view user interface

    This widget allows for the user to browse through the table, one element
    at a time, or search on a single key.  Its main goal is to show a 
    single element in a readable format and make it easy for the user to 
    rapidly find specific elements in the table.
*/

/*!
    Constructs a new TVBrowseView widget 
*/
TVBrowseView::TVBrowseView(TableState *t, QWidget* parent = 0, const char *name = 0, 
	WFlags fl =0)
{
    if (!name) 
	setName("BrowseView");

    setSizePolicy(QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding, 0, 0, sizePolicy().hasHeightForWidth() ) );
    QVBoxLayout *vlayout = new QVBoxLayout(this);
    textViewDisplay = new QTextBrowser(this, "textViewDisplay");
    vlayout->addWidget( textViewDisplay );

    keyEntry = new TVBrowseKeyEntry(this, "keyEntry");
    vlayout->addWidget( keyEntry );

    /* connect the signals down */

    connect(keyEntry, SIGNAL(searchOnKey(int, TVVariant)),
        this, SIGNAL(searchOnKey(int, TVVariant)));
    connect(keyEntry, SIGNAL(sortChanged(int)),
        this, SIGNAL(sortChanged(int)));

    ts = t;
    keyEntry->setTableState(t); 
}

/*!
    Destroys the TVBrowseView widget 
*/
TVBrowseView::~TVBrowseView()
{
}

void TVBrowseView::rebuildData()
{
    if(!ts)
        return;
    if(!ts->current_elem) {
		/* also disable buttons */
		textViewDisplay->setText("");
        return;
	}

    setDisplayText(ts->current_elem);
}

/* Reset to initial state */
void TVBrowseView::reset()
{
    textViewDisplay->setText("");
    keyEntry->reset();
}

/*!
    sets the data element to be displayed to element 
*/
void TVBrowseView::setDisplayText(const DataElem *element)
{
    QString rep = "";

    KeyListIterator it(*ts->kRep);

    while (it.current()) {
        if (element->hasValidValue(it.currentKey())) {
            if(it.currentKey() == ts->current_column) {
                rep += "<A name=\"ckey\"></A><B><FONT COLOR=#FF0000>" 
                    + it.current()->name()
                    + ":</FONT></B> ";
            } else {
                rep += "<B>" + it.current()->name() + ":</B> ";
            }
            rep += element->toQString(it.currentKey()) + "<BR>";
        }
        ++it;
    }

    textViewDisplay->setText(rep);
    textViewDisplay->scrollToAnchor("ckey");
}

void TVBrowseView::rebuildKeys() 
{
    keyEntry->rebuildKeys();
}