22#include <tdelistview.h>
23#include <ktabwidget.h>
24#include <tdelistbox.h>
25#include <kiconloader.h>
29#include <koproperty/editor.h>
30#include <koproperty/set.h>
31#include <koproperty/property.h>
33#include "editlistviewdialog.h"
43: KDialogBase(Tabbed, i18n(
"Edit Listview Contents"), Ok|Cancel, Ok, parent,
"editlistview_dialog", true , false)
45 m_column = addPage(i18n(
"Columns"));
46 m_contents = addPage(i18n(
"Contents"));
49 TQHBoxLayout *layout =
new TQHBoxLayout(m_contents, 0, 6);
52 TQVBoxLayout *vlayout =
new TQVBoxLayout(layout, 3);
53 TQToolButton *newRow =
new TQToolButton(m_contents);
54 newRow->setIconSet(BarIconSet(
"edit_add"));
55 newRow->setTextLabel(i18n(
"&Add Item"),
true);
56 vlayout->addWidget(newRow);
57 m_buttons.insert(BNewRow, newRow);
58 connect(newRow, TQ_SIGNAL(clicked()),
this, TQ_SLOT(newRow()));
60 TQToolButton *newChild =
new TQToolButton(m_contents);
61 newChild->setIconSet(BarIconSet(
"1rightarrow"));
62 newChild->setTextLabel(i18n(
"New &Subitem"),
true);
63 vlayout->addWidget(newChild);
64 m_buttons.insert(BNewChild, newChild);
65 connect(newChild, TQ_SIGNAL(clicked()),
this, TQ_SLOT(newChildRow()));
67 TQToolButton *delRow =
new TQToolButton(m_contents);
68 delRow->setIconSet(BarIconSet(
"edit_remove"));
69 delRow->setTextLabel(i18n(
"&Remove Item"),
true);
70 vlayout->addWidget(delRow);
71 m_buttons.insert(BRemRow, delRow);
72 connect(delRow, TQ_SIGNAL(clicked()),
this, TQ_SLOT(removeRow()));
74 TQToolButton *rowUp =
new TQToolButton(m_contents);
75 rowUp->setIconSet(BarIconSet(
"1uparrow"));
76 rowUp->setTextLabel(i18n(
"Move Item &Up"),
true);
77 vlayout->addWidget(rowUp);
78 m_buttons.insert(BRowUp, rowUp);
79 connect(rowUp, TQ_SIGNAL(clicked()),
this, TQ_SLOT(MoveRowUp()));
81 TQToolButton *rowDown =
new TQToolButton(m_contents);
82 rowDown->setIconSet(BarIconSet(
"1downarrow"));
83 rowDown->setTextLabel(i18n(
"Move Item &Down"),
true);
84 vlayout->addWidget(rowDown);
85 m_buttons.insert(BRowDown, rowDown);
86 connect(rowDown, TQ_SIGNAL(clicked()),
this, TQ_SLOT(MoveRowDown()));
87 vlayout->addStretch();
90 m_listview =
new TDEListView(m_contents,
"editlistview_listview");
91 m_listview->setItemsRenameable(
true);
92 m_listview->setItemsMovable(
true);
93 m_listview->setDragEnabled(
true);
94 m_listview->setAllColumnsShowFocus(
true);
95 m_listview->setRootIsDecorated(
true);
96 m_listview->setDropVisualizer(
true);
97 m_listview->setAcceptDrops(
true);
98 m_listview->setSorting(-1);
99 layout->addWidget(m_listview);
100 m_listview->setFocus();
101 connect(m_listview, TQ_SIGNAL(currentChanged(TQListViewItem*)),
this, TQ_SLOT(
updateButtons(TQListViewItem*)));
102 connect(m_listview, TQ_SIGNAL(moved(TQListViewItem*, TQListViewItem*, TQListViewItem*)),
this, TQ_SLOT(
updateButtons(TQListViewItem*)));
105 TQHBoxLayout *hbox =
new TQHBoxLayout(m_column, 0, 6);
108 m_editor =
new KoProperty::Editor(m_column,
"editcolumn_propeditor");
109 m_propSet =
new KoProperty::Set(
this,
"columns");
110 m_propSet->addProperty(
new KoProperty::Property(
"caption",
"Caption", i18n(
"Caption"),i18n(
"Caption")));
111 m_propSet->addProperty(
new KoProperty::Property(
"width", 100, i18n(
"Width"), i18n(
"Width")));
112 m_propSet->addProperty(
new KoProperty::Property(
"clickable", TQVariant(
true), i18n(
"Clickable"), i18n(
"Clickable") ));
113 m_propSet->addProperty(
new KoProperty::Property(
"resizable", TQVariant(
true), i18n(
"Resizable"), i18n(
"Resizable") ));
114 m_propSet->addProperty(
new KoProperty::Property(
"fullwidth", TQVariant(
false), i18n(
"Full Width"), i18n(
"Full Width") ));
115 m_editor->changeSet(m_propSet);
116 connect(m_propSet, TQ_SIGNAL(propertyChanged(KoProperty::Set & KoProperty::Property&)),
117 this, TQ_SLOT(
changeProperty(KoProperty::Set & KoProperty::Property&)));
120 TQVBoxLayout *vbox =
new TQVBoxLayout(hbox, 3);
121 TQToolButton *add =
new TQToolButton(m_column);
122 add->setIconSet(BarIconSet(
"edit_add"));
123 add->setTextLabel(i18n(
"&Add Item"),
true);
124 vbox->addWidget(add);
125 m_buttons.insert(BColAdd, add);
126 connect(add, TQ_SIGNAL(clicked()),
this, TQ_SLOT(newItem()));
128 TQToolButton *remove =
new TQToolButton(m_column);
129 remove->setIconSet(BarIconSet(
"edit_remove"));
130 remove->setTextLabel(i18n(
"&Remove Item"),
true);
131 vbox->addWidget(remove);
132 m_buttons.insert(BColRem, remove);
133 connect(remove, TQ_SIGNAL(clicked()),
this, TQ_SLOT(removeItem()));
135 TQToolButton *up =
new TQToolButton(m_column);
136 up->setIconSet(BarIconSet(
"1uparrow"));
137 up->setTextLabel(i18n(
"Move Item &Up"),
true);
139 m_buttons.insert(BColUp, up);
140 connect(up, TQ_SIGNAL(clicked()),
this, TQ_SLOT(MoveItemUp()));
142 TQToolButton *down =
new TQToolButton(m_column);
143 down->setIconSet(BarIconSet(
"1downarrow"));
144 down->setTextLabel(i18n(
"Move Item &Down"),
true);
145 vbox->addWidget(down);
146 m_buttons.insert(BColDown, down);
147 connect(down, TQ_SIGNAL(clicked()),
this, TQ_SLOT(MoveItemDown()));
151 m_listbox =
new TDEListBox(m_column,
"editlistview_columns");
152 m_listbox->setFocus();
153 hbox->insertWidget(0, m_listbox);
154 hbox->addWidget(m_editor);
155 connect(m_listbox, TQ_SIGNAL(currentChanged(TQListBoxItem*)),
this, TQ_SLOT(updateItemProperties(TQListBoxItem*)));
158 setInitialSize(TQSize(500, 300),
true);
162EditListViewDialog::exec(TQListView *listview)
166 kdDebug() <<
"EditListViewDialog ERROR: no listview " << endl;
171 for(
int i = 0; i < listview->columns(); i++)
173 m_listview->addColumn(listview->columnText(i), listview->columnWidth(i));
174 m_listview->header()->setClickEnabled(listview->header()->isClickEnabled(i), i);
175 m_listview->header()->setResizeEnabled(listview->header()->isResizeEnabled(i), i);
176 m_listview->header()->setStretchEnabled(listview->header()->isStretchEnabled(i), i);
177 m_listview->setRenameable(i,
true);
179 TQListViewItem *item = listview->firstChild();
182 item = item->nextSibling();
185 m_listview->setSelected(m_listview->firstChild(),
true);
186 if(!m_listview->firstChild())
189 for(
int i = 0; i < listview->columns(); i++)
190 m_listbox->insertItem(listview->columnText(i));
191 m_listbox->setSelected(0,
true);
194 int r = KDialogBase::exec();
195 if(r == TQDialog::Accepted)
199 for(
int i = 0; i < m_listview->columns(); i++)
201 if(listview->columns() <= i)
202 listview->addColumn(m_listview->columnText(i), m_listview->columnWidth(i));
205 listview->setColumnText(i, m_listview->columnText(i));
206 listview->setColumnWidth(i, m_listview->columnWidth(i));
208 listview->header()->setClickEnabled(m_listview->header()->isClickEnabled(i), i);
209 listview->header()->setResizeEnabled(m_listview->header()->isResizeEnabled(i), i);
210 listview->header()->setStretchEnabled(m_listview->header()->isStretchEnabled(i), i);
213 TQListViewItem *item = m_listview->firstChild();
217 item = item->nextSibling();
227 if(&set != m_propSet)
230 TQString name =
property.name();
231 TQVariant value =
property.value();
232 if(name ==
"caption") {
233 m_propSet->blockSignals(
true);
234 m_listbox->changeItem(value.toString(), m_listbox->currentItem());
235 m_listview->setColumnText(m_listbox->currentItem(), value.toString());
236 m_propSet->blockSignals(
false);
238 else if(name ==
"width")
239 m_listview->setColumnWidth(m_listbox->currentItem(), value.toInt());
240 else if(name ==
"resizable")
241 m_listview->header()->setResizeEnabled(value.toBool(), m_listbox->currentItem());
242 else if(name ==
"clickable")
243 m_listview->header()->setClickEnabled(value.toBool(), m_listbox->currentItem());
244 else if(name ==
"fullwidth")
245 m_listview->header()->setStretchEnabled(value.toBool(), m_listbox->currentItem());
249EditListViewDialog::updateItemProperties(TQListBoxItem *item)
254 int id = m_listbox->index(item);
256 m_propSet->blockSignals(
true);
257 (*m_propSet)[
"caption"].setValue(m_listview->columnText(
id),
false);
258 (*m_propSet)[
"width"].setValue(m_listview->columnWidth(
id),
false);
259 (*m_propSet)[
"clickable"].setValue(TQVariant(m_listview->header()->isClickEnabled(
id)),
false);
260 (*m_propSet)[
"resizable"].setValue(TQVariant(m_listview->header()->isResizeEnabled(
id)),
false);
261 (*m_propSet)[
"fullwidth"].setValue(TQVariant(m_listview->header()->isStretchEnabled(
id)),
false);
262 m_propSet->blockSignals(
false);
263 m_editor->changeSet(m_propSet);
266 m_buttons[BColUp]->setEnabled(item->prev());
267 m_buttons[BColDown]->setEnabled(item->next());
271EditListViewDialog::newItem()
273 m_listbox->insertItem(i18n(
"New Column"));
274 m_listview->addColumn(i18n(
"New Column"));
275 m_listview->setRenameable(m_listview->columns() - 1,
true);
276 m_listbox->setCurrentItem(m_listbox->count() - 1);
277 m_buttons[BColRem]->setEnabled(
true);
281EditListViewDialog::removeItem()
283 int current = m_listbox->currentItem();
284 if(m_listbox->item(current + 1))
285 m_listbox->setCurrentItem(current +1);
287 m_listbox->setCurrentItem(current - 1);
289 m_listview->removeColumn(current);
290 m_listbox->removeItem(current);
291 if(m_listbox->count() == 0)
292 m_buttons[BColRem]->setEnabled(
false);
296EditListViewDialog::MoveItemUp()
298 int current = m_listbox->currentItem();
299 TQString text = m_listbox->text(current);
300 m_listbox->blockSignals(
true);
302 m_listbox->changeItem(m_listbox->text(current - 1), current);
303 m_listview->setColumnText(current, m_listview->columnText(current - 1));
304 m_listview->setColumnWidth(current, m_listview->columnWidth(current - 1));
305 m_listview->header()->setClickEnabled(m_listview->header()->isClickEnabled(current - 1), current);
306 m_listview->header()->setResizeEnabled(m_listview->header()->isResizeEnabled(current - 1), current);
307 m_listview->header()->setStretchEnabled(m_listview->header()->isStretchEnabled(current - 1), current);
309 m_listbox->changeItem(text, current - 1);
310 m_listview->setColumnText(current - 1, (*m_propSet)[
"caption"].value().toString());
311 m_listview->setColumnWidth(current - 1,(*m_propSet)[
"width"].value().toBool());
312 m_listview->header()->setClickEnabled((*m_propSet)[
"clickable"].value().toBool(), current - 1);
313 m_listview->header()->setResizeEnabled((*m_propSet)[
"resizable"].value().toBool(), current - 1);
314 m_listview->header()->setStretchEnabled((*m_propSet)[
"fullwidth"].value().toBool(), current - 1);
316 m_listbox->blockSignals(
false);
317 m_listbox->setCurrentItem(current - 1);
321EditListViewDialog::MoveItemDown()
323 int current = m_listbox->currentItem();
324 TQString text = m_listbox->text(current);
325 m_listbox->blockSignals(
true);
327 m_listbox->changeItem(m_listbox->text(current+1), current);
328 m_listview->setColumnText(current, m_listview->columnText(current + 1));
329 m_listview->setColumnWidth(current, m_listview->columnWidth(current + 1));
330 m_listview->header()->setClickEnabled(m_listview->header()->isClickEnabled(current + 1), current);
331 m_listview->header()->setResizeEnabled(m_listview->header()->isResizeEnabled(current + 1), current);
332 m_listview->header()->setStretchEnabled(m_listview->header()->isStretchEnabled(current + 1), current);
334 m_listbox->changeItem(text, current+1);
335 m_listview->setColumnText(current + 1, (*m_propSet)[
"caption"].value().toString());
336 m_listview->setColumnWidth(current + 1,(*m_propSet)[
"width"].value().toBool());
337 m_listview->header()->setClickEnabled((*m_propSet)[
"clickable"].value().toBool(), current + 1);
338 m_listview->header()->setResizeEnabled((*m_propSet)[
"resizable"].value().toBool(), current + 1);
339 m_listview->header()->setStretchEnabled((*m_propSet)[
"fullwidth"].value().toBool(), current + 1);
341 m_listbox->blockSignals(
false);
342 m_listbox->setCurrentItem(current + 1);
352 for(
int i = BNewChild; i <= BRowDown; i++)
353 m_buttons[i]->setEnabled(
false);
357 m_buttons[BNewChild]->setEnabled(
true);
358 m_buttons[BRemRow]->setEnabled(
true);
359 m_buttons[BRowUp]->setEnabled( (item->itemAbove() && (item->itemAbove()->parent() == item->parent())) );
360 m_buttons[BRowDown]->setEnabled(item->nextSibling());
366 TQListViewItem *newItem;
367 if(listview->inherits(
"TDEListView"))
370 newItem =
new TDEListViewItem(parent);
372 newItem =
new TDEListViewItem(listview);
377 newItem =
new TQListViewItem(parent);
379 newItem =
new TQListViewItem(listview);
383 TQListViewItem *last;
385 last = parent->firstChild();
387 last = listview->firstChild();
389 while(last->nextSibling())
390 last = last->nextSibling();
391 newItem->moveItem(last);
394 for(
int i = 0; i < listview->columns(); i++)
395 newItem->setText(i, item->text(i));
397 TQListViewItem *child = item->firstChild();
399 newItem->setOpen(
true);
402 child = child->nextSibling();
407EditListViewDialog::newRow()
409 TDEListViewItem *parent = (TDEListViewItem*)m_listview->selectedItem();
411 parent = (TDEListViewItem*)parent->parent();
412 TDEListViewItem *item;
414 item =
new TDEListViewItem(parent, m_listview->selectedItem());
416 item =
new TDEListViewItem(m_listview, m_listview->selectedItem());
417 item->setText(0, i18n(
"New Item"));
418 m_listview->setCurrentItem(item);
422EditListViewDialog::newChildRow()
424 TDEListViewItem *parent = (TDEListViewItem*)m_listview->currentItem();
425 TDEListViewItem *item;
427 item =
new TDEListViewItem(parent);
429 item =
new TDEListViewItem(m_listview, m_listview->currentItem());
430 item->setText(0, i18n(
"Sub Item"));
432 m_listview->setCurrentItem(item);
433 parent->setOpen(
true);
437EditListViewDialog::removeRow()
439 delete m_listview->currentItem();
443EditListViewDialog::MoveRowUp()
445 TQListViewItem *item = m_listview->currentItem()->itemAbove();
446 item->moveItem(m_listview->currentItem());
451EditListViewDialog::MoveRowDown()
453 TQListViewItem *before = m_listview->currentItem();
454 before->moveItem(before->nextSibling());
460#include "editlistviewdialog.moc"