summaryrefslogtreecommitdiff
path: root/client/widgets/listbox.h
blob: f9d967aa7867b75d2c969e208b19d319d2cf22f8 (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
 *            listbox.h
 *
 *  Wed Jul 18 10:35:52 CEST 2007
 *  Copyright 2007 Bent Bisballe Nyeng and Lars Bisballe Jensen
 *  deva@aasimon.org and elsenator@gmail.com
 ****************************************************************************/

/*
 *  This file is part of Pracro.
 *
 *  Pracro is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  Pracro is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Pracro; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
 */
#ifndef __PRACRO_LISTBOX_H__
#define __PRACRO_LISTBOX_H__

#include "widget.h"

#include <QDomNode>

#ifdef LUA_CLASS
#undef LUA_CLASS
#endif
#define LUA_CLASS "ListBox"

/***
 * ListBox Widget
 * @clientside
 * @tag listbox
 * @screenshot Example
 * <listbox name="x" value="item1">
 *   <item type="header" value="" caption="Numbers"/>
 *   <item value="item1" caption="Item 1"/>
 *   <item value="item2" caption="Item 2"/>
 *   <item value="item3" caption="Item 3"/>
 *   <item value="item4" caption="Item 4"/>
 *   <item value="" caption="" type="separator"/>
 *   <item type="header" value="" caption="Letters"/>
 *   <item value="itemA" caption="Item A"/>
 *   <item value="itemB" caption="Item B"/>
 *   <item value="itemC" caption="Item C"/>
 *   <item value="itemD" caption="Item D"/>
 * </listbox>
 * @extends widget
 * This widget is a list of selectable items.
 * @att value [item] The value of the item and the value of the widget if this
 * item is selected.
 * @att caption [item] The caption of the item. This is the text presented to
 * the user.
 * @att type [item] The item type. Can be either 'separator' which will show
 * the item as a line or 'header' which will highlight its caption. Ommit this
 * attribute if the item is selectable.
 */

class QListWidget;
class ListBox : public Widget
{
Q_OBJECT
public:
  ListBox(QDomNode &node, MacroWindow *macrowindow);
  ~ListBox();

  virtual QString luaclass() { return LUA_CLASS; }

  QString value();
  void setValue(QString value, QString source);

  bool preValid();
  void setWdgValid(bool valid);

  void clear();
  void addItem(QString text, QString type);

public slots:
  void changed();

private:
  bool valueIsChangingByComputer;
  QListWidget *listwidget;
};

/***
 * @method nil clear()
 * This method removes all items from the listbox.
 */
int lst_clear(lua_State *L);

/***
 * @method nil addItem(string text)
 * This method adds an item to the list.
 * @param text The item text to be added. It will be added both as the value
 * and caption of the item.
 */
int lst_add_item(lua_State *L);

/***
 * @method nil addHeader(string text)
 * This method adds a header item to the list.
 * @param text The caption of the header.
 */
int lst_add_header(lua_State *L);

/***
 * @method nil addSeparator()
 * This method adds a separator item to the list.
 */
int lst_add_separator(lua_State *L);

#define LSTBOX_METHS \
  {"clear", lst_clear},\
  {"addItem", lst_add_item}, \
  {"addHeader", lst_add_header}, \
  {"addSeparator", lst_add_separator}

const struct luaL_Reg lstbox_meths[] =
  { WDG_METHS, LSTBOX_METHS, {NULL, NULL} };

inline void register_listbox(lua_State *L)
{
  luaL_newmetatable(L, LUA_CLASS);
  lua_pushliteral(L, "__index");
  lua_pushvalue(L, -2);
  lua_rawset(L, -3);
  luaL_register(L, NULL, lstbox_meths);
}

#endif/*__PRACRO_LISTBOX_H__*/