19#include "kivio_layer_panel.h"
21#include "kivio_view.h"
23#include "kivio_page.h"
24#include "kivio_layer.h"
25#include "kivio_factory.h"
26#include "kivio_command.h"
27#include "layerlisttooltip.h"
32#include <tdetoolbar.h>
35#include <kiconloader.h>
36#include <kinputdialog.h>
38KivioLayerItem::KivioLayerItem(TQListView* parent, KivioLayer* d,
int id)
39: TQListViewItem(parent), data(d)
44 space.fill(
' ',10-ids.length());
51KivioLayerItem::~KivioLayerItem()
55void KivioLayerItem::update()
57 setPixmap(0, data->visible() ? SmallIcon(
"layer_visible",KivioFactory::global()):SmallIcon(
"layer_novisible",KivioFactory::global()));
58 setPixmap(1, data->printable() ? SmallIcon(
"layer_print",KivioFactory::global()):SmallIcon(
"layer_noprint",KivioFactory::global()));
59 setPixmap(2, data->editable() ? SmallIcon(
"layer_editable",KivioFactory::global()):SmallIcon(
"layer_noeditable",KivioFactory::global()));
60 setPixmap(3, data->connectable() ? SmallIcon(
"layer_connect",KivioFactory::global()):SmallIcon(
"layer_noconnect",KivioFactory::global()));
61 setText(4,data->name());
66KivioLayerPanel::KivioLayerPanel(KivioView* view, TQWidget* parent,
const char* name)
67: KivioLayerPanelBase(parent, name), m_pView(view)
69 list->header()->hide();
70 list->addColumn(i18n(
"View"),15);
71 list->addColumn(i18n(
"Print"),15);
72 list->addColumn(i18n(
"Editable"),15);
73 list->addColumn(i18n(
"Connect"),15);
74 list->addColumn(i18n(
"Name"),-1);
75 list->setSorting(5,
false);
76 list->installEventFilter(
this);
78 actNew =
new TDEAction( i18n(
"New Layer"), BarIcon(
"layer_add",KivioFactory::global()), 0,
this, TQ_SLOT(addItem()),
this);
79 actDel =
new TDEAction( i18n(
"Remove Layer"), BarIcon(
"layer_remove",KivioFactory::global()), 0,
this, TQ_SLOT(removeItem()),
this);
80 actRename =
new TDEAction( i18n(
"Rename Layer"), BarIcon(
"item_rename",KivioFactory::global()), 0,
this, TQ_SLOT(renameItem()),
this);
81 actUp =
new TDEAction( i18n(
"Move Layer Up"),
"go-up", 0,
this, TQ_SLOT(upItem()),
this);
82 actDown =
new TDEAction( i18n(
"Move Layer Down"),
"go-down", 0,
this, TQ_SLOT(downItem()),
this);
86 bar->insertSeparator();
88 bar->insertSeparator();
95KivioLayerPanel::~KivioLayerPanel()
99bool KivioLayerPanel::eventFilter(TQObject* o, TQEvent* ev)
101 if (o == list && (ev->type() == TQEvent::LayoutHint || ev->type() == TQEvent::Resize)) {
102 int s = list->width() - 2*(list->margin() + list->lineWidth());
103 s -= list->header()->sectionSize(0);
104 s -= list->header()->sectionSize(1);
105 s -= list->header()->sectionSize(2);
106 s -= list->header()->sectionSize(3);
107 list->header()->resizeSection(4,s);
108 list->triggerUpdate();
111 return TQWidget::eventFilter(o, ev);
114void KivioLayerPanel::addItem()
116 KivioPage* page = m_pView->activePage();
117 KivioLayer* layer =
new KivioLayer(page);
121 layer->setName(i18n(
"Layer %1").arg(
id));
122 page->addLayer(layer);
123 page->setCurLayer(layer);
125 m_pView->doc()->updateView(page);
127 KivioAddLayerCommand * cmd =
new KivioAddLayerCommand( i18n(
"Add Layer"), page, layer,
id );
128 m_pView->doc()->addCommand(cmd );
130 KivioLayerItem* item =
new KivioLayerItem(list, layer,
id++);
132 list->setCurrentItem(item);
135void KivioLayerPanel::removeItem()
137 KivioLayerItem* item = (KivioLayerItem*)list->currentItem();
138 if (!item || (m_pView->activePage()->layers()->count() <= 1))
143 m_pView->activePage()->removeCurrentLayer();
144 m_pView->doc()->updateView(m_pView->activePage());
149void KivioLayerPanel::renameItem()
151 KivioLayerItem* i = (KivioLayerItem*)list->currentItem();
155 KivioLayer* layer = i->data;
156 TQString oldText = layer->name();
159 TQString newName = KInputDialog::getText(i18n(
"Rename Layer"),
160 i18n(
"Layer name:"), oldText, &ok,
this);
163 layer->setName(newName);
164 KivioRenameLayerCommand *cmd =
new KivioRenameLayerCommand( i18n(
"Rename Layer"), layer, oldText, newName);
165 m_pView->doc()->addCommand( cmd );
171void KivioLayerPanel::upItem()
173 KivioLayerItem* item = (KivioLayerItem*)list->currentItem();
177 TQListViewItem* above = item->itemAbove();
181 KivioPage* page = m_pView->activePage();
182 KivioLayer* layer = item->data;
184 int pos = page->layers()->find(layer);
186 if(pos == (
static_cast<int>(page->layers()->count()) - 1))
189 layer = page->layers()->take();
193 page->layers()->insert(pos + 1, layer);
195 TQString t = above->text(5);
196 above->setText(5,item->text(5));
203 page->setCurLayer(layer);
204 m_pView->doc()->updateView(page);
207void KivioLayerPanel::downItem()
209 KivioLayerItem* item = (KivioLayerItem*)list->currentItem();
213 TQListViewItem* below = item->itemBelow();
217 KivioPage* page = m_pView->activePage();
218 KivioLayer* layer = item->data;
220 int pos = page->layers()->find(layer);
225 layer = page->layers()->take();
229 page->layers()->insert(pos - 1, layer);
231 TQString t = below->text(5);
232 below->setText(5,item->text(5));
239 page->setCurLayer(layer);
240 m_pView->doc()->updateView(page);
243void KivioLayerPanel::updateButtons(TQListViewItem* i)
246 actDel->setEnabled(
false);
247 actRename->setEnabled(
false);
248 actUp->setEnabled(
false);
249 actDown->setEnabled(
false);
251 if(m_pView->activePage()->layers()->count() > 1) {
252 actDel->setEnabled(
true);
254 actDel->setEnabled(
false);
257 actRename->setEnabled(
true);
258 actUp->setEnabled(i->itemAbove());
259 actDown->setEnabled(i->itemBelow());
263void KivioLayerPanel::itemClicked(TQListViewItem* i,
const TQPoint&,
int c)
269 KivioLayerItem* vi =
static_cast<KivioLayerItem*
>(i);
270 KivioLayer* layer = vi->data;
275 layer->setVisible(!layer->visible());
278 layer->setPrintable(!layer->printable());
281 layer->setEditable(!layer->editable());
284 layer->setConnectable(!layer->connectable());
291 m_pView->doc()->updateView(m_pView->activePage());
294void KivioLayerPanel::itemActivated(TQListViewItem* i)
299 KivioLayerItem* vi = (KivioLayerItem*)i;
301 KivioPage* page = m_pView->activePage();
302 page->setCurLayer(vi->data);
310 page->unselectAllStencils();
311 m_pView->doc()->updateView(page);
316void KivioLayerPanel::reset()
321 KivioPage* page = m_pView->activePage();
322 KivioLayer* layer = page->firstLayer();
323 TQListViewItem* ci = 0;
326 KivioLayerItem* i =
new KivioLayerItem(list, layer,
id++);
327 if (layer == page->curLayer())
329 layer = page->nextLayer();
333 ci = list->firstChild();
336 list->setSelected(ci,
true);
338 updateButtons(list->currentItem());
341#include "kivio_layer_panel.moc"