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