23 #include "../structtool.h"
24 #include "../structuresmanager.h"
25 #include "../structuredefinitionfile.h"
27 #include <KPushButton>
30 #include <QTreeWidget>
31 #include <QTreeWidgetItem>
36 #include <KConfigDialogManager>
38 using namespace Kasten2;
42 QHBoxLayout* baseLayout;
43 QVBoxLayout* tree1Layout;
44 QVBoxLayout* tree2Layout;
45 QVBoxLayout* leftRightLayout;
46 QVBoxLayout* upDownLayout;
48 baseLayout =
new QHBoxLayout();
50 tree1Layout =
new QVBoxLayout();
51 mTree1Label =
new QLabel(i18nc(
"@info:label",
"Installed structures:"),
this);
52 tree1Layout->addWidget(mTree1Label);
53 mTreeAvailable =
new QTreeWidget(
this);
54 mTreeAvailable->setHeaderHidden(
true);
55 mTreeAvailable->setSelectionMode(QAbstractItemView::ExtendedSelection);
56 mTreeAvailable->setColumnCount(2);
57 mTreeAvailable->setColumnHidden(1,
true);
58 tree1Layout->addWidget(mTreeAvailable);
60 tree2Layout =
new QVBoxLayout();
61 mTree2Label =
new QLabel(i18nc(
"@info:label",
"Used structures:"),
this);
62 tree2Layout->addWidget(mTree2Label);
63 mTreeSelected =
new QTreeWidget(
this);
64 mTreeSelected->setHeaderHidden(
true);
65 mTreeSelected->setSelectionMode(QAbstractItemView::ExtendedSelection);
66 mTreeSelected->setColumnCount(2);
67 mTreeSelected->setColumnHidden(1,
true);
68 tree2Layout->addWidget(mTreeSelected);
70 leftRightLayout =
new QVBoxLayout();
71 leftRightLayout->addStretch();
72 mRightButton =
new KPushButton(KIcon(QLatin1String(
"arrow-right")), QString(),
this);
73 leftRightLayout->addWidget(mRightButton);
74 mLeftButton =
new KPushButton(KIcon(QLatin1String(
"arrow-left")), QString(),
this);
75 leftRightLayout->addWidget(mLeftButton);
76 leftRightLayout->addStretch();
78 upDownLayout =
new QVBoxLayout();
79 upDownLayout->addStretch();
80 mUpButton =
new KPushButton(KIcon(QLatin1String(
"arrow-up")), QString(),
this);
81 upDownLayout->addWidget(mUpButton);
82 mDownButton =
new KPushButton(KIcon(QLatin1String(
"arrow-down")), QString(),
this);
83 upDownLayout->addWidget(mDownButton);
84 upDownLayout->addStretch();
86 baseLayout->addLayout(tree1Layout);
87 baseLayout->addLayout(leftRightLayout);
88 baseLayout->addLayout(tree2Layout);
89 baseLayout->addLayout(upDownLayout);
90 setLayout(baseLayout);
92 connect(mLeftButton, SIGNAL(pressed()), SLOT(
moveLeft()));
93 connect(mRightButton, SIGNAL(pressed()), SLOT(
moveRight()));
94 connect(mUpButton, SIGNAL(pressed()), SLOT(
moveUp()));
95 connect(mDownButton, SIGNAL(pressed()), SLOT(
moveDown()));
100 QRegExp regex(QLatin1String(
"'(.+)':'(.+)'"));
101 foreach(
const QString& s, selected)
103 int pos = regex.indexIn(s);
106 QString pluginName = regex.cap(1);
107 QString structName = regex.cap(2);
108 if (structName == QLatin1String(
"*")) {
110 for (
int i = 0; i < mTreeAvailable->topLevelItemCount(); i++)
112 QTreeWidgetItem* avail = mTreeAvailable->topLevelItem(i);
113 if (avail->text(0) != pluginName)
115 for (
int i = 0; i < avail->childCount(); i++)
117 QTreeWidgetItem* selStruct = avail->child(i);
118 QTreeWidgetItem* item =
new QTreeWidgetItem(mTreeSelected,
119 QStringList() << selStruct->text(0) << pluginName);
120 mTreeSelected->addTopLevelItem(item);
126 QTreeWidgetItem* item =
new QTreeWidgetItem(mTreeSelected,
127 QStringList() << structName << pluginName);
128 mTreeSelected->addTopLevelItem(item);
139 void StructureAddRemoveWidget::buildAvailableList()
147 QString pluginName = def->
pluginInfo().pluginName();
150 QTreeWidgetItem* item =
new QTreeWidgetItem(mTreeAvailable,
151 QStringList() << def->
pluginInfo().pluginName() << pluginName);
154 QTreeWidgetItem* subItem =
new QTreeWidgetItem(item,
155 QStringList() << name << pluginName);
156 item->addChild(subItem);
158 availableItems.append(item);
160 mTreeAvailable->addTopLevelItems(availableItems);
167 bool changed =
false;
168 foreach(QTreeWidgetItem* item,selected)
170 delete mTreeSelected->takeTopLevelItem(
171 mTreeSelected->indexOfTopLevelItem(item));
181 bool changed =
false;
182 foreach(
const QTreeWidgetItem* item,selected)
186 QTreeWidgetItem* moveOver =
new QTreeWidgetItem(mTreeSelected,
187 QStringList() << item->text(0) << item->text(1));
189 mTreeSelected->addTopLevelItem(moveOver);
200 bool changed =
false;
202 foreach(QTreeWidgetItem* item,selected)
204 int idx = mTreeSelected->indexOfTopLevelItem(item);
205 int newIdx = qMax(0, idx - 1);
206 mTreeSelected ->insertTopLevelItem(newIdx,
207 mTreeSelected->takeTopLevelItem(idx));
209 firstIndex = firstIndex == -1 ? newIdx : firstIndex;
213 if (firstIndex != -1)
214 mTreeSelected->setCurrentItem(mTreeSelected->topLevelItem(firstIndex));
220 bool changed =
false;
222 int maxItmCount = mTreeSelected->topLevelItemCount();
223 foreach(QTreeWidgetItem* item,selected)
225 int idx = mTreeSelected->indexOfTopLevelItem(item);
226 int newIdx = qMin(idx + 1, maxItmCount - 1);
227 mTreeSelected ->insertTopLevelItem(newIdx,
228 mTreeSelected->takeTopLevelItem(idx));
230 firstIndex = firstIndex == -1 ? newIdx : firstIndex;
234 if (firstIndex != -1)
235 mTreeSelected->setCurrentItem(mTreeSelected->topLevelItem(firstIndex));
237 void StructureAddRemoveWidget::syncData()
240 for (
int i = 0; i < mTreeSelected->topLevelItemCount(); ++i)
242 QTreeWidgetItem* item = mTreeSelected->topLevelItem(i);
243 QString dataStr = QString::fromLatin1(
"\'%1\':\'%2\'").arg(item->text(1), item->text(0));
244 strings.append(dataStr);
246 kDebug() <<
"selection changed to: " << strings;
253 mTreeAvailable->clear();
254 buildAvailableList();
261 QString pluginName = def->
pluginInfo().pluginName();
264 plugins << pluginName;
266 bool changed =
false;
268 kDebug() <<
"paths = " << plugins;
269 for (
int i = 0; i < mTreeSelected->topLevelItemCount(); ++i)
271 QTreeWidgetItem* item = mTreeSelected->topLevelItem(i);
273 if (!plugins.contains(item->text(1)))
275 kDebug() <<
"removed item: " << QString::fromLatin1(
"\'%1\':\'%2\'").arg(item->text(1),
279 toRemove.append(item);
283 kDebug() <<
"item " << QString::fromLatin1(
"\'%1\':\'%2\'").arg(item->text(1),
284 item->text(0)) <<
"still loaded -> keep";
287 foreach(QTreeWidgetItem* itm,toRemove)
289 kDebug() <<
"item " << QString::fromLatin1(
"\'%1\':\'%2\'").arg(itm->text(1),
290 itm->text(0)) <<
"removed";
291 delete mTreeSelected->takeTopLevelItem(mTreeSelected->indexOfTopLevelItem(itm));
This class takes care of all the XML parsing and stores the result.
const QList< StructureDefinitionFile * > structureDefs() const
QStringList structureNames() const
const KPluginInfo & pluginInfo() const